commit f6f46972c370914c802ee1023f7a312388f6aa46 Author: Javier Infante Date: Sun May 24 10:37:53 2026 +0200 initial commit: slides ready + upgraded diff --git a/slides/.gitignore b/slides/.gitignore new file mode 100644 index 0000000..4dbc289 --- /dev/null +++ b/slides/.gitignore @@ -0,0 +1,8 @@ +node_modules/ +dist/ +.env +.env.local +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.DS_Store diff --git a/slides/README.md b/slides/README.md new file mode 100644 index 0000000..227d92c --- /dev/null +++ b/slides/README.md @@ -0,0 +1,26 @@ +# Slides LangChain.js + +Presentación sobre LangChain.js - Desarrollo de aplicaciones con LLMs. + +## Ver online + +https://jabiinfante.github.io/slides-langchain.js/ + +## Desarrollo local + +```bash +npm install +npm run dev +``` + +## Build + +```bash +npm run build +``` + +## Deploy + +```bash +npm run deploy +``` diff --git a/slides/changes.md b/slides/changes.md new file mode 100644 index 0000000..1d47186 --- /dev/null +++ b/slides/changes.md @@ -0,0 +1,371 @@ +# Cambios necesarios para actualizar el curso LangChain.js + +> Fecha de revision: 2026-05-22 +> Las slides fueron preparadas para Enero 2026 (v0.3.x). Desde entonces se ha lanzado **LangChain v1** y **LangGraph v1**, que traen cambios significativos. +> **Todos los cambios críticos e importantes han sido aplicados.** El documento se conserva como referencia histórica. + +## Versiones actuales en npm (mayo 2026) + +| Paquete | Slides | Actual | Cambio | +|---------|--------|--------|--------| +| `langchain` | v0.3.x | **v1.2.35** | MAJOR | +| `@langchain/core` | v0.3.x | **v1.1.34** | MAJOR | +| `@langchain/openai` | - | **v1.3.0** | MAJOR | +| `@langchain/anthropic` | - | **v1.3.25** | MAJOR | +| `@langchain/google-genai` | en uso | **v2.1.26** (DEPRECATED) | Ver punto 3 | +| `@langchain/google` | no mencionado | **v0.1.7** (NUEVO, reemplaza google-genai) | NUEVO | +| `@langchain/community` | en uso | **v1.1.24** | MAJOR | +| `@langchain/langgraph` | en uso | **v1.2.3** | MAJOR | +| `@langchain/classic` | no existe en slides | **v1.0.24** (NUEVO) | NUEVO | +| `@langchain/qdrant` | en uso | **v1.0.1** | MAJOR | +| `@langchain/pinecone` | - | **v1.0.1** | MAJOR | + +--- + +## 1. CRITICO: Versiones en slides/setup/03.md + +**Fichero**: `pages/setup/03.md:52` +**Problema**: Dice `Versiones actuales (Enero 2026): langchain v0.3.x · @langchain/core v0.3.x` +**Correccion**: Cambiar a `Versiones actuales (Marzo 2026): langchain v1.x · @langchain/core v1.x` + +--- + +## 2. CRITICO: Nuevo paquete @langchain/classic + +**Ficheros afectados**: `pages/setup/02.md` +**Problema**: La arquitectura de paquetes no menciona `@langchain/classic`, que es donde se ha movido la funcionalidad legacy en v1. +**Que se movio a @langchain/classic**: +- `MemoryVectorStore` (antes en `langchain/vectorstores/memory`) +- `DirectoryLoader` (antes en `langchain/document_loaders/fs/directory`) +- `TextLoader` (antes en `langchain/document_loaders/fs/text`) +- Legacy chains (`LLMChain`, `ConversationChain`, etc.) +- Retrievers legacy +- Hub module +- `ChatPromptTemplate` ahora se importa desde `@langchain/classic/prompts` en los ejemplos de proveedores (aunque sigue disponible en `@langchain/core/prompts`) + +**Accion**: Anadir `@langchain/classic` al diagrama de arquitectura de paquetes en `setup/02.md` + +--- + +## 3. CRITICO: @langchain/google-genai DEPRECATED + +**Ficheros afectados**: +- `pages/setup/02.md:54` - lista de proveedores +- `pages/setup/03.md:31` - instalacion +- `pages/setup/13.md` - ejemplo completo con Gemini +- `pages/models/08b.md` - ChatGoogleGenerativeAI +- `pages/models/10.md:38` - providers disponibles +- `pages/rag/06.md:22` - GoogleGenerativeAIEmbeddings +- `pages/rag/07.md` - no afectado directamente + +**Problema**: La documentacion oficial dice textualmente: +> "This library is based on a deprecated library from Google and will be replaced by the ChatGoogle library. New implementations should use the ChatGoogle library instead." + +**Correccion**: +```typescript +// ANTES (deprecated) +import { ChatGoogleGenerativeAI } from "@langchain/google-genai"; +const model = new ChatGoogleGenerativeAI({ model: "gemini-2.0-flash-exp" }); + +// AHORA (recomendado) +import { ChatGoogle } from "@langchain/google"; +const model = new ChatGoogle({ model: "gemini-2.5-flash" }); +``` + +**Instalacion**: `npm install @langchain/google` en lugar de `npm install @langchain/google-genai` + +--- + +## 4. CRITICO: createReactAgent -> createAgent + +**Ficheros afectados**: +- `pages/models/15.md` - ejemplo con Tavily usa `createReactAgent` de `@langchain/langgraph/prebuilt` +- `pages/models/16.md` - comparacion bindTools vs createReactAgent + +**Problema**: `createReactAgent` de `@langchain/langgraph/prebuilt` ha sido reemplazado por `createAgent` de `langchain` en v1. + +**Correccion para models/15.md**: +```typescript +// ANTES +import { ChatOpenAI } from "@langchain/openai"; +import { TavilySearchResults } from "@langchain/community/tools/tavily_search"; +import { createReactAgent } from "@langchain/langgraph/prebuilt"; + +const model = new ChatOpenAI({ model: "gpt-4o-mini" }); +const agent = createReactAgent({ llm: model, tools: [searchTool] }); + +// AHORA +import { createAgent } from "langchain"; +import { TavilySearchResults } from "@langchain/community/tools/tavily_search"; + +const searchTool = new TavilySearchResults({ apiKey: process.env.TAVILY_API_KEY, maxResults: 5 }); +const agent = createAgent({ + model: "openai:gpt-4.1-mini", + tools: [searchTool], +}); +``` + +**Correccion para models/16.md**: Cambiar el titulo y contenido del panel derecho de `createReactAgent()` a `createAgent()`. La comparacion sigue siendo valida conceptualmente (bindTools para control manual vs createAgent para loop automatico). + +> NOTA: La seccion de agentes (pages/agents/) ya usa `createAgent` correctamente. Solo models/15.md y models/16.md estan desactualizados. + +--- + +## 5. IMPORTANTE: Nombres de modelos desactualizados + +### OpenAI +**Ficheros**: Multiples (models/, messages/, rag/, setup/, agents/) +- `gpt-4o-mini` -> `gpt-4.1-mini` (segun docs actuales de LangChain) +- `gpt-4o` -> `gpt-4.1` (segun docs actuales de LangChain) +- `gpt-4-turbo` en `models/10.md:18` -> `gpt-4.1` o posterior + +**Nota**: Los modelos `gpt-4o` y `gpt-4o-mini` siguen funcionando pero ya no son los mas recientes. La documentacion oficial de LangChain ahora muestra `gpt-4.1-mini` y `gpt-5.2` como ejemplos. + +### Anthropic +- `claude-sonnet-4-20250514` en `models/08.md:41` -> `claude-sonnet-4-6` (ultimo segun docs) +- `claude-sonnet-4-5-20250929` en `agents/05.md:17` -> mantener o actualizar a `claude-sonnet-4-6` + +### Google Gemini +- `gemini-2.0-flash-exp` en `models/08b.md:19` -> `gemini-2.5-flash` (segun docs actuales) +- `gemini-pro` en `models/10.md:38` -> `gemini-2.5-flash-lite` (modelo recomendado actual) +- `gemini-2.5-flash` en `setup/13.md:16` -> OK, este esta correcto + +### Embeddings +- `embedding-001` en `rag/06.md:25` -> verificar nombre actual del modelo de embeddings de Google +- `llama2` en `rag/07.md:32` (OllamaEmbeddings) -> `llama3.2` o modelo mas reciente + +--- + +## 6. IMPORTANTE: MemoryVectorStore - import path cambiado + +**Fichero**: `pages/rag/11.md:12` +**Problema**: +```typescript +// ANTES (v0.3.x) +import { MemoryVectorStore } from "langchain/vectorstores/memory"; + +// AHORA (v1.x) +import { MemoryVectorStore } from "@langchain/classic/vectorstores/memory"; +``` + +**Nota**: En v1, `MemoryVectorStore` se ha movido a `@langchain/classic`. Requiere instalar: `npm install @langchain/classic` + +--- + +## 7. IMPORTANTE: initChatModel - import path cambiado + +**Fichero**: `pages/models/09.md:22` +**Problema**: +```typescript +// ANTES (v0.3.x) +import { initChatModel } from "@langchain/core/chat_models/universal"; + +// AHORA (v1.x) +import { initChatModel } from "langchain"; +``` + +--- + +## 8. IMPORTANTE: Document Loaders - import paths cambiados + +**Fichero**: `pages/pending/06c.md` +**Problema**: Los loaders que estaban en `langchain/` se han movido a `@langchain/classic/`: +```typescript +// ANTES +import { DirectoryLoader } from "langchain/document_loaders/fs/directory"; +import { TextLoader } from "langchain/document_loaders/fs/text"; + +// AHORA +import { DirectoryLoader } from "@langchain/classic/document_loaders/fs/directory"; +import { TextLoader } from "@langchain/classic/document_loaders/fs/text"; +``` +Los loaders de community (`PDFLoader`, `CSVLoader`) mantienen su path en `@langchain/community/...`. + +--- + +## 9. IMPORTANTE: OllamaEmbeddings - import path + +**Fichero**: `pages/rag/07.md:29` +**Problema**: +```typescript +// ANTES +import { OllamaEmbeddings } from "@langchain/community/embeddings/ollama"; + +// AHORA (paquete dedicado) +import { OllamaEmbeddings } from "@langchain/ollama"; +``` +Requiere: `npm install @langchain/ollama` + +--- + +## 10. MENOR: favicon en slides.md + +**Fichero**: `slides.md:10` +**Problema**: `favicon: https://js.langchain.com/v0.2/img/favicon.ico` - URL con referencia a v0.2 +**Correccion**: Actualizar a la URL actual de la documentacion: `https://docs.langchain.com/...` o usar favicon local + +--- + +## 11. NUEVO CONCEPTO: Standard Content Blocks (v1) + +**No existe en las slides actualmente.** +**Relevancia**: Es una de las 3 mejoras principales de LangChain v1. + +`contentBlocks` es una nueva propiedad en los mensajes que proporciona acceso unificado a features modernos de LLMs (reasoning tokens, imagenes, etc.) de forma estandarizada entre proveedores: + +```typescript +import { AIMessage } from "@langchain/core/messages"; + +// Los mensajes ahora tienen .contentBlocks para acceso tipado +const reasoning = message.contentBlocks + .filter((b) => b.type === "reasoning") + .map((b) => b.reasoning); +``` + +**Sugerencia**: Considerar anadir una slide en la seccion de mensajes (messages/) o en la seccion de agentes explicando este nuevo concepto. + +--- + +## 12. NUEVO CONCEPTO: @langchain/classic + +**No explicado en las slides.** +En v1, la funcionalidad legacy se ha movido a `@langchain/classic`: +- Legacy chains (LLMChain, ConversationChain) +- Retrievers legacy +- Hub module +- MemoryVectorStore +- Algunos document loaders + +**Sugerencia**: Mencionar en la seccion de estructura/setup que en v1 existe este paquete para compatibilidad hacia atras. + +--- + +## 13. MENOR: Modelos disponibles en providers (models/10.md) + +**Fichero**: `pages/models/10.md` +Los comentarios de modelos disponibles estan desactualizados: +- OpenAI: `gpt-4o, gpt-4o-mini, gpt-4-turbo` -> `gpt-4.1, gpt-4.1-mini, gpt-5.2` +- Google: `gemini-2.0-flash-exp, gemini-pro` -> `gemini-2.5-flash, gemini-2.5-flash-lite` +- Anthropic: `claude-sonnet-4, claude-opus-4` -> `claude-sonnet-4-6, claude-opus-4-6` +- Groq: `llama-3.1-70b, mixtral-8x7b` -> verificar disponibilidad actual +- Ollama: `llama3.1:7b` -> `llama3.2:7b` o posterior + +--- + +## 14. MENOR: Structured Output con createAgent (v1 mejora) + +**Ficheros**: Los slides de structured output ya cubren `withStructuredOutput()` correctamente. +**Novedad v1**: En `createAgent`, structured output ahora se genera en el loop principal (sin llamada LLM adicional) via `responseFormat`: + +```typescript +import { createAgent } from "langchain"; +import * as z from "zod"; + +const agent = createAgent({ + model: "gpt-4.1-mini", + tools: [getWeather], + responseFormat: z.object({ + temperature: z.number(), + condition: z.string(), + }), +}); +const result = await agent.invoke({ messages: [...] }); +console.log(result.structuredResponse); +``` + +**Sugerencia**: Verificar si esto ya esta cubierto en las slides de agents/structured output. + +--- + +## 15. MENOR: URLs de documentacion desactualizadas + +**Ficheros afectados**: +- `pages/models/11.md` - enlace `js.langchain.com/docs/integrations/chat` +- `pages/models/13.md` - enlace `js.langchain.com/docs/integrations/tools` +- `pages/rag/29.md` - enlace `js.langchain.com/docs/tutorials/rag` +- `pages/pending/09.md` - enlace `js.langchain.com/docs` + +**Problema**: Las URLs antiguas `js.langchain.com/docs/...` han cambiado a `docs.langchain.com/oss/javascript/...` +**Correccion**: +- `js.langchain.com/docs/integrations/chat` -> `docs.langchain.com/oss/javascript/integrations/chat` +- `js.langchain.com/docs/integrations/tools` -> `docs.langchain.com/oss/javascript/integrations/tools` +- `js.langchain.com/docs/tutorials/rag` -> `docs.langchain.com/oss/javascript/langchain/rag` +- `js.langchain.com/docs` -> `docs.langchain.com/oss/javascript` + +--- + +## 16. MENOR: Precios y modelos en setup/04.md + +**Fichero**: `pages/setup/04.md` +**Problema**: La tabla de comparativa dice "Enero 2025" y lista modelos desactualizados: +- "GPT-4o" -> "GPT-4.1" (o posterior) +- "Gemini 2.0 Flash" -> "Gemini 2.5 Flash" +- "Claude 4 Sonnet" -> modelo actual +- Precios probablemente han cambiado + +**Accion**: Actualizar la tabla con modelos y precios actuales (marzo 2026) + +--- + +## 17. MENOR: setup/07.md modelos recomendados para produccion + +**Fichero**: `pages/setup/07.md` +**Problema**: Recomienda "Claude 4 Sonnet o GPT-4o" para produccion. Los nombres de modelo deberian reflejar los ultimos disponibles. + +--- + +## 18. MENOR: Modelos Ollama en setup/09.md + +**Fichero**: `pages/setup/09.md` +**Problema**: Referencia a "Llama 3.1 7B/13B/70B" en la tabla de hardware. Llama 3.2 ya esta disponible y setup/14.md ya lo usa correctamente. + +--- + +## 19. MENOR: Modelos en agents/ y alternatives/ desactualizados + +**Ficheros afectados**: +- `pages/agents/05.md:17` y `pages/agents/06.md:31` - usan `claude-sonnet-4-5-20250929` +- `pages/alternatives/06.md:40` - usa `claude-sonnet-4-20250514` en ejemplo de Anthropic SDK nativo +- `pages/alternatives/06.md:22` - usa `gpt-4o` en ejemplo de OpenAI SDK nativo +- `pages/alternatives/07.md:15` - usa `gpt-4o` en Assistants API +- `pages/alternatives/07.md:32` - usa `gemini-2.0-flash` en Google GenAI SDK + +**Correccion**: Actualizar nombres de modelos a los ultimos disponibles (ver punto 5) + +--- + +## NOTA POSITIVA: Secciones ya actualizadas a v1 + +Las siguientes secciones **ya estan correctamente actualizadas** para LangChain v1: +- **agents/** (01-23): Usa `createAgent`, middleware, `humanInTheLoopMiddleware`, etc. +- **messages/** (01-11): `ChatPromptTemplate`, `MessagesPlaceholder`, `SystemMessage` siguen siendo validos +- **introduction/06.md**: Ya menciona "LangChain (v1)" +- **langsmith/05.md**: Ya usa `createAgent` de `"langchain"` + +--- + +## Resumen de prioridades + +### Criticos (el curso no funciona correctamente sin estos cambios) +1. Actualizar version numbers en setup/03.md (v0.3.x -> v1.x) +2. Actualizar `@langchain/google-genai` a `@langchain/google` en multiples ficheros +3. Reemplazar `createReactAgent` por `createAgent` en models/15.md y models/16.md +4. Actualizar import de `MemoryVectorStore` en rag/11.md +5. Actualizar import de `initChatModel` en models/09.md +6. Anadir `@langchain/classic` a la arquitectura de paquetes + +### Importantes (el codigo funciona pero con warnings/deprecaciones) +7. Actualizar nombres de modelos (gpt-4o-mini -> gpt-4.1-mini, etc.) +8. Actualizar imports de document loaders en pending/06c.md +9. Actualizar OllamaEmbeddings import path en rag/07.md + +### Menores / Mejoras +10. Actualizar favicon URL en slides.md +11. Considerar anadir slide sobre Standard Content Blocks +12. Actualizar lista de modelos en models/10.md +13. Mencionar @langchain/classic en el modulo de estructura +14. Documentar responseFormat en createAgent +15. Actualizar URLs de documentacion (js.langchain.com -> docs.langchain.com) +16. Actualizar tabla de precios/modelos en setup/04.md +17. Actualizar modelos recomendados en setup/07.mdhttps://docs.langchain.com/oss/javascript/langchain/messages +18. Actualizar modelos Ollama en setup/09.md diff --git a/slides/global-top.vue b/slides/global-top.vue new file mode 100644 index 0000000..47c1595 --- /dev/null +++ b/slides/global-top.vue @@ -0,0 +1,14 @@ + + + diff --git a/slides/package-lock.json b/slides/package-lock.json new file mode 100644 index 0000000..e71aa3a --- /dev/null +++ b/slides/package-lock.json @@ -0,0 +1,9382 @@ +{ + "name": "slides-langchain.js", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "slides-langchain.js", + "dependencies": { + "@slidev/cli": "^52.14.1", + "@slidev/theme-default": "latest", + "@slidev/theme-seriph": "latest", + "vue": "^3.5.30" + }, + "devDependencies": { + "playwright-chromium": "^1.58.2" + } + }, + "node_modules/@antfu/install-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", + "license": "MIT", + "dependencies": { + "package-manager-detector": "^1.3.0", + "tinyexec": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@antfu/ni": { + "version": "28.3.0", + "resolved": "https://registry.npmjs.org/@antfu/ni/-/ni-28.3.0.tgz", + "integrity": "sha512-JbRijiCNAGcQcyPfV0EXOJYwV27e/srXfTvETqzbbh4jzHBV2pDYiBz8rj5SyzX27aTbCK+qXR3x6g2WKokcrA==", + "license": "MIT", + "dependencies": { + "ansis": "^4.2.0", + "fzf": "^0.5.2", + "package-manager-detector": "^1.6.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15" + }, + "bin": { + "na": "bin/na.mjs", + "nci": "bin/nci.mjs", + "nd": "bin/nd.mjs", + "ni": "bin/ni.mjs", + "nlx": "bin/nlx.mjs", + "nr": "bin/nr.mjs", + "nun": "bin/nun.mjs", + "nup": "bin/nup.mjs" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@antfu/utils": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-9.3.0.tgz", + "integrity": "sha512-9hFT4RauhcUzqOE4f1+frMKLZrgNog5b06I7VmZQV1BkvwvqrbC8EBZf3L1eEL2AKb6rNKjER0sEvJiSP1FXEA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "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.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@braintree/sanitize-url": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz", + "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==", + "license": "MIT" + }, + "node_modules/@chevrotain/cst-dts-gen": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.1.2.tgz", + "integrity": "sha512-XTsjvDVB5nDZBQB8o0o/0ozNelQtn2KrUVteIHSlPd2VAV2utEb6JzyCJaJ8tGxACR4RiBNWy5uYUHX2eji88Q==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/gast": "11.1.2", + "@chevrotain/types": "11.1.2", + "lodash-es": "4.17.23" + } + }, + "node_modules/@chevrotain/gast": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.1.2.tgz", + "integrity": "sha512-Z9zfXR5jNZb1Hlsd/p+4XWeUFugrHirq36bKzPWDSIacV+GPSVXdk+ahVWZTwjhNwofAWg/sZg58fyucKSQx5g==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/types": "11.1.2", + "lodash-es": "4.17.23" + } + }, + "node_modules/@chevrotain/regexp-to-ast": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.1.2.tgz", + "integrity": "sha512-nMU3Uj8naWer7xpZTYJdxbAs6RIv/dxYzkYU8GSwgUtcAAlzjcPfX1w+RKRcYG8POlzMeayOQ/znfwxEGo5ulw==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/types": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz", + "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/utils": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.1.2.tgz", + "integrity": "sha512-4mudFAQ6H+MqBTfqLmU7G1ZwRzCLfJEooL/fsF6rCX5eePMbGhoy5n4g+G4vlh2muDcsCTJtL+uKbOzWxs5LHA==", + "license": "Apache-2.0" + }, + "node_modules/@comark/markdown-it": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@comark/markdown-it/-/markdown-it-0.3.2.tgz", + "integrity": "sha512-h+zwwsqr2zLBajKqdzLiLjhccO8+euTAKiBRLJcJvaMGma4yPCrYfWM0dgO0AFz3gK030cf5I5qBN0a3C3jzpQ==", + "license": "MIT", + "dependencies": { + "js-yaml": "^4.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "^14.0.0" + } + }, + "node_modules/@drauu/core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@drauu/core/-/core-1.0.0.tgz", + "integrity": "sha512-r1fPyuKaGuNHc8vxRFUT8LxqWjJ3nx+U+zsHcEOurmJoB7uN+zpFw5kTLInfdfvQZ+qF/ebQjw1AwbGcc1XKsQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@emnapi/core": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", + "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", + "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", + "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", + "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", + "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", + "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", + "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", + "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", + "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", + "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", + "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", + "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", + "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", + "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", + "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", + "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", + "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", + "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", + "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", + "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", + "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", + "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", + "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", + "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", + "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", + "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", + "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", + "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", + "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.1.1.tgz", + "integrity": "sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.1.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@iconify-json/carbon": { + "version": "1.2.19", + "resolved": "https://registry.npmjs.org/@iconify-json/carbon/-/carbon-1.2.19.tgz", + "integrity": "sha512-l89XjtEeSA5fxlxPTNSU9AA+rxaz/Dn0X/ux0/3awR+tAayY8iJqWQu3AKxhchfx3LB/fX1Nv3ZppZzrBAt7aA==", + "license": "Apache-2.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify-json/ph": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@iconify-json/ph/-/ph-1.2.2.tgz", + "integrity": "sha512-PgkEZNtqa8hBGjHXQa4pMwZa93hmfu8FUSjs/nv4oUU6yLsgv+gh9nu28Kqi8Fz9CCVu4hj1MZs9/60J57IzFw==", + "license": "MIT", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify-json/svg-spinners": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@iconify-json/svg-spinners/-/svg-spinners-1.2.4.tgz", + "integrity": "sha512-ayn0pogFPwJA1WFZpDnoq9/hjDxN+keeCMyThaX4d3gSJ3y0mdKUxIA/b1YXWGtY9wVtZmxwcvOIeEieG4+JNg==", + "license": "MIT", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" + }, + "node_modules/@iconify/utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.0.tgz", + "integrity": "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==", + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^1.1.0", + "@iconify/types": "^2.0.0", + "mlly": "^1.8.0" + } + }, + "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==", + "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/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "node_modules/@lillallol/outline-pdf": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lillallol/outline-pdf/-/outline-pdf-4.0.0.tgz", + "integrity": "sha512-tILGNyOdI3ukZfU19TNTDVoS0W1nSPlMxCKAm9FPV4OPL786Ur7e1CRLQZWKJP6uaMQsUqSDBCTzISs6lXWdAQ==", + "license": "MIT", + "dependencies": { + "@lillallol/outline-pdf-data-structure": "^1.0.3", + "pdf-lib": "^1.16.0" + } + }, + "node_modules/@lillallol/outline-pdf-data-structure": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@lillallol/outline-pdf-data-structure/-/outline-pdf-data-structure-1.0.3.tgz", + "integrity": "sha512-XlK9dERP2n9afkJ23JyJzpmesLgiOHmhqKuGgeytnT+IVGFdAsYl1wLr2o+byXNAN5fveNbc7CCI6RfBsd5FCw==", + "license": "MIT" + }, + "node_modules/@mdit-vue/plugin-component": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-component/-/plugin-component-3.0.2.tgz", + "integrity": "sha512-Fu53MajrZMOAjOIPGMTdTXgHLgGU9KwTqKtYc6WNYtFZNKw04euSfJ/zFg8eBY/2MlciVngkF7Gyc2IL7e8Bsw==", + "license": "MIT", + "dependencies": { + "@types/markdown-it": "^14.1.2", + "markdown-it": "^14.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@mdit-vue/plugin-frontmatter": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-3.0.2.tgz", + "integrity": "sha512-QKKgIva31YtqHgSAz7S7hRcL7cHXiqdog4wxTfxeQCHo+9IP4Oi5/r1Y5E93nTPccpadDWzAwr3A0F+kAEnsVQ==", + "license": "MIT", + "dependencies": { + "@mdit-vue/types": "3.0.2", + "@types/markdown-it": "^14.1.2", + "gray-matter": "^4.0.3", + "markdown-it": "^14.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@mdit-vue/types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@mdit-vue/types/-/types-3.0.2.tgz", + "integrity": "sha512-00aAZ0F0NLik6I6Yba2emGbHLxv+QYrPH00qQ5dFKXlAo1Ll2RHDXwY7nN2WAfrx2pP+WrvSRFTGFCNGdzBDHw==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@mermaid-js/parser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.0.1.tgz", + "integrity": "sha512-opmV19kN1JsK0T6HhhokHpcVkqKpF+x2pPDKKM2ThHtZAB5F4PROopk0amuVYK5qMrIA4erzpNm8gmPNJgMDxQ==", + "license": "MIT", + "dependencies": { + "langium": "^4.0.0" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "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==", + "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==", + "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==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nuxt/kit": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.21.2.tgz", + "integrity": "sha512-Bd6m6mrDrqpBEbX+g0rc66/ALd1sxlgdx5nfK9MAYO0yKLTOSK7McSYz1KcOYn3LQFCXOWfvXwaqih/b+REI1g==", + "license": "MIT", + "optional": true, + "dependencies": { + "c12": "^3.3.3", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "errx": "^0.1.0", + "exsolve": "^1.0.8", + "ignore": "^7.0.5", + "jiti": "^2.6.1", + "klona": "^2.0.6", + "knitwork": "^1.3.0", + "mlly": "^1.8.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "rc9": "^3.0.0", + "scule": "^1.3.0", + "semver": "^7.7.4", + "tinyglobby": "^0.2.15", + "ufo": "^1.6.3", + "unctx": "^2.5.0", + "untyped": "^2.0.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@oxc-parser/binding-android-arm-eabi": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.115.0.tgz", + "integrity": "sha512-VoB2rhgoqgYf64d6Qs5emONQW8ASiTc0xp+aUE4JUhxjX+0pE3gblTYDO0upcN5vt9UlBNmUhAwfSifkfre7nw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-android-arm64": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.115.0.tgz", + "integrity": "sha512-lWRX75u+gqfB4TF3pWCHuvhaeneAmRl2b2qNBcl4S6yJ0HtnT4VXOMEZrq747i4Zby1ZTxj6mtOe678Bg8gRLw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-arm64": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.115.0.tgz", + "integrity": "sha512-ii/oOZjfGY1aszXTy29Z5DRyCEnBOrAXDVCvfdfXFQsOZlbbOa7NMHD7D+06YFe5qdxfmbWAYv4yn6QJi/0d2g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-x64": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.115.0.tgz", + "integrity": "sha512-R/sW/p8l77wglbjpMcF+h/3rWbp9zk1mRP3U14mxTYIC2k3m+aLBpXXgk2zksqf9qKk5mcc4GIYsuCn9l8TgDg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-freebsd-x64": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.115.0.tgz", + "integrity": "sha512-CSJ5ldNm9wIGGkhaIJeGmxRMZbgxThRN+X1ufYQQUNi5jZDV/U3C2QDMywpP93fczNBj961hXtcUPO/oVGq4Pw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.115.0.tgz", + "integrity": "sha512-uWFwssE5dHfQ8lH+ktrsD9JA49+Qa0gtxZHUs62z1e91NgGz6O7jefHGI6aygNyKNS45pnnBSDSP/zV977MsOQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-musleabihf": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.115.0.tgz", + "integrity": "sha512-fZbqt8y/sKQ+v6bBCuv/mYYFoC0+fZI3mGDDEemmDOhT78+aUs2+4ZMdbd2btlXmnLaScl37r8IRbhnok5Ka9w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-gnu": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.115.0.tgz", + "integrity": "sha512-1ej/MjuTY9tJEunU/hUPIFmgH5PqgMQoRjNOvOkibtJ3Zqlw/+Lc+HGHDNET8sjbgIkWzdhX+p4J96A5CPdbag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-musl": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.115.0.tgz", + "integrity": "sha512-HjsZbJPH9mMd4swJRywVMsDZsJX0hyKb1iNHo5ijRl5yhtbO3lj7ImSrrL1oZ1VEg0te4iKmDGGz/6YPLd1G8w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-ppc64-gnu": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.115.0.tgz", + "integrity": "sha512-zhhePoBrd7kQx3oClX/W6NldsuCbuMqaN9rRsY+6/WoorAb4j490PG/FjqgAXscWp2uSW2WV9L+ksn0wHrvsrg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-gnu": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.115.0.tgz", + "integrity": "sha512-t/IRojvUE9XrKu+/H1b8YINug+7Q6FLls5rsm2lxB5mnS8GN/eYAYrPgHkcg9/1SueRDSzGpDYu3lGWTObk1zw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-musl": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.115.0.tgz", + "integrity": "sha512-79jBHSSh/YpQRAmvYoaCfpyToRbJ/HBrdB7hxK2ku2JMehjopTVo+xMJss/RV7/ZYqeezgjvKDQzapJbgcjVZA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-s390x-gnu": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.115.0.tgz", + "integrity": "sha512-nA1TpxkhNTIOMMyiSSsa7XIVJVoOU/SsVrHIz3gHvWweB5PHCQfO7w+Lb2EP0lBWokv7HtA/KbF7aLDoXzmuMw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-gnu": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.115.0.tgz", + "integrity": "sha512-9iVX789DoC3SaOOG+X6NcF/tVChgLp2vcHffzOC2/Z1JTPlz6bMG2ogvcW6/9s0BG2qvhNQImd+gbWYeQbOwVw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-musl": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.115.0.tgz", + "integrity": "sha512-RmQmk+mjCB0nMNfEYhaCxwofLo1Z95ebHw1AGvRiWGCd4zhCNOyskgCbMogIcQzSB3SuEKWgkssyaiQYVAA4hQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-openharmony-arm64": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.115.0.tgz", + "integrity": "sha512-viigraWWQhhDvX5aGq+wrQq58k00Xq3MHz/0R4AFMxGlZ8ogNonpEfNc73Q5Ly87Z6sU9BvxEdG0dnYTfVnmew==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-wasm32-wasi": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.115.0.tgz", + "integrity": "sha512-IzGCrMwXhpb4kTXy/8lnqqqwjI7eOvy+r9AhVw+hsr8t1ecBBEHprcNy0aKatFHN6hsX7UMHHQmBAQjVvL/p1A==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-win32-arm64-msvc": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.115.0.tgz", + "integrity": "sha512-/ym+Absk/TLFvbhh3se9XYuI1D7BrUVHw4RaG/2dmWKgBenrZHaJsgnRb7NJtaOyjEOLIPtULx1wDdVL0SX2eg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-ia32-msvc": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.115.0.tgz", + "integrity": "sha512-AQSZjIR+b+Te7uaO/hGTMjT8/oxlYrvKrOTi4KTHF/O6osjHEatUQ3y6ZW2+8+lJxy20zIcGz6iQFmFq/qDKkg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-x64-msvc": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.115.0.tgz", + "integrity": "sha512-oxUl82N+fIO9jIaXPph8SPPHQXrA08BHokBBJW8ct9F/x6o6bZE6eUAhUtWajbtvFhL8UYcCWRMba+kww6MBlA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.115.0.tgz", + "integrity": "sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@pdf-lib/standard-fonts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@pdf-lib/standard-fonts/-/standard-fonts-1.0.0.tgz", + "integrity": "sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==", + "license": "MIT", + "dependencies": { + "pako": "^1.0.6" + } + }, + "node_modules/@pdf-lib/upng": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@pdf-lib/upng/-/upng-1.0.1.tgz", + "integrity": "sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==", + "license": "MIT", + "dependencies": { + "pako": "^1.0.10" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "license": "MIT" + }, + "node_modules/@quansync/fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@quansync/fs/-/fs-1.0.0.tgz", + "integrity": "sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==", + "license": "MIT", + "dependencies": { + "quansync": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/@quansync/fs/node_modules/quansync": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-1.0.0.tgz", + "integrity": "sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", + "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.0.2.tgz", + "integrity": "sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==", + "license": "MIT", + "dependencies": { + "@shikijs/primitive": "4.0.2", + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.0.2.tgz", + "integrity": "sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/markdown-it": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/markdown-it/-/markdown-it-4.0.2.tgz", + "integrity": "sha512-7DDEhknj/mXTN7ME8CjKWBv5O/4YgOiJBZLgs/NbUFMC7Ik1x/VEhaK+aBjX60bJdok0E2mxEYan/GzJ2xRx+A==", + "license": "MIT", + "dependencies": { + "markdown-it": "^14.1.1", + "shiki": "4.0.2" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "markdown-it-async": "^2.2.0" + }, + "peerDependenciesMeta": { + "markdown-it-async": { + "optional": true + } + } + }, + "node_modules/@shikijs/markdown-it/node_modules/@shikijs/engine-oniguruma": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.0.2.tgz", + "integrity": "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/markdown-it/node_modules/@shikijs/langs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.0.2.tgz", + "integrity": "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/markdown-it/node_modules/@shikijs/themes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.0.2.tgz", + "integrity": "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/markdown-it/node_modules/shiki": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.0.2.tgz", + "integrity": "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.0.2", + "@shikijs/engine-javascript": "4.0.2", + "@shikijs/engine-oniguruma": "4.0.2", + "@shikijs/langs": "4.0.2", + "@shikijs/themes": "4.0.2", + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/monaco": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/monaco/-/monaco-4.0.2.tgz", + "integrity": "sha512-yA49DPAjDyj9D8yxyr1S7qjcT1TVv6BqhZ+sXccwqcdp83RuncYOCUkJ1rjqAu3NA8YDc2wdesD+/js5pHJdqg==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.0.2", + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/primitive": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.0.2.tgz", + "integrity": "sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/twoslash": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-4.0.2.tgz", + "integrity": "sha512-yHRudhirlMxOwDO6Q4OFU9hJMvUqNkY8hwtUfbaSEoG7A2cYicdO4c8fdDaDtyJ50HK7I8vTokrkIHTK3DCkLQ==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.0.2", + "@shikijs/types": "4.0.2", + "twoslash": "^0.3.6" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "typescript": ">=5.5.0" + } + }, + "node_modules/@shikijs/types": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.0.2.tgz", + "integrity": "sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vitepress-twoslash": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-4.0.2.tgz", + "integrity": "sha512-Bk01fAYDDiTffRPLHNJdNlYwzExXIVcrHUVNciD931SMlKZArvteKib6mM3mWAUhcy78RW1llT3fczjKIgQHBA==", + "license": "MIT", + "dependencies": { + "@shikijs/twoslash": "4.0.2", + "floating-vue": "^5.2.2", + "lz-string": "^1.5.0", + "magic-string": "^0.30.21", + "markdown-it": "^14.1.1", + "mdast-util-from-markdown": "^2.0.3", + "mdast-util-gfm": "^3.1.0", + "mdast-util-to-hast": "^13.2.1", + "ohash": "^2.0.11", + "shiki": "4.0.2", + "twoslash": "^0.3.6", + "twoslash-vue": "^0.3.6", + "vue": "^3.5.29" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vitepress-twoslash/node_modules/@shikijs/engine-oniguruma": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.0.2.tgz", + "integrity": "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vitepress-twoslash/node_modules/@shikijs/langs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.0.2.tgz", + "integrity": "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vitepress-twoslash/node_modules/@shikijs/themes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.0.2.tgz", + "integrity": "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vitepress-twoslash/node_modules/shiki": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.0.2.tgz", + "integrity": "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.0.2", + "@shikijs/engine-javascript": "4.0.2", + "@shikijs/engine-oniguruma": "4.0.2", + "@shikijs/langs": "4.0.2", + "@shikijs/themes": "4.0.2", + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@slidev/cli": { + "version": "52.14.1", + "resolved": "https://registry.npmjs.org/@slidev/cli/-/cli-52.14.1.tgz", + "integrity": "sha512-+MGK+9556M+XRXZ7Ut8uU4AIlHU9k+GtQWGGmpmBY/SnWvW/sE5c5ZR9uJ1gmne6gZ3rh5GLm6KhnWPq9+OmTg==", + "license": "MIT", + "dependencies": { + "@antfu/ni": "^28.2.0", + "@antfu/utils": "^9.3.0", + "@comark/markdown-it": "^0.3.0", + "@iconify-json/carbon": "^1.2.19", + "@iconify-json/ph": "^1.2.2", + "@iconify-json/svg-spinners": "^1.2.4", + "@lillallol/outline-pdf": "^4.0.0", + "@shikijs/markdown-it": "^4.0.1", + "@shikijs/twoslash": "^4.0.1", + "@shikijs/vitepress-twoslash": "^4.0.1", + "@slidev/client": "52.14.1", + "@slidev/parser": "52.14.1", + "@slidev/types": "52.14.1", + "@unocss/extractor-mdc": "^66.6.3", + "@unocss/reset": "^66.6.3", + "@vitejs/plugin-vue": "^6.0.4", + "@vitejs/plugin-vue-jsx": "^5.1.4", + "ansis": "^4.2.0", + "chokidar": "^5.0.0", + "cli-progress": "^3.12.0", + "connect": "^3.7.0", + "fast-deep-equal": "^3.1.3", + "fast-glob": "^3.3.3", + "get-port-please": "^3.2.0", + "global-directory": "^5.0.0", + "htmlparser2": "^10.1.0", + "is-installed-globally": "^1.0.0", + "jiti": "^2.6.1", + "katex": "^0.16.33", + "local-pkg": "^1.1.2", + "lz-string": "^1.5.0", + "magic-string": "^0.30.21", + "magic-string-stack": "^1.1.0", + "markdown-exit": "^1.0.0-beta.8", + "markdown-it-footnote": "^4.0.0", + "mlly": "^1.8.0", + "monaco-editor": "^0.55.1", + "obug": "^2.1.1", + "open": "^11.0.0", + "pdf-lib": "^1.17.1", + "picomatch": "^4.0.3", + "plantuml-encoder": "^1.4.0", + "postcss-nested": "^7.0.2", + "pptxgenjs": "^4.0.1", + "prompts": "^2.4.2", + "public-ip": "^8.0.0", + "resolve-from": "^5.0.0", + "resolve-global": "^2.0.0", + "semver": "^7.7.4", + "shiki": "^4.0.1", + "shiki-magic-move": "^1.2.1", + "sirv": "^3.0.2", + "source-map-js": "^1.2.1", + "typescript": "^5.9.3", + "unhead": "^2.1.10", + "unocss": "^66.6.2", + "unplugin-icons": "^23.0.1", + "unplugin-vue-components": "^31.0.0", + "unplugin-vue-markdown": "^30.0.0", + "untun": "^0.1.3", + "uqr": "^0.1.2", + "vite": "^7.3.1", + "vite-plugin-inspect": "^11.3.3", + "vite-plugin-remote-assets": "^2.1.0", + "vite-plugin-static-copy": "^3.2.0", + "vite-plugin-vue-server-ref": "^1.0.0", + "vitefu": "^1.1.2", + "vue": "^3.5.29", + "yaml": "^2.8.2", + "yargs": "^18.0.0" + }, + "bin": { + "slidev": "bin/slidev.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "playwright-chromium": "^1.10.0" + }, + "peerDependenciesMeta": { + "playwright-chromium": { + "optional": true + } + } + }, + "node_modules/@slidev/cli/node_modules/@shikijs/engine-oniguruma": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.0.2.tgz", + "integrity": "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@slidev/cli/node_modules/@shikijs/langs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.0.2.tgz", + "integrity": "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@slidev/cli/node_modules/@shikijs/themes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.0.2.tgz", + "integrity": "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@slidev/cli/node_modules/global-directory": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-5.0.0.tgz", + "integrity": "sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==", + "license": "MIT", + "dependencies": { + "ini": "6.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@slidev/cli/node_modules/ini": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@slidev/cli/node_modules/shiki": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.0.2.tgz", + "integrity": "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.0.2", + "@shikijs/engine-javascript": "4.0.2", + "@shikijs/engine-oniguruma": "4.0.2", + "@shikijs/langs": "4.0.2", + "@shikijs/themes": "4.0.2", + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@slidev/client": { + "version": "52.14.1", + "resolved": "https://registry.npmjs.org/@slidev/client/-/client-52.14.1.tgz", + "integrity": "sha512-aljFqR3wNhaqcOxjm3jo0DyyTnD7H8BOTwnAFFIsb4j+p3ufMh/rx39GfQF2j+ABy4K3o+L/Ue+QsA2nLNmIHg==", + "license": "MIT", + "dependencies": { + "@antfu/utils": "^9.3.0", + "@iconify-json/carbon": "^1.2.19", + "@iconify-json/ph": "^1.2.2", + "@iconify-json/svg-spinners": "^1.2.4", + "@shikijs/engine-javascript": "^4.0.1", + "@shikijs/monaco": "^4.0.1", + "@shikijs/vitepress-twoslash": "^4.0.1", + "@slidev/parser": "52.14.1", + "@slidev/rough-notation": "^0.1.0", + "@slidev/types": "52.14.1", + "@typescript/ata": "^0.9.8", + "@unhead/vue": "^2.1.10", + "@unocss/extractor-mdc": "^66.6.3", + "@unocss/preset-mini": "^66.6.3", + "@unocss/reset": "^66.6.3", + "@vueuse/core": "^14.2.1", + "@vueuse/math": "^14.2.1", + "@vueuse/motion": "^3.0.3", + "ansis": "^4.2.0", + "drauu": "^1.0.0", + "file-saver": "^2.0.5", + "floating-vue": "^5.2.2", + "fuse.js": "^7.1.0", + "katex": "^0.16.33", + "lz-string": "^1.5.0", + "mermaid": "^11.12.3", + "monaco-editor": "^0.55.1", + "nanotar": "^0.3.0", + "pptxgenjs": "^4.0.1", + "recordrtc": "^5.6.2", + "shiki": "^4.0.1", + "shiki-magic-move": "^1.2.1", + "typescript": "^5.9.3", + "unocss": "^66.6.2", + "vue": "^3.5.29", + "vue-router": "^5.0.3", + "yaml": "^2.8.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@slidev/client/node_modules/@shikijs/engine-oniguruma": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.0.2.tgz", + "integrity": "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@slidev/client/node_modules/@shikijs/langs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.0.2.tgz", + "integrity": "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@slidev/client/node_modules/@shikijs/themes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.0.2.tgz", + "integrity": "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@slidev/client/node_modules/shiki": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.0.2.tgz", + "integrity": "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.0.2", + "@shikijs/engine-javascript": "4.0.2", + "@shikijs/engine-oniguruma": "4.0.2", + "@shikijs/langs": "4.0.2", + "@shikijs/themes": "4.0.2", + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@slidev/parser": { + "version": "52.14.1", + "resolved": "https://registry.npmjs.org/@slidev/parser/-/parser-52.14.1.tgz", + "integrity": "sha512-Y/9aYcyzj5PGAflO0IPBwb3qs7OohfDc4kcHl149hGLceHo9jfZZh20V10NyK/R8IYTRJDgALbEHN/16jSRaqg==", + "license": "MIT", + "dependencies": { + "@antfu/utils": "^9.3.0", + "@slidev/types": "52.14.1", + "yaml": "^2.8.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@slidev/rough-notation": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@slidev/rough-notation/-/rough-notation-0.1.0.tgz", + "integrity": "sha512-a/CbVmjuoO3E4JbUr2HOTsXndbcrdLWOM+ajbSQIY3gmLFzhjeXHGksGcp1NZ08pJjLZyTCxfz1C7v/ltJqycA==", + "license": "MIT", + "dependencies": { + "roughjs": "^4.6.6" + } + }, + "node_modules/@slidev/theme-default": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@slidev/theme-default/-/theme-default-0.25.0.tgz", + "integrity": "sha512-iWvthH1Ny+i6gTwRnEeeU+EiqsHC56UdEO45bqLSNmymRAOWkKUJ/M0o7iahLzHSXsiPu71B7C715WxqjXk2hw==", + "license": "MIT", + "dependencies": { + "@slidev/types": "^0.47.0", + "codemirror-theme-vars": "^0.1.2", + "prism-theme-vars": "^0.2.4" + }, + "engines": { + "node": ">=14.0.0", + "slidev": ">=v0.47.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@slidev/theme-default/node_modules/@slidev/types": { + "version": "0.47.5", + "resolved": "https://registry.npmjs.org/@slidev/types/-/types-0.47.5.tgz", + "integrity": "sha512-X67V4cCgM0Sz50bP8GbVzmiL8DHC2IXvdKcsN7DlxHyf+/T4d9GveeGukwha5Fx3MuYeGZWKag7TFL2ZY4w54A==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@slidev/theme-seriph": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@slidev/theme-seriph/-/theme-seriph-0.25.0.tgz", + "integrity": "sha512-PnFQbn4I70+/cVie5iAr0Im6sYvnwjkO7Yj5KonTyJZFFJFytckLTrD3ijft/J4cRnz7OmSzTyQKNX1FN/x0YQ==", + "license": "MIT", + "dependencies": { + "@slidev/types": "^0.47.0", + "codemirror-theme-vars": "^0.1.2", + "prism-theme-vars": "^0.2.4" + }, + "engines": { + "node": ">=14.0.0", + "slidev": ">=v0.47.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@slidev/theme-seriph/node_modules/@slidev/types": { + "version": "0.47.5", + "resolved": "https://registry.npmjs.org/@slidev/types/-/types-0.47.5.tgz", + "integrity": "sha512-X67V4cCgM0Sz50bP8GbVzmiL8DHC2IXvdKcsN7DlxHyf+/T4d9GveeGukwha5Fx3MuYeGZWKag7TFL2ZY4w54A==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@slidev/types": { + "version": "52.14.1", + "resolved": "https://registry.npmjs.org/@slidev/types/-/types-52.14.1.tgz", + "integrity": "sha512-48wp+YRCT8mckFAdu7hGX8DICRrqSpaDNOikQT087jvzCT/D7dr15wA+QTVRJiSLHr5yJVQAlX2lVD/Izhg0FQ==", + "license": "MIT", + "dependencies": { + "@antfu/utils": "^9.3.0", + "@shikijs/markdown-it": "^4.0.1", + "@vitejs/plugin-vue": "^6.0.4", + "@vitejs/plugin-vue-jsx": "^5.1.4", + "katex": "^0.16.33", + "mermaid": "^11.12.3", + "monaco-editor": "^0.55.1", + "shiki": "^4.0.1", + "unocss": "^66.6.2", + "unplugin-icons": "^23.0.1", + "unplugin-vue-markdown": "^30.0.0", + "vite-plugin-inspect": "^11.3.3", + "vite-plugin-remote-assets": "^2.1.0", + "vite-plugin-static-copy": "^3.2.0", + "vite-plugin-vue-server-ref": "^1.0.0", + "vue": "^3.5.29", + "vue-router": "^5.0.3" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@slidev/types/node_modules/@shikijs/engine-oniguruma": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.0.2.tgz", + "integrity": "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@slidev/types/node_modules/@shikijs/langs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.0.2.tgz", + "integrity": "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@slidev/types/node_modules/@shikijs/themes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.0.2.tgz", + "integrity": "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@slidev/types/node_modules/shiki": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.0.2.tgz", + "integrity": "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.0.2", + "@shikijs/engine-javascript": "4.0.2", + "@shikijs/engine-oniguruma": "4.0.2", + "@shikijs/langs": "4.0.2", + "@shikijs/themes": "4.0.2", + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "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==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "license": "MIT" + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz", + "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "license": "MIT", + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", + "license": "MIT" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", + "license": "MIT" + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", + "license": "MIT" + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", + "license": "MIT" + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", + "license": "MIT" + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz", + "integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@typescript/ata": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@typescript/ata/-/ata-0.9.8.tgz", + "integrity": "sha512-+M815CeDRJS5H5ciWfhFCKp25nNfF+LFWawWAaBhNlquFb2wS5IIMDI+2bKWN3GuU6mpj+FzySsOD29M4nG8Xg==", + "license": "MIT", + "peerDependencies": { + "typescript": ">=4.4.4" + } + }, + "node_modules/@typescript/vfs": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.4.tgz", + "integrity": "sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@unhead/vue": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-2.1.12.tgz", + "integrity": "sha512-zEWqg0nZM8acpuTZE40wkeUl8AhIe0tU0OkilVi1D4fmVjACrwoh5HP6aNqJ8kUnKsoy6D+R3Vi/O+fmdNGO7g==", + "license": "MIT", + "dependencies": { + "hookable": "^6.0.1", + "unhead": "2.1.12" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "vue": ">=3.5.18" + } + }, + "node_modules/@unocss/cli": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/cli/-/cli-66.6.7.tgz", + "integrity": "sha512-m/yW5HMVyxfAOeyO4OyA4JB9dY+/gTsk25ucI8xVCFVDEENPEGr+vEqTDOA+vfe6pdURtyDYS7OrhikIRU1WNA==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "@unocss/config": "66.6.7", + "@unocss/core": "66.6.7", + "@unocss/preset-wind3": "66.6.7", + "@unocss/preset-wind4": "66.6.7", + "@unocss/transformer-directives": "66.6.7", + "cac": "^6.7.14", + "chokidar": "^5.0.0", + "colorette": "^2.0.20", + "consola": "^3.4.2", + "magic-string": "^0.30.21", + "pathe": "^2.0.3", + "perfect-debounce": "^2.1.0", + "tinyglobby": "^0.2.15", + "unplugin-utils": "^0.3.1" + }, + "bin": { + "unocss": "bin/unocss.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/config": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/config/-/config-66.6.7.tgz", + "integrity": "sha512-1uleyRLyJc6PNNc2L3hEaKL89zXwvQAtP36oFySgL47RAxZHPZ4vfqFpbwR0eEN4iSqTS24ZFr7CTRWCaEGjzQ==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7", + "colorette": "^2.0.20", + "consola": "^3.4.2", + "unconfig": "^7.5.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/core": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/core/-/core-66.6.7.tgz", + "integrity": "sha512-Q8456iWFtdwrUNYKVOQY8ygRggjZOVtLc6Jc8KIkxig7OiNlUWOgXJTfCh4I8g6jBYzC5eHaHFDLgJOmOrxBsg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/extractor-arbitrary-variants": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/extractor-arbitrary-variants/-/extractor-arbitrary-variants-66.6.7.tgz", + "integrity": "sha512-PQiBHK0yUJ0BR+3GYnTPU6va6HVSRPV+O+s1zZmt23TWbyIeucoKCNR47TDtv+Z1xuksY8krIjtDYtufdrVWKw==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/extractor-mdc": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/extractor-mdc/-/extractor-mdc-66.6.7.tgz", + "integrity": "sha512-evWRx++2eY9drt1WP0xYsx3eOvc5/YP2P2FAwtJVM/0F00IAhfXg6mqKjnrz+GXXXEKDNtzr2qsf8G2Z7wtuJA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/inspector": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/inspector/-/inspector-66.6.7.tgz", + "integrity": "sha512-4lA70A/wy9dfSDm7rJ5Uq5fKz+/Szm2rUcHjdbLCVNEc6vv2YXeI7aFvP5qDjTp4ClBSF2AMPnF1mtoMQOfDvA==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7", + "@unocss/rule-utils": "66.6.7", + "colorette": "^2.0.20", + "gzip-size": "^6.0.0", + "sirv": "^3.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-attributify": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/preset-attributify/-/preset-attributify-66.6.7.tgz", + "integrity": "sha512-thtoLQb53+Acy2QJYT6n+YhgNJ5ilhS8k9bqi+UzflbsuK4TJqOuQQjC9fRkULP5QjtNxgqN3d5Up7ms8tBPDA==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-icons": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/preset-icons/-/preset-icons-66.6.7.tgz", + "integrity": "sha512-mGAOyI/qz1pZUV1BcOtWAMm5czdFCjhFCYcDk0KY+Jw37pKRVSQRFeh4gpHuYKmehGv36caLyVrWXpTAwRBdFQ==", + "license": "MIT", + "dependencies": { + "@iconify/utils": "^3.1.0", + "@unocss/core": "66.6.7", + "ofetch": "^1.5.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-mini": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/preset-mini/-/preset-mini-66.6.7.tgz", + "integrity": "sha512-tf0mqiSEhPQ49WZOqjNhxlbZbNakiBLzCoxfLSzqfIGglOPYShP8mxsdp9Jv0n+Ntn0rHcBiX5KTLfax1/Bd9g==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7", + "@unocss/extractor-arbitrary-variants": "66.6.7", + "@unocss/rule-utils": "66.6.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-tagify": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/preset-tagify/-/preset-tagify-66.6.7.tgz", + "integrity": "sha512-0WeQf+Dx9Ztv3aewkBKEnAfOauSjvWBlfkpsgLpXcCkyGMnCqq87UrAq3+b76TDJvQc8i2ADlvVGK7V1z0JZQg==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-typography": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/preset-typography/-/preset-typography-66.6.7.tgz", + "integrity": "sha512-RA7MwPDD5N9xGrbWnguVm5tP+F4/n/9X1rJsq2nBjvvK2dbtIRJZjRFM1vBDsR0GIhtvbHMoTchZaSZed5I+Hw==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7", + "@unocss/rule-utils": "66.6.7" + } + }, + "node_modules/@unocss/preset-uno": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/preset-uno/-/preset-uno-66.6.7.tgz", + "integrity": "sha512-imGCe6Yv2XgrJxP77gV8WZCz0xL99MsGov5rYn64lh2/tcsHF2rUIhTj/Urgxt0kwk8rLFtGbR1JuwPMNL5EDw==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7", + "@unocss/preset-wind3": "66.6.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-web-fonts": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/preset-web-fonts/-/preset-web-fonts-66.6.7.tgz", + "integrity": "sha512-GLjUoSL/kYt1Yw2zpzixKnxvpHgLHAg0JXiPglct4PZ9YmUzCPbvJ/vVn+0AnB8Fxr29Z8NAFSNoX625ZaRonQ==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7", + "ofetch": "^1.5.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-wind": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/preset-wind/-/preset-wind-66.6.7.tgz", + "integrity": "sha512-jxtAN96jljd+KglbhPv6Y/ujceI5rVdrLQimj4KUTPoYBPEiWadzsGKN3o8Q07hlPRg+hBlO0r4tGSUWl+/EZQ==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7", + "@unocss/preset-wind3": "66.6.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-wind3": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/preset-wind3/-/preset-wind3-66.6.7.tgz", + "integrity": "sha512-PKyqeRzlIMd3Irdt6fCKMm73zgwweiXESk5edUK8dVWndvPIcZCOqrEq7yg6Pr/Q8tHdq26viYSkVY3a3t8RSg==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7", + "@unocss/preset-mini": "66.6.7", + "@unocss/rule-utils": "66.6.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-wind4": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/preset-wind4/-/preset-wind4-66.6.7.tgz", + "integrity": "sha512-9grhWeBsFzpv8iER9AFATRaxLyXMCwGQ5HzeI4XZh2ZZ9O6vC7nYfGhns4/I+F/RpFglzU1bjqMWRS/DS8OpGQ==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7", + "@unocss/extractor-arbitrary-variants": "66.6.7", + "@unocss/rule-utils": "66.6.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/reset": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/reset/-/reset-66.6.7.tgz", + "integrity": "sha512-+OjpLDEaPmhTQ3Gj7EaKApNM92TM9f9gLgHNa79+66wIll9IfhKfEmJXnF9y1SE725n4PmPIQgC9k313HztMLA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/rule-utils": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/rule-utils/-/rule-utils-66.6.7.tgz", + "integrity": "sha512-4PT/s8yKIShSqP9XPSw4EjbZopcu3wlIB9i3kbGbzQwF91H+0Yy10guK3kHDGtkmWVN6Np6VvaGIj2UcbmaivA==", + "license": "MIT", + "dependencies": { + "@unocss/core": "^66.6.7", + "magic-string": "^0.30.21" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/transformer-attributify-jsx": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/transformer-attributify-jsx/-/transformer-attributify-jsx-66.6.7.tgz", + "integrity": "sha512-r5bsnaPVe4iySLK5G5rA/QPSKmpPjYT9lixEv+KElvZcqZ+cPpkGoo+E+rnTcapu9KDMOVJItH/4Zy9m4AQ1ZQ==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7", + "oxc-parser": "^0.115.0", + "oxc-walker": "^0.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/transformer-compile-class": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/transformer-compile-class/-/transformer-compile-class-66.6.7.tgz", + "integrity": "sha512-4uz4jCyq8VUaSPveXhelUWUNaTnetPFvEmXzmbYJ5BygAlUlipNynffUlUusDQmBBRrfZhJNB5J1Zif2Q6oUiA==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/transformer-directives": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/transformer-directives/-/transformer-directives-66.6.7.tgz", + "integrity": "sha512-z3gi8/cD2P0I+c6jOPZUtsPXknHwVNlMIitSh7LhyM6W3EqbqvDcYH2gFeGhdhoYcN2r5OpTBujq34iz4IdUxA==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7", + "@unocss/rule-utils": "66.6.7", + "css-tree": "^3.1.0" + } + }, + "node_modules/@unocss/transformer-variant-group": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/transformer-variant-group/-/transformer-variant-group-66.6.7.tgz", + "integrity": "sha512-XouJuQCjYJpvR3sY4QDXnGXxtyJ4qgWFG+S9bAB01TTslhQLvNPE9o2+4gZlltnJLqxiPQWuLeJA1KdPD6ciww==", + "license": "MIT", + "dependencies": { + "@unocss/core": "66.6.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/vite": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/@unocss/vite/-/vite-66.6.7.tgz", + "integrity": "sha512-8AHrVzAecnQaPLJv3/mpyFt5j2iL3gEwkZcZ8HzjH5ttK2XON1YE9vgujN5NS/yvZwlJxCMNPxn0S410/Ek61A==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "@unocss/config": "66.6.7", + "@unocss/core": "66.6.7", + "@unocss/inspector": "66.6.7", + "chokidar": "^5.0.0", + "magic-string": "^0.30.21", + "pathe": "^2.0.3", + "tinyglobby": "^0.2.15", + "unplugin-utils": "^0.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0-0" + } + }, + "node_modules/@upsetjs/venn.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz", + "integrity": "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==", + "license": "MIT", + "optionalDependencies": { + "d3-selection": "^3.0.0", + "d3-transition": "^3.0.1" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.5.tgz", + "integrity": "sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg==", + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-rc.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitejs/plugin-vue-jsx": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-5.1.5.tgz", + "integrity": "sha512-jIAsvHOEtWpslLOI2MeElGFxH7M8pM83BU/Tor4RLyiwH0FM4nUW3xdvbw20EeU9wc5IspQwMq225K3CMnJEpA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.29.0", + "@babel/plugin-syntax-typescript": "^7.28.6", + "@babel/plugin-transform-typescript": "^7.28.6", + "@rolldown/pluginutils": "^1.0.0-rc.2", + "@vue/babel-plugin-jsx": "^2.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", + "license": "MIT" + }, + "node_modules/@vue-macros/common": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-3.1.2.tgz", + "integrity": "sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==", + "license": "MIT", + "dependencies": { + "@vue/compiler-sfc": "^3.5.22", + "ast-kit": "^2.1.2", + "local-pkg": "^1.1.2", + "magic-string-ast": "^1.0.2", + "unplugin-utils": "^0.3.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/vue-macros" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.2.25" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-2.0.1.tgz", + "integrity": "sha512-uZ66EaFbnnZSYqYEyplWvn46GhZ1KuYSThdT68p+am7MgBNbQ3hphTL9L+xSIsWkdktwhPYLwPgVWqo96jDdRA==", + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-2.0.1.tgz", + "integrity": "sha512-a8CaLQjD/s4PVdhrLD/zT574ZNPnZBOY+IhdtKWRB4HRZ0I2tXBi5ne7d9eCfaYwp5gU5+4KIyFTV1W1YL9xZA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@vue/babel-helper-vue-transform-on": "2.0.1", + "@vue/babel-plugin-resolve-type": "2.0.1", + "@vue/shared": "^3.5.22" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-2.0.1.tgz", + "integrity": "sha512-ybwgIuRGRRBhOU37GImDoWQoz+TlSqap65qVI6iwg/J7FfLTLmMf97TS7xQH9I7Qtr/gp161kYVdhr1ZMraSYQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/parser": "^7.28.4", + "@vue/compiler-sfc": "^3.5.22" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.30.tgz", + "integrity": "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@vue/shared": "3.5.30", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.30.tgz", + "integrity": "sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.30", + "@vue/shared": "3.5.30" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.30.tgz", + "integrity": "sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@vue/compiler-core": "3.5.30", + "@vue/compiler-dom": "3.5.30", + "@vue/compiler-ssr": "3.5.30", + "@vue/shared": "3.5.30", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.8", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.30.tgz", + "integrity": "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.30", + "@vue/shared": "3.5.30" + } + }, + "node_modules/@vue/devtools-api": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.1.0.tgz", + "integrity": "sha512-O44X57jjkLKbLEc4OgL/6fEPOOanRJU8kYpCE8qfKlV96RQZcdzrcLI5mxMuVRUeXhHKIHGhCpHacyCk0HyO4w==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^8.1.0" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.1.0.tgz", + "integrity": "sha512-/NZlS4WtGIB54DA/z10gzk+n/V7zaqSzYZOVlg2CfdnpIKdB61bd7JDIMxf/zrtX41zod8E2/bbEBoW/d7x70Q==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^8.1.0", + "birpc": "^2.6.1", + "hookable": "^5.5.3", + "perfect-debounce": "^2.0.0" + } + }, + "node_modules/@vue/devtools-kit/node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/@vue/devtools-shared": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.1.0.tgz", + "integrity": "sha512-h8uCb4Qs8UT8VdTT5yjY6tOJ//qH7EpxToixR0xqejR55t5OdISIg7AJ7eBkhBs8iu1qG5gY3QQNN1DF1EelAA==", + "license": "MIT" + }, + "node_modules/@vue/language-core": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.6.tgz", + "integrity": "sha512-xYYYX3/aVup576tP/23sEUpgiEnujrENaoNRbaozC1/MA9I6EGFQRJb4xrt/MmUCAGlxTKL2RmT8JLTPqagCkg==", + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.0.0", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.2" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.30.tgz", + "integrity": "sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.30" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.30.tgz", + "integrity": "sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.30", + "@vue/shared": "3.5.30" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.30.tgz", + "integrity": "sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.30", + "@vue/runtime-core": "3.5.30", + "@vue/shared": "3.5.30", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.30.tgz", + "integrity": "sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.30", + "@vue/shared": "3.5.30" + }, + "peerDependencies": { + "vue": "3.5.30" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.30.tgz", + "integrity": "sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==", + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.2.1.tgz", + "integrity": "sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.2.1", + "@vueuse/shared": "14.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/math": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/math/-/math-14.2.1.tgz", + "integrity": "sha512-WV4WTm4GBeILnIAOePQNI1UbYv/HjDx1P+0MSXxFyBy3r8I9xVYn6xqBMLkCbXfAVmkr1sA/G5ILM2K8VDtIbA==", + "license": "MIT", + "dependencies": { + "@vueuse/shared": "14.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.2.1.tgz", + "integrity": "sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/motion": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@vueuse/motion/-/motion-3.0.3.tgz", + "integrity": "sha512-4B+ITsxCI9cojikvrpaJcLXyq0spj3sdlzXjzesWdMRd99hhtFI6OJ/1JsqwtF73YooLe0hUn/xDR6qCtmn5GQ==", + "license": "MIT", + "dependencies": { + "@vueuse/core": "^13.0.0", + "@vueuse/shared": "^13.0.0", + "defu": "^6.1.4", + "framesync": "^6.1.2", + "popmotion": "^11.0.5", + "style-value-types": "^5.1.2" + }, + "optionalDependencies": { + "@nuxt/kit": "^3.13.0" + }, + "peerDependencies": { + "vue": ">=3.0.0" + } + }, + "node_modules/@vueuse/motion/node_modules/@vueuse/core": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.9.0.tgz", + "integrity": "sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.9.0", + "@vueuse/shared": "13.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/motion/node_modules/@vueuse/metadata": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.9.0.tgz", + "integrity": "sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/motion/node_modules/@vueuse/shared": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.9.0.tgz", + "integrity": "sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/shared": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.2.1.tgz", + "integrity": "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/alien-signals": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.2.tgz", + "integrity": "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==", + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", + "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "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==", + "license": "Python-2.0" + }, + "node_modules/ast-kit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-2.2.0.tgz", + "integrity": "sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "pathe": "^2.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/ast-walker-scope": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.8.3.tgz", + "integrity": "sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "ast-kit": "^2.1.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.9", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.9.tgz", + "integrity": "sha512-OZd0e2mU11ClX8+IdXe3r0dbqMEznRiT4TfbhYIbcRPZkqJ7Qwer8ij3GZAmLsRKa+II9V1v5czCkvmHH3XZBg==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c12": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.3.tgz", + "integrity": "sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "chokidar": "^5.0.0", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^17.2.3", + "exsolve": "^1.0.8", + "giget": "^2.0.0", + "jiti": "^2.6.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.0.0", + "pkg-types": "^2.3.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "*" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/c12/node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "license": "MIT", + "optional": true, + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001780", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001780.tgz", + "integrity": "sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==", + "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/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chevrotain": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.1.2.tgz", + "integrity": "sha512-opLQzEVriiH1uUQ4Kctsd49bRoFDXGGSC4GUqj7pGyxM3RehRhvTlZJc1FL/Flew2p5uwxa1tUDWKzI4wNM8pg==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/cst-dts-gen": "11.1.2", + "@chevrotain/gast": "11.1.2", + "@chevrotain/regexp-to-ast": "11.1.2", + "@chevrotain/types": "11.1.2", + "@chevrotain/utils": "11.1.2", + "lodash-es": "4.17.23" + } + }, + "node_modules/chevrotain-allstar": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz", + "integrity": "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==", + "license": "MIT", + "dependencies": { + "lodash-es": "^4.17.21" + }, + "peerDependencies": { + "chevrotain": "^11.0.0" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/clone-regexp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-3.0.0.tgz", + "integrity": "sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==", + "license": "MIT", + "dependencies": { + "is-regexp": "^3.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/codemirror-theme-vars": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/codemirror-theme-vars/-/codemirror-theme-vars-0.1.2.tgz", + "integrity": "sha512-WTau8X2q58b0SOAY9DO+iQVw8JKVEgyQIqArp2D732tcc+pobbMta3bnVMdQdmgwuvNrOFFr6HoxPRoQOgooFA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/convert-hrtime": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz", + "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "license": "MIT", + "dependencies": { + "layout-base": "^1.0.0" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/cytoscape": { + "version": "3.33.1", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.1.tgz", + "integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "license": "MIT", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "license": "MIT", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "license": "MIT", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", + "license": "MIT" + }, + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "license": "ISC", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "license": "ISC", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "license": "ISC", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "license": "ISC", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "license": "ISC", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "license": "BSD-3-Clause", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "license": "ISC" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz", + "integrity": "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==", + "license": "MIT", + "dependencies": { + "d3": "^7.9.0", + "lodash-es": "^4.17.21" + } + }, + "node_modules/dayjs": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz", + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", + "license": "MIT" + }, + "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/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "license": "ISC", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff-match-patch-es": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/diff-match-patch-es/-/diff-match-patch-es-1.0.1.tgz", + "integrity": "sha512-KhSofrZDERg/NE6Nd+TK53knp2qz0o2Ix8rhkXd3Chfm7Wlo58Eq/juNmkyS6bS+3xS26L3Pstz3BdY/q+e9UQ==", + "license": "Apache-2.0", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dns-socket": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/dns-socket/-/dns-socket-4.2.2.tgz", + "integrity": "sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.4" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.3.tgz", + "integrity": "sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", + "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "license": "BSD-2-Clause", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/drauu": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/drauu/-/drauu-1.0.0.tgz", + "integrity": "sha512-K3a1cbP2l4i0H/bmNM4nyGsY5/hiH5a10sEHlksqKue0+TPQCHrV9DwPad+St06CJwpkdzVJ/FyOYTIAm82rgg==", + "license": "MIT", + "dependencies": { + "@drauu/core": "1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.321", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.321.tgz", + "integrity": "sha512-L2C7Q279W2D/J4PLZLk7sebOILDSWos7bMsMNN06rK482umHUrh/3lM8G7IlHFOYip2oAg5nha1rCMxr/rs6ZQ==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/errx": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/errx/-/errx-0.1.0.tgz", + "integrity": "sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==", + "license": "MIT", + "optional": true + }, + "node_modules/esbuild": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", + "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.4", + "@esbuild/android-arm": "0.27.4", + "@esbuild/android-arm64": "0.27.4", + "@esbuild/android-x64": "0.27.4", + "@esbuild/darwin-arm64": "0.27.4", + "@esbuild/darwin-x64": "0.27.4", + "@esbuild/freebsd-arm64": "0.27.4", + "@esbuild/freebsd-x64": "0.27.4", + "@esbuild/linux-arm": "0.27.4", + "@esbuild/linux-arm64": "0.27.4", + "@esbuild/linux-ia32": "0.27.4", + "@esbuild/linux-loong64": "0.27.4", + "@esbuild/linux-mips64el": "0.27.4", + "@esbuild/linux-ppc64": "0.27.4", + "@esbuild/linux-riscv64": "0.27.4", + "@esbuild/linux-s390x": "0.27.4", + "@esbuild/linux-x64": "0.27.4", + "@esbuild/netbsd-arm64": "0.27.4", + "@esbuild/netbsd-x64": "0.27.4", + "@esbuild/openbsd-arm64": "0.27.4", + "@esbuild/openbsd-x64": "0.27.4", + "@esbuild/openharmony-arm64": "0.27.4", + "@esbuild/sunos-x64": "0.27.4", + "@esbuild/win32-arm64": "0.27.4", + "@esbuild/win32-ia32": "0.27.4", + "@esbuild/win32-x64": "0.27.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "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==", + "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/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/floating-vue": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/floating-vue/-/floating-vue-5.2.2.tgz", + "integrity": "sha512-afW+h2CFafo+7Y9Lvw/xsqjaQlKLdJV7h1fCHfcYQ1C4SVMlu7OAekqWgu5d4SgvkBVU0pVpLlVsrSTBURFRkg==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "~1.1.1", + "vue-resize": "^2.0.0-alpha.1" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.0", + "vue": "^3.2.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/framesync": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.1.2.tgz", + "integrity": "sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==", + "license": "MIT", + "dependencies": { + "tslib": "2.4.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-0.1.1.tgz", + "integrity": "sha512-0NVVC0TaP7dSTvn1yMiy6d6Q8gifzbvQafO46RtLG/kHJUBNd+pVRGOBoK44wNBvtSPUJRfdVvkFdD3p0xvyZg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fuse.js": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz", + "integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/fzf": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fzf/-/fzf-0.5.2.tgz", + "integrity": "sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==", + "license": "BSD-3-Clause" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-port-please": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.2.0.tgz", + "integrity": "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==", + "license": "MIT" + }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "license": "MIT", + "optional": true, + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "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==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "license": "MIT", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hachure-fill": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", + "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==", + "license": "MIT" + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hey-listen": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", + "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==", + "license": "MIT" + }, + "node_modules/hookable": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.0.tgz", + "integrity": "sha512-ZoKZSJgu8voGK2geJS+6YtYjvIzu9AOM/KZXsBxr83uhLL++e9pEv/dlgwgy3dvHg06kTz6JOh1hk3C8Ceiymw==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", + "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==", + "license": "ISC" + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", + "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", + "license": "MIT", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/ip-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", + "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", + "license": "MIT", + "dependencies": { + "global-directory": "^4.0.1", + "is-path-inside": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-ip": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-5.0.1.tgz", + "integrity": "sha512-FCsGHdlrOnZQcp0+XT5a+pYowf33itBalCl+7ovNXC/7o5BhIpG14M3OrpPPdBSIQJCm+0M5+9mO7S9VVTTCFw==", + "license": "MIT", + "dependencies": { + "ip-regex": "^5.0.0", + "super-regex": "^0.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-regexp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz", + "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "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.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "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/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/katex": { + "version": "0.16.39", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.39.tgz", + "integrity": "sha512-FR2f6y85+81ZLO0GPhyQ+EJl/E5ILNWltJhpAeOTzRny952Z13x2867lTFDmvMZix//Ux3CuMQ2VkLXRbUwOFg==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/khroma": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/knitwork": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/knitwork/-/knitwork-1.3.0.tgz", + "integrity": "sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==", + "license": "MIT", + "optional": true + }, + "node_modules/langium": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/langium/-/langium-4.2.1.tgz", + "integrity": "sha512-zu9QWmjpzJcomzdJQAHgDVhLGq5bLosVak1KVa40NzQHXfqr4eAHupvnPOVXEoLkg6Ocefvf/93d//SB7du4YQ==", + "license": "MIT", + "dependencies": { + "chevrotain": "~11.1.1", + "chevrotain-allstar": "~0.3.1", + "vscode-languageserver": "~9.0.1", + "vscode-languageserver-textdocument": "~1.0.11", + "vscode-uri": "~3.1.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "license": "MIT" + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/local-pkg": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", + "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.3.0", + "quansync": "^0.2.11" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash-es": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", + "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-regexp": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/magic-regexp/-/magic-regexp-0.10.0.tgz", + "integrity": "sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg==", + "license": "MIT", + "dependencies": { + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12", + "mlly": "^1.7.2", + "regexp-tree": "^0.1.27", + "type-level-regexp": "~0.1.17", + "ufo": "^1.5.4", + "unplugin": "^2.0.0" + } + }, + "node_modules/magic-regexp/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magic-string-ast": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-1.0.3.tgz", + "integrity": "sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==", + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.19" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/magic-string-stack": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/magic-string-stack/-/magic-string-stack-1.1.0.tgz", + "integrity": "sha512-eAjQQ16Woyi71/6gQoLvn9Mte0JDoS5zUV/BMk0Pzs8Fou+nEuo5T0UbLWBhm3mXiK2YnFz2lFpEEVcLcohhVw==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/markdown-exit": { + "version": "1.0.0-beta.9", + "resolved": "https://registry.npmjs.org/markdown-exit/-/markdown-exit-1.0.0-beta.9.tgz", + "integrity": "sha512-5tzrMKMF367amyBly131vm6eGuWRL2DjBqWaFmPzPbLyuxP0XOmyyyroOAIXuBAMF/3kZbbfqOxvW/SotqKqbQ==", + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5.0.0", + "@types/mdurl": "^2.0.0", + "entities": "^7.0.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + } + }, + "node_modules/markdown-it": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it-footnote": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-footnote/-/markdown-it-footnote-4.0.0.tgz", + "integrity": "sha512-WYJ7urf+khJYl3DqofQpYfEYkZKbmXmwxQV8c8mO/hGIhgZ1wOe7R4HLFNwqx7TjILbnC98fuyeSsin19JdFcQ==", + "license": "MIT" + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/marked": { + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", + "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/mermaid": { + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.13.0.tgz", + "integrity": "sha512-fEnci+Immw6lKMFI8sqzjlATTyjLkRa6axrEgLV2yHTfv8r+h1wjFbV6xeRtd4rUV1cS4EpR9rwp3Rci7TRWDw==", + "license": "MIT", + "dependencies": { + "@braintree/sanitize-url": "^7.1.1", + "@iconify/utils": "^3.0.2", + "@mermaid-js/parser": "^1.0.1", + "@types/d3": "^7.4.3", + "@upsetjs/venn.js": "^2.0.0", + "cytoscape": "^3.33.1", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.2.0", + "d3": "^7.9.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.14", + "dayjs": "^1.11.19", + "dompurify": "^3.3.1", + "katex": "^0.16.25", + "khroma": "^2.1.0", + "lodash-es": "^4.17.23", + "marked": "^16.3.0", + "roughjs": "^4.6.6", + "stylis": "^4.3.6", + "ts-dedent": "^2.2.0", + "uuid": "^11.1.0" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mlly": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/monaco-editor": { + "version": "0.55.1", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.55.1.tgz", + "integrity": "sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==", + "license": "MIT", + "dependencies": { + "dompurify": "3.2.7", + "marked": "14.0.0" + } + }, + "node_modules/monaco-editor/node_modules/dompurify": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.7.tgz", + "integrity": "sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/monaco-editor/node_modules/marked": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", + "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "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/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "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/nanotar": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/nanotar/-/nanotar-0.3.0.tgz", + "integrity": "sha512-Kv2JYYiCzt16Kt5QwAc9BFG89xfPNBx+oQL4GQXD9nLqPkZBiNaqaCWtwnbk/q7UVsTYevvM1b0UF8zmEI4pCg==", + "license": "MIT" + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nypm": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.5.tgz", + "integrity": "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "citty": "^0.2.0", + "pathe": "^2.0.3", + "tinyexec": "^1.0.2" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/nypm/node_modules/citty": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.1.tgz", + "integrity": "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==", + "license": "MIT", + "optional": true + }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.5.tgz", + "integrity": "sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.1", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/open": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", + "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.4.0", + "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", + "is-inside-container": "^1.0.0", + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/oxc-parser": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.115.0.tgz", + "integrity": "sha512-2w7Xn3CbS/zwzSY82S5WLemrRu3CT57uF7Lx8llrE/2bul6iMTcJE4Rbls7GDNbLn3ttATI68PfOz2Pt3KZ2cQ==", + "license": "MIT", + "dependencies": { + "@oxc-project/types": "^0.115.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-parser/binding-android-arm-eabi": "0.115.0", + "@oxc-parser/binding-android-arm64": "0.115.0", + "@oxc-parser/binding-darwin-arm64": "0.115.0", + "@oxc-parser/binding-darwin-x64": "0.115.0", + "@oxc-parser/binding-freebsd-x64": "0.115.0", + "@oxc-parser/binding-linux-arm-gnueabihf": "0.115.0", + "@oxc-parser/binding-linux-arm-musleabihf": "0.115.0", + "@oxc-parser/binding-linux-arm64-gnu": "0.115.0", + "@oxc-parser/binding-linux-arm64-musl": "0.115.0", + "@oxc-parser/binding-linux-ppc64-gnu": "0.115.0", + "@oxc-parser/binding-linux-riscv64-gnu": "0.115.0", + "@oxc-parser/binding-linux-riscv64-musl": "0.115.0", + "@oxc-parser/binding-linux-s390x-gnu": "0.115.0", + "@oxc-parser/binding-linux-x64-gnu": "0.115.0", + "@oxc-parser/binding-linux-x64-musl": "0.115.0", + "@oxc-parser/binding-openharmony-arm64": "0.115.0", + "@oxc-parser/binding-wasm32-wasi": "0.115.0", + "@oxc-parser/binding-win32-arm64-msvc": "0.115.0", + "@oxc-parser/binding-win32-ia32-msvc": "0.115.0", + "@oxc-parser/binding-win32-x64-msvc": "0.115.0" + } + }, + "node_modules/oxc-walker": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/oxc-walker/-/oxc-walker-0.7.0.tgz", + "integrity": "sha512-54B4KUhrzbzc4sKvKwVYm7E2PgeROpGba0/2nlNZMqfDyca+yOor5IMb4WLGBatGDT0nkzYdYuzylg7n3YfB7A==", + "license": "MIT", + "dependencies": { + "magic-regexp": "^0.10.0" + }, + "peerDependencies": { + "oxc-parser": ">=0.98.0" + } + }, + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, + "node_modules/path-data-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz", + "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==", + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/pdf-lib": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/pdf-lib/-/pdf-lib-1.17.1.tgz", + "integrity": "sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==", + "license": "MIT", + "dependencies": { + "@pdf-lib/standard-fonts": "^1.0.0", + "@pdf-lib/upng": "^1.0.1", + "pako": "^1.0.11", + "tslib": "^1.11.1" + } + }, + "node_modules/pdf-lib/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/perfect-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/plantuml-encoder": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz", + "integrity": "sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g==", + "license": "MIT" + }, + "node_modules/playwright-chromium": { + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright-chromium/-/playwright-chromium-1.58.2.tgz", + "integrity": "sha512-SCoQ3hjBs7FfO46CoOtgAUg77BuYwCni1bzQgm47IUyLBTipnGkLxLnaUNRKXvPYO4hAyt8++Z6wVShVnhrzmw==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.58.2" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright-core": { + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", + "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/points-on-curve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", + "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==", + "license": "MIT" + }, + "node_modules/points-on-path": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz", + "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==", + "license": "MIT", + "dependencies": { + "path-data-parser": "0.1.0", + "points-on-curve": "0.2.0" + } + }, + "node_modules/popmotion": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/popmotion/-/popmotion-11.0.5.tgz", + "integrity": "sha512-la8gPM1WYeFznb/JqF4GiTkRRPZsfaj2+kCxqQgr2MJylMmIKUwBfWW8Wa5fml/8gmtlD5yI01MP1QCZPWmppA==", + "license": "MIT", + "dependencies": { + "framesync": "6.1.2", + "hey-listen": "^1.0.8", + "style-value-types": "5.1.2", + "tslib": "2.4.0" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-nested": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-7.0.2.tgz", + "integrity": "sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pptxgenjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pptxgenjs/-/pptxgenjs-4.0.1.tgz", + "integrity": "sha512-TeJISr8wouAuXw4C1F/mC33xbZs/FuEG6nH9FG1Zj+nuPcGMP5YRHl6X+j3HSUnS1f3at6k75ZZXPMZlA5Lj9A==", + "license": "MIT", + "dependencies": { + "@types/node": "^22.8.1", + "https": "^1.0.0", + "image-size": "^1.2.1", + "jszip": "^3.10.1" + } + }, + "node_modules/prism-theme-vars": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/prism-theme-vars/-/prism-theme-vars-0.2.5.tgz", + "integrity": "sha512-/D8gBTScYzi9afwE6v3TC1U/1YFZ6k+ly17mtVRdLpGy7E79YjJJWkXFgUDHJ2gDksV/ZnXF7ydJ4TvoDm2z/Q==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/public-ip": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/public-ip/-/public-ip-8.0.0.tgz", + "integrity": "sha512-XzVyz98rNQiTRciAC+I4w45fWWxM9KKedDGNtH4unPwBcWo2Y9n7kgPXqlTiWqKN0EFlIIU1i8yrWOy9mxgZ8g==", + "license": "MIT", + "dependencies": { + "dns-socket": "^4.2.2", + "is-ip": "^5.0.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "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==", + "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/rc9": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-3.0.0.tgz", + "integrity": "sha512-MGOue0VqscKWQ104udASX/3GYDcKyPI4j4F8gu/jHHzglpmy9a/anZK3PNe8ug6aZFl+9GxLtdhe3kVZuMaQbA==", + "license": "MIT", + "optional": true, + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.5" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/recordrtc": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/recordrtc/-/recordrtc-5.6.2.tgz", + "integrity": "sha512-1QNKKNtl7+KcwD1lyOgP3ZlbiJ1d0HtXnypUy7yq49xEERxk31PHvE9RCciDrulPCY7WJ+oz0R9hpNxgsIurGQ==", + "license": "MIT" + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "license": "MIT", + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-global": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-2.0.0.tgz", + "integrity": "sha512-gnAQ0Q/KkupGkuiMyX4L0GaBV8iFwlmoXsMtOz+DFTaKmHhOO/dSlP1RMKhpvHv/dh6K/IQkowGJBqUG0NfBUw==", + "license": "MIT", + "dependencies": { + "global-directory": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "license": "Unlicense" + }, + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/roughjs": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz", + "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==", + "license": "MIT", + "dependencies": { + "hachure-fill": "^0.5.2", + "path-data-parser": "^0.1.0", + "points-on-curve": "^0.2.0", + "points-on-path": "^0.2.1" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "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/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "license": "MIT" + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/shiki-magic-move": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/shiki-magic-move/-/shiki-magic-move-1.3.0.tgz", + "integrity": "sha512-QF3OmGtROCGI3HGaB5hAlB6GPnzrxblZg761wg1NhsWKqb79HCeeVVhJE6fZeU1x/6ZOh7S8o9dBWf6eJZYc6A==", + "license": "MIT", + "dependencies": { + "diff-match-patch-es": "^1.0.1", + "ohash": "^2.0.11" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "react": "^18.2.0 || ^19.0.0", + "shiki": "^1.0.0 || ^2.0.0 || ^3.0.0", + "solid-js": "^1.9.1", + "svelte": "^5.0.0-0", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "shiki": { + "optional": true + }, + "solid-js": { + "optional": true + }, + "svelte": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "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/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/style-value-types": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-5.1.2.tgz", + "integrity": "sha512-Vs9fNreYF9j6W2VvuDTP7kepALi7sk0xtk2Tu8Yxi9UoajJdEVpNpCov0HsLTqXvNGKX+Uv09pkozVITi1jf3Q==", + "license": "MIT", + "dependencies": { + "hey-listen": "^1.0.8", + "tslib": "2.4.0" + } + }, + "node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "license": "MIT" + }, + "node_modules/super-regex": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-0.2.0.tgz", + "integrity": "sha512-WZzIx3rC1CvbMDloLsVw0lkZVKJWbrkJ0k1ghKFmcnPrW1+jWbgTkTEWVtD9lMdmI4jZEz40+naBxl1dCUhXXw==", + "license": "MIT", + "dependencies": { + "clone-regexp": "^3.0.0", + "function-timeout": "^0.1.0", + "time-span": "^5.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/time-span": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", + "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", + "license": "MIT", + "dependencies": { + "convert-hrtime": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tinyexec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", + "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "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/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==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "license": "0BSD" + }, + "node_modules/twoslash": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.3.6.tgz", + "integrity": "sha512-VuI5OKl+MaUO9UIW3rXKoPgHI3X40ZgB/j12VY6h98Ae1mCBihjPvhOPeJWlxCYcmSbmeZt5ZKkK0dsVtp+6pA==", + "license": "MIT", + "dependencies": { + "@typescript/vfs": "^1.6.2", + "twoslash-protocol": "0.3.6" + }, + "peerDependencies": { + "typescript": "^5.5.0" + } + }, + "node_modules/twoslash-protocol": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.3.6.tgz", + "integrity": "sha512-FHGsJ9Q+EsNr5bEbgG3hnbkvEBdW5STgPU824AHUjB4kw0Dn4p8tABT7Ncg1Ie6V0+mDg3Qpy41VafZXcQhWMA==", + "license": "MIT" + }, + "node_modules/twoslash-vue": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/twoslash-vue/-/twoslash-vue-0.3.6.tgz", + "integrity": "sha512-HXYxU+Y7jZiMXJN4980fQNMYflLD8uqKey1qVW5ri8bqYTm2t5ILmOoCOli7esdCHlMq4/No3iQUWBWDhZNs9w==", + "license": "MIT", + "dependencies": { + "@vue/language-core": "^3.2.0", + "twoslash": "0.3.6", + "twoslash-protocol": "0.3.6" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "typescript": "^5.5.0" + } + }, + "node_modules/type-level-regexp": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/type-level-regexp/-/type-level-regexp-0.1.17.tgz", + "integrity": "sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==", + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/unconfig": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-7.5.0.tgz", + "integrity": "sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==", + "license": "MIT", + "dependencies": { + "@quansync/fs": "^1.0.0", + "defu": "^6.1.4", + "jiti": "^2.6.1", + "quansync": "^1.0.0", + "unconfig-core": "7.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/unconfig-core": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/unconfig-core/-/unconfig-core-7.5.0.tgz", + "integrity": "sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==", + "license": "MIT", + "dependencies": { + "@quansync/fs": "^1.0.0", + "quansync": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/unconfig-core/node_modules/quansync": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-1.0.0.tgz", + "integrity": "sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/unconfig/node_modules/quansync": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-1.0.0.tgz", + "integrity": "sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/unctx": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/unctx/-/unctx-2.5.0.tgz", + "integrity": "sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg==", + "license": "MIT", + "optional": true, + "dependencies": { + "acorn": "^8.15.0", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21", + "unplugin": "^2.3.11" + } + }, + "node_modules/unctx/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/unhead": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/unhead/-/unhead-2.1.12.tgz", + "integrity": "sha512-iTHdWD9ztTunOErtfUFk6Wr11BxvzumcYJ0CzaSCBUOEtg+DUZ9+gnE99i8QkLFT2q1rZD48BYYGXpOZVDLYkA==", + "license": "MIT", + "dependencies": { + "hookable": "^6.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unocss": { + "version": "66.6.7", + "resolved": "https://registry.npmjs.org/unocss/-/unocss-66.6.7.tgz", + "integrity": "sha512-TdZ/JnKhrqkknrMvLl0KOwrGzFThEspFIyYiylFYJki2JkMN/5EJIr+vIZEGRX69hFTjTLi6utIpbipueqzNbw==", + "license": "MIT", + "dependencies": { + "@unocss/cli": "66.6.7", + "@unocss/core": "66.6.7", + "@unocss/preset-attributify": "66.6.7", + "@unocss/preset-icons": "66.6.7", + "@unocss/preset-mini": "66.6.7", + "@unocss/preset-tagify": "66.6.7", + "@unocss/preset-typography": "66.6.7", + "@unocss/preset-uno": "66.6.7", + "@unocss/preset-web-fonts": "66.6.7", + "@unocss/preset-wind": "66.6.7", + "@unocss/preset-wind3": "66.6.7", + "@unocss/preset-wind4": "66.6.7", + "@unocss/transformer-attributify-jsx": "66.6.7", + "@unocss/transformer-compile-class": "66.6.7", + "@unocss/transformer-directives": "66.6.7", + "@unocss/transformer-variant-group": "66.6.7", + "@unocss/vite": "66.6.7" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@unocss/astro": "66.6.7", + "@unocss/postcss": "66.6.7", + "@unocss/webpack": "66.6.7" + }, + "peerDependenciesMeta": { + "@unocss/astro": { + "optional": true + }, + "@unocss/postcss": { + "optional": true + }, + "@unocss/webpack": { + "optional": true + } + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unplugin": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz", + "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unplugin-icons": { + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/unplugin-icons/-/unplugin-icons-23.0.1.tgz", + "integrity": "sha512-rv0XEJepajKzDLvRUWASM8K+8+/CCfZn2jtogXqg6RIp7kpatRc/aFrVJn8ANQA09e++lPEEv9yX8cC9enc+QQ==", + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^1.1.0", + "@iconify/utils": "^3.1.0", + "local-pkg": "^1.1.2", + "obug": "^2.1.1", + "unplugin": "^2.3.11" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@svgr/core": ">=7.0.0", + "@svgx/core": "^1.0.1", + "@vue/compiler-sfc": "^3.0.2", + "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "@svgr/core": { + "optional": true + }, + "@svgx/core": { + "optional": true + }, + "@vue/compiler-sfc": { + "optional": true + }, + "svelte": { + "optional": true + } + } + }, + "node_modules/unplugin-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz", + "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==", + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/unplugin-vue-components": { + "version": "31.0.0", + "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-31.0.0.tgz", + "integrity": "sha512-4ULwfTZTLuWJ7+S9P7TrcStYLsSRkk6vy2jt/WTfgUEUb0nW9//xxmrfhyHUEVpZ2UKRRwfRb8Yy15PDbVZf+Q==", + "license": "MIT", + "dependencies": { + "chokidar": "^5.0.0", + "local-pkg": "^1.1.2", + "magic-string": "^0.30.21", + "mlly": "^1.8.0", + "obug": "^2.1.1", + "picomatch": "^4.0.3", + "tinyglobby": "^0.2.15", + "unplugin": "^2.3.11", + "unplugin-utils": "^0.3.1" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.2 || ^4.0.0", + "vue": "^3.0.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/unplugin-vue-markdown": { + "version": "30.0.0", + "resolved": "https://registry.npmjs.org/unplugin-vue-markdown/-/unplugin-vue-markdown-30.0.0.tgz", + "integrity": "sha512-FVdKAb7jmZslfdkOCfm6jxHaUafltBpOXdoLvKY+0I0EeMmhxXTSzeDldwXFJeV0IH8LyIXIiU29E6gv02WJFQ==", + "license": "MIT", + "dependencies": { + "@mdit-vue/plugin-component": "^3.0.2", + "@mdit-vue/plugin-frontmatter": "^3.0.2", + "@mdit-vue/types": "^3.0.2", + "markdown-exit": "^1.0.0-beta.8", + "unplugin": "^2.3.10", + "unplugin-utils": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.0.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/untun": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/untun/-/untun-0.1.3.tgz", + "integrity": "sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.5", + "consola": "^3.2.3", + "pathe": "^1.1.1" + }, + "bin": { + "untun": "bin/untun.mjs" + } + }, + "node_modules/untun/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, + "node_modules/untyped": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/untyped/-/untyped-2.0.0.tgz", + "integrity": "sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==", + "license": "MIT", + "optional": true, + "dependencies": { + "citty": "^0.1.6", + "defu": "^6.1.4", + "jiti": "^2.4.2", + "knitwork": "^1.2.0", + "scule": "^1.3.0" + }, + "bin": { + "untyped": "dist/cli.mjs" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uqr": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz", + "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==", + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-dev-rpc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vite-dev-rpc/-/vite-dev-rpc-1.1.0.tgz", + "integrity": "sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==", + "license": "MIT", + "dependencies": { + "birpc": "^2.4.0", + "vite-hot-client": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0" + } + }, + "node_modules/vite-hot-client": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.1.0.tgz", + "integrity": "sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite-plugin-inspect": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-11.3.3.tgz", + "integrity": "sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==", + "license": "MIT", + "dependencies": { + "ansis": "^4.1.0", + "debug": "^4.4.1", + "error-stack-parser-es": "^1.0.5", + "ohash": "^2.0.11", + "open": "^10.2.0", + "perfect-debounce": "^2.0.0", + "sirv": "^3.0.1", + "unplugin-utils": "^0.3.0", + "vite-dev-rpc": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-inspect/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-inspect/node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-remote-assets": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vite-plugin-remote-assets/-/vite-plugin-remote-assets-2.1.0.tgz", + "integrity": "sha512-8ajL5WG5BmYcC8zxeLOa3byCUG2AopKDAdNK7zStPHaRYYz1mxXBaeNFLu6vTEXj8UmXAsb5WlEmBBYwtlPEwA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.1", + "magic-string": "^0.30.17", + "node-fetch-native": "^1.6.7", + "ohash": "^2.0.11" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": ">=5.0.0" + } + }, + "node_modules/vite-plugin-static-copy": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-3.3.0.tgz", + "integrity": "sha512-XiAtZcev7nppxNFgKoD55rfL+ukVp/RtrnTJONRwRuzv/B2FK2h2ZRCYjvxhwBV/Oarse83SiyXBSxMTfeEM0Q==", + "license": "MIT", + "dependencies": { + "chokidar": "^3.6.0", + "p-map": "^7.0.4", + "picocolors": "^1.1.1", + "tinyglobby": "^0.2.15" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/sapphi-red" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/vite-plugin-static-copy/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/vite-plugin-static-copy/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vite-plugin-static-copy/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/vite-plugin-vue-server-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-server-ref/-/vite-plugin-vue-server-ref-1.0.0.tgz", + "integrity": "sha512-6d/JZVrnETM0xa0AVyEcI1bXFpEzQ1EPU5N/gDa7NtXo/7nfJWJhezcWq82Jih6Vf8xtGJjhi1w19AcXAtwmAg==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "klona": "^2.0.6", + "mlly": "^1.7.4", + "ufo": "^1.5.4" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": ">=2.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/vitefu": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz", + "integrity": "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "license": "MIT", + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.30.tgz", + "integrity": "sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.30", + "@vue/compiler-sfc": "3.5.30", + "@vue/runtime-dom": "3.5.30", + "@vue/server-renderer": "3.5.30", + "@vue/shared": "3.5.30" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-resize": { + "version": "2.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz", + "integrity": "sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-router": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-5.0.4.tgz", + "integrity": "sha512-lCqDLCI2+fKVRl2OzXuzdSWmxXFLQRxQbmHugnRpTMyYiT+hNaycV0faqG5FBHDXoYrZ6MQcX87BvbY8mQ20Bg==", + "license": "MIT", + "dependencies": { + "@babel/generator": "^7.28.6", + "@vue-macros/common": "^3.1.1", + "@vue/devtools-api": "^8.0.6", + "ast-walker-scope": "^0.8.3", + "chokidar": "^5.0.0", + "json5": "^2.2.3", + "local-pkg": "^1.1.2", + "magic-string": "^0.30.21", + "mlly": "^1.8.0", + "muggle-string": "^0.4.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "scule": "^1.3.0", + "tinyglobby": "^0.2.15", + "unplugin": "^3.0.0", + "unplugin-utils": "^0.3.1", + "yaml": "^2.8.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@pinia/colada": ">=0.21.2", + "@vue/compiler-sfc": "^3.5.17", + "pinia": "^3.0.4", + "vue": "^3.5.0" + }, + "peerDependenciesMeta": { + "@pinia/colada": { + "optional": true + }, + "@vue/compiler-sfc": { + "optional": true + }, + "pinia": { + "optional": true + } + } + }, + "node_modules/vue-router/node_modules/unplugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-3.0.0.tgz", + "integrity": "sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wsl-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", + "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/slides/package.json b/slides/package.json new file mode 100644 index 0000000..bb1e7b9 --- /dev/null +++ b/slides/package.json @@ -0,0 +1,21 @@ +{ + "name": "slides-langchain.js", + "type": "module", + "private": true, + "scripts": { + "build": "slidev build", + "dev": "slidev --open --remote", + "export": "slidev export", + "preview": "slidev slides.md", + "deploy": "git push github main" + }, + "dependencies": { + "@slidev/cli": "^52.14.1", + "@slidev/theme-default": "latest", + "@slidev/theme-seriph": "latest", + "vue": "^3.5.30" + }, + "devDependencies": { + "playwright-chromium": "^1.58.2" + } +} diff --git a/slides/pages/agents/01.md b/slides/pages/agents/01.md new file mode 100644 index 0000000..bdeefb8 --- /dev/null +++ b/slides/pages/agents/01.md @@ -0,0 +1,14 @@ +--- +layout: cover +class: text-center +--- + +# Módulo 5: Agentes + +Tools, Structured Output, Runtime y Human-in-the-Loop + +
+ + LLMs que pueden actuar en el mundo real + +
diff --git a/slides/pages/agents/02.md b/slides/pages/agents/02.md new file mode 100644 index 0000000..2f2fd7c --- /dev/null +++ b/slides/pages/agents/02.md @@ -0,0 +1,41 @@ +--- +layout: default +--- + +# ¿Qué es un Agente? + +
+ + + +
+ +Un **agente** es un sistema que usa un LLM para decidir qué acciones tomar + +
+ +
+ +
+ + +
+

