diff --git a/.gitignore b/.gitignore index 9a5aced..5ef6a52 100644 --- a/.gitignore +++ b/.gitignore @@ -1,139 +1,41 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.* -!.env.example - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Sveltekit cache directory -.svelte-kit/ - -# vitepress build output -**/.vitepress/dist - -# vitepress cache directory -**/.vitepress/cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# Firebase cache directory -.firebase/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v3 +# dependencies +/node_modules +/.pnp .pnp.* .yarn/* !.yarn/patches !.yarn/plugins !.yarn/releases -!.yarn/sdks !.yarn/versions -# Vite logs files -vite.config.js.timestamp-* -vite.config.ts.timestamp-* +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/README.md b/README.md index 2830655..66bb426 100644 --- a/README.md +++ b/README.md @@ -1 +1,36 @@ -# esp32 \ No newline at end of file +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/app/comparacao/page.jsx b/app/comparacao/page.jsx new file mode 100644 index 0000000..48f725d --- /dev/null +++ b/app/comparacao/page.jsx @@ -0,0 +1,236 @@ +"use client"; + +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; +import { useState } from "react"; +import Link from "next/link"; +import seriesData from "@/public/series.json"; + +export default function Comparacao() { + const [selectedSeries, setSelectedSeries] = useState(["ESP32", "ESP32-S3"]); + const series = Object.entries(seriesData); + + const toggleSeries = (seriesKey) => { + if (selectedSeries.includes(seriesKey)) { + if (selectedSeries.length > 2) { + setSelectedSeries(selectedSeries.filter(s => s !== seriesKey)); + } + } else { + if (selectedSeries.length < 4) { + setSelectedSeries([...selectedSeries, seriesKey]); + } + } + }; + + const compareFields = [ + { category: "Geral", fields: [ + { key: "nome_completo", label: "Nome Completo" }, + { key: "descricao", label: "Descrição" }, + ]}, + { category: "Processador", fields: [ + { key: "arquitetura", label: "Arquitetura" }, + { key: "nucleos", label: "Núcleos" }, + { key: "frequencia", label: "Frequência" }, + { key: "coprocessador_ulp", label: "Coprocessador ULP" }, + { key: "aceleradores_ia", label: "Aceleradores de IA" }, + ]}, + { category: "Conectividade", fields: [ + { key: "wifi", label: "Wi-Fi" }, + { key: "bluetooth", label: "Bluetooth" }, + { key: "zigbee_thread", label: "Zigbee/Thread" }, + { key: "matter", label: "Matter" }, + { key: "ethernet", label: "Ethernet" }, + ]}, + { category: "Memória", fields: [ + { key: "memoria_sram", label: "SRAM" }, + { key: "memoria_sram_rtc", label: "SRAM RTC" }, + { key: "memoria_rom", label: "ROM" }, + { key: "flash_externa", label: "Flash Externa" }, + { key: "psram_externa", label: "PSRAM Externa" }, + ]}, + { category: "Periféricos Digitais", fields: [ + { key: "gpio", label: "GPIO" }, + { key: "uart", label: "UART" }, + { key: "spi", label: "SPI" }, + { key: "i2c", label: "I²C" }, + { key: "i2s", label: "I²S" }, + { key: "pwm", label: "PWM" }, + { key: "can", label: "CAN" }, + { key: "usb", label: "USB" }, + { key: "sdio", label: "SDIO" }, + ]}, + { category: "Periféricos Analógicos", fields: [ + { key: "adc", label: "ADC" }, + { key: "dac", label: "DAC" }, + { key: "touch", label: "Touch Capacitivo" }, + { key: "sensor_hall", label: "Sensor Hall" }, + { key: "sensor_temperatura", label: "Sensor de Temperatura" }, + ]}, + { category: "Interfaces Especiais", fields: [ + { key: "lcd", label: "LCD" }, + { key: "camera", label: "Câmera" }, + { key: "mipi_csi", label: "MIPI CSI" }, + { key: "mipi_dsi", label: "MIPI DSI" }, + { key: "ethernet_mac", label: "Ethernet MAC" }, + ]}, + { category: "Especificações Ambientais", fields: [ + { key: "temperatura_operacao", label: "Temp. Operação" }, + { key: "temperatura_armazenamento", label: "Temp. Armazenamento" }, + ]}, + ]; + + const renderValue = (value) => { + if (!value || value === "Não") { + return ✗; + } + if (value === "Sim") { + return ✓; + } + return {value}; + }; + + return ( +
+
+ +
+
+
+
+ 📊 Compare Séries +
+
+ +

+ Comparação de Séries +

+ +

+ Compare especificações técnicas entre diferentes séries ESP32 para escolher o ideal para seu projeto +

+
+ +
+

+ Selecione as Séries (2-4) +

+
+ {series.map(([key, seriesItem]) => ( + + ))} +
+

+ {selectedSeries.length} de 4 séries selecionadas +

