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 (
+
+
+
+
+
+
+
+
+ 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]) => (
+
toggleSeries(key)}
+ className={`p-4 rounded-xl border-2 transition-all duration-300 transform hover:scale-105 ${
+ selectedSeries.includes(key)
+ ? 'border-purple-500 shadow-lg bg-white'
+ : 'border-gray-200 hover:border-gray-300 bg-white opacity-60'
+ }`}
+ style={{
+ borderColor: selectedSeries.includes(key) ? seriesItem.cor : undefined
+ }}
+ >
+ {seriesItem.icone}
+ {key}
+ {selectedSeries.includes(key) && (
+
+
+
+ )}
+
+ ))}
+
+
+ {selectedSeries.length} de 4 séries selecionadas
+
+
+
+
+
+
+
+
+
+ Especificação
+
+ {selectedSeries.map(seriesKey => {
+ const seriesItem = seriesData[seriesKey];
+ return (
+
+
+ {seriesItem.icone}
+ {seriesKey}
+
+
+
+ );
+ })}
+
+
+
+ {compareFields.map(({ category, fields }) => (
+ <>
+
+
+ {category}
+
+
+ {fields.map(({ key, label }) => (
+
+
+ {label}
+
+ {selectedSeries.map(seriesKey => {
+ const seriesItem = seriesData[seriesKey];
+ const value = seriesItem[key];
+ return (
+
+ {renderValue(value)}
+
+ );
+ })}
+
+ ))}
+ >
+ ))}
+
+
+
+
+
+
+
+
+
+
+ );
+}
\ 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.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}
+
+
+
+ )}
+
+
+
+
+
+
+ );
+}
+
+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
+
+
+
+
+
+
+
+
+
+
+ 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.icon}
+
+
+ ))}
+
+
+
+
+ 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.
+
+
+ Fork do repositório e crie uma branch clara.
+ Adicione exemplos ou corrija o conteúdo com referências quando possível.
+ Abra um PR e descreva o que foi alterado.
+
+
+
+
+ Acessibilidade
+
+ O site prioriza leitura, contraste legível e navegação por teclado. Se encontrar barreiras, por favor relate-nos para que possamos melhorar.
+
+
+
+
+
+
+
+
Contribua
+ Open Source
+
+
+
Ajude a melhorar o ESPDocs com exemplos, correções e traduções.
+
+
+
+
+ Nota: Conteúdo não oficial. Consulte sempre datasheets e documentos oficiais para decisões críticas.
+
+
+
+
+
Resumo
+
+ 🔎 Conteúdo técnico explicado.
+ 🧪 Exemplos e projetos.
+ 🤝 Comunidade e contribuições.
+
+
+
+
+
+
+
+
+ );
+}
\ 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} - 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 ? (
+
+
+
→
+
+ ) : (
+
+ )}
+
+
+
+
+
+ );
+}
+
+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
+
+
+ )}
+
+
+
+
+
+ ))}
+
+
+
+
+ 💡 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 (
+ setActiveFilter(filter.id)}
+ aria-pressed={isActive}
+ aria-label={`Filter by ${filter.name}`}
+ className={`px-5 py-2.5 rounded-xl text-sm font-semibold transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 ${
+ isActive
+ ? "shadow-lg transform scale-105 text-white"
+ : "bg-gray-50 text-gray-700 hover:bg-gray-100 hover:shadow-md"
+ }`}
+ style={{
+ backgroundColor: isActive ? filter.color : undefined,
+ focusRingColor: filter.color,
+ }}
+ >
+ {filter.name}
+
+ );
+ })}
+
+
+
+
+
+ {connections.map((connection, index) => {
+ const visible = isConnectionVisible(connection);
+ const isHovered = hoveredConnection === index;
+ return (
+
visible && setSelectedConnection(connection)}
+ onMouseEnter={() => visible && setHoveredConnection(index)}
+ onMouseLeave={() => setHoveredConnection(null)}
+ disabled={!visible}
+ aria-label={`Connection ${connection.nome}, number ${connection.numero}`}
+ className={`relative flex flex-col items-center justify-center p-2 rounded-2xl border-2 transition-all duration-300 ${
+ visible
+ ? "opacity-100 hover:scale-110 hover:shadow-2xl hover:z-10 cursor-pointer active:scale-95"
+ : "opacity-15 cursor-not-allowed grayscale"
+ }`}
+ style={{
+ backgroundColor: visible ? connection.cor + "15" : "#f3f4f615",
+ borderColor: visible ? (isHovered ? connection.cor : connection.cor + "60") : "#d1d5db",
+ transform: isHovered ? "translateY(-2px)" : undefined,
+ }}
+ >
+
+ {typeof connection.numero === "number"
+ ? connection.numero
+ : connection.numero.substring(0, 4)}
+
+
+
+ {connection.nome}
+
+
+ {connection.restricoes && (
+
+ )}
+
+ );
+ })}
+
+
+
+ {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)}
+
+
+
+ {selectedConnection.nome}
+
+
+ Conexão {selectedConnection.numero}
+
+
+
+
+
setSelectedConnection(null)}
+ aria-label="Close modal"
+ className="text-gray-400 hover:text-gray-600 transition-colors p-2 hover:bg-gray-100 rounded-xl shrink-0"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Categorias
+
+
+
+ {selectedConnection.categorias.map((cat) => (
+ {cat}
+ ))}
+
+
+
+
+
+
+
+
+ Funções da Conexão
+
+
+
+
+ {selectedConnection.funcoes.map((func, index) => (
+
+
+ {func}
+
+ ))}
+
+
+
+
+ {selectedConnection.restricoes && (
+
+
+
+
+
+ Alertas Importantes
+
+
+ {selectedConnection.restricoes}
+
+
+
+
+ )}
+
+
+
+ setSelectedConnection(null)}
+ className="w-full py-4 rounded-2xl font-bold text-white shadow-lg hover:shadow-xl transform hover:-translate-y-0.5 active:translate-y-0 transition-all duration-200 focus:outline-none focus:ring-4 focus:ring-offset-2"
+ style={{ backgroundColor: color }}
+ aria-label="Close modal"
+ >
+ Close
+
+
+
+
+ )}
+
+
+
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 (
+
+ );
+}
\ 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) => (
+ setActiveTab(tab.id)}
+ className={`flex-1 flex items-center justify-center gap-2 py-4 px-6 rounded-xl font-semibold transition-all duration-300 ${
+ activeTab === tab.id
+ ? 'text-white shadow-lg transform scale-105'
+ : 'text-gray-600 hover:bg-gray-50'
+ }`}
+ style={
+ activeTab === tab.id
+ ? { backgroundColor: color }
+ : {}
+ }
+ >
+ {tab.label}
+
+ ))}
+
+
+
+
+
{
+ const dropdown = document.getElementById('mobile-tab-dropdown');
+ dropdown.classList.toggle('hidden');
+ }}
+ className="w-full flex items-center justify-between py-4 px-6 font-semibold text-white"
+ style={{ backgroundColor: color }}
+ >
+
+
+ {availableTabs.find(tab => tab.id === activeTab)?.icon}
+
+
+ {availableTabs.find(tab => tab.id === activeTab)?.label}
+
+
+ ▼
+
+
+
+ {availableTabs.map((tab) => (
+ tab.id !== activeTab && (
+ {
+ setActiveTab(tab.id);
+ document.getElementById('mobile-tab-dropdown').classList.add('hidden');
+ }}
+ className="w-full flex items-center gap-3 py-4 px-6 text-gray-700 hover:bg-gray-50 transition-colors border-t border-gray-100"
+ >
+ {tab.icon}
+ {tab.label}
+
+ )
+ ))}
+
+
+
+
+
+ {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"
+ }
+}