❌ Sin Agentes

+

Flujo fijo y predecible

+

Usuario → LLM → Respuesta

+

El LLM solo genera texto

+
+
+ + +
+

✅ Con Agentes

+

Flujo dinámico y adaptativo

+

Usuario → LLM → Tool → LLM → Respuesta

+

El LLM decide qué herramientas usar

+
+
+ +
+ +
diff --git a/slides/pages/agents/03.md b/slides/pages/agents/03.md new file mode 100644 index 0000000..adbe232 --- /dev/null +++ b/slides/pages/agents/03.md @@ -0,0 +1,37 @@ +--- +layout: default +--- + +# Casos de Uso de Agentes + +
+ + +
+

🔍 Búsqueda y análisis

+

Buscar información en APIs, bases de datos o web

+
+
+ + +
+

🛠️ Automatización

+

Enviar emails, crear tickets, actualizar sistemas

+
+
+ + +
+

💼 Asistentes empresariales

+

Consultar CRM, generar reportes, analizar datos

+
+
+ + +
+

🤖 Agentes autónomos

+

Tomar decisiones complejas con múltiples pasos

+
+
+ +
diff --git a/slides/pages/agents/04.md b/slides/pages/agents/04.md new file mode 100644 index 0000000..ae78c5e --- /dev/null +++ b/slides/pages/agents/04.md @@ -0,0 +1,45 @@ +--- +layout: default +--- + +# createAgent: Creando el Agente + +
+ + + +
+ +**createAgent** es la forma estándar de crear agentes en LangChain v1 + +
+ +
+ + + +```typescript +import { createAgent } from "langchain"; + +const agent = createAgent({ + model: "mistral:mistral-large-latest", // Modelo como string + tools: [weatherTool], // Array de tools + systemPrompt: "Eres un asistente útil.", +}); + +const result = await agent.invoke({ + messages: [{ role: "user", content: "¿Qué tiempo hace en Madrid?" }] +}); +``` + + + + + +
+El agente automatiza el ciclo: llamar al LLM -> ejecutar tools -> procesar resultados -> repetir +
+ +
+ +
diff --git a/slides/pages/agents/05.md b/slides/pages/agents/05.md new file mode 100644 index 0000000..95572f9 --- /dev/null +++ b/slides/pages/agents/05.md @@ -0,0 +1,42 @@ +--- +layout: default +--- + +# Configuración del Modelo + +
+ + + +**Opción 1: String con formato `provider:model`** + +```typescript +const agent = createAgent({ + model: "mistral:mistral-large-latest", // Mistral + // model: "openai:gpt-4.1", // OpenAI + // model: "anthropic:claude-sonnet-4-6", // Anthropic + tools: [], +}); +``` + + + + + +**Opción 2: Instancia del modelo con configuración avanzada** + +```typescript +import { ChatMistralAI } from "@langchain/mistralai"; + +const model = new ChatMistralAI({ + model: "mistral-large-latest", + temperature: 0.1, + maxTokens: 1000, +}); + +const agent = createAgent({ model, tools: [] }); +``` + + + +
diff --git a/slides/pages/agents/06.md b/slides/pages/agents/06.md new file mode 100644 index 0000000..ea887b2 --- /dev/null +++ b/slides/pages/agents/06.md @@ -0,0 +1,43 @@ +--- +layout: default +--- + +# systemPrompt: Configurando el Comportamiento + +
+ + + +**String simple:** + +```typescript +const agent = createAgent({ + model: "mistral:mistral-large-latest", + tools: [weatherTool], + systemPrompt: "Eres un asistente meteorológico. Sé conciso y preciso.", +}); +``` + + + + + +**SystemMessage (para features avanzados como cache de Anthropic):** + +```typescript +import { SystemMessage } from "langchain"; + +const agent = createAgent({ + model: "anthropic:claude-sonnet-4-6", + tools: [weatherTool], + systemPrompt: new SystemMessage({ + content: [ + { type: "text", text: "Eres un experto en clima...", cache_control: { type: "ephemeral" } } + ], + }), +}); +``` + + + +
diff --git a/slides/pages/agents/07.md b/slides/pages/agents/07.md new file mode 100644 index 0000000..27cb17a --- /dev/null +++ b/slides/pages/agents/07.md @@ -0,0 +1,44 @@ +--- +layout: default +--- + +# Tools: Definiendo Herramientas + +
+ + + +```typescript +import { tool } from "@langchain/core/tools"; +import { z } from "zod"; + +const weatherTool = tool( + async ({ location }) => { + // Llamar a API del tiempo + return `El tiempo en ${location} es soleado, 22°C`; + }, + { + name: "get_weather", + description: "Obtiene el tiempo actual de una ubicación", + schema: z.object({ + location: z.string().describe("Ciudad o ubicación"), + }), + } +); +``` + + + + + +```typescript +// El agente decide automáticamente cuándo usar cada tool +const agent = createAgent({ + model: "mistral:mistral-large-latest", + tools: [weatherTool, calculatorTool, searchTool], +}); +``` + + + +
diff --git a/slides/pages/agents/08.md b/slides/pages/agents/08.md new file mode 100644 index 0000000..fe98f0f --- /dev/null +++ b/slides/pages/agents/08.md @@ -0,0 +1,42 @@ +--- +layout: default +--- + +# Streaming: Modos de Transmisión + +
+ + + +**`updates`**: Emite evento después de cada paso del agente + +```typescript +for await (const chunk of await agent.stream( + { messages: [{ role: "user", content: "¿Tiempo en Madrid?" }] }, + { streamMode: "updates" } +)) { + console.log(chunk); + // { model: { messages: [AIMessage con tool_call] } } + // { tools: { messages: [ToolMessage con resultado] } } + // { model: { messages: [AIMessage respuesta final] } } +} +``` + + + + + +**`values`**: Emite el estado completo después de cada paso + +```typescript +for await (const chunk of await agent.stream( + { messages: [{ role: "user", content: "¿Tiempo en Madrid?" }] }, + { streamMode: "values" } +)) { + console.log(chunk.messages); // Array completo de mensajes hasta ese punto +} +``` + + + +
diff --git a/slides/pages/agents/09.md b/slides/pages/agents/09.md new file mode 100644 index 0000000..c05fa8a --- /dev/null +++ b/slides/pages/agents/09.md @@ -0,0 +1,40 @@ +--- +layout: default +--- + +# Streaming: Tokens y Mensajes + +
+ + + +**`messages`**: Stream de tokens del LLM + metadata + +```typescript +for await (const [mode, chunk] of await agent.stream( + { messages: [{ role: "user", content: "Explica qué es TypeScript" }] }, + { streamMode: ["updates", "messages"] } +)) { + if (mode === "messages") { + const [token, metadata] = chunk; + if (token.content) { + process.stdout.write(token.content); // Token a token + } + } else if (mode === "updates") { + // Paso completo del agente + console.log("\n[Paso completado]", Object.keys(chunk)); + } +} +``` + + + + + +
+Combina múltiples modos: `streamMode: ["updates", "messages"]` +
+ +
+ +
diff --git a/slides/pages/agents/10.md b/slides/pages/agents/10.md new file mode 100644 index 0000000..3018b39 --- /dev/null +++ b/slides/pages/agents/10.md @@ -0,0 +1,39 @@ +--- +layout: default +--- + +# Checkpointer: MemorySaver + +
+ + + +**MemorySaver**: Persistencia en memoria (desarrollo/testing) + +```typescript +import { createAgent } from "langchain"; +import { MemorySaver } from "@langchain/langgraph"; + +const agent = createAgent({ + model: "mistral:mistral-large-latest", + tools: [weatherTool], + checkpointer: new MemorySaver(), // En memoria RAM +}); + +const config = { configurable: { thread_id: "conv-1" } }; + +// Primera conversación +await agent.invoke( + { messages: [{ role: "user", content: "Hola, soy María" }] }, config +); + +// Segunda conversación - recuerda el contexto +await agent.invoke( + { messages: [{ role: "user", content: "¿Cómo me llamo?" }] }, config +); +// "Tu nombre es María" +``` + + + +
diff --git a/slides/pages/agents/11.md b/slides/pages/agents/11.md new file mode 100644 index 0000000..95916fb --- /dev/null +++ b/slides/pages/agents/11.md @@ -0,0 +1,47 @@ +--- +layout: default +--- + +# Checkpointer: SqliteSaver + +
+ + + +**SqliteSaver**: Persistencia en SQLite (local) + +```bash +npm install @langchain/langgraph-checkpoint-sqlite +``` + + + + + +```typescript +import { createAgent } from "langchain"; +import { SqliteSaver } from "@langchain/langgraph-checkpoint-sqlite"; + +const checkpointer = SqliteSaver.fromConnString("./agent_memory.db"); +await checkpointer.setup(); // Crear tablas + +const agent = createAgent({ + model: "mistral:mistral-large-latest", + tools: [weatherTool], + checkpointer, +}); + +// El estado persiste aunque reinicies la aplicación +``` + + + + + +
+Ideal para desarrollo local y aplicaciones de usuario único +
+ +
+ +
diff --git a/slides/pages/agents/12.md b/slides/pages/agents/12.md new file mode 100644 index 0000000..74986c9 --- /dev/null +++ b/slides/pages/agents/12.md @@ -0,0 +1,47 @@ +--- +layout: default +--- + +# Checkpointer: PostgresSaver + +
+ + + +**PostgresSaver**: Persistencia en PostgreSQL (producción) + +```bash +npm install @langchain/langgraph-checkpoint-postgres +``` + + + + + +```typescript +import { createAgent } from "langchain"; +import { PostgresSaver } from "@langchain/langgraph-checkpoint-postgres"; + +const DB_URI = "postgresql://user:pass@localhost:5432/mydb"; +const checkpointer = PostgresSaver.fromConnString(DB_URI); +await checkpointer.setup(); + +const agent = createAgent({ + model: "mistral:mistral-large-latest", + tools: [weatherTool], + checkpointer, +}); +``` + + + + + +
+También disponibles: **MongoDB** (`@langchain/langgraph-checkpoint-mongodb`), +**Redis** (`@langchain/langgraph-checkpoint-redis`), y **Custom** (implementar `BaseCheckpointSaver`) +
+ +
+ +
diff --git a/slides/pages/agents/12b.md b/slides/pages/agents/12b.md new file mode 100644 index 0000000..7beca14 --- /dev/null +++ b/slides/pages/agents/12b.md @@ -0,0 +1,51 @@ +--- +layout: default +--- + +# Middleware: Arquitectura + +
+ + + +
+ +**Middleware**: Hooks que interceptan el flujo del agente en puntos clave + +
+ +
+ + + +
+ +
+ beforeAgent - Antes de iniciar el agente +
+ +
+ beforeModel - Antes de cada llamada al LLM +
+ +
+ wrapModelCall - Envuelve la llamada al LLM (interceptar/modificar) +
+ +
+ wrapToolCall - Envuelve la ejecución de tools +
+ +
+ afterModel - Después de cada respuesta del LLM +
+ +
+ afterAgent - Después de completar el agente +
+ +
+ +
+ +
diff --git a/slides/pages/agents/13.md b/slides/pages/agents/13.md new file mode 100644 index 0000000..939abac --- /dev/null +++ b/slides/pages/agents/13.md @@ -0,0 +1,36 @@ +--- +layout: default +--- + +# Middleware Custom + +
+ + + +```typescript +import { createAgent, createMiddleware } from "langchain"; + +const loggingMiddleware = createMiddleware({ + name: "LoggingMiddleware", + beforeModel: (state) => { + console.log(`Llamando modelo con ${state.messages.length} mensajes`); + return; // No modificar estado + }, + afterModel: (state) => { + const lastMsg = state.messages[state.messages.length - 1]; + console.log(`Modelo respondió: ${lastMsg.content?.slice(0, 50)}...`); + return; + }, +}); + +const agent = createAgent({ + model: "mistral:mistral-large-latest", + tools: [weatherTool], + middleware: [loggingMiddleware], +}); +``` + + + +
diff --git a/slides/pages/agents/14.md b/slides/pages/agents/14.md new file mode 100644 index 0000000..2500de0 --- /dev/null +++ b/slides/pages/agents/14.md @@ -0,0 +1,46 @@ +--- +layout: default +--- + +# dynamicSystemPromptMiddleware + +
+ + + +```typescript +import * as z from "zod"; +import { createAgent, dynamicSystemPromptMiddleware } from "langchain"; + +const contextSchema = z.object({ + userRole: z.enum(["expert", "beginner"]), +}); + +const agent = createAgent({ + model: "mistral:mistral-large-latest", + tools: [searchTool], + contextSchema, + middleware: [ + dynamicSystemPromptMiddleware>((state, runtime) => { + const userRole = runtime.context.userRole; + let prompt = "Eres un asistente útil."; + + if (userRole === "expert") { + prompt += " Proporciona respuestas técnicas detalladas."; + } else { + prompt += " Explica conceptos de forma simple, sin jerga técnica."; + } + return prompt; + }), + ], +}); + +await agent.invoke( + { messages: [{ role: "user", content: "Explica machine learning" }] }, + { context: { userRole: "beginner" } } +); +``` + + + +
diff --git a/slides/pages/agents/15.md b/slides/pages/agents/15.md new file mode 100644 index 0000000..a617ae0 --- /dev/null +++ b/slides/pages/agents/15.md @@ -0,0 +1,48 @@ +--- +layout: default +--- + +# toolCallLimitMiddleware: Limitar Tools + +
+ + + +```typescript +import { createAgent, toolCallLimitMiddleware } from "langchain"; + +const agent = createAgent({ + model: "mistral:mistral-large-latest", + tools: [searchTool, databaseTool, scraperTool], + middleware: [ + // Límite global: máx 20 por thread, 10 por run + toolCallLimitMiddleware({ threadLimit: 20, runLimit: 10 }), + + // Límite específico para búsquedas + toolCallLimitMiddleware({ + toolName: "search", + threadLimit: 5, + runLimit: 3, + }), + + // Límite estricto para scraping (lanza error si excede) + toolCallLimitMiddleware({ + toolName: "scrape_webpage", + runLimit: 2, + exitBehavior: "error", // "continue" | "error" | "end" + }), + ], +}); +``` + + + + + +
+Requiere checkpointer para `threadLimit`. `runLimit` se resetea en cada invocación. +
+ +
+ +
diff --git a/slides/pages/agents/16.md b/slides/pages/agents/16.md new file mode 100644 index 0000000..7e73e52 --- /dev/null +++ b/slides/pages/agents/16.md @@ -0,0 +1,44 @@ +--- +layout: default +--- + +# summarizationMiddleware: Resumir Historial + +
+ + + +```typescript +import { createAgent, summarizationMiddleware } from "langchain"; + +const agent = createAgent({ + model: "mistral:mistral-large-latest", + tools: [searchTool, calculatorTool], + middleware: [ + summarizationMiddleware({ + model: "mistral:mistral-small-latest", // Modelo para resumir (más barato) + trigger: { tokens: 4000 }, // Resumir cuando supere 4000 tokens + keep: { messages: 20 }, // Mantener los últimos 20 mensajes + }), + ], +}); +``` + + + + + +
+ +**Funcionamiento automático:** + +1. Detecta cuando el historial supera el límite de tokens +2. Resume los mensajes antiguos usando el modelo especificado +3. Reemplaza permanentemente los mensajes antiguos por el resumen +4. Mantiene los mensajes recientes intactos para contexto + +
+ +
+ +
diff --git a/slides/pages/agents/17.md b/slides/pages/agents/17.md new file mode 100644 index 0000000..4559e63 --- /dev/null +++ b/slides/pages/agents/17.md @@ -0,0 +1,46 @@ +--- +layout: default +--- + +# Middleware: Limitar Historial (Trim) + +
+ + + +```typescript +import { RemoveMessage } from "@langchain/core/messages"; +import { createAgent, createMiddleware } from "langchain"; +import { MemorySaver, REMOVE_ALL_MESSAGES } from "@langchain/langgraph"; + +const trimMessages = createMiddleware({ + name: "TrimMessages", + beforeModel: (state) => { + const messages = state.messages; + if (messages.length <= 5) return; // No recortar si hay pocos + + // Mantener primer mensaje + últimos 4 + const firstMsg = messages[0]; + const recentMsgs = messages.slice(-4); + const newMessages = [firstMsg, ...recentMsgs]; + + return { + messages: [ + new RemoveMessage({ id: REMOVE_ALL_MESSAGES }), + ...newMessages, + ], + }; + }, +}); + +const agent = createAgent({ + model: "mistral:mistral-large-latest", + tools: [], + middleware: [trimMessages], + checkpointer: new MemorySaver(), +}); +``` + + + +
diff --git a/slides/pages/agents/18.md b/slides/pages/agents/18.md new file mode 100644 index 0000000..cf5f095 --- /dev/null +++ b/slides/pages/agents/18.md @@ -0,0 +1,40 @@ +--- +layout: default +--- + +# Middleware: wrapModelCall + +
+ + + +Permite interceptar y modificar la llamada al modelo: + +```typescript +import { ChatMistralAI } from "@langchain/mistralai"; +import { createAgent, createMiddleware } from "langchain"; + +const basicModel = new ChatMistralAI({ model: "mistral-small-latest" }); +const advancedModel = new ChatMistralAI({ model: "mistral-large-latest" }); + +const dynamicModelSelection = createMiddleware({ + name: "DynamicModelSelection", + wrapModelCall: (request, handler) => { + // Elegir modelo según complejidad de la conversación + const messageCount = request.messages.length; + const model = messageCount > 10 ? advancedModel : basicModel; + + return handler({ ...request, model }); + }, +}); + +const agent = createAgent({ + model: basicModel, + tools: [searchTool], + middleware: [dynamicModelSelection], +}); +``` + + + +
diff --git a/slides/pages/agents/19.md b/slides/pages/agents/19.md new file mode 100644 index 0000000..d30e552 --- /dev/null +++ b/slides/pages/agents/19.md @@ -0,0 +1,40 @@ +--- +layout: default +--- + +# Middleware: wrapToolCall + +
+ + + +Intercepta la ejecución de tools para manejo de errores: + +```typescript +import { createAgent, createMiddleware, ToolMessage } from "langchain"; + +const handleToolErrors = createMiddleware({ + name: "HandleToolErrors", + wrapToolCall: async (request, handler) => { + try { + return await handler(request); + } catch (error) { + // Devolver mensaje de error al modelo para que reintente + return new ToolMessage({ + content: `Error en tool: ${error}. Por favor revisa los parámetros.`, + tool_call_id: request.toolCall.id!, + }); + } + }, +}); + +const agent = createAgent({ + model: "mistral:mistral-large-latest", + tools: [databaseTool, apiTool], + middleware: [handleToolErrors], +}); +``` + + + +
diff --git a/slides/pages/agents/20.md b/slides/pages/agents/20.md new file mode 100644 index 0000000..89881d9 --- /dev/null +++ b/slides/pages/agents/20.md @@ -0,0 +1,51 @@ +--- +layout: default +--- + +# Middleware Built-in: Resumen + +
+ + +
+ summarizationMiddleware - Resumir historial cuando supera tokens +
+
+ + +
+ humanInTheLoopMiddleware - Pausar para aprobación humana +
+
+ + +
+ toolCallLimitMiddleware - Limitar llamadas a tools +
+
+ + +
+ modelCallLimitMiddleware - Limitar llamadas al modelo +
+
+ + +
+ modelFallbackMiddleware - Fallback a modelos alternativos +
+
+ + +
+ modelRetryMiddleware - Reintentar con backoff exponencial +
+
+ + +
+ piiRedactionMiddleware - Redactar información personal +
+
+ +
diff --git a/slides/pages/agents/21.md b/slides/pages/agents/21.md new file mode 100644 index 0000000..0ade2ad --- /dev/null +++ b/slides/pages/agents/21.md @@ -0,0 +1,46 @@ +--- +layout: default +--- + +# Combinando Middleware + +
+ + + +```typescript +import { + createAgent, + summarizationMiddleware, + humanInTheLoopMiddleware, + toolCallLimitMiddleware, + modelRetryMiddleware, +} from "langchain"; +import { MemorySaver } from "@langchain/langgraph"; + +const agent = createAgent({ + model: "mistral:mistral-large-latest", + tools: [searchTool, sendEmailTool, databaseTool], + checkpointer: new MemorySaver(), + middleware: [ + modelRetryMiddleware({ maxRetries: 3, backoffFactor: 2 }), + summarizationMiddleware({ model: "mistral:mistral-small-latest", trigger: { tokens: 4000 } }), + toolCallLimitMiddleware({ toolName: "search", runLimit: 5 }), + humanInTheLoopMiddleware({ + interruptOn: { send_email: { allowedDecisions: ["approve", "reject"] } }, + }), + ], +}); +``` + + + + + +
+El orden de los middleware importa: se ejecutan en secuencia +
+ +
+ +
diff --git a/slides/pages/agents/22.md b/slides/pages/agents/22.md new file mode 100644 index 0000000..22eb19e --- /dev/null +++ b/slides/pages/agents/22.md @@ -0,0 +1,49 @@ +--- +layout: default +--- + +

