From 74386d26a2e948879680681acead90d6b9bca178 Mon Sep 17 00:00:00 2001 From: Joao Carreira Date: Mon, 31 Aug 2026 23:24:27 +0100 Subject: [PATCH] feat: first commit --- .dockerignore | 9 + .env.example | 1 + .gitignore | 5 + CRR_EVENT_SHARING_TOOL_PLAN.md | 1479 +++++++++++ Dockerfile | 19 + README.md | 115 + compose.yaml | 10 + index.html | 13 + nginx.conf | 35 + package-lock.json | 3550 ++++++++++++++++++++++++++ package.json | 31 + public/favicon.svg | 1 + public/images/events/festas-2026.png | Bin 0 -> 113310 bytes public/images/events/festas-2026.svg | 17 + scripts/validate-events.ts | 27 + src/App.vue | 10 + src/components/AppHeader.vue | 11 + src/components/EventHeader.vue | 23 + src/components/EventPoster.vue | 9 + src/components/FacebookPost.vue | 27 + src/components/SharePanel.vue | 82 + src/config/site.ts | 7 + src/content/events/festas-2026.md | 48 + src/data/event-parser.ts | 32 + src/data/event-schema.ts | 66 + src/data/events.ts | 29 + src/layouts/DefaultLayout.vue | 15 + src/main.ts | 13 + src/pages/EventSharePage.vue | 48 + src/pages/HomePage.vue | 36 + src/pages/NotFoundPage.vue | 18 + src/pages/SharePage.vue | 21 + src/router/routes.ts | 18 + src/styles/global.css | 72 + src/types/event.ts | 33 + src/vite-env.d.ts | 1 + tests/event-content.test.ts | 31 + tsconfig.json | 24 + vite.config.ts | 19 + 39 files changed, 6005 insertions(+) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 CRR_EVENT_SHARING_TOOL_PLAN.md create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 compose.yaml create mode 100644 index.html create mode 100644 nginx.conf create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/favicon.svg create mode 100644 public/images/events/festas-2026.png create mode 100644 public/images/events/festas-2026.svg create mode 100644 scripts/validate-events.ts create mode 100644 src/App.vue create mode 100644 src/components/AppHeader.vue create mode 100644 src/components/EventHeader.vue create mode 100644 src/components/EventPoster.vue create mode 100644 src/components/FacebookPost.vue create mode 100644 src/components/SharePanel.vue create mode 100644 src/config/site.ts create mode 100644 src/content/events/festas-2026.md create mode 100644 src/data/event-parser.ts create mode 100644 src/data/event-schema.ts create mode 100644 src/data/events.ts create mode 100644 src/layouts/DefaultLayout.vue create mode 100644 src/main.ts create mode 100644 src/pages/EventSharePage.vue create mode 100644 src/pages/HomePage.vue create mode 100644 src/pages/NotFoundPage.vue create mode 100644 src/pages/SharePage.vue create mode 100644 src/router/routes.ts create mode 100644 src/styles/global.css create mode 100644 src/types/event.ts create mode 100644 src/vite-env.d.ts create mode 100644 tests/event-content.test.ts create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..449a835 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +node_modules +dist +.git +.gitignore +.vscode +.idea +.DS_Store +npm-debug.log +CRR_EVENT_SHARING_TOOL_PLAN.md diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..64fc8df --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +VITE_SITE_URL=https://crr.jcarreira.pt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4274b51 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules/ +dist/ +.env +*.log +.DS_Store diff --git a/CRR_EVENT_SHARING_TOOL_PLAN.md b/CRR_EVENT_SHARING_TOOL_PLAN.md new file mode 100644 index 0000000..9de8146 --- /dev/null +++ b/CRR_EVENT_SHARING_TOOL_PLAN.md @@ -0,0 +1,1479 @@ +# CRR Event Sharing Tool — Vue 3 Implementation Plan + +## 1. Goal + +Build a small self-hosted web application for the **Centro Recreativo da Rebolaria** that makes it easy for people to promote CRR events on Facebook. + +The primary workflow is: + +```text +User receives: +https://crrebolaria.pt/partilhar + + ↓ + +Opens current event sharing page + + ↓ + +Sees event poster + suggested sharing text + + ↓ + +Clicks "Copiar texto" + + ↓ + +Clicks "Abrir publicação no Facebook" + + ↓ + +Facebook opens the original CRR post + + ↓ + +User selects: +Partilhar → Escrever publicação + + ↓ + +Pastes suggested text and publishes +``` + +Important constraint: do **not** attempt to automatically create a Facebook share containing the original Facebook post through `sharer.php`. Facebook does not reliably allow another Facebook post to be attached that way. + +The tool should facilitate the process rather than automate the final Facebook action. + +--- + +## 2. Technology + +Use: + +- Vue 3 +- TypeScript +- Vite +- Vue Router +- `vite-ssg` for static generation +- `@unhead/vue` for per-page metadata +- Markdown + YAML frontmatter +- `gray-matter` for frontmatter parsing +- `markdown-it` for Markdown rendering +- `zod` for event schema validation +- Vanilla browser APIs for clipboard/native sharing +- Docker +- nginx + +Do **not** add: + +- database +- CMS +- Node.js production server +- Nuxt +- backend API +- user accounts +- Facebook Graph API + +The production result must be a fully static site. + +--- + +## 3. Why use `vite-ssg` + +Do not deploy the project as a plain Vue SPA only. + +A normal SPA would make per-event Open Graph metadata unreliable because WhatsApp, Facebook, Messenger and other crawlers may not execute client-side JavaScript. + +Use `vite-ssg` so routes such as: + +```text +/partilhar/festas-2026 +/partilhar/penalty-cup-2026 +``` + +are pre-rendered into real HTML files at build time. + +Each event page must therefore contain its own server-visible: + +```html + +<meta name="description"> +<meta property="og:title"> +<meta property="og:description"> +<meta property="og:image"> +<meta property="og:url"> +``` + +This is an important architectural requirement. + +--- + +## 4. Repository structure + +Target structure: + +```text +crr-share/ +├── src/ +│ ├── components/ +│ │ ├── AppHeader.vue +│ │ ├── EventHeader.vue +│ │ ├── EventPoster.vue +│ │ ├── SharePanel.vue +│ │ ├── ShareText.vue +│ │ ├── ShareInstructions.vue +│ │ └── FacebookPost.vue +│ │ +│ ├── content/ +│ │ └── events/ +│ │ ├── festas-2026.md +│ │ └── penalty-cup-2026.md +│ │ +│ ├── data/ +│ │ └── events.ts +│ │ +│ ├── layouts/ +│ │ └── DefaultLayout.vue +│ │ +│ ├── pages/ +│ │ ├── HomePage.vue +│ │ ├── SharePage.vue +│ │ └── EventSharePage.vue +│ │ +│ ├── router/ +│ │ └── routes.ts +│ │ +│ ├── styles/ +│ │ └── global.css +│ │ +│ ├── types/ +│ │ └── event.ts +│ │ +│ ├── App.vue +│ └── main.ts +│ +├── public/ +│ ├── images/ +│ │ └── events/ +│ ├── favicon.svg +│ └── logo.* +│ +├── scripts/ +│ └── validate-events.ts +│ +├── Dockerfile +├── compose.yaml +├── nginx.conf +├── .dockerignore +├── vite.config.ts +├── tsconfig.json +├── package.json +├── package-lock.json +└── README.md +``` + +The agent may simplify component splitting where appropriate, but should preserve the overall separation between: + +- content loading +- event schema/model +- routing +- sharing UI +- Facebook embed +- layout/styling + +--- + +## 5. Event content model + +Each event must be represented by **one Markdown file**. + +Example: + +```markdown +--- +title: "Festas do 66.º Aniversário" +slug: "festas-2026" + +active: true + +date: + start: 2026-09-05 + end: 2026-09-07 + +location: + name: "Centro Recreativo da Rebolaria" + locality: "Rebolaria, Batalha" + +poster: "/images/events/festas-2026.jpg" + +facebook: + url: "https://www.facebook.com/story.php?story_fbid=122327514458210862&id=61556325866671" + embed: true + +share: + text: | + Já está tudo preparado para mais um grande fim de semana na Rebolaria! 🎉🥳 + + Dias 5, 6 e 7 de setembro, apareçam e venham festejar connosco! ❤️💚 + + Vejam o programa completo aqui em baixo 👇 +--- + +## Sobre o evento + +O Centro Recreativo da Rebolaria celebra o seu **66.º aniversário** +com três dias de música, tradição, convívio e animação. + +## Programa + +### Sábado, 5 de setembro + +- 15h00 — Torneio de Penalty Cup +- 19h00 — Abertura do restaurante +- 22h00 — Pedro Nobre +- De seguida — DJ Pinona + +### Domingo, 6 de setembro + +- 12h00 — Abertura do arraial +- 16h30 — Rancho Folclórico Rosas do Lena +- 19h00 — Abertura do restaurante +- 22h00 — Red Kiss + +### Segunda-feira, 7 de setembro + +- 18h30 — Jogos tradicionais +- 19h00 — Abertura do restaurante +- 22h00 — Fábio Tacho — Teclista e Vocalista +``` + +The Markdown body is for human-readable event information. + +The YAML frontmatter is for structured application data. + +--- + +## 6. Event TypeScript model + +Define an explicit event model. + +For example: + +```ts +export interface EventDate { + start: string; + end: string; +} + +export interface EventLocation { + name: string; + locality?: string; +} + +export interface FacebookConfig { + url: string; + embed: boolean; +} + +export interface ShareConfig { + text: string; +} + +export interface EventData { + title: string; + slug: string; + active: boolean; + date: EventDate; + location: EventLocation; + poster: string; + facebook: FacebookConfig; + share: ShareConfig; + html: string; +} +``` + +Do not rely on untyped frontmatter objects throughout the app. + +--- + +## 7. Event loading + +Implement one central event loader in: + +```text +src/data/events.ts +``` + +Use Vite: + +```ts +import.meta.glob(...) +``` + +to load event Markdown files at build time. + +A reasonable approach is: + +```ts +const files = import.meta.glob( + "../content/events/*.md", + { + query: "?raw", + import: "default", + eager: true, + }, +); +``` + +Then for each file: + +1. parse YAML frontmatter with `gray-matter` +2. validate metadata with `zod` +3. render Markdown body with `markdown-it` +4. return a typed `EventData` + +Expose helpers such as: + +```ts +getEvents() +getEventBySlug(slug) +getActiveEvent() +``` + +Sort events deterministically, preferably by start date descending. + +--- + +## 8. Schema validation + +Use `zod`. + +Required fields: + +```text +title +slug +active +date.start +date.end +location.name +poster +facebook.url +facebook.embed +share.text +``` + +Validate: + +- slug format +- valid dates +- end date >= start date +- valid Facebook URL +- non-empty share text +- poster path starts with `/` +- exactly zero or one active events +- no duplicated slugs + +Example schema concept: + +```ts +const EventSchema = z.object({ + title: z.string().min(1), + slug: z.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/), + active: z.boolean(), + date: z.object({ + start: z.string(), + end: z.string(), + }), + location: z.object({ + name: z.string().min(1), + locality: z.string().optional(), + }), + poster: z.string().startsWith("/"), + facebook: z.object({ + url: z.string().url(), + embed: z.boolean(), + }), + share: z.object({ + text: z.string().min(1), + }), +}); +``` + +If event data is invalid, the production build must fail with a clear error. + +--- + +## 9. Explicit validation script + +In addition to runtime/build-time loading validation, create: + +```text +scripts/validate-events.ts +``` + +and expose: + +```json +{ + "scripts": { + "validate": "tsx scripts/validate-events.ts", + "build": "npm run validate && vite-ssg build" + } +} +``` + +The validator should catch: + +- invalid YAML +- invalid field types +- duplicate slugs +- multiple `active: true` events +- invalid Facebook URLs +- invalid date ranges +- missing poster files where practical + +The agent may adapt the exact command to the chosen `vite-ssg` setup. + +--- + +## 10. Routes + +Use Vue Router-compatible route definitions. + +Required routes: + +```text +/ +/partilhar +/partilhar/:slug +``` + +### `/` + +Simple CRR landing page. + +### `/partilhar` + +Resolve the current event using: + +```ts +getActiveEvent() +``` + +Prefer rendering the active event directly rather than introducing an unnecessary HTTP redirect. + +If there is no active event, render a friendly empty state. + +### `/partilhar/:slug` + +Render the requested historical/current event. + +Unknown slugs should produce a sensible 404/not-found state. + +--- + +## 11. Static generation + +Configure `vite-ssg` so every event route is generated at build time. + +The generated route list should include: + +```text +/ +/partilhar +/partilhar/festas-2026 +/partilhar/penalty-cup-2026 +... +``` + +Do not hard-code event routes manually. + +Generate them from the Markdown content. + +The agent must verify the final `dist` directory contains pre-rendered content for every event. + +--- + +## 12. Event page UX + +Mobile is the primary target. + +Page order: + +```text +CRR branding + +Event title +Event date/location + +Poster + +------------------------ + +AJUDA-NOS A DIVULGAR + +Suggested sharing text + +[ Copiar texto ] + +✓ Texto copiado + +[ Abrir publicação no Facebook ] + +------------------------ + +COMO PARTILHAR + +1. Copia o texto. +2. Abre a publicação. +3. Escolhe Partilhar → Escrever publicação. +4. Cola o texto e publica. + +------------------------ + +Original Facebook publication +(optional embed) + +------------------------ + +About the event + +Programme +``` + +The two primary calls to action are: + +```text +Copiar texto +Abrir publicação no Facebook +``` + +Both must be large, touch-friendly controls. + +--- + +## 13. `SharePanel.vue` + +Create a reusable component receiving something like: + +```ts +interface Props { + shareText: string; + facebookUrl: string; +} +``` + +Responsibilities: + +- show the suggested text +- copy text to clipboard +- show success/failure state +- expose Facebook button +- display sharing instructions + +Do not let Facebook-specific embed logic live in this component. + +--- + +## 14. Copy functionality + +Primary implementation: + +```ts +await navigator.clipboard.writeText(props.shareText); +``` + +After successful copy: + +```text +✓ Copiado +``` + +Restore to: + +```text +Copiar texto +``` + +after around 2–3 seconds. + +If Clipboard API is unavailable or fails: + +1. select the textarea +2. try a compatible fallback +3. if copying still fails, show: + +```text +Não foi possível copiar automaticamente. Selecione o texto acima e copie-o manualmente. +``` + +The share text must remain visible/selectable even without JavaScript. + +--- + +## 15. Facebook button + +The button must use the original CRR Facebook post URL directly. + +Conceptually: + +```vue +<a + :href="facebookUrl" + target="_blank" + rel="noopener noreferrer" + class="primary-facebook-button" +> + Abrir publicação no Facebook +</a> +``` + +Do not construct: + +```text +facebook.com/sharer/sharer.php?u=<facebook post> +``` + +The objective is to open the actual original CRR publication. + +--- + +## 16. Facebook embed + +Create: + +```text +src/components/FacebookPost.vue +``` + +Props: + +```ts +interface Props { + url: string; +} +``` + +Only render it when: + +```yaml +facebook: + embed: true +``` + +Use the official Facebook post plugin/embed mechanism. + +Keep this isolated so it can be changed without affecting event data or sharing logic. + +The entire page must remain usable if the embed: + +- does not load +- is blocked by browser privacy controls +- is blocked by cookies/tracking settings +- is unavailable because the Facebook post is not public +- changes behavior in the future + +The embed is optional enhancement only. + +Always keep a visible normal link to the original Facebook publication. + +--- + +## 17. Multiple suggested texts — future compatibility + +V1 can use: + +```yaml +share: + text: | + ... +``` + +But design the data and component structure so the project can later support: + +```yaml +share: + texts: + - | + Já está tudo preparado... + + - | + As Festas da Rebolaria estão quase aí... + + - | + Dias 5, 6 e 7... +``` + +Future UI could provide: + +```text +Texto 1 +Texto 2 +Texto 3 +``` + +The implementation should not require a major rewrite to support this. + +--- + +## 18. Optional native sharing + +As a secondary enhancement, support: + +```ts +navigator.share(...) +``` + +when available. + +This should share the CRR landing/event page itself. + +Example: + +```text +[ Partilhar esta página ] +``` + +This is not a replacement for the Facebook workflow and should be visually secondary. + +Do not make it a V1 blocker. + +--- + +## 19. Design + +Design principles: + +- Portuguese UI +- mobile-first +- maximum content width around 600–700px +- large readable typography +- large buttons +- minimal visual clutter +- accessible contrast +- poster prominently displayed +- CRR identity/colours where available +- no dashboard/admin appearance + +Prefer normal CSS rather than introducing a large UI framework unless justified. + +Use semantic HTML inside Vue templates: + +```text +header +main +section +article +footer +button +a +``` + +Avoid icon-only actions. + +--- + +## 20. Metadata and social previews + +Use `@unhead/vue` so each pre-rendered event page gets unique metadata. + +For every event generate: + +```html +<title>... + + + + + + + + + + + + + + + +``` + +This is important for: + +- WhatsApp +- Messenger +- Facebook +- SMS link previews +- email clients + +The poster should be the main Open Graph image. + +Open Graph image URLs must be absolute. + +--- + +## 21. Site URL + +Use one configuration source for the public URL. + +Recommended: + +```text +VITE_SITE_URL=https://crrebolaria.pt +``` + +or a build-time config module. + +Provide: + +```text +.env.example +``` + +with: + +```env +VITE_SITE_URL=https://crrebolaria.pt +``` + +Do not scatter the production hostname through components. + +Use this value to build: + +- canonical URLs +- Open Graph URLs +- absolute poster URLs + +--- + +## 22. Homepage + +Keep `/` deliberately small. + +Possible content: + +```text +Centro Recreativo da Rebolaria + +Eventos em destaque + +Festas do 66.º Aniversário + +[ Ver evento ] +[ Ajudar a divulgar ] +``` + +Do not turn this project into a complete institutional website. + +The main feature is `/partilhar`. + +--- + +## 23. `/partilhar` behavior + +`/partilhar` is the permanent public sharing address. + +If exactly one event is active: + +- show the active event sharing page + +If no event is active: + +```text +Neste momento não existe nenhuma campanha de divulgação ativa. +``` + +Optionally show recent events beneath it. + +If more than one event is active: + +- fail validation/build +- do not choose one arbitrarily + +--- + +## 24. Historical event URLs + +An old URL such as: + +```text +/partilhar/festas-2026 +``` + +must continue to work even after another campaign becomes active. + +This makes URLs safe to distribute permanently. + +Do not remove old content just because `active` becomes false. + +--- + +## 25. Docker + +Use a multi-stage production build. + +Example: + +```dockerfile +FROM node:22-alpine AS build + +WORKDIR /app + +COPY package*.json ./ +RUN npm ci + +COPY . . + +RUN npm run build + + +FROM nginx:alpine + +COPY nginx.conf /etc/nginx/conf.d/default.conf +COPY --from=build /app/dist /usr/share/nginx/html + +EXPOSE 80 +``` + +The final production image should contain nginx and static files only. + +No Node.js process should run in production. + +--- + +## 26. nginx + +Serve the pre-rendered static site. + +Important distinction from a normal SPA: + +Because routes are pre-generated, nginx should prefer actual generated files/directories. + +A configuration can still include a safe fallback where useful, but do not rely on `index.html` SPA fallback as the mechanism for all routes. + +Configure: + +- static file serving +- compression +- sensible security headers +- long-lived cache for hashed Vite assets +- short/no aggressive cache for HTML + +Example asset rule: + +```nginx +location /assets/ { + expires 1y; + add_header Cache-Control "public, immutable"; +} +``` + +Adapt to the actual generated Vite asset directory. + +--- + +## 27. Docker Compose + +Provide: + +```yaml +services: + crr-share: + build: . + container_name: crr-share + restart: unless-stopped + + ports: + - "8080:80" +``` + +Assume an external reverse proxy handles: + +- domain +- TLS +- certificates + +Do not put certificate management inside this container. + +--- + +## 28. `.dockerignore` + +Include at least: + +```text +node_modules +dist +.git +.gitignore +.vscode +.idea +.DS_Store +npm-debug.log +``` + +Do not exclude source Markdown or poster files. + +--- + +## 29. Development workflow + +Install: + +```bash +npm install +``` + +Development server: + +```bash +npm run dev +``` + +Validate: + +```bash +npm run validate +``` + +Build: + +```bash +npm run build +``` + +Docker production test: + +```bash +docker compose build +docker compose up -d +``` + +Open: + +```text +http://localhost:8080 +``` + +--- + +## 30. Event creation workflow + +Adding a future event should require only content changes. + +Process: + +```text +1. Copy an existing Markdown event. +2. Change title. +3. Change slug. +4. Change dates. +5. Change share text. +6. Change Facebook URL. +7. Add poster to public/images/events/. +8. Set new event active: true. +9. Set previous event active: false. +10. Rebuild Docker. +``` + +Example: + +```bash +cp src/content/events/festas-2026.md \ + src/content/events/festas-2027.md +``` + +Then: + +```bash +docker compose up -d --build +``` + +No Vue source file should need modification for a normal new event. + +--- + +## 31. README + +Create a complete but concise `README.md`. + +It must explain: + +- what the application does +- why Facebook sharing cannot be fully automated +- local development +- Docker deployment +- reverse proxy expectations +- how to create an event +- how to change the active event +- how to add a poster +- how to obtain/use the Facebook post URL +- how social previews work +- how to rebuild after content changes + +Include a copy/paste Markdown event template. + +--- + +## 32. Error handling + +### Invalid Markdown/YAML + +Fail validation/build clearly. + +### Missing poster + +Prefer validation failure where practical. + +### Invalid Facebook URL + +Fail validation/build. + +### Facebook post unavailable + +The rest of the page must continue working. + +### Clipboard unavailable + +Keep text selectable and provide manual-copy guidance. + +### JavaScript disabled + +Event information and Facebook link remain available. + +### No active event + +Render a friendly message. + +### Unknown event slug + +Render a proper not-found view. + +--- + +## 33. Accessibility + +Minimum requirements: + +- meaningful `alt` text for poster +- keyboard navigation +- visible focus styles +- touch targets around at least 44px +- good text/background contrast +- no information conveyed by colour alone +- readable mobile typography +- descriptive button/link labels +- accessible status message after copying + +For copy status, use an `aria-live` region. + +--- + +## 34. Privacy + +Do not add by default: + +- Google Analytics +- Meta Pixel +- tracking cookies +- external analytics + +The Facebook embed itself may load Facebook resources. + +That is another reason the embed should be optional. + +The sharing page must work without the embed. + +--- + +## 35. Testing + +At minimum add automated checks for: + +- event parser +- schema validation +- duplicate slug rejection +- multiple active event rejection +- active event resolution +- Markdown rendering +- route generation +- correct Facebook URL +- exact share text +- absolute Open Graph image URL + +A light browser test is recommended. + +Example with Playwright: + +```text +Open /partilhar +verify active event title +click Copy +verify copied confirmation +verify Facebook link href +open /partilhar/festas-2026 +verify event renders +``` + +Test one mobile viewport. + +Do not introduce excessive test infrastructure. + +--- + +## 36. Initial event + +Create: + +```text +src/content/events/festas-2026.md +``` + +Metadata: + +```yaml +title: "Festas do 66.º Aniversário" +slug: "festas-2026" +active: true + +date: + start: 2026-09-05 + end: 2026-09-07 + +location: + name: "Centro Recreativo da Rebolaria" + locality: "Rebolaria, Batalha" + +facebook: + url: "https://www.facebook.com/story.php?story_fbid=122327514458210862&id=61556325866671" + embed: true +``` + +Suggested text: + +```text +Já está tudo preparado para mais um grande fim de semana na Rebolaria! 🎉🥳 + +Dias 5, 6 e 7 de setembro, apareçam e venham festejar connosco! ❤️💚 + +Vejam o programa completo aqui em baixo 👇 +``` + +Programme: + +```text +Sábado, 5 de setembro +15h00 — Torneio de Penalty Cup +19h00 — Abertura do restaurante +22h00 — Pedro Nobre +De seguida — DJ Pinona + +Domingo, 6 de setembro +12h00 — Abertura do arraial +16h30 — Rancho Folclórico Rosas do Lena +19h00 — Abertura do restaurante +22h00 — Red Kiss + +Segunda-feira, 7 de setembro +18h30 — Jogos tradicionais +19h00 — Abertura do restaurante +22h00 — Fábio Tacho — Teclista e Vocalista +``` + +--- + +## 37. Suggested dependencies + +A reasonable initial dependency set: + +```json +{ + "dependencies": { + "@unhead/vue": "...", + "gray-matter": "...", + "markdown-it": "...", + "vue": "...", + "vue-router": "...", + "vite-ssg": "...", + "zod": "..." + }, + "devDependencies": { + "@vitejs/plugin-vue": "...", + "tsx": "...", + "typescript": "...", + "vite": "...", + "vue-tsc": "..." + } +} +``` + +Use current stable versions compatible with each other. + +Do not blindly use the literal placeholders above. + +Commit `package-lock.json`. + +--- + +## 38. Recommended npm scripts + +Aim for something similar to: + +```json +{ + "scripts": { + "dev": "vite", + "validate": "tsx scripts/validate-events.ts", + "typecheck": "vue-tsc --noEmit", + "build": "npm run validate && npm run typecheck && vite-ssg build", + "preview": "vite preview" + } +} +``` + +Adjust the exact SSG command to the installed `vite-ssg` version. + +The essential requirement is: + +```text +validate ++ +typecheck ++ +static build +``` + +before Docker completes. + +--- + +## 39. Implementation phases + +Implement in this order: + +```text +Phase 1 +Bootstrap Vue 3 + Vite + TypeScript. + +Phase 2 +Install/configure Vue Router and vite-ssg. + +Phase 3 +Implement event Markdown loader. + +Phase 4 +Implement Zod schema and validation. + +Phase 5 +Generate static routes from event Markdown. + +Phase 6 +Implement /partilhar active-event behavior. + +Phase 7 +Build EventSharePage. + +Phase 8 +Build SharePanel and clipboard interaction. + +Phase 9 +Add Facebook link. + +Phase 10 +Add optional Facebook embed. + +Phase 11 +Render Markdown event details/programme. + +Phase 12 +Implement per-event Open Graph metadata. + +Phase 13 +Add responsive CRR styling. + +Phase 14 +Add Dockerfile + nginx + Compose. + +Phase 15 +Add tests. + +Phase 16 +Write README. + +Phase 17 +Validate output inside Docker. +``` + +--- + +## 40. Definition of done + +The implementation is complete when: + +```bash +docker compose up -d --build +``` + +starts a production container successfully. + +Opening: + +```text +http://localhost:8080/partilhar +``` + +must display the active CRR event. + +The following must work: + +1. The event poster is visible. +2. The suggested share text is visible. +3. **Copiar texto** copies the exact configured text. +4. Copy success is visibly confirmed. +5. **Abrir publicação no Facebook** opens the configured original Facebook post. +6. `/partilhar/festas-2026` works directly. +7. The event's Open Graph metadata is present in the generated HTML. +8. The social preview uses the event poster. +9. Adding another event only requires a Markdown file and poster. +10. Changing the active campaign requires no Vue source code changes. +11. The final production container runs nginx only. +12. The site remains functional when the Facebook embed fails. + +--- + +## 41. Core architectural requirements + +### Markdown is the source of truth + +Event data lives in: + +```text +src/content/events/*.md +``` + +Facebook is an external publishing/sharing destination only. + +### Static generation is required + +Use Vue 3, but pre-render event routes. + +Do not reduce the implementation to a client-only SPA because social-link previews are a core feature. + +### Docker production is static + +Production should be: + +```text +Vue/Vite/SSG build + ↓ +static dist/ + ↓ +nginx +``` + +No application server is required. + +### Content changes should not require code changes + +A normal future event must be creatable entirely from Markdown/YAML + poster image. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..491ce66 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +FROM node:22-alpine AS build + +WORKDIR /app + +ARG VITE_SITE_URL=https://crr.jcarreira.pt +ENV VITE_SITE_URL=$VITE_SITE_URL + +COPY package.json package-lock.json ./ +RUN npm ci + +COPY . . +RUN npm run build + +FROM nginx:1.29-alpine + +COPY nginx.conf /etc/nginx/conf.d/default.conf +COPY --from=build /app/dist /usr/share/nginx/html + +EXPOSE 80 diff --git a/README.md b/README.md new file mode 100644 index 0000000..f732d05 --- /dev/null +++ b/README.md @@ -0,0 +1,115 @@ +# CRR Event Sharing Tool + +Static website for the Centro Recreativo da Rebolaria (CRR) that helps people promote an event on Facebook. The permanent public address is `/partilhar`; it displays the one event marked as active. + +The tool intentionally does not try to publish to Facebook or use `sharer.php`. Facebook does not reliably permit a shared post to contain another Facebook post automatically. Instead, visitors copy the suggested text, open the original CRR post, choose **Partilhar** then **Escrever publicação**, paste the text, and publish. + +## Requirements + +- Node.js 22 or newer for local development +- Docker Engine with the Compose plugin for production deployment on Ubuntu + +## Local development + +```bash +cp .env.example .env +npm install +npm run dev +``` + +The development server prints its local URL. Run all checks with: + +```bash +npm run validate +npm run typecheck +npm test +npm run build +``` + +`npm run build` validates Markdown and poster files, type-checks Vue/TypeScript, then generates static HTML. Event routes are pre-rendered in `dist/partilhar//index.html`; this makes per-event social metadata available to Facebook, WhatsApp, Messenger, and other crawlers that do not execute JavaScript. + +## Ubuntu deployment + +On the Ubuntu server, copy or clone this repository. Set the real public URL before building, then start the container: + +```bash +cp .env.example .env +docker compose up -d --build +``` + +The included Compose service listens on `8080` and restarts unless stopped. It is intentionally HTTP-only. Put an existing reverse proxy in front of it to terminate TLS and forward the public domain to `http://127.0.0.1:8080` (or to the server's Docker address as appropriate). + +The build reads `VITE_SITE_URL` from `.env`; it defaults to `https://crr.jcarreira.pt`. Set it to the exact HTTPS public URL, without a trailing slash. It is used for canonical, Open Graph, and Twitter image URLs, so rebuild after changing it: + +```bash +docker compose up -d --build +``` + +### Pointing `crr.jcarreira.pt` to your reverse proxy + +Create a DNS `A` record for `crr.jcarreira.pt` that points to your existing reverse proxy's public IPv4 address. If you use IPv6, add an equivalent `AAAA` record. + +In that reverse proxy, create a TLS-enabled host for `crr.jcarreira.pt` and forward it using HTTP to the Ubuntu machine running this project on port `8080`: + +```text +https://crr.jcarreira.pt -> http://UBUNTU_SERVER_PRIVATE_IP:8080 +``` + +Preserve the `Host` header and pass the usual `X-Forwarded-For` and `X-Forwarded-Proto` headers. TLS certificates, HTTP-to-HTTPS redirects, and public ports `80`/`443` remain entirely managed by your reverse proxy. + +The Ubuntu firewall should permit `8080/tcp` only from the reverse proxy's IP address. Do not expose port `8080` publicly. + +The final image contains nginx and static files only. Node.js is used only in the multi-stage build. + +## Managing events + +Each event is one Markdown file in `src/content/events/`. Its YAML frontmatter is the source of structured data and its Markdown body is the event information shown on the page. + +To add an event: + +1. Copy `src/content/events/festas-2026.md` to a new kebab-case filename. +2. Update the title, slug, dates, poster path, Facebook post URL, and suggested text. +3. Add the poster to `public/images/events/`. +4. Set exactly one event to `active: true`; mark the previous event `false`. +5. Run `npm run validate` and rebuild the Docker image. + +Historical event files stay published at `/partilhar/` after they stop being active. No Vue source changes are required for a normal new event. + +The `facebook.url` must be the original public CRR Facebook post URL. In Facebook, open the post and use its timestamp or menu option to copy the post link. The optional embed may be blocked by privacy controls or Facebook; the ordinary link and the rest of the page always remain usable. + +### Event template + +```markdown +--- +title: "Nome do evento" +slug: "nome-do-evento-2027" +active: false +date: + start: "2027-09-05" + end: "2027-09-07" +location: + name: "Centro Recreativo da Rebolaria" + locality: "Rebolaria, Batalha" +poster: "/images/events/nome-do-evento-2027.jpg" +facebook: + url: "https://www.facebook.com/..." + embed: true +share: + text: | + Texto sugerido para quem vai partilhar. +--- + +## Sobre o evento + +Descrição visível do evento. + +## Programa + +- 19h00 - Abertura +``` + +Dates must use quoted `YYYY-MM-DD` values. Validation rejects malformed content, duplicate slugs, more than one active event, invalid date ranges or Facebook URLs, and missing posters. + +## Caching and previews + +nginx caches Vite's hashed assets for one year and serves HTML without aggressive caching, so a rebuilt event page is immediately suitable for a reverse proxy to fetch. Social platforms may retain their own preview cache after deployment; use their respective sharing/debugging tools when a preview needs refreshing. diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..f78b077 --- /dev/null +++ b/compose.yaml @@ -0,0 +1,10 @@ +services: + crr-share: + build: + context: . + args: + VITE_SITE_URL: ${VITE_SITE_URL:-https://crr.jcarreira.pt} + container_name: crr-share + restart: unless-stopped + ports: + - "8080:80" diff --git a/index.html b/index.html new file mode 100644 index 0000000..5e9bf0b --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + + + +
+ + + diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..98a2582 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,35 @@ +server { + listen 80; + listen [::]:80; + server_name _; + + root /usr/share/nginx/html; + index index.html; + charset utf-8; + + gzip on; + gzip_vary on; + gzip_proxied any; + gzip_types text/plain text/css application/javascript application/json application/xml image/svg+xml; + + add_header X-Content-Type-Options "nosniff" always; + add_header Referrer-Policy "strict-origin-when-cross-origin" always; + add_header X-Frame-Options "SAMEORIGIN" always; + + location /assets/ { + try_files $uri =404; + expires 1y; + add_header Cache-Control "public, immutable"; + } + + location / { + try_files $uri $uri/ =404; + add_header Cache-Control "no-cache"; + } + + error_page 404 /404/; + location = /404/ { + internal; + add_header Cache-Control "no-cache"; + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..2acaabe --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3550 @@ +{ + "name": "crr-event-sharing-tool", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "crr-event-sharing-tool", + "version": "1.0.0", + "dependencies": { + "@unhead/vue": "^2.1.2", + "gray-matter": "^4.0.3", + "markdown-it": "^15.0.1", + "vite-ssg": "^28.3.0", + "vue": "^3.5.42", + "vue-router": "^5.3.0", + "zod": "^4.5.4" + }, + "devDependencies": { + "@types/node": "^25.0.3", + "@vitejs/plugin-vue": "^6.0.8", + "tsx": "^4.23.13", + "typescript": "^5.9.3", + "vite": "^8.2.2", + "vitest": "^4.1.11", + "vue-tsc": "^3.3.11" + } + }, + "node_modules/@acemir/cssom": { + "version": "0.9.31", + "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.31.tgz", + "integrity": "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==", + "license": "MIT" + }, + "node_modules/@asamuzakjp/css-color": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", + "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==", + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@csstools/css-calc": "^3.2.0", + "@csstools/css-color-parser": "^4.1.0", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.8.1.tgz", + "integrity": "sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==", + "license": "MIT", + "dependencies": { + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.1.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.2.6" + } + }, + "node_modules/@asamuzakjp/generational-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz", + "integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "license": "MIT" + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.1.tgz", + "integrity": "sha512-gLNsunvwf3mCi5u5o46/Z/JcJMnhbHSaZ69rkgPzNM3J4s8hWwpPUQB6/tt0EDFyCiWzxANlx+2LJwpYj4zS1w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/css-calc": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.3.0.tgz", + "integrity": "sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.2.2.tgz", + "integrity": "sha512-3QKjR/vxyjcSXBLgb6lP0S3MGdvwbmqSsvLPbYdVORqPDc8FX1HAJ0Spk38bxaRXgvENTA47tlhhbb5Z2e8hEg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^6.1.1", + "@csstools/css-calc": "^3.3.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.11.tgz", + "integrity": "sha512-+a7SqvwQfLl8OAp/C/B8PhfV2UjRUIeCRvcZQEXjhTkM2nTxg8r9nbB7mdxkEGT67VbR6pREsAIlsx65N2KR6Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz", + "integrity": "sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } + }, + "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/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "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/@oxc-project/types": { + "version": "0.147.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.147.0.tgz", + "integrity": "sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.6.tgz", + "integrity": "sha512-b+jTcARdTiFLI6jB4a5XjTm0RWd6KcRfQj/I2356fxUZemiho9zQLxo0RtCuMDAyKcLo6cEltkgbQp6d1+sjjQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.6.tgz", + "integrity": "sha512-lkWU8ZJaRk9q3CIEY1Tc7vIFALp3Xw5NfGJo2hQg5oIqNgxWi1zI+IiDEK3r70BF5Dzol1tcXsnzsRc8NLhG+Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.6.tgz", + "integrity": "sha512-dgR56NYnvAszm7Ob1B2/Vn0e8bUQYZH2UjVaMMtMVOCKFSfjhfLmuA/9+O+F+ajUdG6B/bSssrKW6JJYASa8jA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.6.tgz", + "integrity": "sha512-vpVxFvUCFioJqug7OTvqptkc4yb8UX0AwfDmJpaR/0sWz+BUmqSVAf7c8JkUgnN8YLspb4a/N6NhTyMAmdyQ7Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.6.tgz", + "integrity": "sha512-h1wG6Y6K3JlRswxsI64qQJqBAy4vrLuHgRbc8CZMGSWTOFRY6ghMApM1NKzB2I0n5xV1fjkE18SuVl2QpLeNpA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.6.tgz", + "integrity": "sha512-tbCiqub0q2MVWJKgF5PoAlNWCtQydiOYSLIkd8sByqK/6MMYLJRcSXSYodqYtd0O+Fw7QaVmKKlS4oL94YRZ0w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.6.tgz", + "integrity": "sha512-oxK9+baEBPhZG5HB4URY+uU04zJWeZlH6Tb9rB5DK4DF9XR1uXNLXt5Q5ZsugTKayNCNLhkcwz/ye74hRI98dg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.6.tgz", + "integrity": "sha512-muWCk27FVBEZtv0MsK8gnfSmgczA8KQ0uRVJbTABKhkRfQc38aUrcb7fhi3BNiyseFmgcRsoMfQsSNJ+DbZdSw==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.6.tgz", + "integrity": "sha512-eWDoSfU7Co2qj3vgB3Dt4lj1mG6CoWbcJQkRMP3XJplyCMtuaq3LHvPFjS9QIPvMGWVadJC04Xiy0IdcVPtnwQ==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.6.tgz", + "integrity": "sha512-2bWNjRSIayvupRKxXUY2tWG9fYdoUlTqWywHRvE8Eq3GvuQ+f2HeIkve697fIt+IQs/PV8yFsdWuhp1aJ1PdnA==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.6.tgz", + "integrity": "sha512-KekI0gS0wLxe1UBSQSjenBVwou/JkcQPDzBPICGZjxUv9k3RteHDPBQaiOicZUFKRIH2wKEimGwVpnJsbPzu7w==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.6.tgz", + "integrity": "sha512-TvtPnfVr+HtyGiDmPK4VWmlNm7QhNNAcK5Q9A7aOXsI8545yCyaoMaicXrFZ72JzeYjaUVk7yT243zT0jzjFKQ==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.6.tgz", + "integrity": "sha512-iOo0VEay2XFhaCcH0sps5XIimkSuOnNaZrf6+ZkoSOQBJPKNU48RkmJv0/lSpipexu5P+ouFgafe5IGr/DiQfg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.6.tgz", + "integrity": "sha512-y5NTmmasMS455JlOCO4ZM9krIchv3Mvm1crL1iUPGOPgEzSkves9n0SdC5Sjz6+qWDFhd8/JpfWMH8NSWNHe+A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.6.tgz", + "integrity": "sha512-np8iZSLfXlAD4kWhiyq/u0Yt8oZDtRQ8lGhQaCXo2rl37KNjeU0GjJuwr4P3oeZ++ROfofsKNBqR5LTO8aXyWQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.9.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.5.tgz", + "integrity": "sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": ">=7.24.0 <7.24.7" + } + }, + "node_modules/@unhead/vue": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-2.1.17.tgz", + "integrity": "sha512-pnC8x9HLV3qQXdvWfylUEU25uhfCAy3ly9nmpQz84j9py818DRfU8jOsQ5wjdWtxyU1vX/fW2udfm4jtxUK8Bg==", + "license": "MIT", + "dependencies": { + "hookable": "^6.0.1", + "unhead": "2.1.17" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "vue": ">=3.5.18" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.8.tgz", + "integrity": "sha512-0ZjgOg7oO6farnNGup7yvoM/YXZV84OZxHAwtflItNa/6zzQyVb5LNxyea3FEKEX2XlagIKzrlH7wwxkKgtiew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.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.2.25" + } + }, + "node_modules/@vitest/expect": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.11.tgz", + "integrity": "sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.11", + "@vitest/utils": "4.1.11", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.11.tgz", + "integrity": "sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.11", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.11.tgz", + "integrity": "sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.11.tgz", + "integrity": "sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.11", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.11.tgz", + "integrity": "sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.11", + "@vitest/utils": "4.1.11", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.11.tgz", + "integrity": "sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.11.tgz", + "integrity": "sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.11", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue-macros/common": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-3.1.4.tgz", + "integrity": "sha512-/5Fv+6DgIcM9ajY05ZmKBv+LMX1M9A0X+IUwDRVdt67ciw8OV9bvG2r34p3RiEadlsQybjhKPRKNXDC8Bp23cw==", + "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/compiler-core": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.42.tgz", + "integrity": "sha512-2Ye1ilMtKXxl8qZUrQ5j0CdgenFp/HFQmta6rfRyfEsTG69L6Wk+tWuNoHYHMx9E8tF2Slvdg1FuwDvAXdy1LQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@vue/shared": "3.5.42", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-core/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/@vue/compiler-core/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/@vue/compiler-dom": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.42.tgz", + "integrity": "sha512-qbhQZEFmycr+ni/qyuccS4sucNN7VAbDfbkvNxWOX2VfgFm90MNs3/UhRNKoPMEIVn0F8gdlYjLPvqxHwHeQOA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.42", + "@vue/shared": "3.5.42" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.42.tgz", + "integrity": "sha512-fkCAFB4okcAANGMThboWnScp/gzWjU0ZSkVnjTIiplmMDq2uq0tIB3j+xVu4rhv5rvOgBySCysudmbMd6xRRqw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@vue/compiler-core": "3.5.42", + "@vue/compiler-dom": "3.5.42", + "@vue/compiler-ssr": "3.5.42", + "@vue/shared": "3.5.42", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.19", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-sfc/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/@vue/compiler-sfc/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/@vue/compiler-ssr": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.42.tgz", + "integrity": "sha512-xmLk3wLkbizPAiLyomjgFFosf2ys9b5Ghb+oh/k2tnvipNz8OFrQOiTcWCzyK7MpBp9KkyGtfvgfLUivbmuGYA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.42", + "@vue/shared": "3.5.42" + } + }, + "node_modules/@vue/devtools-api": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.2.1.tgz", + "integrity": "sha512-6u4vXBlIBAC1wMplIZgpyPn7uh/s4Bf6F5bMzvLv+EdJ0aHs/+4B7Ygv864EStQSjRbsRzTko/kUG1A1IejQ3A==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^8.2.1" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.2.1.tgz", + "integrity": "sha512-FIGIuq3AWReEpbAHY/cRGeHDfI0qOb8OCQ3YjbEAX04uaxIDbGc9rhkbVcG7rnfHPXE3RsU5KrWOu9V/okd8AQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^8.2.1", + "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.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.2.1.tgz", + "integrity": "sha512-Fkac7lUdGReh6pVOi3AYPRGe82LQqRmAfThW7RRligOAP0ZA/Z1z9XLHDM9dv34pV2HRc79DK8uKPeG2fLnA/g==", + "license": "MIT" + }, + "node_modules/@vue/language-core": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.3.11.tgz", + "integrity": "sha512-QJmpliwAVpC/OxubIByPAhNzsQPRc8/gxlN2qnVzVfIMjMDz/9RnXRFoetjz5yEgXVXyp4LqhXq3V53PjmNzFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.2.1", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.4" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.42.tgz", + "integrity": "sha512-TzNNfKpb7hDxbQltwAut8VDQA5YP+BuRlxntHUuRjyKwlMvmAPbs3unhCvieijifY6vFfVBwsS7wG/C7uq+bEQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.42" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.42.tgz", + "integrity": "sha512-9uACtuHs7vJGkm5Bp3xu4xRDLFTIYy5DgxpToVjqGIAhAEKwQfsaLvKINhM6nFVp6bZPRFGdDqd1g52MqKsotA==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.42", + "@vue/shared": "3.5.42" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.42.tgz", + "integrity": "sha512-rsCmhiWLaRxGltLwhlCWyYkFn7WAbKRh0q17eZ1A6Dq6eqc2ACQ61IIryxz0LrsvCzHSilLA9JHovVwM8CNE2g==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.42", + "@vue/runtime-core": "3.5.42", + "@vue/shared": "3.5.42", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.42.tgz", + "integrity": "sha512-2++5dUyYS4gvo7xQXSECUDhB7TS0aOl5SeVfC5qSq1Jgfhjvegw1zqhwTIR3imZ+QYPJQw9gfcFvXGAjGZ7ajQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.42", + "@vue/runtime-dom": "3.5.42", + "@vue/shared": "3.5.42" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.42.tgz", + "integrity": "sha512-2rPxex1jQf4jvl9MOHl6YaXCPcrNqz/FstMOEh3QWY+/OME9nQTvl9WYeCwhW7AFjaR0SnngZGlp/wkR6rkI6g==", + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/alien-signals": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.2.1.tgz", + "integrity": "sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansis": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.3.1.tgz", + "integrity": "sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "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/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "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.9.0", + "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.9.0.tgz", + "integrity": "sha512-IJdzo2vLiElBxKzwS36VsCue/62d6IdWjnPB2v3nuPKeWGynp6FF/CYoLa5i/3jXH/z97ZDdsXz6abpgM6w07A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@babel/types": "^7.29.0", + "ast-kit": "^2.2.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "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/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "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/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "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/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "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/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/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/cssstyle": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.2.0.tgz", + "integrity": "sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==", + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^5.0.1", + "@csstools/css-syntax-patches-for-csstree": "^1.0.28", + "css-tree": "^3.1.0", + "lru-cache": "^11.2.6" + }, + "engines": { + "node": ">=20" + } + }, + "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/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "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/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", + "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "devOptional": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "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": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/exsolve": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.1.1.tgz", + "integrity": "sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g==", + "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/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/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/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/hookable": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.1.tgz", + "integrity": "sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==", + "license": "MIT" + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-minifier-terser/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/html5parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html5parser/-/html5parser-2.0.2.tgz", + "integrity": "sha512-L0y+IdTVxHsovmye8MBtFgBvWZnq1C9WnI/SmJszxoQjmUH1psX2uzDk21O5k5et6udxdGjwxkbmT9eVRoG05w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.2.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "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-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.2.tgz", + "integrity": "sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.1.0.tgz", + "integrity": "sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==", + "license": "MIT", + "dependencies": { + "@acemir/cssom": "^0.9.31", + "@asamuzakjp/dom-selector": "^6.8.1", + "@bramus/specificity": "^2.4.2", + "@exodus/bytes": "^1.11.0", + "cssstyle": "^6.0.1", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^8.0.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.0", + "undici": "^7.21.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "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/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/linkify-it": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-6.1.0.tgz", + "integrity": "sha512-wJ/TwpSDTLepCrQoYWYIExIKg5Zchex2Nn5yk2mFnB+6PtdkHtyLx742md9csRjjOnGkKIS/RrbY7l8D6gT9Vw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], + "license": "MIT", + "dependencies": { + "uc.micro": "^3.0.0" + } + }, + "node_modules/local-pkg": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.2.1.tgz", + "integrity": "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==", + "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/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "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-ast/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/markdown-it": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-15.0.1.tgz", + "integrity": "sha512-9/7gE95FNPkfUWrjJIoHZza2iLmuJlPD0UNMxPi7bxUrbCR525YZY0r+zyfes0dZI5ZZ/uNIXUJca0pJvtw41g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^3.0.0", + "entities": "^8.0.0", + "linkify-it": "^6.0.0", + "mdurl": "^2.1.0", + "punycode.js": "^2.3.1", + "uc.micro": "^3.0.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-3.0.1.tgz", + "integrity": "sha512-nM4mHF/KM1v59ZNKX7zfusQz5wUAxR511YG8Vo6TyiV4aqhu++rbJW4v04xsWhpSsHFj66flT8P7znVpyO20xQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "PSF-2.0" + }, + "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.1.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.1.0.tgz", + "integrity": "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==", + "license": "MIT" + }, + "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/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.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "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/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/nostics": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/nostics/-/nostics-1.2.0.tgz", + "integrity": "sha512-FGqEfhQjrvo1lL8KFifdTQiNwwQHJxC1jtYE1Rc54qF/jxONUNL+kC9gS1krX8Q65PgrQ5fCqH/I4NhWBvdSqg==", + "license": "MIT" + }, + "node_modules/obug": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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==", + "dev": true, + "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/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.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz", + "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.4", + "exsolve": "^1.0.8", + "pathe": "^2.0.3" + } + }, + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "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.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rolldown": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.6.tgz", + "integrity": "sha512-vMM4q3aixf46GiF1Kok8jDPFsEpXgFWGjUHXNkNHNm+Y2adXAG2dbX91jkti3i0ZRsOlcmbuzAz1poObSHCmUA==", + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.147.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.6", + "@rolldown/binding-android-arm64": "1.2.6", + "@rolldown/binding-darwin-arm64": "1.2.6", + "@rolldown/binding-darwin-x64": "1.2.6", + "@rolldown/binding-freebsd-x64": "1.2.6", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.6", + "@rolldown/binding-linux-arm64-gnu": "1.2.6", + "@rolldown/binding-linux-arm64-musl": "1.2.6", + "@rolldown/binding-linux-ppc64-gnu": "1.2.6", + "@rolldown/binding-linux-s390x-gnu": "1.2.6", + "@rolldown/binding-linux-x64-gnu": "1.2.6", + "@rolldown/binding-linux-x64-musl": "1.2.6", + "@rolldown/binding-openharmony-arm64": "1.2.6", + "@rolldown/binding-win32-arm64-msvc": "1.2.6", + "@rolldown/binding-win32-x64-msvc": "1.2.6" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "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/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", + "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==", + "dev": true, + "license": "MIT" + }, + "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/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "license": "MIT" + }, + "node_modules/terser": { + "version": "5.51.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.51.2.tgz", + "integrity": "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", + "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.1.tgz", + "integrity": "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "7.4.11", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.11.tgz", + "integrity": "sha512-aBiNayCfTQxuIJBm06M+xR14cYaYlDlSXZbgsnKzKNxDKUVq7KFwTjwBSsb7m9Y5xO8WfPnBc63WaYFMTGlvqw==", + "license": "MIT", + "dependencies": { + "tldts-core": "^7.4.11" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.4.11", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.11.tgz", + "integrity": "sha512-CW3WN2rIIE/Of21mulhgnGOwoDyEFNygyIBOONSdyAuSATgMMUCpLeUlB+E8sAwA5xRV9hYPl+kyZ9citHCaKg==", + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.2.tgz", + "integrity": "sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==", + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.23.13", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.13.tgz", + "integrity": "sha512-BL5MGkRln6aDYhb0xbQlEAGw743BaZYWdbWtdJOBriYJboKgUUYCadFp2/FpBBZquBC/ezNBn7wMMPx7FDZUDw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.28.0" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-3.0.0.tgz", + "integrity": "sha512-U3PppEkleoTnIfi8BozMx3yju3qc/L6SwqWo2Sw+54PX+PX0q9I+r1Um5HCmqD7n9VDX5/v3vQH/AjA6deDdtw==", + "license": "MIT" + }, + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "license": "MIT" + }, + "node_modules/undici": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", + "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/unhead": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/unhead/-/unhead-2.1.17.tgz", + "integrity": "sha512-HLMKXOszRhAPBrr6VlqCeVeJq2kbC4kXwzGLEZvvojPLWNYTJw22xG7Bfwhsvs31+IBet3Wl8ADg9dwYdyphfQ==", + "license": "MIT", + "dependencies": { + "hookable": "^6.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/unplugin": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-3.3.0.tgz", + "integrity": "sha512-qa66K+crbfyE6JK10GjvbJeRrOsuC/JpbnHctfyp/i4oBTxWOzJfRZyDiOk1PtErMFRu8JhsU/wPvOdBNWe5Rg==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "picomatch": "^4.0.4", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@farmfe/core": "*", + "@rspack/core": "*", + "bun-types-no-globals": "*", + "esbuild": "*", + "rolldown": "*", + "rollup": "*", + "unloader": "*", + "vite": "*", + "webpack": "*" + }, + "peerDependenciesMeta": { + "@farmfe/core": { + "optional": true + }, + "@rspack/core": { + "optional": true + }, + "bun-types-no-globals": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "rolldown": { + "optional": true + }, + "rollup": { + "optional": true + }, + "unloader": { + "optional": true + }, + "vite": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/unplugin-utils": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.2.tgz", + "integrity": "sha512-xVToRh2CTmLk2HnEG7ac4rl1MJTT3RFkpS8B++/SnB0kXvuaavD+n3m/vrzyWQOdJNSZQACnbz01pnppbwV5BA==", + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/vite": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", + "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==", + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.26", + "rolldown": "~1.2.4", + "tinyglobby": "^0.2.17" + }, + "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", + "@vitejs/devtools": "^0.4.0 || ^0.5.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.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 + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "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-ssg": { + "version": "28.3.0", + "resolved": "https://registry.npmjs.org/vite-ssg/-/vite-ssg-28.3.0.tgz", + "integrity": "sha512-dIUjv+scfhJTfYGwf83R0KGAmr/duIo9oln5ZsQOIZZACm3voAON//7oKhtEwaOTtD4QTTab+nhvyn0QiIaFMA==", + "license": "MIT", + "dependencies": { + "@unhead/dom": "^2.1.2", + "@unhead/vue": "^2.1.2", + "ansis": "^4.2.0", + "cac": "^6.7.14", + "html-minifier-terser": "^7.2.0", + "html5parser": "^2.0.2", + "jsdom": "^28.0.0" + }, + "bin": { + "vite-ssg": "bin/vite-ssg.js" + }, + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "beasties": "^0.3.5", + "prettier": "^3.3.0", + "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0 || ^7.0.0-0 || ^8.0.0-0", + "vue": "^3.2.10", + "vue-router": "^4.0.1 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "beasties": { + "optional": true + }, + "prettier": { + "optional": true + }, + "vue-router": { + "optional": true + } + } + }, + "node_modules/vite-ssg/node_modules/@unhead/dom": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-2.1.17.tgz", + "integrity": "sha512-9BI2GZGWTdMo77MmwHjpUzpwlnBFVqm+4U8gAY5MqxnVpSRkOxKQb0UC0UpjXdh3mAE5EFJubWAlnVdtaSuvgA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "unhead": "2.1.17" + } + }, + "node_modules/vitest": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.11.tgz", + "integrity": "sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.11", + "@vitest/mocker": "4.1.11", + "@vitest/pretty-format": "4.1.11", + "@vitest/runner": "4.1.11", + "@vitest/snapshot": "4.1.11", + "@vitest/spy": "4.1.11", + "@vitest/utils": "4.1.11", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.11", + "@vitest/browser-preview": "4.1.11", + "@vitest/browser-webdriverio": "4.1.11", + "@vitest/coverage-istanbul": "4.1.11", + "@vitest/coverage-v8": "4.1.11", + "@vitest/ui": "4.1.11", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/vitest/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/vscode-uri": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.2.0.tgz", + "integrity": "sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.42.tgz", + "integrity": "sha512-4RyHQTbQvOPs3MfvUO1Sg0YRrKNnA0mAVtvpd12Tg1fKDN7OHBUl1IqSn8zGJjK9nI3NkNp8cgTpVrSZC5TTcA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.42", + "@vue/compiler-sfc": "3.5.42", + "@vue/runtime-dom": "3.5.42", + "@vue/server-renderer": "3.5.42", + "@vue/shared": "3.5.42" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-5.3.0.tgz", + "integrity": "sha512-a2PBXX9yfkS58JzSJALUffgDa09lEzKmCcEnLaepoIr88L+9hEnsgEQkcadJGID+vtHa0gFpVo064zmylA9fcg==", + "license": "MIT", + "dependencies": { + "@vue-macros/common": "^3.1.3", + "@vue/devtools-api": "^8.1.5", + "ast-walker-scope": "^0.9.0", + "chokidar": "^5.0.0", + "confbox": "^0.2.4", + "local-pkg": "^1.2.1", + "magic-string": "^0.30.21", + "mlly": "^1.8.2", + "muggle-string": "^0.4.1", + "nostics": "^1.1.4", + "pathe": "^2.0.3", + "picomatch": "^4.0.5", + "scule": "^1.3.0", + "tinyglobby": "^0.2.17", + "unplugin": "^3.3.0", + "unplugin-utils": "^0.3.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@pinia/colada": ">=0.21.2", + "@vue/compiler-sfc": "^3.5.34 || ^4.0.0", + "pinia": "^3.0.4 || ^4.0.2", + "vite": "^7.3.0 || ^8.0.0", + "vue": "^3.5.34 || ^4.0.0" + }, + "peerDependenciesMeta": { + "@pinia/colada": { + "optional": true + }, + "@vue/compiler-sfc": { + "optional": true + }, + "pinia": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/vue-router/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/vue-tsc": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.3.11.tgz", + "integrity": "sha512-gOb0B9rtU2+f1dszwPqSH5kAieIF9ReeLhD3kSRNHv5WZZUQz/JdVXW0RTdqhNTMlQkqKzrTTviqKr/4FYZraQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.28", + "@vue/language-core": "3.3.11" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "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/whatwg-mimetype": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-url": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", + "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.11.0", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/zod": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.5.4.tgz", + "integrity": "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ba401f0 --- /dev/null +++ b/package.json @@ -0,0 +1,31 @@ +{ + "name": "crr-event-sharing-tool", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "validate": "tsx scripts/validate-events.ts", + "typecheck": "vue-tsc --noEmit", + "test": "vitest run", + "build": "npm run validate && npm run typecheck && vite-ssg build" + }, + "dependencies": { + "@unhead/vue": "^2.1.2", + "gray-matter": "^4.0.3", + "markdown-it": "^15.0.1", + "vite-ssg": "^28.3.0", + "vue": "^3.5.42", + "vue-router": "^5.3.0", + "zod": "^4.5.4" + }, + "devDependencies": { + "@types/node": "^25.0.3", + "@vitejs/plugin-vue": "^6.0.8", + "tsx": "^4.23.13", + "typescript": "^5.9.3", + "vite": "^8.2.2", + "vitest": "^4.1.11", + "vue-tsc": "^3.3.11" + } +} diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..9c635e3 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ + diff --git a/public/images/events/festas-2026.png b/public/images/events/festas-2026.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4601e309dc1137d148500b8ee1d48f3104c621 GIT binary patch literal 113310 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 + Festas do 66.º Aniversário do Centro Recreativo da Rebolaria + Cartaz informativo para as festas de 5 a 7 de setembro de 2026. + + + + + CENTRO RECREATIVO DA REBOLARIA + FESTAS DO + 66.º + ANIVERSÁRIO + + 5 · 6 · 7 SETEMBRO 2026 + MÚSICA · TRADIÇÃO · CONVÍVIO + REBOLARIA, BATALHA + ENTRADA LIVRE + diff --git a/scripts/validate-events.ts b/scripts/validate-events.ts new file mode 100644 index 0000000..f0ef214 --- /dev/null +++ b/scripts/validate-events.ts @@ -0,0 +1,27 @@ +import { existsSync, readdirSync, readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { parseEventSource } from '../src/data/event-parser'; +import { validateEventCollection } from '../src/data/event-schema'; + +const eventDirectory = resolve(process.cwd(), 'src/content/events'); +const publicDirectory = resolve(process.cwd(), 'public'); +const eventFiles = readdirSync(eventDirectory).filter((file) => file.endsWith('.md')).sort(); + +if (eventFiles.length === 0) { + throw new Error(`No event Markdown files found in ${eventDirectory}`); +} + +const events = eventFiles.map((file) => { + const filePath = resolve(eventDirectory, file); + const event = parseEventSource(readFileSync(filePath, 'utf8'), file); + const posterPath = resolve(publicDirectory, `.${event.poster}`); + + if (!posterPath.startsWith(`${publicDirectory}/`) || !existsSync(posterPath)) { + throw new Error(`${file}: poster does not exist in public/: ${event.poster}`); + } + + return event; +}); + +validateEventCollection(events); +console.log(`Validated ${events.length} event file${events.length === 1 ? '' : 's'}.`); diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..de488ea --- /dev/null +++ b/src/App.vue @@ -0,0 +1,10 @@ + + + diff --git a/src/components/AppHeader.vue b/src/components/AppHeader.vue new file mode 100644 index 0000000..1f2e694 --- /dev/null +++ b/src/components/AppHeader.vue @@ -0,0 +1,11 @@ + diff --git a/src/components/EventHeader.vue b/src/components/EventHeader.vue new file mode 100644 index 0000000..ab460e1 --- /dev/null +++ b/src/components/EventHeader.vue @@ -0,0 +1,23 @@ + + + diff --git a/src/components/EventPoster.vue b/src/components/EventPoster.vue new file mode 100644 index 0000000..8f28d27 --- /dev/null +++ b/src/components/EventPoster.vue @@ -0,0 +1,9 @@ + + + diff --git a/src/components/FacebookPost.vue b/src/components/FacebookPost.vue new file mode 100644 index 0000000..e5661b1 --- /dev/null +++ b/src/components/FacebookPost.vue @@ -0,0 +1,27 @@ + + +