+
+ +
+
+ + + + + {selectedSeries.map(seriesKey => { + const seriesItem = seriesData[seriesKey]; + return ( + + ); + })} + + + + {compareFields.map(({ category, fields }) => ( + <> + + + + {fields.map(({ key, label }) => ( + + + {selectedSeries.map(seriesKey => { + const seriesItem = seriesData[seriesKey]; + const value = seriesItem[key]; + return ( + + ); + })} + + ))} + + ))} + +
+ Especificação + +
+ {seriesItem.icone} + {seriesKey} + +
+
+ {category} +
+ {label} + + {renderValue(value)} +
+
+
+ +
+ {selectedSeries.map(seriesKey => { + const seriesItem = seriesData[seriesKey]; + return ( + +
{seriesItem.icone}
+ +

{seriesKey}

+ +

Datasheet Oficial

+
+ Abrir PDF + + + + + + ); + })} +
+
+ +
+ ); +} \ No newline at end of file diff --git a/app/frameworks/[key]/page.jsx b/app/frameworks/[key]/page.jsx new file mode 100644 index 0000000..546269d --- /dev/null +++ b/app/frameworks/[key]/page.jsx @@ -0,0 +1,188 @@ +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; +import Link from "next/link"; +import frameworksData from "@/public/frameworks.json"; +import { notFound } from "next/navigation"; + +export default function FrameworkDetail({ params }) { + const { key } = params; + const framework = frameworksData[key]; + + if (!framework) { + notFound(); + } + + const features = framework.caracteristicas || []; + const useCases = framework.casos_uso || []; + + return ( +
+
+ +
+
+ + ← Voltar para Frameworks + + +
+
+
+ {framework.icone} +
+

+ {framework.nome} +

+

{framework.nome_completo}

+ + {framework.tipo} + +
+
+ +
+ {framework.documentacao && ( + + 📘 Documentação + + )} + + {framework.repositorio && ( + + 🔗 Repositório + + )} +
+
+ +

+ {framework.descricao} +

+
+
+ +
+
+

LINGUAGEM

+

{framework.linguagem}

+

Principal

+
+ +
+

TIPO

+

{framework.tipo}

+

Categoria

+
+ +
+

FUNÇÃO PRINCIPAL

+

{framework.funcao_principal}

+
+
+ +
+
+

+ ✨ Principais Características +

+
    + {features.map((f, i) => ( +
  • {f}
  • + ))} +
+ +

+ 📦 Casos de Uso +

+
+ {useCases.map((u, i) => ( +
{u}
+ ))} +
+
+ +
+

+ 📋 Detalhes Rápidos +

+
+
Nome completo: {framework.nome_completo}
+
Linguagem: {framework.linguagem}
+
Tipo: {framework.tipo}
+
Cor (tema):
+
+
+
+ + {framework.exemplo_codigo && ( +
+

+ Exemplo de Código +

+
+
+                                {framework.exemplo_codigo}
+                            
+
+
+ )} + +
+ {framework.documentacao && ( + + 📚 Documentação Oficial + + )} + + {framework.repositorio && ( + + 💻 Repositório no GitHub + + )} +
+
+ +
+ ); +} + +export async function generateMetadata({ params }) { + const { key } = params; + const framework = frameworksData[key]; + + if (!framework) { + return { title: "Framework não encontrado" }; + } + + return { + title: `${framework.nome} - ${framework.nome_completo}`, + description: framework.descricao, + }; +} + +export async function generateStaticParams() { + return Object.keys(frameworksData).map((key) => ({ key })); +} \ No newline at end of file diff --git a/app/frameworks/page.jsx b/app/frameworks/page.jsx new file mode 100644 index 0000000..08055d3 --- /dev/null +++ b/app/frameworks/page.jsx @@ -0,0 +1,192 @@ +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; +import Link from "next/link"; +import frameworksData from "@/public/frameworks.json"; + +export default function Frameworks() { + const frameworks = Object.entries(frameworksData); + + return ( +
+
+ +
+
+

+ Frameworks ESP32 +

+ +

+ Descubra os frameworks e bibliotecas disponíveis para ESP32. De desenvolvimento geral a + aplicações especializadas em áudio, visão computacional, IA e IoT. +

+
+ +
+ {frameworks.map(([key, framework]) => ( + +
+ +
+
+ {framework.icone} +
+ + {framework.linguagem} + +
+
+ +

+ {framework.nome} +

+ +

+ {framework.nome_completo} +

+ +

+ {framework.descricao} +

+
+ +
+
+ + {framework.tipo} + +
+ +
+

+ 🎯 Função Principal +

+

+ {framework.funcao_principal} +

+
+ +
+

+ ⚡ Características +

+
    + {framework.caracteristicas.slice(0, 3).map((carac, idx) => ( +
  • + ▪ + {carac} +
  • + ))} + {framework.caracteristicas.length > 3 && ( +
  • + +{framework.caracteristicas.length - 3} mais... +
  • + )} +
+
+ +
+

+ 💼 Casos de Uso +

+
+ {framework.casos_uso.slice(0, 3).map((caso, idx) => ( + + {caso} + + ))} +
+
+
+ +
+
+ Ver Detalhes e Exemplos + → +
+
+
+ + ))} +
+ +
+
+

+ 🎓 Iniciante no ESP32? +

+

+ Se você está começando, recomendamos iniciar com Arduino ou MicroPython + para prototipagem rápida, ou ESP-IDF para projetos profissionais com controle total. +

+
+ + 📘 Arduino + + + 🐍 MicroPython + + + ⚙️ ESP-IDF + +
+
+ +
+

+ 🚀 Aplicações Especializadas? +

+

+ Para projetos específicos, explore frameworks especializados como ESP-ADF (áudio), + ESP-WHO (visão), ESP-NN (IA) ou ESP-Matter (smart home). +

+
+ + 🎵 Áudio + + + 📷 Visão + + + 🧠 IA + + + 🏠 Smart Home + +
+
+
+ +
+
+
+

+ 💡 Precisa de Ajuda para Escolher? +

+

+ Compare frameworks, veja exemplos de código e entenda qual se adequa melhor ao seu projeto. +

+
+ + 📊 Comparar Frameworks + +
+
+
+ +
+ ); +} \ No newline at end of file diff --git a/app/globals.css b/app/globals.css new file mode 100644 index 0000000..f1d8c73 --- /dev/null +++ b/app/globals.css @@ -0,0 +1 @@ +@import "tailwindcss"; diff --git a/app/layout.jsx b/app/layout.jsx new file mode 100644 index 0000000..0458f97 --- /dev/null +++ b/app/layout.jsx @@ -0,0 +1,20 @@ +import { Roboto } from "next/font/google"; +import "./globals.css"; + +const roboto = Roboto({ subsets: ["latin"] }); + +export const metadata = { + title: "ESPDocs", + description: "Documentação não oficial do ESP32 em português.", + authors: { name: "Lucas Rayan Guerra", url: "https://cienciaembarcada.com.br" }, +}; + +export default function RootLayout({ children }) { + return ( + + + {children} + + + ); +} diff --git a/app/page.jsx b/app/page.jsx new file mode 100644 index 0000000..3e369d7 --- /dev/null +++ b/app/page.jsx @@ -0,0 +1,150 @@ +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; +import Link from "next/link"; + +export default function Sobre() { + const features = [ + { icon: "📚", title: "Documentação Curada", desc: "Conteúdos organizados por níveis — do iniciante ao avançado." }, + { icon: "🔧", title: "Exemplos Práticos", desc: "Projetos e trechos de código para aprender fazendo." }, + { icon: "🌐", title: "Comunidade", desc: "Contribuições abertas e canal para dúvidas e trocas." }, + { icon: "♿", title: "Acessibilidade", desc: "Textos claros, contraste adequado e navegação por teclado." }, + ]; + + return ( +
+ + Ir para o conteúdo + + +
+ +
+
+
+ +
+ +
+

+ Sobre o ESPDocs +

+ +

+ Uma documentação não oficial, em português, feita por e para a comunidade — com foco em clareza, exemplos práticos e colaboração aberta. +

+ +
+ + ← Voltar + + + + Contribuir no GitHub + +
+
+
+ +
+
+
+

Nossa missão

+

+ Facilitar o aprendizado e acelerar projetos com ESP32 por meio de documentação clara, exemplos testados e comparativos práticos. + Priorizamos traduções fiéis, explicações passo a passo e dicas baseadas em experiência real de desenvolvimento. +

+
+ +
+

Por que o ESPDocs?

+

+ Informações técnicas frequentemente estão dispersas entre datasheets, fóruns e repositórios. O ESPDocs centraliza esse conteúdo em português, com foco em aplicabilidade. +

+ +
    + {features.map((f) => ( +
  • + +
    +

    {f.title}

    +

    {f.desc}

    +
    +
  • + ))} +
+
+ +
+

Como contribuir

+

+ Correções, traduções e novos exemplos são bem-vindos. Abra uma issue ou um pull request no repositório. Buscamos clareza nas descrições e exemplos testáveis. +

+
    +
  1. Fork do repositório e crie uma branch clara.
  2. +
  3. Adicione exemplos ou corrija o conteúdo com referências quando possível.
  4. +
  5. Abra um PR e descreva o que foi alterado.
  6. +
+
+ +
+

Acessibilidade

+

+ O site prioriza leitura, contraste legível e navegação por teclado. Se encontrar barreiras, por favor relate-nos para que possamos melhorar. +

+
+
+ + +
+
+ +
+ ); +} \ No newline at end of file diff --git a/app/series/[key]/page.jsx b/app/series/[key]/page.jsx new file mode 100644 index 0000000..5587e6a --- /dev/null +++ b/app/series/[key]/page.jsx @@ -0,0 +1,306 @@ +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; +import Link from "next/link"; +import seriesData from "@/public/series.json"; +import { notFound } from "next/navigation"; +import ConnectionsDiagram from "@/components/ConnectionsDiagram"; +import Image from "next/image"; +import SeriesTabMenu from "@/components/SeriesTabMenu"; + +export default function SerieDetail({ params }) { + const { key } = params; + const serie = seriesData[key]; + + if (!serie) { + notFound(); + } + + let conexoes = []; + try { + conexoes = require(`@/public/conexoes/${key}.json`); + } catch (error) { + console.log(`Arquivo de conexões não encontrado para ${key}`); + } + + // Development board image mapping + const devBoardImages = { + "ESP32": "/placas/esp32.png", + "ESP32-S2": "/placas/esp32-s2.png", + "ESP32-S3": "/placas/esp32-s3.png", + "ESP32-C3": "/placas/esp32-c3.png", + "ESP32-C5": "/placas/esp32-c5.png", + "ESP32-C6": "/placas/esp32-c6.png", + "ESP32-H2": "/placas/esp32-h2.png", + "ESP32-C2": "/placas/esp32-c2.png", + "ESP32-P4": "/placas/esp32-p4.png", + }; + + const seriesKeys = Object.keys(seriesData); + const currentIndex = seriesKeys.indexOf(key); + const previousKey = currentIndex > 0 ? seriesKeys[currentIndex - 1] : null; + const nextKey = currentIndex < seriesKeys.length - 1 ? seriesKeys[currentIndex + 1] : null; + + const processadorSpecs = [ + { label: "Arquitetura", value: serie.arquitetura, icon: "🔧" }, + { label: "Núcleos", value: serie.nucleos, icon: "⚙️" }, + { label: "Frequência", value: serie.frequencia, icon: "🚀" }, + { label: "Coprocessador ULP", value: serie.coprocessador_ulp || "Não", icon: "💤" }, + { label: "Aceleradores IA", value: serie.aceleradores_ia || "Não", icon: "🤖" }, + ]; + + const conectividadeSpecs = [ + { label: "Wi-Fi", value: serie.wifi || "Não", icon: "📶" }, + { label: "Bluetooth", value: serie.bluetooth || "Não", icon: "📱" }, + { label: "Zigbee/Thread", value: serie.zigbee_thread || "Não", icon: "🌐" }, + { label: "Matter", value: serie.matter || "Não", icon: "🏠" }, + { label: "Ethernet", value: serie.ethernet || serie.ethernet_mac || "Não", icon: "🔌" }, + { label: "CAN", value: serie.can || "Não", icon: "🚗" }, + ]; + + const memoriaSpecs = [ + { label: "SRAM", value: serie.memoria_sram, icon: "💾" }, + { label: "SRAM RTC", value: serie.memoria_sram_rtc, icon: "⏰" }, + { label: "ROM", value: serie.memoria_rom, icon: "📀" }, + { label: "Flash Externa", value: serie.flash_externa, icon: "💿" }, + { label: "PSRAM Externa", value: serie.psram_externa || "Não", icon: "🎯" }, + ]; + + const perifericos = [ + { label: "GPIO", value: serie.gpio, icon: "📍" }, + { label: "ADC", value: serie.adc, icon: "📊" }, + { label: "DAC", value: serie.dac || "Não", icon: "🔊" }, + { label: "Touch", value: serie.touch || "Não", icon: "👆" }, + { label: "UART", value: serie.uart, icon: "💬" }, + { label: "SPI", value: serie.spi, icon: "🔄" }, + { label: "I2C", value: serie.i2c, icon: "🔗" }, + { label: "I2S", value: serie.i2s, icon: "🎵" }, + { label: "PWM", value: serie.pwm, icon: "〰️" }, + { label: "USB", value: serie.usb || "Não", icon: "🔌" }, + ]; + + const interfacesEspeciais = []; + if (serie.lcd) interfacesEspeciais.push({ label: "LCD", value: serie.lcd, icon: "🖥️" }); + if (serie.camera) interfacesEspeciais.push({ label: "Camera", value: serie.camera, icon: "📷" }); + if (serie.mipi_csi) interfacesEspeciais.push({ label: "MIPI CSI", value: serie.mipi_csi, icon: "📹" }); + if (serie.mipi_dsi) interfacesEspeciais.push({ label: "MIPI DSI", value: serie.mipi_dsi, icon: "🖼️" }); + if (serie.sdio) interfacesEspeciais.push({ label: "SDIO", value: serie.sdio, icon: "💳" }); + if (serie.sensor_hall) interfacesEspeciais.push({ label: "Sensor Hall", value: serie.sensor_hall, icon: "🧲" }); + if (serie.sensor_temperatura) interfacesEspeciais.push({ label: "Sensor Temperatura", value: serie.sensor_temperatura, icon: "🌡️" }); + + const tabs = [ + { + id: 'connections', + label: 'Diagrama de Conexões', + available: conexoes.length > 0, + content: ( +
+ +
+ ) + }, + { + id: 'devboard', + label: 'Placa de Desenvolvimento', + available: devBoardImages[key], + content: ( +
+

+ 🔧 + Placa de Desenvolvimento Oficial +

+
+
+ {`${key} +

+ {key} - Placa de desenvolvimento oficial da Espressif +

+
+
+
+ ) + }, + { + id: 'specs', + label: 'Especificações', + available: true, + content: ( +
+ + + + + {interfacesEspeciais.length > 0 && ( + + )} + +
+ ) + } + ]; + + return ( +
+
+ +
+
+ + ← Voltar para Séries + + +
+
+
+ {serie.icone} +
+

+ {key} +

+

{serie.nome_completo}

+ + {serie.arquitetura} + +
+
+ + + 📄 Datasheet Oficial + +
+ +

+ {serie.descricao} +

+
+
+ +
+
+

PROCESSADOR

+

{serie.nucleos.includes("2") ? "Dual-Core" : "Single-Core"}

+

{serie.frequencia}

+
+ +
+

MEMÓRIA SRAM

+

{serie.memoria_sram}

+

+ {serie.memoria_sram_rtc} RTC

+
+ +
+

GPIO

+

{serie.gpio}

+

Pinos disponíveis

+
+
+ + + +
+ {previousKey ? ( + + ← +
+

Anterior

+

{previousKey}

+
+ + ) : ( +
+ )} + + + 📊 Comparar Séries + + + {nextKey ? ( + +
+

Próximo

+

{nextKey}

+
+ → + + ) : ( +
+ )} +
+
+ +
+ ); +} + +function SpecSection({ title, specs, cor }) { + return ( +
+

+ {title} +

+
+ {specs.map((spec, index) => ( +
+ {spec.icon} +
+

{spec.label}

+

{spec.value}

+
+
+ ))} +
+
+ ); +} + +export async function generateMetadata({ params }) { + const { key } = params; + const serie = seriesData[key]; + + if (!serie) { + return { + title: "Série não encontrada", + }; + } + + return { + title: `${key} - ${serie.nome_completo}`, + description: serie.descricao, + }; +} + +export async function generateStaticParams() { + return Object.keys(seriesData).map((key) => ({ + key: key, + })); +} \ No newline at end of file diff --git a/app/series/page.jsx b/app/series/page.jsx new file mode 100644 index 0000000..7b57125 --- /dev/null +++ b/app/series/page.jsx @@ -0,0 +1,133 @@ +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; +import Link from "next/link"; +import seriesData from "@/public/series.json"; + +export default function Series() { + const series = Object.entries(seriesData); + + return ( +
+
+ +
+
+

+ Séries ESP32 +

+ +

+ Explore toda a família ESP32. Cada série foi projetada para atender necessidades específicas, + desde projetos simples até aplicações de IA e IoT avançadas. +

+
+ +
+ {series.map(([key, serie]) => ( + +
+ +
+
+ {serie.icone} + + {serie.arquitetura.includes("RISC-V") ? "RISC-V" : "Xtensa"} + +
+ +

+ {key} +

+ +

+ {serie.descricao} +

+
+ +
+
+ ⚙️ Núcleos: + {serie.nucleos} +
+ +
+ 🚀 Frequência: + {serie.frequencia} +
+ +
+ 💾 SRAM: + {serie.memoria_sram} +
+ +
+ 📶 Wi-Fi: + + {String(serie.wifi).includes("Não") ? "❌" : "✅"} + +
+ +
+ 📱 Bluetooth: + + {serie.bluetooth === "Não" ? "❌" : "✅"} + +
+ + {serie.aceleradores_ia && ( +
+ + 🤖 Aceleradores IA + +
+ )} + + {serie.matter === "Sim" && ( +
+ + 🏠 Suporte Matter + +
+ )} +
+ +
+
+ Ver Detalhes + → +
+
+
+ + ))} +
+ +
+

+ 💡 Não sabe qual escolher? +

+

+ Compare as especificações de cada série para encontrar a mais adequada ao seu projeto. + Considere requisitos de conectividade, processamento e recursos específicos. +

+
+ + 📊 Comparar Séries + +
+
+
+ +
+ ); +} \ No newline at end of file diff --git a/app/sobre/page.jsx b/app/sobre/page.jsx new file mode 100644 index 0000000..e116ad3 --- /dev/null +++ b/app/sobre/page.jsx @@ -0,0 +1,45 @@ +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; +import Link from "next/link"; + +export default function Sobre() { + return ( +
+
+ +
+
+
+ ← Voltar +
+ +

+ Sobre o ESPDocs +

+ +

+ O ESPDocs nasceu da paixão por explorar o potencial dos microcontroladores ESP32 e da vontade de compartilhar conhecimento de forma acessível e colaborativa. Criado por um entusiasta e desenvolvedor com mais de quatro anos de experiência prática com a plataforma, o projeto tem como propósito reunir, organizar e traduzir informações técnicas — muitas vezes dispersas — em um só lugar. +

+ +

+ Mais do que uma simples documentação não oficial, o ESPDocs é um espaço vivo de aprendizado. Aqui, cada detalhe sobre o hardware, frameworks, protocolos e boas práticas de desenvolvimento é tratado com cuidado e clareza, para que qualquer pessoa — do iniciante ao profissional — possa compreender e aplicar. +

+ +

+ A iniciativa surgiu com um foco especial na comunidade brasileira, que cresce e se destaca no cenário da eletrônica e IoT. O objetivo é facilitar o acesso ao conhecimento técnico em português, incentivar a experimentação e fortalecer a troca de experiências entre desenvolvedores, estudantes e pesquisadores. +

+ +

+ O ESPDocs é, acima de tudo, uma homenagem à curiosidade e ao espírito colaborativo que impulsionam a inovação. +

+ +

+ ESPDocs — Documentando o futuro da IoT, em código aberto e em português. +

+
+
+ +
+ ); +} \ No newline at end of file diff --git a/components/ConnectionsDiagram.jsx b/components/ConnectionsDiagram.jsx new file mode 100644 index 0000000..9984afd --- /dev/null +++ b/components/ConnectionsDiagram.jsx @@ -0,0 +1,430 @@ +"use client"; + +import { useState, useEffect } from "react"; + +const FILTER_CATEGORIES = [ + { id: "All", name: "Todos", color: "#64748b" }, + { id: "Ground", name: "Terra (GND)", color: "#64748b" }, + { id: "Power", name: "Alimentação", color: "#ef4444" }, + { id: "RTC", name: "RTC", color: "#f59e0b" }, + { id: "GPIO", name: "GPIO", color: "#22c55e" }, + { id: "ADC", name: "ADC", color: "#ec4899" }, + { id: "DAC", name: "DAC", color: "#a855f7" }, + { id: "Touch", name: "Touch", color: "#06b6d4" }, + { id: "UART", name: "UART", color: "#3b82f6" }, + { id: "SPI", name: "SPI", color: "#ef4444" }, + { id: "I2C", name: "I2C", color: "#10b981" }, + { id: "PWM", name: "PWM", color: "#f97316" }, + { id: "USB", name: "USB", color: "#8b5cf6" }, + { id: "Clock", name: "Clock", color: "#eab308" }, + { id: "JTAG", name: "JTAG", color: "#8b5cf6" }, + { id: "Strapping", name: "Inicialização", color: "#dc2626" }, +]; + +export default function ConnectionsDiagram({ connections, color }) { + const [activeFilter, setActiveFilter] = useState("All"); + const [selectedConnection, setSelectedConnection] = useState(null); + const [hoveredConnection, setHoveredConnection] = useState(null); + + const isConnectionVisible = (connection) => { + if (activeFilter === "All") return true; + return connection.categorias.includes(activeFilter); + }; + + const getCategoryColor = (category) => { + const filter = FILTER_CATEGORIES.find((f) => f.id === category); + return filter?.color || "#64748b"; + }; + + useEffect(() => { + const handleEscape = (e) => { + if (e.key === "Escape") setSelectedConnection(null); + }; + + if (selectedConnection) { + document.addEventListener("keydown", handleEscape); + document.body.style.overflow = "hidden"; + } + + return () => { + document.removeEventListener("keydown", handleEscape); + document.body.style.overflow = "unset"; + }; + }, [selectedConnection]); + + if (!connections || connections.length === 0) { + return ( +
+
+ + + +
+ +

+ Diagrama de conexões indisponível +

+ +

+ Este modelo ainda não possui dados de conexão +

+
+ ); + } + + return ( +
+
+

+ 📍 + Diagrama de Conexões Interativo +

+

+ Clique em qualquer conexão para ver informações detalhadas ou use filtros para destacar funções específicas. +

+
+ +
+
+ + + + +

+ Filtre por Função +

+ + {activeFilter !== "All" && ( + + {connections.filter(isConnectionVisible).length} de {connections.length} conexões + + )} +
+ +
+ {FILTER_CATEGORIES.map((filter) => { + const isActive = activeFilter === filter.id; + return ( + + ); + })} +
+
+ +
+
+ {connections.map((connection, index) => { + const visible = isConnectionVisible(connection); + const isHovered = hoveredConnection === index; + return ( + + ); + })} +
+
+ + {connections.some(c => c.restricoes) && ( +
+
+
+
+ + + +
+
+ +
+

+ Informações Importantes +

+
    +
  • + • + + Conexões com ícones de aviso possuem restrições de uso. Clique para mais detalhes. + +
  • +
  • + • + + Sempre consulte o datasheet oficial antes de usar conexões com funções especiais. + +
  • +
+
+
+
+ )} + + {selectedConnection && ( +
setSelectedConnection(null)} + role="dialog" + aria-modal="true" + aria-labelledby="modal-title" + > +
e.stopPropagation()} + > +
+
+
+
+ {typeof selectedConnection.numero === "number" + ? selectedConnection.numero + : selectedConnection.numero.substring(0, 4)} +
+
+ +

+ Conexão {selectedConnection.numero} +

+
+
+ + +
+
+ +
+
+

+ + + + Categorias +

+ +
+ {selectedConnection.categorias.map((cat) => ( + {cat} + ))} +
+
+ +
+

+ + + + Funções da Conexão +

+ +
+
    + {selectedConnection.funcoes.map((func, index) => ( +
  • + + {func} +
  • + ))} +
+
+
+ + {selectedConnection.restricoes && ( +
+
+
+
+ + + +
+
+
+

+ Alertas Importantes +

+

+ {selectedConnection.restricoes} +

+
+
+
+ )} +
+ +
+ +
+
+
+ )} + +
+

Sobre a Matriz de Conexões Flexível

+

+ O ESP32 possui uma matriz de conexões flexível que permite mapear diversas funções para múltiplos pinos. + Isso significa que muitas conexões podem ser configuradas para desempenhar diferentes papéis, dependendo das necessidades do seu projeto. + Consulte a documentação oficial para entender como aproveitar ao máximo essa flexibilidade. +

+
+ + +
+ ); +} \ No newline at end of file diff --git a/components/Footer.jsx b/components/Footer.jsx new file mode 100644 index 0000000..36e5d95 --- /dev/null +++ b/components/Footer.jsx @@ -0,0 +1,35 @@ +"use client"; + +export default function Footer() { + return ( + + ); +} \ No newline at end of file diff --git a/components/Header.jsx b/components/Header.jsx new file mode 100644 index 0000000..6be1cd7 --- /dev/null +++ b/components/Header.jsx @@ -0,0 +1,121 @@ +"use client"; + +import { usePathname } from "next/navigation"; +import { useState } from "react"; +import Link from "next/link"; + +import Button from "@mui/material/Button"; +import Drawer from "@mui/material/Drawer"; +import List from "@mui/material/List"; +import ListItem from "@mui/material/ListItem"; + +import MenuIcon from "@mui/icons-material/Menu"; +import HomeIcon from "@mui/icons-material/Home"; +import AboutIcon from "@mui/icons-material/Info"; +import ModelsIcon from "@mui/icons-material/Memory"; +import FrameworksIcon from "@mui/icons-material/Apps"; +import CompareIcon from "@mui/icons-material/CompareArrows"; + +export default function Header() { + const [drawerOpen, setDrawerOpen] = useState(false); + + const pathname = usePathname(); + const menuItems = [ + { text: "Início", href: "/", icon: }, + { text: "Sobre o Projeto", href: "/sobre", icon: }, + { text: "Séries", href: "/series", icon: }, + { text: "Frameworks", href: "/frameworks", icon: }, + { text: "Comparar Séries", href: "/comparacao", icon: }, + ]; + + function isActive(href) { + return pathname === href; + } + + return ( +
+
+ +

+ ESPDocs +

+ + + +
+ + setDrawerOpen(false)} + PaperProps={{ + className: "bg-linear-to-br from-white via-blue-50 to-purple-50" + }} + > +
+
+

+ Menu +

+
+
+ + + {menuItems.map((item, index) => ( + +
+ { setDrawerOpen(false); }} + href={item.href} + > + + {item.icon} + + {item.text} + +
+
+ ))} +
+ +
+

+ Documentação não oficial +

+
+
+
+ + +
+ ); +} \ No newline at end of file diff --git a/components/SeriesTabMenu.jsx b/components/SeriesTabMenu.jsx new file mode 100644 index 0000000..3f5eea5 --- /dev/null +++ b/components/SeriesTabMenu.jsx @@ -0,0 +1,80 @@ +'use client'; + +import { useState } from 'react'; + +export default function SeriesTabMenu({ tabs, color }) { + const availableTabs = tabs.filter(tab => tab.available); + const [activeTab, setActiveTab] = useState(availableTabs[0]?.id || 'specs'); + + const activeTabContent = availableTabs.find(tab => tab.id === activeTab)?.content; + + return ( +
+
+ {availableTabs.map((tab) => ( + + ))} +
+ +
+
+ + +
+ {availableTabs.map((tab) => ( + tab.id !== activeTab && ( + + ) + ))} +
+
+
+ +
+ {activeTabContent} +
+
+ ); +} \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..1e69deb --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,25 @@ +import { dirname } from "path"; +import { fileURLToPath } from "url"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [ + ...compat.extends("next/core-web-vitals"), + { + ignores: [ + "node_modules/**", + ".next/**", + "out/**", + "build/**", + "next-env.d.ts", + ], + }, +]; + +export default eslintConfig; diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..2a2e4b3 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./*"] + } + } +} diff --git a/next.config.mjs b/next.config.mjs new file mode 100644 index 0000000..4678774 --- /dev/null +++ b/next.config.mjs @@ -0,0 +1,4 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = {}; + +export default nextConfig; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0b0ff37 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6745 @@ +{ + "name": "esp32", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "esp32", + "version": "0.1.0", + "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.1", + "@mui/icons-material": "^7.3.4", + "@mui/material": "^7.3.4", + "next": "15.5.6", + "react": "19.1.0", + "react-dom": "19.1.0" + }, + "devDependencies": { + "@eslint/eslintrc": "^3", + "@tailwindcss/postcss": "^4", + "eslint": "^9", + "eslint-config-next": "15.5.6", + "tailwindcss": "^4" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.6.0.tgz", + "integrity": "sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.6.0.tgz", + "integrity": "sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz", + "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.14.1", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", + "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz", + "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz", + "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.4.tgz", + "integrity": "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.3" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz", + "integrity": "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.3" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.3.tgz", + "integrity": "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz", + "integrity": "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz", + "integrity": "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz", + "integrity": "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz", + "integrity": "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz", + "integrity": "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz", + "integrity": "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz", + "integrity": "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz", + "integrity": "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz", + "integrity": "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz", + "integrity": "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz", + "integrity": "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz", + "integrity": "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz", + "integrity": "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.3" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz", + "integrity": "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz", + "integrity": "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.3" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz", + "integrity": "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.5.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz", + "integrity": "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz", + "integrity": "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz", + "integrity": "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.4.tgz", + "integrity": "sha512-BIktMapG3r4iXwIhYNpvk97ZfYWTreBBQTWjQKbNbzI64+ULHfYavQEX2w99aSWHS58DvXESWIgbD9adKcUOBw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.3.4.tgz", + "integrity": "sha512-9n6Xcq7molXWYb680N2Qx+FRW8oT6j/LXF5PZFH3ph9X/Rct0B/BlLAsFI7iL9ySI6LVLuQIVtrLiPT82R7OZw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^7.3.4", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.4.tgz", + "integrity": "sha512-gEQL9pbJZZHT7lYJBKQCS723v1MGys2IFc94COXbUIyCTWa+qC77a7hUax4Yjd5ggEm35dk4AyYABpKKWC4MLw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/core-downloads-tracker": "^7.3.4", + "@mui/system": "^7.3.3", + "@mui/types": "^7.4.7", + "@mui/utils": "^7.3.3", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.12", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^19.1.1", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material-pigment-css": "^7.3.3", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@mui/material-pigment-css": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.0.tgz", + "integrity": "sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA==", + "license": "MIT" + }, + "node_modules/@mui/private-theming": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.3.3.tgz", + "integrity": "sha512-OJM+9nj5JIyPUvsZ5ZjaeC9PfktmK+W5YaVLToLR8L0lB/DGmv1gcKE43ssNLSvpoW71Hct0necfade6+kW3zQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/utils": "^7.3.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.3.3.tgz", + "integrity": "sha512-CmFxvRJIBCEaWdilhXMw/5wFJ1+FT9f3xt+m2pPXhHPeVIbBg9MnMvNSJjdALvnQJMPw8jLhrUtXmN7QAZV2fw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/sheet": "^1.4.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.3.tgz", + "integrity": "sha512-Lqq3emZr5IzRLKaHPuMaLBDVaGvxoh6z7HMWd1RPKawBM5uMRaQ4ImsmmgXWtwJdfZux5eugfDhXJUo2mliS8Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/private-theming": "^7.3.3", + "@mui/styled-engine": "^7.3.3", + "@mui/types": "^7.4.7", + "@mui/utils": "^7.3.3", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.7.tgz", + "integrity": "sha512-8vVje9rdEr1rY8oIkYgP+Su5Kwl6ik7O3jQ0wl78JGSmiZhRHV+vkjooGdKD8pbtZbutXFVTWQYshu2b3sG9zw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.3.3.tgz", + "integrity": "sha512-kwNAUh7bLZ7mRz9JZ+6qfRnnxbE4Zuc+RzXnhSpRSxjTlSTj7b4JxRLXpG+MVtPVtqks5k/XC8No1Vs3x4Z2gg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/types": "^7.4.7", + "@types/prop-types": "^15.7.15", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^19.1.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.0.tgz", + "integrity": "sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA==", + "license": "MIT" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@next/env": { + "version": "15.5.6", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.6.tgz", + "integrity": "sha512-3qBGRW+sCGzgbpc5TS1a0p7eNxnOarGVQhZxfvTdnV0gFI61lX7QNtQ4V1TSREctXzYn5NetbUsLvyqwLFJM6Q==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "15.5.6", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.5.6.tgz", + "integrity": "sha512-YxDvsT2fwy1j5gMqk3ppXlsgDopHnkM4BoxSVASbvvgh5zgsK8lvWerDzPip8k3WVzsTZ1O7A7si1KNfN4OZfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.6.tgz", + "integrity": "sha512-ES3nRz7N+L5Umz4KoGfZ4XX6gwHplwPhioVRc25+QNsDa7RtUF/z8wJcbuQ2Tffm5RZwuN2A063eapoJ1u4nPg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.6.tgz", + "integrity": "sha512-JIGcytAyk9LQp2/nuVZPAtj8uaJ/zZhsKOASTjxDug0SPU9LAM3wy6nPU735M1OqacR4U20LHVF5v5Wnl9ptTA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.6.tgz", + "integrity": "sha512-qvz4SVKQ0P3/Im9zcS2RmfFL/UCQnsJKJwQSkissbngnB/12c6bZTCB0gHTexz1s6d/mD0+egPKXAIRFVS7hQg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.6.tgz", + "integrity": "sha512-FsbGVw3SJz1hZlvnWD+T6GFgV9/NYDeLTNQB2MXoPN5u9VA9OEDy6fJEfePfsUKAhJufFbZLgp0cPxMuV6SV0w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.6.tgz", + "integrity": "sha512-3QnHGFWlnvAgyxFxt2Ny8PTpXtQD7kVEeaFat5oPAHHI192WKYB+VIKZijtHLGdBBvc16tiAkPTDmQNOQ0dyrA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.6.tgz", + "integrity": "sha512-OsGX148sL+TqMK9YFaPFPoIaJKbFJJxFzkXZljIgA9hjMjdruKht6xDCEv1HLtlLNfkx3c5w2GLKhj7veBQizQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.6.tgz", + "integrity": "sha512-ONOMrqWxdzXDJNh2n60H6gGyKed42Ieu6UTVPZteXpuKbLZTH4G4eBMsr5qWgOBA+s7F+uB4OJbZnrkEDnZ5Fg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.6.tgz", + "integrity": "sha512-pxK4VIjFRx1MY92UycLOOw7dTdvccWsNETQ0kDHkBlcFH1GrTLUjSiHU1ohrznnux6TqRHgv5oflhfIWZwVROQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.14.0.tgz", + "integrity": "sha512-WJFej426qe4RWOm9MMtP4V3CV4AucXolQty+GRgAWLgQXmpCuwzs7hEpxxhSc/znXUSxum9d/P/32MW0FlAAlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.15.tgz", + "integrity": "sha512-HF4+7QxATZWY3Jr8OlZrBSXmwT3Watj0OogeDvdUY/ByXJHQ+LBtqA2brDb3sBxYslIFx6UP94BJ4X6a4L9Bmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.0", + "lightningcss": "1.30.2", + "magic-string": "^0.30.19", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.15" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.15.tgz", + "integrity": "sha512-krhX+UOOgnsUuks2SR7hFafXmLQrKxB4YyRTERuCE59JlYL+FawgaAlSkOYmDRJdf1Q+IFNDMl9iRnBW7QBDfQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.15", + "@tailwindcss/oxide-darwin-arm64": "4.1.15", + "@tailwindcss/oxide-darwin-x64": "4.1.15", + "@tailwindcss/oxide-freebsd-x64": "4.1.15", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.15", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.15", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.15", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.15", + "@tailwindcss/oxide-linux-x64-musl": "4.1.15", + "@tailwindcss/oxide-wasm32-wasi": "4.1.15", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.15", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.15" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.15.tgz", + "integrity": "sha512-TkUkUgAw8At4cBjCeVCRMc/guVLKOU1D+sBPrHt5uVcGhlbVKxrCaCW9OKUIBv1oWkjh4GbunD/u/Mf0ql6kEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.15.tgz", + "integrity": "sha512-xt5XEJpn2piMSfvd1UFN6jrWXyaKCwikP4Pidcf+yfHTSzSpYhG3dcMktjNkQO3JiLCp+0bG0HoWGvz97K162w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.15.tgz", + "integrity": "sha512-TnWaxP6Bx2CojZEXAV2M01Yl13nYPpp0EtGpUrY+LMciKfIXiLL2r/SiSRpagE5Fp2gX+rflp/Os1VJDAyqymg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.15.tgz", + "integrity": "sha512-quISQDWqiB6Cqhjc3iWptXVZHNVENsWoI77L1qgGEHNIdLDLFnw3/AfY7DidAiiCIkGX/MjIdB3bbBZR/G2aJg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.15.tgz", + "integrity": "sha512-ObG76+vPlab65xzVUQbExmDU9FIeYLQ5k2LrQdR2Ud6hboR+ZobXpDoKEYXf/uOezOfIYmy2Ta3w0ejkTg9yxg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.15.tgz", + "integrity": "sha512-4WbBacRmk43pkb8/xts3wnOZMDKsPFyEH/oisCm2q3aLZND25ufvJKcDUpAu0cS+CBOL05dYa8D4U5OWECuH/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.15.tgz", + "integrity": "sha512-AbvmEiteEj1nf42nE8skdHv73NoR+EwXVSgPY6l39X12Ex8pzOwwfi3Kc8GAmjsnsaDEbk+aj9NyL3UeyHcTLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.15.tgz", + "integrity": "sha512-+rzMVlvVgrXtFiS+ES78yWgKqpThgV19ISKD58Ck+YO5pO5KjyxLt7AWKsWMbY0R9yBDC82w6QVGz837AKQcHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.15.tgz", + "integrity": "sha512-fPdEy7a8eQN9qOIK3Em9D3TO1z41JScJn8yxl/76mp4sAXFDfV4YXxsiptJcOwy6bGR+70ZSwFIZhTXzQeqwQg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.15.tgz", + "integrity": "sha512-sJ4yd6iXXdlgIMfIBXuVGp/NvmviEoMVWMOAGxtxhzLPp9LOj5k0pMEMZdjeMCl4C6Up+RM8T3Zgk+BMQ0bGcQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.0.7", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.15.tgz", + "integrity": "sha512-sJGE5faXnNQ1iXeqmRin7Ds/ru2fgCiaQZQQz3ZGIDtvbkeV85rAZ0QJFMDg0FrqsffZG96H1U9AQlNBRLsHVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.15.tgz", + "integrity": "sha512-NLeHE7jUV6HcFKS504bpOohyi01zPXi2PXmjFfkzTph8xRxDdxkRsXm/xDO5uV5K3brrE1cCwbUYmFUSHR3u1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.15.tgz", + "integrity": "sha512-IZh8IT76KujRz6d15wZw4eoeViT4TqmzVWNNfpuNCTKiaZUwgr5vtPqO4HjuYDyx3MgGR5qgPt1HMzTeLJyA3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.15", + "@tailwindcss/oxide": "4.1.15", + "postcss": "^8.4.41", + "tailwindcss": "4.1.15" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", + "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz", + "integrity": "sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/type-utils": "8.46.2", + "@typescript-eslint/utils": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.46.2", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz", + "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.2.tgz", + "integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.46.2", + "@typescript-eslint/types": "^8.46.2", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz", + "integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz", + "integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz", + "integrity": "sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/utils": "8.46.2", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz", + "integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz", + "integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.46.2", + "@typescript-eslint/tsconfig-utils": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.2.tgz", + "integrity": "sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz", + "integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "peer": 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, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz", + "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001751", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz", + "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.1", + "@eslint/core": "^0.16.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.38.0", + "@eslint/plugin-kit": "^0.4.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-next": { + "version": "15.5.6", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.5.6.tgz", + "integrity": "sha512-cGr3VQlPsZBEv8rtYp4BpG1KNXDqGvPo9VC1iaCgIA11OfziC/vczng+TnAS3WpRIR3Q5ye/6yl+CRUuZ1fPGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "15.5.6", + "@rushstack/eslint-patch": "^1.10.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^5.0.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", + "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.12.0.tgz", + "integrity": "sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-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, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next": { + "version": "15.5.6", + "resolved": "https://registry.npmjs.org/next/-/next-15.5.6.tgz", + "integrity": "sha512-zTxsnI3LQo3c9HSdSf91O1jMNsEzIXDShXd4wVdg9y5shwLqBXi4ZtUUJyB86KGVSJLZx0PFONvO54aheGX8QQ==", + "license": "MIT", + "dependencies": { + "@next/env": "15.5.6", + "@swc/helpers": "0.5.15", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.5.6", + "@next/swc-darwin-x64": "15.5.6", + "@next/swc-linux-arm64-gnu": "15.5.6", + "@next/swc-linux-arm64-musl": "15.5.6", + "@next/swc-linux-x64-gnu": "15.5.6", + "@next/swc-linux-x64-musl": "15.5.6", + "@next/swc-win32-arm64-msvc": "15.5.6", + "@next/swc-win32-x64-msvc": "15.5.6", + "sharp": "^0.34.3" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.51.1", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "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, + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "license": "MIT", + "peer": true, + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "devOptional": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/sharp": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz", + "integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.0", + "semver": "^7.7.2" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.4", + "@img/sharp-darwin-x64": "0.34.4", + "@img/sharp-libvips-darwin-arm64": "1.2.3", + "@img/sharp-libvips-darwin-x64": "1.2.3", + "@img/sharp-libvips-linux-arm": "1.2.3", + "@img/sharp-libvips-linux-arm64": "1.2.3", + "@img/sharp-libvips-linux-ppc64": "1.2.3", + "@img/sharp-libvips-linux-s390x": "1.2.3", + "@img/sharp-libvips-linux-x64": "1.2.3", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", + "@img/sharp-libvips-linuxmusl-x64": "1.2.3", + "@img/sharp-linux-arm": "0.34.4", + "@img/sharp-linux-arm64": "0.34.4", + "@img/sharp-linux-ppc64": "0.34.4", + "@img/sharp-linux-s390x": "0.34.4", + "@img/sharp-linux-x64": "0.34.4", + "@img/sharp-linuxmusl-arm64": "0.34.4", + "@img/sharp-linuxmusl-x64": "0.34.4", + "@img/sharp-wasm32": "0.34.4", + "@img/sharp-win32-arm64": "0.34.4", + "@img/sharp-win32-ia32": "0.34.4", + "@img/sharp-win32-x64": "0.34.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, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.15.tgz", + "integrity": "sha512-k2WLnWkYFkdpRv+Oby3EBXIyQC8/s1HOFMBUViwtAh6Z5uAozeUSMQlIsn/c6Q2iJzqG6aJT3wdPaRNj70iYxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..7d8cce6 --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "esp32", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev --turbopack", + "build": "next build --turbopack", + "start": "next start", + "lint": "eslint" + }, + "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.1", + "@mui/icons-material": "^7.3.4", + "@mui/material": "^7.3.4", + "next": "15.5.6", + "react": "19.1.0", + "react-dom": "19.1.0" + }, + "devDependencies": { + "@eslint/eslintrc": "^3", + "@tailwindcss/postcss": "^4", + "eslint": "^9", + "eslint-config-next": "15.5.6", + "tailwindcss": "^4" + } +} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..c7bcb4b --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,5 @@ +const config = { + plugins: ["@tailwindcss/postcss"], +}; + +export default config; diff --git a/public/conexoes/ESP32-C3.json b/public/conexoes/ESP32-C3.json new file mode 100644 index 0000000..8e5d2c9 --- /dev/null +++ b/public/conexoes/ESP32-C3.json @@ -0,0 +1,494 @@ +[ + { + "numero": "GND", + "nome": "GND", + "tipo": "ground", + "funcoes": [ + "Referência elétrica do sistema", + "Conexão externa de terra" + ], + "categorias": [ + "Ground" + ], + "cor": "#64748b", + "restricoes": "" + }, + { + "numero": "VDD3P3", + "nome": "VDD3P3", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio analógico" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDA", + "nome": "VDDA", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio analógico" + ], + "categorias": [ + "Power", + "Analog" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDD3P3_RTC", + "nome": "VDD3P3_RTC", + "tipo": "power", + "funcoes": [ + "Alimentação para o domínio RTC e parte do domínio digital" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDD3P3_CPU", + "nome": "VDD3P3_CPU", + "tipo": "power", + "funcoes": [ + "Alimentação para o domínio digital e CPU" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V); não exceder 3.3 V para gravação de eFuse" + }, + { + "numero": "VDDSPI", + "nome": "VDDSPI", + "tipo": "power", + "funcoes": [ + "Alimentação dos barramentos Flash e PSRAM", + "Pode funcionar como entrada ou saída", + "Backup de alimentação para flash integrado" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Pode ser 3.3 V ou configurável como GPIO; padrão para alimentação de flash" + }, + { + "numero": "CHIP_PU", + "nome": "CHIP_PU (EN)", + "tipo": "power", + "funcoes": [ + "Habilitar chip (nível alto)", + "Reseta o chip (nível baixo)" + ], + "categorias": [ + "Power", + "Reset" + ], + "cor": "#f97316", + "restricoes": "Deve estar em nível alto para operação normal; não deixar flutuante" + }, + { + "numero": 0, + "nome": "GPIO0", + "tipo": "gpio", + "funcoes": [ + "GPIO0", + "XTAL_32K_P", + "ADC1_CH0" + ], + "categorias": [ + "GPIO", + "RTC", + "ADC", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "Pode ser usado para cristal RTC de 32.768 kHz" + }, + { + "numero": 1, + "nome": "GPIO1", + "tipo": "gpio", + "funcoes": [ + "GPIO1", + "XTAL_32K_N", + "ADC1_CH1" + ], + "categorias": [ + "GPIO", + "RTC", + "ADC", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "Pode ser usado para cristal RTC de 32.768 kHz" + }, + { + "numero": 2, + "nome": "GPIO2", + "tipo": "gpio", + "funcoes": [ + "GPIO2", + "ADC1_CH2", + "FSPIQ" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "SPI", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Strapping pin; recomendado pull-up devido a glitches" + }, + { + "numero": 3, + "nome": "GPIO3", + "tipo": "gpio", + "funcoes": [ + "GPIO3", + "ADC1_CH3" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 4, + "nome": "GPIO4", + "tipo": "gpio", + "funcoes": [ + "GPIO4", + "ADC1_CH4", + "MTMS", + "FSPIHD" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "JTAG", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Mode Select" + }, + { + "numero": 5, + "nome": "GPIO5", + "tipo": "gpio", + "funcoes": [ + "GPIO5", + "ADC2_CH0", + "MTDI", + "FSPIWP" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "JTAG", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Data In" + }, + { + "numero": 6, + "nome": "GPIO6", + "tipo": "gpio", + "funcoes": [ + "GPIO6", + "MTCK", + "FSPICLK" + ], + "categorias": [ + "GPIO", + "JTAG", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Clock" + }, + { + "numero": 7, + "nome": "GPIO7", + "tipo": "gpio", + "funcoes": [ + "GPIO7", + "MTDO", + "FSPID" + ], + "categorias": [ + "GPIO", + "JTAG", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Data Out" + }, + { + "numero": 8, + "nome": "GPIO8", + "tipo": "gpio", + "funcoes": [ + "GPIO8" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Strapping pin para controle de modo de boot e impressão ROM" + }, + { + "numero": 9, + "nome": "GPIO9", + "tipo": "gpio", + "funcoes": [ + "GPIO9" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; strapping pin para modo boot (alto=SPI boot)" + }, + { + "numero": 10, + "nome": "GPIO10", + "tipo": "gpio", + "funcoes": [ + "GPIO10", + "FSPICS0" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 11, + "nome": "GPIO11", + "tipo": "gpio", + "funcoes": [ + "GPIO11" + ], + "categorias": [ + "GPIO" + ], + "cor": "#3b82f6", + "restricoes": "Pin VDDSPI pode ser configurado como GPIO se flash for alimentado externamente" + }, + { + "numero": 12, + "nome": "GPIO12", + "tipo": "gpio", + "funcoes": [ + "GPIO12", + "SPIHD" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 13, + "nome": "GPIO13", + "tipo": "gpio", + "funcoes": [ + "GPIO13", + "SPIWP" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 14, + "nome": "GPIO14", + "tipo": "gpio", + "funcoes": [ + "GPIO14", + "SPICS0" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 15, + "nome": "GPIO15", + "tipo": "gpio", + "funcoes": [ + "GPIO15", + "SPICLK" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 16, + "nome": "GPIO16", + "tipo": "gpio", + "funcoes": [ + "GPIO16", + "SPID" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 17, + "nome": "GPIO17", + "tipo": "gpio", + "funcoes": [ + "GPIO17", + "SPIQ" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 18, + "nome": "GPIO18", + "tipo": "gpio", + "funcoes": [ + "GPIO18", + "USB_D-" + ], + "categorias": [ + "GPIO", + "USB" + ], + "cor": "#3b82f6", + "restricoes": "USB D- para USB OTG e USB Serial/JTAG" + }, + { + "numero": 19, + "nome": "GPIO19", + "tipo": "gpio", + "funcoes": [ + "GPIO19", + "USB_D+" + ], + "categorias": [ + "GPIO", + "USB" + ], + "cor": "#3b82f6", + "restricoes": "USB D+ para USB OTG e USB Serial/JTAG" + }, + { + "numero": 20, + "nome": "GPIO20", + "tipo": "gpio", + "funcoes": [ + "GPIO20", + "UART0_RXD" + ], + "categorias": [ + "GPIO", + "UART" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; UART0 RX para download de firmware" + }, + { + "numero": 21, + "nome": "GPIO21", + "tipo": "gpio", + "funcoes": [ + "GPIO21", + "UART0_TXD" + ], + "categorias": [ + "GPIO", + "UART" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; UART0 TX para download de firmware" + }, + { + "numero": "XTAL_N", + "nome": "XTAL_N", + "tipo": "analog", + "funcoes": [ + "Entrada/saída de clock externo", + "Conexão ao cristal ou oscilador do chip" + ], + "categorias": [ + "Analog", + "Clock" + ], + "cor": "#a855f7", + "restricoes": "Clock diferencial negativo" + }, + { + "numero": "XTAL_P", + "nome": "XTAL_P", + "tipo": "analog", + "funcoes": [ + "Entrada/saída de clock externo", + "Conexão ao cristal ou oscilador do chip" + ], + "categorias": [ + "Analog", + "Clock" + ], + "cor": "#a855f7", + "restricoes": "Clock diferencial positivo" + }, + { + "numero": "LNA", + "nome": "LNA_IN", + "tipo": "analog", + "funcoes": [ + "Entrada/saída do amplificador de baixo ruído RF" + ], + "categorias": [ + "Analog", + "RF" + ], + "cor": "#a855f7", + "restricoes": "Sinais de entrada/saída do LNA RF para comunicação 2.4 GHz Wi-Fi/BLE" + } +] \ No newline at end of file diff --git a/public/conexoes/ESP32-C5.json b/public/conexoes/ESP32-C5.json new file mode 100644 index 0000000..4bcf18d --- /dev/null +++ b/public/conexoes/ESP32-C5.json @@ -0,0 +1,649 @@ +[ + { + "numero": "GND", + "nome": "GND", + "tipo": "ground", + "funcoes": [ + "Conexão externa de terra", + "Referência elétrica do sistema" + ], + "categorias": [ + "Ground" + ], + "cor": "#64748b", + "restricoes": "" + }, + { + "numero": "VDDA", + "nome": "VDDA", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio analógico" + ], + "categorias": [ + "Power", + "Analog" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDPST1", + "nome": "VDDPST1", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio digital de baixa potência", + "Fornece energia para pinos LP IO" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDPST2", + "nome": "VDDPST2", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio digital de alta performance", + "Fornece energia para pinos HP IO" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDPST3", + "nome": "VDDPST3", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio digital de alta performance", + "Fornece energia para pinos HP IO" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDSPI", + "nome": "VDDSPI", + "tipo": "power", + "funcoes": [ + "Alimentação dos barramentos Flash e PSRAM", + "Pode funcionar como entrada ou saída", + "Backup de alimentação para flash integrado" + ], + "categorias": [ + "Power", + "Flash" + ], + "cor": "#ef4444", + "restricoes": "Pode ser 3.3 V ou configurável como GPIO; padrão para alimentação de flash" + }, + { + "numero": "CHIP_PU", + "nome": "CHIP_PU (EN)", + "tipo": "power", + "funcoes": [ + "Habilitar chip (nível alto)", + "Reseta o chip (nível baixo)" + ], + "categorias": [ + "Power", + "Reset" + ], + "cor": "#f97316", + "restricoes": "Deve estar em nível alto para operação normal; não deixar flutuante" + }, + { + "numero": 0, + "nome": "GPIO0", + "tipo": "gpio", + "funcoes": [ + "GPIO0", + "XTAL_32K_P", + "ADC1_CH0", + "LPGPIO0" + ], + "categorias": [ + "GPIO", + "RTC", + "ADC", + "Clock", + "LP_GPIO" + ], + "cor": "#3b82f6", + "restricoes": "Pode ser usado para cristal RTC de 32.768 kHz" + }, + { + "numero": 1, + "nome": "GPIO1", + "tipo": "gpio", + "funcoes": [ + "GPIO1", + "XTAL_32K_N", + "ADC1_CH1", + "LPGPIO1" + ], + "categorias": [ + "GPIO", + "RTC", + "ADC", + "Clock", + "LP_GPIO" + ], + "cor": "#3b82f6", + "restricoes": "Pode ser usado para cristal RTC de 32.768 kHz" + }, + { + "numero": 2, + "nome": "GPIO2", + "tipo": "gpio", + "funcoes": [ + "GPIO2", + "MTMS", + "ADC1_CH2", + "FSPIQ", + "LPGPIO2", + "LPI2C_SDA" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "SPI", + "JTAG", + "LP_GPIO", + "LP_I2C" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Mode Select; pode ser usado com LP_I2C" + }, + { + "numero": 3, + "nome": "GPIO3", + "tipo": "gpio", + "funcoes": [ + "GPIO3", + "MTDI", + "ADC1_CH3", + "LPGPIO3", + "LPI2C_SCL" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "JTAG", + "LP_GPIO", + "LP_I2C" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Data In; pode ser usado com LP_I2C" + }, + { + "numero": 4, + "nome": "GPIO4", + "tipo": "gpio", + "funcoes": [ + "GPIO4", + "MTCK", + "ADC1_CH4", + "FSPIHD", + "LPGPIO4", + "LPUART_RXD" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "JTAG", + "SPI", + "LP_GPIO", + "LP_UART" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Clock" + }, + { + "numero": 5, + "nome": "GPIO5", + "tipo": "gpio", + "funcoes": [ + "GPIO5", + "MTDO", + "ADC1_CH5", + "FSPIWP", + "LPGPIO5", + "LPUART_TXD" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "JTAG", + "SPI", + "LP_GPIO", + "LP_UART" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Data Out" + }, + { + "numero": 6, + "nome": "GPIO6", + "tipo": "gpio", + "funcoes": [ + "GPIO6", + "FSPICLK", + "LPGPIO6" + ], + "categorias": [ + "GPIO", + "SPI", + "LP_GPIO" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 7, + "nome": "GPIO7", + "tipo": "gpio", + "funcoes": [ + "GPIO7", + "FSPID", + "SDIODATA1" + ], + "categorias": [ + "GPIO", + "SPI", + "SDIO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Strapping pin para controle de fonte de sinal JTAG" + }, + { + "numero": 8, + "nome": "GPIO8", + "tipo": "gpio", + "funcoes": [ + "GPIO8", + "SDIODATA0", + "PADCOMP0" + ], + "categorias": [ + "GPIO", + "SDIO", + "Analog", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Strapping pin para controle de modo de boot e impressão ROM; comparador analógico" + }, + { + "numero": 9, + "nome": "GPIO9", + "tipo": "gpio", + "funcoes": [ + "GPIO9", + "SDIOCLK", + "PADCOMP1" + ], + "categorias": [ + "GPIO", + "SDIO", + "Analog", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; strapping pin para modo boot (alto=SPI boot); comparador analógico" + }, + { + "numero": 10, + "nome": "GPIO10", + "tipo": "gpio", + "funcoes": [ + "GPIO10", + "SDIOCMD", + "FSPICS0" + ], + "categorias": [ + "GPIO", + "SPI", + "SDIO" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 11, + "nome": "GPIO11", + "tipo": "gpio", + "funcoes": [ + "GPIO11", + "UART0_TXD" + ], + "categorias": [ + "GPIO", + "UART" + ], + "cor": "#3b82f6", + "restricoes": "UART0 TX para download de firmware" + }, + { + "numero": 12, + "nome": "GPIO12", + "tipo": "gpio", + "funcoes": [ + "GPIO12", + "UART0_RXD" + ], + "categorias": [ + "GPIO", + "UART" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; UART0 RX para download de firmware" + }, + { + "numero": 13, + "nome": "GPIO13", + "tipo": "gpio", + "funcoes": [ + "GPIO13", + "USB_D-", + "SDIODATA3" + ], + "categorias": [ + "GPIO", + "USB", + "SDIO" + ], + "cor": "#3b82f6", + "restricoes": "USB D- para USB OTG e USB Serial/JTAG; drive padrão 40 mA" + }, + { + "numero": 14, + "nome": "GPIO14", + "tipo": "gpio", + "funcoes": [ + "GPIO14", + "USB_D+", + "SDIODATA2" + ], + "categorias": [ + "GPIO", + "USB", + "SDIO" + ], + "cor": "#3b82f6", + "restricoes": "USB D+ para USB OTG e USB Serial/JTAG; drive padrão 40 mA" + }, + { + "numero": 15, + "nome": "GPIO15", + "tipo": "gpio", + "funcoes": [ + "GPIO15", + "SPICS1" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com PSRAM; pull-up interno" + }, + { + "numero": 16, + "nome": "GPIO16", + "tipo": "gpio", + "funcoes": [ + "GPIO16", + "SPICS0" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 17, + "nome": "GPIO17", + "tipo": "gpio", + "funcoes": [ + "GPIO17", + "SPIQ" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 18, + "nome": "GPIO18", + "tipo": "gpio", + "funcoes": [ + "GPIO18", + "SPIWP" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 19, + "nome": "GPIO19", + "tipo": "gpio", + "funcoes": [ + "GPIO19", + "VDDSPI" + ], + "categorias": [ + "GPIO", + "Power" + ], + "cor": "#3b82f6", + "restricoes": "Pin VDDSPI pode ser configurado como GPIO se flash for alimentado externamente" + }, + { + "numero": 20, + "nome": "GPIO20", + "tipo": "gpio", + "funcoes": [ + "GPIO20", + "SPIHD" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 21, + "nome": "GPIO21", + "tipo": "gpio", + "funcoes": [ + "GPIO21", + "SPICLK" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 22, + "nome": "GPIO22", + "tipo": "gpio", + "funcoes": [ + "GPIO22", + "SPID" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 23, + "nome": "GPIO23", + "tipo": "gpio", + "funcoes": [ + "GPIO23" + ], + "categorias": [ + "GPIO" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 24, + "nome": "GPIO24", + "tipo": "gpio", + "funcoes": [ + "GPIO24" + ], + "categorias": [ + "GPIO" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 25, + "nome": "GPIO25", + "tipo": "gpio", + "funcoes": [ + "GPIO25" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Strapping pin para controle de borda de clock SDIO" + }, + { + "numero": 26, + "nome": "GPIO26", + "tipo": "gpio", + "funcoes": [ + "GPIO26" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Strapping pin para controle de modo de boot" + }, + { + "numero": 27, + "nome": "GPIO27", + "tipo": "gpio", + "funcoes": [ + "GPIO27" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; strapping pin para modo boot e impressão ROM" + }, + { + "numero": 28, + "nome": "GPIO28", + "tipo": "gpio", + "funcoes": [ + "GPIO28" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; strapping pin para modo boot (alto=SPI boot)" + }, + { + "numero": "XTAL_N", + "nome": "XTAL_N", + "tipo": "analog", + "funcoes": [ + "Entrada/saída de clock externo", + "Conexão ao cristal ou oscilador do chip" + ], + "categorias": [ + "Analog", + "Clock" + ], + "cor": "#a855f7", + "restricoes": "Clock diferencial negativo; suporta cristal de 40 MHz ou 48 MHz" + }, + { + "numero": "XTAL_P", + "nome": "XTAL_P", + "tipo": "analog", + "funcoes": [ + "Entrada/saída de clock externo", + "Conexão ao cristal ou oscilador do chip" + ], + "categorias": [ + "Analog", + "Clock" + ], + "cor": "#a855f7", + "restricoes": "Clock diferencial positivo; suporta cristal de 40 MHz ou 48 MHz" + }, + { + "numero": "ANT", + "nome": "ANT_2G", + "tipo": "analog", + "funcoes": [ + "Entrada/saída de RF 2.4 GHz" + ], + "categorias": [ + "Analog", + "RF" + ], + "cor": "#a855f7", + "restricoes": "Antena para comunicação Wi-Fi/BLE em 2.4 GHz" + }, + { + "numero": "ANT", + "nome": "ANT_5G", + "tipo": "analog", + "funcoes": [ + "Entrada/saída de RF 5 GHz" + ], + "categorias": [ + "Analog", + "RF" + ], + "cor": "#a855f7", + "restricoes": "Antena para comunicação Wi-Fi em 5 GHz" + } +] \ No newline at end of file diff --git a/public/conexoes/ESP32-C6.json b/public/conexoes/ESP32-C6.json new file mode 100644 index 0000000..edef89a --- /dev/null +++ b/public/conexoes/ESP32-C6.json @@ -0,0 +1,652 @@ +[ + { + "numero": "GND", + "nome": "GND", + "tipo": "ground", + "funcoes": [ + "Referência elétrica do sistema", + "Conexão externa de terra" + ], + "categorias": [ + "Ground" + ], + "cor": "#64748b", + "restricoes": "" + }, + { + "numero": "VDDA", + "nome": "VDDA", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio analógico" + ], + "categorias": [ + "Power", + "Analog" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDPST1", + "nome": "VDDPST1", + "tipo": "power", + "funcoes": [ + "Alimentação para o domínio LP digital e parte do domínio analógico" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Alimenta os pinos LP IO; típico 3.3 V" + }, + { + "numero": "VDDPST2", + "nome": "VDDPST2", + "tipo": "power", + "funcoes": [ + "Alimentação para o domínio HP digital" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Alimenta os pinos HP IO; típico 3.3 V" + }, + { + "numero": "VDDSPI", + "nome": "VDDSPI", + "tipo": "power", + "funcoes": [ + "Alimentação dos barramentos Flash e PSRAM", + "Pode funcionar como entrada ou saída", + "Backup de alimentação para flash integrado" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Pode ser 3.3 V ou configurável como GPIO27; padrão para alimentação de flash" + }, + { + "numero": "CHIP_PU", + "nome": "CHIP_PU (EN)", + "tipo": "power", + "funcoes": [ + "Habilitar chip (nível alto)", + "Reseta o chip (nível baixo)" + ], + "categorias": [ + "Power", + "Reset" + ], + "cor": "#f97316", + "restricoes": "Deve estar em nível alto para operação normal; não deixar flutuante" + }, + { + "numero": 0, + "nome": "GPIO0", + "tipo": "gpio", + "funcoes": [ + "GPIO0", + "XTAL_32K_P", + "ADC1_CH0", + "LPGPIO0", + "LPUART_DTR" + ], + "categorias": [ + "GPIO", + "RTC", + "ADC", + "Clock", + "LP_IO" + ], + "cor": "#3b82f6", + "restricoes": "Pode ser usado para cristal RTC de 32.768 kHz" + }, + { + "numero": 1, + "nome": "GPIO1", + "tipo": "gpio", + "funcoes": [ + "GPIO1", + "XTAL_32K_N", + "ADC1_CH1", + "LPGPIO1", + "LPUART_DSR" + ], + "categorias": [ + "GPIO", + "RTC", + "ADC", + "Clock", + "LP_IO" + ], + "cor": "#3b82f6", + "restricoes": "Pode ser usado para cristal RTC de 32.768 kHz" + }, + { + "numero": 2, + "nome": "GPIO2", + "tipo": "gpio", + "funcoes": [ + "GPIO2", + "ADC1_CH2", + "FSPIQ", + "LPGPIO2", + "LPUART_RTS" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "SPI", + "LP_IO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Strapping pin; pode ser usado para SPI2" + }, + { + "numero": 3, + "nome": "GPIO3", + "tipo": "gpio", + "funcoes": [ + "GPIO3", + "ADC1_CH3", + "LPGPIO3", + "LPUART_CTS" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "LP_IO" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 4, + "nome": "GPIO4", + "tipo": "gpio", + "funcoes": [ + "GPIO4", + "ADC1_CH4", + "MTMS", + "FSPIHD", + "LPGPIO4", + "LPUART_RXD" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "JTAG", + "SPI", + "LP_IO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Mode Select; Strapping pin" + }, + { + "numero": 5, + "nome": "GPIO5", + "tipo": "gpio", + "funcoes": [ + "GPIO5", + "ADC1_CH5", + "MTDI", + "FSPIWP", + "LPGPIO5", + "LPUART_TXD" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "JTAG", + "SPI", + "LP_IO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Data In; Strapping pin" + }, + { + "numero": 6, + "nome": "GPIO6", + "tipo": "gpio", + "funcoes": [ + "GPIO6", + "ADC1_CH6", + "MTCK", + "FSPICLK", + "LPGPIO6", + "LPI2C_SDA" + ], + "categorias": [ + "GPIO", + "ADC", + "JTAG", + "SPI", + "LP_IO" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Clock" + }, + { + "numero": 7, + "nome": "GPIO7", + "tipo": "gpio", + "funcoes": [ + "GPIO7", + "MTDO", + "FSPID", + "LPGPIO7", + "LPI2C_SCL" + ], + "categorias": [ + "GPIO", + "JTAG", + "SPI", + "LP_IO" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Data Out" + }, + { + "numero": 8, + "nome": "GPIO8", + "tipo": "gpio", + "funcoes": [ + "GPIO8" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Strapping pin para controle de modo de boot e impressão ROM" + }, + { + "numero": 9, + "nome": "GPIO9", + "tipo": "gpio", + "funcoes": [ + "GPIO9" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; strapping pin para modo boot (alto=SPI boot)" + }, + { + "numero": 10, + "nome": "GPIO10", + "tipo": "gpio", + "funcoes": [ + "GPIO10" + ], + "categorias": [ + "GPIO" + ], + "cor": "#3b82f6", + "restricoes": "Apenas em QFN40" + }, + { + "numero": 11, + "nome": "GPIO11", + "tipo": "gpio", + "funcoes": [ + "GPIO11" + ], + "categorias": [ + "GPIO" + ], + "cor": "#3b82f6", + "restricoes": "Apenas em QFN40" + }, + { + "numero": 12, + "nome": "GPIO12", + "tipo": "gpio", + "funcoes": [ + "GPIO12", + "USB_D-" + ], + "categorias": [ + "GPIO", + "USB" + ], + "cor": "#3b82f6", + "restricoes": "USB D- para USB OTG e USB Serial/JTAG; força de corrente padrão 40 mA" + }, + { + "numero": 13, + "nome": "GPIO13", + "tipo": "gpio", + "funcoes": [ + "GPIO13", + "USB_D+" + ], + "categorias": [ + "GPIO", + "USB" + ], + "cor": "#3b82f6", + "restricoes": "USB D+ para USB OTG e USB Serial/JTAG; força de corrente padrão 40 mA" + }, + { + "numero": 14, + "nome": "GPIO14", + "tipo": "gpio", + "funcoes": [ + "GPIO14" + ], + "categorias": [ + "GPIO" + ], + "cor": "#3b82f6", + "restricoes": "Apenas em QFN32" + }, + { + "numero": 15, + "nome": "GPIO15", + "tipo": "gpio", + "funcoes": [ + "GPIO15" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Strapping pin para controle de fonte de sinal JTAG" + }, + { + "numero": 16, + "nome": "GPIO16", + "tipo": "gpio", + "funcoes": [ + "GPIO16", + "UART0_TXD", + "FSPICS0" + ], + "categorias": [ + "GPIO", + "UART", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "UART0 TX para download de firmware" + }, + { + "numero": 17, + "nome": "GPIO17", + "tipo": "gpio", + "funcoes": [ + "GPIO17", + "UART0_RXD", + "FSPICS1" + ], + "categorias": [ + "GPIO", + "UART", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; UART0 RX para download de firmware" + }, + { + "numero": 18, + "nome": "GPIO18", + "tipo": "gpio", + "funcoes": [ + "GPIO18", + "SDIOCMD", + "FSPICS2" + ], + "categorias": [ + "GPIO", + "SDIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Interface SDIO 2.0" + }, + { + "numero": 19, + "nome": "GPIO19", + "tipo": "gpio", + "funcoes": [ + "GPIO19", + "SDIOCLK", + "FSPICS3" + ], + "categorias": [ + "GPIO", + "SDIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Interface SDIO 2.0" + }, + { + "numero": 20, + "nome": "GPIO20", + "tipo": "gpio", + "funcoes": [ + "GPIO20", + "SDIODATA0", + "FSPICS4" + ], + "categorias": [ + "GPIO", + "SDIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Interface SDIO 2.0" + }, + { + "numero": 21, + "nome": "GPIO21", + "tipo": "gpio", + "funcoes": [ + "GPIO21", + "SDIODATA1", + "FSPICS5" + ], + "categorias": [ + "GPIO", + "SDIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Interface SDIO 2.0" + }, + { + "numero": 22, + "nome": "GPIO22", + "tipo": "gpio", + "funcoes": [ + "GPIO22", + "SDIODATA2" + ], + "categorias": [ + "GPIO", + "SDIO" + ], + "cor": "#3b82f6", + "restricoes": "Interface SDIO 2.0" + }, + { + "numero": 23, + "nome": "GPIO23", + "tipo": "gpio", + "funcoes": [ + "GPIO23", + "SDIODATA3" + ], + "categorias": [ + "GPIO", + "SDIO" + ], + "cor": "#3b82f6", + "restricoes": "Interface SDIO 2.0" + }, + { + "numero": 24, + "nome": "GPIO24", + "tipo": "gpio", + "funcoes": [ + "GPIO24", + "SPICS0" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "QFN40 apenas; Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 25, + "nome": "GPIO25", + "tipo": "gpio", + "funcoes": [ + "GPIO25", + "SPIQ" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "QFN40 apenas; Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 26, + "nome": "GPIO26", + "tipo": "gpio", + "funcoes": [ + "GPIO26", + "SPIWP" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "QFN40 apenas; Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 27, + "nome": "GPIO27", + "tipo": "gpio", + "funcoes": [ + "GPIO27", + "VDDSPI" + ], + "categorias": [ + "GPIO", + "Power" + ], + "cor": "#f97316", + "restricoes": "QFN40 apenas; Pin VDDSPI pode ser configurado como GPIO se flash for alimentado externamente" + }, + { + "numero": 28, + "nome": "GPIO28", + "tipo": "gpio", + "funcoes": [ + "GPIO28", + "SPIHD" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "QFN40 apenas; Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 29, + "nome": "GPIO29", + "tipo": "gpio", + "funcoes": [ + "GPIO29", + "SPICLK" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "QFN40 apenas; Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": 30, + "nome": "GPIO30", + "tipo": "gpio", + "funcoes": [ + "GPIO30", + "SPID" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "QFN40 apenas; Compartilhado com flash; pull-up interno; não usar como GPIO normal" + }, + { + "numero": "XTAL_N", + "nome": "XTAL_N", + "tipo": "analog", + "funcoes": [ + "Entrada/saída de clock externo", + "Conexão ao cristal ou oscilador do chip" + ], + "categorias": [ + "Analog", + "Clock" + ], + "cor": "#a855f7", + "restricoes": "Clock diferencial negativo para oscilador de 40 MHz" + }, + { + "numero": "XTAL_P", + "nome": "XTAL_P", + "tipo": "analog", + "funcoes": [ + "Entrada/saída de clock externo", + "Conexão ao cristal ou oscilador do chip" + ], + "categorias": [ + "Analog", + "Clock" + ], + "cor": "#a855f7", + "restricoes": "Clock diferencial positivo para oscilador de 40 MHz" + }, + { + "numero": "ANT", + "nome": "ANT", + "tipo": "analog", + "funcoes": [ + "Entrada/saída RF para comunicação 2.4 GHz", + "Interface de antena Wi-Fi/BLE/802.15.4" + ], + "categorias": [ + "Analog", + "RF" + ], + "cor": "#a855f7", + "restricoes": "Sinais RF para comunicação sem fio" + } +] \ No newline at end of file diff --git a/public/conexoes/ESP32-H2.json b/public/conexoes/ESP32-H2.json new file mode 100644 index 0000000..801437f --- /dev/null +++ b/public/conexoes/ESP32-H2.json @@ -0,0 +1,454 @@ +[ + { + "numero": "GND", + "nome": "GND", + "tipo": "ground", + "funcoes": [ + "Referência elétrica do sistema", + "Conexão externa de terra" + ], + "categorias": [ + "Ground" + ], + "cor": "#64748b", + "restricoes": "" + }, + { + "numero": "VDD3P3", + "nome": "VDD3P3", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio analógico", + "Tensão de alimentação principal" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDAPMU", + "nome": "VDDAPMU", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio analógico", + "Alimentação para pinos GPIO12, XTAL32KP, XTAL32KN" + ], + "categorias": [ + "Power", + "Analog" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VBAT", + "nome": "VBAT", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio analógico ou bateria", + "Alimentação para pinos GPIO12, XTAL32KP, XTAL32KN" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDPST1", + "nome": "VDDPST1", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio de IO digital e LP IO" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDPST2", + "nome": "VDDPST2", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio de IO digital" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "CHIP_PU", + "nome": "CHIP_PU (EN)", + "tipo": "power", + "funcoes": [ + "Habilitar chip (nível alto)", + "Reseta o chip (nível baixo)" + ], + "categorias": [ + "Power", + "Reset" + ], + "cor": "#f97316", + "restricoes": "Deve estar em nível alto para operação normal; não deixar flutuante" + }, + { + "numero": 0, + "nome": "GPIO0", + "tipo": "gpio", + "funcoes": [ + "GPIO0", + "FSPIQ" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 1, + "nome": "GPIO1", + "tipo": "gpio", + "funcoes": [ + "GPIO1", + "ADC1_CH0", + "FSPICS0" + ], + "categorias": [ + "GPIO", + "ADC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 2, + "nome": "GPIO2 (MTMS)", + "tipo": "gpio", + "funcoes": [ + "GPIO2", + "MTMS", + "ADC1_CH1", + "FSPIWP" + ], + "categorias": [ + "GPIO", + "JTAG", + "ADC", + "SPI", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Strapping pin; JTAG Test Mode Select" + }, + { + "numero": 3, + "nome": "GPIO3 (MTDO)", + "tipo": "gpio", + "funcoes": [ + "GPIO3", + "MTDO", + "ADC1_CH2", + "FSPIHD" + ], + "categorias": [ + "GPIO", + "JTAG", + "ADC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Data Out" + }, + { + "numero": 4, + "nome": "GPIO4 (MTCK)", + "tipo": "gpio", + "funcoes": [ + "GPIO4", + "MTCK", + "ADC1_CH3", + "FSPICLK" + ], + "categorias": [ + "GPIO", + "JTAG", + "ADC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Clock" + }, + { + "numero": 5, + "nome": "GPIO5 (MTDI)", + "tipo": "gpio", + "funcoes": [ + "GPIO5", + "MTDI", + "ADC1_CH4", + "FSPID" + ], + "categorias": [ + "GPIO", + "JTAG", + "ADC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "JTAG Test Data In" + }, + { + "numero": 8, + "nome": "GPIO8", + "tipo": "gpio", + "funcoes": [ + "GPIO8" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Strapping pin para controle de modo de boot e impressão ROM" + }, + { + "numero": 9, + "nome": "GPIO9", + "tipo": "gpio", + "funcoes": [ + "GPIO9" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; strapping pin para modo boot (alto=SPI boot)" + }, + { + "numero": 10, + "nome": "GPIO10", + "tipo": "gpio", + "funcoes": [ + "GPIO10", + "Voltage Comparator ZCD0" + ], + "categorias": [ + "GPIO", + "Analog" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 11, + "nome": "GPIO11", + "tipo": "gpio", + "funcoes": [ + "GPIO11", + "Voltage Comparator ZCD1" + ], + "categorias": [ + "GPIO", + "Analog" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 12, + "nome": "GPIO12", + "tipo": "gpio", + "funcoes": [ + "GPIO12" + ], + "categorias": [ + "GPIO" + ], + "cor": "#3b82f6", + "restricoes": "Alimentado por VDDAPMU/VBAT" + }, + { + "numero": 13, + "nome": "GPIO13 (XTAL_32K_P)", + "tipo": "gpio", + "funcoes": [ + "GPIO13", + "XTAL_32K_P" + ], + "categorias": [ + "GPIO", + "RTC", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "Pode ser usado para cristal RTC de 32.768 kHz; alimentado por VDDAPMU/VBAT" + }, + { + "numero": 14, + "nome": "GPIO14 (XTAL_32K_N)", + "tipo": "gpio", + "funcoes": [ + "GPIO14", + "XTAL_32K_N" + ], + "categorias": [ + "GPIO", + "RTC", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "Pode ser usado para cristal RTC de 32.768 kHz; alimentado por VDDAPMU/VBAT" + }, + { + "numero": 22, + "nome": "GPIO22", + "tipo": "gpio", + "funcoes": [ + "GPIO22" + ], + "categorias": [ + "GPIO" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 23, + "nome": "GPIO23 (U0RXD)", + "tipo": "gpio", + "funcoes": [ + "GPIO23", + "UART0_RXD", + "FSPICS1" + ], + "categorias": [ + "GPIO", + "UART", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; UART0 RX para download de firmware" + }, + { + "numero": 24, + "nome": "GPIO24 (U0TXD)", + "tipo": "gpio", + "funcoes": [ + "GPIO24", + "UART0_TXD", + "FSPICS2" + ], + "categorias": [ + "GPIO", + "UART", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; UART0 TX para download de firmware" + }, + { + "numero": 25, + "nome": "GPIO25", + "tipo": "gpio", + "funcoes": [ + "GPIO25", + "FSPICS3" + ], + "categorias": [ + "GPIO", + "SPI", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Strapping pin para controle de fonte de sinal JTAG" + }, + { + "numero": 26, + "nome": "GPIO26", + "tipo": "gpio", + "funcoes": [ + "GPIO26", + "USB_D-", + "FSPICS4" + ], + "categorias": [ + "GPIO", + "USB", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "USB D- para USB OTG e USB Serial/JTAG; drive strength padrão 40mA" + }, + { + "numero": 27, + "nome": "GPIO27", + "tipo": "gpio", + "funcoes": [ + "GPIO27", + "USB_D+", + "FSPICS5" + ], + "categorias": [ + "GPIO", + "USB", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "USB D+ para USB OTG e USB Serial/JTAG; drive strength padrão 40mA" + }, + { + "numero": "XTAL_N", + "nome": "XTAL_N", + "tipo": "analog", + "funcoes": [ + "Entrada/saída de clock externo", + "Conexão ao cristal ou oscilador do chip" + ], + "categorias": [ + "Analog", + "Clock" + ], + "cor": "#a855f7", + "restricoes": "Clock diferencial negativo de 32 MHz" + }, + { + "numero": "XTAL_P", + "nome": "XTAL_P", + "tipo": "analog", + "funcoes": [ + "Entrada/saída de clock externo", + "Conexão ao cristal ou oscilador do chip" + ], + "categorias": [ + "Analog", + "Clock" + ], + "cor": "#a855f7", + "restricoes": "Clock diferencial positivo de 32 MHz" + }, + { + "numero": "ANT", + "nome": "ANT", + "tipo": "analog", + "funcoes": [ + "Entrada/saída RF para comunicação sem fio", + "Amplificador de baixo ruído RF" + ], + "categorias": [ + "Analog", + "RF" + ], + "cor": "#a855f7", + "restricoes": "Sinais de entrada/saída do LNA RF para comunicação 2.4 GHz Bluetooth LE e 802.15.4" + } +] \ No newline at end of file diff --git a/public/conexoes/ESP32-P4.json b/public/conexoes/ESP32-P4.json new file mode 100644 index 0000000..52839fd --- /dev/null +++ b/public/conexoes/ESP32-P4.json @@ -0,0 +1,1029 @@ +[ + { + "numero": "GND", + "nome": "GND", + "tipo": "ground", + "funcoes": [ + "Referência elétrica do sistema", + "Conexão externa de terra" + ], + "categorias": ["Ground"], + "cor": "#64748b", + "restricoes": "" + }, + { + "numero": "VDDLP", + "nome": "VDDLP", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio LP (Low Power)" + ], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDIO", + "nome": "VDDIO", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio digital para HP IO" + ], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDHP", + "nome": "VDDHP", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio digital HP" + ], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDFLASHIO", + "nome": "VDDFLASHIO", + "tipo": "power", + "funcoes": [ + "Alimentação para Flash IO" + ], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Tensão ajustável conforme modelo de flash (1.8 V ou 3.3 V)" + }, + { + "numero": "VDDMIPIDPHY", + "nome": "VDDMIPIDPHY", + "tipo": "power", + "funcoes": [ + "Alimentação para MIPI PHY" + ], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDUSBPHY", + "nome": "VDDUSBPHY", + "tipo": "power", + "funcoes": [ + "Alimentação para USB PHY" + ], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Opera entre 2.97 V e 3.63 V (típico 3.3 V)" + }, + { + "numero": "VDDPSRAM", + "nome": "VDDPSRAM", + "tipo": "power", + "funcoes": [ + "Alimentação para PSRAM IO" + ], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDOFLASH", + "nome": "VDDOFLASH", + "tipo": "power", + "funcoes": [ + "Saída de alimentação para flash off-package", + "Corrente máxima de saída: 50 mA" + ], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Tensão configurável: 1.8 V ou 3.3 V via eFuse" + }, + { + "numero": "VDDOPSRAM", + "nome": "VDDOPSRAM", + "tipo": "power", + "funcoes": [ + "Saída de alimentação para PSRAM", + "Corrente máxima de saída: 50 mA" + ], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "" + }, + { + "numero": "VDDLDO", + "nome": "VDDLDO", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio analógico", + "Fornece alimentação para LDOs internos" + ], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDDCDCC", + "nome": "VDDDCDCC", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio analógico", + "Fornece alimentação para DCDC interno" + ], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDANA", + "nome": "VDDANA", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio analógico" + ], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDBAT", + "nome": "VDDBAT", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio analógico", + "Conexão opcional a baterias externas" + ], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "CHIP_PU", + "nome": "CHIP_PU (EN)", + "tipo": "power", + "funcoes": [ + "Habilitar chip (nível alto)", + "Resetar o chip (nível baixo)" + ], + "categorias": ["Power", "Reset"], + "cor": "#f97316", + "restricoes": "Deve estar em nível alto para operação normal; não deixar flutuante" + }, + { + "numero": 0, + "nome": "GPIO0", + "tipo": "gpio", + "funcoes": [ + "GPIO0", + "LPGPIO0", + "XTAL_32K_N" + ], + "categorias": ["GPIO", "RTC", "Clock"], + "cor": "#3b82f6", + "restricoes": "Pode ser usado para cristal RTC de 32.768 kHz" + }, + { + "numero": 1, + "nome": "GPIO1", + "tipo": "gpio", + "funcoes": [ + "GPIO1", + "LPGPIO1", + "XTAL_32K_P" + ], + "categorias": ["GPIO", "RTC", "Clock"], + "cor": "#3b82f6", + "restricoes": "Pode ser usado para cristal RTC de 32.768 kHz" + }, + { + "numero": 2, + "nome": "GPIO2", + "tipo": "gpio", + "funcoes": [ + "GPIO2", + "LPGPIO2", + "MTCK", + "TOUCH_CHANNEL1" + ], + "categorias": ["GPIO", "RTC", "JTAG", "Touch"], + "cor": "#3b82f6", + "restricoes": "JTAG Test Clock; pull-up interno habilitado" + }, + { + "numero": 3, + "nome": "GPIO3", + "tipo": "gpio", + "funcoes": [ + "GPIO3", + "LPGPIO3", + "MTDI", + "TOUCH_CHANNEL2" + ], + "categorias": ["GPIO", "RTC", "JTAG", "Touch"], + "cor": "#3b82f6", + "restricoes": "JTAG Test Data In" + }, + { + "numero": 4, + "nome": "GPIO4", + "tipo": "gpio", + "funcoes": [ + "GPIO4", + "LPGPIO4", + "MTMS", + "TOUCH_CHANNEL3" + ], + "categorias": ["GPIO", "RTC", "JTAG", "Touch"], + "cor": "#3b82f6", + "restricoes": "JTAG Test Mode Select" + }, + { + "numero": 5, + "nome": "GPIO5", + "tipo": "gpio", + "funcoes": [ + "GPIO5", + "LPGPIO5", + "MTDO", + "TOUCH_CHANNEL4" + ], + "categorias": ["GPIO", "RTC", "JTAG", "Touch"], + "cor": "#3b82f6", + "restricoes": "JTAG Test Data Out" + }, + { + "numero": 6, + "nome": "GPIO6", + "tipo": "gpio", + "funcoes": [ + "GPIO6", + "LPGPIO6", + "SPI2_HOLD", + "TOUCH_CHANNEL5" + ], + "categorias": ["GPIO", "RTC", "SPI", "Touch"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 7, + "nome": "GPIO7", + "tipo": "gpio", + "funcoes": [ + "GPIO7", + "LPGPIO7", + "SPI2_CS", + "TOUCH_CHANNEL6" + ], + "categorias": ["GPIO", "RTC", "SPI", "Touch"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 8, + "nome": "GPIO8", + "tipo": "gpio", + "funcoes": [ + "GPIO8", + "LPGPIO8", + "SPI2_D", + "TOUCH_CHANNEL7" + ], + "categorias": ["GPIO", "RTC", "SPI", "Touch", "Strapping"], + "cor": "#3b82f6", + "restricoes": "Strapping pin para controle de modo de boot e impressão ROM" + }, + { + "numero": 9, + "nome": "GPIO9", + "tipo": "gpio", + "funcoes": [ + "GPIO9", + "LPGPIO9", + "SPI2_CLK", + "TOUCH_CHANNEL8" + ], + "categorias": ["GPIO", "RTC", "SPI", "Touch", "Strapping"], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; strapping pin para modo boot" + }, + { + "numero": 10, + "nome": "GPIO10", + "tipo": "gpio", + "funcoes": [ + "GPIO10", + "LPGPIO10", + "SPI2_Q", + "TOUCH_CHANNEL9" + ], + "categorias": ["GPIO", "RTC", "SPI", "Touch"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 11, + "nome": "GPIO11", + "tipo": "gpio", + "funcoes": [ + "GPIO11", + "LPGPIO11", + "SPI2_WP", + "TOUCH_CHANNEL10" + ], + "categorias": ["GPIO", "RTC", "SPI", "Touch"], + "cor": "#3b82f6", + "restricoes": "Pode ser configurado como GPIO se flash for alimentado externamente" + }, + { + "numero": 12, + "nome": "GPIO12", + "tipo": "gpio", + "funcoes": [ + "GPIO12", + "LPGPIO12", + "TOUCH_CHANNEL11" + ], + "categorias": ["GPIO", "RTC", "Touch"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 13, + "nome": "GPIO13", + "tipo": "gpio", + "funcoes": [ + "GPIO13", + "LPGPIO13", + "TOUCH_CHANNEL12" + ], + "categorias": ["GPIO", "RTC", "Touch"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 14, + "nome": "GPIO14", + "tipo": "gpio", + "funcoes": [ + "GPIO14", + "LPGPIO14", + "LP_UART_TXD", + "TOUCH_CHANNEL13" + ], + "categorias": ["GPIO", "RTC", "UART", "Touch"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 15, + "nome": "GPIO15", + "tipo": "gpio", + "funcoes": [ + "GPIO15", + "LPGPIO15", + "LP_UART_RXD", + "TOUCH_CHANNEL14" + ], + "categorias": ["GPIO", "RTC", "UART", "Touch"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 16, + "nome": "GPIO16", + "tipo": "gpio", + "funcoes": [ + "GPIO16", + "ADC1_CH0" + ], + "categorias": ["GPIO", "ADC"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 17, + "nome": "GPIO17", + "tipo": "gpio", + "funcoes": [ + "GPIO17", + "ADC1_CH1" + ], + "categorias": ["GPIO", "ADC"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 18, + "nome": "GPIO18", + "tipo": "gpio", + "funcoes": [ + "GPIO18", + "ADC1_CH2" + ], + "categorias": ["GPIO", "ADC"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 19, + "nome": "GPIO19", + "tipo": "gpio", + "funcoes": [ + "GPIO19", + "ADC1_CH3" + ], + "categorias": ["GPIO", "ADC"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 20, + "nome": "GPIO20", + "tipo": "gpio", + "funcoes": [ + "GPIO20", + "ADC1_CH4" + ], + "categorias": ["GPIO", "ADC"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 21, + "nome": "GPIO21", + "tipo": "gpio", + "funcoes": [ + "GPIO21", + "ADC1_CH5" + ], + "categorias": ["GPIO", "ADC"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 22, + "nome": "GPIO22", + "tipo": "gpio", + "funcoes": [ + "GPIO22", + "ADC1_CH6" + ], + "categorias": ["GPIO", "ADC"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 23, + "nome": "GPIO23", + "tipo": "gpio", + "funcoes": [ + "GPIO23", + "ADC1_CH7", + "REF_50M_CLK" + ], + "categorias": ["GPIO", "ADC", "Clock"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 24, + "nome": "GPIO24", + "tipo": "gpio", + "funcoes": [ + "GPIO24", + "USB_D-" + ], + "categorias": ["GPIO", "USB"], + "cor": "#3b82f6", + "restricoes": "USB D- para USB SerialJTAG; drive padrão 40 mA" + }, + { + "numero": 25, + "nome": "GPIO25", + "tipo": "gpio", + "funcoes": [ + "GPIO25", + "USB_D+" + ], + "categorias": ["GPIO", "USB"], + "cor": "#3b82f6", + "restricoes": "USB D+ para USB SerialJTAG; drive padrão 40 mA" + }, + { + "numero": 26, + "nome": "GPIO26", + "tipo": "gpio", + "funcoes": [ + "GPIO26", + "USB_D-" + ], + "categorias": ["GPIO", "USB"], + "cor": "#3b82f6", + "restricoes": "USB D- para USB OTG" + }, + { + "numero": 27, + "nome": "GPIO27", + "tipo": "gpio", + "funcoes": [ + "GPIO27", + "USB_D+" + ], + "categorias": ["GPIO", "USB"], + "cor": "#3b82f6", + "restricoes": "USB D+ para USB OTG" + }, + { + "numero": 28, + "nome": "GPIO28", + "tipo": "gpio", + "funcoes": [ + "GPIO28", + "SPI2_CS", + "EMAC_RX_DV" + ], + "categorias": ["GPIO", "SPI", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 29, + "nome": "GPIO29", + "tipo": "gpio", + "funcoes": [ + "GPIO29", + "SPI2_D", + "EMAC_RXD0" + ], + "categorias": ["GPIO", "SPI", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 30, + "nome": "GPIO30", + "tipo": "gpio", + "funcoes": [ + "GPIO30", + "SPI2_CLK", + "EMAC_RXD1" + ], + "categorias": ["GPIO", "SPI", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 31, + "nome": "GPIO31", + "tipo": "gpio", + "funcoes": [ + "GPIO31", + "SPI2_Q", + "EMAC_RX_ER" + ], + "categorias": ["GPIO", "SPI", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 32, + "nome": "GPIO32", + "tipo": "gpio", + "funcoes": [ + "GPIO32", + "SPI2_HOLD", + "EMAC_RMII_CLK" + ], + "categorias": ["GPIO", "SPI", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 33, + "nome": "GPIO33", + "tipo": "gpio", + "funcoes": [ + "GPIO33", + "SPI2_WP", + "EMAC_TX_EN" + ], + "categorias": ["GPIO", "SPI", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 34, + "nome": "GPIO34", + "tipo": "gpio", + "funcoes": [ + "GPIO34", + "SPI2_IO4", + "EMAC_TXD0" + ], + "categorias": ["GPIO", "SPI", "Ethernet", "Strapping"], + "cor": "#3b82f6", + "restricoes": "Strapping pin para controle de fonte de sinal JTAG" + }, + { + "numero": 35, + "nome": "GPIO35", + "tipo": "gpio", + "funcoes": [ + "GPIO35", + "SPI2_IO5", + "EMAC_TXD1" + ], + "categorias": ["GPIO", "SPI", "Ethernet", "Strapping"], + "cor": "#3b82f6", + "restricoes": "Strapping pin para controle de modo de boot; pull-up interno" + }, + { + "numero": 36, + "nome": "GPIO36", + "tipo": "gpio", + "funcoes": [ + "GPIO36", + "SPI2_IO6", + "EMAC_TX_ER" + ], + "categorias": ["GPIO", "SPI", "Ethernet", "Strapping"], + "cor": "#3b82f6", + "restricoes": "Strapping pin para controle de impressão de mensagens ROM" + }, + { + "numero": 37, + "nome": "GPIO37", + "tipo": "gpio", + "funcoes": [ + "GPIO37", + "UART0_TXD", + "SPI2_IO7" + ], + "categorias": ["GPIO", "UART", "SPI", "Strapping"], + "cor": "#3b82f6", + "restricoes": "Strapping pin; UART0 TX para download de firmware" + }, + { + "numero": 38, + "nome": "GPIO38", + "tipo": "gpio", + "funcoes": [ + "GPIO38", + "UART0_RXD", + "SPI2_DQS" + ], + "categorias": ["GPIO", "UART", "SPI", "Strapping"], + "cor": "#3b82f6", + "restricoes": "Strapping pin; UART0 RX para download de firmware" + }, + { + "numero": 39, + "nome": "GPIO39", + "tipo": "gpio", + "funcoes": [ + "GPIO39", + "SD1_DATA0", + "REF_50M_CLK" + ], + "categorias": ["GPIO", "SDMMC", "Clock"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 40, + "nome": "GPIO40", + "tipo": "gpio", + "funcoes": [ + "GPIO40", + "SD1_DATA1", + "EMAC_TX_EN" + ], + "categorias": ["GPIO", "SDMMC", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 41, + "nome": "GPIO41", + "tipo": "gpio", + "funcoes": [ + "GPIO41", + "SD1_DATA2", + "EMAC_TXD0" + ], + "categorias": ["GPIO", "SDMMC", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 42, + "nome": "GPIO42", + "tipo": "gpio", + "funcoes": [ + "GPIO42", + "SD1_DATA3", + "EMAC_TXD1" + ], + "categorias": ["GPIO", "SDMMC", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 43, + "nome": "GPIO43", + "tipo": "gpio", + "funcoes": [ + "GPIO43", + "SD1_CLK", + "EMAC_TX_ER" + ], + "categorias": ["GPIO", "SDMMC", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 44, + "nome": "GPIO44", + "tipo": "gpio", + "funcoes": [ + "GPIO44", + "SD1_CMD", + "EMAC_RMII_CLK" + ], + "categorias": ["GPIO", "SDMMC", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 45, + "nome": "GPIO45", + "tipo": "gpio", + "funcoes": [ + "GPIO45", + "SD1_DATA4", + "EMAC_RX_DV" + ], + "categorias": ["GPIO", "SDMMC", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 46, + "nome": "GPIO46", + "tipo": "gpio", + "funcoes": [ + "GPIO46", + "SD1_DATA5", + "EMAC_RXD0" + ], + "categorias": ["GPIO", "SDMMC", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 47, + "nome": "GPIO47", + "tipo": "gpio", + "funcoes": [ + "GPIO47", + "SD1_DATA6", + "EMAC_RXD1" + ], + "categorias": ["GPIO", "SDMMC", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 48, + "nome": "GPIO48", + "tipo": "gpio", + "funcoes": [ + "GPIO48", + "SD1_DATA7", + "EMAC_RX_ER" + ], + "categorias": ["GPIO", "SDMMC", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 49, + "nome": "GPIO49", + "tipo": "gpio", + "funcoes": [ + "GPIO49", + "ADC2_CH0", + "EMAC_TX_EN" + ], + "categorias": ["GPIO", "ADC", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 50, + "nome": "GPIO50", + "tipo": "gpio", + "funcoes": [ + "GPIO50", + "ADC2_CH1", + "EMAC_RMII_CLK" + ], + "categorias": ["GPIO", "ADC", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 51, + "nome": "GPIO51", + "tipo": "gpio", + "funcoes": [ + "GPIO51", + "ADC2_CH2", + "ANACOMP0_P", + "EMAC_RX_DV" + ], + "categorias": ["GPIO", "ADC", "Analog", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 52, + "nome": "GPIO52", + "tipo": "gpio", + "funcoes": [ + "GPIO52", + "ADC2_CH3", + "ANACOMP0_N", + "EMAC_RXD0" + ], + "categorias": ["GPIO", "ADC", "Analog", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 53, + "nome": "GPIO53", + "tipo": "gpio", + "funcoes": [ + "GPIO53", + "ADC2_CH4", + "ANACOMP1_P", + "EMAC_RXD1" + ], + "categorias": ["GPIO", "ADC", "Analog", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 54, + "nome": "GPIO54", + "tipo": "gpio", + "funcoes": [ + "GPIO54", + "ADC2_CH5", + "ANACOMP1_N", + "EMAC_RX_ER" + ], + "categorias": ["GPIO", "ADC", "Analog", "Ethernet"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": "FLASHCS", + "nome": "FLASH_CS", + "tipo": "dedicated", + "funcoes": [ + "Chip Select para Flash" + ], + "categorias": ["Flash"], + "cor": "#f97316", + "restricoes": "Pino dedicado para Flash; não usar como GPIO" + }, + { + "numero": "FLASHQ", + "nome": "FLASH_Q", + "tipo": "dedicated", + "funcoes": [ + "Data output do Flash (MISO)" + ], + "categorias": ["Flash"], + "cor": "#f97316", + "restricoes": "Pino dedicado para Flash; não usar como GPIO" + }, + { + "numero": "FLASHD", + "nome": "FLASH_D", + "tipo": "dedicated", + "funcoes": [ + "Data input do Flash (MOSI)" + ], + "categorias": ["Flash"], + "cor": "#f97316", + "restricoes": "Pino dedicado para Flash; não usar como GPIO" + }, + { + "numero": "FLASHCK", + "nome": "FLASH_CLK", + "tipo": "dedicated", + "funcoes": [ + "Clock do Flash" + ], + "categorias": ["Flash"], + "cor": "#f97316", + "restricoes": "Pino dedicado para Flash; não usar como GPIO" + }, + { + "numero": "FLASHWP", + "nome": "FLASH_WP", + "tipo": "dedicated", + "funcoes": [ + "Write Protect do Flash" + ], + "categorias": ["Flash"], + "cor": "#f97316", + "restricoes": "Pino dedicado para Flash; não usar como GPIO" + }, + { + "numero": "FLASHHOLD", + "nome": "FLASH_HOLD", + "tipo": "dedicated", + "funcoes": [ + "Hold do Flash" + ], + "categorias": ["Flash"], + "cor": "#f97316", + "restricoes": "Pino dedicado para Flash; não usar como GPIO" + }, + { + "numero": "USBDM", + "nome": "USB_D-", + "tipo": "dedicated", + "funcoes": [ + "USB D- para USB 2.0 OTG High-Speed" + ], + "categorias": ["USB"], + "cor": "#a855f7", + "restricoes": "Pino dedicado para USB OTG" + }, + { + "numero": "USBDP", + "nome": "USB_D+", + "tipo": "dedicated", + "funcoes": [ + "USB D+ para USB 2.0 OTG High-Speed" + ], + "categorias": ["USB"], + "cor": "#a855f7", + "restricoes": "Pino dedicado para USB OTG" + }, + { + "numero": "XTAL_N", + "nome": "XTAL_N", + "tipo": "analog", + "funcoes": [ + "Entrada/saída de clock externo", + "Conexão ao cristal ou oscilador do chip" + ], + "categorias": ["Analog", "Clock"], + "cor": "#a855f7", + "restricoes": "Clock diferencial negativo" + }, + { + "numero": "XTAL_P", + "nome": "XTAL_P", + "tipo": "analog", + "funcoes": [ + "Entrada/saída de clock externo", + "Conexão ao cristal ou oscilador do chip" + ], + "categorias": ["Analog", "Clock"], + "cor": "#a855f7", + "restricoes": "Clock diferencial positivo" + }, + { + "numero": "FBDCDC", + "nome": "FB_DCDC", + "tipo": "analog", + "funcoes": [ + "Feedback de alimentação para DCDC externo", + "Regula tensão de VDDHP0/2/3" + ], + "categorias": ["Analog", "Power"], + "cor": "#a855f7", + "restricoes": "" + }, + { + "numero": "ENDCDC", + "nome": "EN_DCDC", + "tipo": "analog", + "funcoes": [ + "Enable pin para DCDC externo" + ], + "categorias": ["Analog", "Power"], + "cor": "#a855f7", + "restricoes": "" + } +] diff --git a/public/conexoes/ESP32-S2.json b/public/conexoes/ESP32-S2.json new file mode 100644 index 0000000..ada4f23 --- /dev/null +++ b/public/conexoes/ESP32-S2.json @@ -0,0 +1,883 @@ +[ + { + "numero": "GND", + "nome": "GND", + "tipo": "ground", + "funcoes": [ + "Referência elétrica do sistema", + "Referência para nível lógico baixo" + ], + "categorias": [ + "Ground" + ], + "cor": "#64748b", + "restricoes": "" + }, + { + "numero": "VDDA", + "nome": "VDDA", + "tipo": "power", + "funcoes": [ + "Alimentação analógica do chip" + ], + "categorias": [ + "Power", + "Analog" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 2.8 V e 3.6 V" + }, + { + "numero": "VDD3P3", + "nome": "VDD3P3", + "tipo": "power", + "funcoes": [ + "Alimentação analógica do chip" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 2.8 V e 3.6 V" + }, + { + "numero": "VDD3P3_RTC", + "nome": "VDD3P3_RTC", + "tipo": "power", + "funcoes": [ + "Alimentação para o domínio RTC analógico" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 2.8 V e 3.6 V" + }, + { + "numero": "VDD3P3_RTCIO", + "nome": "VDD3P3_RTCIO", + "tipo": "power", + "funcoes": [ + "Alimentação para RTC IO" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V" + }, + { + "numero": "VDD3P3_CPU", + "nome": "VDD3P3_CPU", + "tipo": "power", + "funcoes": [ + "Alimentação para CPU IO" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 2.8 V e 3.6 V; não exceder 3.3 V para gravação de eFuse" + }, + { + "numero": "VDDSPI", + "nome": "VDDSPI", + "tipo": "power", + "funcoes": [ + "Alimentação dos barramentos de Flash e PSRAM" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Pode ser 1.8 V ou 3.3 V configurável via GPIO45" + }, + { + "numero": "CHIP_PU", + "nome": "CHIP_PU (EN)", + "tipo": "power", + "funcoes": [ + "Habilitar chip (nível alto)", + "Reseta o chip (nível baixo)" + ], + "categorias": [ + "Power" + ], + "cor": "#f97316", + "restricoes": "Deve estar em nível alto para operação normal; não deixar flutuante" + }, + { + "numero": 0, + "nome": "GPIO0", + "tipo": "gpio", + "funcoes": [ + "GPIO0", + "RTC_GPIO0" + ], + "categorias": [ + "GPIO", + "RTC", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; strapping pin para modo boot (alto=SPI boot, baixo=download boot)" + }, + { + "numero": 1, + "nome": "GPIO1", + "tipo": "gpio", + "funcoes": [ + "GPIO1", + "ADC1_CH0", + "TOUCH1", + "RTC_GPIO1" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 2, + "nome": "GPIO2", + "tipo": "gpio", + "funcoes": [ + "GPIO2", + "ADC1_CH1", + "TOUCH2", + "RTC_GPIO2" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 3, + "nome": "GPIO3", + "tipo": "gpio", + "funcoes": [ + "GPIO3", + "ADC1_CH2", + "TOUCH3", + "RTC_GPIO3" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 4, + "nome": "GPIO4", + "tipo": "gpio", + "funcoes": [ + "GPIO4", + "ADC1_CH3", + "TOUCH4", + "RTC_GPIO4" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 5, + "nome": "GPIO5", + "tipo": "gpio", + "funcoes": [ + "GPIO5", + "ADC1_CH4", + "TOUCH5", + "RTC_GPIO5" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 6, + "nome": "GPIO6", + "tipo": "gpio", + "funcoes": [ + "GPIO6", + "ADC1_CH5", + "TOUCH6", + "RTC_GPIO6" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 7, + "nome": "GPIO7", + "tipo": "gpio", + "funcoes": [ + "GPIO7", + "ADC1_CH6", + "TOUCH7", + "RTC_GPIO7" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 8, + "nome": "GPIO8", + "tipo": "gpio", + "funcoes": [ + "GPIO8", + "ADC1_CH7", + "TOUCH8", + "RTC_GPIO8" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 9, + "nome": "GPIO9", + "tipo": "gpio", + "funcoes": [ + "GPIO9", + "ADC1_CH8", + "TOUCH9", + "RTC_GPIO9", + "FSPIHD" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 10, + "nome": "GPIO10", + "tipo": "gpio", + "funcoes": [ + "GPIO10", + "ADC1_CH9", + "TOUCH10", + "RTC_GPIO10", + "FSPICS0", + "FSPIIO4" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 11, + "nome": "GPIO11", + "tipo": "gpio", + "funcoes": [ + "GPIO11", + "ADC2_CH0", + "TOUCH11", + "RTC_GPIO11", + "FSPID", + "FSPIIO5" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 12, + "nome": "GPIO12", + "tipo": "gpio", + "funcoes": [ + "GPIO12", + "ADC2_CH1", + "TOUCH12", + "RTC_GPIO12", + "FSPICLK", + "FSPIIO6" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 13, + "nome": "GPIO13", + "tipo": "gpio", + "funcoes": [ + "GPIO13", + "ADC2_CH2", + "TOUCH13", + "RTC_GPIO13", + "FSPIQ", + "FSPIIO7" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 14, + "nome": "GPIO14", + "tipo": "gpio", + "funcoes": [ + "GPIO14", + "ADC2_CH3", + "TOUCH14", + "RTC_GPIO14", + "FSPIWP", + "FSPIDQS" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 15, + "nome": "GPIO15", + "tipo": "gpio", + "funcoes": [ + "GPIO15", + "ADC2_CH4", + "RTC_GPIO15", + "UART0_RTS", + "XTAL_32K_P" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "UART", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "Pode ser usado para cristal RTC de 32.768 kHz" + }, + { + "numero": 16, + "nome": "GPIO16", + "tipo": "gpio", + "funcoes": [ + "GPIO16", + "ADC2_CH5", + "RTC_GPIO16", + "UART0_CTS", + "XTAL_32K_N" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "UART", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "Pode ser usado para cristal RTC de 32.768 kHz" + }, + { + "numero": 17, + "nome": "GPIO17", + "tipo": "gpio", + "funcoes": [ + "GPIO17", + "ADC2_CH6", + "DAC1", + "RTC_GPIO17", + "UART1_TXD" + ], + "categorias": [ + "GPIO", + "ADC", + "DAC", + "RTC", + "UART" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 18, + "nome": "GPIO18", + "tipo": "gpio", + "funcoes": [ + "GPIO18", + "ADC2_CH7", + "DAC2", + "RTC_GPIO18", + "UART1_RXD", + "CLKOUT3" + ], + "categorias": [ + "GPIO", + "ADC", + "DAC", + "RTC", + "UART", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 19, + "nome": "GPIO19", + "tipo": "gpio", + "funcoes": [ + "GPIO19", + "ADC2_CH8", + "RTC_GPIO19", + "UART1_RTS", + "CLKOUT2", + "USB_D-" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "UART", + "Clock", + "USB" + ], + "cor": "#3b82f6", + "restricoes": "USB D- para USB OTG" + }, + { + "numero": 20, + "nome": "GPIO20", + "tipo": "gpio", + "funcoes": [ + "GPIO20", + "ADC2_CH9", + "RTC_GPIO20", + "UART1_CTS", + "CLKOUT1", + "USB_D+" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "UART", + "Clock", + "USB" + ], + "cor": "#3b82f6", + "restricoes": "USB D+ para USB OTG" + }, + { + "numero": 21, + "nome": "GPIO21", + "tipo": "gpio", + "funcoes": [ + "GPIO21", + "RTC_GPIO21" + ], + "categorias": [ + "GPIO", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 26, + "nome": "GPIO26", + "tipo": "gpio", + "funcoes": [ + "GPIO26", + "SPICS1" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Usado para PSRAM embutida em ESP32-S2FN4R2 e ESP32-S2R2" + }, + { + "numero": 27, + "nome": "GPIO27", + "tipo": "gpio", + "funcoes": [ + "GPIO27", + "SPIHD" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash externa; não usar como GPIO normal" + }, + { + "numero": 28, + "nome": "GPIO28", + "tipo": "gpio", + "funcoes": [ + "GPIO28", + "SPIWP" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash externa; não usar como GPIO normal" + }, + { + "numero": 29, + "nome": "GPIO29", + "tipo": "gpio", + "funcoes": [ + "GPIO29", + "SPICS0" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash externa; não usar como GPIO normal" + }, + { + "numero": 30, + "nome": "GPIO30", + "tipo": "gpio", + "funcoes": [ + "GPIO30", + "SPICLK" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash externa; não usar como GPIO normal" + }, + { + "numero": 31, + "nome": "GPIO31", + "tipo": "gpio", + "funcoes": [ + "GPIO31", + "SPIQ" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash externa; não usar como GPIO normal" + }, + { + "numero": 32, + "nome": "GPIO32", + "tipo": "gpio", + "funcoes": [ + "GPIO32", + "SPID" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash externa; não usar como GPIO normal" + }, + { + "numero": 33, + "nome": "GPIO33", + "tipo": "gpio", + "funcoes": [ + "GPIO33", + "FSPIHD", + "SPIIO4" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Alimentação VDD3P3_CPU ou VDDSPI (configurável)" + }, + { + "numero": 34, + "nome": "GPIO34", + "tipo": "gpio", + "funcoes": [ + "GPIO34", + "FSPICS0", + "SPIIO5" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Alimentação VDD3P3_CPU ou VDDSPI (configurável)" + }, + { + "numero": 35, + "nome": "GPIO35", + "tipo": "gpio", + "funcoes": [ + "GPIO35", + "FSPID", + "SPIIO6" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Alimentação VDD3P3_CPU ou VDDSPI (configurável)" + }, + { + "numero": 36, + "nome": "GPIO36", + "tipo": "gpio", + "funcoes": [ + "GPIO36", + "FSPICLK", + "SPIIO7" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Alimentação VDD3P3_CPU ou VDDSPI (configurável)" + }, + { + "numero": 37, + "nome": "GPIO37", + "tipo": "gpio", + "funcoes": [ + "GPIO37", + "FSPIQ", + "SPIDQS" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Alimentação VDD3P3_CPU ou VDDSPI (configurável)" + }, + { + "numero": 38, + "nome": "GPIO38", + "tipo": "gpio", + "funcoes": [ + "GPIO38", + "FSPIWP" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 39, + "nome": "GPIO39", + "tipo": "gpio", + "funcoes": [ + "GPIO39", + "MTCK", + "CLKOUT3" + ], + "categorias": [ + "GPIO", + "JTAG", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "JTAG para depuração" + }, + { + "numero": 40, + "nome": "GPIO40", + "tipo": "gpio", + "funcoes": [ + "GPIO40", + "MTDO", + "CLKOUT2" + ], + "categorias": [ + "GPIO", + "JTAG", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "JTAG para depuração" + }, + { + "numero": 41, + "nome": "GPIO41", + "tipo": "gpio", + "funcoes": [ + "GPIO41", + "MTDI", + "CLKOUT1" + ], + "categorias": [ + "GPIO", + "JTAG", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "JTAG para depuração" + }, + { + "numero": 42, + "nome": "GPIO42", + "tipo": "gpio", + "funcoes": [ + "GPIO42", + "MTMS" + ], + "categorias": [ + "GPIO", + "JTAG" + ], + "cor": "#3b82f6", + "restricoes": "JTAG para depuração" + }, + { + "numero": 43, + "nome": "GPIO43", + "tipo": "gpio", + "funcoes": [ + "GPIO43", + "UART0_TXD", + "CLKOUT1" + ], + "categorias": [ + "GPIO", + "UART", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; UART0 TX para download de firmware" + }, + { + "numero": 44, + "nome": "GPIO44", + "tipo": "gpio", + "funcoes": [ + "GPIO44", + "UART0_RXD", + "CLKOUT2" + ], + "categorias": [ + "GPIO", + "UART", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; UART0 RX para download de firmware" + }, + { + "numero": 45, + "nome": "GPIO45", + "tipo": "gpio", + "funcoes": [ + "GPIO45" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Pull-down interno; strapping pin para seleção de tensão VDDSPI (baixo=3.3V, alto=1.8V)" + }, + { + "numero": 46, + "nome": "GPIO46", + "tipo": "gpio", + "funcoes": [ + "GPIO46" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#22c55e", + "restricoes": "Somente entrada (input-only); pull-down fixo; strapping para habilitar/desabilitar mensagens ROM" + } +] \ No newline at end of file diff --git a/public/conexoes/ESP32-S3.json b/public/conexoes/ESP32-S3.json new file mode 100644 index 0000000..3ea2d6d --- /dev/null +++ b/public/conexoes/ESP32-S3.json @@ -0,0 +1,945 @@ +[ + { + "numero": "GND", + "nome": "GND", + "tipo": "ground", + "funcoes": [ + "Referência elétrica do sistema", + "Conexão externa de terra" + ], + "categorias": [ + "Ground" + ], + "cor": "#64748b", + "restricoes": "" + }, + { + "numero": "VDD3P3", + "nome": "VDD3P3", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio analógico" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDDA", + "nome": "VDDA", + "tipo": "power", + "funcoes": [ + "Alimentação do domínio analógico" + ], + "categorias": [ + "Power", + "Analog" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDD3P3_RTC", + "nome": "VDD3P3_RTC", + "tipo": "power", + "funcoes": [ + "Alimentação para o domínio RTC e parte do domínio digital" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V)" + }, + { + "numero": "VDD3P3_CPU", + "nome": "VDD3P3_CPU", + "tipo": "power", + "funcoes": [ + "Alimentação para o domínio digital e CPU" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V (típico 3.3 V); não exceder 3.3 V para gravação de eFuse" + }, + { + "numero": "VDDSPI", + "nome": "VDDSPI", + "tipo": "power", + "funcoes": [ + "Alimentação dos barramentos Flash e PSRAM", + "Pode funcionar como entrada ou saída" + ], + "categorias": [ + "Power" + ], + "cor": "#ef4444", + "restricoes": "Pode ser 1.8 V ou 3.3 V configurável via GPIO45" + }, + { + "numero": "CHIP_PU", + "nome": "CHIP_PU (EN)", + "tipo": "power", + "funcoes": [ + "Habilitar chip (nível alto)", + "Reseta o chip (nível baixo)" + ], + "categorias": [ + "Power", + "Reset" + ], + "cor": "#f97316", + "restricoes": "Deve estar em nível alto para operação normal; não deixar flutuante" + }, + { + "numero": 0, + "nome": "GPIO0", + "tipo": "gpio", + "funcoes": [ + "GPIO0", + "RTC_GPIO0" + ], + "categorias": [ + "GPIO", + "RTC", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; strapping pin para modo boot (alto=SPI boot, baixo=download boot)" + }, + { + "numero": 1, + "nome": "GPIO1", + "tipo": "gpio", + "funcoes": [ + "GPIO1", + "ADC1_CH0", + "TOUCH1", + "RTC_GPIO1" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 2, + "nome": "GPIO2", + "tipo": "gpio", + "funcoes": [ + "GPIO2", + "ADC1_CH1", + "TOUCH2", + "RTC_GPIO2" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 3, + "nome": "GPIO3", + "tipo": "gpio", + "funcoes": [ + "GPIO3", + "ADC1_CH2", + "TOUCH3", + "RTC_GPIO3" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Strapping pin para controle de fonte de sinal JTAG; sem pull-up/down interno" + }, + { + "numero": 4, + "nome": "GPIO4", + "tipo": "gpio", + "funcoes": [ + "GPIO4", + "ADC1_CH3", + "TOUCH4", + "RTC_GPIO4" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 5, + "nome": "GPIO5", + "tipo": "gpio", + "funcoes": [ + "GPIO5", + "ADC1_CH4", + "TOUCH5", + "RTC_GPIO5" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 6, + "nome": "GPIO6", + "tipo": "gpio", + "funcoes": [ + "GPIO6", + "ADC1_CH5", + "TOUCH6", + "RTC_GPIO6" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 7, + "nome": "GPIO7", + "tipo": "gpio", + "funcoes": [ + "GPIO7", + "ADC1_CH6", + "TOUCH7", + "RTC_GPIO7" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 8, + "nome": "GPIO8", + "tipo": "gpio", + "funcoes": [ + "GPIO8", + "ADC1_CH7", + "TOUCH8", + "RTC_GPIO8" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 9, + "nome": "GPIO9", + "tipo": "gpio", + "funcoes": [ + "GPIO9", + "ADC1_CH8", + "TOUCH9", + "RTC_GPIO9", + "FSPIHD" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 10, + "nome": "GPIO10", + "tipo": "gpio", + "funcoes": [ + "GPIO10", + "ADC1_CH9", + "TOUCH10", + "RTC_GPIO10", + "FSPICS0", + "FSPIIO4" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 11, + "nome": "GPIO11", + "tipo": "gpio", + "funcoes": [ + "GPIO11", + "ADC2_CH0", + "TOUCH11", + "RTC_GPIO11", + "FSPID", + "FSPIIO5" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 12, + "nome": "GPIO12", + "tipo": "gpio", + "funcoes": [ + "GPIO12", + "ADC2_CH1", + "TOUCH12", + "RTC_GPIO12", + "FSPICLK", + "FSPIIO6" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 13, + "nome": "GPIO13", + "tipo": "gpio", + "funcoes": [ + "GPIO13", + "ADC2_CH2", + "TOUCH13", + "RTC_GPIO13", + "FSPIQ", + "FSPIIO7" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 14, + "nome": "GPIO14", + "tipo": "gpio", + "funcoes": [ + "GPIO14", + "ADC2_CH3", + "TOUCH14", + "RTC_GPIO14", + "FSPIWP", + "FSPIDQS" + ], + "categorias": [ + "GPIO", + "ADC", + "Touch", + "RTC", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 15, + "nome": "GPIO15", + "tipo": "gpio", + "funcoes": [ + "GPIO15", + "ADC2_CH4", + "RTC_GPIO15", + "XTAL_32K_P", + "UART0_RTS" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "UART", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "Pode ser usado para cristal RTC de 32.768 kHz" + }, + { + "numero": 16, + "nome": "GPIO16", + "tipo": "gpio", + "funcoes": [ + "GPIO16", + "ADC2_CH5", + "RTC_GPIO16", + "XTAL_32K_N", + "UART0_CTS" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "UART", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "Pode ser usado para cristal RTC de 32.768 kHz" + }, + { + "numero": 17, + "nome": "GPIO17", + "tipo": "gpio", + "funcoes": [ + "GPIO17", + "ADC2_CH6", + "RTC_GPIO17", + "UART1_TXD" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "UART" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 18, + "nome": "GPIO18", + "tipo": "gpio", + "funcoes": [ + "GPIO18", + "ADC2_CH7", + "RTC_GPIO18", + "UART1_RXD", + "CLKOUT3" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "UART", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 19, + "nome": "GPIO19", + "tipo": "gpio", + "funcoes": [ + "GPIO19", + "ADC2_CH8", + "RTC_GPIO19", + "UART1_RTS", + "CLKOUT2", + "USB_D-" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "UART", + "Clock", + "USB" + ], + "cor": "#3b82f6", + "restricoes": "USB D- para USB OTG e USB Serial/JTAG" + }, + { + "numero": 20, + "nome": "GPIO20", + "tipo": "gpio", + "funcoes": [ + "GPIO20", + "ADC2_CH9", + "RTC_GPIO20", + "UART1_CTS", + "CLKOUT1", + "USB_D+" + ], + "categorias": [ + "GPIO", + "ADC", + "RTC", + "UART", + "Clock", + "USB" + ], + "cor": "#3b82f6", + "restricoes": "USB D+ para USB OTG e USB Serial/JTAG" + }, + { + "numero": 21, + "nome": "GPIO21", + "tipo": "gpio", + "funcoes": [ + "GPIO21", + "RTC_GPIO21" + ], + "categorias": [ + "GPIO", + "RTC" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 26, + "nome": "GPIO26", + "tipo": "gpio", + "funcoes": [ + "GPIO26", + "SPICS1" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Usado para PSRAM embutida em algumas variantes; pull-up interno" + }, + { + "numero": 27, + "nome": "GPIO27", + "tipo": "gpio", + "funcoes": [ + "GPIO27", + "SPIHD" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash/PSRAM; não usar como GPIO normal; pull-up interno" + }, + { + "numero": 28, + "nome": "GPIO28", + "tipo": "gpio", + "funcoes": [ + "GPIO28", + "SPIWP" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash/PSRAM; não usar como GPIO normal; pull-up interno" + }, + { + "numero": 29, + "nome": "GPIO29", + "tipo": "gpio", + "funcoes": [ + "GPIO29", + "SPICS0" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash/PSRAM; não usar como GPIO normal; pull-up interno" + }, + { + "numero": 30, + "nome": "GPIO30", + "tipo": "gpio", + "funcoes": [ + "GPIO30", + "SPICLK" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash/PSRAM; não usar como GPIO normal; pull-up interno" + }, + { + "numero": 31, + "nome": "GPIO31", + "tipo": "gpio", + "funcoes": [ + "GPIO31", + "SPIQ" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash/PSRAM; não usar como GPIO normal; pull-up interno" + }, + { + "numero": 32, + "nome": "GPIO32", + "tipo": "gpio", + "funcoes": [ + "GPIO32", + "SPID" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#f97316", + "restricoes": "Compartilhado com flash/PSRAM; não usar como GPIO normal; pull-up interno" + }, + { + "numero": 33, + "nome": "GPIO33", + "tipo": "gpio", + "funcoes": [ + "GPIO33", + "FSPIHD", + "SPIIO4" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Alimentação VDD3P3_CPU ou VDDSPI (configurável); usado para modo SPI de 8 linhas" + }, + { + "numero": 34, + "nome": "GPIO34", + "tipo": "gpio", + "funcoes": [ + "GPIO34", + "FSPICS0", + "SPIIO5" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Alimentação VDD3P3_CPU ou VDDSPI (configurável); usado para modo SPI de 8 linhas" + }, + { + "numero": 35, + "nome": "GPIO35", + "tipo": "gpio", + "funcoes": [ + "GPIO35", + "FSPID", + "SPIIO6" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Alimentação VDD3P3_CPU ou VDDSPI (configurável); usado para modo SPI de 8 linhas" + }, + { + "numero": 36, + "nome": "GPIO36", + "tipo": "gpio", + "funcoes": [ + "GPIO36", + "FSPICLK", + "SPIIO7" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Alimentação VDD3P3_CPU ou VDDSPI (configurável); usado para modo SPI de 8 linhas" + }, + { + "numero": 37, + "nome": "GPIO37", + "tipo": "gpio", + "funcoes": [ + "GPIO37", + "FSPIQ", + "SPIDQS" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "Alimentação VDD3P3_CPU ou VDDSPI (configurável); usado para modo SPI de 8 linhas" + }, + { + "numero": 38, + "nome": "GPIO38", + "tipo": "gpio", + "funcoes": [ + "GPIO38", + "FSPIWP" + ], + "categorias": [ + "GPIO", + "SPI" + ], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 39, + "nome": "GPIO39", + "tipo": "gpio", + "funcoes": [ + "GPIO39", + "MTCK", + "CLKOUT3" + ], + "categorias": [ + "GPIO", + "JTAG", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "JTAG para depuração" + }, + { + "numero": 40, + "nome": "GPIO40", + "tipo": "gpio", + "funcoes": [ + "GPIO40", + "MTDO", + "CLKOUT2" + ], + "categorias": [ + "GPIO", + "JTAG", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "JTAG para depuração" + }, + { + "numero": 41, + "nome": "GPIO41", + "tipo": "gpio", + "funcoes": [ + "GPIO41", + "MTDI", + "CLKOUT1" + ], + "categorias": [ + "GPIO", + "JTAG", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "JTAG para depuração" + }, + { + "numero": 42, + "nome": "GPIO42", + "tipo": "gpio", + "funcoes": [ + "GPIO42", + "MTMS" + ], + "categorias": [ + "GPIO", + "JTAG" + ], + "cor": "#3b82f6", + "restricoes": "JTAG para depuração" + }, + { + "numero": 43, + "nome": "GPIO43", + "tipo": "gpio", + "funcoes": [ + "GPIO43", + "UART0_TXD", + "CLKOUT1" + ], + "categorias": [ + "GPIO", + "UART", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; UART0 TX para download de firmware" + }, + { + "numero": 44, + "nome": "GPIO44", + "tipo": "gpio", + "funcoes": [ + "GPIO44", + "UART0_RXD", + "CLKOUT2" + ], + "categorias": [ + "GPIO", + "UART", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "Pull-up interno; UART0 RX para download de firmware" + }, + { + "numero": 45, + "nome": "GPIO45", + "tipo": "gpio", + "funcoes": [ + "GPIO45" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#3b82f6", + "restricoes": "Pull-down interno; strapping pin para seleção de tensão VDDSPI (baixo=3.3V, alto=1.8V)" + }, + { + "numero": 46, + "nome": "GPIO46", + "tipo": "gpio", + "funcoes": [ + "GPIO46" + ], + "categorias": [ + "GPIO", + "Strapping" + ], + "cor": "#22c55e", + "restricoes": "Somente entrada (input-only); pull-down interno; strapping para boot mode e controle de mensagens ROM" + }, + { + "numero": 47, + "nome": "GPIO47", + "tipo": "gpio", + "funcoes": [ + "GPIO47", + "SPICLK_P_DIFF" + ], + "categorias": [ + "GPIO", + "SPI", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "Clock diferencial positivo para barramento SPI" + }, + { + "numero": 48, + "nome": "GPIO48", + "tipo": "gpio", + "funcoes": [ + "GPIO48", + "SPICLK_N_DIFF" + ], + "categorias": [ + "GPIO", + "SPI", + "Clock" + ], + "cor": "#3b82f6", + "restricoes": "Clock diferencial negativo para barramento SPI" + }, + { + "numero": "XTAL_N", + "nome": "XTAL_N", + "tipo": "analog", + "funcoes": [ + "Entrada/saída de clock externo", + "Conexão ao cristal ou oscilador do chip" + ], + "categorias": [ + "Analog", + "Clock" + ], + "cor": "#a855f7", + "restricoes": "Clock diferencial negativo" + }, + { + "numero": "XTAL_P", + "nome": "XTAL_P", + "tipo": "analog", + "funcoes": [ + "Entrada/saída de clock externo", + "Conexão ao cristal ou oscilador do chip" + ], + "categorias": [ + "Analog", + "Clock" + ], + "cor": "#a855f7", + "restricoes": "Clock diferencial positivo" + }, + { + "numero": "LNA", + "nome": "LNA_IN", + "tipo": "analog", + "funcoes": [ + "Entrada/saída do amplificador de baixo ruído RF" + ], + "categorias": [ + "Analog", + "RF" + ], + "cor": "#a855f7", + "restricoes": "Sinais de entrada/saída do LNA RF" + } +] \ No newline at end of file diff --git a/public/conexoes/ESP32.json b/public/conexoes/ESP32.json new file mode 100644 index 0000000..67f9790 --- /dev/null +++ b/public/conexoes/ESP32.json @@ -0,0 +1,362 @@ +[ + { + "numero": "GND", + "nome": "GND", + "tipo": "ground", + "funcoes": ["Referência elétrica do sistema", "Referência para nível lógico baixo"], + "categorias": ["Ground"], + "cor": "#64748b", + "restricoes": "" + }, + { + "numero": "CPU", + "nome": "VDD3P3_CPU", + "tipo": "power", + "funcoes": ["Alimentação digital principal"], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Opera entre 1.8 V e 3.6 V" + }, + { + "numero": "RTC", + "nome": "VDD3P3_RTC", + "tipo": "power", + "funcoes": ["Alimentação para o domínio RTC", "Alimentação de referência para o LDO interno"], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V em chips com flash; entre 2.3 V e 3.6 V sem flash" + }, + { + "numero": "SDIO", + "nome": "VDD_SDIO", + "tipo": "power", + "funcoes": ["Alimentação dos barramentos de Flash e PSRAM"], + "categorias": ["Power"], + "cor": "#ef4444", + "restricoes": "Tensão definida pela GPIO12 na inicialização" + }, + { + "numero": "VDDA", + "nome": "VDDA", + "tipo": "power", + "funcoes": ["Alimentação analógica do chip", "Alimentação de referência para o ADC"], + "categorias": ["Power", "Analog"], + "cor": "#ef4444", + "restricoes": "Opera entre 3.0 V e 3.6 V com flash; entre 2.3 V e 3.6 V sem flash" + }, + { + "numero": "CHIP_PU", + "nome": "CHIP_PU (EN)", + "tipo": "power", + "funcoes": ["Habilitar chip (nível alto)", "Reseta a placa (nível baixo)"], + "categorias": ["Power"], + "cor": "#f97316", + "restricoes": "Deve estar em nível alto para operação normal; usar resistor pull-up para evitar reset acidental" + }, + { + "numero": 0, + "nome": "GPIO0", + "tipo": "gpio", + "funcoes": ["GPIO0", "ADC2_CH1", "RTC_GPIO11", "TOUCH1", "HSPIWP", "I2C_SDA_RTC", "CLK_OUT1", "PWM"], + "categorias": ["GPIO", "ADC", "RTC", "Touch", "SPI", "I2C", "Clock", "PWM", "Strapping"], + "cor": "#3b82f6", + "restricoes": "Resistor pull-up interno; uso como strapping durante boot; modo download firmware em nível baixo" + }, + { + "numero": 1, + "nome": "GPIO1", + "tipo": "gpio", + "funcoes": ["GPIO1", "UART0_TXD", "CLK_OUT3", "PWM"], + "categorias": ["GPIO", "UART", "Clock", "PWM"], + "cor": "#3b82f6", + "restricoes": "Resistor pull-up interno; usado para download de firmware" + }, + { + "numero": 2, + "nome": "GPIO2", + "tipo": "gpio", + "funcoes": ["GPIO2", "ADC2_CH2", "RTC_GPIO12", "TOUCH2", "I2C_SCL_RTC", "HSPIWP", "PWM"], + "categorias": ["GPIO", "ADC", "RTC", "Touch", "I2C", "PWM", "Strapping"], + "cor": "#3b82f6", + "restricoes": "Resistor pull-down interno; habilita download firmware junto com GPIO0 em nível baixo" + }, + { + "numero": 3, + "nome": "GPIO3", + "tipo": "gpio", + "funcoes": ["GPIO3", "UART0_RXD", "CLK_OUT2", "PWM"], + "categorias": ["GPIO", "UART", "Clock", "PWM"], + "cor": "#3b82f6", + "restricoes": "Resistor pull-up interno; usado para download de firmware" + }, + { + "numero": 4, + "nome": "GPIO4", + "tipo": "gpio", + "funcoes": ["GPIO4", "ADC2_CH0", "RTC_GPIO10", "TOUCH0", "HSPIHD", "I2C_SCL_RTC", "PWM"], + "categorias": ["GPIO", "ADC", "RTC", "Touch", "SPI", "I2C", "PWM"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 5, + "nome": "GPIO5", + "tipo": "gpio", + "funcoes": ["GPIO5", "VSPICS0", "PWM"], + "categorias": ["GPIO", "SPI", "PWM", "Strapping"], + "cor": "#3b82f6", + "restricoes": "Resistor pull-up interno; leitura em bordas para strapping" + }, + { + "numero": 6, + "nome": "GPIO6", + "tipo": "gpio", + "funcoes": ["GPIO6", "SPICLK", "UART1_CTS", "PWM"], + "categorias": ["GPIO", "SPI", "UART", "PWM"], + "cor": "#f97316", + "restricoes": "Compartilhado com memória flash externa; não usar como GPIO normal" + }, + { + "numero": 7, + "nome": "GPIO7", + "tipo": "gpio", + "funcoes": ["GPIO7", "SPIQ", "UART2_RTS", "PWM"], + "categorias": ["GPIO", "SPI", "UART", "PWM"], + "cor": "#f97316", + "restricoes": "Compartilhado com memória flash externa; não usar como GPIO normal" + }, + { + "numero": 8, + "nome": "GPIO8", + "tipo": "gpio", + "funcoes": ["GPIO8", "SPID", "UART2_CTS", "PWM"], + "categorias": ["GPIO", "SPI", "UART", "PWM"], + "cor": "#f97316", + "restricoes": "Compartilhado com memória flash externa; não usar como GPIO normal" + }, + { + "numero": 9, + "nome": "GPIO9", + "tipo": "gpio", + "funcoes": ["GPIO9", "SPIHD", "UART1_RXD", "PWM"], + "categorias": ["GPIO", "SPI", "UART", "PWM"], + "cor": "#f97316", + "restricoes": "Compartilhado com memória flash externa; não usar como GPIO normal" + }, + { + "numero": 10, + "nome": "GPIO10", + "tipo": "gpio", + "funcoes": ["GPIO10", "SPIWP", "UART1_TXD", "PWM"], + "categorias": ["GPIO", "SPI", "UART", "PWM"], + "cor": "#f97316", + "restricoes": "Compartilhado com memória flash externa; não usar como GPIO normal" + }, + { + "numero": 11, + "nome": "GPIO11", + "tipo": "gpio", + "funcoes": ["GPIO11", "SPICS0", "UART1_RTS", "PWM"], + "categorias": ["GPIO", "SPI", "UART", "PWM"], + "cor": "#f97316", + "restricoes": "Compartilhado com memória flash externa; não usar como GPIO normal" + }, + { + "numero": 12, + "nome": "GPIO12", + "tipo": "gpio", + "funcoes": ["GPIO12", "ADC2_CH5", "RTC_GPIO15", "TOUCH5", "HSPIQ", "JTAG_MTDI", "PWM"], + "categorias": ["GPIO", "ADC", "RTC", "Touch", "SPI", "JTAG", "Strapping", "PWM"], + "cor": "#3b82f6", + "restricoes": "Resistor pull-down interno; seleção nível tensão flash externa; VDD_SDIO definida na inicialização" + }, + { + "numero": 13, + "nome": "GPIO13", + "tipo": "gpio", + "funcoes": ["GPIO13", "ADC2_CH4", "RTC_GPIO14", "TOUCH4", "HSPID", "JTAG_MTCK", "PWM"], + "categorias": ["GPIO", "ADC", "RTC", "Touch", "SPI", "JTAG", "PWM"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 14, + "nome": "GPIO14", + "tipo": "gpio", + "funcoes": ["GPIO14", "ADC2_CH6", "RTC_GPIO16", "TOUCH6", "HSPICLK", "JTAG_MTMS", "PWM"], + "categorias": ["GPIO", "ADC", "RTC", "Touch", "SPI", "JTAG", "PWM"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 15, + "nome": "GPIO15", + "tipo": "gpio", + "funcoes": ["GPIO15", "ADC2_CH3", "RTC_GPIO13", "TOUCH3", "HSPICS0", "I2C_SDA_RTC", "JTAG_MTDO", "PWM"], + "categorias": ["GPIO", "ADC", "RTC", "Touch", "SPI", "I2C", "JTAG", "Strapping", "PWM"], + "cor": "#3b82f6", + "restricoes": "Resistor pull-up interno; controla logs na UART 0; configurações strapping" + }, + { + "numero": 16, + "nome": "GPIO16", + "tipo": "gpio", + "funcoes": ["GPIO16", "UART2_RXD", "PWM"], + "categorias": ["GPIO", "UART", "PWM"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 17, + "nome": "GPIO17", + "tipo": "gpio", + "funcoes": ["GPIO17", "UART2_TXD", "PWM"], + "categorias": ["GPIO", "UART", "PWM"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 18, + "nome": "GPIO18", + "tipo": "gpio", + "funcoes": ["GPIO18", "VSPICLK", "PWM"], + "categorias": ["GPIO", "SPI", "PWM"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 19, + "nome": "GPIO19", + "tipo": "gpio", + "funcoes": ["GPIO19", "UART0_CTS", "VSPIQ", "PWM"], + "categorias": ["GPIO", "UART", "SPI", "PWM"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 21, + "nome": "GPIO21", + "tipo": "gpio", + "funcoes": ["GPIO21", "VSPIHD", "PWM"], + "categorias": ["GPIO", "SPI", "PWM"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 22, + "nome": "GPIO22", + "tipo": "gpio", + "funcoes": ["GPIO22", "UART0_RTS", "VSPIWP", "PWM"], + "categorias": ["GPIO", "UART", "SPI", "PWM"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 23, + "nome": "GPIO23", + "tipo": "gpio", + "funcoes": ["GPIO23", "VSPID", "PWM"], + "categorias": ["GPIO", "SPI", "PWM"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 25, + "nome": "GPIO25", + "tipo": "gpio", + "funcoes": ["GPIO25", "ADC2_CH8", "RTC_GPIO6", "DAC1", "PWM"], + "categorias": ["GPIO", "ADC", "RTC", "DAC", "PWM"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 26, + "nome": "GPIO26", + "tipo": "gpio", + "funcoes": ["GPIO26", "ADC2_CH9", "RTC_GPIO7", "DAC2", "PWM"], + "categorias": ["GPIO", "ADC", "RTC", "DAC", "PWM"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 27, + "nome": "GPIO27", + "tipo": "gpio", + "funcoes": ["GPIO27", "ADC2_CH7", "RTC_GPIO17", "TOUCH7", "PWM"], + "categorias": ["GPIO", "ADC", "RTC", "Touch", "PWM"], + "cor": "#3b82f6", + "restricoes": "" + }, + { + "numero": 32, + "nome": "GPIO32", + "tipo": "gpio", + "funcoes": ["GPIO32", "ADC1_CH4", "RTC_GPIO9", "TOUCH9", "XTAL_32K_P", "PWM"], + "categorias": ["GPIO", "ADC", "RTC", "Touch", "Clock", "PWM"], + "cor": "#3b82f6", + "restricoes": "Cristal oscilador externo opcional para RTC; frequência 32.768 kHz" + }, + { + "numero": 33, + "nome": "GPIO33", + "tipo": "gpio", + "funcoes": ["GPIO33", "ADC1_CH5", "RTC_GPIO8", "TOUCH8", "XTAL_32K_N", "PWM"], + "categorias": ["GPIO", "ADC", "RTC", "Touch", "Clock", "PWM"], + "cor": "#3b82f6", + "restricoes": "Cristal oscilador externo opcional para RTC; frequência 32.768 kHz" + }, + { + "numero": 34, + "nome": "GPIO34", + "tipo": "gpio", + "funcoes": ["GPIO34", "ADC1_CH6", "RTC_GPIO4"], + "categorias": ["GPIO", "ADC", "RTC"], + "cor": "#22c55e", + "restricoes": "Somente entrada; não suporta saída" + }, + { + "numero": 35, + "nome": "GPIO35", + "tipo": "gpio", + "funcoes": ["GPIO35", "ADC1_CH7", "RTC_GPIO5"], + "categorias": ["GPIO", "ADC", "RTC"], + "cor": "#22c55e", + "restricoes": "Somente entrada; não suporta saída" + }, + { + "numero": 36, + "nome": "GPIO36", + "tipo": "gpio", + "funcoes": ["GPIO36", "ADC1_CH0", "RTC_GPIO0"], + "categorias": ["GPIO", "ADC", "RTC"], + "cor": "#22c55e", + "restricoes": "Somente entrada; não suporta saída" + }, + { + "numero": 37, + "nome": "GPIO37", + "tipo": "gpio", + "funcoes": ["GPIO37", "ADC1_CH1", "RTC_GPIO1"], + "categorias": ["GPIO", "ADC", "RTC"], + "cor": "#22c55e", + "restricoes": "Somente entrada; não suporta saída" + }, + { + "numero": 38, + "nome": "GPIO38", + "tipo": "gpio", + "funcoes": ["GPIO38", "ADC1_CH2", "RTC_GPIO2"], + "categorias": ["GPIO", "ADC", "RTC"], + "cor": "#22c55e", + "restricoes": "Somente entrada; não suporta saída" + }, + { + "numero": 39, + "nome": "GPIO39", + "tipo": "gpio", + "funcoes": ["GPIO39", "ADC1_CH3", "RTC_GPIO3"], + "categorias": ["GPIO", "ADC", "RTC"], + "cor": "#22c55e", + "restricoes": "Somente entrada (input-only)" + } +] diff --git a/public/frameworks.json b/public/frameworks.json new file mode 100644 index 0000000..2e72f75 --- /dev/null +++ b/public/frameworks.json @@ -0,0 +1,241 @@ +{ + "ESP-IDF": { + "nome": "ESP-IDF", + "icone": "⚙️", + "nome_completo": "Espressif IoT Development Framework", + "descricao": "Framework oficial de desenvolvimento da Espressif para ESP32, baseado em FreeRTOS", + "linguagem": "C/C++", + "tipo": "Framework Base", + "funcao_principal": "Desenvolvimento de aplicações IoT de propósito geral com acesso completo ao hardware", + "caracteristicas": [ + "Sistema operacional em tempo real (FreeRTOS)", + "Pilha completa de Wi-Fi e Bluetooth", + "Suporte a todos os periféricos do ESP32", + "Ferramentas de build e debug integradas", + "Gerenciamento de energia avançado", + "Suporte OTA (Over-The-Air updates)", + "Biblioteca de componentes extensível" + ], + "casos_uso": [ + "Dispositivos IoT conectados", + "Automação residencial e industrial", + "Wearables e dispositivos vestíveis", + "Gateways e hubs de comunicação", + "Sistemas embarcados em tempo real" + ], + "exemplo_codigo": "#include \"freertos/FreeRTOS.h\"\n#include \"freertos/task.h\"\n#include \"esp_wifi.h\"\n#include \"esp_log.h\"\n\nstatic const char *TAG = \"app_main\";\n\nvoid app_main(void)\n{\n ESP_LOGI(TAG, \"Iniciando aplicação ESP32\");\n \n // Inicializar Wi-Fi\n esp_netif_init();\n esp_event_loop_create_default();\n \n // Configurar Wi-Fi em modo station\n wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();\n esp_wifi_init(&cfg);\n \n ESP_LOGI(TAG, \"Wi-Fi inicializado com sucesso\");\n}", + "documentacao": "https://docs.espressif.com/projects/esp-idf/", + "repositorio": "https://github.com/espressif/esp-idf", + "cor": "#E74C3C" + }, + "ESP-ADF": { + "nome": "ESP-ADF", + "icone": "🎵", + "nome_completo": "ESP Audio Development Framework", + "descricao": "Framework especializado para aplicações de áudio no ESP32", + "linguagem": "C/C++", + "tipo": "Framework Especializado", + "funcao_principal": "Desenvolvimento de aplicações de áudio com suporte a codecs, streaming e processamento", + "caracteristicas": [ + "Suporte a múltiplos codecs de áudio (MP3, AAC, FLAC, WAV, etc.)", + "Pipeline de áudio configurável", + "Streaming de áudio via HTTP, HTTPS, HLS", + "Integração com serviços de nuvem (AWS, Google, Baidu)", + "Reconhecimento de voz e wake word", + "Equalização e efeitos de áudio", + "Suporte a Bluetooth A2DP e HFP" + ], + "casos_uso": [ + "Alto-falantes inteligentes", + "Assistentes de voz", + "Rádios de internet", + "Players de música", + "Interfones e intercomunicadores", + "Sistemas de PA (Public Address)" + ], + "exemplo_codigo": "#include \"audio_pipeline.h\"\n#include \"audio_element.h\"\n#include \"mp3_decoder.h\"\n#include \"i2s_stream.h\"\n\nvoid app_main(void)\n{\n // Criar pipeline de áudio\n audio_pipeline_handle_t pipeline = audio_pipeline_init(&pipeline_cfg);\n \n // Criar elementos: HTTP stream -> MP3 decoder -> I2S output\n audio_element_handle_t http_stream = http_stream_init(&http_cfg);\n audio_element_handle_t mp3_decoder = mp3_decoder_init(&mp3_cfg);\n audio_element_handle_t i2s_stream = i2s_stream_init(&i2s_cfg);\n \n // Registrar elementos no pipeline\n audio_pipeline_register(pipeline, http_stream, \"http\");\n audio_pipeline_register(pipeline, mp3_decoder, \"mp3\");\n audio_pipeline_register(pipeline, i2s_stream, \"i2s\");\n \n // Conectar elementos\n audio_pipeline_link(pipeline, (const char *[]){\"http\", \"mp3\", \"i2s\"}, 3);\n \n // Iniciar reprodução\n audio_pipeline_run(pipeline);\n}", + "documentacao": "https://docs.espressif.com/projects/esp-adf/", + "repositorio": "https://github.com/espressif/esp-adf", + "cor": "#3498DB" + }, + "ESP-DSP": { + "nome": "ESP-DSP", + "icone": "📊", + "nome_completo": "ESP Digital Signal Processing Library", + "descricao": "Biblioteca otimizada para processamento digital de sinais no ESP32", + "linguagem": "C/C++", + "tipo": "Biblioteca Especializada", + "funcao_principal": "Processamento de sinais digitais com algoritmos otimizados para arquitetura ESP32", + "caracteristicas": [ + "Operações matemáticas otimizadas (FFT, convolução, correlação)", + "Filtros digitais (FIR, IIR, Kalman)", + "Transformadas (FFT, DCT, DWT)", + "Operações de matriz e vetores", + "Suporte a ponto fixo e ponto flutuante", + "Otimizações específicas para Xtensa e RISC-V" + ], + "casos_uso": [ + "Análise de sinais de áudio", + "Processamento de sinais de sensores", + "Filtros adaptativos", + "Análise espectral", + "Compressão de dados", + "Reconhecimento de padrões" + ], + "exemplo_codigo": "#include \"esp_dsp.h\"\n\n#define N_SAMPLES 1024\nfloat input[N_SAMPLES];\nfloat output[N_SAMPLES];\n\nvoid app_main(void)\n{\n // Inicializar biblioteca DSP\n dsps_fft2r_init_fc32(NULL, N_SAMPLES);\n \n // Gerar sinal de entrada (exemplo: onda senoidal)\n for (int i = 0; i < N_SAMPLES; i++) {\n input[i] = sinf(2 * M_PI * 50 * i / N_SAMPLES);\n }\n \n // Aplicar FFT\n dsps_fft2r_fc32(input, N_SAMPLES);\n \n // Calcular magnitude do espectro\n for (int i = 0; i < N_SAMPLES / 2; i++) {\n output[i] = sqrtf(input[i*2] * input[i*2] + \n input[i*2+1] * input[i*2+1]);\n }\n}", + "documentacao": "https://docs.espressif.com/projects/esp-dsp/", + "repositorio": "https://github.com/espressif/esp-dsp", + "cor": "#9B59B6" + }, + "ESP-WHO": { + "nome": "ESP-WHO", + "icone": "📷", + "nome_completo": "ESP Image Processing Framework", + "descricao": "Framework para processamento de imagens e visão computacional no ESP32", + "linguagem": "C/C++", + "tipo": "Framework Especializado", + "funcao_principal": "Detecção facial, reconhecimento facial e processamento de imagens", + "caracteristicas": [ + "Detecção de faces em tempo real", + "Reconhecimento facial", + "Detecção de pontos faciais (landmarks)", + "Rastreamento de objetos", + "Otimizado para ESP32-S3 com aceleradores de IA", + "Suporte a câmeras via interface DVP", + "Modelos de rede neural otimizados" + ], + "casos_uso": [ + "Sistemas de reconhecimento facial", + "Controle de acesso inteligente", + "Câmeras de segurança com IA", + "Detecção de presença", + "Análise de expressões faciais", + "Contagem de pessoas" + ], + "exemplo_codigo": "#include \"esp_camera.h\"\n#include \"fd_forward.h\"\n#include \"fr_forward.h\"\n\nvoid app_main(void)\n{\n // Inicializar câmera\n camera_config_t config = {\n .pin_pwdn = -1,\n .pin_reset = -1,\n .pin_xclk = 21,\n .pin_sscb_sda = 26,\n .pin_sscb_scl = 27,\n // ... outras configurações\n };\n esp_camera_init(&config);\n \n // Capturar frame\n camera_fb_t *fb = esp_camera_fb_get();\n \n // Detectar faces\n dl_matrix3du_t *image_matrix = dl_matrix3du_alloc(1, fb->width, fb->height, 3);\n box_array_t *detected = face_detect(image_matrix, &mtmn_config);\n \n if (detected) {\n printf(\"Detectadas %d faces\\n\", detected->len);\n // Processar faces detectadas\n }\n \n // Liberar recursos\n esp_camera_fb_return(fb);\n}", + "documentacao": "https://github.com/espressif/esp-who", + "repositorio": "https://github.com/espressif/esp-who", + "cor": "#E67E22" + }, + "ESP-NN": { + "nome": "ESP-NN", + "icone": "🧠", + "nome_completo": "ESP Neural Network Library", + "descricao": "Biblioteca de redes neurais otimizada para ESP32", + "linguagem": "C/C++", + "tipo": "Biblioteca Especializada", + "funcao_principal": "Inferência de redes neurais com otimizações específicas para ESP32", + "caracteristicas": [ + "Operações de rede neural otimizadas", + "Suporte a convolução, pooling, fully connected", + "Quantização de 8 e 16 bits", + "Otimizações SIMD para Xtensa e RISC-V", + "Compatível com TensorFlow Lite", + "Baixo consumo de memória", + "Aceleração via instruções vetoriais" + ], + "casos_uso": [ + "Classificação de imagens", + "Detecção de objetos", + "Reconhecimento de voz", + "Predição de séries temporais", + "Detecção de anomalias", + "IA na borda (Edge AI)" + ], + "exemplo_codigo": "#include \"esp_nn.h\"\n\n#define INPUT_SIZE 224*224*3\n#define OUTPUT_SIZE 1000\n\nint8_t input_data[INPUT_SIZE];\nint8_t output_data[OUTPUT_SIZE];\n\nvoid app_main(void)\n{\n // Preparar dados de entrada (imagem pré-processada)\n // ...\n \n // Executar camada de convolução\n esp_nn_conv2d_s8(\n input_data, // entrada\n output_data, // saída\n weights, // pesos\n bias, // bias\n input_height, // altura entrada\n input_width, // largura entrada\n input_channels, // canais entrada\n output_channels, // canais saída\n kernel_size, // tamanho kernel\n stride, // stride\n padding // padding\n );\n \n // Processar saída\n int predicted_class = get_max_index(output_data, OUTPUT_SIZE);\n printf(\"Classe predita: %d\\n\", predicted_class);\n}", + "documentacao": "https://github.com/espressif/esp-nn", + "repositorio": "https://github.com/espressif/esp-nn", + "cor": "#1ABC9C" + }, + "ESP-Matter": { + "nome": "ESP-Matter", + "icone": "🏠", + "nome_completo": "ESP Matter SDK", + "descricao": "SDK para desenvolvimento de dispositivos compatíveis com o padrão Matter", + "linguagem": "C/C++", + "tipo": "Framework Especializado", + "funcao_principal": "Criar dispositivos smart home interoperáveis usando o padrão Matter", + "caracteristicas": [ + "Compatibilidade com padrão Matter (ex-Project CHIP)", + "Interoperabilidade entre ecossistemas (Apple, Google, Amazon)", + "Suporte a Thread e Wi-Fi", + "Comissionamento simplificado", + "Segurança robusta (PKI, criptografia)", + "Modelos de dispositivos pré-definidos", + "Integração com ESP-IDF" + ], + "casos_uso": [ + "Lâmpadas inteligentes", + "Tomadas e interruptores smart", + "Sensores de temperatura e umidade", + "Fechaduras inteligentes", + "Termostatos", + "Dispositivos de controle de cortinas" + ], + "exemplo_codigo": "#include \"esp_matter.h\"\n#include \"esp_matter_console.h\"\n\nusing namespace esp_matter;\nusing namespace chip::app::Clusters;\n\nvoid app_main(void)\n{\n // Criar nó Matter\n node_t *node = node::create(&node_config, NULL, NULL);\n \n // Criar endpoint de lâmpada\n endpoint_t *endpoint = on_off_light::create(\n node, \n &endpoint_config, \n ENDPOINT_FLAG_NONE\n );\n \n // Adicionar cluster On/Off\n cluster_t *cluster = cluster::get(endpoint, OnOff::Id);\n \n // Iniciar Matter\n esp_matter::start(NULL);\n \n // Aguardar comissionamento\n printf(\"Dispositivo Matter pronto para comissionamento\\n\");\n}", + "documentacao": "https://docs.espressif.com/projects/esp-matter/", + "repositorio": "https://github.com/espressif/esp-matter", + "cor": "#F39C12" + }, + "Arduino": { + "nome": "Arduino", + "icone": "🛠️", + "nome_completo": "Arduino Core for ESP32", + "descricao": "Implementação do framework Arduino para ESP32, facilitando o desenvolvimento", + "linguagem": "C++", + "tipo": "Framework Alternativo", + "funcao_principal": "Desenvolvimento rápido e simplificado usando a API familiar do Arduino", + "caracteristicas": [ + "API simples e intuitiva", + "Grande comunidade e bibliotecas", + "IDE Arduino integrada", + "Suporte a Wi-Fi e Bluetooth", + "Compatibilidade com bibliotecas Arduino", + "Ideal para prototipagem rápida", + "Curva de aprendizado suave" + ], + "casos_uso": [ + "Prototipagem rápida", + "Projetos educacionais", + "Makers e hobistas", + "IoT simples", + "Sensores e atuadores básicos", + "Projetos DIY" + ], + "exemplo_codigo": "#include \n\nconst char* ssid = \"Sua_Rede\";\nconst char* password = \"Sua_Senha\";\n\nvoid setup() {\n Serial.begin(115200);\n \n // Conectar ao Wi-Fi\n WiFi.begin(ssid, password);\n \n while (WiFi.status() != WL_CONNECTED) {\n delay(500);\n Serial.print(\".\");\n }\n \n Serial.println(\"\");\n Serial.println(\"WiFi conectado\");\n Serial.print(\"Endereço IP: \");\n Serial.println(WiFi.localIP());\n}\n\nvoid loop() {\n // Seu código aqui\n delay(1000);\n}", + "documentacao": "https://docs.espressif.com/projects/arduino-esp32/", + "repositorio": "https://github.com/espressif/arduino-esp32", + "cor": "#00979D" + }, + "MicroPython": { + "nome": "MicroPython", + "icone": "🐍", + "nome_completo": "MicroPython for ESP32", + "descricao": "Implementação do Python 3 otimizada para microcontroladores ESP32", + "linguagem": "Python", + "tipo": "Framework Alternativo", + "funcao_principal": "Desenvolvimento em Python para prototipagem rápida e scripting", + "caracteristicas": [ + "Sintaxe Python 3", + "REPL interativo", + "Desenvolvimento iterativo", + "Bibliotecas padrão Python", + "Suporte a Wi-Fi e Bluetooth", + "Sistema de arquivos integrado", + "Ideal para educação e prototipagem" + ], + "casos_uso": [ + "Prototipagem rápida", + "Educação e ensino", + "Scripts de automação", + "IoT experimental", + "Projetos de ciência de dados embarcados", + "Testes e validação" + ], + "exemplo_codigo": "import network\nimport time\n\n# Conectar ao Wi-Fi\nwlan = network.WLAN(network.STA_IF)\nwlan.active(True)\nwlan.connect('Sua_Rede', 'Sua_Senha')\n\n# Aguardar conexão\nwhile not wlan.isconnected():\n time.sleep(0.5)\n print('.', end='')\n\nprint('\\nWi-Fi conectado')\nprint('IP:', wlan.ifconfig()[0])\n\n# Exemplo: Ler sensor e enviar dados\nwhile True:\n # Ler sensor\n temperatura = 25.5 # exemplo\n \n print(f'Temperatura: {temperatura}°C')\n time.sleep(1)", + "documentacao": "https://docs.micropython.org/en/latest/esp32/", + "repositorio": "https://github.com/micropython/micropython", + "cor": "#2B2B2B" + } +} + diff --git a/public/placas/esp32-c2.png b/public/placas/esp32-c2.png new file mode 100644 index 0000000..fe9d50f Binary files /dev/null and b/public/placas/esp32-c2.png differ diff --git a/public/placas/esp32-c3.png b/public/placas/esp32-c3.png new file mode 100644 index 0000000..e2022e3 Binary files /dev/null and b/public/placas/esp32-c3.png differ diff --git a/public/placas/esp32-c5.png b/public/placas/esp32-c5.png new file mode 100644 index 0000000..8e99706 Binary files /dev/null and b/public/placas/esp32-c5.png differ diff --git a/public/placas/esp32-c6.png b/public/placas/esp32-c6.png new file mode 100644 index 0000000..57290ba Binary files /dev/null and b/public/placas/esp32-c6.png differ diff --git a/public/placas/esp32-c61.png b/public/placas/esp32-c61.png new file mode 100644 index 0000000..af802c5 Binary files /dev/null and b/public/placas/esp32-c61.png differ diff --git a/public/placas/esp32-h2.png b/public/placas/esp32-h2.png new file mode 100644 index 0000000..1e326e6 Binary files /dev/null and b/public/placas/esp32-h2.png differ diff --git a/public/placas/esp32-p4.png b/public/placas/esp32-p4.png new file mode 100644 index 0000000..25f6c7b Binary files /dev/null and b/public/placas/esp32-p4.png differ diff --git a/public/placas/esp32-s2.png b/public/placas/esp32-s2.png new file mode 100644 index 0000000..2bf7f57 Binary files /dev/null and b/public/placas/esp32-s2.png differ diff --git a/public/placas/esp32-s3.png b/public/placas/esp32-s3.png new file mode 100644 index 0000000..0fcd270 Binary files /dev/null and b/public/placas/esp32-s3.png differ diff --git a/public/placas/esp32.png b/public/placas/esp32.png new file mode 100644 index 0000000..a954087 Binary files /dev/null and b/public/placas/esp32.png differ diff --git a/public/series.json b/public/series.json new file mode 100644 index 0000000..ca35839 --- /dev/null +++ b/public/series.json @@ -0,0 +1,266 @@ +{ + "ESP32": { + "nome_completo": "ESP32 (Clássico)", + "icone": "🔷", + "descricao": "O modelo original com processador dual-core e ampla gama de periféricos", + "arquitetura": "Xtensa® LX6 dual-core de 32 bits", + "nucleos": "1 (Single-core) ou 2 (Dual-core)", + "frequencia": "Até 240 MHz", + "coprocessador_ulp": "Sim", + "wifi": "IEEE 802.11 b/g/n (2.4 GHz, até 150 Mbps)", + "bluetooth": "Bluetooth v4.2 BR/EDR (Clássico) e BLE (Low Energy)", + "memoria_sram": "520 KB", + "memoria_sram_rtc": "16 KB (dividida em RTC FAST e RTC SLOW)", + "memoria_rom": "448 KB (para boot e funções core)", + "flash_externa": "Até 16 MB via QSPI", + "psram_externa": "Até 8 MB via QSPI (em módulos específicos como WROVER)", + "gpio": "34 (alguns pinos têm restrições)", + "adc": "2x SAR ADC de 12 bits, até 18 canais", + "dac": "2x DAC de 8 bits", + "touch": "10 canais capacitivos", + "uart": "3", + "spi": "4 (SPI, HSPI, VSPI - 2 podem ser usados para Flash/PSRAM)", + "i2c": "2", + "i2s": "2", + "pwm": "LED PWM (até 16 canais), Motor PWM", + "ethernet_mac": "1 (requer PHY externo)", + "can": "1 (CAN 2.0, TWAI®)", + "sdio": "1 (SD/SDIO/MMC Host), 1 (SDIO/SPI Slave)", + "sensor_hall": "1 (interno)", + "sensor_temperatura": "1 (interno, precisão limitada)", + "temperatura_operacao": "-40°C a 125°C", + "temperatura_armazenamento": "-40°C a 150°C", + "datasheet": "https://documentation.espressif.com/esp32_datasheet_en.pdf", + "cor": "#007bff" + }, + "ESP32-S2": { + "nome_completo": "ESP32-S2", + "icone": "🔒", + "descricao": "Foco em segurança e baixo consumo, com USB nativo e ADC de 13 bits", + "arquitetura": "Xtensa® LX7 single-core de 32 bits", + "nucleos": "1 (Single-core)", + "frequencia": "Até 240 MHz", + "coprocessador_ulp": "Sim (RISC-V)", + "wifi": "IEEE 802.11 b/g/n (2.4 GHz, até 150 Mbps)", + "bluetooth": "Não", + "memoria_sram": "320 KB", + "memoria_sram_rtc": "16 KB", + "memoria_rom": "128 KB", + "flash_externa": "Até 1 GB via QSPI", + "psram_externa": "Até 1 GB via QSPI/Octal SPI", + "gpio": "43", + "adc": "2x SAR ADC de 13 bits, até 20 canais", + "dac": "2x DAC de 8 bits", + "touch": "14 canais capacitivos", + "uart": "2", + "spi": "4 (SPI0/1 para Flash, SPI2/3 para uso geral)", + "i2c": "2", + "i2s": "1", + "pwm": "LED PWM (até 8 canais)", + "usb": "1 (USB OTG 1.1)", + "lcd": "Interface LCD de 8/16 bits", + "camera": "Interface DVP de 8/16 bits", + "sensor_temperatura": "1 (interno)", + "temperatura_operacao": "-40°C a 85°C", + "temperatura_armazenamento": "-40°C a 150°C", + "datasheet": "https://documentation.espressif.com/esp32-s2_datasheet_en.pdf", + "cor": "#28a745" + }, + "ESP32-S3": { + "nome_completo": "ESP32-S3", + "icone": "🤖", + "descricao": "Processador dual-core com aceleradores para IA e processamento de sinal", + "arquitetura": "Xtensa® LX7 dual-core de 32 bits", + "nucleos": "2 (Dual-core)", + "frequencia": "Até 240 MHz", + "coprocessador_ulp": "Sim (RISC-V)", + "aceleradores_ia": "Sim (Vector Instructions para IA)", + "wifi": "IEEE 802.11 b/g/n (2.4 GHz, até 150 Mbps)", + "bluetooth": "Bluetooth 5.0 LE", + "memoria_sram": "512 KB", + "memoria_sram_rtc": "16 KB", + "memoria_rom": "384 KB", + "flash_externa": "Até 1 GB via QSPI/Octal SPI", + "psram_externa": "Até 1 GB via QSPI/Octal SPI", + "gpio": "45", + "adc": "2x SAR ADC de 12 bits, até 20 canais", + "dac": "Não", + "touch": "14 canais capacitivos", + "uart": "3", + "spi": "4 (SPI0/1 para Flash, SPI2/3 para uso geral)", + "i2c": "2", + "i2s": "2", + "pwm": "LED PWM (até 8 canais), Motor PWM (6 canais)", + "usb": "1 (USB OTG 1.1)", + "lcd": "Interface LCD RGB de 8/16 bits", + "camera": "Interface DVP de 8/16 bits", + "sdio": "1 (SD/SDIO/MMC Host)", + "sensor_temperatura": "1 (interno)", + "temperatura_operacao": "-40°C a 85°C", + "temperatura_armazenamento": "-40°C a 150°C", + "datasheet": "https://documentation.espressif.com/esp32-s3_datasheet_en.pdf", + "cor": "#fd7e14" + }, + "ESP32-C3": { + "nome_completo": "ESP32-C3", + "icone": "💎", + "descricao": "Processador RISC-V de baixo custo, substituto do ESP8266", + "arquitetura": "RISC-V single-core de 32 bits", + "nucleos": "1 (Single-core)", + "frequencia": "Até 160 MHz", + "wifi": "IEEE 802.11 b/g/n (2.4 GHz, até 150 Mbps)", + "bluetooth": "Bluetooth 5.0 LE", + "memoria_sram": "400 KB", + "memoria_sram_rtc": "8 KB", + "memoria_rom": "384 KB", + "flash_externa": "Até 16 MB via QSPI", + "psram_externa": "Não", + "gpio": "22", + "adc": "2x SAR ADC de 12 bits, até 6 canais", + "dac": "Não", + "touch": "Não", + "uart": "2", + "spi": "3 (SPI0/1 para Flash, SPI2 para uso geral)", + "i2c": "1", + "i2s": "1", + "pwm": "LED PWM (até 6 canais)", + "usb": "1 (USB Serial/JTAG)", + "sensor_temperatura": "1 (interno)", + "temperatura_operacao": "-40°C a 105°C", + "temperatura_armazenamento": "-40°C a 150°C", + "datasheet": "https://documentation.espressif.com/esp32-c3_datasheet_en.pdf", + "cor": "#20c997" + }, + "ESP32-C5": { + "nome_completo": "ESP32-C5", + "icone": "📶", + "descricao": "O primeiro com suporte a Wi-Fi 6 dual-band e Bluetooth 5.3, equipado com um processador RISC-V", + "arquitetura": "RISC-V single-core de 32 bits", + "nucleos": "1 (Single-core)", + "frequencia": "Até 240 MHz", + "wifi": "Wi-Fi 6 (802.11ax) dual-band 2.4 GHz e 5 GHz", + "bluetooth": "Bluetooth 5.3 LE", + "zigbee_thread": "IEEE 802.15.4", + "memoria_sram": "560 KB", + "memoria_sram_rtc": "16 KB", + "memoria_rom": "320 KB", + "flash_externa": "Até 16 MB via QSPI", + "psram_externa": "Não", + "gpio": "28", + "adc": "1x SAR ADC de 12 bits, até 7 canais", + "dac": "Não", + "touch": "Não", + "uart": "3", + "spi": "3", + "i2c": "2", + "i2s": "1", + "pwm": "LED PWM (até 6 canais), Motor PWM", + "usb": "1 (USB Serial/JTAG)", + "sensor_temperatura": "1 (interno)", + "temperatura_operacao": "-40°C a 85°C", + "temperatura_armazenamento": "-40°C a 150°C", + "datasheet": "https://documentation.espressif.com/esp32-c5_datasheet_en.pdf", + "cor": "#6f42c1" + }, + "ESP32-C6": { + "nome_completo": "ESP32-C6", + "icone": "🌐", + "descricao": "Recursos de segurança avançada, Wi-Fi 6, Bluetooth, Zigbee e Thread com suporte a Matter", + "arquitetura": "RISC-V single-core de 32 bits", + "nucleos": "1 (Single-core)", + "frequencia": "Até 160 MHz", + "wifi": "Wi-Fi 6 (802.11ax) 2.4 GHz", + "bluetooth": "Bluetooth 5.3 LE", + "zigbee_thread": "IEEE 802.15.4 (Zigbee, Thread)", + "matter": "Sim", + "memoria_sram": "512 KB", + "memoria_sram_rtc": "16 KB", + "memoria_rom": "320 KB", + "flash_externa": "Até 16 MB via QSPI", + "psram_externa": "Não", + "gpio": "30", + "adc": "1x SAR ADC de 12 bits, até 7 canais", + "dac": "Não", + "touch": "Não", + "uart": "3", + "spi": "3", + "i2c": "2", + "i2s": "1", + "pwm": "LED PWM (até 6 canais), Motor PWM", + "usb": "1 (USB Serial/JTAG)", + "sdio": "1 (SD/SDIO/MMC Host)", + "sensor_temperatura": "1 (interno)", + "temperatura_operacao": "-40°C a 105°C", + "temperatura_armazenamento": "-40°C a 150°C", + "datasheet": "https://documentation.espressif.com/esp32-c6_datasheet_en.pdf", + "cor": "#17a2b8" + }, + "ESP32-P4": { + "nome_completo": "ESP32-P4", + "icone": "⚡", + "descricao": "Alto desempenho com processador RISC-V dual-core a 400MHz e aceleradores de IA", + "arquitetura": "RISC-V dual-core de 32 bits", + "nucleos": "2 (Dual-core)", + "frequencia": "Até 400 MHz", + "aceleradores_ia": "Sim (Vector Instructions, aceleradores de IA)", + "wifi": "Não (sem conectividade wireless integrada)", + "bluetooth": "Não", + "ethernet": "Sim (Ethernet MAC integrado)", + "memoria_sram": "768 KB", + "memoria_rom": "768 KB", + "flash_externa": "Até 128 MB via QSPI/Octal SPI", + "psram_externa": "Até 32 MB via QSPI/Octal SPI", + "gpio": "54", + "adc": "1x SAR ADC de 12 bits, até 8 canais", + "dac": "Não", + "touch": "Não", + "uart": "5", + "spi": "3", + "i2c": "2", + "i2s": "3", + "pwm": "LED PWM (até 8 canais), Motor PWM (6 canais)", + "usb": "1 (USB OTG 2.0)", + "mipi_csi": "Interface MIPI CSI para câmera", + "mipi_dsi": "Interface MIPI DSI para display", + "lcd": "Interface LCD de 8/16/24 bits", + "camera": "Interface DVP de 8/16 bits", + "sdio": "2 (SD/SDIO/MMC Host)", + "sensor_temperatura": "1 (interno)", + "temperatura_operacao": "-40°C a 85°C", + "temperatura_armazenamento": "-40°C a 150°C", + "datasheet": "https://documentation.espressif.com/esp32-p4_datasheet_en.pdf", + "cor": "#ffc107" + }, + "ESP32-H2": { + "nome_completo": "ESP32-H2", + "icone": "🔋", + "descricao": "Focado em ultra-baixo consumo com Bluetooth, Zigbee e Thread. Mas sem suporte a Wi-Fi", + "arquitetura": "RISC-V single-core de 32 bits", + "nucleos": "1 (Single-core)", + "frequencia": "Até 96 MHz", + "wifi": "Não", + "bluetooth": "Bluetooth 5.2 LE", + "zigbee_thread": "IEEE 802.15.4 (Zigbee, Thread)", + "matter": "Sim", + "memoria_sram": "320 KB", + "memoria_sram_rtc": "16 KB", + "memoria_rom": "128 KB", + "flash_externa": "Até 16 MB via QSPI", + "psram_externa": "Não", + "gpio": "27", + "adc": "1x SAR ADC de 12 bits, até 5 canais", + "dac": "Não", + "touch": "Não", + "uart": "2", + "spi": "3", + "i2c": "2", + "i2s": "1", + "pwm": "LED PWM (até 6 canais)", + "usb": "1 (USB Serial/JTAG)", + "sensor_temperatura": "1 (interno)", + "temperatura_operacao": "-40°C a 85°C", + "temperatura_armazenamento": "-40°C a 150°C", + "datasheet": "https://documentation.espressif.com/esp32-h2_datasheet_en.pdf", + "cor": "#6c757d" + } +}