Human-in-the-Loop

+ +
+ + + +````md magic-move +```typescript +import { createAgent, humanInTheLoopMiddleware } from "langchain"; +import { Command, MemorySaver } from "@langchain/langgraph"; + +const agent = createAgent({ + model: "gpt-4.1", + tools: [sendEmailTool, deleteRecordTool], + checkpointer: new MemorySaver(), + middleware: [ + humanInTheLoopMiddleware({ + interruptOn: { + send_email: { allowedDecisions: ["approve", "edit", "reject"] }, + delete_record: { allowedDecisions: ["approve", "reject"] }, + }, + }), + ], +}); +``` +```typescript +const config = { configurable: { thread_id: "thread-1" } }; + +// Se pausa antes de ejecutar tools sensibles +let result = await agent.invoke({ messages: [...] }, config); + +// Aprobar y continuar +result = await agent.invoke( + new Command({ resume: { decisions: [{ type: "approve" }] } }), + config +); +``` +```` + + + +
+ + +--- diff --git a/slides/pages/agents/23.md b/slides/pages/agents/23.md new file mode 100644 index 0000000..6bcbbed --- /dev/null +++ b/slides/pages/agents/23.md @@ -0,0 +1,51 @@ +--- +layout: default +--- + +# Resumen: Agentes LangChain v1 + +
+ + +
+ createAgent - Punto de entrada principal +
+
+ + +
+ model - String ("mistral:mistral-large-latest") o instancia ChatModel +
+
+ + +
+ systemPrompt - String o SystemMessage +
+
+ + +
+ tools - Array de tools definidas con Zod +
+
+ + +
+ checkpointer - MemorySaver | SqliteSaver | PostgresSaver +
+
+ + +
+ middleware - Array para customización (prompts, límites, HITL) +
+
+ + +
+ stream() - updates | values | messages +
+
+ +
diff --git a/slides/pages/alternatives/01.md b/slides/pages/alternatives/01.md new file mode 100644 index 0000000..6fa34a7 --- /dev/null +++ b/slides/pages/alternatives/01.md @@ -0,0 +1,20 @@ +--- +layout: cover +class: text-center +--- + +# Alternativas en el Ecosistema JS/TS + +Frameworks y SDKs para aplicaciones LLM en TypeScript + +
+ + Pinceladas rápidas del mercado actual (Mayo 2026) + +
+ +
+ Nota: Nos centramos exclusivamente en opciones JavaScript/TypeScript +
+ + diff --git a/slides/pages/alternatives/02.md b/slides/pages/alternatives/02.md new file mode 100644 index 0000000..baa886a --- /dev/null +++ b/slides/pages/alternatives/02.md @@ -0,0 +1,31 @@ +--- +layout: default +--- + +# El Panorama JS/TS para LLMs + + + +### Tres niveles de abstracción + +``` +┌─────────────────────────────────────────────────────┐ +│ Frameworks (LangChain, LlamaIndex) │ ← Mayor abstracción +├─────────────────────────────────────────────────────┤ +│ SDKs unificados (Vercel AI SDK) │ ← Abstracción media +├─────────────────────────────────────────────────────┤ +│ APIs nativas (OpenAI SDK, Anthropic SDK, etc.) │ ← Control total +└─────────────────────────────────────────────────────┘ +``` + +### La pregunta no es "cuál es mejor" + +Es: **¿qué nivel de abstracción necesito?** + +- **Prototipo rápido** → API nativa o Vercel AI +- **RAG complejo** → LlamaIndex o LangChain +- **Agentes sofisticados** → LangGraph / DeepAgents o Vercel AI SDK 6 +- **UI streaming en React** → Vercel AI SDK + + + diff --git a/slides/pages/alternatives/03.md b/slides/pages/alternatives/03.md new file mode 100644 index 0000000..52aa23c --- /dev/null +++ b/slides/pages/alternatives/03.md @@ -0,0 +1,50 @@ +--- +layout: default +--- + +# LlamaIndex.TS + +El "hermano pequeño" de LlamaIndex (Python) + + + +### Realidad del ecosistema TS + +
+
+ +**Lo bueno** +- Especializado en RAG +- API similar a la versión Python +- Conectores de datos incluidos +- Activamente desarrollado + +
+
+ +**La realidad** +- Mejorando rápido (agentes, LiteParse) +- Documentación aún por detrás de Python +- Comunidad más pequeña +- Features llegan después + +
+
+ +### Ejemplo básico + +```typescript +import { Document, VectorStoreIndex } from "llamaindex"; + +const doc = new Document({ text: "Contenido..." }); +const index = await VectorStoreIndex.fromDocuments([doc]); +const response = await index.asQueryEngine().query({ query: "Mi pregunta" }); +``` + +
+⚠️ Ha mejorado mucho, pero si tu proyecto permite Python, LlamaIndex Python sigue siendo más completo. +
+ +
+ + diff --git a/slides/pages/alternatives/04.md b/slides/pages/alternatives/04.md new file mode 100644 index 0000000..06943b3 --- /dev/null +++ b/slides/pages/alternatives/04.md @@ -0,0 +1,36 @@ +--- +layout: default +--- + +# Vercel AI SDK + +El SDK moderno para aplicaciones AI en JS/TS + + + +### Por qué destaca + +- **Provider-agnostic**: OpenAI, Anthropic, Google, Mistral, Groq... +- **Streaming nativo**: Pensado para UIs reactivas +- **React-first**: Hooks listos para usar (`useChat`, `useCompletion`) +- **Edge-ready**: Funciona en Vercel, Cloudflare Workers, etc. +- **Ligero**: Pocas abstracciones, código directo + +### Ya en v6 — El SDK que más ha crecido + +```typescript +import { openai } from '@ai-sdk/openai'; +import { generateText } from 'ai'; + +const { text } = await generateText({ + model: openai('gpt-4.1'), + prompt: 'Explica qué es RAG', +}); +``` + +
+✅ Excelente para: Apps Next.js/React, APIs serverless, prototipos rápidos +
+ +
+ diff --git a/slides/pages/alternatives/05.md b/slides/pages/alternatives/05.md new file mode 100644 index 0000000..ceb4f28 --- /dev/null +++ b/slides/pages/alternatives/05.md @@ -0,0 +1,40 @@ +--- +layout: default +--- + +# Vercel AI SDK 6 - Agentes + + + +### Agent class (nuevo en v6) + +```typescript +import { openai } from '@ai-sdk/openai'; +import { Agent, tool } from 'ai'; +import { z } from 'zod'; + +const agent = new Agent({ + model: openai('gpt-4.1'), + tools: { + weather: tool({ + description: 'Obtiene el clima', + parameters: z.object({ city: z.string() }), + execute: async ({ city }) => ({ temp: 22, condition: 'Soleado' }), + }), + }, + maxSteps: 5, +}); +``` + +### ¿Agentes completos? + +| Tiene ✅ | No tiene ❌ | +|----------|-------------| +| Agent class reutilizable | Persistencia de estado (threads) | +| Human-in-the-loop (`needsApproval`) | Tools built-in (code interpreter) | +| Tools custom + Streaming | Orquestación multi-agente nativa | + + + + + diff --git a/slides/pages/alternatives/06.md b/slides/pages/alternatives/06.md new file mode 100644 index 0000000..63cd776 --- /dev/null +++ b/slides/pages/alternatives/06.md @@ -0,0 +1,52 @@ +--- +layout: default +--- + +# APIs Nativas de los Providers + +Cada provider tiene su SDK oficial para Node.js/TS + + + +
+ +
+ +### OpenAI SDK +```typescript +import OpenAI from "openai"; +const openai = new OpenAI(); + +// Function calling nativo +const response = await openai.chat.completions.create({ + model: "gpt-4.1", + messages: [...], + tools: [{ type: "function", function: {...} }], +}); +``` +- Assistants API (agentes con estado) +- File search, code interpreter built-in + +
+ +
+ +### Anthropic SDK + Agent SDK +```typescript +import Anthropic from "@anthropic-ai/sdk"; +const anthropic = new Anthropic(); + +const message = await anthropic.messages.create({ + model: "claude-sonnet-4-6", + messages: [...], + tools: [{ name: "...", input_schema: {...} }], +}); +``` +- Tool use muy potente +- **Claude Agent SDK** (`@anthropic-ai/claude-agent-sdk`) + +
+ +
+ +
diff --git a/slides/pages/alternatives/07.md b/slides/pages/alternatives/07.md new file mode 100644 index 0000000..c7df5b9 --- /dev/null +++ b/slides/pages/alternatives/07.md @@ -0,0 +1,42 @@ +--- +layout: default +--- + +# ¿Agentes con APIs Nativas? + +Cada provider tiene su propio enfoque + + + +### OpenAI: Assistants API + +```typescript +const assistant = await openai.beta.assistants.create({ + name: "Analyst", tools: [{ type: "code_interpreter" }], model: "gpt-4.1", +}); +const thread = await openai.beta.threads.create(); +const run = await openai.beta.threads.runs.create(thread.id, { assistant_id: assistant.id }); +``` + +- Agentes con estado, tools built-in (code interpreter, file search) + +### Anthropic: Claude Agent SDK +- Agent SDK con tools built-in (Bash, Read, Edit, Web...) +- O tool use manual si prefieres control total + +### Google (Gemini): @google/genai SDK + +```typescript +import { GoogleGenAI } from "@google/genai"; +const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY }); +const response = await ai.models.generateContent({ + model: "gemini-2.5-flash", contents: "Explica RAG", +}); +``` + +- Function calling similar a OpenAI +- Vertex AI Agents Builder para low-code enterprise + + + + diff --git a/slides/pages/alternatives/08.md b/slides/pages/alternatives/08.md new file mode 100644 index 0000000..8a67de9 --- /dev/null +++ b/slides/pages/alternatives/08.md @@ -0,0 +1,16 @@ +--- +layout: default +--- + +# Comparativa Rápida: Ecosistema JS/TS + +| | LangChain.js | LlamaIndex.TS | Vercel AI | APIs Nativas | +|---|:---:|:---:|:---:|:---:| +| **Madurez TS** | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | +| **RAG** | ✅ Completo | ✅ Especializado | ⚠️ Básico | 🔧 Manual | +| **Agentes** | ✅ LangGraph | ⚠️ Básico | ✅ Agent class | 🔧 Varía | +| **Streaming UI** | ✅ | ⚠️ | ✅✅ | ✅ | +| **Curva aprendizaje** | Media-Alta | Media | Baja | Baja | +| **Vendor lock-in** | Bajo | Bajo | Bajo | Alto | + + diff --git a/slides/pages/alternatives/09.md b/slides/pages/alternatives/09.md new file mode 100644 index 0000000..3da6281 --- /dev/null +++ b/slides/pages/alternatives/09.md @@ -0,0 +1,25 @@ +--- +layout: default +--- + +# Recomendación Pragmática + + + +| Caso de uso | Recomendación | +|-------------|---------------| +| **Prototipo/MVP** | Vercel AI SDK o API nativa | +| **RAG** | LangChain.js (o Python si puedes) | +| **Agentes complejos** | LangGraph / DeepAgents | +| **App React con chat** | Vercel AI SDK | +| **Control total** | APIs nativas del provider | + +
+ +1. **Empieza simple** → API nativa o Vercel AI +2. **Añade complejidad cuando la necesites** → LangChain/LangGraph +3. **No sobre-ingenierices** → La herramienta mínima que resuelva el problema + +
+ +
diff --git a/slides/pages/alternatives/10.md b/slides/pages/alternatives/10.md new file mode 100644 index 0000000..6c80e08 --- /dev/null +++ b/slides/pages/alternatives/10.md @@ -0,0 +1,31 @@ +--- +layout: default +--- + +# Reflexión Final + + + +### El ecosistema JS/TS para LLMs está madurando + +- **2023**: LangChain dominaba, pocas alternativas +- **2024**: Explosión de opciones, Vercel AI despega +- **2025**: Vercel AI SDK 5/6, Claude Agent SDK, DeepAgents +- **2026**: Ecosistema TS ya compite seriamente con Python + +### Pero seamos honestos... + +
+ +**Python sigue adelante** en el ecosistema LLM: +- Más ejemplos, tutoriales, comunidad +- Features nuevas llegan antes +- Mejor soporte de ML/embeddings locales + +Si tu stack lo permite, Python puede ser más productivo para AI. + +
+ +
+ + diff --git a/slides/pages/alternatives/11.md b/slides/pages/alternatives/11.md new file mode 100644 index 0000000..87acf91 --- /dev/null +++ b/slides/pages/alternatives/11.md @@ -0,0 +1,38 @@ +--- +layout: default +--- + +# ¿Cuándo JS/TS es viable para AI? + + + +### Casos donde tiene sentido + +- Tu equipo es **JS/TS puro** y no quieres añadir Python +- Necesitas **edge computing** (Cloudflare Workers, Vercel Edge) +- Tu aplicación es **web-first** con mucho frontend +- Quieres un **stack unificado** (mismo lenguaje front y back) + +### El ecosistema está mejorando + +
+
+ +**Vercel AI SDK** está muy maduro y bien mantenido + +
+
+ +**LangChain.js** sigue de cerca a Python + +
+
+ +
+ +**Conclusión**: JS/TS ya es una opción seria para aplicaciones LLM en producción, especialmente si tu contexto lo favorece. + +
+ +
+ diff --git a/slides/pages/ending.md b/slides/pages/ending.md new file mode 100644 index 0000000..7a7ff65 --- /dev/null +++ b/slides/pages/ending.md @@ -0,0 +1,30 @@ +--- +layout: center +class: text-center +--- + +# Eskerrik asko! 🎉 + +
+ +Gracias por vuestra atención + +
+ +
+ +¿Dudas o consultas? + +
+ +
+ +📧 **jabi@nykk.io** + +
+ +
+ +LangChain.js: De cero a producción + +
diff --git a/slides/pages/introduction/01.md b/slides/pages/introduction/01.md new file mode 100644 index 0000000..db891b4 --- /dev/null +++ b/slides/pages/introduction/01.md @@ -0,0 +1,15 @@ +--- +layout: cover +class: text-center +--- + +# ¿Qué es LangChain? + +Framework para desarrollar aplicaciones con Modelos de Lenguaje (LLMs) + +
+ + Conectando LLMs con el mundo real + +
+ diff --git a/slides/pages/introduction/02.md b/slides/pages/introduction/02.md new file mode 100644 index 0000000..b89558f --- /dev/null +++ b/slides/pages/introduction/02.md @@ -0,0 +1,33 @@ +--- +layout: default +--- + +# Historia de LangChain + +
+ + + +
+

Octubre 2022: Nace LangChain en Python 🐍

+

Creado por Harrison Chase • Enfoque inicial: encadenar prompts y LLMs

+
+ +
+

Diciembre 2022: Lanzamiento de LangChain.js

+

Apenas 2 meses después • Port oficial • Para desarrolladores web

+
+ +
+

2023: Explosión de adopción en ambos ecosistemas

+

Múltiples proveedores de LLMs • 110K+ stars en GitHub

+
+ +
+

2024-2025: Maduración hacia producción

+

LangGraph: Control de bajo nivel • LangSmith: Observabilidad y testing

+
+ +
+ +
diff --git a/slides/pages/introduction/03.md b/slides/pages/introduction/03.md new file mode 100644 index 0000000..65aaa2b --- /dev/null +++ b/slides/pages/introduction/03.md @@ -0,0 +1,34 @@ +--- +layout: center +class: text-center +--- + +# Filosofía de LangChain + +
+ +
+
🔌
+
Flexibilidad
+
Sin vendor lock-in
+
+ +
+
🔗
+
Integración
+
LLMs + Datos externos
+
+ +
+
🤖
+
Agentes
+
Decisiones autónomas
+
+ +
+
🏗️
+
Producción
+
Del prototipo a la realidad
+
+ +
diff --git a/slides/pages/introduction/04.md b/slides/pages/introduction/04.md new file mode 100644 index 0000000..cb394db --- /dev/null +++ b/slides/pages/introduction/04.md @@ -0,0 +1,33 @@ +--- +layout: default +--- + +# Principios Fundamentales + +
+ +
+

1. Flexibilidad de Modelos

+

+ Estandarización de inputs/outputs entre proveedores de LLMs. + Cambia fácilmente entre OpenAI, Anthropic, Google, etc. +

+
+ +
+

2. Orquestación Compleja

+

+ Los modelos coordinan flujos de trabajo con datos externos y herramientas. + Más allá de la simple generación de texto. +

+
+ +
+

3. Fiabilidad en Producción

+

+ Observabilidad, testing y debugging para aplicaciones reales. + El prototipo es fácil, producción es el reto. +

+
+ +
diff --git a/slides/pages/introduction/05.md b/slides/pages/introduction/05.md new file mode 100644 index 0000000..945ab0b --- /dev/null +++ b/slides/pages/introduction/05.md @@ -0,0 +1,38 @@ +--- +layout: default +--- + +# Creencias Fundamentales + +
+ + + +
+

🚀 Los LLMs son tecnología poderosa

+

Una innovación que vale la pena construir sobre ella

+
+ +
+

🔗 Los LLMs son mejores con datos externos

+

Combinar LLMs con fuentes de datos externas potencia sus capacidades

+
+ +
+

🤖 El futuro es agéntico

+

Las aplicaciones exhibirán capacidades autónomas y de toma de decisiones

+
+ +
+

🌱 Estamos en una etapa temprana

+

El campo está en constante evolución con espacio sustancial para crecer

+
+ +
+

💪 Producción es difícil

+

Prototipar es fácil, lograr fiabilidad en producción es el verdadero desafío

+
+ +
+ +
diff --git a/slides/pages/introduction/06.md b/slides/pages/introduction/06.md new file mode 100644 index 0000000..df2fbbe --- /dev/null +++ b/slides/pages/introduction/06.md @@ -0,0 +1,31 @@ +--- +layout: center +class: text-center +--- + +# Ecosistema LangChain + +
+ +
+
⛓️
+
LangChain (v1)
+
Interfaz productiva para agentes
+
createAgent + Middleware
+
+ +
+
🕸️
+
LangGraph
+
Motor de runtime confiable
+
Persistencia, streaming, control granular
+
+ +
+
🔍
+
LangSmith
+
Observabilidad + Evaluación
+
Tracing automático, debugging visual
+
+ +
diff --git a/slides/pages/introduction/07.md b/slides/pages/introduction/07.md new file mode 100644 index 0000000..01db7e4 --- /dev/null +++ b/slides/pages/introduction/07.md @@ -0,0 +1,42 @@ +--- +layout: default +--- + +# ¿Quién usa LangChain? + +
+ +
+ +## 🏢 Empresas en Producción + +- **LinkedIn** - Agentes con LangGraph +- **Uber** - Sistemas agénticos +- **Replit** - Asistentes de código +- **Klarna** - Chatbots de atención +- **Snowflake** - Integración de datos +- **J.P. Morgan** - Aplicaciones financieras +- **BCG** - Consultoría con IA + +
+ +
+ +## 📊 Números de Adopción + +- **1,306** empresas verificadas +- **132K+** aplicaciones LLM construidas +- **130M+** descargas totales +- **51%** usando agentes en producción +- **78%** planean usar agentes pronto + +### 💼 Casos de Uso Comunes + +- Chat sobre documentos +- Atención al cliente +- Asistentes personalizados +- Análisis de datos + +
+ +
diff --git a/slides/pages/introduction/08.md b/slides/pages/introduction/08.md new file mode 100644 index 0000000..a33c715 --- /dev/null +++ b/slides/pages/introduction/08.md @@ -0,0 +1,52 @@ +--- +layout: default +--- + +# Modelo de Negocio de LangChain + +
+ +
+ +## 🏢 La Empresa + + +- **Fundadores**: Harrison Chase y Ankush Gola +- **Fundación**: Octubre 2022 +- **Sede**: San Francisco, CA +- **CEO**: Harrison Chase +- **Equipo**: ~136 empleados (2025) + +### 💰 Financiación + +- **$260M** levantados en total +- **$1.25B** de valoración (Oct 2025) +- **Inversores**: Sequoia, Benchmark, IVP, CapitalG + + +
+ +
+ +## 💼 Modelo de Negocio + + +**Freemium B2B** +- Framework open-source (gratis) +- Monetización vía LangSmith + +**Revenue 2025**: $16M ARR +- Crecimiento: $8.5M → $16M en 1 año +- **1,000+** clientes empresariales + + +### 💎 LangSmith Pricing + +- **Developer**: Gratis (5k traces/mes) +- **Plus**: $39/usuario/mes (10k traces) +- **Enterprise**: Personalizado + self-hosted + + +
+ +
diff --git a/slides/pages/introduction/09.md b/slides/pages/introduction/09.md new file mode 100644 index 0000000..03b7c75 --- /dev/null +++ b/slides/pages/introduction/09.md @@ -0,0 +1,27 @@ +--- +layout: two-cols +--- + +# LangChain.js + +La implementación JavaScript/TypeScript del framework LangChain + +::right:: + + + +## ¿Por qué LangChain.js? + +- **Desarrollo web nativo** + - Frontend y backend con la misma tecnología + +- **Ecosistema JavaScript** + - NPM, TypeScript, Node.js + +- **Paridad con Python** + - Mismos conceptos y APIs + +- **Comunidad activa** + - Mantenido oficialmente + + diff --git a/slides/pages/introduction/10.md b/slides/pages/introduction/10.md new file mode 100644 index 0000000..f61ae04 --- /dev/null +++ b/slides/pages/introduction/10.md @@ -0,0 +1,54 @@ +--- +layout: default +--- + +# LangChain.js: Entornos de Ejecución + +
+ +
+ +## 🖥️ Runtimes Soportados + + + +- **Node.js** (20.x, 22.x, 24.x) + - ESM y CommonJS + +- **Deno** - Runtime seguro + +- **Bun** - Runtime ultra-rápido + +- **Navegadores** - Client-side + + + +
+ +
+ +## ☁️ Edge & Serverless + + + +- **Cloudflare Workers** + +- **Vercel Edge Functions** + +- **Next.js** (Server, Edge, Browser) + +- **Supabase Edge Functions** + + + + + +### 💪 Ventaja Clave + +**Una sola codebase** para frontend, backend, edge y serverless + + + +
+ +
diff --git a/slides/pages/introduction/11.md b/slides/pages/introduction/11.md new file mode 100644 index 0000000..ed6e2ef --- /dev/null +++ b/slides/pages/introduction/11.md @@ -0,0 +1,59 @@ +--- +layout: default +--- + +# Arquitectura de Componentes + +

Los componentes trabajan juntos para crear aplicaciones AI sofisticadas

+ +
+ +## 🧩 Seis Categorías Principales + +
+ + +
+

📝 Models

+

Chat, LLMs, embeddings

+
+
+ + +
+

🔧 Tools

+

APIs, búsquedas, DBs

+
+
+ + +
+

🤖 Agents

+

Orquestación y razonamiento

+
+
+ + +
+

💾 Memory

+

Historia y estado

+
+
+ + +
+

🔍 Retrievers

+

Búsqueda vectorial y web

+
+
+ + +
+

📄 Documents

+

Loaders, splitters

+
+
+ +
+ +
diff --git a/slides/pages/langsmith/01.md b/slides/pages/langsmith/01.md new file mode 100644 index 0000000..071e504 --- /dev/null +++ b/slides/pages/langsmith/01.md @@ -0,0 +1,14 @@ +--- +layout: cover +class: text-center +--- + +# Módulo 6: LangSmith + +Observabilidad, debugging y evaluación + +
+ + Llevando tu aplicación a producción + +
diff --git a/slides/pages/langsmith/02.md b/slides/pages/langsmith/02.md new file mode 100644 index 0000000..64f5581 --- /dev/null +++ b/slides/pages/langsmith/02.md @@ -0,0 +1,44 @@ +--- +layout: default +--- + +# ¿Qué es LangSmith? + +
+ + + +
+ +**LangSmith**: Plataforma de observabilidad y testing para aplicaciones LLM + +
+ +
+ +
+ + +
+

🔍 Observabilidad

+

Ver cada paso del agente: prompts, respuestas, tools ejecutadas

+
+
+ + +
+

🐛 Debugging

+

Identificar errores, latencias y costos en producción

+
+
+ + +
+

✅ Evaluación

+

Datasets de prueba y métricas de calidad

+
+
+ +
+ +
diff --git a/slides/pages/langsmith/03.md b/slides/pages/langsmith/03.md new file mode 100644 index 0000000..20bd243 --- /dev/null +++ b/slides/pages/langsmith/03.md @@ -0,0 +1,29 @@ +--- +layout: default +--- + +# ¿Por qué LangSmith? + +
+ + +
+

❌ Sin LangSmith

+

• No sabes qué prompts se enviaron exactamente

+

• Difícil reproducir errores

+

• Imposible saber el costo real por usuario

+

• Testing manual y tedioso

+
+
+ + +
+

✅ Con LangSmith

+

• Trazas completas de cada ejecución

+

• Replay de conversaciones problemáticas

+

• Dashboard de costos y latencias

+

• Datasets y evaluaciones automáticas

+
+
+ +
diff --git a/slides/pages/langsmith/04.md b/slides/pages/langsmith/04.md new file mode 100644 index 0000000..f6f3755 --- /dev/null +++ b/slides/pages/langsmith/04.md @@ -0,0 +1,42 @@ +--- +layout: default +--- + +# Configuración de LangSmith + +
+ + + +**Paso 1:** Crear cuenta gratuita en [smith.langchain.com](https://smith.langchain.com) + + + + + +**Paso 2:** Obtener API Key desde Settings → API Keys + + + + + +**Paso 3:** Configurar variables de entorno + +```bash +# .env +LANGCHAIN_TRACING_V2=true +LANGCHAIN_API_KEY=lsv2_pt_... +LANGCHAIN_PROJECT=mi-proyecto +``` + + + + + +
+✨ Automático: LangChain detecta las variables y envía trazas a LangSmith +
+ +
+ +
diff --git a/slides/pages/langsmith/05.md b/slides/pages/langsmith/05.md new file mode 100644 index 0000000..8a2f004 --- /dev/null +++ b/slides/pages/langsmith/05.md @@ -0,0 +1,33 @@ +--- +layout: default +--- + +# Ejemplo con LangSmith + +
+ +```typescript +import { createAgent } from "langchain"; + +// Con las variables de entorno configuradas, +// las trazas se envían automáticamente a LangSmith + +const agent = createAgent({ + model: "openai:gpt-4.1-mini", + tools: [weatherTool], +}); + +const result = await agent.invoke({ + messages: [{ role: "user", content: "¿Qué tiempo hace en Madrid?" }] +}); + +// ✅ Ve la traza completa en https://smith.langchain.com +// - Input del usuario +// - Decisión del LLM de usar la tool +// - Ejecución de la tool +// - Respuesta final +// - Tokens consumidos +// - Latencia de cada paso +``` + +
diff --git a/slides/pages/langsmith/06.md b/slides/pages/langsmith/06.md new file mode 100644 index 0000000..9593597 --- /dev/null +++ b/slides/pages/langsmith/06.md @@ -0,0 +1,37 @@ +--- +layout: default +--- + +# Plan Gratuito + +
+ + + +
+

🎁 Developer (Gratis)

+

• 5,000 traces/mes

+

• Retención de 14 días

+

• 1 usuario

+

• Perfecto para desarrollo y testing

+
+ +
+ + + +
+📚 Planes de pago desde $39/mes (Plus) para equipos y producción +
+ +
+ + + +
+[smith.langchain.com/pricing](https://smith.langchain.com/pricing) +
+ +
+ +
diff --git a/slides/pages/langsmith/07.md b/slides/pages/langsmith/07.md new file mode 100644 index 0000000..7676ab6 --- /dev/null +++ b/slides/pages/langsmith/07.md @@ -0,0 +1,30 @@ +--- +layout: default +--- + +# Próximos Pasos + +
+ + +
+

🚀 En producción

+

Activa LangSmith para monitorear tu aplicación en real-time

+
+
+ + +
+

📚 Explora datasets

+

Crea casos de prueba y evalúa mejoras en tus prompts

+
+
+ + +
+

📖 Documentación

+

[docs.smith.langchain.com](https://docs.smith.langchain.com)

+
+
+ +
diff --git a/slides/pages/messages/01.md b/slides/pages/messages/01.md new file mode 100644 index 0000000..2a75961 --- /dev/null +++ b/slides/pages/messages/01.md @@ -0,0 +1,14 @@ +--- +layout: cover +class: text-center +--- + +# Módulo 4: Mensajes y Prompts + +Sistema de mensajes, templates y gestión de contexto + +
+ + Comunicándote efectivamente con los LLMs + +
diff --git a/slides/pages/messages/02.md b/slides/pages/messages/02.md new file mode 100644 index 0000000..8125128 --- /dev/null +++ b/slides/pages/messages/02.md @@ -0,0 +1,29 @@ +--- +layout: default +--- + +# Tipos de Mensajes + +
+ +Los **Chat Models** trabajan con mensajes tipados, no con texto plano. Cada tipo tiene una **carga semántica** que el modelo interpreta de forma diferente + +
+ + +
+ 💼 SystemMessage (role: "system") +

Instrucciones iniciales que condicionan todo el comportamiento del modelo. Define persona, reglas, restricciones y formato de respuesta. Tiene la mayor prioridad en la atención del modelo.

+
+
+ + +
+ 👤 HumanMessage (role: "user") +

Input del usuario. Es lo que el modelo debe responder directamente. Puede contener texto, imágenes, audio y archivos (multimodal).

+
+
+ +
+ +
diff --git a/slides/pages/messages/02b.md b/slides/pages/messages/02b.md new file mode 100644 index 0000000..e9e6ffd --- /dev/null +++ b/slides/pages/messages/02b.md @@ -0,0 +1,33 @@ +--- +layout: default +--- + +# Tipos de Mensajes (cont.) + +
+ +
+ + +
+ 🤖 AIMessage (role: "assistant") +

Respuesta previa del modelo. Se usa para historial de conversación y para few-shot learning. Puede incluir tool_calls, usage_metadata y response_metadata.

+
+
+ + +
+ 🔧 ToolMessage (role: "tool") +

Resultado de una herramienta ejecutada. Requiere tool_call_id que enlaza con el AIMessage que solicitó la herramienta. Cierra el ciclo de tool-calling.

+
+
+ + +
+💡 También puedes usar la notación abreviada con tuplas: ["system", "..."], ["human", "..."], ["ai", "..."] dentro de ChatPromptTemplate +
+
+ +
+ +
diff --git a/slides/pages/messages/02c.md b/slides/pages/messages/02c.md new file mode 100644 index 0000000..3d5171f --- /dev/null +++ b/slides/pages/messages/02c.md @@ -0,0 +1,39 @@ +--- +layout: default +--- + +# Implicaciones: System vs Human + +
+ +El tipo de mensaje **no es solo una etiqueta**, cambia cómo el modelo procesa la información + +
+ + +
+

💼 System vs Human

+

Poner instrucciones en SystemMessage vs en HumanMessage no es equivalente:

+
    +
  • System tiene mayor prioridad — el modelo lo trata como "ley"
  • +
  • Human se trata como "petición" — puede ser ignorado si contradice al system
  • +
  • En Anthropic, system va en un parámetro separado de la API
  • +
+
+
+ + +
+

🤖 AIMessage manual

+

Puedes inyectar AIMessages falsos en el historial:

+
    +
  • El modelo "cree" que él mismo dijo eso
  • +
  • Útil para few-shot: enseñar el patrón de respuesta deseado
  • +
  • Útil para prefilling: forzar el inicio de la respuesta
  • +
+
+
+ +
+ +
diff --git a/slides/pages/messages/02d.md b/slides/pages/messages/02d.md new file mode 100644 index 0000000..66ae35c --- /dev/null +++ b/slides/pages/messages/02d.md @@ -0,0 +1,39 @@ +--- +layout: default +--- + +# Implicaciones: Tool Calling y Orden + +
+ +
+ + +
+

🔧 Ciclo de Tool Calling

+

El flujo completo requiere 3 mensajes:

+
    +
  1. AIMessage con tool_calls → modelo pide ejecutar
  2. +
  3. ToolMessage con resultado → tu app ejecuta y devuelve
  4. +
  5. AIMessage final → modelo interpreta el resultado
  6. +
+

Lo veremos en detalle en el módulo de Agentes

+
+
+ + +
+

📋 El orden importa

+

La secuencia de mensajes define el contexto:

+
    +
  • Los mensajes recientes tienen más peso que los antiguos
  • +
  • El modelo espera alternancia Human → AI → Human
  • +
  • Romper la alternancia puede causar comportamiento inesperado
  • +
+

Por eso la gestión del historial es clave

+
+
+ +
+ +
diff --git a/slides/pages/messages/03.md b/slides/pages/messages/03.md new file mode 100644 index 0000000..310a590 --- /dev/null +++ b/slides/pages/messages/03.md @@ -0,0 +1,29 @@ +--- +layout: default +--- + +# Ejemplo: Usando Mensajes + +
+ +```typescript +import { ChatOpenAI } from "@langchain/openai"; +import { + SystemMessage, + HumanMessage +} from "@langchain/core/messages"; + +const model = new ChatOpenAI({ model: "gpt-4.1-mini" }); + +const messages = [ + new SystemMessage("Eres un experto en JavaScript y TypeScript"), + new HumanMessage("¿Qué es async/await?") +]; + +const response = await model.invoke(messages); + +console.log(response.content); +// Respuesta contextualizada como experto en JS/TS +``` + +
diff --git a/slides/pages/messages/04.md b/slides/pages/messages/04.md new file mode 100644 index 0000000..72b3748 --- /dev/null +++ b/slides/pages/messages/04.md @@ -0,0 +1,47 @@ +--- +layout: default +--- + +# Prompt Templates + +
+ + + +
+ +**ChatPromptTemplate** permite reutilizar prompts con variables dinámicas y la notación abreviada de roles + +
+ +
+ + + +```typescript +import { ChatPromptTemplate } from "@langchain/core/prompts"; + +const template = ChatPromptTemplate.fromMessages([ + ["system", "Eres un experto en {topic}"], // ← shorthand de SystemMessage + ["human", "{question}"] // ← shorthand de HumanMessage +]); + +const prompt = await template.invoke({ + topic: "JavaScript", + question: "¿Qué es async/await?" +}); + +const response = await model.invoke(prompt); +``` + + + + + +
+💡 Los templates son útiles para reutilización, testing y separar prompts de la lógica. Pero para casos simples, puedes usar mensajes directamente. +
+ +
+ +
diff --git a/slides/pages/messages/05.md b/slides/pages/messages/05.md new file mode 100644 index 0000000..757ee20 --- /dev/null +++ b/slides/pages/messages/05.md @@ -0,0 +1,37 @@ +--- +layout: default +--- + +# Ventajas de Templates + +
+ + +
+

✅ Reutilización

+

El mismo template con diferentes variables

+
+
+ + +
+

✅ Mantenibilidad

+

Cambiar el prompt en un solo lugar

+
+
+ + +
+

✅ Testing

+

Probar con múltiples combinaciones de variables

+
+
+ + +
+

✅ Separación de Responsabilidades

+

Prompts independientes de la lógica de negocio

+
+
+ +
diff --git a/slides/pages/messages/06.md b/slides/pages/messages/06.md new file mode 100644 index 0000000..5614871 --- /dev/null +++ b/slides/pages/messages/06.md @@ -0,0 +1,41 @@ +--- +layout: default +--- + +# Few-Shot Prompting + +
+ + + +
+ +**Few-shot**: Dar ejemplos al LLM para que aprenda el patrón deseado + +
+ +
+ + + +```typescript +import { ChatPromptTemplate } from "@langchain/core/prompts"; + +const template = ChatPromptTemplate.fromMessages([ + ["system", "Clasifica el sentimiento de tweets"], + ["human", "Me encanta este producto!"], + ["ai", "positivo"], + ["human", "No funciona bien :("], + ["ai", "negativo"], + ["human", "{tweet}"] // El tweet a clasificar +]); + +const response = await model.invoke( + await template.invoke({ tweet: "Buena experiencia" }) +); +// → "positivo" +``` + + + +
diff --git a/slides/pages/messages/07.md b/slides/pages/messages/07.md new file mode 100644 index 0000000..acc938c --- /dev/null +++ b/slides/pages/messages/07.md @@ -0,0 +1,40 @@ +--- +layout: default +--- + +# Historial de Conversación + +
+ + + +
+ +Para mantener **contexto** entre mensajes, acumula el historial + +
+ +
+ + + +```typescript +import { ChatOpenAI } from "@langchain/openai"; +import { HumanMessage, AIMessage } from "@langchain/core/messages"; + +const model = new ChatOpenAI({ model: "gpt-4.1-mini" }); + +const history = [ + new HumanMessage("Hola, me llamo Juan"), + new AIMessage("Hola Juan, ¿en qué puedo ayudarte?"), + new HumanMessage("¿Cuál es mi nombre?") +]; + +const response = await model.invoke(history); +console.log(response.content); +// → "Tu nombre es Juan" +``` + + + +
diff --git a/slides/pages/messages/08.md b/slides/pages/messages/08.md new file mode 100644 index 0000000..e834a95 --- /dev/null +++ b/slides/pages/messages/08.md @@ -0,0 +1,44 @@ +--- +layout: default +--- + +# Gestión de Historial + +
+ + + +
+ +**Problema**: El historial crece indefinidamente → Tokens infinitos → Costos altos + +
+ +
+ +
+ + +
+

📏 Limitar por cantidad

+

Mantener solo los últimos N mensajes

+
+
+ + +
+

📊 Limitar por tokens

+

Mantener solo los últimos N tokens

+
+
+ + +
+

📝 Resumir

+

Comprimir conversaciones antiguas en un resumen

+
+
+ +
+ +
diff --git a/slides/pages/messages/09.md b/slides/pages/messages/09.md new file mode 100644 index 0000000..2c8a226 --- /dev/null +++ b/slides/pages/messages/09.md @@ -0,0 +1,34 @@ +--- +layout: default +--- + +# Ejemplo: Limitando Historial + +
+ +```typescript +import { ChatOpenAI } from "@langchain/openai"; +import { HumanMessage, AIMessage } from "@langchain/core/messages"; + +const model = new ChatOpenAI({ model: "gpt-4.1-mini" }); + +// Simular un historial largo +const fullHistory = [ + new HumanMessage("Mensaje 1"), + new AIMessage("Respuesta 1"), + new HumanMessage("Mensaje 2"), + new AIMessage("Respuesta 2"), + new HumanMessage("Mensaje 3"), + new AIMessage("Respuesta 3"), +]; + +// Mantener solo los últimos 4 mensajes (2 turnos) +const recentHistory = fullHistory.slice(-4); + +const response = await model.invoke([ + ...recentHistory, + new HumanMessage("Nueva pregunta") +]); +``` + +
diff --git a/slides/pages/messages/10.md b/slides/pages/messages/10.md new file mode 100644 index 0000000..ccc775c --- /dev/null +++ b/slides/pages/messages/10.md @@ -0,0 +1,51 @@ +--- +layout: default +--- + +# Placeholder Variables + +
+ + + +
+ +**MessagesPlaceholder**: Insertar arrays de mensajes dinámicamente en templates + +
+ +
+ + + +```typescript +import { ChatPromptTemplate, MessagesPlaceholder } from "@langchain/core/prompts"; + +const template = ChatPromptTemplate.fromMessages([ + ["system", "Eres un asistente útil"], + new MessagesPlaceholder("history"), // Array de mensajes + ["human", "{input}"] +]); + +const response = await model.invoke( + await template.invoke({ + history: [ + new HumanMessage("Hola"), + new AIMessage("¡Hola! ¿En qué puedo ayudarte?") + ], + input: "¿Qué tiempo hace?" + }) +); +``` + + + + + +
+💡 ["system", "..."] y ["human", "..."] son la forma abreviada de SystemMessage y HumanMessage en ChatPromptTemplate +
+ +
+ +
diff --git a/slides/pages/messages/11.md b/slides/pages/messages/11.md new file mode 100644 index 0000000..cc82285 --- /dev/null +++ b/slides/pages/messages/11.md @@ -0,0 +1,43 @@ +--- +layout: default +--- + +# Partial Templates + +
+ + + +
+ +**Partial**: Pre-rellenar algunas variables, completar otras después + +
+ +
+ + + +```typescript +import { ChatPromptTemplate } from "@langchain/core/prompts"; + +const template = ChatPromptTemplate.fromMessages([ + ["system", "Eres un experto en {topic} que habla {language}"], + ["human", "{question}"] +]); + +// Pre-configurar topic y language +const spanishJSTemplate = await template.partial({ + topic: "JavaScript", + language: "español" +}); + +// Ahora solo necesitas la pregunta +const response = await model.invoke( + await spanishJSTemplate.invoke({ question: "¿Qué es async/await?" }) +); +``` + + + +
diff --git a/slides/pages/models/01.md b/slides/pages/models/01.md new file mode 100644 index 0000000..030fd51 --- /dev/null +++ b/slides/pages/models/01.md @@ -0,0 +1,14 @@ +--- +layout: cover +class: text-center +--- + +# Módulo 3: Modelos + +Trabajando con LLMs y Chat Models en LangChain.js + +
+ + La base de cualquier aplicación con IA + +
diff --git a/slides/pages/models/02.md b/slides/pages/models/02.md new file mode 100644 index 0000000..1fc6f47 --- /dev/null +++ b/slides/pages/models/02.md @@ -0,0 +1,43 @@ +--- +layout: default +--- + +# Chat Models + +
+ +
+

💬 La interfaz estándar en LangChain

+

Todos los modelos en LangChain se usan como Chat Models

+

📥 Entrada: Lista de mensajes (System, Human, AI)

+

📤 Salida: Mensaje estructurado (AIMessage)

+
+ +
+ +
+

Mistral

+

Mistral Large, Small

+
+ +
+

Anthropic

+

Claude Sonnet, Haiku

+
+ +
+

Google

+

Gemini Pro, Flash

+
+ +
+ + + +
+ ✅ Misma interfaz para todos → fácil cambiar de proveedor +
+ +
+ +
diff --git a/slides/pages/models/02b.md b/slides/pages/models/02b.md new file mode 100644 index 0000000..7efb488 --- /dev/null +++ b/slides/pages/models/02b.md @@ -0,0 +1,44 @@ +--- +layout: default +--- + +# ¿Qué es un Token? + +
+ + + +
+ +**Token** = Unidad básica de texto que procesa un LLM + +No es exactamente una palabra, ni un carácter + +
+ +
+ + + +
+ +
+

Ejemplos de Tokenización

+

"Hola mundo"2 tokens

+

"LangChain"2 tokens (Lang + Chain)

+

"desarrollador"3 tokens

+

"🚀"1-2 tokens

+
+ +
+

Regla General

+

1 token ≈ 4 caracteres en inglés

+

1 token ≈ ¾ de palabra en inglés

+

100 tokens ≈ 75 palabras

+
+ +
+ +
+ +
diff --git a/slides/pages/models/02c.md b/slides/pages/models/02c.md new file mode 100644 index 0000000..b5d8e7d --- /dev/null +++ b/slides/pages/models/02c.md @@ -0,0 +1,41 @@ +--- +layout: default +--- + +# ¿Cómo se Cuentan los Tokens? + +
+ + + +
+ +Los tokens se cuentan en **entrada (input)** y **salida (output)** por separado + +
+ +
+ + + +
+

💰 Costos

+

Los LLMs cobran por tokens procesados

+

Output suele ser más caro que input (3-5x)

+

Ejemplo: GPT-4o → $2.50/1M tokens input, $10/1M tokens output

+

📊 Precios actualizados por modelo (JSON)

+
+ +
+ + + +
+

🔧 Herramienta para Contar Tokens

+

OpenAI Tokenizer (funciona para la mayoría de modelos):

+

platform.openai.com/tokenizer

+
+ +
+ +
diff --git a/slides/pages/models/03.md b/slides/pages/models/03.md new file mode 100644 index 0000000..3a01e00 --- /dev/null +++ b/slides/pages/models/03.md @@ -0,0 +1,25 @@ +--- +layout: default +--- + +# Parámetros Principales + +
+ + +
+

🌡️ temperature

+

Controla la aleatoriedad de las respuestas

+

0.0 = Determinista | 1.0 = Creativo | 2.0 = Muy aleatorio

+
+
+ + +
+

📏 maxTokens

+

Límite máximo de tokens en la respuesta

+

Ejemplo: 500 (aprox. 375 palabras)

+
+
+ +
diff --git a/slides/pages/models/03b.md b/slides/pages/models/03b.md new file mode 100644 index 0000000..a0a7d4e --- /dev/null +++ b/slides/pages/models/03b.md @@ -0,0 +1,31 @@ +--- +layout: default +--- + +# Parámetros Principales + +
+ + +
+

🎯 topP

+

Nucleus sampling (alternativa a temperature)

+

0.1 = Conservador | 0.9 = Diverso

+
+
+ + +
+

🔁 n

+

Número de respuestas a generar

+

Útil para comparar variaciones

+
+
+ + +
+ ⚠️ Estos parámetros dependen de cada modelo y pueden no estar disponibles en todos los proveedores. +
+
+ +
diff --git a/slides/pages/models/04.md b/slides/pages/models/04.md new file mode 100644 index 0000000..23531e4 --- /dev/null +++ b/slides/pages/models/04.md @@ -0,0 +1,34 @@ +--- +layout: default +--- + +# Ejemplo: Configurando Parámetros + +
+ +```typescript +import { ChatOpenAI } from "@langchain/openai"; + +const model = new ChatOpenAI({ + model: "gpt-4.1-mini", + temperature: 0.7, // Balance entre creatividad y coherencia + maxTokens: 500, // Limitar longitud de respuesta + topP: 0.9, // Nucleus sampling +}); + +const response = await model.invoke( + "Explica qué es un agente en LangChain" +); + +console.log(response.content); +``` + + + +
+💡 Tip: Usa temperature: 0 para respuestas deterministas (útil en tests) +
+ +
+ +
diff --git a/slides/pages/models/05.md b/slides/pages/models/05.md new file mode 100644 index 0000000..3a56eb6 --- /dev/null +++ b/slides/pages/models/05.md @@ -0,0 +1,42 @@ +--- +layout: default +--- + +# Streaming: Respuestas en Tiempo Real + +
+ + + +
+ +**¿Por qué streaming?** + +- ✅ Experiencia de usuario mejorada (como ChatGPT) +- ✅ Feedback inmediato (no esperar 10-20 segundos) +- ✅ Procesar mientras se genera + +
+ +
+ + + +```typescript +import { ChatOpenAI } from "@langchain/openai"; + +const model = new ChatOpenAI({ + model: "gpt-4.1-mini", + streaming: true, +}); + +const stream = await model.stream("Explica qué es LangChain"); + +for await (const chunk of stream) { + console.log(chunk.content); // Imprime palabra por palabra +} +``` + + + +
diff --git a/slides/pages/models/06.md b/slides/pages/models/06.md new file mode 100644 index 0000000..298011e --- /dev/null +++ b/slides/pages/models/06.md @@ -0,0 +1,45 @@ +--- +layout: default +--- + +# Batch: Procesamiento en Lote + +
+ + + +
+ +**¿Cuándo usar batch?** + +- ✅ Procesar múltiples inputs a la vez +- ✅ Optimización de costos (algunos proveedores ofrecen descuentos) +- ✅ Mejor throughput que llamadas individuales + +
+ +
+ + + +```typescript +import { ChatOpenAI } from "@langchain/openai"; + +const model = new ChatOpenAI({ model: "gpt-4.1-mini" }); + +const inputs = [ + "¿Qué es un agente?", + "¿Qué es RAG?", + "¿Qué es LangSmith?" +]; + +const responses = await model.batch(inputs); + +responses.forEach((response, i) => { + console.log(`Pregunta ${i + 1}:`, response.content); +}); +``` + + + +
diff --git a/slides/pages/models/07.md b/slides/pages/models/07.md new file mode 100644 index 0000000..ad46621 --- /dev/null +++ b/slides/pages/models/07.md @@ -0,0 +1,43 @@ +--- +layout: default +--- + +# Structured Output + +
+ + + +
+ +**Problema:** Las respuestas de LLMs son texto plano, difíciles de procesar + +**Solución:** Forzar al modelo a responder con JSON estructurado + +
+ +
+ + + +```typescript +import { ChatOpenAI } from "@langchain/openai"; +import { z } from "zod"; + +// Definir el esquema con Zod +const schema = z.object({ + sentiment: z.enum(["positive", "negative", "neutral"]), + score: z.number().min(0).max(1), + keywords: z.array(z.string()), +}); + +const model = new ChatOpenAI({ model: "gpt-4.1-mini" }) + .withStructuredOutput(schema); + +const result = await model.invoke("Me encanta LangChain!"); +// { sentiment: "positive", score: 0.95, keywords: ["encanta", "langchain"] } +``` + + + +
diff --git a/slides/pages/models/08.md b/slides/pages/models/08.md new file mode 100644 index 0000000..94252ea --- /dev/null +++ b/slides/pages/models/08.md @@ -0,0 +1,49 @@ +--- +layout: default +--- + +# Intercambiabilidad de Modelos + +
+ + + +
+ +**Ventaja clave de LangChain:** Cambiar de proveedor sin reescribir código + +
+ +
+ +
+ + + +```typescript +// OpenAI +import { ChatOpenAI } from "@langchain/openai"; + +const model = new ChatOpenAI({ + model: "gpt-4.1-mini" +}); +``` + + + + + +```typescript +// Anthropic Claude +import { ChatAnthropic } from "@langchain/anthropic"; + +const model = new ChatAnthropic({ + model: "claude-sonnet-4-6" +}); +``` + + + +
+ +
diff --git a/slides/pages/models/08b.md b/slides/pages/models/08b.md new file mode 100644 index 0000000..d7232a1 --- /dev/null +++ b/slides/pages/models/08b.md @@ -0,0 +1,47 @@ +--- +layout: default +--- + +# Intercambiabilidad de Modelos + +
+ +
+ + + +```typescript +// Google Gemini +import { ChatGoogle } from "@langchain/google"; + +const model = new ChatGoogle({ + model: "gemini-2.5-flash" +}); +``` + + + + + +```typescript +// Ollama (Local) +import { ChatOllama } from "@langchain/ollama"; + +const model = new ChatOllama({ + model: "llama3.2" +}); +``` + + + +
+ + + +
+⚡ Todos usan la misma interfaz: .invoke(), .stream(), .batch() +
+ +
+ +
diff --git a/slides/pages/models/09.md b/slides/pages/models/09.md new file mode 100644 index 0000000..23c781e --- /dev/null +++ b/slides/pages/models/09.md @@ -0,0 +1,51 @@ +--- +layout: default +--- + +# initChatModel: Configuración Universal + +
+ + + +
+ +**Forma simplificada** de inicializar modelos sin imports específicos + +
+ +
+ + + +```typescript +import { initChatModel } from "langchain"; + +// En lugar de importar ChatOpenAI, ChatAnthropic, etc. +const model = await initChatModel("gpt-4.1-mini", { + modelProvider: "openai", + temperature: 0.7, +}); + +const response = await model.invoke("Hola!"); +``` + + + + + +
+✅ Ventaja: Cambiar de proveedor modificando solo el string +
+ +
+ + + +
+⚠️ No es magia: aunque no veas el import, el paquete del proveedor (@langchain/openai, @langchain/mistralai, etc.) debe estar instalado en tu proyecto. initChatModel lo resuelve internamente (under the hood). +
+ +
+ +
diff --git a/slides/pages/models/10.md b/slides/pages/models/10.md new file mode 100644 index 0000000..a2bb540 --- /dev/null +++ b/slides/pages/models/10.md @@ -0,0 +1,100 @@ +--- +layout: default +--- + +# Providers Disponibles + +
+ +
+ +
+ + + +**OpenAI** +```typescript +modelProvider: "openai" +// gpt-4.1, gpt-4.1-mini, gpt-5.2 +``` + + + + + +**Anthropic** +```typescript +modelProvider: "anthropic" +// claude-sonnet-4-6, claude-opus-4-6 +``` + + + + + +**Google** +```typescript +modelProvider: "google" +// gemini-2.5-flash, gemini-2.5-flash-lite +``` + + + + + +**Azure OpenAI** +```typescript +modelProvider: "azure_openai" +``` + + + +
+ +
+ + + +**Mistral** +```typescript +modelProvider: "mistral" +// mistral-large, mistral-small +``` + + + + + +**Groq** +```typescript +modelProvider: "groq" +// llama-3.3-70b, mixtral-8x7b +``` + + + + + +**Ollama** +```typescript +modelProvider: "ollama" +// llama3.2:7b, mistral:7b +``` + + + + + +**Cohere** +```typescript +modelProvider: "cohere" +// command-r, command-r-plus +``` + + + +
+ +
+ +
diff --git a/slides/pages/models/11.md b/slides/pages/models/11.md new file mode 100644 index 0000000..a196d90 --- /dev/null +++ b/slides/pages/models/11.md @@ -0,0 +1,78 @@ +--- +layout: default +--- + +# Más Providers + +
+ +
+ +
+ + + +**Fireworks** +```typescript +modelProvider: "fireworks" +``` + + + + + +**Together AI** +```typescript +modelProvider: "together_ai" +``` + + + + + +**Bedrock (AWS)** +```typescript +modelProvider: "bedrock" +``` + + + +
+ +
+ + + +**Vertex AI (Google Cloud)** +```typescript +modelProvider: "google-vertexai" +``` + + + + + +**Cloudflare** +```typescript +modelProvider: "cloudflare" +``` + + + +
+ +
+ + + +
+ +📚 Lista completa de providers + +[docs.langchain.com/integrations/chat](https://docs.langchain.com/oss/javascript/integrations/chat) + +
+ +
+ +
diff --git a/slides/pages/models/12.md b/slides/pages/models/12.md new file mode 100644 index 0000000..0498412 --- /dev/null +++ b/slides/pages/models/12.md @@ -0,0 +1,44 @@ +--- +layout: default +--- + +# Binding Tools al Modelo + +
+ + + +
+ +Puedes vincular tools directamente al modelo con `.bindTools()` + +
+ +
+ + + +```typescript +import { ChatOpenAI } from "@langchain/openai"; +import { tool } from "@langchain/core/tools"; +import { z } from "zod"; + +const weatherTool = tool( + async ({ location }) => `El tiempo en ${location} es soleado`, + { + name: "get_weather", + description: "Obtiene el tiempo de una ubicación", + schema: z.object({ location: z.string() }), + } +); + +const model = new ChatOpenAI({ model: "gpt-4.1-mini" }); +const modelWithTools = model.bindTools([weatherTool]); + +const response = await modelWithTools.invoke("¿Qué tiempo hace en Madrid?"); +console.log(response.tool_calls); // Tool que el LLM decidió usar +``` + + + +
diff --git a/slides/pages/models/13.md b/slides/pages/models/13.md new file mode 100644 index 0000000..1c36e0f --- /dev/null +++ b/slides/pages/models/13.md @@ -0,0 +1,75 @@ +--- +layout: default +--- + +# Tools Integradas en LangChain.js + +
+ + + +LangChain.js incluye numerosas **herramientas pre-construidas** listas para usar con agentes + + + +
+ +
+ + + +**Busqueda Web** +- `TavilySearchResults` - Busqueda optimizada para LLMs +- `DuckDuckGoSearch` - Busqueda gratuita +- `SerpAPI` / `SearchApi` - Google Search +- `ExaSearchResults` - Busqueda semantica + + + + + +**Conocimiento** +- `WikipediaQueryRun` - Consultas a Wikipedia +- `WolframAlphaTool` - Calculos y datos +- `GoogleScholar` - Articulos academicos + + + +
+ +
+ + + +**Productividad** +- `GmailTools` - Leer/enviar emails +- `GoogleCalendarTools` - Gestionar eventos +- `DiscordTool` - Integracion Discord + + + + + +**Desarrollo** +- `StackExchangeTool` - Q&A tecnico +- `PythonInterpreter` - Ejecutar codigo +- `WebBrowserTool` - Navegar paginas + + + +
+ +
+ + + +
+ +Ver listado completo: [docs.langchain.com/integrations/tools](https://docs.langchain.com/oss/javascript/integrations/tools) + +
+ +
+ +
+ diff --git a/slides/pages/models/14.md b/slides/pages/models/14.md new file mode 100644 index 0000000..a8ddddc --- /dev/null +++ b/slides/pages/models/14.md @@ -0,0 +1,50 @@ +--- +layout: default +--- + +# Usando Tools Integradas + +
+ + + +```typescript +import { TavilySearchResults } from "@langchain/community/tools/tavily_search"; +import { WikipediaQueryRun } from "@langchain/community/tools/wikipedia_query_run"; +import { Calculator } from "@langchain/community/tools/calculator"; + +// Crear instancias de las tools +const tavilySearch = new TavilySearchResults({ + apiKey: process.env.TAVILY_API_KEY, + maxResults: 3, +}); + +const wikipedia = new WikipediaQueryRun({ + topKResults: 2, + maxDocContentLength: 4000, +}); + +const calculator = new Calculator(); + +// Usar con un agente +const tools = [tavilySearch, wikipedia, calculator]; +``` + + + + + +
+ +**Paquete:** La mayoria de tools integradas estan en `@langchain/community` + +```bash +npm install @langchain/community +``` + +
+ +
+ +
+ diff --git a/slides/pages/models/15.md b/slides/pages/models/15.md new file mode 100644 index 0000000..7ea63f7 --- /dev/null +++ b/slides/pages/models/15.md @@ -0,0 +1,41 @@ +--- +layout: default +--- + +# Ejemplo: Agente con Tavily Search + +
+ +```typescript +import { createAgent } from "langchain"; +import { TavilySearchResults } from "@langchain/community/tools/tavily_search"; + +const searchTool = new TavilySearchResults({ apiKey: process.env.TAVILY_API_KEY, maxResults: 5 }); +const agent = createAgent({ + model: "openai:gpt-4.1-mini", + tools: [searchTool], +}); + +const result = await agent.invoke({ + messages: [{ role: "user", content: "¿Cuales son las ultimas noticias sobre IA?" }], +}); +``` + +
+ +
+ +**Tavily** - Optimizado para LLMs: extrae contenido relevante, filtra anuncios/ruido, API key gratuita limitada + +
+ +
+ +**Docs**: [langchain.com/integrations/tools](https://docs.langchain.com/oss/javascript/integrations/tools) + +
+ +
+ +
+ diff --git a/slides/pages/models/16.md b/slides/pages/models/16.md new file mode 100644 index 0000000..ca9c4ef --- /dev/null +++ b/slides/pages/models/16.md @@ -0,0 +1,43 @@ +--- +layout: default +--- + +# Diferencia: bindTools vs createAgent + +
+ +
+ + +
+

🔧 .bindTools()

+

• El LLM decide si usar la tool

+

• Devuelve tool_calls

+

• Tú ejecutas la tool manualmente

+

• Control total del flujo

+

Ideal para flujos personalizados

+
+
+ + +
+

🤖 createAgent() (LangChain v1)

+

• El agente decide y ejecuta

+

• Loop automático

+

• Ejecuta tools automáticamente

+

• Estado persistente incluido

+

Ideal para agentes autónomos

+
+
+ +
+ + + +
+💡 Usa bindTools() para control, createAgent() (LangChain v1) para simplicidad +
+ +
+ +
diff --git a/slides/pages/pending/01.md b/slides/pages/pending/01.md new file mode 100644 index 0000000..1c7b5a0 --- /dev/null +++ b/slides/pages/pending/01.md @@ -0,0 +1,14 @@ +--- +layout: cover +class: text-center +--- + +# Temas Pendientes + +Lo que nos dejamos en el tintero + +
+ + Hay mucho más por explorar en el ecosistema LangChain... + +
diff --git a/slides/pages/pending/02.md b/slides/pages/pending/02.md new file mode 100644 index 0000000..3c0ec5b --- /dev/null +++ b/slides/pages/pending/02.md @@ -0,0 +1,22 @@ +--- +layout: default +--- + +# Sistemas Multi-Agente (Subagentes) + + + +### Patrones principales en LangChain/LangGraph + +| Patrón | Descripción | +|--------|-------------| +| **Subagents** | Un agente supervisor coordina subagentes como tools | +| **Handoffs** | El comportamiento cambia dinámicamente según el estado | +| **Skills** | Prompts y conocimiento especializado cargado bajo demanda | +| **Router** | Clasifica input y lo dirige a agentes especializados | +| **Custom Workflow** | Flujos con LangGraph mezclando lógica determinista y agéntica | + +[Docs: Multi-agent](https://docs.langchain.com/oss/javascript/langchain/multi-agent/index) + + + diff --git a/slides/pages/pending/02b.md b/slides/pages/pending/02b.md new file mode 100644 index 0000000..c4cbc5d --- /dev/null +++ b/slides/pages/pending/02b.md @@ -0,0 +1,37 @@ +--- +layout: default +--- + +# Deep Agents + + + +### Librería standalone para agentes complejos + +Inspirada en Claude Code, Deep Research y Manus. + +### Características principales + +- **Planificación**: Capacidad de planificar tareas multi-paso +- **File systems**: Sistema de archivos virtual para gestión de contexto +- **Subagentes**: Spawn de agentes especializados para subtareas +- **Long-term memory**: Integración con almacenamiento persistente + +### Ejemplo básico + +```typescript +import { createDeepAgent } from "@langchain/deepagents"; + +const agent = createDeepAgent({ + model: "gpt-4.1", + filesystem: true, + planning: true, +}); + +await agent.invoke("Research and write a report about AI trends"); +``` + +[Docs: Deep Agents](https://docs.langchain.com/oss/javascript/deepagents/overview) + + + diff --git a/slides/pages/pending/03.md b/slides/pages/pending/03.md new file mode 100644 index 0000000..cfc77ce --- /dev/null +++ b/slides/pages/pending/03.md @@ -0,0 +1,32 @@ +--- +layout: default +--- + +# Long-term Memory con Semantic Search + + + +### InMemoryStore con embeddings + +```typescript +import { InMemoryStore } from "@langchain/langgraph"; +import { OpenAIEmbeddings } from "@langchain/openai"; + +const embeddings = new OpenAIEmbeddings({ model: "text-embedding-3-small" }); + +const store = new InMemoryStore({ + index: { embeddings, dims: 1536 } +}); + +// Guardar memorias +await store.put(["user_123", "memories"], "1", { text: "I love pizza" }); + +// Buscar por similitud semántica +const items = await store.search( + ["user_123", "memories"], + { query: "I'm hungry", limit: 2 } +); +``` + + + diff --git a/slides/pages/pending/04.md b/slides/pages/pending/04.md new file mode 100644 index 0000000..d3f0733 --- /dev/null +++ b/slides/pages/pending/04.md @@ -0,0 +1,30 @@ +--- +layout: default +--- + +# Integración MCP (Model Context Protocol) + + + +### MCP en LangChain.js + +Protocolo abierto que estandariza cómo las aplicaciones proporcionan tools y contexto a LLMs. + +```typescript +import { ChatOpenAI, tools } from "@langchain/openai"; + +const model = new ChatOpenAI({ model: "gpt-4.1" }); + +const response = await model.invoke("Roll 2d4+1", { + tools: [ + tools.mcp({ + serverLabel: "dmcp", + serverDescription: "A D&D MCP server for dice rolling", + serverUrl: "https://dmcp-server.deno.dev/sse", + requireApproval: "never", + }), + ], +}); +``` + + diff --git a/slides/pages/pending/05.md b/slides/pages/pending/05.md new file mode 100644 index 0000000..75611ff --- /dev/null +++ b/slides/pages/pending/05.md @@ -0,0 +1,38 @@ +--- +layout: default +--- + +# Context Engineering + + + +### Inyección de dependencias en runtime + +```typescript +const contextSchema = z.object({ + userId: z.string(), + apiKey: z.string(), +}); + +const fetchUserData = tool( + async ({ query }, runtime: ToolRuntime) => { + const { userId, apiKey } = runtime.context; + return await performQuery(query, apiKey, userId); + }, + { name: "fetch_user_data", schema: z.object({ query: z.string() }) } +); + +const agent = createAgent({ + model: "gpt-4.1", + tools: [fetchUserData], + contextSchema +}); + +// Cada usuario tiene su propio contexto +await agent.invoke(messages, { + context: { userId: "user_123", apiKey: "sk-..." } +}); +``` + + + diff --git a/slides/pages/pending/05b.md b/slides/pages/pending/05b.md new file mode 100644 index 0000000..1e1bb73 --- /dev/null +++ b/slides/pages/pending/05b.md @@ -0,0 +1,26 @@ +--- +layout: default +--- + +# Tipos de Contexto en LangGraph + + + +### Tres dimensiones de contexto + +| Tipo | Mutabilidad | Alcance | Uso | +|------|-------------|---------|-----| +| **Static (config)** | Inmutable | Single run | user ID, API keys, DB connections | +| **Dynamic (state)** | Mutable | Single run | historial, resultados intermedios | +| **Store** | Mutable | Cross-conversation | memorias persistentes, preferencias | + +### Casos de uso + +- **Autenticación por usuario**: Inyectar API keys específicas por tenant +- **Permisos dinámicos**: Ajustar herramientas disponibles según rol +- **Personalización**: Cargar preferencias del usuario desde el store +- **Multi-tenancy**: Aislar datos entre organizaciones + +[Docs: Context Engineering](https://docs.langchain.com/oss/javascript/langchain/context-engineering) + + diff --git a/slides/pages/pending/08.md b/slides/pages/pending/08.md new file mode 100644 index 0000000..584bebf --- /dev/null +++ b/slides/pages/pending/08.md @@ -0,0 +1,32 @@ +--- +layout: default +--- + +# Testing de Aplicaciones LLM + + + +### Dos enfoques complementarios + +**Unit tests**: Componentes aislados con mocks, validaciones rápidas y predecibles. + +**Integration tests**: Llamadas reales para confirmar que todo funciona junto. + +### AgentEvals + +```typescript +import { createTrajectoryMatchEvaluator } from "agentevals"; + +// Trajectory Match: compara contra trayectoria de referencia +const evaluator = createTrajectoryMatchEvaluator({ matchMode: "subset" }); + +// LLM-as-Judge: validación cualitativa con un modelo +const llmEvaluator = createLLMJudgeEvaluator({ model: "gpt-4.1" }); +``` + +### Integración con LangSmith +Configura `LANGSMITH_API_KEY` y `LANGSMITH_TRACING` para registrar experimentos automáticamente con Vitest/Jest. + +[Docs: Testing](https://docs.langchain.com/oss/javascript/langchain/test) + + diff --git a/slides/pages/pending/09.md b/slides/pages/pending/09.md new file mode 100644 index 0000000..8bdbb9b --- /dev/null +++ b/slides/pages/pending/09.md @@ -0,0 +1,27 @@ +--- +layout: default +--- + +# Recursos para continuar aprendiendo + + + +### Documentación oficial +- **LangChain.js Docs**: [docs.langchain.com](https://docs.langchain.com/oss/javascript) +- **LangGraph.js**: [docs.langchain.com/langgraph](https://docs.langchain.com/langgraph) +- **LangSmith**: [docs.smith.langchain.com](https://docs.smith.langchain.com) + +### Cursos y tutoriales +- **LangChain Academy**: Cursos oficiales gratuitos +- **DeepLearning.AI**: Cursos sobre LLMs y LangChain +- **YouTube**: Canal oficial de LangChain + +### Comunidad +- **Discord**: Comunidad activa de LangChain +- **GitHub Discussions**: Preguntas y respuestas +- **Twitter/X**: @LangChainAI para novedades + +### Chat de LangChain +- **Chat**: [chat.langchain.com](https://chat.langchain.com) - Asistente IA entrenado con la documentación oficial + + diff --git a/slides/pages/rag/01.md b/slides/pages/rag/01.md new file mode 100644 index 0000000..7e2aff5 --- /dev/null +++ b/slides/pages/rag/01.md @@ -0,0 +1,14 @@ +--- +layout: cover +class: text-center +--- + +# Módulo 7: RAG + +Retrieval Augmented Generation + +
+ + Extendiendo el conocimiento de los LLMs con tus datos + +
diff --git a/slides/pages/rag/02.md b/slides/pages/rag/02.md new file mode 100644 index 0000000..dd2ba44 --- /dev/null +++ b/slides/pages/rag/02.md @@ -0,0 +1,25 @@ +--- +layout: default +--- + +# ¿Qué es RAG? + + + +**Retrieval Augmented Generation** combina búsqueda de información con generación de texto + +- **Problema**: Los LLMs tienen conocimiento limitado + - Datos de entrenamiento hasta cierta fecha + - No conocen información específica de tu empresa + - No pueden acceder a bases de datos en tiempo real + +- **Solución RAG**: + - Buscar información relevante en tus documentos + - Proporcionar ese contexto al LLM + - Generar respuestas basadas en tus datos + +
+💡 En resumen: Dale al LLM la información que necesita para responder correctamente +
+ +
diff --git a/slides/pages/rag/03.md b/slides/pages/rag/03.md new file mode 100644 index 0000000..b6a4f7e --- /dev/null +++ b/slides/pages/rag/03.md @@ -0,0 +1,28 @@ +--- +layout: default +--- + +# Flujo típico de RAG + +
+ +```mermaid +graph LR + A[Pregunta del usuario] --> B[Convertir a embedding] + B --> C[Buscar en BD vectorial] + C --> D[Recuperar documentos relevantes] + D --> E[Construir prompt con contexto] + E --> F[LLM genera respuesta] + F --> G[Respuesta al usuario] +``` + +
+ + + +### Dos fases principales + +1. **Indexación** (una vez): Convertir documentos a embeddings y almacenarlos +2. **Recuperación** (cada consulta): Buscar documentos relevantes y generar respuesta + + diff --git a/slides/pages/rag/03b.md b/slides/pages/rag/03b.md new file mode 100644 index 0000000..0a363f2 --- /dev/null +++ b/slides/pages/rag/03b.md @@ -0,0 +1,22 @@ +--- +layout: default +--- + +# Arquitecturas RAG + + + +### 1. 2-Step RAG (Simple) +- Recuperación **siempre antes** de la generación · Flujo lineal y predecible +- Ideal para: FAQs, chatbots de documentación · ⚡ Alto control, baja flexibilidad + +### 2. Agentic RAG +- Un **agente decide cuándo y cómo** recuperar información · Razona y usa herramientas +- Ideal para: Asistentes de investigación · ⚡ Bajo control, alta flexibilidad + +### 3. Hybrid RAG +- Combina ambos con **validación intermedia** · Query + retrieval + answer validation +- Ideal para: Q&A de dominio específico · ⚡ Control y flexibilidad medios + + + diff --git a/slides/pages/rag/04.md b/slides/pages/rag/04.md new file mode 100644 index 0000000..68692e4 --- /dev/null +++ b/slides/pages/rag/04.md @@ -0,0 +1,14 @@ +--- +layout: cover +class: text-center +--- + +# Embeddings + +La base de la búsqueda semántica + +
+ + Convirtiendo texto en vectores numéricos + +
diff --git a/slides/pages/rag/05.md b/slides/pages/rag/05.md new file mode 100644 index 0000000..a424a5d --- /dev/null +++ b/slides/pages/rag/05.md @@ -0,0 +1,27 @@ +--- +layout: default +--- + +# ¿Qué son los Embeddings? + + + +**Embeddings** son representaciones numéricas de texto que capturan su significado semántico + +- Vector de números (típicamente 768, 1536, o 3072 dimensiones) +- Textos con significado similar tienen embeddings cercanos +- Permite búsqueda por similitud semántica + +### Ejemplo conceptual + +``` +"perro" → [0.2, 0.8, 0.1, ...] +"gato" → [0.3, 0.7, 0.2, ...] ← Similar a perro +"coche" → [0.9, 0.1, 0.8, ...] ← Muy diferente +``` + +
+✨ La "magia" está en que textos con significados parecidos tienen vectores parecidos +
+ +
diff --git a/slides/pages/rag/06.md b/slides/pages/rag/06.md new file mode 100644 index 0000000..ea5f102 --- /dev/null +++ b/slides/pages/rag/06.md @@ -0,0 +1,29 @@ +--- +layout: default +--- + +# Proveedores de Embeddings + +LangChain soporta múltiples proveedores de embeddings: + + + +### OpenAI +```typescript +import { OpenAIEmbeddings } from "@langchain/openai"; + +const embeddings = new OpenAIEmbeddings({ + model: "text-embedding-3-small", // o text-embedding-3-large +}); +``` + +### Google (Vertex AI / Gemini) +```typescript +import { GoogleEmbeddings } from "@langchain/google"; + +const embeddings = new GoogleEmbeddings({ + model: "text-embedding-004", +}); +``` + + diff --git a/slides/pages/rag/07.md b/slides/pages/rag/07.md new file mode 100644 index 0000000..67c3c60 --- /dev/null +++ b/slides/pages/rag/07.md @@ -0,0 +1,36 @@ +--- +layout: default +--- + +# Más proveedores de Embeddings + + + +### Mistral AI +```typescript +import { MistralAIEmbeddings } from "@langchain/mistralai"; + +const embeddings = new MistralAIEmbeddings({ + model: "mistral-embed", +}); +``` + +### Cohere +```typescript +import { CohereEmbeddings } from "@langchain/cohere"; + +const embeddings = new CohereEmbeddings({ + model: "embed-multilingual-v3.0", +}); +``` + +### Ollama (local) +```typescript +import { OllamaEmbeddings } from "@langchain/ollama"; + +const embeddings = new OllamaEmbeddings({ + model: "llama3.2", // o cualquier modelo compatible +}); +``` + + diff --git a/slides/pages/rag/08.md b/slides/pages/rag/08.md new file mode 100644 index 0000000..b6ae286 --- /dev/null +++ b/slides/pages/rag/08.md @@ -0,0 +1,27 @@ +--- +layout: default +--- + +# ¿Cómo elegir un proveedor? + + + +### Criterios a considerar + +- **Calidad**: OpenAI y Cohere son los más precisos +- **Coste**: Varía mucho entre proveedores +- **Latencia**: Los modelos locales (Ollama) son más rápidos +- **Privacidad**: Ollama permite procesamiento offline +- **Dimensiones**: Más dimensiones = más precisión pero más coste de almacenamiento +- **Idioma**: Algunos modelos funcionan mejor con español (Cohere multilingual) + +### Recomendaciones + +| Caso de uso | Proveedor recomendado | +|-------------|----------------------| +| Máxima calidad | OpenAI `text-embedding-3-large` | +| Mejor relación calidad/precio | OpenAI `text-embedding-3-small` | +| Privacidad/Local | Ollama | +| Multiidioma | Cohere `embed-multilingual-v3.0` | + + diff --git a/slides/pages/rag/09.md b/slides/pages/rag/09.md new file mode 100644 index 0000000..669276d --- /dev/null +++ b/slides/pages/rag/09.md @@ -0,0 +1,14 @@ +--- +layout: cover +class: text-center +--- + +# Bases de Datos Vectoriales + +Almacenando y buscando embeddings + +
+ + Búsqueda eficiente por similitud + +
diff --git a/slides/pages/rag/10.md b/slides/pages/rag/10.md new file mode 100644 index 0000000..467054b --- /dev/null +++ b/slides/pages/rag/10.md @@ -0,0 +1,27 @@ +--- +layout: default +--- + +# ¿Qué es una Base de Datos Vectorial? + + + +**Vector Store** o **Base de Datos Vectorial** almacena embeddings y permite búsquedas por similitud + +- Optimizadas para búsqueda por similitud coseno/euclidiana +- Indexación eficiente de vectores de alta dimensión +- Retornan los N documentos más similares a una consulta + +### Tipos + +1. **In-Memory**: Ideal para desarrollo y prototipos + - `MemoryVectorStore` + +2. **Persistentes**: Para producción + - Qdrant, Pinecone, Weaviate, Chroma, etc. + +
+⚠️ En producción, siempre usa una BD vectorial persistente +
+ +
diff --git a/slides/pages/rag/11.md b/slides/pages/rag/11.md new file mode 100644 index 0000000..6c3fdf3 --- /dev/null +++ b/slides/pages/rag/11.md @@ -0,0 +1,34 @@ +--- +layout: default +--- + +# MemoryVectorStore - Para desarrollo + + + +**MemoryVectorStore** almacena embeddings en memoria (se pierden al cerrar) + +```typescript +import { MemoryVectorStore } from "@langchain/classic/vectorstores/memory"; +import { OpenAIEmbeddings } from "@langchain/openai"; + +const vectorStore = await MemoryVectorStore.fromTexts( + [ + "LangChain es un framework para aplicaciones con LLMs", + "Los embeddings capturan el significado del texto", + "RAG combina búsqueda con generación de texto", + ], + [{ id: 1 }, { id: 2 }, { id: 3 }], // metadata + new OpenAIEmbeddings() +); + +// Buscar documentos similares +const results = await vectorStore.similaritySearch( + "¿Qué es RAG?", + 2 // número de resultados +); + +console.log(results); +``` + + diff --git a/slides/pages/rag/12.md b/slides/pages/rag/12.md new file mode 100644 index 0000000..98c806c --- /dev/null +++ b/slides/pages/rag/12.md @@ -0,0 +1,28 @@ +--- +layout: default +--- + +# Bases de Datos Vectoriales en Producción + + + +### Opciones populares + +| BD Vectorial | Características | Mejor para | +|--------------|----------------|------------| +| **Qdrant** | Open source, Rust, muy rápido | Autohosting, alta performance | +| **Pinecone** | Managed, fácil de usar | Startups, no querer gestionar infra | +| **Weaviate** | Open source, GraphQL | Búsquedas complejas | +| **Chroma** | Open source, Python-first | Prototipado rápido | +| **Milvus** | Open source, escalable | Grandes volúmenes de datos | +| **pgvector** | Extensión PostgreSQL | Ya usas PostgreSQL | + + + + + +
+💡 Recomendación: Qdrant ofrece el mejor balance entre rendimiento, facilidad de uso y coste +
+ +
diff --git a/slides/pages/rag/13.md b/slides/pages/rag/13.md new file mode 100644 index 0000000..cdb0040 --- /dev/null +++ b/slides/pages/rag/13.md @@ -0,0 +1,29 @@ +--- +layout: default +--- + +# Qdrant - Configuración + + + +### Instalación + +```bash +npm install @langchain/qdrant @qdrant/js-client-rest +``` + +### Iniciar Qdrant con Docker + +```bash +docker run -p 6333:6333 qdrant/qdrant +``` + +### O usar Qdrant Cloud + +Crear una cuenta gratuita en [qdrant.tech](https://qdrant.tech) + +- 1GB de almacenamiento gratis +- Clusters gestionados +- Sin necesidad de infraestructura + + diff --git a/slides/pages/rag/14.md b/slides/pages/rag/14.md new file mode 100644 index 0000000..1c66fe7 --- /dev/null +++ b/slides/pages/rag/14.md @@ -0,0 +1,26 @@ +--- +layout: default +--- + +# Qdrant - Crear e insertar + +```typescript +import { QdrantVectorStore } from "@langchain/qdrant"; +import { OpenAIEmbeddings } from "@langchain/openai"; + +const vectorStore = await QdrantVectorStore.fromTexts( + [ + "LangChain es un framework para aplicaciones con LLMs", + "Los embeddings capturan el significado del texto", + "RAG combina búsqueda con generación de texto", + ], + [{ source: "doc1" }, { source: "doc2" }, { source: "doc3" }], + new OpenAIEmbeddings(), + { + url: "http://localhost:6333", + collectionName: "langchain_docs", + } +); + +console.log("Documentos indexados correctamente"); +``` diff --git a/slides/pages/rag/15.md b/slides/pages/rag/15.md new file mode 100644 index 0000000..70a8ed6 --- /dev/null +++ b/slides/pages/rag/15.md @@ -0,0 +1,30 @@ +--- +layout: default +--- + +# Qdrant - Búsqueda + +```typescript +import { QdrantVectorStore } from "@langchain/qdrant"; +import { OpenAIEmbeddings } from "@langchain/openai"; + +// Conectar a colección existente +const vectorStore = await QdrantVectorStore.fromExistingCollection( + new OpenAIEmbeddings(), + { + url: "http://localhost:6333", + collectionName: "langchain_docs", + } +); + +// Búsqueda por similitud +const results = await vectorStore.similaritySearch( + "¿Qué es RAG?", + 3 // top 3 resultados +); + +results.forEach((doc, i) => { + console.log(`${i + 1}. ${doc.pageContent}`); + console.log(` Metadata:`, doc.metadata); +}); +``` diff --git a/slides/pages/rag/16.md b/slides/pages/rag/16.md new file mode 100644 index 0000000..e345585 --- /dev/null +++ b/slides/pages/rag/16.md @@ -0,0 +1,33 @@ +--- +layout: default +--- + +# Qdrant - Búsqueda con score + +```typescript +// Búsqueda con puntuación de similitud +const resultsWithScore = await vectorStore.similaritySearchWithScore( + "embeddings y vectores", + 3 +); + +resultsWithScore.forEach(([doc, score], i) => { + console.log(`${i + 1}. Score: ${score.toFixed(3)}`); + console.log(` ${doc.pageContent}`); +}); +``` + + + +### Salida ejemplo + +``` +1. Score: 0.892 + Los embeddings capturan el significado del texto +2. Score: 0.745 + RAG combina búsqueda con generación de texto +3. Score: 0.621 + LangChain es un framework para aplicaciones con LLMs +``` + + diff --git a/slides/pages/rag/16b.md b/slides/pages/rag/16b.md new file mode 100644 index 0000000..a113236 --- /dev/null +++ b/slides/pages/rag/16b.md @@ -0,0 +1,14 @@ +--- +layout: cover +class: text-center +--- + +# Document Loaders y Splitters + +Cargando y procesando documentos para RAG + +
+ + Del documento fuente al vector store + +
diff --git a/slides/pages/rag/16c.md b/slides/pages/rag/16c.md new file mode 100644 index 0000000..314b073 --- /dev/null +++ b/slides/pages/rag/16c.md @@ -0,0 +1,28 @@ +--- +layout: default +--- + +# Document Loaders + + + +**Document Loaders** transforman datos de distintas fuentes en objetos `Document` de LangChain + +```typescript +// Estructura de un Document +interface Document { + pageContent: string; // contenido del texto + metadata: Record; // información sobre la fuente +} +``` + +### Categorías principales + +| Tipo | Ejemplos | Paquete | +|------|----------|---------| +| **Archivos locales** | PDF, DOCX, CSV, JSON, EPUB, PPTX | `@langchain/community` | +| **Web** | Cheerio, Playwright, Puppeteer | `@langchain/community` | +| **Servicios** | GitHub, Notion, Confluence, Jira | `@langchain/community` | +| **Audio** | OpenAI Whisper, AssemblyAI | `@langchain/community` | + + diff --git a/slides/pages/rag/16d.md b/slides/pages/rag/16d.md new file mode 100644 index 0000000..d64b1b7 --- /dev/null +++ b/slides/pages/rag/16d.md @@ -0,0 +1,37 @@ +--- +layout: default +--- + +# PDFLoader + + + +### Instalación + +```bash +npm install @langchain/community pdf-parse +``` + +### Uso + +```typescript +import { PDFLoader } from "@langchain/community/document_loaders/fs/pdf"; + +// Carga cada página como un Document independiente +const loader = new PDFLoader("./documentos/manual.pdf"); +const docs = await loader.load(); + +console.log(`Cargadas ${docs.length} páginas`); +console.log(docs[0].pageContent.substring(0, 200)); +console.log(docs[0].metadata); +// { source: './documentos/manual.pdf', pdf: {...}, loc: { pageNumber: 1 } } +``` + +### Opciones útiles + +```typescript +// Cargar todo el PDF como un solo documento +const loader = new PDFLoader("./manual.pdf", { splitPages: false }); +``` + + diff --git a/slides/pages/rag/16e.md b/slides/pages/rag/16e.md new file mode 100644 index 0000000..f207277 --- /dev/null +++ b/slides/pages/rag/16e.md @@ -0,0 +1,39 @@ +--- +layout: default +--- + +# CheerioWebBaseLoader + + + +Carga páginas web como documentos (sin ejecutar JavaScript) + +### Instalación + +```bash +npm install @langchain/community cheerio +``` + +### Uso + +```typescript +import "cheerio"; +import { CheerioWebBaseLoader } from + "@langchain/community/document_loaders/web/cheerio"; + +const loader = new CheerioWebBaseLoader( + "https://blog.langchain.dev/what-is-an-agent/", + { selector: "article" } // selector CSS para filtrar contenido +); +const docs = await loader.load(); + +console.log(docs[0].pageContent.substring(0, 300)); +console.log(docs[0].metadata); +// { source: 'https://blog.langchain.dev/...', title: '...' } +``` + +
+⚠️ Para SPAs o páginas con JS dinámico, usa Playwright o Puppeteer +
+ +
diff --git a/slides/pages/rag/16f.md b/slides/pages/rag/16f.md new file mode 100644 index 0000000..bf3d68a --- /dev/null +++ b/slides/pages/rag/16f.md @@ -0,0 +1,33 @@ +--- +layout: default +--- + +# Otros Document Loaders útiles + + + +### CSV +```typescript +import { CSVLoader } from "@langchain/community/document_loaders/fs/csv"; +const loader = new CSVLoader("./datos/productos.csv"); +``` + +### DOCX (Microsoft Word) +```typescript +import { DocxLoader } from "@langchain/community/document_loaders/fs/docx"; +const loader = new DocxLoader("./docs/informe.docx"); +``` + +### Texto plano y Markdown +```typescript +import { TextLoader } from "@langchain/community/document_loaders/fs/text"; +const loader = new TextLoader("./docs/README.md"); +``` + +### JSON +```typescript +import { JSONLoader } from "@langchain/community/document_loaders/fs/json"; +const loader = new JSONLoader("./datos/respuestas.json"); +``` + + diff --git a/slides/pages/rag/16f2.md b/slides/pages/rag/16f2.md new file mode 100644 index 0000000..427d32e --- /dev/null +++ b/slides/pages/rag/16f2.md @@ -0,0 +1,36 @@ +--- +layout: default +--- + +# DirectoryLoader + + + +Carga todos los archivos de un directorio, mapeando extensiones a loaders + +```typescript +import { DirectoryLoader } from + "@langchain/community/document_loaders/fs/directory"; +import { PDFLoader } from + "@langchain/community/document_loaders/fs/pdf"; +import { TextLoader } from + "@langchain/community/document_loaders/fs/text"; +import { CSVLoader } from + "@langchain/community/document_loaders/fs/csv"; + +const loader = new DirectoryLoader("./documentos/", { + ".pdf": (path) => new PDFLoader(path), + ".txt": (path) => new TextLoader(path), + ".md": (path) => new TextLoader(path), + ".csv": (path) => new CSVLoader(path), +}); + +const docs = await loader.load(); +console.log(`Cargados ${docs.length} documentos`); +``` + +
+💡 Muy útil para indexar carpetas enteras de documentación de una sola vez +
+ +
diff --git a/slides/pages/rag/16g.md b/slides/pages/rag/16g.md new file mode 100644 index 0000000..5e1e704 --- /dev/null +++ b/slides/pages/rag/16g.md @@ -0,0 +1,31 @@ +--- +layout: default +--- + +# Text Splitters + + + +Los documentos largos deben dividirse en **chunks** antes de crear embeddings + +### RecursiveCharacterTextSplitter (recomendado) + +```typescript +import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters"; + +const splitter = new RecursiveCharacterTextSplitter({ + chunkSize: 1000, // máximo de caracteres por chunk + chunkOverlap: 200, // solapamiento entre chunks +}); +const chunks = await splitter.splitDocuments(docs); +``` + +Intenta mantener unidades de texto lógicas (párrafos → frases → palabras) + +### ¿Por qué dividir? + +- Los embeddings funcionan mejor con textos cortos y cohesivos +- Enviamos solo contexto relevante al LLM (ahorramos tokens) +- Mejora la precisión de la búsqueda por similitud + + diff --git a/slides/pages/rag/16h.md b/slides/pages/rag/16h.md new file mode 100644 index 0000000..e633b6c --- /dev/null +++ b/slides/pages/rag/16h.md @@ -0,0 +1,21 @@ +--- +layout: default +--- + +# Estrategias de Chunking + + + +### ¿Cómo elegir tamaño de chunk? + +| Estrategia | chunkSize | chunkOverlap | Mejor para | +|------------|-----------|--------------|------------| +| **Fino** | 200-500 | 50 | FAQ, preguntas cortas | +| **Medio** | 500-1000 | 100-200 | Documentación técnica | +| **Grueso** | 1000-2000 | 200-400 | Artículos largos, informes | + +
+💡 Experimenta con distintos tamaños — el óptimo depende del tipo de documento y las preguntas que esperas recibir +
+ +
diff --git a/slides/pages/rag/16h2.md b/slides/pages/rag/16h2.md new file mode 100644 index 0000000..466c73c --- /dev/null +++ b/slides/pages/rag/16h2.md @@ -0,0 +1,36 @@ +--- +layout: default +--- + +# Splitters por tipo de contenido + + + +`RecursiveCharacterTextSplitter.fromLanguage()` usa separadores adaptados a cada formato + +### Markdown — respeta encabezados y listas +```typescript +import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters"; + +const mdSplitter = RecursiveCharacterTextSplitter.fromLanguage("markdown", { + chunkSize: 1000, chunkOverlap: 200, +}); +``` + +### HTML — respeta estructura de etiquetas +```typescript +const htmlSplitter = RecursiveCharacterTextSplitter.fromLanguage("html", { + chunkSize: 1000, chunkOverlap: 200, +}); +``` + +### Código JS/TS — respeta funciones y clases +```typescript +const codeSplitter = RecursiveCharacterTextSplitter.fromLanguage("js", { + chunkSize: 1500, chunkOverlap: 200, +}); +``` + +Otros lenguajes soportados: `python`, `java`, `go`, `rust`, `ruby`, `php`... + + diff --git a/slides/pages/rag/16i.md b/slides/pages/rag/16i.md new file mode 100644 index 0000000..a8e4e2c --- /dev/null +++ b/slides/pages/rag/16i.md @@ -0,0 +1,31 @@ +--- +layout: default +--- + +# Extractores y parsers avanzados + + + +### Unstructured.io +Servicio de extracción que soporta **+30 tipos de archivo** (PDF, DOCX, PPTX, imágenes, HTML...) + +```typescript +import { UnstructuredLoader } from + "@langchain/community/document_loaders/fs/unstructured"; + +const loader = new UnstructuredLoader("./docs/informe.pdf", { + apiKey: process.env.UNSTRUCTURED_API_KEY, + apiUrl: "https://api.unstructuredapp.io/general/v0/general", +}); +const docs = await loader.load(); +``` + +- Extrae texto, tablas, imágenes con OCR +- API cloud o self-hosted +- Ideal para documentos complejos con layouts mixtos + +
+💡 Unstructured es especialmente útil para PDFs escaneados o con tablas complejas donde pdf-parse se queda corto +
+ +
diff --git a/slides/pages/rag/16j.md b/slides/pages/rag/16j.md new file mode 100644 index 0000000..e8b2ee6 --- /dev/null +++ b/slides/pages/rag/16j.md @@ -0,0 +1,25 @@ +--- +layout: default +--- + +# Otros extractores a conocer + + + +Cuando `pdf-parse` no es suficiente (PDFs escaneados, tablas complejas, layouts mixtos): + +| Extractor | Descripción | JS/TS | Tablas | OCR | +|-----------|-------------|-------|--------|-----| +| **Docling** (IBM) | Comprensión avanzada de layout | ❌ Solo Python | ✅ | ✅ | +| **Azure Doc Intelligence** | Servicio cloud de Microsoft | ✅ | ✅ | ✅ | +| **Amazon Textract** | Servicio cloud de AWS | ❌ Solo Python | ✅ | ✅ | +| **LlamaParse** | Parser de LlamaIndex, API cloud | ✅ via API | ✅ | ✅ | + +### Docling — mención especial + +- Proyecto open source de IBM con excelente calidad de extracción +- Integración oficial solo con LangChain Python (`langchain-docling`) +- Desde Node.js: consumir su API REST o usar como preproceso a markdown. + + + diff --git a/slides/pages/rag/17.md b/slides/pages/rag/17.md new file mode 100644 index 0000000..473f14b --- /dev/null +++ b/slides/pages/rag/17.md @@ -0,0 +1,14 @@ +--- +layout: cover +class: text-center +--- + +# Ejemplo Práctico: RAG con PDFs + +Búsqueda semántica sobre documentos + +
+ + Del PDF a respuestas inteligentes + +
diff --git a/slides/pages/rag/18.md b/slides/pages/rag/18.md new file mode 100644 index 0000000..2ebc5c6 --- /dev/null +++ b/slides/pages/rag/18.md @@ -0,0 +1,34 @@ +--- +layout: default +--- + +# Paso 1: Cargar el PDF y dividir en chunks + +```typescript +import { PDFLoader } from "@langchain/community/document_loaders/fs/pdf"; +import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters"; + +// Cargar PDF (cada página → un Document) +const loader = new PDFLoader("./docs/manual-usuario.pdf"); +const docs = await loader.load(); +console.log(`📥 ${docs.length} páginas cargadas`); + +// Dividir en chunks pequeños para mejor búsqueda +const splitter = new RecursiveCharacterTextSplitter({ + chunkSize: 1000, + chunkOverlap: 200, +}); +const chunks = await splitter.splitDocuments(docs); +console.log(`📄 Dividido en ${chunks.length} chunks`); +``` + + + +
+ +- **chunkSize**: tamaño máximo de cada trozo en caracteres +- **chunkOverlap**: solapamiento entre chunks para no perder contexto + +
+ +
diff --git a/slides/pages/rag/19.md b/slides/pages/rag/19.md new file mode 100644 index 0000000..52b080d --- /dev/null +++ b/slides/pages/rag/19.md @@ -0,0 +1,34 @@ +--- +layout: default +--- + +# Paso 2: Indexar en Qdrant + +```typescript +import { QdrantVectorStore } from "@langchain/qdrant"; +import { OpenAIEmbeddings } from "@langchain/openai"; + +const embeddings = new OpenAIEmbeddings(); + +// Crear colección e insertar chunks con sus embeddings +const vectorStore = await QdrantVectorStore.fromDocuments( + chunks, + embeddings, + { + url: "http://localhost:6333", + collectionName: "manuales", + } +); + +console.log(`✅ ${chunks.length} chunks indexados en Qdrant`); +``` + + + +
+ +`fromDocuments` hace todo: genera embeddings + crea la colección + inserta los vectores + +
+ +
diff --git a/slides/pages/rag/20.md b/slides/pages/rag/20.md new file mode 100644 index 0000000..c54ce47 --- /dev/null +++ b/slides/pages/rag/20.md @@ -0,0 +1,33 @@ +--- +layout: default +--- + +# Paso 3: Buscar documentos relevantes + +```typescript +// Conectar a colección existente +const vectorStore = await QdrantVectorStore.fromExistingCollection( + new OpenAIEmbeddings(), + { url: "http://localhost:6333", collectionName: "manuales" } +); + +// Búsqueda semántica +const pregunta = "¿Cómo resetear la contraseña?"; +const resultados = await vectorStore.similaritySearch(pregunta, 3); + +resultados.forEach((doc, i) => { + console.log(`\n--- Resultado ${i + 1} ---`); + console.log(doc.pageContent.substring(0, 200)); + console.log("Fuente:", doc.metadata.source); +}); +``` + + + +
+ +`similaritySearch(query, k)` devuelve los **k** chunks más similares semánticamente a la query + +
+ +
diff --git a/slides/pages/rag/21.md b/slides/pages/rag/21.md new file mode 100644 index 0000000..21a3bdd --- /dev/null +++ b/slides/pages/rag/21.md @@ -0,0 +1,37 @@ +--- +layout: default +--- + +# Paso 4: RAG - Búsqueda + Generación + +```typescript +import { ChatOpenAI } from "@langchain/openai"; +import { HumanMessage, SystemMessage } from "@langchain/core/messages"; + +const llm = new ChatOpenAI({ model: "gpt-4.1-mini" }); + +// Buscar contexto relevante +const pregunta = "¿Cómo resetear la contraseña?"; +const docs = await vectorStore.similaritySearch(pregunta, 3); +const contexto = docs.map(d => d.pageContent).join("\n\n"); + +// Generar respuesta con contexto +const respuesta = await llm.invoke([ + new SystemMessage( + `Responde basándote SOLO en este contexto:\n\n${contexto}` + ), + new HumanMessage(pregunta), +]); + +console.log(respuesta.content); +``` + + + +
+ +Esto es RAG: **recuperar** contexto relevante y pasárselo al LLM para que **genere** la respuesta + +
+ +
diff --git a/slides/pages/rag/22.md b/slides/pages/rag/22.md new file mode 100644 index 0000000..559e920 --- /dev/null +++ b/slides/pages/rag/22.md @@ -0,0 +1,27 @@ +--- +layout: default +--- + +# Búsquedas simples + +```typescript +import { QdrantVectorStore } from "@langchain/qdrant"; +import { OpenAIEmbeddings } from "@langchain/openai"; + +// Conectar a la colección +const vectorStore = await QdrantVectorStore.fromExistingCollection( + new OpenAIEmbeddings(), + { url: "http://localhost:6333", collectionName: "manuales" } +); + +// Buscar +const pregunta = "¿Cómo resetear la contraseña?"; +const resultados = await vectorStore.similaritySearch(pregunta, 3); + +resultados.forEach((doc, i) => { + console.log(`\n--- Resultado ${i + 1} ---`); + console.log(doc.pageContent); + console.log("Fuente:", doc.metadata.source); + console.log("Página:", doc.metadata.loc?.pageNumber); +}); +``` diff --git a/slides/pages/rag/23.md b/slides/pages/rag/23.md new file mode 100644 index 0000000..5e813c0 --- /dev/null +++ b/slides/pages/rag/23.md @@ -0,0 +1,33 @@ +--- +layout: default +--- + +# RAG completo: Búsqueda + Generación + +```typescript +import { ChatOpenAI } from "@langchain/openai"; +import { PromptTemplate } from "@langchain/core/prompts"; + +const llm = new ChatOpenAI({ model: "gpt-4.1-mini" }); + +// Buscar contexto relevante +const pregunta = "¿Cómo resetear la contraseña?"; +const docs = await vectorStore.similaritySearch(pregunta, 3); +const contexto = docs.map(d => d.pageContent).join("\n\n"); + +// Crear prompt con contexto +const prompt = PromptTemplate.fromTemplate(` +Responde la pregunta basándote SOLO en el siguiente contexto: + +Contexto: +{contexto} + +Pregunta: {pregunta} + +Respuesta:`); + +const chain = prompt.pipe(llm); +const respuesta = await chain.invoke({ contexto, pregunta }); + +console.log(respuesta.content); +``` diff --git a/slides/pages/rag/24.md b/slides/pages/rag/24.md new file mode 100644 index 0000000..57879de --- /dev/null +++ b/slides/pages/rag/24.md @@ -0,0 +1,27 @@ +--- +layout: default +--- + +# Retrievers: Abstracción de búsqueda + + + +**Retriever** es una interfaz estándar para recuperar documentos + +```typescript +// Convertir vector store en retriever +const retriever = vectorStore.asRetriever({ + k: 3, // número de documentos a recuperar +}); + +// Usar el retriever +const docs = await retriever.invoke("¿Cómo resetear la contraseña?"); +``` + +### Ventajas + +- Interfaz unificada para cualquier fuente de datos +- Fácil de intercambiar (Qdrant → Pinecone) +- Compatible con chains predefinidas de LangChain + + diff --git a/slides/pages/rag/24b.md b/slides/pages/rag/24b.md new file mode 100644 index 0000000..572e715 --- /dev/null +++ b/slides/pages/rag/24b.md @@ -0,0 +1,32 @@ +--- +layout: default +--- + +# Reranking: mejorando la relevancia + + + +La búsqueda vectorial recupera documentos **similares**, pero no siempre los más **relevantes**. Un **reranker** reordena los resultados usando un modelo especializado. + +```typescript +import { CohereRerank } from "@langchain/cohere"; + +const reranker = new CohereRerank({ + apiKey: process.env.COHERE_API_KEY, + model: "rerank-v4.0-fast", // multilingüe por defecto + topN: 3, +}); + +// .compressDocuments() → devuelve los topN Document[] listos para usar en chains +const rerankedDocs = await reranker.compressDocuments(docs, query); + +// .rerank() → devuelve TODOS los índices + scores (más control manual) +const results = await reranker.rerank(docs, query); +// [{ index: 2, relevanceScore: 0.95 }, { index: 0, relevanceScore: 0.72 }, ...] +``` + +
+✨ Patrón común: recuperar ~10 docs con vector search → reranking → top 3 al LLM +
+ +
diff --git a/slides/pages/rag/24c.md b/slides/pages/rag/24c.md new file mode 100644 index 0000000..f86b900 --- /dev/null +++ b/slides/pages/rag/24c.md @@ -0,0 +1,20 @@ +--- +layout: default +--- + +# Proveedores de Reranking + + + +| Proveedor | Paquete | Free tier | Self-hosted | Multiidioma | +|-----------|---------|-----------|-------------|-------------| +| **Cohere** | `@langchain/cohere` | Trial API key | ❌ | ✅ `rerank-v4.0-pro/fast` | +| **MixedBread AI** | `@langchain/community` | 100 queries/mes | BYOC (enterprise) | ✅ | +| **IBM watsonx** | `@langchain/community` | Lite plan | ❌ | ✅ | + + +
+💡 El reranker también ayuda a filtrar duplicados: los chunks redundantes quedan con scores muy similares y se pueden descartar +
+ +
diff --git a/slides/pages/rag/24d.md b/slides/pages/rag/24d.md new file mode 100644 index 0000000..1d6fee2 --- /dev/null +++ b/slides/pages/rag/24d.md @@ -0,0 +1,24 @@ +--- +layout: default +--- + +# Reranking self-hosted + + + +### BAAI/bge-reranker-v2-m3 + +- Modelo open source (Apache 2.0), 0.6B params, multilingüe +- Funciona en **CPU** — no necesitas GPU +- Primera descarga ~600MB, luego se cachea + +### Runtimes para servir el modelo + +| Runtime | Descripción | +|---------|-------------| +| **Infinity** | Runtime ligero y sencillo de configurar. Soporta embeddings y reranking. Ideal para empezar | +| **TEI** (Text Embeddings Inference) | Runtime de HuggingFace, más optimizado. Tiene imágenes Docker separadas para CPU y GPU | + +Ambos se despliegan con Docker y exponen una API REST compatible + + diff --git a/slides/pages/rag/24e.md b/slides/pages/rag/24e.md new file mode 100644 index 0000000..89ac772 --- /dev/null +++ b/slides/pages/rag/24e.md @@ -0,0 +1,36 @@ +--- +layout: default +--- + +# Consumir reranker self-hosted desde Node.js + + + +No hay integración oficial con LangChain.js, pero la API REST es muy sencilla: + +```typescript +async function rerank(query: string, docs: string[], topN = 3) { + const res = await fetch("http://localhost:7997/rerank", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ query, documents: docs }), + }); + const results = await res.json(); + // [{ index: 2, relevance_score: 0.95 }, { index: 0, relevance_score: 0.72 }, ...] + + return results + .sort((a, b) => b.relevance_score - a.relevance_score) + .slice(0, topN); +} + +// Uso con documentos de LangChain +const searchResults = await vectorStore.similaritySearch(query, 10); +const ranked = await rerank(query, searchResults.map(d => d.pageContent)); +const topDocs = ranked.map(r => searchResults[r.index]); +``` + +
+💡 Misma API para Infinity y TEI — cambiar de runtime no requiere cambiar código +
+ +
diff --git a/slides/pages/rag/26.md b/slides/pages/rag/26.md new file mode 100644 index 0000000..7b47b9b --- /dev/null +++ b/slides/pages/rag/26.md @@ -0,0 +1,38 @@ +--- +layout: two-cols-header +--- + +# Mejores prácticas RAG + +::left:: + + + +### Chunking +- Tamaño típico: 500-1500 caracteres +- Overlap: 10-20% del tamaño del chunk +- Experimenta con diferentes estrategias + +### Embeddings +- Usa el mismo modelo para indexar y buscar +- Considera modelos multiidioma para español +- `text-embedding-3-small` buen balance + + + +::right:: + + + +### Búsqueda +- Recupera 3-5 docs (más no siempre es mejor) +- Usa metadata para filtrar resultados +- Considera hybrid search (keyword + semántica) + +### Prompts +- Instruye al LLM a basarse SOLO en el contexto +- Pide citas/referencias cuando sea posible +- Maneja casos sin información relevante + + + diff --git a/slides/pages/rag/27.md b/slides/pages/rag/27.md new file mode 100644 index 0000000..f154e41 --- /dev/null +++ b/slides/pages/rag/27.md @@ -0,0 +1,38 @@ +--- +layout: two-cols-header +--- + +# Técnicas avanzadas de RAG + +::left:: + + + +### Parent Document Retriever +- Busca con chunks pequeños +- Retorna documentos padres completos +- Mejor contexto sin perder precisión + +### Multi-Query Retriever +- Genera múltiples variaciones de la pregunta +- Busca con todas las variaciones +- Combina resultados + + + +::right:: + + + +### Contextual Compression +- Filtra partes irrelevantes de docs +- Reduce tokens enviados al LLM +- Mejora relevancia + +### Self-Query Retriever +- Extrae filtros de metadata de la pregunta +- "Docs de 2023 sobre Python" → `{year: 2023, topic: "Python"}` + + + + diff --git a/slides/pages/rag/29.md b/slides/pages/rag/29.md new file mode 100644 index 0000000..b4bfcdf --- /dev/null +++ b/slides/pages/rag/29.md @@ -0,0 +1,24 @@ +--- +layout: default +--- + +# Recursos adicionales + + + +### Documentación oficial +- [LangChain RAG Tutorial](https://docs.langchain.com/oss/javascript/tutorials/rag) +- [Qdrant LangChain Integration](https://qdrant.tech/documentation/frameworks/langchain/) +- [OpenAI Embeddings Guide](https://platform.openai.com/docs/guides/embeddings) + +### Herramientas útiles +- [Qdrant Cloud](https://qdrant.tech) - BD vectorial gestionada +- [LangSmith](https://smith.langchain.com) - Debugging y evaluación +- [Embedding comparisons](https://huggingface.co/spaces/mteb/leaderboard) - MTEB Leaderboard + +### Alternativas a explorar +- **LlamaIndex**: Framework especializado en RAG +- **Haystack**: Pipeline flexible para búsqueda +- **txtai**: Búsqueda semántica ligera + + diff --git a/slides/pages/setup/01.md b/slides/pages/setup/01.md new file mode 100644 index 0000000..95cbe13 --- /dev/null +++ b/slides/pages/setup/01.md @@ -0,0 +1,14 @@ +--- +layout: cover +class: text-center +--- + +# Instalación y Setup + +Módulo 2: Primeros Pasos con LangChain.js + +
+ + Configurando tu entorno de desarrollo + +
diff --git a/slides/pages/setup/02.md b/slides/pages/setup/02.md new file mode 100644 index 0000000..80ddeca --- /dev/null +++ b/slides/pages/setup/02.md @@ -0,0 +1,94 @@ +--- +layout: default +--- + +

Arquitectura de Paquetes

+ +
+ +
+ +
+ + + +

Paquetes base

+ +
+ +
+

@langchain/core

+

Primitivas fundamentales: mensajes, prompts, interfaces base. Es el cimiento que usan todos los demás paquetes.

+
+ +
+

langchain

+

Metapaquete principal. Re-exporta lo útil de core y añade herramientas de alto nivel para construir agentes.

+
+ +
+

@langchain/classic

+

Funcionalidad legacy de v0.x: MemoryVectorStore, document loaders, chains antiguas. Para migración gradual.

+
+ +
+ +
+ +
+ +
+ + + +

Paquetes por proveedor

+ +
+ +
+

@langchain/openai

+

GPT-4.1, GPT-5, Azure

+
+ +
+

@langchain/anthropic

+

Claude 4, 4.5, 4.6

+
+ +
+

@langchain/google

+

Gemini 2.5

+
+ +
+

@langchain/mistralai

+

Mistral, Mixtral

+
+ +
+

@langchain/ollama

+

Modelos locales

+
+ +
+

@langchain/...

+

+30 proveedores

+
+ +
+ +
+ +
+ +
+ + + +
+ Instala solo los proveedores que necesites: npm i langchain @langchain/openai +
+ +
+ +
diff --git a/slides/pages/setup/03.md b/slides/pages/setup/03.md new file mode 100644 index 0000000..87ba5d8 --- /dev/null +++ b/slides/pages/setup/03.md @@ -0,0 +1,57 @@ +--- +layout: default +--- + +# Instalación en Node.js + +
+ + + +**Requisitos**: Node.js v20+ y tu entorno TypeScript habitual (tsx, ts-node, Vite, Next.js...) + + + + + +## 1. Paquetes base + +```bash +npm install langchain @langchain/core +``` + + + + + +## 2. Proveedores (los que vayas a usar) + +```bash +npm install @langchain/mistralai # Mistral +npm install @langchain/google # Gemini +npm install @langchain/openai # GPT-4.1, Azure +npm install @langchain/anthropic # Claude +``` + + + + + +## 3. Entorno TypeScript (si no lo tienes) + +```bash +npm install -D typescript tsx @types/node +npx tsx mi-script.ts # Para ejecutar +``` + + + + + +
+Versiones actuales (Mayo 2026): langchain v1.4.1 · @langchain/core v1.1.44 +
+ +
+ +
diff --git a/slides/pages/setup/04.md b/slides/pages/setup/04.md new file mode 100644 index 0000000..5f8329a --- /dev/null +++ b/slides/pages/setup/04.md @@ -0,0 +1,23 @@ +--- +layout: default +--- + +# ¿Qué LLM usar? + +Comparativa de proveedores principales + +
+ +| Proveedor | Modelo | Empresa | Free Tier | Precio API* | +|-----------|--------|---------|-----------|-------------| +| **OpenAI** | GPT-4.1 | USA | ❌ No | $2/$8 | +| **Google** | Gemini 2.5 Flash | USA | ✅ Sí | $0.15/$0.60 | +| **Anthropic** | Claude 4 Sonnet | USA | ✅ Límite diario | $3/$15 | +| **Mistral** | Mistral Large | Francia (UE) | ✅ Experiment | ~$2/$6 | +| **DeepSeek** | DeepSeek R1 | China | ✅ Demo gratis | $0.55/$2.19 | + +

* Precio por millón de tokens (input/output) - Mayo 2026

+ +

⚠️ Considera las implicaciones de privacidad según tu jurisdicción y tipo de datos

+ +
diff --git a/slides/pages/setup/05.md b/slides/pages/setup/05.md new file mode 100644 index 0000000..b09c124 --- /dev/null +++ b/slides/pages/setup/05.md @@ -0,0 +1,39 @@ +--- +layout: default +--- + +# URLs para obtener API Keys + +
+ +
+ +
+ +### OpenAI +[platform.openai.com](https://platform.openai.com) + +### Google Gemini +[ai.google.dev/gemini-api](https://ai.google.dev/gemini-api) + +### Anthropic (Claude) +[console.anthropic.com](https://console.anthropic.com) + +
+ +
+ +### Mistral AI +[console.mistral.ai](https://console.mistral.ai) + +### DeepSeek +[platform.deepseek.com](https://platform.deepseek.com) + +### Ollama (Local) +[ollama.com](https://ollama.com) + +
+ +
+ +
diff --git a/slides/pages/setup/06.md b/slides/pages/setup/06.md new file mode 100644 index 0000000..ab09fa7 --- /dev/null +++ b/slides/pages/setup/06.md @@ -0,0 +1,17 @@ +--- +layout: default +--- + +# Recomendaciones: Para Empezar + +
+ +
+

🎓 Para aprender y empezar

+

Google Gemini o Mistral Experiment

+

✅ Gratis

+

✅ Sin tarjeta de crédito

+

✅ Límites generosos para desarrollo

+
+ +
diff --git a/slides/pages/setup/07.md b/slides/pages/setup/07.md new file mode 100644 index 0000000..329c89b --- /dev/null +++ b/slides/pages/setup/07.md @@ -0,0 +1,27 @@ +--- +layout: default +--- + +

Recomendaciones: Producción

+ +
+ +
+

💼 Para producción

+

Claude 4 Sonnet o GPT-4.1

+

✅ Mejor precisión y razonamiento

+

⚠️ Requiere presupuesto ($3-15/M tokens)

+
+ +
+

💰 Alto volumen / Económico

+

DeepSeek R1

+

✅ 90% más barato ($0.55-$2.19/M)

+

✅ Excelente relación calidad/precio

+
+ +
+⚠️ Revisa términos de privacidad y residencia de datos según tus necesidades +
+ +
diff --git a/slides/pages/setup/08.md b/slides/pages/setup/08.md new file mode 100644 index 0000000..b597726 --- /dev/null +++ b/slides/pages/setup/08.md @@ -0,0 +1,30 @@ +--- +layout: default +--- + +

Estrategia Recomendada

+ +
+ +
+

🏠 Desarrollo: Ollama (Local)

+

Para testing, iteración rápida y privacidad

+

✅ Gratis • Sin límites • Privado

+

⚠️ Requiere 16GB RAM mínimo

+
+ +
+

☁️ Producción: APIs Cloud

+

Para usuarios finales

+

✅ Mayor calidad • Escalable • Fiable

+
+ + + +
+ 💡 Mejor de ambos mundos: Desarrolla local, despliega cloud +
+ +
+ +
diff --git a/slides/pages/setup/09.md b/slides/pages/setup/09.md new file mode 100644 index 0000000..9a93fa9 --- /dev/null +++ b/slides/pages/setup/09.md @@ -0,0 +1,50 @@ +--- +layout: default +--- + +

Ollama: Requisitos de Hardware

+ +
+ +

📊 ¿Qué necesitas según el modelo?

+ +
+ +| Tamaño | RAM | VRAM GPU | Modelos Populares | +|--------|-----|----------|-------------------| +| **3B** | 8GB | 4GB | Llama 3.2 3B, Phi-3 Mini | +| **7B** | 16GB | 8GB | Llama 3.2 7B, Mistral 7B | +| **13B** | 32GB | 16GB | Llama 3.2 13B | +| **70B** | 64GB+ | 24GB+ | Llama 3.3 70B | + +
+ + + +

💡 Recomendaciones

+ +
+ +
+

🎓 Para empezar

+

Llama 3.2 3B

+

8GB VRAM suficiente

+
+ +
+

💻 Desarrollo

+

Llama 3.2 7B

+

16GB VRAM + GPU

+
+ +
+

🏢 Producción

+

Usa APIs cloud

+

Más fiable

+
+ +
+ +
+ +
diff --git a/slides/pages/setup/10.md b/slides/pages/setup/10.md new file mode 100644 index 0000000..db9853d --- /dev/null +++ b/slides/pages/setup/10.md @@ -0,0 +1,48 @@ +--- +layout: default +--- + +# Configuración del Entorno + +
+ + + +## 🔑 Variables de Entorno (.env) + +```bash +# Crea un archivo .env en la raíz +OPENAI_API_KEY=sk-proj-... +ANTHROPIC_API_KEY=sk-ant-... +``` + + + + + +## 📦 Opción A: dotenv (tradicional) + +```bash +npm install dotenv +``` + +```typescript +import 'dotenv/config'; // Al inicio del archivo +``` + + + + + +## ⚡ Opción B: --env-file (Node.js 20+) + +```bash +# Sin instalar nada! +npx tsx --env-file=.env index.ts +``` + +✅ Recomendado: Sin dependencias adicionales + + + +
diff --git a/slides/pages/setup/11.md b/slides/pages/setup/11.md new file mode 100644 index 0000000..29e5e17 --- /dev/null +++ b/slides/pages/setup/11.md @@ -0,0 +1,52 @@ +--- +layout: default +--- + +# API Key en el Constructor + +
+ + + +## 🔧 Pasar la key directamente + +```typescript +import { ChatOpenAI } from "@langchain/openai"; + +const model = new ChatOpenAI({ + apiKey: "sk-proj-xxxxxxxxxxxxx", // Directamente aquí + model: "gpt-4.1-mini" +}); +``` + + + + + +## ⚠️ Cuándo usarlo + +
+ +
+

✅ Variables de entorno

+

Para producción, CI/CD y equipos

+
+ +
+

⚡ Constructor

+

Solo testing rápido y prototipos

+
+ +
+ +
+ + + +
+🔒 Recuerda: Añade .env a .gitignore +
+ +
+ +
diff --git a/slides/pages/setup/12.md b/slides/pages/setup/12.md new file mode 100644 index 0000000..f9aa312 --- /dev/null +++ b/slides/pages/setup/12.md @@ -0,0 +1,69 @@ +--- +layout: two-cols +layoutClass: gap-8 +--- + +# Hello World con LangChain.js + +Tu primera aplicación LLM + +```typescript {all|1-2|4-7|9-11|13-15|all} +// index.ts +import { ChatOpenAI } from "@langchain/openai"; + +// 1. Crear el modelo +const model = new ChatOpenAI({ + model: "gpt-4.1-mini", +}); + +// 2. Invocar el modelo +const response = await model.invoke( + "¿Qué es LangChain?" +); + +// 3. Ver la respuesta +console.log(response.content); +``` + +::right:: + +
+ + + +## 🏃 Ejecutar con tsx + +```bash +# Instalar tsx +npm install -D tsx + +# Ejecutar directamente +npx tsx index.ts +``` + + + + + +## 📤 Salida Esperada + +``` +LangChain es un framework para +desarrollar aplicaciones con LLMs. +Permite conectar modelos de lenguaje +con datos externos y herramientas... +``` + + + + + +## 🎯 Conceptos Clave + +- **Model**: ChatOpenAI +- **invoke()**: Llamada síncrona +- **response.content**: El texto generado + + + +
diff --git a/slides/pages/setup/13.md b/slides/pages/setup/13.md new file mode 100644 index 0000000..0989849 --- /dev/null +++ b/slides/pages/setup/13.md @@ -0,0 +1,65 @@ +--- +layout: two-cols +layoutClass: gap-8 +--- + +# Ejemplo con Google Gemini + +Alternativa gratuita a OpenAI + +```typescript {all|1-2|4-7|9-11|all} +// gemini-example.ts +import { ChatGoogle } from "@langchain/google"; + +// 1. Crear el modelo +const model = new ChatGoogle({ + model: "gemini-2.5-flash", +}); + +// 2. Invocar +const response = await model.invoke( + "¿Qué es LangChain?" +); + +console.log(response.content); +``` + +::right:: + +
+ + + +## 📦 Instalación + +```bash +npm install @langchain/google +``` + + + + + +## 🔑 API Key + +```bash +# .env +GOOGLE_API_KEY=AI... +``` + +Obtener gratis en: +[ai.google.dev/gemini-api](https://ai.google.dev/gemini-api) + + + + + +## ⚡ Ejecutar + +```bash +npx tsx --env-file=.env gemini-example.ts +``` + + + +
diff --git a/slides/pages/setup/13b.md b/slides/pages/setup/13b.md new file mode 100644 index 0000000..93b56a8 --- /dev/null +++ b/slides/pages/setup/13b.md @@ -0,0 +1,65 @@ +--- +layout: two-cols +layoutClass: gap-8 +--- + +# Ejemplo con Mistral AI + +Alternativa europea (Francia) + +```typescript {all|1-2|4-7|9-11|all} +// mistral-example.ts +import { ChatMistralAI } from "@langchain/mistralai"; + +// 1. Crear el modelo +const model = new ChatMistralAI({ + model: "mistral-large-latest", +}); + +// 2. Invocar +const response = await model.invoke( + "¿Qué es LangChain?" +); + +console.log(response.content); +``` + +::right:: + +
+ + + +## 📦 Instalación + +```bash +npm install @langchain/mistralai +``` + + + + + +## 🔑 API Key + +```bash +# .env +MISTRAL_API_KEY=... +``` + +Obtener en: +[console.mistral.ai](https://console.mistral.ai) + + + + + +## ⚡ Ejecutar + +```bash +npx tsx --env-file=.env mistral-example.ts +``` + + + +
diff --git a/slides/pages/setup/14.md b/slides/pages/setup/14.md new file mode 100644 index 0000000..188dffb --- /dev/null +++ b/slides/pages/setup/14.md @@ -0,0 +1,44 @@ +--- +layout: default +--- + +# Usar Ollama con LangChain.js + +
+ + + +## 📦 Instalación + +```bash +# 1. Descargar e instalar Ollama +# https://ollama.com/download + +# 2. Descargar un modelo +ollama pull llama3.2 + +# 3. Instalar paquete LangChain +npm install @langchain/ollama +``` + + + + + +## 💻 Código + +```typescript +import { ChatOllama } from "@langchain/ollama"; + +const model = new ChatOllama({ + model: "llama3.2", + baseUrl: "http://localhost:11434", +}); + +const response = await model.invoke("¿Qué es LangChain?"); +console.log(response.content); +``` + + + +
diff --git a/slides/pages/setup/15.md b/slides/pages/setup/15.md new file mode 100644 index 0000000..63750fe --- /dev/null +++ b/slides/pages/setup/15.md @@ -0,0 +1,42 @@ +--- +layout: default +--- + +# ¿Qué es Zod? + +
+ + + +
+ +**Zod** es una librería de validación de esquemas para TypeScript + +
+ +
+ + + +
+ +**¿Para qué lo usamos en LangChain?** + +- ✅ Definir la estructura esperada de las respuestas del LLM +- ✅ Validar que el LLM devuelve datos en el formato correcto +- ✅ Obtener autocompletado y type safety en TypeScript +- ✅ Convertir respuestas de texto a objetos JavaScript tipados + +
+ +
+ + + +```bash +npm install zod +``` + + + +
diff --git a/slides/pages/setup/16.md b/slides/pages/setup/16.md new file mode 100644 index 0000000..32c876e --- /dev/null +++ b/slides/pages/setup/16.md @@ -0,0 +1,34 @@ +--- +layout: default +--- + +# Ejemplo de Zod + +
+ +```typescript +import { z } from "zod"; + +// Definir el esquema de datos +const UserSchema = z.object({ + name: z.string(), + age: z.number().min(0).max(120), + email: z.string().email(), + roles: z.array(z.enum(["admin", "user", "guest"])), +}); + +// Inferir el tipo TypeScript automáticamente +type User = z.infer; + +// Validar datos +const result = UserSchema.parse({ + name: "Juan", + age: 30, + email: "juan@example.com", + roles: ["admin", "user"] +}); +// ✅ Si los datos son válidos, devuelve el objeto tipado +// ❌ Si no, lanza un error con detalles del problema +``` + +
diff --git a/slides/pages/structure/01.md b/slides/pages/structure/01.md new file mode 100644 index 0000000..c0b021c --- /dev/null +++ b/slides/pages/structure/01.md @@ -0,0 +1,14 @@ +--- +layout: cover +class: text-center +--- + +# Estructura del Curso + +LangChain.js: De cero a producción + +
+ + Tu hoja de ruta completa + +
diff --git a/slides/pages/structure/02.md b/slides/pages/structure/02.md new file mode 100644 index 0000000..97ccde8 --- /dev/null +++ b/slides/pages/structure/02.md @@ -0,0 +1,30 @@ +--- +layout: default +--- + +# Módulos del Curso (1/3) + +
+ + +
+

📚 Módulo 1: Introducción

+

Qué es LangChain, filosofía, historia y ecosistema

+
+
+ + +
+

⚙️ Módulo 2: Instalación y Setup

+

Configuración, APIs, proveedores de LLMs

+
+
+ + +
+

🤖 Módulo 3: Modelos

+

Chat Models, LLMs, parámetros, streaming

+
+
+ +
diff --git a/slides/pages/structure/02b.md b/slides/pages/structure/02b.md new file mode 100644 index 0000000..a0bc61c --- /dev/null +++ b/slides/pages/structure/02b.md @@ -0,0 +1,30 @@ +--- +layout: default +--- + +# Módulos del Curso (2/3) + +
+ + +
+

💬 Módulo 4: Mensajes y Prompts

+

Sistema de mensajes, templates, contexto, historial

+
+
+ + +
+

🎯 Módulo 5: Agentes

+

Tools, structured output, runtime, human-in-the-loop

+
+
+ + +
+

🔍 Módulo 6: LangSmith

+

Observabilidad, debugging, evaluación y producción

+
+
+ +
diff --git a/slides/pages/structure/02c.md b/slides/pages/structure/02c.md new file mode 100644 index 0000000..5f6624a --- /dev/null +++ b/slides/pages/structure/02c.md @@ -0,0 +1,30 @@ +--- +layout: default +--- + +# Módulos del Curso (3/3) + +
+ + +
+

📄 Módulo 7: RAG

+

Embeddings, bases de datos vectoriales, retrieval

+
+
+ + +
+

📝 Módulo 8: Temas Pendientes

+

Lo que nos dejamos en el tintero

+
+
+ + +
+

🔄 Módulo 9: Alternativas

+

Otros frameworks del ecosistema LLM

+
+
+ +
diff --git a/slides/pages/structure/03.md b/slides/pages/structure/03.md new file mode 100644 index 0000000..cb00003 --- /dev/null +++ b/slides/pages/structure/03.md @@ -0,0 +1,49 @@ +--- +layout: default +--- + +# Progresión del Aprendizaje + +
+ +
+ + +
+
🌱
+

Fundamentos

+

Módulos 1-2

+

Instalación y conceptos básicos

+
+
+ + +
+
🔨
+

Construcción

+

Módulos 3-5

+

Modelos, mensajes y agentes

+
+
+ + +
+
🚀
+

Producción

+

Módulos 6-7

+

LangSmith y RAG

+
+
+ +
+ + +
+
+ 📝 Módulo 8: Temas pendientes + 🔄 Módulo 9: Alternativas +
+
+
+ +
diff --git a/slides/pages/structure/04.md b/slides/pages/structure/04.md new file mode 100644 index 0000000..5cc6d96 --- /dev/null +++ b/slides/pages/structure/04.md @@ -0,0 +1,39 @@ +--- +layout: default +--- + +# Al Final del Curso + +
+ +

Serás capaz de:

+ +
+ + +
Crear aplicaciones LLM completas
+
+ + +
Implementar agentes autónomos
+
+ + +
Gestionar conversaciones con contexto
+
+ + +
Construir sistemas RAG con tus datos
+
+ + +
Monitorizar y debuggear con LangSmith
+
+ + +
Desplegar en producción con confianza
+
+ +
+ +
diff --git a/slides/public/EITB.svg b/slides/public/EITB.svg new file mode 100644 index 0000000..5bb31be --- /dev/null +++ b/slides/public/EITB.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/slides/public/cover.png b/slides/public/cover.png new file mode 100644 index 0000000..9f31826 Binary files /dev/null and b/slides/public/cover.png differ diff --git a/slides/public/nykk.png b/slides/public/nykk.png new file mode 100644 index 0000000..9b5c126 Binary files /dev/null and b/slides/public/nykk.png differ diff --git a/slides/slides.md b/slides/slides.md new file mode 100644 index 0000000..b486ada --- /dev/null +++ b/slides/slides.md @@ -0,0 +1,914 @@ +--- +# try also 'default' to start simple +theme: seriph + +# random image from a curated Unsplash collection by Anthony +# like them? see https://unsplash.com/collections/94734566/slidev +background: /cover.png +# some information about your slides (markdown enabled) +title: LangChain.js - De cero a producción +favicon: https://docs.langchain.com/favicon.ico +info: | + ## Langchain.js: De cero a producción + + Curso completo sobre LangChain.js para desarrolladores + + ### Temario: + - Introducción a LangChain y su ecosistema + - Estructura y arquitectura del framework + - Configuración y setup del entorno + - Modelos de lenguaje (LLMs, Chat Models) + - Gestión de mensajes y prompts + - Agentes y herramientas (Tools) + - LangSmith para debugging y monitorización + - **RAG (Retrieval Augmented Generation)** + - Embeddings y proveedores + - Bases de datos vectoriales (Qdrant, Pinecone, etc.) + - Document Loaders y Splitters (PDF, Web, Markdown) + - Extractores avanzados (Unstructured, Docling, etc.) + - Ejemplo práctico con PDFs + - Temas avanzados y pendientes + - Alternativas al ecosistema LangChain + +# apply UnoCSS classes to the current slide +class: text-center +# https://sli.dev/features/drawing +drawings: + persist: false +# slide transition: https://sli.dev/guide/animations.html#slide-transitions +transition: slide-left +# enable MDC Syntax: https://sli.dev/features/mdc +mdc: true +# duration of the presentation +duration: 45min + + +--- + +## Agentes y RAG para desarrolladores web +### eitb · Mayo/Junio 2026 + +
+ + +
+ + +--- +src: ./pages/introduction/01.md +hide: false +--- + +--- +src: ./pages/introduction/02.md +hide: false +--- + +--- +src: ./pages/introduction/03.md +hide: false +--- + +--- +src: ./pages/introduction/04.md +hide: false +--- + +--- +src: ./pages/introduction/05.md +hide: false +--- + +--- +src: ./pages/introduction/06.md +hide: false +--- + +--- +src: ./pages/introduction/07.md +hide: false +--- + +--- +src: ./pages/introduction/08.md +hide: false +--- + +--- +src: ./pages/introduction/09.md +hide: false +--- + +--- +src: ./pages/introduction/10.md +hide: false +--- + +--- +src: ./pages/introduction/11.md +hide: false +--- + +--- +src: ./pages/structure/01.md +hide: false +--- + +--- +src: ./pages/structure/02.md +hide: false +--- + +--- +src: ./pages/structure/02b.md +hide: false +--- + +--- +src: ./pages/structure/02c.md +hide: false +--- + +--- +src: ./pages/structure/03.md +hide: false +--- + +--- +src: ./pages/structure/04.md +hide: false +--- + + +--- +src: ./pages/setup/01.md +hide: false +--- + +--- +src: ./pages/setup/02.md +hide: false +--- + +--- +src: ./pages/setup/03.md +hide: false +--- + +--- +src: ./pages/setup/04.md +hide: false +--- + +--- +src: ./pages/setup/05.md +hide: false +--- + +--- +src: ./pages/setup/06.md +hide: false +--- + +--- +src: ./pages/setup/07.md +hide: false +--- + +--- +src: ./pages/setup/08.md +hide: false +--- + +--- +src: ./pages/setup/09.md +hide: false +--- + +--- +src: ./pages/setup/10.md +hide: false +--- + +--- +src: ./pages/setup/11.md +hide: false +--- + +--- +src: ./pages/setup/12.md +hide: false +--- + +--- +src: ./pages/setup/13.md +hide: false +--- + +--- +src: ./pages/setup/13b.md +hide: false +--- + +--- +src: ./pages/setup/14.md +hide: false +--- + +--- +src: ./pages/setup/15.md +hide: false +--- + +--- +src: ./pages/setup/16.md +hide: false +--- + +--- +src: ./pages/setup/17.md +hide: false +--- + + +--- +src: ./pages/models/01.md +hide: false +--- + +--- +src: ./pages/models/02.md +hide: false +--- + +--- +src: ./pages/models/02b.md +hide: false +--- + +--- +src: ./pages/models/02c.md +hide: false +--- + +--- +src: ./pages/models/03.md +hide: false +--- + +--- +src: ./pages/models/03b.md +hide: false +--- + +--- +src: ./pages/models/04.md +hide: false +--- + +--- +src: ./pages/models/05.md +hide: false +--- + +--- +src: ./pages/models/06.md +hide: false +--- + +--- +src: ./pages/models/07.md +hide: false +--- + +--- +src: ./pages/models/08.md +hide: false +--- + +--- +src: ./pages/models/08b.md +hide: false +--- + +--- +src: ./pages/models/09.md +hide: false +--- + +--- +src: ./pages/models/10.md +hide: false +--- + +--- +src: ./pages/models/11.md +hide: false +--- + +--- +src: ./pages/models/12.md +hide: false +--- + +--- +src: ./pages/models/13.md +hide: false +--- + +--- +src: ./pages/models/14.md +hide: false +--- + +--- +src: ./pages/models/15.md +hide: false +--- + +--- +src: ./pages/models/16.md +hide: false +--- + + +--- +src: ./pages/messages/01.md +hide: false +--- + +--- +src: ./pages/messages/02.md +hide: false +--- + +--- +src: ./pages/messages/02b.md +hide: false +--- + +--- +src: ./pages/messages/02c.md +hide: false +--- + +--- +src: ./pages/messages/02d.md +hide: false +--- + +--- +src: ./pages/messages/03.md +hide: false +--- + +--- +src: ./pages/messages/04.md +hide: false +--- + +--- +src: ./pages/messages/05.md +hide: true +--- + +--- +src: ./pages/messages/06.md +hide: false +--- + +--- +src: ./pages/messages/07.md +hide: false +--- + +--- +src: ./pages/messages/08.md +hide: false +--- + +--- +src: ./pages/messages/09.md +hide: false +--- + +--- +src: ./pages/messages/10.md +hide: true +--- + +--- +src: ./pages/messages/11.md +hide: true +--- + + +--- +src: ./pages/agents/01.md +hide: false +--- + +--- +src: ./pages/agents/02.md +hide: false +--- + +--- +src: ./pages/agents/03.md +hide: false +--- + +--- +src: ./pages/agents/04.md +hide: false +--- + +--- +src: ./pages/agents/05.md +hide: false +--- + +--- +src: ./pages/agents/06.md +hide: false +--- + +--- +src: ./pages/agents/07.md +hide: false +--- + +--- +src: ./pages/agents/08.md +hide: false +--- + +--- +src: ./pages/agents/09.md +hide: false +--- + +--- +src: ./pages/agents/10.md +hide: false +--- + +--- +src: ./pages/agents/11.md +hide: false +--- + +--- +src: ./pages/agents/12.md +hide: false +--- + +--- +src: ./pages/agents/12b.md +hide: false +--- + +--- +src: ./pages/agents/13.md +hide: false +--- + +--- +src: ./pages/agents/14.md +hide: false +--- + +--- +src: ./pages/agents/15.md +hide: false +--- + +--- +src: ./pages/agents/16.md +hide: false +--- + +--- +src: ./pages/agents/17.md +hide: false +--- + +--- +src: ./pages/agents/18.md +hide: false +--- + +--- +src: ./pages/agents/19.md +hide: false +--- + +--- +src: ./pages/agents/20.md +hide: false +--- + +--- +src: ./pages/agents/21.md +hide: false +--- + +--- +src: ./pages/agents/22.md +hide: false +--- + +--- +src: ./pages/agents/23.md +hide: false +--- + + +--- +src: ./pages/langsmith/01.md +hide: false +--- + +--- +src: ./pages/langsmith/02.md +hide: false +--- + +--- +src: ./pages/langsmith/03.md +hide: false +--- + +--- +src: ./pages/langsmith/04.md +hide: false +--- + +--- +src: ./pages/langsmith/05.md +hide: false +--- + +--- +src: ./pages/langsmith/06.md +hide: false +--- + +--- +src: ./pages/langsmith/07.md +hide: false +--- + + +--- +src: ./pages/rag/01.md +hide: false +--- + +--- +src: ./pages/rag/02.md +hide: false +--- + +--- +src: ./pages/rag/03.md +hide: false +--- + +--- +src: ./pages/rag/03b.md +hide: false +--- + +--- +src: ./pages/rag/04.md +hide: false +--- + +--- +src: ./pages/rag/05.md +hide: false +--- + +--- +src: ./pages/rag/06.md +hide: false +--- + +--- +src: ./pages/rag/07.md +hide: false +--- + +--- +src: ./pages/rag/08.md +hide: false +--- + +--- +src: ./pages/rag/09.md +hide: false +--- + +--- +src: ./pages/rag/10.md +hide: false +--- + +--- +src: ./pages/rag/11.md +hide: false +--- + +--- +src: ./pages/rag/12.md +hide: false +--- + +--- +src: ./pages/rag/13.md +hide: false +--- + +--- +src: ./pages/rag/14.md +hide: false +--- + +--- +src: ./pages/rag/15.md +hide: false +--- + +--- +src: ./pages/rag/16.md +hide: false +--- + +--- +src: ./pages/rag/16b.md +hide: false +--- + +--- +src: ./pages/rag/16c.md +hide: false +--- + +--- +src: ./pages/rag/16d.md +hide: false +--- + +--- +src: ./pages/rag/16e.md +hide: false +--- + +--- +src: ./pages/rag/16f.md +hide: false +--- + +--- +src: ./pages/rag/16f2.md +hide: false +--- + +--- +src: ./pages/rag/16g.md +hide: false +--- + +--- +src: ./pages/rag/16h.md +hide: false +--- + +--- +src: ./pages/rag/16h2.md +hide: false +--- + +--- +src: ./pages/rag/16i.md +hide: false +--- + +--- +src: ./pages/rag/16j.md +hide: false +--- + +--- +src: ./pages/rag/17.md +hide: false +--- + +--- +src: ./pages/rag/18.md +hide: false +--- + +--- +src: ./pages/rag/19.md +hide: false +--- + +--- +src: ./pages/rag/20.md +hide: false +--- + +--- +src: ./pages/rag/21.md +hide: false +--- + +--- +src: ./pages/rag/22.md +hide: true +--- + +--- +src: ./pages/rag/23.md +hide: true +--- + +--- +src: ./pages/rag/24.md +hide: true +--- + +--- +src: ./pages/rag/24b.md +hide: false +--- + +--- +src: ./pages/rag/24c.md +hide: false +--- + +--- +src: ./pages/rag/24d.md +hide: false +--- + +--- +src: ./pages/rag/24e.md +hide: false +--- + +--- +src: ./pages/rag/26.md +hide: false +--- + +--- +src: ./pages/rag/27.md +hide: true +--- + +--- +src: ./pages/rag/29.md +hide: false +--- + + +--- +src: ./pages/pending/01.md +hide: false +--- + +--- +src: ./pages/pending/02.md +hide: false +--- + +--- +src: ./pages/pending/02b.md +hide: false +--- + +--- +src: ./pages/pending/03.md +hide: false +--- + +--- +src: ./pages/pending/04.md +hide: false +--- + +--- +src: ./pages/pending/05.md +hide: false +--- + +--- +src: ./pages/pending/05b.md +hide: false +--- + +--- +src: ./pages/pending/06.md +hide: false +--- + +--- +src: ./pages/pending/06b.md +hide: false +--- + +--- +src: ./pages/pending/06c.md +hide: false +--- + +--- +src: ./pages/pending/07.md +hide: false +--- + +--- +src: ./pages/pending/08.md +hide: false +--- + +--- +src: ./pages/pending/09.md +hide: false +--- + + +--- +src: ./pages/alternatives/01.md +hide: false +--- + +--- +src: ./pages/alternatives/02.md +hide: false +--- + +--- +src: ./pages/alternatives/03.md +hide: false +--- + +--- +src: ./pages/alternatives/04.md +hide: false +--- + +--- +src: ./pages/alternatives/05.md +hide: false +--- + +--- +src: ./pages/alternatives/06.md +hide: false +--- + +--- +src: ./pages/alternatives/07.md +hide: false +--- + +--- +src: ./pages/alternatives/08.md +hide: false +--- + +--- +src: ./pages/alternatives/09.md +hide: false +--- + +--- +src: ./pages/alternatives/10.md +hide: false +--- + +--- +src: ./pages/alternatives/11.md +hide: false +--- + +--- +src: ./pages/alternatives/12.md +hide: false +--- + +--- +src: ./pages/alternatives/13.md +hide: false +--- + + +--- +src: ./pages/ending.md +hide: false +---