From 77646b7ff90f1e371103327aab1450b72dcb132b Mon Sep 17 00:00:00 2001 From: Bruno Germano Date: Thu, 10 Sep 2026 10:45:34 -0300 Subject: [PATCH 01/33] chore(webkit): adopt the design-system tooling Adds the webkit ESLint and stylelint rules, the husky pre-commit gate, the webkit MCP server and the CLAUDE.md guidance, as produced by webkit init. Co-Authored-By: Claude Opus 5 --- .husky/pre-commit | 3 + .mcp.json | 13 ++ .stylelintrc.json | 19 +++ CLAUDE.md | 70 +++++++++++ package.json | 9 +- pnpm-lock.yaml | 312 +++++++++++++++++++++++++++++++++++++++++++++- src/webkit.css | 5 + 7 files changed, 427 insertions(+), 4 deletions(-) create mode 100755 .husky/pre-commit create mode 100644 .mcp.json create mode 100644 .stylelintrc.json create mode 100644 CLAUDE.md create mode 100644 src/webkit.css diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000000..b6d3433d07 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,3 @@ +# Lint with the webkit rules before every commit. +npx eslint . +npx stylelint "**/*.{css,scss,vue}" diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 0000000000..00f6a2eec5 --- /dev/null +++ b/.mcp.json @@ -0,0 +1,13 @@ +{ + "mcpServers": { + "webkit": { + "command": "npx", + "args": [ + "-y", + "-p", + "@aziontech/webkit", + "webkit-mcp" + ] + } + } +} diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100644 index 0000000000..23d0ebc0e2 --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,19 @@ +{ + "extends": [ + "@aziontech/webkit/stylelint-config" + ], + "overrides": [ + { + "files": [ + "**/*.vue" + ], + "customSyntax": "postcss-html" + }, + { + "files": [ + "**/*.scss" + ], + "customSyntax": "postcss-scss" + } + ] +} diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000000..794fb69bee --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,70 @@ + + +## @aziontech/webkit design system + +This project uses the Azion design system. Its guidance is organized in four layers — know which +layer you're in, because only one of them is optional: + +1. **Invariants (always-on, below)** — the non-negotiables. Follow them in every UI change. +2. **Enforcement (the machine — non-optional)** — ESLint blocks the mechanical invariants at lint/CI; + the `webkit` MCP grounds every component choice; the `webkit-ui-verifier` agent checks the rest at + runtime (axe, both themes, states). If lint or the verifier fails, the change is not done. +3. **Skills (on-demand guidance)** — invoke `/webkit-*` skills for how to do a task well. +4. **Reference (depth)** — `.claude/rules/webkit-*.md` carry the full standards behind the invariants. + +### Invariants — always follow + +- **Components first.** Reach for an `@aziontech/webkit` component before writing custom UI. Find one + via the `webkit` MCP (`suggest_component`) or `node_modules/@aziontech/webkit/catalog.json`. +- **Flat imports.** `import Button from '@aziontech/webkit/button'` (PascalCase binding = the subpath). + Never category-prefixed, `/src/`, deep-internal, or a bare-package barrel. +- **Tokens only.** Color, typography, shape, spacing come from `@aziontech/theme` + (`var(--primary)`, `var(--spacing-md)`, `text-button-lg`) — never hex, `rgb`, `hsl`, or Tailwind palette. +- **Never restyle a webkit component.** No `class`/`:class`/`style` on its tag — compose inside its + slots or use its props. +- **Styles + theme.** Load `src/webkit.css` once at the app entry — it `@import`s the theme's + Tailwind v4 stylesheet (tokens + `@import "tailwindcss"` + fonts) and `@source`s webkit so its + component classes compile. Import `webkit.css`, not `@aziontech/theme` bare (the `@source` is what + compiles webkit's classes). Light is the default; for dark set ``. +- **Accessible & keyboard-operable.** Label every field, keep a visible focus ring, mirror state in + ARIA, no click handler without a key handler. +- **Small bundles.** Prefer the `-root` path (or specific sub-components), import icons + individually, lazy-load heavy overlays. +- **App-level setup at first use.** A few components declare a one-time wiring in their catalog + `setup` field (via the MCP's `get_component`). Toast: before the first `toast(...)` call, wire + `import { ToastPlugin } from '@aziontech/webkit/toast'` + `.use(ToastPlugin)` on `createApp()` + in the entry (the plugin mounts the region automatically); skip if already wired. `webkit doctor` + flags usage with missing setup. + +### Enforced by lint (blocks — nothing here is a suggestion) + +ESLint (`@aziontech/webkit/eslint-plugin` + `vuejs-accessibility`, wired by `webkit init`) fails the +build on: category-prefixed / deep-internal / barrel imports · hardcoded color · restyling a webkit +component · a custom element where a webkit component exists · a hand-rolled `modelValue`+`update` +instead of `defineModel` · a deprecated component · a whole-icon-set import · missing the +tree-shakeable root · and the static a11y set (alt-text, aria-props, aria-role, click-without-key, +label-has-for, no-autofocus). The rest — states, motion-reduce, contrast/behavioral a11y, both +themes, microcopy — is verified at runtime by `/webkit-ui-verify` (the `webkit-ui-verifier` agent +runs axe + screenshots), and taste is a review concern. + +### Skills — invoke for how to build UI well + +Start with `/webkit-ui-craft` (the umbrella that routes the rest). Get structure and states right +before any polish: + +- **Structure:** `/webkit-ux-heuristics` (right component per moment) · `/webkit-ui-states` (state surface + async behavior) · `/webkit-form` · `/webkit-create-surface` (where a create lives: page vs drawer, Advanced, the commit bar) · `/webkit-errors` (where a failure goes: field, section Message, toast, auth card) · `/webkit-tables` (data-driven `` + cell recipes) · `/webkit-lists` (the index page around it + the filter system) · `/webkit-navigation` +- **Words:** `/webkit-microcopy` (Azion product copy: punctuation, sentence case, label vs message, one word per concept) +- **Foundation:** `/webkit-baseline-ui` (tokens, hierarchy, containers, responsive widths) +- **Cross-cutting quality:** `/webkit-theming-dark-mode` · `/webkit-data-viz` +- **Polish:** `/webkit-motion-polish` · `/webkit-impeccable-polish` (finish + earned delight) +- **Verify + migrate:** `/webkit-ui-verify` (runtime axe + both themes + states) · `/webkit-ds-adoption` + +Mechanics of consuming the package (imports, tokens, tree-shaking) live in `/webkit-usage`. + +### Agents — delegate a whole task + +`webkit-expert` (which component + how) · `webkit-adopter` (the init/adoption flow) · `webkit-reviewer` +(review a diff for correct/performant usage) · `webkit-ui-verifier` (drive the screen: both themes, +widths, console, axe, states) · `webkit-adoption-auditor` (coverage scorecard: custom → webkit). + +Full standards behind the invariants: `.claude/rules/webkit-*.md`. diff --git a/package.json b/package.json index ee4a4a5382..3d9ef07d02 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "lint:eslint": "eslint .", "translation-status": "tsm --require=./scripts/lib/filter-warnings.cjs ./scripts/translation-status.ts", "cp-doc-helpcenter": "cp -R ../docs_help_center/* src/includes/help_center/en/", - "test:frontmatter": "node test-frontmatter.js" + "test:frontmatter": "node test-frontmatter.js", + "prepare": "husky" }, "devDependencies": { "@actions/core": "^1.9.0", @@ -47,12 +48,14 @@ "@astrojs/sitemap": "3.7.3", "@babel/core": "^7.29.6", "@eslint/js": "^10.0.1", + "@tailwindcss/postcss": "^4.0.0", "@tailwindcss/typography": "^0.5.10", "@types/hast": "^2.3.4", "@types/html-escaper": "^3.0.0", "@types/mdast": "^3.0.10", "@types/node": "^18.6.4", "@types/stream-json": "^1.7.8", + "@typescript-eslint/parser": "latest", "algoliasearch": "^4.22.1", "astro": "^7.2.3", "astro-auto-import": "^0.5.2", @@ -64,6 +67,7 @@ "eslint": "^9.39.5", "eslint-plugin-astro": "^1.7.0", "eslint-plugin-vue": "^10.10.0", + "eslint-plugin-vuejs-accessibility": "latest", "fast-glob": "^3.2.11", "globals": "^16.5.0", "hast-util-from-html": "^1.0.0", @@ -72,6 +76,7 @@ "hastscript": "^7.0.2", "html-escaper": "^3.0.3", "htmlparser2": "^7.2.0", + "husky": "latest", "kleur": "^4.1.5", "mdast-util-from-markdown": "^1.2.0", "mdast-util-mdx-jsx": "^2.1.2", @@ -95,6 +100,7 @@ "simple-git": "^3.36.0", "stream-json": "^1.8.0", "stylelint": "^16.26.1", + "tailwindcss": "^4.0.0", "tsm": "^2.3.0", "tsx": "^4.19.0", "typescript": "^5.3.2", @@ -106,6 +112,7 @@ "vfile": "^5.3.6", "vite": "^8.2.1", "vite-plugin-dynamic-import": "^1.5.0", + "vitest": "^5.0.0", "vue-eslint-parser": "^10.4.1" }, "dependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3b42a69555..ad4136cbd5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,6 +84,9 @@ importers: '@eslint/js': specifier: ^10.0.1 version: 10.0.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + '@tailwindcss/postcss': + specifier: ^4.0.0 + version: 4.3.3 '@tailwindcss/typography': specifier: ^0.5.10 version: 0.5.19(tailwindcss@4.3.3) @@ -102,6 +105,9 @@ importers: '@types/stream-json': specifier: ^1.7.8 version: 1.7.8 + '@typescript-eslint/parser': + specifier: latest + version: 8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) algoliasearch: specifier: ^4.22.1 version: 4.25.3 @@ -134,7 +140,10 @@ importers: version: 1.7.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) eslint-plugin-vue: specifier: ^10.10.0 - version: 10.10.0(@typescript-eslint/parser@8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)) + version: 10.10.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)) + eslint-plugin-vuejs-accessibility: + specifier: latest + version: 2.6.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(globals@16.5.0)(supports-color@7.2.0) fast-glob: specifier: ^3.2.11 version: 3.3.3 @@ -159,6 +168,9 @@ importers: htmlparser2: specifier: ^7.2.0 version: 7.2.0 + husky: + specifier: latest + version: 9.1.7 kleur: specifier: ^4.1.5 version: 4.1.5 @@ -261,6 +273,9 @@ importers: vite-plugin-dynamic-import: specifier: ^1.5.0 version: 1.6.0 + vitest: + specifier: ^5.0.0 + version: 5.0.0(@types/node@18.19.130)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)) vue-eslint-parser: specifier: ^10.4.1 version: 10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) @@ -324,6 +339,10 @@ packages: '@algolia/transporter@4.25.3': resolution: {integrity: sha512-2yji+TKjC1uOxhJ9pCdw7lQm6GSiQ+fMvNH4es6oz82DrBpkVHkeU49HmpyTqz8Ai9e+nW/UBz8T9+UyBul3dA==} + '@alloc/quick-lru@5.3.0': + resolution: {integrity: sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==} + engines: {node: '>=10'} + '@astrojs/check@0.9.10': resolution: {integrity: sha512-zgx/UQMozdjOa3bOxjgeCFdtpE3c9rRX6xHwa+2QXvy8z8Akifu2AtubHyv/zzC2znO8dl8fFWL4K+Ba9kS8HQ==} hasBin: true @@ -1705,6 +1724,9 @@ packages: resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} engines: {node: '>= 20'} + '@tailwindcss/postcss@4.3.3': + resolution: {integrity: sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==} + '@tailwindcss/typography@0.5.19': resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} peerDependencies: @@ -1735,9 +1757,15 @@ packages: '@tybys/wasm-util@0.10.3': resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} @@ -1828,22 +1856,45 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/parser@8.70.0': + resolution: {integrity: sha512-zYvrmj9Yxd63UGaXw+kdt6A0F0s0qveJyuatIM77bYC2DE4pgmg7a50u8LR7PRtXd0x+h+Tl3eXabGm06SWd3Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/project-service@8.69.0': resolution: {integrity: sha512-yi4obFrHMmnsesWehHbkg9zMA7Jt8cXT+mKM08G999pH1yT6nqgsHx7MYm0uY1wAj8CqiBXYRJ7WAT0QdQHQXg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/project-service@8.70.0': + resolution: {integrity: sha512-hFHbTNqhU9G+2eKFXCBVb1tjFT/LceiJ4+HfLO4pTpDI0KHi6iajpcFFkaSQ9gXmCh7n82A0PthaayEdN6mspQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/scope-manager@8.69.0': resolution: {integrity: sha512-ewfspqWvSxKSOaplqAUNbaSFO0eB6w1EtQ+esfYFRm3614Ty4uNtExkcbgd6nWsXphbqKyf9ZYdbZdv2xEoWEQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.70.0': + resolution: {integrity: sha512-8nP3Kwh5hlgZ4FicGvmznAmJe8UL4sdU8tLukrPaMuQmDuk4Y8xYfzu/aYZW4xT2JCgc7H/TpDI5cGlxcWJSqQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.69.0': resolution: {integrity: sha512-xNqK7YTDZsLniQMV/4rpFR8Z5JlqeRvVjuG1YgF/mdPVH84HSD19L8CczMA0qg2RfwEV231GHH3VnToJDo4MfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/tsconfig-utils@8.70.0': + resolution: {integrity: sha512-adnkeeNq9Sq1sUf4+FRVc0KdgYghzsgFpZSQVZVvY0LCuUuN0FnQgyGzCJeC4fW1cdXseBAjU2EOqUIjbNcZUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/type-utils@8.69.0': resolution: {integrity: sha512-ZfoJAVg3JZndQEpEl9petVlxau3lRuElc4HRMuAlLCf8to04/iHz692RUSNmXKDjEuJmIL+KZ2/BsOcBc16dsA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1855,12 +1906,22 @@ packages: resolution: {integrity: sha512-K3VrubUPhlo9VDBS6QdI8YB5j7ClpqLRdefcz6PFrhnwicehBweqQ9Evhl4l+FYz0HdDmMqIiSX0aldGRYtDCA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.70.0': + resolution: {integrity: sha512-asTOIYhDg4zdzOScCyaytrsV3cR6B4ecPQlXw/dJIm7J/MZTtCtfVII9JD8Geh4jTCrK/Xe6cg5UevoleMcoJQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.69.0': resolution: {integrity: sha512-AdFkgqck3Vudb/kWnxlyafU/4aBhHrbQ9locP2N4psXTy5mOBg0SHJumnLvx7r6g1gV4DKvUFwV2nJZBoqOD8w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/typescript-estree@8.70.0': + resolution: {integrity: sha512-d9NmHMPEKQ7QCLLm1jI3zmoQBwT5KwFYjXBJ9ymZfKCUU+5rmTRykKAFvH5Qn/ZCds3CEAFS9OC9M/jkl0X2bA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/utils@8.69.0': resolution: {integrity: sha512-tUbx60BBqQa31kXF5MCsOOLL5E/WzUuxIn7YpAvq+eaUlqvk8/NXnXMBNAdLCr0icjkzem7iUA5QqWHe/hJ1aw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1872,6 +1933,10 @@ packages: resolution: {integrity: sha512-+rmdgPA+EXkNgKYvHvFfhrs35utXbwaC5PGpDquSXcoXQDKUA5UjV0LmTucG/4JXkM31BTu4TilHtrN8IVBe8w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.70.0': + resolution: {integrity: sha512-BoC8PiO4Hkdo0TVJh9Ntxr5MxPDI7/oFsrygN5ADelFSeXG/qgNuucIGA+L5Z6JpPTE/uRfcTWtscjbUaufepQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} deprecated: Potential CWE-502 - Update to 1.3.1 or higher @@ -1890,6 +1955,20 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 vue: ^3.2.25 + '@vitest/mocker@5.0.0': + resolution: {integrity: sha512-66PGTMIiVJP3t4a5yxU9qPtf7MdTBs8jmToMvy+HVflB3Yy13WJZTtPePdvU+wjRV02SKK5doLbSA6o9pwOmiA==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/spy@5.0.0': + resolution: {integrity: sha512-uy+luWBAPw9XfthoHi5AkfHUnuPYEESjl0p/r+meoBnU8bxg5GDQ3Ey8MjcJ6sqahkL4PFyrvfMJJBw7LbU06g==} + '@volar/kit@2.4.28': resolution: {integrity: sha512-cKX4vK9dtZvDRaAzeoUdaAJEew6IdxHNCRrdp5Kvcl6zZOqb6jTOfk3kXkIkG3T7oTFXguEMt5+9ptyqYR84Pg==} peerDependencies: @@ -2128,6 +2207,10 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -2260,6 +2343,10 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -2807,6 +2894,13 @@ packages: '@typescript-eslint/parser': optional: true + eslint-plugin-vuejs-accessibility@2.6.0: + resolution: {integrity: sha512-QtJO3UdLH+aydue/im7aBsYKO99ouJ6hm4wEHL1Xm/BwDfYTAmXEPhTImNwlOHp2bbid7rNY7IrHz+IZzGApYA==} + engines: {node: '>=16.0.0'} + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 + globals: '>= 13.12.1' + eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2906,6 +3000,10 @@ packages: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} + engines: {node: '>=12.0.0'} + express-rate-limit@8.6.2: resolution: {integrity: sha512-YH4ru+eOJxQABscKFfRCy9R7x9QFGdezclVMwwgFFndzS2Xnm0uo6B0ABZsLhcpeptGv2qvuJVWlQr9gQZoC3A==} engines: {node: '>= 16'} @@ -3234,6 +3332,11 @@ packages: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + iconv-lite@0.7.3: resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} engines: {node: '>=0.10.0'} @@ -3634,6 +3737,9 @@ packages: magic-string@1.2.0: resolution: {integrity: sha512-ptco+HFxTLgjafSLim2LojBSwfg5feBjd+SqyiwdGkzC38UPdZy3zgrHMI2CoTf5fJL38tbHMYWVzIH8BxGqJw==} + magic-string@1.2.3: + resolution: {integrity: sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==} + magicast@0.5.4: resolution: {integrity: sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==} @@ -4205,6 +4311,10 @@ packages: resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + pkce-challenge@5.0.1: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} @@ -4739,6 +4849,9 @@ packages: resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + sigmund@1.0.1: resolution: {integrity: sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==} @@ -4798,10 +4911,16 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} + std-env@4.2.0: + resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} + stream-chain@2.2.5: resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} @@ -4925,6 +5044,10 @@ packages: tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + tinybench@6.1.4: + resolution: {integrity: sha512-9APumHG7r4yOk4X4WlkmE71aZcv1gvin1czO3OQ1U9iJcFA5Ja/ygyb0vPOVHTthFozUYs8CLoLUlM8grb2lTQ==} + engines: {node: '>=20.0.0'} + tinyclip@0.1.15: resolution: {integrity: sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==} engines: {node: ^16.14.0 || >= 17.3.0} @@ -5312,6 +5435,47 @@ packages: vite: optional: true + vitest@5.0.0: + resolution: {integrity: sha512-gpsMNoRhMjMktVxPtstOH4/PJuPyovVaMDr4oDilXaGH1EcqM2OE96SoHT2VIQ6fTGtTjqmHDrEu2X9RQiXf8Q==} + engines: {node: ^22.12.0 || ^24.0.0 || >=26.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 5.0.0 + '@vitest/browser-preview': 5.0.0 + '@vitest/browser-webdriverio': ^5.0.0-beta.5 || >=5.0.0 + '@vitest/coverage-istanbul': 5.0.0 + '@vitest/coverage-v8': 5.0.0 + '@vitest/ui': 5.0.0 + happy-dom: '*' + jsdom: '*' + vite: ^6.4.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 + volar-service-css@0.0.71: resolution: {integrity: sha512-wRRFt9BpjMKCazcgOh67MSjUjiWUCAh99DyYSDIOTuxaRjEtDC7PpB0k1Y1wbJIW/pVtMUSVbpPo3UGSm0Byxw==} peerDependencies: @@ -5451,6 +5615,11 @@ packages: engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -5625,6 +5794,8 @@ snapshots: '@algolia/logger-common': 4.25.3 '@algolia/requester-common': 4.25.3 + '@alloc/quick-lru@5.3.0': {} + '@astrojs/check@0.9.10(prettier-plugin-astro@0.8.1)(prettier@2.8.8)(typescript@5.9.3)': dependencies: '@astrojs/language-server': 2.16.14(prettier-plugin-astro@0.8.1)(prettier@2.8.8)(typescript@5.9.3) @@ -6861,6 +7032,14 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 + '@tailwindcss/postcss@4.3.3': + dependencies: + '@alloc/quick-lru': 5.3.0 + '@tailwindcss/node': 4.3.3 + '@tailwindcss/oxide': 4.3.3 + postcss: 8.5.26 + tailwindcss: 4.3.3 + '@tailwindcss/typography@0.5.19(tailwindcss@4.3.3)': dependencies: postcss-selector-parser: 6.0.10 @@ -6894,10 +7073,17 @@ snapshots: tslib: 2.8.1 optional: true + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 + '@types/deep-eql@4.0.2': {} + '@types/esrecurse@4.3.1': {} '@types/estree-jsx@1.0.5': @@ -7001,6 +7187,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.70.0 + '@typescript-eslint/types': 8.70.0 + '@typescript-eslint/typescript-estree': 8.70.0(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.70.0 + debug: 4.4.3(supports-color@7.2.0) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/project-service@8.69.0(supports-color@7.2.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.69.0(typescript@5.9.3) @@ -7010,15 +7208,33 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.70.0(supports-color@7.2.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.70.0(typescript@5.9.3) + '@typescript-eslint/types': 8.70.0 + debug: 4.4.3(supports-color@7.2.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@8.69.0': dependencies: '@typescript-eslint/types': 8.69.0 '@typescript-eslint/visitor-keys': 8.69.0 + '@typescript-eslint/scope-manager@8.70.0': + dependencies: + '@typescript-eslint/types': 8.70.0 + '@typescript-eslint/visitor-keys': 8.70.0 + '@typescript-eslint/tsconfig-utils@8.69.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 + '@typescript-eslint/tsconfig-utils@8.70.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + '@typescript-eslint/type-utils@8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.69.0 @@ -7033,6 +7249,8 @@ snapshots: '@typescript-eslint/types@8.69.0': {} + '@typescript-eslint/types@8.70.0': {} + '@typescript-eslint/typescript-estree@8.69.0(supports-color@7.2.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/project-service': 8.69.0(supports-color@7.2.0)(typescript@5.9.3) @@ -7048,6 +7266,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.70.0(supports-color@7.2.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.70.0(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.70.0(typescript@5.9.3) + '@typescript-eslint/types': 8.70.0 + '@typescript-eslint/visitor-keys': 8.70.0 + debug: 4.4.3(supports-color@7.2.0) + minimatch: 10.2.6 + semver: 7.8.5 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) @@ -7064,6 +7297,11 @@ snapshots: '@typescript-eslint/types': 8.69.0 eslint-visitor-keys: 5.0.1 + '@typescript-eslint/visitor-keys@8.70.0': + dependencies: + '@typescript-eslint/types': 8.70.0 + eslint-visitor-keys: 5.0.1 + '@ungap/structured-clone@1.3.0': {} '@vitejs/plugin-vue-jsx@5.1.6(supports-color@7.2.0)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0))(vue@3.5.25(typescript@5.9.3))': @@ -7084,6 +7322,17 @@ snapshots: vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) vue: 3.5.25(typescript@5.9.3) + '@vitest/mocker@5.0.0(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0))': + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + '@vitest/spy': 5.0.0 + estree-walker: 3.0.3 + magic-string: 1.2.3 + optionalDependencies: + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) + + '@vitest/spy@5.0.0': {} + '@volar/kit@2.4.28(typescript@5.9.3)': dependencies: '@volar/language-service': 2.4.28(typescript@5.9.3) @@ -7426,6 +7675,8 @@ snapshots: array-union@2.1.0: {} + assertion-error@2.0.1: {} + astral-regex@2.0.0: {} astring@1.9.0: {} @@ -7659,6 +7910,8 @@ snapshots: ccount@2.0.1: {} + chai@6.2.2: {} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -8175,7 +8428,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-vue@10.10.0(@typescript-eslint/parser@8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)): + eslint-plugin-vue@10.10.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)): dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) @@ -8186,7 +8439,16 @@ snapshots: vue-eslint-parser: 10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) xml-name-validator: 5.0.0 optionalDependencies: - '@typescript-eslint/parser': 8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + + eslint-plugin-vuejs-accessibility@2.6.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(globals@16.5.0)(supports-color@7.2.0): + dependencies: + aria-query: 5.3.2 + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + globals: 16.5.0 + vue-eslint-parser: 10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) + transitivePeerDependencies: + - supports-color eslint-scope@8.4.0: dependencies: @@ -8318,6 +8580,8 @@ snapshots: dependencies: eventsource-parser: 3.0.6 + expect-type@1.4.0: {} + express-rate-limit@8.6.2(express@5.2.1(supports-color@7.2.0))(supports-color@7.2.0): dependencies: debug: 4.4.3(supports-color@7.2.0) @@ -8829,6 +9093,8 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 + husky@9.1.7: {} + iconv-lite@0.7.3: dependencies: safer-buffer: 2.1.2 @@ -9107,6 +9373,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@1.2.3: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + magicast@0.5.4: dependencies: '@babel/parser': 7.29.8 @@ -10130,6 +10400,8 @@ snapshots: picomatch@4.0.5: {} + picomatch@4.0.7: {} + pkce-challenge@5.0.1: {} postcss-calc@9.0.1(postcss@8.5.26): @@ -10832,6 +11104,8 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} + sigmund@1.0.1: {} signal-exit@4.1.0: {} @@ -10890,8 +11164,12 @@ snapshots: sprintf-js@1.0.3: {} + stackback@0.0.2: {} + statuses@2.0.2: {} + std-env@4.2.0: {} + stream-chain@2.2.5: {} stream-json@1.9.1: @@ -11069,6 +11347,8 @@ snapshots: tiny-inflate@1.0.3: {} + tinybench@6.1.4: {} + tinyclip@0.1.15: {} tinyexec@1.3.0: {} @@ -11449,6 +11729,27 @@ snapshots: optionalDependencies: vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) + vitest@5.0.0(@types/node@18.19.130)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)): + dependencies: + '@types/chai': 5.2.3 + '@vitest/mocker': 5.0.0(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)) + chai: 6.2.2 + es-module-lexer: 2.3.2 + expect-type: 1.4.0 + magic-string: 1.2.3 + obug: 2.1.4 + picomatch: 4.0.7 + std-env: 4.2.0 + tinybench: 6.1.4 + tinyexec: 1.3.0 + tinyglobby: 0.2.17 + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 18.19.130 + transitivePeerDependencies: + - msw + volar-service-css@0.0.71(@volar/language-service@2.4.28(typescript@5.9.3)): dependencies: vscode-css-languageservice: 6.3.9 @@ -11586,6 +11887,11 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + word-wrap@1.2.5: {} wrap-ansi@9.0.2: diff --git a/src/webkit.css b/src/webkit.css new file mode 100644 index 0000000000..24069780b6 --- /dev/null +++ b/src/webkit.css @@ -0,0 +1,5 @@ +/* @aziontech/webkit design-system styles. Import this once from your app entry. */ +@import '@aziontech/theme'; + +/* webkit is consumed as source — this registers it with Tailwind so its component classes compile. */ +@import '@aziontech/webkit/styles'; From deb83056aa9a0808ae6de510f02d954bb0383fe2 Mon Sep 17 00:00:00 2001 From: Bruno Germano Date: Thu, 10 Sep 2026 10:46:35 -0300 Subject: [PATCH 02/33] feat(docs): move the documentation home out of the content collection into real Astro pages The en and pt-br homes were MDX entries reached through [lang]/[...slug].astro. They are now pages under src/pages, with their copy as structured data in src/data/docs-home, which also supplies the synthetic collection entries the docs endpoints still derive from, so the home stays in the search feed, llms.txt, canonicals, the path map and the sitemap. Rendered output is byte-identical in both languages. Also drops two unused locals in files this change already touches. Co-Authored-By: Claude Opus 5 --- src/components/homes/DocsHome.astro | 103 +++++++ src/components/homes/InlineLinks.astro | 17 ++ src/components/homes/SectionHeading.astro | 16 ++ src/content/docs/en/homes/home-docs.mdx | 132 --------- src/content/docs/pt-br/homes/doc-home.mdx | 131 --------- src/data/docs-home/en.ts | 313 ++++++++++++++++++++++ src/data/docs-home/index.ts | 104 +++++++ src/data/docs-home/pt-br.ts | 312 +++++++++++++++++++++ src/data/docs-home/types.ts | 116 ++++++++ src/layouts/MainLayout.astro | 4 +- src/nav/exempt.json | 1 - src/pages/[lang]/[...slug].md.js | 3 +- src/pages/[lang]/doc-all-data.json.js | 5 +- src/pages/[lang]/doc-canonicals.json.js | 5 +- src/pages/[lang]/docs-llms.txt.js | 3 +- src/pages/[lang]/docs-path-by-url.json.js | 9 +- src/pages/[lang]/sitemap/docs.xml.js | 5 +- src/pages/en/documentation/index.astro | 23 ++ src/pages/pt-br/documentacao/index.astro | 23 ++ src/util/getGithubEditUrl.ts | 5 +- src/util/getPageTranslations.ts | 9 +- 21 files changed, 1059 insertions(+), 280 deletions(-) create mode 100644 src/components/homes/DocsHome.astro create mode 100644 src/components/homes/InlineLinks.astro create mode 100644 src/components/homes/SectionHeading.astro delete mode 100644 src/content/docs/en/homes/home-docs.mdx delete mode 100644 src/content/docs/pt-br/homes/doc-home.mdx create mode 100644 src/data/docs-home/en.ts create mode 100644 src/data/docs-home/index.ts create mode 100644 src/data/docs-home/pt-br.ts create mode 100644 src/data/docs-home/types.ts create mode 100644 src/pages/en/documentation/index.astro create mode 100644 src/pages/pt-br/documentacao/index.astro diff --git a/src/components/homes/DocsHome.astro b/src/components/homes/DocsHome.astro new file mode 100644 index 0000000000..38bdeec031 --- /dev/null +++ b/src/components/homes/DocsHome.astro @@ -0,0 +1,103 @@ +--- +import Button from '@aziontech/webkit/button'; +import DocCard from '@aziontech/webkit/doc-card'; +import DocCardGroup from '@aziontech/webkit/doc-card-group'; +import FrameBox from '@aziontech/webkit/frame-box'; + +import CopyPromptButton from '~/components/webkit/CopyPromptButton.vue'; +import HeroHome from '~/components/webkit/HeroHome.vue'; +import InlineLinks from '~/components/homes/InlineLinks.astro'; +import SectionHeading from '~/components/homes/SectionHeading.astro'; + +import type { DocsHomeContent } from '~/data/docs-home'; + +interface Props { + content: DocsHomeContent; +} + +const { content } = Astro.props; +const { hero, interfaceSection, sections } = content; +--- + + + + +

{interfaceSection.intro}

+ + +
+ +
+

+ {interfaceSection.agent.title} +

+

{interfaceSection.agent.body}

+ +
+
+ +
+

{interfaceSection.guided.title}

+
+
+
+
+ + + { + interfaceSection.cards.map((card) => ( + + {card.body} + + )) + } + + +{ + sections.map((section) => ( + <> + +

{section.intro}

+ + + {section.cards.map((card) => ( + + {card.body} + + ))} + + + {section.footer && } + + )) +} diff --git a/src/components/homes/InlineLinks.astro b/src/components/homes/InlineLinks.astro new file mode 100644 index 0000000000..164d6cb276 --- /dev/null +++ b/src/components/homes/InlineLinks.astro @@ -0,0 +1,17 @@ +--- +/** + * The "Also useful: A, B" line that closes most sections. Everything renders on + * one source line on purpose: Astro keeps the whitespace between expressions, so + * breaking this up would pad the markup the MDX version emitted tightly. + */ +import type { DocLink } from '~/data/docs-home'; + +interface Props { + prefix: string; + links: DocLink[]; +} + +const { prefix, links } = Astro.props; +--- + +

{prefix} {links.map((link, index) => (<>{index > 0 ? ', ' : ''}{link.label}))}

diff --git a/src/components/homes/SectionHeading.astro b/src/components/homes/SectionHeading.astro new file mode 100644 index 0000000000..22a3b31010 --- /dev/null +++ b/src/components/homes/SectionHeading.astro @@ -0,0 +1,16 @@ +--- +/** + * The `rehype-autolink-headings` pass only runs on markdown and MDX, so an + * Astro page has to write the anchor itself. Markup here is kept byte-identical + * to `plugins/rehype-autolink-config.ts` so headings that moved out of MDX + * still match the styling and the anchor behaviour of the ones that stayed. + */ +interface Props { + id: string; + text: string; +} + +const { id, text } = Astro.props; +--- + +

{text}

diff --git a/src/content/docs/en/homes/home-docs.mdx b/src/content/docs/en/homes/home-docs.mdx deleted file mode 100644 index e5af3d5013..0000000000 --- a/src/content/docs/en/homes/home-docs.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -meta_tag_robots_no_index: false -title: 'Documentation Home' -description: >- - Azion is the full-stack edge computing platform that simplifies how you build, secure, and scale modern applications. -meta_tags: 'documentation, azion' -namespace: documentation_home -permalink: /documentation/ -page_header: false ---- - -import HeroHome from '~/components/webkit/HeroHome.vue'; -import Button from '@aziontech/webkit/button'; -import DocCard from '@aziontech/webkit/doc-card'; -import DocCardGroup from '@aziontech/webkit/doc-card-group'; -import CopyPromptButton from '~/components/webkit/CopyPromptButton.vue'; -import FrameBox from '@aziontech/webkit/frame-box'; - - - -## Start by interface - -Hand the Console to a coding agent, or drive it yourself: visually, from the terminal, or over the API. - - -
- -
-

Your AI agent, fluent in Azion

-

One prompt teaches any coding agent the platform: current product names, live docs through the Azion MCP server, and real deploys with the CLI.

- -
-
- -
-

Prefer the guided route?

-
-
-
-
- - - Configure it visually: applications, firewall rules, metrics, and events. - Stay in the terminal: link a project, run it locally, and deploy with a single binary. - Drive it from your own systems: create and change resources over REST, token authenticated. - - -## Start by objective - -Build something, make it faster, lock it down, or run AI on it. - - - Deploy from a template, a repo, or the CLI. - Cache responses so your origin stops repeating itself. - A firewall in front, with a block rule you can verify. - A hosted model behind an OpenAI-compatible endpoint. - - -Also useful: [Observe](/en/documentation/observe/data-stream/), [Architectures](/en/documentation/guides/?kind=reference-architecture) - -## Ready-made templates - -Deploy in one step, with CI/CD already wired up. - - - - - - - - - - - - -Also useful: [First deploy](/en/documentation/first-deploy/), [Frameworks compatibility](/en/documentation/devtools/runtime/frameworks/frameworks-compatibility/) - -## Stop attacks - -Everything you need to protect applications, APIs, and the traffic that reaches them. - - - Bind it to your workload and prove a deny rule with curl. - A SQL Injection rule set, with the blocks visible in events. - Turn WAF false positives into allowed rules. - Deny automated requests that score above your threshold. - Drop unwanted traffic before it reaches your application. - Upload a certificate and key, then check the handshake. - Stream WAF and firewall events where your team watches. - - -Reference, when you need the details: [DDoS Protection](/en/documentation/platform/ddos-protection/), [WAF Rule Sets](/en/documentation/secure/waf/rules-set/), [WAF Exceptions](/en/documentation/secure/waf/custom-allowed-rules/), [Bot Manager](/en/documentation/secure/bot-manager/) - -## Assess risk and prove compliance - -What the platform covers, what stays with you, and where the evidence lives when an auditor asks for it. - - - What Azion covers, and what stays yours. - The tools and certifications behind your compliance work. - PCI DSS 4.0 Level 1, and what it covers for cardholder data. - SOC 2 Type 2 and SOC 3 reports, twice a year. - The audit trail: who changed what, and when. - Azion mitigates on your behalf during an attack. - - -Access governance: [Single Sign-On](/en/documentation/fundamentals/single-sign-on/), [Multi-Factor Authentication](/en/documentation/fundamentals/multi-factor-authentication/), [Teams Permissions](/en/documentation/fundamentals/teams-permissions/), [Conditional Access](/en/documentation/guides/application-security/access-and-compliance/conditional-access-by-ip-address/) - -## Follow along - -Release notes as things ship, plus the blog, the YouTube channel, and the Discord where questions get answered. - - - What changed in Azion products, as it ships. - Engineering posts and how customers run on Azion. - Walkthroughs, demos, and recorded sessions. - Ask questions and compare notes with other builders. - How Azion writes documentation: voice, structure, and conventions. - diff --git a/src/content/docs/pt-br/homes/doc-home.mdx b/src/content/docs/pt-br/homes/doc-home.mdx deleted file mode 100644 index 9e1411e367..0000000000 --- a/src/content/docs/pt-br/homes/doc-home.mdx +++ /dev/null @@ -1,131 +0,0 @@ ---- -meta_tag_robots_no_index: false -title: 'Página Inicial da Documentação' -description: >- - Azion é a plataforma de edge computing full-stack que simplifica como você constrói, protege e escala aplicações modernas. -namespace: documentation_home -permalink: /documentacao/ -page_header: false ---- - -import HeroHome from '~/components/webkit/HeroHome.vue'; -import Button from '@aziontech/webkit/button'; -import DocCard from '@aziontech/webkit/doc-card'; -import DocCardGroup from '@aziontech/webkit/doc-card-group'; -import CopyPromptButton from '~/components/webkit/CopyPromptButton.vue'; -import FrameBox from '@aziontech/webkit/frame-box'; - - - -## Comece pela interface - -Entregue o Console a um agente de código, ou conduza você mesmo: visualmente, pelo terminal ou pela API. - - -
- -
-

Seu agente de IA, fluente em Azion

-

Um prompt ensina a plataforma a qualquer agente de código: nomes atuais dos produtos, documentação ao vivo pelo servidor MCP da Azion e deploys reais com a CLI.

- -
-
- -
-

Prefere o caminho guiado?

-
-
-
-
- - - Configure visualmente: aplicações, regras de firewall, métricas e eventos. - Fique no terminal: vincule um projeto, execute localmente e faça o deploy com um único binário. - Controle a partir dos seus sistemas: crie e altere recursos via REST, com autenticação por token. - - -## Comece pelo objetivo - -Construa algo, deixe mais rápido, proteja ou rode IA em cima. - - - Faça o deploy a partir de um template, de um repositório ou da CLI. - Armazene respostas em cache para que a origem pare de se repetir. - Um firewall na frente, com uma regra de bloqueio que você pode verificar. - Um modelo hospedado atrás de um endpoint compatível com OpenAI. - - -Também útil: [Observe](/pt-br/documentacao/observe/data-stream/), [Arquiteturas](/pt-br/documentacao/guias/?kind=reference-architecture) - -## Templates prontos - -Faça o deploy em um passo, com CI/CD já configurado. - - - - - - - - - - - - -Também útil: [Primeiro deploy](/pt-br/documentacao/primeiro-deploy/), [Compatibilidade de frameworks](/pt-br/documentacao/devtools/runtime/frameworks/compatibilidade-frameworks/) - -## Pare ataques - -Tudo o que você precisa para proteger aplicações, APIs e o tráfego que chega até elas. - - - Vincule-o ao seu workload e comprove uma regra de bloqueio com curl. - Um conjunto de regras contra SQL Injection, com os bloqueios visíveis nos eventos. - Transforme falsos positivos do WAF em regras permitidas. - Negue requisições automatizadas com pontuação acima do seu limite. - Descarte tráfego indesejado antes que ele chegue à sua aplicação. - Envie um certificado e uma chave e verifique o handshake. - Transmita eventos do WAF e do firewall para onde sua equipe acompanha. - - -Referência, quando você precisar dos detalhes: [DDoS Protection](/pt-br/documentacao/plataforma/ddos-protection/), [WAF Rule Sets](/pt-br/documentacao/secure/waf/rule-sets/), [WAF Exceptions](/pt-br/documentacao/secure/waf/custom-allowed-rules/), [Bot Manager](/pt-br/documentacao/secure/bot-manager/) - -## Avalie riscos e comprove conformidade - -O que a plataforma cobre, o que fica com você e onde estão as evidências quando um auditor pedir. - - - O que a Azion cobre e o que continua sendo seu. - As ferramentas e certificações por trás do seu trabalho de conformidade. - PCI DSS 4.0 Nível 1 e o que ele cobre para dados de portadores de cartão. - Relatórios SOC 2 Tipo 2 e SOC 3, duas vezes por ano. - A trilha de auditoria: quem alterou o quê, e quando. - A Azion mitiga em seu nome durante um ataque. - - -Governança de acesso: [Single Sign-On](/pt-br/documentacao/fundamentos/single-sign-on/), [Multi-Factor Authentication](/pt-br/documentacao/fundamentos/multi-factor-authentication/), [Teams Permissions](/pt-br/documentacao/fundamentos/teams-permissions/), [Acesso Condicional](/pt-br/documentacao/guias/seguranca-de-aplicacoes/acesso-e-compliance/conditional-access-by-ip-address/) - -## Acompanhe - -Notas de release conforme as novidades são lançadas, além do blog, do canal no YouTube e do Discord onde as dúvidas são respondidas. - - - O que mudou nos produtos Azion, assim que é lançado. - Posts de engenharia e como os clientes rodam na Azion. - Passo a passo, demos e sessões gravadas. - Tire dúvidas e troque experiências com outros desenvolvedores. - Como a Azion escreve documentação: voz, estrutura e convenções. - diff --git a/src/data/docs-home/en.ts b/src/data/docs-home/en.ts new file mode 100644 index 0000000000..aa8450e0c1 --- /dev/null +++ b/src/data/docs-home/en.ts @@ -0,0 +1,313 @@ +import type { DocsHomeContent } from './types'; + +const AGENT_PROMPT = + 'Help me set up Azion in this project. Do the following: 1. Install the Azion CLI: curl -fsSL https://cli.azion.app/install.sh | bash. 2. Connect the Azion MCP server (https://mcp.azion.com) so you can search current Azion docs; per-tool setup: https://www.azion.com/en/documentation/agent-setup/. 3. Review the project and check whether it is already linked to Azion; if it is not, run azion link and follow the prompts. 4. Suggest the most relevant next steps.'; + +export const en: DocsHomeContent = { + lang: 'en', + id: 'en/homes/home-docs', + filePath: 'src/pages/en/documentation/index.astro', + + meta: { + type: 'base', + i18nReady: false, + title: 'Documentation Home', + description: + 'Azion is the full-stack edge computing platform that simplifies how you build, secure, and scale modern applications.', + meta_tags: 'documentation, azion', + namespace: 'documentation_home', + permalink: '/documentation/', + page_header: false, + meta_tag_robots_no_index: false, + }, + + hero: { + title: 'Welcome to Azion Docs', + description: + 'We make every application fast and reliable. Deploy on a global network, with enterprise-grade security and no cold starts.', + buttonLabel: 'Get started', + buttonLink: '/en/documentation/first-deploy/', + note: 'The prompt hands your coding agent the CLI, live docs over MCP, and this project linked.', + prompt: AGENT_PROMPT, + promptLabel: 'Copy prompt', + promptCopiedLabel: 'Prompt copied!', + promptTooltip: 'Copies a setup prompt for your AI coding tool', + }, + + interfaceSection: { + heading: { depth: 2, slug: 'start-by-interface', text: 'Start by interface' }, + intro: 'Hand the Console to a coding agent, or drive it yourself: visually, from the terminal, or over the API.', + agent: { + id: 'your-ai-agent-fluent-in-azion', + title: 'Your AI agent, fluent in Azion', + body: 'One prompt teaches any coding agent the platform: current product names, live docs through the Azion MCP server, and real deploys with the CLI.', + copyLabel: 'Copy prompt', + copiedLabel: 'Prompt copied!', + tooltip: 'Copies a setup prompt for your AI coding tool', + prompt: AGENT_PROMPT, + }, + guided: { + title: 'Prefer the guided route?', + buttonLabel: 'Agent setup', + buttonHref: '/en/documentation/agent-setup/', + }, + cols: 3, + cards: [ + { + icon: 'ai ai-azion', + title: 'Console', + href: '/en/documentation/guides/platform/account-and-billing/how-to-access-azion-console/', + link: 'Access the Console', + body: 'Configure it visually: applications, firewall rules, metrics, and events.', + }, + { + icon: 'ai ai-azion-cli', + title: 'CLI', + href: '/en/documentation/devtools/cli/', + link: 'Install the CLI', + body: 'Stay in the terminal: link a project, run it locally, and deploy with a single binary.', + }, + { + icon: 'ai ai-azion-api', + title: 'API', + href: '/en/documentation/devtools/api/', + link: 'Call the API', + class: 'sm:col-span-2 lg:col-span-1', + body: 'Drive it from your own systems: create and change resources over REST, token authenticated.', + }, + ], + }, + + sections: [ + { + heading: { depth: 2, slug: 'start-by-objective', text: 'Start by objective' }, + intro: 'Build something, make it faster, lock it down, or run AI on it.', + cols: 2, + cards: [ + { + icon: 'ai ai-build-pillar', + title: 'Build your application', + href: '/en/documentation/first-deploy/', + body: 'Deploy from a template, a repo, or the CLI.', + }, + { + icon: 'pi pi-gauge', + title: 'Accelerate your application', + href: '/en/documentation/guides/application-performance/cache-and-purge/cache-settings/', + body: 'Cache responses so your origin stops repeating itself.', + }, + { + icon: 'ai ai-secure-pillar', + title: 'Secure your application', + href: '/en/documentation/guides/application-security/firewall-and-waf/firewall-protect-your-domain/', + body: 'A firewall in front, with a block rule you can verify.', + }, + { + icon: 'ai ai-ai-pillar', + title: 'Execute AI inference', + href: '/en/documentation/guides/application-development/frameworks/ai-inference-starter-kit/', + body: 'A hosted model behind an OpenAI-compatible endpoint.', + }, + ], + footer: { + prefix: 'Also useful:', + links: [ + { label: 'Observe', href: '/en/documentation/observe/data-stream/' }, + { label: 'Architectures', href: '/en/documentation/guides/?kind=reference-architecture' }, + ], + }, + }, + + { + heading: { depth: 2, slug: 'ready-made-templates', text: 'Ready-made templates' }, + intro: 'Deploy in one step, with CI/CD already wired up.', + cols: 4, + mobileCols: 2, + cards: [ + { icon: 'ai ai-react', title: 'React', href: '/en/documentation/guides/application-development/frameworks/react-boilerplate/' }, + { icon: 'ai ai-next', title: 'Next.js', href: '/en/documentation/guides/application-development/frameworks/nextjs-static-boilerplate/' }, + { icon: 'ai ai-astro', title: 'Astro', href: '/en/documentation/guides/application-development/frameworks/astro-boilerplate/' }, + { icon: 'ai ai-vue', title: 'Vue.js', href: '/en/documentation/guides/application-development/frameworks/vue-vite-boilerplate/' }, + { icon: 'ai ai-angular', title: 'Angular', href: '/en/documentation/guides/application-development/frameworks/angular-boilerplate/' }, + { icon: 'ai ai-gatsby', title: 'Gatsby Blog', href: '/en/documentation/guides/application-development/frameworks/gatsby/' }, + { icon: 'ai ai-hono', title: 'Hono', href: '/en/documentation/guides/application-development/frameworks/hono/' }, + { icon: 'ai ai-hugo', title: 'Hugo', href: '/en/documentation/guides/application-development/frameworks/hugo-boilerplate/' }, + ], + footer: { + prefix: 'Also useful:', + links: [ + { label: 'First deploy', href: '/en/documentation/first-deploy/' }, + { + label: 'Frameworks compatibility', + href: '/en/documentation/devtools/runtime/frameworks/frameworks-compatibility/', + }, + ], + }, + }, + + { + heading: { depth: 2, slug: 'stop-attacks', text: 'Stop attacks' }, + intro: 'Everything you need to protect applications, APIs, and the traffic that reaches them.', + cols: 3, + cards: [ + { + icon: 'ai ai-edge-firewall', + title: 'Add a firewall', + href: '/en/documentation/guides/application-security/firewall-and-waf/work-with-rules-engine/', + body: 'Bind it to your workload and prove a deny rule with curl.', + }, + { + icon: 'ai ai-waf-rules', + title: 'Block injection attacks', + href: '/en/documentation/guides/application-security/firewall-and-waf/create-waf-rule-set/', + body: 'A SQL Injection rule set, with the blocks visible in events.', + }, + { + icon: 'pi pi-list-check', + title: 'Tune false positives', + href: '/en/documentation/guides/application-security/firewall-and-waf/tune-waf/', + body: 'Turn WAF false positives into allowed rules.', + }, + { + icon: 'pi pi-microchip', + title: 'Deny bad bots', + href: '/en/documentation/guides/application-development/integrations/bot-manager-lite/', + body: 'Deny automated requests that score above your threshold.', + }, + { + icon: 'pi pi-map', + title: 'Network blocklists', + href: '/en/documentation/guides/application-security/bots-and-network/blocklists-ip-addresses-edge/', + body: 'Drop unwanted traffic before it reaches your application.', + }, + { + icon: 'pi pi-key', + title: 'Install TLS certificates', + href: '/en/documentation/guides/application-security/tls-and-certificates/create-a-digital-certificate/', + body: 'Upload a certificate and key, then check the handshake.', + }, + { + icon: 'pi pi-arrow-right-arrow-left', + title: 'Stream to SIEM', + href: '/en/documentation/products/secure/automate/integrate-siems/', + class: 'sm:col-span-2 lg:col-span-3', + body: 'Stream WAF and firewall events where your team watches.', + }, + ], + footer: { + prefix: 'Reference, when you need the details:', + links: [ + { label: 'DDoS Protection', href: '/en/documentation/platform/ddos-protection/' }, + { label: 'WAF Rule Sets', href: '/en/documentation/secure/waf/rules-set/' }, + { label: 'WAF Exceptions', href: '/en/documentation/secure/waf/custom-allowed-rules/' }, + { label: 'Bot Manager', href: '/en/documentation/secure/bot-manager/' }, + ], + }, + }, + + { + heading: { + depth: 2, + slug: 'assess-risk-and-prove-compliance', + text: 'Assess risk and prove compliance', + }, + intro: 'What the platform covers, what stays with you, and where the evidence lives when an auditor asks for it.', + cols: 3, + cards: [ + { + icon: 'pi pi-verified', + title: 'Shared Responsibility Model', + href: '/en/documentation/fundamentals/shared-responsibility/', + body: 'What Azion covers, and what stays yours.', + }, + { + icon: 'pi pi-id-card', + title: 'Governance, Risk and Compliance', + href: '/en/documentation/guides/application-security/access-and-compliance/governance-risk-compliance/', + body: 'The tools and certifications behind your compliance work.', + }, + { + icon: 'pi pi-wallet', + title: 'PCI DSS compliance', + href: '/en/documentation/fundamentals/pci-dss-certification/', + body: 'PCI DSS 4.0 Level 1, and what it covers for cardholder data.', + }, + { + icon: 'pi pi-lock', + title: 'SOC compliance', + href: '/en/documentation/fundamentals/soc/', + body: 'SOC 2 Type 2 and SOC 3 reports, twice a year.', + }, + { + icon: 'pi pi-history', + title: 'Activity History', + href: '/en/documentation/guides/platform/account-and-billing/activity-history/', + body: 'The audit trail: who changed what, and when.', + }, + { + icon: 'pi pi-users', + title: 'Security Response Team', + href: '/en/documentation/services/security-response-team/', + body: 'Azion mitigates on your behalf during an attack.', + }, + ], + footer: { + prefix: 'Access governance:', + links: [ + { label: 'Single Sign-On', href: '/en/documentation/fundamentals/single-sign-on/' }, + { label: 'Multi-Factor Authentication', href: '/en/documentation/fundamentals/multi-factor-authentication/' }, + { label: 'Teams Permissions', href: '/en/documentation/fundamentals/teams-permissions/' }, + { + label: 'Conditional Access', + href: '/en/documentation/guides/application-security/access-and-compliance/conditional-access-by-ip-address/', + }, + ], + }, + }, + + { + heading: { depth: 2, slug: 'follow-along', text: 'Follow along' }, + intro: 'Release notes as things ship, plus the blog, the YouTube channel, and the Discord where questions get answered.', + cols: 3, + cards: [ + { + icon: 'pi pi-megaphone', + title: 'Release notes', + href: '/en/documentation/changelog/', + body: 'What changed in Azion products, as it ships.', + }, + { + icon: 'pi pi-book', + title: 'Blog', + href: 'https://www.azion.com/en/blog/', + link: 'Read the blog', + target: '_blank', + body: 'Engineering posts and how customers run on Azion.', + }, + { + icon: 'pi pi-youtube', + title: 'YouTube', + href: 'https://www.youtube.com/aziontech', + link: 'Watch on YouTube', + target: '_blank', + body: 'Walkthroughs, demos, and recorded sessions.', + }, + { + icon: 'pi pi-discord', + title: 'Discord', + href: 'https://discord.com/invite/Yp9N7RMVZy', + link: 'Join the Discord', + target: '_blank', + body: 'Ask questions and compare notes with other builders.', + }, + { + icon: 'pi pi-pencil', + title: 'Style guide', + href: '/en/documentation/style-guide/', + class: 'sm:col-span-2 lg:col-span-2', + body: 'How Azion writes documentation: voice, structure, and conventions.', + }, + ], + }, + ], +}; diff --git a/src/data/docs-home/index.ts b/src/data/docs-home/index.ts new file mode 100644 index 0000000000..048d0f1a0f --- /dev/null +++ b/src/data/docs-home/index.ts @@ -0,0 +1,104 @@ +import { en } from './en'; +import { ptBr } from './pt-br'; +import type { DocsHomeContent, Heading, Lang, Section } from './types'; + +export type { Card, DocLink, DocsHomeContent, Heading, Lang, Section } from './types'; + +export const docsHome: Record = { + en, + 'pt-br': ptBr, +}; + +export const docsHomeLangs = Object.keys(docsHome) as Lang[]; + +/** + * The docs home is no longer an MDX file, so nothing generates its table of + * contents. Only the `##` sections used to reach `OnThisPage` — the `

` in + * the agent block is hand-written markup and never was a markdown heading — + * so the rail keeps exactly the entries it had. + */ +export function docsHomeHeadings(content: DocsHomeContent): Heading[] { + return [content.interfaceSection.heading, ...content.sections.map((section) => section.heading)]; +} + +function cardLines(section: Pick): string { + return section.cards + .map((card) => (card.body ? `- [${card.title}](${card.href}): ${card.body}` : `- [${card.title}](${card.href})`)) + .join('\n'); +} + +function footerLine(section: Section): string { + if (!section.footer) return ''; + const links = section.footer.links.map((link) => `[${link.label}](${link.href})`).join(', '); + return `\n\n${section.footer.prefix} ${links}`; +} + +/** + * Plain-markdown rendering of the page, for `/{lang}/{permalink}.md` and for + * the body field in `doc-all-data.json`. The MDX body used to be served raw — + * JSX imports and all — so this is the same content minus the markup noise. + */ +export function docsHomeMarkdown(content: DocsHomeContent): string { + const { hero, interfaceSection: intro } = content; + + const head = [`${hero.title}`, '', hero.description].join('\n'); + + const first = [ + `## ${intro.heading.text}`, + '', + intro.intro, + '', + `### ${intro.agent.title}`, + '', + intro.agent.body, + '', + cardLines(intro), + ].join('\n'); + + const rest = content.sections + .map((section) => + [`## ${section.heading.text}`, '', section.intro, '', cardLines(section)].join('\n') + footerLine(section), + ) + .join('\n\n'); + + return [head, first, rest].join('\n\n'); +} + +/** + * A stand-in for the collection entry the docs home used to be. The page moved + * to `src/pages`, but every docs endpoint still derives its output from the + * `docs` collection, so each one concatenates these entries to keep the home + * present in the search index, llms.txt, canonicals, path map and sitemap. + */ +export interface DocsHomeEntry { + id: string; + collection: 'docs'; + filePath: string; + body: string; + data: DocsHomeContent['meta']; +} + +export const docsHomeEntries: DocsHomeEntry[] = docsHomeLangs.map((lang) => ({ + id: docsHome[lang].id, + collection: 'docs', + filePath: docsHome[lang].filePath, + body: docsHomeMarkdown(docsHome[lang]), + data: docsHome[lang].meta, +})); + +/** The same entries keyed by language, for the endpoints that group by lang. */ +export const docsHomeEntryByLang = Object.fromEntries( + docsHomeEntries.map((entry) => [entry.id.split('/')[0] as Lang, entry]), +) as Record; + +/** + * Appends the docs home entries to a list of collection entries already + * grouped by language, so an endpoint keeps one call site instead of two. + */ +export function withDocsHome(grouped: Record): Record { + const merged: Record = { ...grouped }; + for (const lang of docsHomeLangs) { + merged[lang] = [...(merged[lang] ?? []), docsHomeEntryByLang[lang] as unknown as T]; + } + return merged; +} diff --git a/src/data/docs-home/pt-br.ts b/src/data/docs-home/pt-br.ts new file mode 100644 index 0000000000..0b6079e06f --- /dev/null +++ b/src/data/docs-home/pt-br.ts @@ -0,0 +1,312 @@ +import type { DocsHomeContent } from './types'; + +const AGENT_PROMPT = + 'Me ajude a configurar a Azion neste projeto. Faça o seguinte: 1. Instale a Azion CLI: curl -fsSL https://cli.azion.app/install.sh | bash. 2. Conecte o servidor MCP da Azion (https://mcp.azion.com) para pesquisar a documentação atual da Azion; configuração por ferramenta: https://www.azion.com/pt-br/documentacao/agent-setup/. 3. Revise o projeto e verifique se ele já está vinculado à Azion; se não estiver, execute azion link e siga as instruções. 4. Sugira os próximos passos mais relevantes.'; + +export const ptBr: DocsHomeContent = { + lang: 'pt-br', + id: 'pt-br/homes/doc-home', + filePath: 'src/pages/pt-br/documentacao/index.astro', + + meta: { + type: 'base', + i18nReady: false, + title: 'Página Inicial da Documentação', + description: + 'Azion é a plataforma de edge computing full-stack que simplifica como você constrói, protege e escala aplicações modernas.', + namespace: 'documentation_home', + permalink: '/documentacao/', + page_header: false, + meta_tag_robots_no_index: false, + }, + + hero: { + title: 'Bem-vindo à Documentação Azion', + description: + 'Tornamos toda aplicação rápida e confiável. Faça o deploy em uma rede global, com segurança de nível corporativo e sem cold starts.', + buttonLabel: 'Começar', + buttonLink: '/pt-br/documentacao/primeiro-deploy/', + note: 'O prompt entrega ao seu agente de código a CLI, a documentação ao vivo via MCP e este projeto vinculado.', + prompt: AGENT_PROMPT, + promptLabel: 'Copiar prompt', + promptCopiedLabel: 'Prompt copiado!', + promptTooltip: 'Copia um prompt de configuração para sua ferramenta de IA', + }, + + interfaceSection: { + heading: { depth: 2, slug: 'comece-pela-interface', text: 'Comece pela interface' }, + intro: 'Entregue o Console a um agente de código, ou conduza você mesmo: visualmente, pelo terminal ou pela API.', + agent: { + id: 'your-ai-agent-fluent-in-azion', + title: 'Seu agente de IA, fluente em Azion', + body: 'Um prompt ensina a plataforma a qualquer agente de código: nomes atuais dos produtos, documentação ao vivo pelo servidor MCP da Azion e deploys reais com a CLI.', + copyLabel: 'Copiar prompt', + copiedLabel: 'Prompt copiado!', + tooltip: 'Copia um prompt de configuração para sua ferramenta de IA', + prompt: AGENT_PROMPT, + }, + guided: { + title: 'Prefere o caminho guiado?', + buttonLabel: 'Configurar agente', + buttonHref: '/pt-br/documentacao/agent-setup/', + }, + cols: 3, + cards: [ + { + icon: 'ai ai-azion', + title: 'Console', + href: '/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/', + link: 'Acessar o Console', + body: 'Configure visualmente: aplicações, regras de firewall, métricas e eventos.', + }, + { + icon: 'ai ai-azion-cli', + title: 'CLI', + href: '/pt-br/documentacao/devtools/cli/', + link: 'Instalar a CLI', + body: 'Fique no terminal: vincule um projeto, execute localmente e faça o deploy com um único binário.', + }, + { + icon: 'ai ai-azion-api', + title: 'API', + href: '/pt-br/documentacao/devtools/api/', + link: 'Chamar a API', + class: 'sm:col-span-2 lg:col-span-1', + body: 'Controle a partir dos seus sistemas: crie e altere recursos via REST, com autenticação por token.', + }, + ], + }, + + sections: [ + { + heading: { depth: 2, slug: 'comece-pelo-objetivo', text: 'Comece pelo objetivo' }, + intro: 'Construa algo, deixe mais rápido, proteja ou rode IA em cima.', + cols: 2, + cards: [ + { + icon: 'ai ai-build-pillar', + title: 'Construa sua aplicação', + href: '/pt-br/documentacao/primeiro-deploy/', + body: 'Faça o deploy a partir de um template, de um repositório ou da CLI.', + }, + { + icon: 'pi pi-gauge', + title: 'Acelere sua aplicação', + href: '/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/cache-settings/', + body: 'Armazene respostas em cache para que a origem pare de se repetir.', + }, + { + icon: 'ai ai-secure-pillar', + title: 'Proteja sua aplicação', + href: '/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/proteja-seu-dominio/', + body: 'Um firewall na frente, com uma regra de bloqueio que você pode verificar.', + }, + { + icon: 'ai ai-ai-pillar', + title: 'Execute inferência de IA', + href: '/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/frameworks/ai-inference-starter-kit/', + body: 'Um modelo hospedado atrás de um endpoint compatível com OpenAI.', + }, + ], + footer: { + prefix: 'Também útil:', + links: [ + { label: 'Observe', href: '/pt-br/documentacao/observe/data-stream/' }, + { label: 'Arquiteturas', href: '/pt-br/documentacao/guias/?kind=reference-architecture' }, + ], + }, + }, + + { + heading: { depth: 2, slug: 'templates-prontos', text: 'Templates prontos' }, + intro: 'Faça o deploy em um passo, com CI/CD já configurado.', + cols: 4, + mobileCols: 2, + cards: [ + { icon: 'ai ai-react', title: 'React', href: '/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/frameworks/react-boilerplate/' }, + { icon: 'ai ai-next', title: 'Next.js', href: '/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/frameworks/nextjs-static-boilerplate/' }, + { icon: 'ai ai-astro', title: 'Astro', href: '/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/frameworks/astro-boilerplate/' }, + { icon: 'ai ai-vue', title: 'Vue.js', href: '/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/frameworks/vue-vite-boilerplate/' }, + { icon: 'ai ai-angular', title: 'Angular', href: '/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/frameworks/angular-boilerplate/' }, + { icon: 'ai ai-gatsby', title: 'Gatsby Blog', href: '/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/frameworks/gatsby/' }, + { icon: 'ai ai-hono', title: 'Hono', href: '/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/frameworks/hono/' }, + { icon: 'ai ai-hugo', title: 'Hugo', href: '/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/frameworks/hugo-boilerplate/' }, + ], + footer: { + prefix: 'Também útil:', + links: [ + { label: 'Primeiro deploy', href: '/pt-br/documentacao/primeiro-deploy/' }, + { + label: 'Compatibilidade de frameworks', + href: '/pt-br/documentacao/devtools/runtime/frameworks/compatibilidade-frameworks/', + }, + ], + }, + }, + + { + heading: { depth: 2, slug: 'pare-ataques', text: 'Pare ataques' }, + intro: 'Tudo o que você precisa para proteger aplicações, APIs e o tráfego que chega até elas.', + cols: 3, + cards: [ + { + icon: 'ai ai-edge-firewall', + title: 'Adicione um firewall', + href: '/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/trabalhar-com-rules-engine/', + body: 'Vincule-o ao seu workload e comprove uma regra de bloqueio com curl.', + }, + { + icon: 'ai ai-waf-rules', + title: 'Bloqueie ataques de injeção', + href: '/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/criar-waf-rule-set/', + body: 'Um conjunto de regras contra SQL Injection, com os bloqueios visíveis nos eventos.', + }, + { + icon: 'pi pi-list-check', + title: 'Ajuste falsos positivos', + href: '/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/tune-waf/', + body: 'Transforme falsos positivos do WAF em regras permitidas.', + }, + { + icon: 'pi pi-microchip', + title: 'Negue bots maliciosos', + href: '/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/integracoes/bot-manager-lite/', + body: 'Negue requisições automatizadas com pontuação acima do seu limite.', + }, + { + icon: 'pi pi-map', + title: 'Listas de bloqueio de rede', + href: '/pt-br/documentacao/guias/seguranca-de-aplicacoes/bots-e-rede/blocklists-enderecos-ip-edge/', + body: 'Descarte tráfego indesejado antes que ele chegue à sua aplicação.', + }, + { + icon: 'pi pi-key', + title: 'Instale certificados TLS', + href: '/pt-br/documentacao/guias/seguranca-de-aplicacoes/tls-e-certificados/criar-certificado-digital/', + body: 'Envie um certificado e uma chave e verifique o handshake.', + }, + { + icon: 'pi pi-arrow-right-arrow-left', + title: 'Envie para um SIEM', + href: '/pt-br/documentacao/produtos/secure/automatizar/integrar-siems/', + class: 'sm:col-span-2 lg:col-span-3', + body: 'Transmita eventos do WAF e do firewall para onde sua equipe acompanha.', + }, + ], + footer: { + prefix: 'Referência, quando você precisar dos detalhes:', + links: [ + { label: 'DDoS Protection', href: '/pt-br/documentacao/plataforma/ddos-protection/' }, + { label: 'WAF Rule Sets', href: '/pt-br/documentacao/secure/waf/rule-sets/' }, + { label: 'WAF Exceptions', href: '/pt-br/documentacao/secure/waf/custom-allowed-rules/' }, + { label: 'Bot Manager', href: '/pt-br/documentacao/secure/bot-manager/' }, + ], + }, + }, + + { + heading: { + depth: 2, + slug: 'avalie-riscos-e-comprove-conformidade', + text: 'Avalie riscos e comprove conformidade', + }, + intro: 'O que a plataforma cobre, o que fica com você e onde estão as evidências quando um auditor pedir.', + cols: 3, + cards: [ + { + icon: 'pi pi-verified', + title: 'Modelo de Responsabilidade Compartilhada', + href: '/pt-br/documentacao/fundamentos/responsabilidade-compartilhada/', + body: 'O que a Azion cobre e o que continua sendo seu.', + }, + { + icon: 'pi pi-id-card', + title: 'Governança, Risco e Conformidade', + href: '/pt-br/documentacao/guias/seguranca-de-aplicacoes/acesso-e-compliance/governanca-risco-conformidade/', + body: 'As ferramentas e certificações por trás do seu trabalho de conformidade.', + }, + { + icon: 'pi pi-wallet', + title: 'Conformidade PCI DSS', + href: '/pt-br/documentacao/fundamentos/pci-dss-certification/', + body: 'PCI DSS 4.0 Nível 1 e o que ele cobre para dados de portadores de cartão.', + }, + { + icon: 'pi pi-lock', + title: 'Conformidade SOC', + href: '/pt-br/documentacao/fundamentos/soc/', + body: 'Relatórios SOC 2 Tipo 2 e SOC 3, duas vezes por ano.', + }, + { + icon: 'pi pi-history', + title: 'Histórico de Atividades', + href: '/pt-br/documentacao/guias/plataforma/conta-e-billing/activity-history/', + body: 'A trilha de auditoria: quem alterou o quê, e quando.', + }, + { + icon: 'pi pi-users', + title: 'Equipe de Resposta de Segurança', + href: '/pt-br/documentacao/servicos/security-response-team/', + body: 'A Azion mitiga em seu nome durante um ataque.', + }, + ], + footer: { + prefix: 'Governança de acesso:', + links: [ + { label: 'Single Sign-On', href: '/pt-br/documentacao/fundamentos/single-sign-on/' }, + { label: 'Multi-Factor Authentication', href: '/pt-br/documentacao/fundamentos/multi-factor-authentication/' }, + { label: 'Teams Permissions', href: '/pt-br/documentacao/fundamentos/teams-permissions/' }, + { + label: 'Acesso Condicional', + href: '/pt-br/documentacao/guias/seguranca-de-aplicacoes/acesso-e-compliance/conditional-access-by-ip-address/', + }, + ], + }, + }, + + { + heading: { depth: 2, slug: 'acompanhe', text: 'Acompanhe' }, + intro: 'Notas de release conforme as novidades são lançadas, além do blog, do canal no YouTube e do Discord onde as dúvidas são respondidas.', + cols: 3, + cards: [ + { + icon: 'pi pi-megaphone', + title: 'Notas de release', + href: '/pt-br/documentacao/changelog/', + body: 'O que mudou nos produtos Azion, assim que é lançado.', + }, + { + icon: 'pi pi-book', + title: 'Blog', + href: 'https://www.azion.com/pt-br/blog/', + link: 'Ler o blog', + target: '_blank', + body: 'Posts de engenharia e como os clientes rodam na Azion.', + }, + { + icon: 'pi pi-youtube', + title: 'YouTube', + href: 'https://www.youtube.com/aziontech', + link: 'Assistir no YouTube', + target: '_blank', + body: 'Passo a passo, demos e sessões gravadas.', + }, + { + icon: 'pi pi-discord', + title: 'Discord', + href: 'https://discord.com/invite/Yp9N7RMVZy', + link: 'Entrar no Discord', + target: '_blank', + body: 'Tire dúvidas e troque experiências com outros desenvolvedores.', + }, + { + icon: 'pi pi-pencil', + title: 'Guia de estilo', + href: '/pt-br/documentacao/guia-de-estilo/', + class: 'sm:col-span-2 lg:col-span-2', + body: 'Como a Azion escreve documentação: voz, estrutura e convenções.', + }, + ], + }, + ], +}; diff --git a/src/data/docs-home/types.ts b/src/data/docs-home/types.ts new file mode 100644 index 0000000000..50d5dca12d --- /dev/null +++ b/src/data/docs-home/types.ts @@ -0,0 +1,116 @@ +/** + * The docs home used to be an MDX entry in the `docs` collection. It is now a + * pair of real Astro pages, so its copy lives here as structured data: one + * module per language, one component rendering both, and one synthetic + * collection entry keeping the JSON/llms/canonical/sitemap endpoints whole. + */ + +import type { DocCardGroupCols, DocCardGroupMobileCols } from '@aziontech/webkit/doc-card-group'; + +export type Lang = 'en' | 'pt-br'; + +/** An inline link in the "Also useful:" line that closes most sections. */ +export interface DocLink { + label: string; + href: string; +} + +export interface Card { + icon: string; + title: string; + href: string; + /** Call-to-action label. Cards without one render title + body only. */ + link?: string; + target?: '_self' | '_blank'; + /** Column spans for the cards that stretch across a row. */ + class?: string; + body?: string; +} + +/** The trailing line of links some sections carry, e.g. "Also useful: …". */ +export interface SectionFooter { + prefix: string; + links: DocLink[]; +} + +export interface Section { + heading: Heading; + intro: string; + cols: DocCardGroupCols; + mobileCols?: DocCardGroupMobileCols; + cards: Card[]; + footer?: SectionFooter; +} + +/** Mirrors Astro's `MarkdownHeading`, which is what `OnThisPage` consumes. */ +export interface Heading { + depth: number; + slug: string; + text: string; +} + +export interface Hero { + title: string; + description: string; + buttonLabel: string; + buttonLink: string; + note: string; + prompt: string; + promptLabel: string; + promptCopiedLabel: string; + promptTooltip: string; +} + +/** + * The first section carries a bespoke two-pane block above its cards, so it is + * typed apart from the uniform card sections that follow it. + */ +export interface InterfaceSection { + heading: Heading; + intro: string; + agent: { + id: string; + title: string; + body: string; + copyLabel: string; + copiedLabel: string; + tooltip: string; + prompt: string; + }; + guided: { + title: string; + buttonLabel: string; + buttonHref: string; + }; + cols: DocCardGroupCols; + cards: Card[]; +} + +/** + * The frontmatter the layouts used to read off the collection entry. `type` and + * `i18nReady` carry the defaults `baseSchema` used to apply, so the shape still + * satisfies `CollectionEntry<'docs'>['data']`. + */ +export interface DocsHomeMeta { + type: 'base'; + i18nReady: boolean; + title: string; + description: string; + meta_tags?: string; + namespace: string; + permalink: string; + page_header: false; + meta_tag_robots_no_index: false; +} + +export interface DocsHomeContent { + lang: Lang; + /** Collection id the deleted MDX used to have; endpoints still key off it. */ + id: string; + /** Path the deleted MDX used to have, for the "edit this page" link. */ + filePath: string; + meta: DocsHomeMeta; + hero: Hero; + interfaceSection: InterfaceSection; + sections: Section[]; +} diff --git a/src/layouts/MainLayout.astro b/src/layouts/MainLayout.astro index d81fd991e6..203c66efb6 100644 --- a/src/layouts/MainLayout.astro +++ b/src/layouts/MainLayout.astro @@ -5,7 +5,6 @@ import type {CollectionEntry} from 'astro:content'; import PageContent from '~/components/PageContent/PageContent.astro'; import RightSidebar from '~/components/RightSidebar/RightSidebar.astro'; -import {useTranslations} from '~/i18n/util'; import {getGithubEditUrl} from '~/util/getGithubEditUrl'; // import generateToc from '~/util/generateToc'; import { getLanguageFromURL } from '~/util'; @@ -17,9 +16,10 @@ export interface Props { content: CollectionEntry<'docs'>['data']; headings: MarkdownHeading[]; id?: String; + /** Set by pages outside the `docs` collection, for the GitHub edit link. */ + editFilePath?: string; } -const t = useTranslations(Astro); const {content, headings} = Astro.props; const lang = getLanguageFromURL(Astro.url.pathname) as Lang; diff --git a/src/nav/exempt.json b/src/nav/exempt.json index 13c4fca978..8c5cd2831e 100644 --- a/src/nav/exempt.json +++ b/src/nav/exempt.json @@ -1,5 +1,4 @@ { - "documentation_home": "the documentation home renders the root catalog", "documentation_coming_soon": "the shared landing page every not-yet-written section points at", "documentation_first_deploy": "reached from the home call to action, not listed in the sidebar" } diff --git a/src/pages/[lang]/[...slug].md.js b/src/pages/[lang]/[...slug].md.js index 0b49d3986c..39ef9bb850 100644 --- a/src/pages/[lang]/[...slug].md.js +++ b/src/pages/[lang]/[...slug].md.js @@ -1,5 +1,6 @@ import { allPages } from '~/content'; import { getLangFromSlug, stripLangFromSlug, getSlugFromPermalink } from '~/util'; +import { docsHomeEntries } from '~/data/docs-home'; function removeFrontMatter(body) { return body.replace(/^---[\s\S]*?---\n?/, ''); @@ -64,7 +65,7 @@ function getMarkdownBasedOnCards(title, description, productCards) { } export async function getStaticPaths() { - return allPages.map((page) => { + return [...allPages, ...docsHomeEntries].map((page) => { const permalink = getSlugFromPermalink(page); const lang = getLangFromSlug(page.id); const slug = typeof permalink === 'string' ? permalink : stripLangFromSlug(page.id); diff --git a/src/pages/[lang]/doc-all-data.json.js b/src/pages/[lang]/doc-all-data.json.js index 9ddff49854..d90cf039a0 100644 --- a/src/pages/[lang]/doc-all-data.json.js +++ b/src/pages/[lang]/doc-all-data.json.js @@ -1,10 +1,13 @@ import { allPages } from "~/content"; import { removeTrailingSlash, removeLeadingSlash } from "~/util"; import { groupPagesByLang } from "~/util/groupPagesByLang"; +import { withDocsHome } from "~/data/docs-home"; const langs = ['en', 'pt-br'] const data = {} -const pagesData = groupPagesByLang(allPages) +// The docs home is a page in `src/pages`, not a collection entry, so it is +// merged back in here to keep it in the feed. +const pagesData = withDocsHome(groupPagesByLang(allPages)) langs.forEach((lang) => { if (!pagesData[lang]) return diff --git a/src/pages/[lang]/doc-canonicals.json.js b/src/pages/[lang]/doc-canonicals.json.js index 8c28ba664f..d6650e9e00 100644 --- a/src/pages/[lang]/doc-canonicals.json.js +++ b/src/pages/[lang]/doc-canonicals.json.js @@ -4,9 +4,12 @@ import { groupPagesByLang } from '~/util/groupPagesByLang.ts' import { removeTrailingLeadingSlashs } from '~/util/removeSlashs' import { mapi18nByNamespace } from '~/util/mapi18n' import { getHreflangDefault } from '~/util/getHreflangDefault' +import { docsHomeEntries } from '~/data/docs-home' const collections = { - docs: await getCollection('docs', ({ data }) => data.draft !== true) + // `docsHomeEntries` stands in for the docs home, which is a page in + // `src/pages` now and so no longer comes back from the collection. + docs: [...(await getCollection('docs', ({ data }) => data.draft !== true)), ...docsHomeEntries] }; function getAlternateFromUrl(i18nPages) { diff --git a/src/pages/[lang]/docs-llms.txt.js b/src/pages/[lang]/docs-llms.txt.js index e955c8d3c2..dead42e7f2 100644 --- a/src/pages/[lang]/docs-llms.txt.js +++ b/src/pages/[lang]/docs-llms.txt.js @@ -3,6 +3,7 @@ import { getCollection } from 'astro:content' import { groupPagesByLang } from '~/util/groupPagesByLang' import { removeTrailingLeadingSlashs } from '~/util/removeSlashs' import { SITE_URL } from '~/consts' +import { withDocsHome } from '~/data/docs-home' function buildLinks(collection, lang) { let content = '' @@ -23,7 +24,7 @@ export async function getStaticPaths() { lang: lang }, props: { - docs: groupPagesByLang(docs) + docs: withDocsHome(groupPagesByLang(docs)) } } }) diff --git a/src/pages/[lang]/docs-path-by-url.json.js b/src/pages/[lang]/docs-path-by-url.json.js index 314328f828..38c7341c62 100644 --- a/src/pages/[lang]/docs-path-by-url.json.js +++ b/src/pages/[lang]/docs-path-by-url.json.js @@ -3,6 +3,7 @@ import { getCollection } from 'astro:content'; import { SITE_URL } from '~/consts'; import { groupPagesByLang } from '~/util/groupPagesByLang'; import { removeTrailingLeadingSlashs } from '~/util/removeSlashs'; +import { withDocsHome } from '~/data/docs-home'; const paths = { @@ -11,7 +12,7 @@ const paths = { const pages = { docs: await getCollection('docs', ({ data }) => data.draft !== true) }; -const docsByLang = groupPagesByLang(pages.docs); +const docsByLang = withDocsHome(groupPagesByLang(pages.docs)); export async function getStaticPaths() { return ['en', 'pt-br'].map((lang) => ({ @@ -29,12 +30,6 @@ export async function GET({ params, props }) { } = props; const docsData = docs.map(({ data: page, collection, id, filePath }) => { - const docsSlug = { - 'en': 'documentation', - 'pt-br': 'documentacao', - }; - const lang = id.split('/')[0]; - const slug = docsSlug[lang]; const permalink = `${params.lang}/${removeTrailingLeadingSlashs(page.permalink)}`; const namespace = page.namespace diff --git a/src/pages/[lang]/sitemap/docs.xml.js b/src/pages/[lang]/sitemap/docs.xml.js index 3e9d3189f2..dd564a863a 100644 --- a/src/pages/[lang]/sitemap/docs.xml.js +++ b/src/pages/[lang]/sitemap/docs.xml.js @@ -1,10 +1,13 @@ import { allPages } from "~/content"; import { removeTrailingSlash, removeLeadingSlash } from "~/util"; import { groupPagesByLang } from "~/util/groupPagesByLang"; +import { withDocsHome } from "~/data/docs-home"; const langs = ['en', 'pt-br'] const data = {} -const pagesData = groupPagesByLang(allPages) +// The docs home is a page in `src/pages`, not a collection entry, so it is +// merged back in here to keep it in the sitemap. +const pagesData = withDocsHome(groupPagesByLang(allPages)) langs.forEach((lang) => { if (!pagesData[lang]) return diff --git a/src/pages/en/documentation/index.astro b/src/pages/en/documentation/index.astro new file mode 100644 index 0000000000..6c38ca0ea6 --- /dev/null +++ b/src/pages/en/documentation/index.astro @@ -0,0 +1,23 @@ +--- +/** + * The English docs home. It used to be `src/content/docs/en/homes/home-docs.mdx` + * and reached this URL through `[lang]/[...slug].astro`; it is a real page now, + * and Astro prefers this static route over the catch-all. Its metadata and copy + * live in `~/data/docs-home`, which also feeds the synthetic collection entry + * the docs endpoints still need. + */ +import DocsHome from '~/components/homes/DocsHome.astro'; +import MainLayout from '~/layouts/MainLayout.astro'; +import { docsHome, docsHomeHeadings } from '~/data/docs-home'; + +const content = docsHome.en; +--- + + + + diff --git a/src/pages/pt-br/documentacao/index.astro b/src/pages/pt-br/documentacao/index.astro new file mode 100644 index 0000000000..7a20e44603 --- /dev/null +++ b/src/pages/pt-br/documentacao/index.astro @@ -0,0 +1,23 @@ +--- +/** + * The pt-br docs home. It used to be `src/content/docs/pt-br/homes/doc-home.mdx` + * and reached this URL through `[lang]/[...slug].astro`; it is a real page now, + * and Astro prefers this static route over the catch-all. Its metadata and copy + * live in `~/data/docs-home`, which also feeds the synthetic collection entry + * the docs endpoints still need. + */ +import DocsHome from '~/components/homes/DocsHome.astro'; +import MainLayout from '~/layouts/MainLayout.astro'; +import { docsHome, docsHomeHeadings } from '~/data/docs-home'; + +const content = docsHome['pt-br']; +--- + + + + diff --git a/src/util/getGithubEditUrl.ts b/src/util/getGithubEditUrl.ts index 27300158bc..634a0f5a73 100644 --- a/src/util/getGithubEditUrl.ts +++ b/src/util/getGithubEditUrl.ts @@ -9,7 +9,10 @@ export function getGithubEditUrl(Astro: Readonly) { const currentPage = Astro.url.pathname; const currentFileId = Astro.props.id; const lang = getLanguageFromURL(currentPage); - const filePath = `src/content/docs/${currentFileId.replace(/\/$/, '')}`; + // Pages that live in `src/pages` rather than the collection pass their own + // path, since their id no longer names a file under `src/content/docs`. + const editFilePath = Astro.props.editFilePath as string | undefined; + const filePath = editFilePath ?? `src/content/docs/${currentFileId.replace(/\/$/, '')}`; const currentFile = isFallback ? filePath.replace(`/${lang}/`, '/en/') : filePath; const githubEditUrl = content.githubURL && (lang === 'en' || isFallback) diff --git a/src/util/getPageTranslations.ts b/src/util/getPageTranslations.ts index cd12b7f493..e2c187fc19 100644 --- a/src/util/getPageTranslations.ts +++ b/src/util/getPageTranslations.ts @@ -1,5 +1,6 @@ import { getLangFromSlug, normalizePathSlashes, removeLeadingSlash, removeTrailingSlash } from '~/util' import { getCollection } from 'astro:content'; +import { docsHomeEntries } from '~/data/docs-home'; interface LanguageSelector { slug: string; @@ -7,7 +8,13 @@ interface LanguageSelector { } export const getTranslatedPagesByNamespace = async (namespace: string): Promise => { - const translatePageData = await getCollection('docs', ({ data }) => data.namespace == namespace) + const collectionPages = await getCollection('docs', ({ data }) => data.namespace == namespace) + // The docs home lives in `src/pages`, so its namespace has to be matched here + // as well or the language switcher loses one side of the pair. + const translatePageData = [ + ...collectionPages, + ...docsHomeEntries.filter((entry) => entry.data.namespace === namespace), + ] const mappedPageData = translatePageData .filter(page => page.data.permalink) From dfb806f097169f593292d25da43afb73815baa29 Mon Sep 17 00:00:00 2001 From: Bruno Germano Date: Thu, 10 Sep 2026 10:46:44 -0300 Subject: [PATCH 03/33] refactor(webkit): type three components' props and stop overriding design-system styles A From add0d3538bb24376da209278940547d361eba81d Mon Sep 17 00:00:00 2001 From: Bruno Germano Date: Thu, 10 Sep 2026 10:46:52 -0300 Subject: [PATCH 04/33] fix(asides): stop the directive-label lookup throwing on an empty label remove()'s callback indexed child.children[0] without checking the array had anything in it, so an aside written with an empty label threw a TypeError mid-transform. Narrowing the node properly also settles the `unknown` type the `in` check left behind. Verified equivalent on a real labelled aside. Co-Authored-By: Claude Opus 5 --- integrations/astro-asides.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/integrations/astro-asides.ts b/integrations/astro-asides.ts index b547b52afe..23b4fa51ca 100644 --- a/integrations/astro-asides.ts +++ b/integrations/astro-asides.ts @@ -49,8 +49,12 @@ function remarkAsides(): unified.Plugin<[], mdast.Root> { let title: string | undefined; remove(node, (child) => { if (child.data?.directiveLabel) { - if ('children' in child && 'value' in child.children[0]) { - title = child.children[0].value; + // The label arrives as a paragraph whose first child is a text node; + // `in` alone leaves `children` as `unknown`, so narrow it for real. + const children = 'children' in child ? child.children : undefined; + const first = Array.isArray(children) ? children[0] : undefined; + if (first && typeof first === 'object' && 'value' in first && typeof first.value === 'string') { + title = first.value; } return true; } From 2c48c196f9da1b57980a1c76bbf261835a3ab169 Mon Sep 17 00:00:00 2001 From: Bruno Germano Date: Thu, 10 Sep 2026 10:46:52 -0300 Subject: [PATCH 05/33] fix(pricing): pass the current language to the community links was rendered with no lang, so it fell back to its 'en' default and the pt-br pricing page showed English community links. Co-Authored-By: Claude Opus 5 --- src/components/RightSidebar/PricingRightSidebar.astro | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/RightSidebar/PricingRightSidebar.astro b/src/components/RightSidebar/PricingRightSidebar.astro index 17f736db15..d9bd16d703 100644 --- a/src/components/RightSidebar/PricingRightSidebar.astro +++ b/src/components/RightSidebar/PricingRightSidebar.astro @@ -1,10 +1,12 @@ --- import ContributeMenu from './ContributeMenu.astro'; import { useTranslations } from '~/i18n/util'; +import { getLanguageFromURL } from '~/util'; import PricingTableOfContents from './PricingTableOfContents.vue'; import Community from '~/components/webkit/Community.vue'; const t = useTranslations(Astro); +const lang = getLanguageFromURL(Astro.url.pathname) || 'en'; const i18n = { initialHeadingTitle: t('rightSidebar.overview'), title: t('rightSidebar.onThisPage') @@ -35,6 +37,6 @@ const { content, headings, githubEditUrl } = Astro.props; /> - + \ No newline at end of file From 324c2f7ce4f72aee05f76c7c2038f025244d524d Mon Sep 17 00:00:00 2001 From: Bruno Germano Date: Thu, 10 Sep 2026 10:47:00 -0300 Subject: [PATCH 06/33] refactor(scripts): use type-only imports where verbatimModuleSyntax requires them LinkCheckerOptions, CheckHtmlPageContext and AllPagesByPathname are interfaces, so they have to be imported with `import type`. Also attaches the caught error as `cause` when build-index rethrows, which the lint rules now require. Co-Authored-By: Claude Opus 5 --- scripts/lib/linkcheck/checks/canonical-url.ts | 3 ++- scripts/lib/linkcheck/checks/good-link-label.ts | 3 ++- scripts/lib/linkcheck/checks/relative-url.ts | 3 ++- scripts/lib/linkcheck/checks/same-language.ts | 3 ++- scripts/lib/linkcheck/checks/target-exists.ts | 3 ++- scripts/lib/linkcheck/steps/build-index.ts | 10 +++++++--- scripts/lib/linkcheck/steps/find-issues.ts | 3 ++- scripts/lib/linkcheck/steps/optional-autofix.ts | 3 ++- scripts/lint-linkcheck.ts | 3 ++- 9 files changed, 23 insertions(+), 11 deletions(-) diff --git a/scripts/lib/linkcheck/checks/canonical-url.ts b/scripts/lib/linkcheck/checks/canonical-url.ts index d75965abe0..ff08eb64c9 100644 --- a/scripts/lib/linkcheck/checks/canonical-url.ts +++ b/scripts/lib/linkcheck/checks/canonical-url.ts @@ -1,6 +1,7 @@ import kleur from 'kleur'; import { dedentMd } from '../../output.mjs'; -import { CheckBase, CheckHtmlPageContext } from '../base/check'; +import { CheckBase } from '../base/check'; +import type { CheckHtmlPageContext } from '../base/check'; import { IssueType } from '../base/issue'; export interface CanonicalUrlOptions { diff --git a/scripts/lib/linkcheck/checks/good-link-label.ts b/scripts/lib/linkcheck/checks/good-link-label.ts index 514bb4c05e..5f79922087 100644 --- a/scripts/lib/linkcheck/checks/good-link-label.ts +++ b/scripts/lib/linkcheck/checks/good-link-label.ts @@ -1,7 +1,8 @@ import { DomUtils } from 'htmlparser2'; import kleur from 'kleur'; import { dedentMd } from '../../output.mjs'; -import { CheckBase, CheckHtmlPageContext } from '../base/check'; +import { CheckBase } from '../base/check'; +import type { CheckHtmlPageContext } from '../base/check'; import { IssueType } from '../base/issue'; /** List of labels that are insufficiently descriptive for a link. */ diff --git a/scripts/lib/linkcheck/checks/relative-url.ts b/scripts/lib/linkcheck/checks/relative-url.ts index eed94e5fde..41c48c8b16 100644 --- a/scripts/lib/linkcheck/checks/relative-url.ts +++ b/scripts/lib/linkcheck/checks/relative-url.ts @@ -1,5 +1,6 @@ import kleur from 'kleur'; -import { CheckBase, CheckHtmlPageContext } from '../base/check'; +import { CheckBase } from '../base/check'; +import type { CheckHtmlPageContext } from '../base/check'; import { IssueType } from '../base/issue'; export class RelativeUrl extends CheckBase { diff --git a/scripts/lib/linkcheck/checks/same-language.ts b/scripts/lib/linkcheck/checks/same-language.ts index ca5d7257fc..33d04cb7af 100644 --- a/scripts/lib/linkcheck/checks/same-language.ts +++ b/scripts/lib/linkcheck/checks/same-language.ts @@ -1,6 +1,7 @@ import kleur from 'kleur'; import { dedentMd } from '../../output.mjs'; -import { CheckBase, CheckHtmlPageContext } from '../base/check'; +import { CheckBase } from '../base/check'; +import type { CheckHtmlPageContext } from '../base/check'; import { IssueType } from '../base/issue'; export interface SameLanguageOptions { diff --git a/scripts/lib/linkcheck/checks/target-exists.ts b/scripts/lib/linkcheck/checks/target-exists.ts index c3929052d6..f3d33e4190 100644 --- a/scripts/lib/linkcheck/checks/target-exists.ts +++ b/scripts/lib/linkcheck/checks/target-exists.ts @@ -1,6 +1,7 @@ import kleur from 'kleur'; import { dedentMd } from '../../output.mjs'; -import { CheckBase, CheckHtmlPageContext } from '../base/check'; +import { CheckBase } from '../base/check'; +import type { CheckHtmlPageContext } from '../base/check'; import { IssueType } from '../base/issue'; export class TargetExists extends CheckBase { diff --git a/scripts/lib/linkcheck/steps/build-index.ts b/scripts/lib/linkcheck/steps/build-index.ts index d2c3a1d7be..14ebb87f53 100644 --- a/scripts/lib/linkcheck/steps/build-index.ts +++ b/scripts/lib/linkcheck/steps/build-index.ts @@ -2,7 +2,8 @@ import fs from 'fs'; import path from 'path'; import { dedentMd } from '../../output.mjs'; import type { LinkCheckerOptions } from '../base/base'; -import { AllPagesByPathname, HtmlPage } from '../base/page'; +import { HtmlPage } from '../base/page'; +import type { AllPagesByPathname } from '../base/page'; /** * Reads sitemaps from the build output and extracts all unique pathnames. @@ -60,8 +61,11 @@ function parsePage(pathname: string, options: LinkCheckerOptions): HtmlPage { return htmlPage; } catch (err: unknown) { - throw new Error(dedentMd`Error parsing HTML file "${htmlFilePath}" - referenced by sitemap: ${err instanceof Error ? err.message : err}`); + throw new Error( + dedentMd`Error parsing HTML file "${htmlFilePath}" + referenced by sitemap: ${err instanceof Error ? err.message : err}`, + { cause: err }, + ); } } diff --git a/scripts/lib/linkcheck/steps/find-issues.ts b/scripts/lib/linkcheck/steps/find-issues.ts index 9b56ee316f..4bc5bc1798 100644 --- a/scripts/lib/linkcheck/steps/find-issues.ts +++ b/scripts/lib/linkcheck/steps/find-issues.ts @@ -1,7 +1,8 @@ import fs from 'fs'; import path from 'path'; import { dedentMd } from '../../output.mjs'; -import { indexOfHref, LinkCheckerOptions, LinkCheckerState } from '../base/base'; +import { indexOfHref, LinkCheckerState } from '../base/base'; +import type { LinkCheckerOptions } from '../base/base'; import type { LinkIssue } from '../base/issue'; import type { AllPagesByPathname, HtmlPage } from '../base/page'; diff --git a/scripts/lib/linkcheck/steps/optional-autofix.ts b/scripts/lib/linkcheck/steps/optional-autofix.ts index 1f8b53bbb6..6250bae431 100644 --- a/scripts/lib/linkcheck/steps/optional-autofix.ts +++ b/scripts/lib/linkcheck/steps/optional-autofix.ts @@ -1,7 +1,8 @@ import fs from 'fs'; import kleur from 'kleur'; import { dedentMd, formatCount } from '../../output.mjs'; -import { LinkCheckerOptions, LinkCheckerState, replaceHrefs } from '../base/base'; +import { LinkCheckerState, replaceHrefs } from '../base/base'; +import type { LinkCheckerOptions } from '../base/base'; import type { LinkIssue } from '../base/issue'; /** diff --git a/scripts/lint-linkcheck.ts b/scripts/lint-linkcheck.ts index e8dbbfed19..c495b2afdd 100644 --- a/scripts/lint-linkcheck.ts +++ b/scripts/lint-linkcheck.ts @@ -1,4 +1,5 @@ -import { LinkCheckerOptions, LinkCheckerState } from './lib/linkcheck/base/base'; +import { LinkCheckerState } from './lib/linkcheck/base/base'; +import type { LinkCheckerOptions } from './lib/linkcheck/base/base'; import { CanonicalUrl } from './lib/linkcheck/checks/canonical-url'; import { GoodLabels } from './lib/linkcheck/checks/good-link-label'; import { RelativeUrl } from './lib/linkcheck/checks/relative-url'; From b54a7cf2bc6b50dab7e3fe371e38e597fad68c0c Mon Sep 17 00:00:00 2001 From: Bruno Germano Date: Thu, 10 Sep 2026 10:47:16 -0300 Subject: [PATCH 07/33] chore(types): clear the remaining astro check errors getTranslatedPagesByNamespace now always returns an array rather than `[] | undefined`, and loses a duplicate groupPagesByLang that nothing imported (every call site uses the typed one in ~/util/groupPagesByLang). CodeBlock defaults showLineNumbers to false, matching the Vue component's own default; i18n/util types its Object.keys; generate-integration-pages narrows the mdast list node before reaching into it. Co-Authored-By: Claude Opus 5 --- scripts/generate-integration-pages.ts | 7 +++++-- src/components/CodeBlock/CodeBlock.astro | 2 +- src/i18n/util.ts | 2 +- src/util/getPageTranslations.ts | 22 ++-------------------- 4 files changed, 9 insertions(+), 24 deletions(-) diff --git a/scripts/generate-integration-pages.ts b/scripts/generate-integration-pages.ts index 53359baa72..bffe9ef5d8 100644 --- a/scripts/generate-integration-pages.ts +++ b/scripts/generate-integration-pages.ts @@ -279,9 +279,12 @@ function githubVideos() { function removeTOC() { return function transform(tree: Root) { remove(tree, (node) => { + // `remove` hands back a bare `Node`, so checking `type` narrows nothing: + // reach for the list's own children only after asserting the shape. if (node.type !== 'list') return; - const firstItemContent = node.children[0].children[0]; - if (firstItemContent.type !== 'paragraph') return; + const [firstItem] = (node as { children?: ListContent[] }).children ?? []; + const firstItemContent = firstItem?.children?.[0]; + if (!firstItemContent || firstItemContent.type !== 'paragraph') return; return firstItemContent.children.some( (child: PhrasingContent) => child.type === 'link' && diff --git a/src/components/CodeBlock/CodeBlock.astro b/src/components/CodeBlock/CodeBlock.astro index 419808d5af..94434b4674 100644 --- a/src/components/CodeBlock/CodeBlock.astro +++ b/src/components/CodeBlock/CodeBlock.astro @@ -8,7 +8,7 @@ interface Props { showLineNumbers?: boolean; } -const { code, lang, fileName, showLineNumbers } = Astro.props as Props; +const { code, lang, fileName, showLineNumbers = false } = Astro.props as Props; --- { if(translations[lang][jsonKey] === key) { diff --git a/src/util/getPageTranslations.ts b/src/util/getPageTranslations.ts index e2c187fc19..f3771a3595 100644 --- a/src/util/getPageTranslations.ts +++ b/src/util/getPageTranslations.ts @@ -7,7 +7,7 @@ interface LanguageSelector { lang: string; } -export const getTranslatedPagesByNamespace = async (namespace: string): Promise => { +export const getTranslatedPagesByNamespace = async (namespace: string): Promise => { const collectionPages = await getCollection('docs', ({ data }) => data.namespace == namespace) // The docs home lives in `src/pages`, so its namespace has to be matched here // as well or the language switcher loses one side of the pair. @@ -20,23 +20,5 @@ export const getTranslatedPagesByNamespace = async (namespace: string): Promise< .filter(page => page.data.permalink) .map(page => ({ slug: removeTrailingSlash(removeLeadingSlash(normalizePathSlashes(page.data.permalink))), lang: getLangFromSlug(page.id) })); - return mappedPageData.length > 0 ? mappedPageData : undefined + return mappedPageData } - - -export const groupPagesByLang = (pages: unknown[]) => - pages.reduce((pages, page) => { - if(page) { - const lang = page.id.split('/')[0]; - - if (!pages[lang]) { - pages[lang] = []; - } - - pages[lang].push(page); - } - - return pages; - }, - {} -); From 7559147fad78780de8e4f0bc1a5d2685d4f18ba3 Mon Sep 17 00:00:00 2001 From: Bruno Germano Date: Thu, 10 Sep 2026 10:54:49 -0300 Subject: [PATCH 08/33] refactor(footer): rebuild the footer on the design system and move it into the content column The footer now sits inside #main-content rather than spanning the viewport below
, so its top hairline reads as the end of the content column. The brand leads the social row from lg up and drops to the signature band below it, which replaces the old tagline. The two controls in its slots follow: the language switcher is rebuilt on the DS dropdown and the status indicator loses its pill, so both read as part of the status row instead of buttons. Co-Authored-By: Claude Opus 5 --- src/components/Footer.vue | 109 ++++++++++++++++--------- src/components/webkit/SelectLang.vue | 95 +++++++++++++-------- src/components/webkit/SystemStatus.vue | 10 ++- src/layouts/BaseLayout.astro | 61 +++++++------- 4 files changed, 167 insertions(+), 108 deletions(-) diff --git a/src/components/Footer.vue b/src/components/Footer.vue index e7fb029980..44ac4a10ae 100644 --- a/src/components/Footer.vue +++ b/src/components/Footer.vue @@ -1,21 +1,22 @@ + + diff --git a/src/components/webkit/SelectLang.vue b/src/components/webkit/SelectLang.vue index 94e1f4dd48..0a296f67f0 100644 --- a/src/components/webkit/SelectLang.vue +++ b/src/components/webkit/SelectLang.vue @@ -1,37 +1,41 @@ diff --git a/src/components/webkit/SystemStatus.vue b/src/components/webkit/SystemStatus.vue index 512c0f6864..43120b34e1 100644 --- a/src/components/webkit/SystemStatus.vue +++ b/src/components/webkit/SystemStatus.vue @@ -1,10 +1,18 @@ - diff --git a/src/components/webkit/DocPageHeader.vue b/src/components/webkit/DocPageHeader.vue index bf43d3bbe0..ceeb1890dc 100644 --- a/src/components/webkit/DocPageHeader.vue +++ b/src/components/webkit/DocPageHeader.vue @@ -34,6 +34,13 @@ type DocPageAction } from '@aziontech/webkit/doc-page-header' + defineSlots<{ + /** Replaces the rendered title. */ + title(): unknown + /** Extra detail rows under the header. */ + details(): unknown + }>() + export interface DocPageHeaderLabels { lastUpdated: string copy: string diff --git a/src/components/webkit/DocsSidebarFilter.vue b/src/components/webkit/DocsSidebarFilter.vue index b7afdd3938..04027b8126 100644 --- a/src/components/webkit/DocsSidebarFilter.vue +++ b/src/components/webkit/DocsSidebarFilter.vue @@ -26,35 +26,44 @@ size="medium" > - diff --git a/src/components/webkit/HeaderSearch.vue b/src/components/webkit/HeaderSearch.vue index 4098e857aa..14e83a7d03 100644 --- a/src/components/webkit/HeaderSearch.vue +++ b/src/components/webkit/HeaderSearch.vue @@ -1,17 +1,25 @@ - diff --git a/src/components/webkit/HeaderSearchDialog.vue b/src/components/webkit/HeaderSearchDialog.vue index 018e018ad4..c713a5f99c 100644 --- a/src/components/webkit/HeaderSearchDialog.vue +++ b/src/components/webkit/HeaderSearchDialog.vue @@ -42,7 +42,7 @@ - diff --git a/src/i18n/en/header.ts b/src/i18n/en/header.ts index 10ff055e05..2a71da1da3 100644 --- a/src/i18n/en/header.ts +++ b/src/i18n/en/header.ts @@ -43,7 +43,7 @@ const bottomButtonsMobile = [ label: 'Contact', url: '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/en/contact/', urlTitle: 'Contact Page', - icon: 'pi pi-chevron-right text-xs' + icon: 'pi pi-chevron-right text-body-xs' } ]; diff --git a/src/i18n/pt-br/header.ts b/src/i18n/pt-br/header.ts index 1709373fbb..eb195091be 100644 --- a/src/i18n/pt-br/header.ts +++ b/src/i18n/pt-br/header.ts @@ -43,7 +43,7 @@ const bottomButtonsMobile = [ label: 'Contato', url: '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/pt-br/contato/', urlTitle: 'Contact Page', - icon: 'pi pi-chevron-right text-xs' + icon: 'pi pi-chevron-right text-body-xs' } ]; From 133a806679b999058a028b005262615698dcb108 Mon Sep 17 00:00:00 2001 From: Bruno Germano Date: Thu, 10 Sep 2026 16:19:49 -0300 Subject: [PATCH 15/33] refactor(docs-home): give the documentation home its own layout, without the page rail MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The home is a set of card grids, not prose, so the "On this page" rail had nothing useful to index — but it was on MainLayout, the generic doc-page layout, which fills the secondary-sidebar slot unconditionally. It now has DocsHomeLayout, which fills no such slot. Dropping the slot alone was not enough: at the xl breakpoint the grid is `auto 1fr 20rem`, so the rail's column stayed reserved and left a dead gutter. BaseLayout now derives both the aside and that third track from whether the slot was filled, which leaves every other page untouched. Removes the headings helper the home no longer needs. Co-Authored-By: Claude Opus 5 --- src/data/docs-home/index.ts | 12 +-------- src/data/docs-home/types.ts | 2 +- src/layouts/BaseLayout.astro | 25 +++++++++++++----- src/layouts/DocsHomeLayout.astro | 32 ++++++++++++++++++++++++ src/pages/en/documentation/index.astro | 13 +++------- src/pages/pt-br/documentacao/index.astro | 13 +++------- 6 files changed, 61 insertions(+), 36 deletions(-) create mode 100644 src/layouts/DocsHomeLayout.astro diff --git a/src/data/docs-home/index.ts b/src/data/docs-home/index.ts index 048d0f1a0f..7f29420831 100644 --- a/src/data/docs-home/index.ts +++ b/src/data/docs-home/index.ts @@ -1,6 +1,6 @@ import { en } from './en'; import { ptBr } from './pt-br'; -import type { DocsHomeContent, Heading, Lang, Section } from './types'; +import type { DocsHomeContent, Lang, Section } from './types'; export type { Card, DocLink, DocsHomeContent, Heading, Lang, Section } from './types'; @@ -11,16 +11,6 @@ export const docsHome: Record = { export const docsHomeLangs = Object.keys(docsHome) as Lang[]; -/** - * The docs home is no longer an MDX file, so nothing generates its table of - * contents. Only the `##` sections used to reach `OnThisPage` — the `

` in - * the agent block is hand-written markup and never was a markdown heading — - * so the rail keeps exactly the entries it had. - */ -export function docsHomeHeadings(content: DocsHomeContent): Heading[] { - return [content.interfaceSection.heading, ...content.sections.map((section) => section.heading)]; -} - function cardLines(section: Pick): string { return section.cards .map((card) => (card.body ? `- [${card.title}](${card.href}): ${card.body}` : `- [${card.title}](${card.href})`)) diff --git a/src/data/docs-home/types.ts b/src/data/docs-home/types.ts index 50d5dca12d..3bb92a9ed0 100644 --- a/src/data/docs-home/types.ts +++ b/src/data/docs-home/types.ts @@ -42,7 +42,7 @@ export interface Section { footer?: SectionFooter; } -/** Mirrors Astro's `MarkdownHeading`, which is what `OnThisPage` consumes. */ +/** A section heading: `slug` is the anchor id, `text` the visible label. */ export interface Heading { depth: number; slug: string; diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index 2d73b193a8..d4035c55ee 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -38,6 +38,9 @@ import '~/styles/main.css'; import '@aziontech/theme'; const { content } = Astro.props; +// A layout that fills `secondary-sidebar` gets the rail and the third grid track; +// one that does not (the docs home) gets neither, so no dead gutter is reserved. +const hasSecondarySidebar = Astro.slots.has('secondary-sidebar'); const isFallback = !!Astro.params.fallback; const url = Astro.url; const lang = getLanguageFromURL(url.pathname); @@ -152,6 +155,12 @@ const translatedPages = await (async (c) => { grid-template-columns: auto 1fr 20rem; gap: 1rem; } + + /* No rail, no track: without this the third column still reserves + 20rem plus the gap, leaving a dead gutter down the right. */ + .layout--no-rail { + grid-template-columns: auto 1fr; + } } .sidebar { @@ -286,7 +295,7 @@ const translatedPages = await (async (c) => { /> -
+
diff --git a/src/layouts/DocsHomeLayout.astro b/src/layouts/DocsHomeLayout.astro new file mode 100644 index 0000000000..ee8b247ecd --- /dev/null +++ b/src/layouts/DocsHomeLayout.astro @@ -0,0 +1,32 @@ +--- +/** + * The layout for the documentation home, and only for it. + * + * It is deliberately NOT `MainLayout`: the home is a set of card grids, not + * prose, so the "On this page" rail has nothing useful to index. Filling no + * `secondary-sidebar` slot is what tells `BaseLayout` to drop the rail and + * collapse its grid track, so the content re-centres instead of sitting beside + * an empty gutter. + * + * Every other documentation page keeps `MainLayout` and its rail. + */ +import type { CollectionEntry } from 'astro:content'; + +import BaseLayout from '~/layouts/BaseLayout.astro'; +import PageContent from '~/components/PageContent/PageContent.astro'; + +export interface Props { + content: CollectionEntry<'docs'>['data']; + id?: String; + /** Set by pages outside the `docs` collection, for the GitHub edit link. */ + editFilePath?: string; +} + +const { content } = Astro.props; +--- + + + + + + diff --git a/src/pages/en/documentation/index.astro b/src/pages/en/documentation/index.astro index 6c38ca0ea6..35f138c22f 100644 --- a/src/pages/en/documentation/index.astro +++ b/src/pages/en/documentation/index.astro @@ -7,17 +7,12 @@ * the docs endpoints still need. */ import DocsHome from '~/components/homes/DocsHome.astro'; -import MainLayout from '~/layouts/MainLayout.astro'; -import { docsHome, docsHomeHeadings } from '~/data/docs-home'; +import DocsHomeLayout from '~/layouts/DocsHomeLayout.astro'; +import { docsHome } from '~/data/docs-home'; const content = docsHome.en; --- - + - + diff --git a/src/pages/pt-br/documentacao/index.astro b/src/pages/pt-br/documentacao/index.astro index 7a20e44603..3aacd95a5d 100644 --- a/src/pages/pt-br/documentacao/index.astro +++ b/src/pages/pt-br/documentacao/index.astro @@ -7,17 +7,12 @@ * the docs endpoints still need. */ import DocsHome from '~/components/homes/DocsHome.astro'; -import MainLayout from '~/layouts/MainLayout.astro'; -import { docsHome, docsHomeHeadings } from '~/data/docs-home'; +import DocsHomeLayout from '~/layouts/DocsHomeLayout.astro'; +import { docsHome } from '~/data/docs-home'; const content = docsHome['pt-br']; --- - + - + From 0d12f13f7fd2d07727d35177e4e088ff28005059 Mon Sep 17 00:00:00 2001 From: Bruno Germano Date: Thu, 10 Sep 2026 17:11:01 -0300 Subject: [PATCH 16/33] chore: remove unsused dependencies --- package.json | 29 +- pnpm-lock.yaml | 1536 ++++++++++++++---------------------------------- 2 files changed, 460 insertions(+), 1105 deletions(-) diff --git a/package.json b/package.json index 22af6bfd3b..c47c2725c9 100644 --- a/package.json +++ b/package.json @@ -49,31 +49,26 @@ "@astrojs/markdown-remark": "^7.2.2", "@astrojs/mdx": "^7.0.5", "@astrojs/sitemap": "3.7.3", - "@babel/core": "^7.29.6", "@eslint/js": "^10.0.1", - "@tailwindcss/postcss": "^4.0.0", - "@tailwindcss/typography": "^0.5.10", + "@tailwindcss/typography": "^0.5.20", "@types/hast": "^2.3.4", "@types/html-escaper": "^3.0.0", "@types/mdast": "^3.0.10", "@types/node": "^18.6.4", "@types/stream-json": "^1.7.8", - "@typescript-eslint/parser": "latest", "algoliasearch": "^4.22.1", "astro": "^7.2.3", "astro-auto-import": "^0.5.2", - "astro-eslint-parser": "^1.4.0", "bcp-47-normalize": "^2.1.0", "cssnano": "^6.0.3", "dedent-js": "^1.0.1", "domhandler": "^4.3.1", "eslint": "^9.39.5", "eslint-plugin-astro": "^1.7.0", - "eslint-plugin-vue": "^10.10.0", + "eslint-plugin-vue": "^10.11.0", "eslint-plugin-vuejs-accessibility": "latest", "fast-glob": "^3.2.11", "globals": "^16.5.0", - "hast-util-from-html": "^1.0.0", "hast-util-to-html": "^8.0.4", "hast-util-to-string": "^2.0.0", "hastscript": "^7.0.2", @@ -81,40 +76,31 @@ "htmlparser2": "^7.2.0", "husky": "latest", "kleur": "^4.1.5", - "mdast-util-from-markdown": "^1.2.0", "mdast-util-mdx-jsx": "^2.1.2", - "mdast-util-to-hast": "^12.2.4", "mdast-util-to-string": "^3.1.1", - "micromark-util-character": "^1.1.0", - "micromark-util-symbol": "^1.0.1", "node-fetch": "^3.2.10", "organize-imports-cli": "^0.10.0", "p-retry": "^5.1.1", - "parse-numeric-range": "^1.3.0", - "postcss": "^8.5.23", + "postcss": "^8.5.28", "postcss-html": "^1.8.1", "postcss-scss": "^4.0.9", "prettier": "^2.8.8", "prettier-plugin-astro": "^0.8.0", "prompts": "^2.4.2", - "rehype": "^12.0.1", "remark": "^14.0.2", "remark-directive": "^2.0.1", "simple-git": "^3.36.0", "stream-json": "^1.8.0", "stylelint": "^16.26.1", - "tailwindcss": "^4.0.0", "tsm": "^2.3.0", - "tsx": "^4.19.0", + "tsx": "^4.23.13", "typescript": "^5.3.2", - "typescript-eslint": "^8.69.0", + "typescript-eslint": "^8.70.0", "unified": "^10.1.2", "unist-util-remove": "^3.1.0", "unist-util-visit": "^4.1.0", "unist-util-walker": "^1.0.0", "vfile": "^5.3.6", - "vite": "^8.2.1", - "vite-plugin-dynamic-import": "^1.5.0", "vitest": "^5.0.0", "vue-eslint-parser": "^10.4.1" }, @@ -131,11 +117,10 @@ "hast-util-heading-rank": "^3.0.0", "nanostores": "^0.10.3", "rehype-autolink-headings": "^7.1.0", - "remark-gfm": "^3.0.1", "remark-smartypants": "^2.0.0", - "sharp": "^0.35.0", + "sharp": "^0.35.4", "tailwindcss": "^4.3.3", - "vue": "^3.5.25" + "vue": "^3.5.42" }, "engines": { "node": ">=22.13", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad4136cbd5..c0e4794d04 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: dependencies: '@astrojs/vue': specifier: ^7.0.2 - version: 7.0.2(@types/node@18.19.130)(astro@7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0))(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(supports-color@7.2.0)(terser@5.44.1)(tsx@4.21.0)(vue@3.5.25(typescript@5.9.3))(yaml@2.9.0) + version: 7.0.2(@types/node@18.19.130)(astro@7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0))(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(supports-color@7.2.0)(terser@5.44.1)(tsx@4.23.13)(vue@3.5.42(typescript@5.9.3))(yaml@2.9.0) '@aziontech/icons': specifier: ^1.0.4 version: 1.3.0 @@ -22,13 +22,13 @@ importers: version: 4.3.1 '@aziontech/webkit': specifier: 4.4.0 - version: 4.4.0(patch_hash=392f7d18fc182965f407abae580a8c0dd07eb5389004d3413eca3b76a1d8761c)(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(stylelint@16.26.1(supports-color@7.2.0)(typescript@5.9.3))(supports-color@7.2.0)(vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0))(vue@3.5.25(typescript@5.9.3)) + version: 4.4.0(patch_hash=392f7d18fc182965f407abae580a8c0dd07eb5389004d3413eca3b76a1d8761c)(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(stylelint@16.26.1(supports-color@7.2.0)(typescript@5.9.3))(supports-color@7.2.0)(vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0))(vue@3.5.42(typescript@5.9.3)) '@babel/types': specifier: ^7.22.19 version: 7.29.8 '@tailwindcss/vite': specifier: ^4.3.3 - version: 4.3.3(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)) + version: 4.3.3(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)) github-slugger: specifier: ^2.0.0 version: 2.0.0 @@ -47,21 +47,18 @@ importers: rehype-autolink-headings: specifier: ^7.1.0 version: 7.1.0 - remark-gfm: - specifier: ^3.0.1 - version: 3.0.1(supports-color@7.2.0) remark-smartypants: specifier: ^2.0.0 version: 2.1.0 sharp: - specifier: ^0.35.0 - version: 0.35.0 + specifier: ^0.35.4 + version: 0.35.4(@types/node@18.19.130) tailwindcss: specifier: ^4.3.3 version: 4.3.3 vue: - specifier: ^3.5.25 - version: 3.5.25(typescript@5.9.3) + specifier: ^3.5.42 + version: 3.5.42(typescript@5.9.3) devDependencies: '@actions/core': specifier: ^1.9.0 @@ -74,22 +71,16 @@ importers: version: 7.2.2(supports-color@7.2.0) '@astrojs/mdx': specifier: ^7.0.5 - version: 7.0.5(@astrojs/markdown-satteri@0.3.6)(astro@7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0))(supports-color@7.2.0) + version: 7.0.5(@astrojs/markdown-satteri@0.3.6)(astro@7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0))(supports-color@7.2.0) '@astrojs/sitemap': specifier: 3.7.3 version: 3.7.3 - '@babel/core': - specifier: ^7.29.6 - version: 7.29.6(supports-color@7.2.0) '@eslint/js': specifier: ^10.0.1 version: 10.0.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - '@tailwindcss/postcss': - specifier: ^4.0.0 - version: 4.3.3 '@tailwindcss/typography': - specifier: ^0.5.10 - version: 0.5.19(tailwindcss@4.3.3) + specifier: ^0.5.20 + version: 0.5.20(tailwindcss@4.3.3) '@types/hast': specifier: ^2.3.4 version: 2.3.10 @@ -105,27 +96,21 @@ importers: '@types/stream-json': specifier: ^1.7.8 version: 1.7.8 - '@typescript-eslint/parser': - specifier: latest - version: 8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) algoliasearch: specifier: ^4.22.1 version: 4.25.3 astro: specifier: ^7.2.3 - version: 7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) + version: 7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) astro-auto-import: specifier: ^0.5.2 - version: 0.5.2(astro@7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)) - astro-eslint-parser: - specifier: ^1.4.0 - version: 1.4.0(supports-color@7.2.0) + version: 0.5.2(astro@7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)) bcp-47-normalize: specifier: ^2.1.0 version: 2.3.0 cssnano: specifier: ^6.0.3 - version: 6.1.2(postcss@8.5.26) + version: 6.1.2(postcss@8.5.28) dedent-js: specifier: ^1.0.1 version: 1.0.1 @@ -139,8 +124,8 @@ importers: specifier: ^1.7.0 version: 1.7.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) eslint-plugin-vue: - specifier: ^10.10.0 - version: 10.10.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)) + specifier: ^10.11.0 + version: 10.11.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)) eslint-plugin-vuejs-accessibility: specifier: latest version: 2.6.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(globals@16.5.0)(supports-color@7.2.0) @@ -150,9 +135,6 @@ importers: globals: specifier: ^16.5.0 version: 16.5.0 - hast-util-from-html: - specifier: ^1.0.0 - version: 1.0.2 hast-util-to-html: specifier: ^8.0.4 version: 8.0.4 @@ -174,24 +156,12 @@ importers: kleur: specifier: ^4.1.5 version: 4.1.5 - mdast-util-from-markdown: - specifier: ^1.2.0 - version: 1.3.1(supports-color@7.2.0) mdast-util-mdx-jsx: specifier: ^2.1.2 version: 2.1.4(supports-color@7.2.0) - mdast-util-to-hast: - specifier: ^12.2.4 - version: 12.3.0 mdast-util-to-string: specifier: ^3.1.1 version: 3.2.0 - micromark-util-character: - specifier: ^1.1.0 - version: 1.2.0 - micromark-util-symbol: - specifier: ^1.0.1 - version: 1.1.0 node-fetch: specifier: ^3.2.10 version: 3.3.2 @@ -201,18 +171,15 @@ importers: p-retry: specifier: ^5.1.1 version: 5.1.2 - parse-numeric-range: - specifier: ^1.3.0 - version: 1.3.0 postcss: - specifier: ^8.5.23 - version: 8.5.26 + specifier: ^8.5.28 + version: 8.5.28 postcss-html: specifier: ^1.8.1 version: 1.8.1 postcss-scss: specifier: ^4.0.9 - version: 4.0.9(postcss@8.5.26) + version: 4.0.9(postcss@8.5.28) prettier: specifier: ^2.8.8 version: 2.8.8 @@ -222,9 +189,6 @@ importers: prompts: specifier: ^2.4.2 version: 2.4.2 - rehype: - specifier: ^12.0.1 - version: 12.0.1 remark: specifier: ^14.0.2 version: 14.0.3(supports-color@7.2.0) @@ -244,14 +208,14 @@ importers: specifier: ^2.3.0 version: 2.3.0 tsx: - specifier: ^4.19.0 - version: 4.21.0 + specifier: ^4.23.13 + version: 4.23.13 typescript: specifier: ^5.3.2 version: 5.9.3 typescript-eslint: - specifier: ^8.69.0 - version: 8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + specifier: ^8.70.0 + version: 8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) unified: specifier: ^10.1.2 version: 10.1.2 @@ -267,15 +231,9 @@ importers: vfile: specifier: ^5.3.6 version: 5.3.7 - vite: - specifier: ^8.2.1 - version: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) - vite-plugin-dynamic-import: - specifier: ^1.5.0 - version: 1.6.0 vitest: specifier: ^5.0.0 - version: 5.0.0(@types/node@18.19.130)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.0(@types/node@18.19.130)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)) vue-eslint-parser: specifier: ^10.4.1 version: 10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) @@ -339,10 +297,6 @@ packages: '@algolia/transporter@4.25.3': resolution: {integrity: sha512-2yji+TKjC1uOxhJ9pCdw7lQm6GSiQ+fMvNH4es6oz82DrBpkVHkeU49HmpyTqz8Ai9e+nW/UBz8T9+UyBul3dA==} - '@alloc/quick-lru@5.3.0': - resolution: {integrity: sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==} - engines: {node: '>=10'} - '@astrojs/check@0.9.10': resolution: {integrity: sha512-zgx/UQMozdjOa3bOxjgeCFdtpE3c9rRX6xHwa+2QXvy8z8Akifu2AtubHyv/zzC2znO8dl8fFWL4K+Ba9kS8HQ==} hasBin: true @@ -771,24 +725,12 @@ packages: '@emnapi/wasi-threads@1.2.2': resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} - '@esbuild/aix-ppc64@0.27.7': - resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.28.2': resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.27.7': - resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.28.2': resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==} engines: {node: '>=18'} @@ -801,108 +743,54 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.7': - resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.28.2': resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.27.7': - resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.28.2': resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.27.7': - resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.28.2': resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.27.7': - resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.28.2': resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.27.7': - resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.28.2': resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.7': - resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.28.2': resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.27.7': - resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.28.2': resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.27.7': - resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.28.2': resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.27.7': - resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.28.2': resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==} engines: {node: '>=18'} @@ -915,180 +803,90 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.7': - resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.28.2': resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.27.7': - resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.28.2': resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.27.7': - resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.28.2': resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.27.7': - resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.28.2': resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.27.7': - resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.28.2': resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.27.7': - resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.28.2': resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.27.7': - resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.28.2': resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.7': - resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.28.2': resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.27.7': - resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.28.2': resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.7': - resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.28.2': resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.27.7': - resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - '@esbuild/openharmony-arm64@0.28.2': resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.27.7': - resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.28.2': resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.27.7': - resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.28.2': resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.27.7': - resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.28.2': resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.27.7': - resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.28.2': resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} engines: {node: '>=18'} @@ -1182,160 +980,160 @@ packages: resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.35.0': - resolution: {integrity: sha512-ZgaYEwaj+lx/5n4W8GmZ2IYz0PQHjN5eqRcfijWGB+2Aq7ZInZGa0qJyAn6DEtyLuWHRSrmWOqT9q3qqTBvmUQ==} + '@img/sharp-darwin-arm64@0.35.4': + resolution: {integrity: sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.35.0': - resolution: {integrity: sha512-c1z9LFpKB0slQW3RchwBE8iSVzGp70TNjUUO9k4BZwwW4HH7JBGHeIy4b+kk4n/kcBASb9evKCE3/7Slmslgiw==} + '@img/sharp-darwin-x64@0.35.4': + resolution: {integrity: sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==} engines: {node: '>=20.9.0'} cpu: [x64] os: [darwin] - '@img/sharp-freebsd-wasm32@0.35.0': - resolution: {integrity: sha512-Li2KTev0H90kEtnJHkI9xQojXt1AqWmFBMXiPw5kqd1jQgP7gi5HVK/qC5Rmh/59NuAwUuPzzPITmX22NomYYQ==} + '@img/sharp-freebsd-wasm32@0.35.4': + resolution: {integrity: sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==} engines: {node: '>=20.9.0'} os: [freebsd] - '@img/sharp-libvips-darwin-arm64@1.3.0': - resolution: {integrity: sha512-EKbmBKtyTH+GPFDRw2TgK2oV6hyxxlJVIar4hoTYSNmIwipgMFdxPQqR392GmfdsPGWga0mCFN1cCKjRb9cljw==} + '@img/sharp-libvips-darwin-arm64@1.3.3': + resolution: {integrity: sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.3.0': - resolution: {integrity: sha512-Pl2OmOvrJ42adUllESxBsG54PfXLo1OYg9i3c5/5Ln/qJ0gZuTM9YMhQJPIbXqwidLRc/c2zuHt4RsrymmNv7A==} + '@img/sharp-libvips-darwin-x64@1.3.3': + resolution: {integrity: sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.3.0': - resolution: {integrity: sha512-C0SqjoFKnszqa44EQ7xoaT48nnO0lOyXEULfXMWi8krrjOPGYkeK30Okzla6ATbBYsyZ0ySinK0FVkpv3DwzfQ==} + '@img/sharp-libvips-linux-arm64@1.3.3': + resolution: {integrity: sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-arm@1.3.0': - resolution: {integrity: sha512-A8UpHoUDW4DwnXoV6+q3C1s7QLRAHtPDEjWuNZjwHMyoCNZnm0GeNN8ls9f/bsEYTRQRW96C/n34XJQHJ2fT7A==} + '@img/sharp-libvips-linux-arm@1.3.3': + resolution: {integrity: sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-ppc64@1.3.0': - resolution: {integrity: sha512-WOpkVxAjFd369iaIzEgNRreFD+gWdUMIGD5zplhNKNeqS6mm5dac3q2AFyCBmzYoAdouzZvRBgxy4z8QHZb4/A==} + '@img/sharp-libvips-linux-ppc64@1.3.3': + resolution: {integrity: sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-riscv64@1.3.0': - resolution: {integrity: sha512-DRWw0mOHusrCCuw2rqP87oLg6PGlkomVDFqw2hIwsSfwWpu4k3XLcBPaKKl6ct/GtL/cwNkgwjV/tc0Mqht3VA==} + '@img/sharp-libvips-linux-riscv64@1.3.3': + resolution: {integrity: sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==} cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.3.0': - resolution: {integrity: sha512-9APy+nFWhHS+kzLgWZfLcyrUd7YqnAQVa4BPOo4xkoHpdoktOAPG4cEr9+Jpl0TtqfVmcMJimNL5qNTyyOHZNA==} + '@img/sharp-libvips-linux-s390x@1.3.3': + resolution: {integrity: sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-x64@1.3.0': - resolution: {integrity: sha512-y9RNUYDe2A1UAdhLyfeOodGRszQdaEoe4nfOpp/sNVPl2CWIcUyFaDoCh4vPLPxu19803j2naLqZup2WxDXCLA==} + '@img/sharp-libvips-linux-x64@1.3.3': + resolution: {integrity: sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linuxmusl-arm64@1.3.0': - resolution: {integrity: sha512-cC1wkC0Mlucd0KSiGrLkJnB/ZqPvZCntc/Lk7ZnYO5ZSbF2euNek4Xvxafojq+wN1q/W0eprdpUIjUr/EV2PBg==} + '@img/sharp-libvips-linuxmusl-arm64@1.3.3': + resolution: {integrity: sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.3.0': - resolution: {integrity: sha512-LiYMhUZicB1QG//+RvmYZpXJO8fYRENfp+MZUCnG9aw+AKvGAy9gPaCnuwsPcBFs8EV66M0NNxj9VHcNklE8zw==} + '@img/sharp-libvips-linuxmusl-x64@1.3.3': + resolution: {integrity: sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-linux-arm64@0.35.0': - resolution: {integrity: sha512-4+4XHLNT5wDT0roYlHTEmH9lDKt0acf9Tv+3hM3iceOirkxrR404/3WjAYZ9F9CkHrxeRcGLJXbi4vluMZ9O+A==} + '@img/sharp-linux-arm64@0.35.4': + resolution: {integrity: sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-linux-arm@0.35.0': - resolution: {integrity: sha512-VVlpEWwizEFIOom0zdoeKuO5nuTswzVE5uHcBNvHzmeHUpNFajY3HFfbQ+zIH4E2kVaZ/yVxmsShW56TtEy4uA==} + '@img/sharp-linux-arm@0.35.4': + resolution: {integrity: sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==} engines: {node: '>=20.9.0'} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-linux-ppc64@0.35.0': - resolution: {integrity: sha512-N3hzbEpUTJC8pWpPVJvgzGxM+so/MAXc8O2s/53B0LL9ZGpfXpME7Wizkc5d/8fRBlBtkDjzoZGDCqqNDHqLEw==} + '@img/sharp-linux-ppc64@0.35.4': + resolution: {integrity: sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==} engines: {node: '>=20.9.0'} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-linux-riscv64@0.35.0': - resolution: {integrity: sha512-l6vmKVPnbS0RhVMbyxP5meAARsbhCnBN4fy31qz0+3a6Rv4jEqfzDrT89y6ZPkCi0AJGnwp2En528yXo401Hpw==} + '@img/sharp-linux-riscv64@0.35.4': + resolution: {integrity: sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==} engines: {node: '>=20.9.0'} cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-linux-s390x@0.35.0': - resolution: {integrity: sha512-MYlMiPFiv/EKPAHnp3yNZ9AAWFsxga9c5Bkc6wkar6bqzHLlkGVJHRm0u1ei+VXnZxp3Mz9MG9ZIsI8vSOf3sQ==} + '@img/sharp-linux-s390x@0.35.4': + resolution: {integrity: sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==} engines: {node: '>=20.9.0'} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-linux-x64@0.35.0': - resolution: {integrity: sha512-TYaItB5oj1ioXjhyn2xrR208vf+YuIIcHptQWRRaBmFhvIvL9D72DXN8w75xup0KXA8UdEAhQ9Qb2S49FD/9Cw==} + '@img/sharp-linux-x64@0.35.4': + resolution: {integrity: sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==} engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-linuxmusl-arm64@0.35.0': - resolution: {integrity: sha512-DSTb6ijQzqe6DdAaOBVqJ/SYf1vO8EW5bK6X6LRXufEBebf2722VCdvBUtZ3rtV0x2ApfPNDy/p7LrrjaWjiyQ==} + '@img/sharp-linuxmusl-arm64@0.35.4': + resolution: {integrity: sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-linuxmusl-x64@0.35.0': - resolution: {integrity: sha512-K7ykQ+26Rt6+4BTU80AuGgTPIYX86UxiAKT4rcXX/WNTo7k1ZxpKz+TguHnwVpCqQK3B5PK0vZ0ZBe6nz/ib1w==} + '@img/sharp-linuxmusl-x64@0.35.4': + resolution: {integrity: sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==} engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-wasm32@0.35.0': - resolution: {integrity: sha512-9woLIFORERCr+6cWu87dQ22J34EExkhc73U1kZW0c+RclQqWetoodByp4dWZ/hN8/KVmTRAx2HOnUwib8AwZdA==} + '@img/sharp-wasm32@0.35.4': + resolution: {integrity: sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==} engines: {node: '>=20.9.0'} - '@img/sharp-webcontainers-wasm32@0.35.0': - resolution: {integrity: sha512-t+kie1TOyaDM6Dho+f+y0VqIUNhYQaKCUahuZVi0E0frgdiaOaPsDxDW3wfKacUdaNBCnK/ZDBMg33ydvHj8uA==} + '@img/sharp-webcontainers-wasm32@0.35.4': + resolution: {integrity: sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==} engines: {node: '>=20.9.0'} cpu: [wasm32] - '@img/sharp-win32-arm64@0.35.0': - resolution: {integrity: sha512-M5eKxug0dabbaWgFKvPa3odNs2OpaP+81NASfGKkt4GcYXpNhSu7CaeYxWkLNV6vHmUp4hnCxnxrUyhUJhXbKA==} + '@img/sharp-win32-arm64@0.35.4': + resolution: {integrity: sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.35.0': - resolution: {integrity: sha512-z0+pZ03QCDvdVN0Ez9IX/yjWC19ikMlXrmdYMwYNLTh2BLPx3hXWPvyqWfquZ0BTO9O6GVOjIVoTcyyacMnWlQ==} + '@img/sharp-win32-ia32@0.35.4': + resolution: {integrity: sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==} engines: {node: ^20.9.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.35.0': - resolution: {integrity: sha512-feNnlz5ZHKr0MY1LPHvZQyJeBkbo4ctsn0D8FvA53VTw5TC63rfEL2UrWbkSBR19htSE7Mw78xYVwdJqoMWVHw==} + '@img/sharp-win32-x64@0.35.4': + resolution: {integrity: sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==} engines: {node: '>=20.9.0'} cpu: [x64] os: [win32] @@ -1724,13 +1522,10 @@ packages: resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} engines: {node: '>= 20'} - '@tailwindcss/postcss@4.3.3': - resolution: {integrity: sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==} - - '@tailwindcss/typography@0.5.19': - resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} + '@tailwindcss/typography@0.5.20': + resolution: {integrity: sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==} peerDependencies: - tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' + tailwindcss: '>=3.0.0 || >=4.0.0 || insiders' '@tailwindcss/vite@4.3.3': resolution: {integrity: sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==} @@ -1841,18 +1636,11 @@ packages: '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - '@typescript-eslint/eslint-plugin@8.69.0': - resolution: {integrity: sha512-t5jQTKPIgVW1PE6dR6H6Qz5gm8zjMlX5/2gRaOGd9eO6V7J+tQc6iWKukEe7dY8u9HyYasQ0yfF0/FSSTEO2gA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.69.0 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/parser@8.69.0': - resolution: {integrity: sha512-l4b0DhWioGg6Gt2ebGlvfkFMOjRsauxtsnDRwUSRX1qHq3HdTfQHV8wW9zEXeciai6HfeaKOedQn2Zoofx3WBw==} + '@typescript-eslint/eslint-plugin@8.70.0': + resolution: {integrity: sha512-/v8HZt6RlyIZxB3ntehELOcUcfxKPVGWXnQdJuHRmzrqgF8nQypcC/oxGW+Ot4VGKDq81XugPKxx0n5PBtf9PA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: + '@typescript-eslint/parser': ^8.70.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' @@ -1863,12 +1651,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.69.0': - resolution: {integrity: sha512-yi4obFrHMmnsesWehHbkg9zMA7Jt8cXT+mKM08G999pH1yT6nqgsHx7MYm0uY1wAj8CqiBXYRJ7WAT0QdQHQXg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.70.0': resolution: {integrity: sha512-hFHbTNqhU9G+2eKFXCBVb1tjFT/LceiJ4+HfLO4pTpDI0KHi6iajpcFFkaSQ9gXmCh7n82A0PthaayEdN6mspQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1883,20 +1665,14 @@ packages: resolution: {integrity: sha512-8nP3Kwh5hlgZ4FicGvmznAmJe8UL4sdU8tLukrPaMuQmDuk4Y8xYfzu/aYZW4xT2JCgc7H/TpDI5cGlxcWJSqQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.69.0': - resolution: {integrity: sha512-xNqK7YTDZsLniQMV/4rpFR8Z5JlqeRvVjuG1YgF/mdPVH84HSD19L8CczMA0qg2RfwEV231GHH3VnToJDo4MfQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/tsconfig-utils@8.70.0': resolution: {integrity: sha512-adnkeeNq9Sq1sUf4+FRVc0KdgYghzsgFpZSQVZVvY0LCuUuN0FnQgyGzCJeC4fW1cdXseBAjU2EOqUIjbNcZUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.69.0': - resolution: {integrity: sha512-ZfoJAVg3JZndQEpEl9petVlxau3lRuElc4HRMuAlLCf8to04/iHz692RUSNmXKDjEuJmIL+KZ2/BsOcBc16dsA==} + '@typescript-eslint/type-utils@8.70.0': + resolution: {integrity: sha512-NUMKIhYVaVIVLnRL9CRt+VVcuLgSHUCpXn4/+K8wql+vdInUzvx8BjUO1oJ7cG9shjFJKtF8F8Hh2kCh3/KBVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -1910,20 +1686,14 @@ packages: resolution: {integrity: sha512-asTOIYhDg4zdzOScCyaytrsV3cR6B4ecPQlXw/dJIm7J/MZTtCtfVII9JD8Geh4jTCrK/Xe6cg5UevoleMcoJQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.69.0': - resolution: {integrity: sha512-AdFkgqck3Vudb/kWnxlyafU/4aBhHrbQ9locP2N4psXTy5mOBg0SHJumnLvx7r6g1gV4DKvUFwV2nJZBoqOD8w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/typescript-estree@8.70.0': resolution: {integrity: sha512-d9NmHMPEKQ7QCLLm1jI3zmoQBwT5KwFYjXBJ9ymZfKCUU+5rmTRykKAFvH5Qn/ZCds3CEAFS9OC9M/jkl0X2bA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.69.0': - resolution: {integrity: sha512-tUbx60BBqQa31kXF5MCsOOLL5E/WzUuxIn7YpAvq+eaUlqvk8/NXnXMBNAdLCr0icjkzem7iUA5QqWHe/hJ1aw==} + '@typescript-eslint/utils@8.70.0': + resolution: {integrity: sha512-oZmtKJz/4fufZ2p3+Cn3ijEojcdfR+1zYDH2xKYrEly0dR/Q/1xUPRCOlKGxod78nWlU2UnDe09GZ3TaknBFGA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -2042,30 +1812,30 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@vue/compiler-core@3.5.25': - resolution: {integrity: sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==} - '@vue/compiler-core@3.5.41': resolution: {integrity: sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg==} - '@vue/compiler-dom@3.5.25': - resolution: {integrity: sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==} + '@vue/compiler-core@3.5.42': + resolution: {integrity: sha512-2Ye1ilMtKXxl8qZUrQ5j0CdgenFp/HFQmta6rfRyfEsTG69L6Wk+tWuNoHYHMx9E8tF2Slvdg1FuwDvAXdy1LQ==} '@vue/compiler-dom@3.5.41': resolution: {integrity: sha512-oKacVfNglLvGjnS6BXOlGL7EyG2h8X03pqXCjzotRZUaXGjbrTJUnVAQjrCqUnS+lyu31nwQjZY/d817GmCnfw==} - '@vue/compiler-sfc@3.5.25': - resolution: {integrity: sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==} + '@vue/compiler-dom@3.5.42': + resolution: {integrity: sha512-qbhQZEFmycr+ni/qyuccS4sucNN7VAbDfbkvNxWOX2VfgFm90MNs3/UhRNKoPMEIVn0F8gdlYjLPvqxHwHeQOA==} '@vue/compiler-sfc@3.5.41': resolution: {integrity: sha512-XJhip7R2wy6vX3knCxdZN4KracFaZUef58s1KYewqluedHIJaPIVfXoYT7MF1F8nCvv6k8bWWxDC8opMkg1VTQ==} - '@vue/compiler-ssr@3.5.25': - resolution: {integrity: sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==} + '@vue/compiler-sfc@3.5.42': + resolution: {integrity: sha512-fkCAFB4okcAANGMThboWnScp/gzWjU0ZSkVnjTIiplmMDq2uq0tIB3j+xVu4rhv5rvOgBySCysudmbMd6xRRqw==} '@vue/compiler-ssr@3.5.41': resolution: {integrity: sha512-U3v5OejKEGqOI0Wy0+Sz7hGuIFZHA4LSXzrNM3IMIeDyJEBBfTpX26n3SDgToRpP2bLc9FfI2j/kSgcJ8Emq5A==} + '@vue/compiler-ssr@3.5.42': + resolution: {integrity: sha512-xmLk3wLkbizPAiLyomjgFFosf2ys9b5Ghb+oh/k2tnvipNz8OFrQOiTcWCzyK7MpBp9KkyGtfvgfLUivbmuGYA==} + '@vue/devtools-api@7.7.10': resolution: {integrity: sha512-KxtEpUOOpFz/qOGRrAwA36QF7DqIA+FXgCYit9mk9wjbaZt0sXOFz81ElOZtKA4HbWHUdwNjZHBFsFFyp5BZiA==} @@ -2086,26 +1856,24 @@ packages: '@vue/devtools-shared@8.2.1': resolution: {integrity: sha512-Fkac7lUdGReh6pVOi3AYPRGe82LQqRmAfThW7RRligOAP0ZA/Z1z9XLHDM9dv34pV2HRc79DK8uKPeG2fLnA/g==} - '@vue/reactivity@3.5.25': - resolution: {integrity: sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==} + '@vue/reactivity@3.5.42': + resolution: {integrity: sha512-TzNNfKpb7hDxbQltwAut8VDQA5YP+BuRlxntHUuRjyKwlMvmAPbs3unhCvieijifY6vFfVBwsS7wG/C7uq+bEQ==} - '@vue/runtime-core@3.5.25': - resolution: {integrity: sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==} + '@vue/runtime-core@3.5.42': + resolution: {integrity: sha512-9uACtuHs7vJGkm5Bp3xu4xRDLFTIYy5DgxpToVjqGIAhAEKwQfsaLvKINhM6nFVp6bZPRFGdDqd1g52MqKsotA==} - '@vue/runtime-dom@3.5.25': - resolution: {integrity: sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==} + '@vue/runtime-dom@3.5.42': + resolution: {integrity: sha512-rsCmhiWLaRxGltLwhlCWyYkFn7WAbKRh0q17eZ1A6Dq6eqc2ACQ61IIryxz0LrsvCzHSilLA9JHovVwM8CNE2g==} - '@vue/server-renderer@3.5.25': - resolution: {integrity: sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==} - peerDependencies: - vue: 3.5.25 - - '@vue/shared@3.5.25': - resolution: {integrity: sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==} + '@vue/server-renderer@3.5.42': + resolution: {integrity: sha512-2++5dUyYS4gvo7xQXSECUDhB7TS0aOl5SeVfC5qSq1Jgfhjvegw1zqhwTIR3imZ+QYPJQw9gfcFvXGAjGZ7ajQ==} '@vue/shared@3.5.41': resolution: {integrity: sha512-IOnwSCma8j+9xJT6b8H0dEYidC80NsYmNMlZxRsukYcSoGaDBohog5hDxzeUXdFeGWFA++vWvxqOmrr96VlqMA==} + '@vue/shared@3.5.42': + resolution: {integrity: sha512-2rPxex1jQf4jvl9MOHl6YaXCPcrNqz/FstMOEh3QWY+/OME9nQTvl9WYeCwhW7AFjaR0SnngZGlp/wkR6rkI6g==} + '@vueuse/core@10.11.1': resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} @@ -2702,9 +2470,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - es-module-lexer@2.3.2: resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} @@ -2843,11 +2608,6 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.27.7: - resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.28.2: resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} engines: {node: '>=18'} @@ -2880,8 +2640,8 @@ packages: peerDependencies: eslint: '>=8.57.0' - eslint-plugin-vue@10.10.0: - resolution: {integrity: sha512-dL9x9rBHqqNcByWiLOHK6L0SB97V82/NC0cZRn9cXPjM7pCuWlpQQP9bFH4vjBv80ej1ZpzAkuD8zWH1o9bZbA==} + eslint-plugin-vue@10.11.0: + resolution: {integrity: sha512-fGt38SsaPCZ2FmA3bX/3vOW2qdsPNx0/9x+7Aab6NMX++PhynMtK4LWC4vzXgfQBCqpUAler18H38GA+NBAd0Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -3153,9 +2913,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-tsconfig@4.14.0: - resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} - get-tsconfig@5.0.0-beta.4: resolution: {integrity: sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==} engines: {node: '>=20.20.0'} @@ -3224,9 +2981,6 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hast-util-from-html@1.0.2: - resolution: {integrity: sha512-LhrTA2gfCbLOGJq2u/asp4kwuG0y6NhWTXiPKP+n0qNukKy7hc10whqqCFfyvIA1Q5U5d0sp9HhNim9gglEH4A==} - hast-util-from-html@2.0.3: resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} @@ -3757,18 +3511,12 @@ packages: mathml-tag-names@2.1.3: resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} - mdast-util-definitions@5.1.2: - resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} - mdast-util-definitions@6.0.0: resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} mdast-util-directive@2.2.4: resolution: {integrity: sha512-sK3ojFP+jpj1n7Zo5ZKvoxP1MvLyzVG63+gm40Z/qI00avzdPCYxt7RBMgofwAva9gBjbDBWVRB/i+UD+fUCzQ==} - mdast-util-find-and-replace@2.2.2: - resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} - mdast-util-find-and-replace@3.0.2: resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} @@ -3778,39 +3526,21 @@ packages: mdast-util-from-markdown@2.0.2: resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} - mdast-util-gfm-autolink-literal@1.0.3: - resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} - mdast-util-gfm-autolink-literal@2.0.1: resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} - mdast-util-gfm-footnote@1.0.2: - resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} - mdast-util-gfm-footnote@2.1.0: resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} - mdast-util-gfm-strikethrough@1.0.3: - resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} - mdast-util-gfm-strikethrough@2.0.0: resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} - mdast-util-gfm-table@1.0.7: - resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} - mdast-util-gfm-table@2.0.0: resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} - mdast-util-gfm-task-list-item@1.0.2: - resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} - mdast-util-gfm-task-list-item@2.0.0: resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} - mdast-util-gfm@2.0.2: - resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} - mdast-util-gfm@3.1.0: resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} @@ -3835,9 +3565,6 @@ packages: mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - mdast-util-to-hast@12.3.0: - resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} - mdast-util-to-hast@13.2.1: resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} @@ -3887,45 +3614,24 @@ packages: micromark-extension-directive@2.2.1: resolution: {integrity: sha512-ZFKZkNaEqAP86IghX1X7sE8NNnx6kFNq9mSBRvEHjArutTCJZ3LYg6VH151lXVb1JHpmIcW/7rX25oMoIHuSug==} - micromark-extension-gfm-autolink-literal@1.0.5: - resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} - micromark-extension-gfm-autolink-literal@2.1.0: resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} - micromark-extension-gfm-footnote@1.1.2: - resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} - micromark-extension-gfm-footnote@2.1.0: resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} - micromark-extension-gfm-strikethrough@1.0.7: - resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} - micromark-extension-gfm-strikethrough@2.1.0: resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} - micromark-extension-gfm-table@1.0.7: - resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} - micromark-extension-gfm-table@2.1.1: resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} - micromark-extension-gfm-tagfilter@1.0.2: - resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} - micromark-extension-gfm-tagfilter@2.0.0: resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} - micromark-extension-gfm-task-list-item@1.0.5: - resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} - micromark-extension-gfm-task-list-item@2.1.0: resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} - micromark-extension-gfm@2.0.3: - resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} - micromark-extension-gfm@3.0.0: resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} @@ -4120,6 +3826,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.18: + resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanostores@0.10.3: resolution: {integrity: sha512-Nii8O1XqmawqSCf9o2aWqVxhKRN01+iue9/VEd1TiJCr9VT5XxgPFbF1Edl1XN6pwJcZRsl8Ki+z01yb/T/C2g==} engines: {node: ^18.0.0 || >=20.0.0} @@ -4257,9 +3968,6 @@ packages: parse-latin@7.0.0: resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} - parse-numeric-range@1.3.0: - resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} - parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} @@ -4525,6 +4233,10 @@ packages: resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.28: + resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} + engines: {node: ^10 || ^12 || >=14} + powershell-utils@0.1.0: resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} engines: {node: '>=20'} @@ -4636,9 +4348,6 @@ packages: rehype-autolink-headings@7.1.0: resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==} - rehype-parse@8.0.5: - resolution: {integrity: sha512-Ds3RglaY/+clEX2U2mHflt7NlMA72KspZ0JLUJgBBLpRddBcEw3H8uYZQliQriku22NZpYMfjDdSgHcjxue24A==} - rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} @@ -4648,18 +4357,9 @@ packages: rehype-stringify@10.0.1: resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} - rehype-stringify@9.0.4: - resolution: {integrity: sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==} - - rehype@12.0.1: - resolution: {integrity: sha512-ey6kAqwLM3X6QnMDILJthGvG1m1ULROS9NT4uG9IDCuv08SFyLlreSuvOa//DgEvbXx62DS6elGVqusWhRUbgw==} - remark-directive@2.0.1: resolution: {integrity: sha512-oosbsUAkU/qmUE78anLaJePnPis4ihsE7Agp0T/oqTzvTea8pOiaYEtfInU/+xMOVTS9PN5AhGOiaIVe4GD8gw==} - remark-gfm@3.0.1: - resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} - remark-gfm@4.0.1: resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} @@ -4817,9 +4517,14 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sharp@0.35.0: - resolution: {integrity: sha512-BqvG5XbwPZ4NV0DK90d86leEECMsoa8bO0nqnKWlBDYxri4GJ7c4EDInaF6q20lTh/mATmnDIKWJFfXnoVfH5g==} + sharp@0.35.4: + resolution: {integrity: sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==} engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -5098,8 +4803,8 @@ packages: engines: {node: '>=12'} hasBin: true - tsx@4.21.0: - resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + tsx@4.23.13: + resolution: {integrity: sha512-BL5MGkRln6aDYhb0xbQlEAGw743BaZYWdbWtdJOBriYJboKgUUYCadFp2/FpBBZquBC/ezNBn7wMMPx7FDZUDw==} engines: {node: '>=18.0.0'} hasBin: true @@ -5125,8 +4830,8 @@ packages: typescript-auto-import-cache@0.3.6: resolution: {integrity: sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==} - typescript-eslint@8.69.0: - resolution: {integrity: sha512-B3MltX0VqjUBNEe3b3sSuiRbfa6XrfHFtBiPamjT5AsW/dfq+y+bc0wyuS9DxAS1LyzCxRp2+rxzpLUvqM2BvA==} + typescript-eslint@8.70.0: + resolution: {integrity: sha512-P/W5cz70/cQAuKfY3xwQMWWTV7BvJ0mAQmi+9mBcsVPaBUpd6Ohpa+fECv9rBFrQcig86jAiNBFNWUqnTjr4pw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -5175,9 +4880,6 @@ packages: unist-util-find-after@5.0.0: resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - unist-util-generated@2.0.1: - resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} - unist-util-is@5.2.1: resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} @@ -5359,9 +5061,6 @@ packages: peerDependencies: vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0 - vite-plugin-dynamic-import@1.6.0: - resolution: {integrity: sha512-TM0sz70wfzTIo9YCxVFwS8OA9lNREsh+0vMHGSkWDTZ7bgd1Yjs5RV8EgB634l/91IsXJReg0xtmuQqP0mf+rg==} - vite-plugin-inspect@11.4.1: resolution: {integrity: sha512-ShOFe2PURXGvRS5OrgmOLZOCwDTD7dEBVt0tMpFPKb9AsvqXKCRGM8QgKrUbRbJYFXScHvDPpGRd28rYidC0tA==} engines: {node: '>=14'} @@ -5591,8 +5290,8 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - vue@3.5.25: - resolution: {integrity: sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==} + vue@3.5.42: + resolution: {integrity: sha512-4RyHQTbQvOPs3MfvUO1Sg0YRrKNnA0mAVtvpd12Tg1fKDN7OHBUl1IqSn8zGJjK9nI3NkNp8cgTpVrSZC5TTcA==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -5794,8 +5493,6 @@ snapshots: '@algolia/logger-common': 4.25.3 '@algolia/requester-common': 4.25.3 - '@alloc/quick-lru@5.3.0': {} - '@astrojs/check@0.9.10(prettier-plugin-astro@0.8.1)(prettier@2.8.8)(typescript@5.9.3)': dependencies: '@astrojs/language-server': 2.16.14(prettier-plugin-astro@0.8.1)(prettier@2.8.8)(typescript@5.9.3) @@ -5881,7 +5578,7 @@ snapshots: '@types/hast': 3.0.5 '@types/mdast': 4.0.4 js-yaml: 4.3.1 - picomatch: 4.0.5 + picomatch: 4.0.7 retext-smartypants: 6.2.0 shiki: 4.4.3 smol-toml: 1.8.0 @@ -5943,13 +5640,13 @@ snapshots: hast-util-from-html: 2.0.3 satteri: 0.9.5 - '@astrojs/mdx@7.0.5(@astrojs/markdown-satteri@0.3.6)(astro@7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0))(supports-color@7.2.0)': + '@astrojs/mdx@7.0.5(@astrojs/markdown-satteri@0.3.6)(astro@7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0))(supports-color@7.2.0)': dependencies: '@astrojs/internal-helpers': 0.10.2 '@astrojs/markdown-remark': 7.2.2(supports-color@7.2.0) '@mdx-js/mdx': 3.1.1(supports-color@7.2.0) acorn: 8.18.0 - astro: 7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) + astro: 7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) es-module-lexer: 2.3.2 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -5982,15 +5679,15 @@ snapshots: is-docker: 4.0.0 package-manager-detector: 1.6.0 - '@astrojs/vue@7.0.2(@types/node@18.19.130)(astro@7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0))(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(supports-color@7.2.0)(terser@5.44.1)(tsx@4.21.0)(vue@3.5.25(typescript@5.9.3))(yaml@2.9.0)': + '@astrojs/vue@7.0.2(@types/node@18.19.130)(astro@7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0))(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(supports-color@7.2.0)(terser@5.44.1)(tsx@4.23.13)(vue@3.5.42(typescript@5.9.3))(yaml@2.9.0)': dependencies: - '@vitejs/plugin-vue': 6.0.8(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0))(vue@3.5.25(typescript@5.9.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(supports-color@7.2.0)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0))(vue@3.5.25(typescript@5.9.3)) + '@vitejs/plugin-vue': 6.0.8(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3)) + '@vitejs/plugin-vue-jsx': 5.1.6(supports-color@7.2.0)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3)) '@vue/compiler-sfc': 3.5.41 - astro: 7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) - vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) - vite-plugin-vue-devtools: 8.2.1(supports-color@7.2.0)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0))(vue@3.5.25(typescript@5.9.3)) - vue: 3.5.25(typescript@5.9.3) + astro: 7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) + vite-plugin-vue-devtools: 8.2.1(supports-color@7.2.0)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3)) + vue: 3.5.42(typescript@5.9.3) transitivePeerDependencies: - '@nuxt/kit' - '@types/node' @@ -6015,16 +5712,16 @@ snapshots: '@aziontech/theme@4.3.1': {} - '@aziontech/webkit@4.4.0(patch_hash=392f7d18fc182965f407abae580a8c0dd07eb5389004d3413eca3b76a1d8761c)(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(stylelint@16.26.1(supports-color@7.2.0)(typescript@5.9.3))(supports-color@7.2.0)(vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0))(vue@3.5.25(typescript@5.9.3))': + '@aziontech/webkit@4.4.0(patch_hash=392f7d18fc182965f407abae580a8c0dd07eb5389004d3413eca3b76a1d8761c)(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(stylelint@16.26.1(supports-color@7.2.0)(typescript@5.9.3))(supports-color@7.2.0)(vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0))(vue@3.5.42(typescript@5.9.3))': dependencies: '@aziontech/theme': 4.3.1 '@modelcontextprotocol/sdk': 1.30.0(supports-color@7.2.0)(zod@3.25.76) - '@tanstack/vue-table': 8.21.3(vue@3.5.25(typescript@5.9.3)) - '@vueuse/core': 10.11.1(vue@3.5.25(typescript@5.9.3)) + '@tanstack/vue-table': 8.21.3(vue@3.5.42(typescript@5.9.3)) + '@vueuse/core': 10.11.1(vue@3.5.42(typescript@5.9.3)) clsx: 2.1.1 tailwind-merge: 3.6.0 - vee-validate: 4.15.1(vue@3.5.25(typescript@5.9.3)) - vue: 3.5.25(typescript@5.9.3) + vee-validate: 4.15.1(vue@3.5.42(typescript@5.9.3)) + vue: 3.5.42(typescript@5.9.3) zod: 3.25.76 optionalDependencies: eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) @@ -6350,165 +6047,87 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.27.7': - optional: true - '@esbuild/aix-ppc64@0.28.2': optional: true - '@esbuild/android-arm64@0.27.7': - optional: true - '@esbuild/android-arm64@0.28.2': optional: true '@esbuild/android-arm@0.15.18': optional: true - '@esbuild/android-arm@0.27.7': - optional: true - '@esbuild/android-arm@0.28.2': optional: true - '@esbuild/android-x64@0.27.7': - optional: true - '@esbuild/android-x64@0.28.2': optional: true - '@esbuild/darwin-arm64@0.27.7': - optional: true - '@esbuild/darwin-arm64@0.28.2': optional: true - '@esbuild/darwin-x64@0.27.7': - optional: true - '@esbuild/darwin-x64@0.28.2': optional: true - '@esbuild/freebsd-arm64@0.27.7': - optional: true - '@esbuild/freebsd-arm64@0.28.2': optional: true - '@esbuild/freebsd-x64@0.27.7': - optional: true - '@esbuild/freebsd-x64@0.28.2': optional: true - '@esbuild/linux-arm64@0.27.7': - optional: true - '@esbuild/linux-arm64@0.28.2': optional: true - '@esbuild/linux-arm@0.27.7': - optional: true - '@esbuild/linux-arm@0.28.2': optional: true - '@esbuild/linux-ia32@0.27.7': - optional: true - '@esbuild/linux-ia32@0.28.2': optional: true '@esbuild/linux-loong64@0.15.18': optional: true - '@esbuild/linux-loong64@0.27.7': - optional: true - '@esbuild/linux-loong64@0.28.2': optional: true - '@esbuild/linux-mips64el@0.27.7': - optional: true - '@esbuild/linux-mips64el@0.28.2': optional: true - '@esbuild/linux-ppc64@0.27.7': - optional: true - '@esbuild/linux-ppc64@0.28.2': optional: true - '@esbuild/linux-riscv64@0.27.7': - optional: true - '@esbuild/linux-riscv64@0.28.2': optional: true - '@esbuild/linux-s390x@0.27.7': - optional: true - '@esbuild/linux-s390x@0.28.2': optional: true - '@esbuild/linux-x64@0.27.7': - optional: true - '@esbuild/linux-x64@0.28.2': optional: true - '@esbuild/netbsd-arm64@0.27.7': - optional: true - '@esbuild/netbsd-arm64@0.28.2': optional: true - '@esbuild/netbsd-x64@0.27.7': - optional: true - '@esbuild/netbsd-x64@0.28.2': optional: true - '@esbuild/openbsd-arm64@0.27.7': - optional: true - '@esbuild/openbsd-arm64@0.28.2': optional: true - '@esbuild/openbsd-x64@0.27.7': - optional: true - '@esbuild/openbsd-x64@0.28.2': optional: true - '@esbuild/openharmony-arm64@0.27.7': - optional: true - '@esbuild/openharmony-arm64@0.28.2': optional: true - '@esbuild/sunos-x64@0.27.7': - optional: true - '@esbuild/sunos-x64@0.28.2': optional: true - '@esbuild/win32-arm64@0.27.7': - optional: true - '@esbuild/win32-arm64@0.28.2': optional: true - '@esbuild/win32-ia32@0.27.7': - optional: true - '@esbuild/win32-ia32@0.28.2': optional: true - '@esbuild/win32-x64@0.27.7': - optional: true - '@esbuild/win32-x64@0.28.2': optional: true @@ -6591,108 +6210,108 @@ snapshots: '@img/colour@1.1.0': {} - '@img/sharp-darwin-arm64@0.35.0': + '@img/sharp-darwin-arm64@0.35.4': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.3.0 + '@img/sharp-libvips-darwin-arm64': 1.3.3 optional: true - '@img/sharp-darwin-x64@0.35.0': + '@img/sharp-darwin-x64@0.35.4': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.3.0 + '@img/sharp-libvips-darwin-x64': 1.3.3 optional: true - '@img/sharp-freebsd-wasm32@0.35.0': + '@img/sharp-freebsd-wasm32@0.35.4': dependencies: - '@img/sharp-wasm32': 0.35.0 + '@img/sharp-wasm32': 0.35.4 optional: true - '@img/sharp-libvips-darwin-arm64@1.3.0': + '@img/sharp-libvips-darwin-arm64@1.3.3': optional: true - '@img/sharp-libvips-darwin-x64@1.3.0': + '@img/sharp-libvips-darwin-x64@1.3.3': optional: true - '@img/sharp-libvips-linux-arm64@1.3.0': + '@img/sharp-libvips-linux-arm64@1.3.3': optional: true - '@img/sharp-libvips-linux-arm@1.3.0': + '@img/sharp-libvips-linux-arm@1.3.3': optional: true - '@img/sharp-libvips-linux-ppc64@1.3.0': + '@img/sharp-libvips-linux-ppc64@1.3.3': optional: true - '@img/sharp-libvips-linux-riscv64@1.3.0': + '@img/sharp-libvips-linux-riscv64@1.3.3': optional: true - '@img/sharp-libvips-linux-s390x@1.3.0': + '@img/sharp-libvips-linux-s390x@1.3.3': optional: true - '@img/sharp-libvips-linux-x64@1.3.0': + '@img/sharp-libvips-linux-x64@1.3.3': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.3.0': + '@img/sharp-libvips-linuxmusl-arm64@1.3.3': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.3.0': + '@img/sharp-libvips-linuxmusl-x64@1.3.3': optional: true - '@img/sharp-linux-arm64@0.35.0': + '@img/sharp-linux-arm64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.3.0 + '@img/sharp-libvips-linux-arm64': 1.3.3 optional: true - '@img/sharp-linux-arm@0.35.0': + '@img/sharp-linux-arm@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.3.0 + '@img/sharp-libvips-linux-arm': 1.3.3 optional: true - '@img/sharp-linux-ppc64@0.35.0': + '@img/sharp-linux-ppc64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.3.0 + '@img/sharp-libvips-linux-ppc64': 1.3.3 optional: true - '@img/sharp-linux-riscv64@0.35.0': + '@img/sharp-linux-riscv64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.3.0 + '@img/sharp-libvips-linux-riscv64': 1.3.3 optional: true - '@img/sharp-linux-s390x@0.35.0': + '@img/sharp-linux-s390x@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.3.0 + '@img/sharp-libvips-linux-s390x': 1.3.3 optional: true - '@img/sharp-linux-x64@0.35.0': + '@img/sharp-linux-x64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.3.0 + '@img/sharp-libvips-linux-x64': 1.3.3 optional: true - '@img/sharp-linuxmusl-arm64@0.35.0': + '@img/sharp-linuxmusl-arm64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.3.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.3 optional: true - '@img/sharp-linuxmusl-x64@0.35.0': + '@img/sharp-linuxmusl-x64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.3.0 + '@img/sharp-libvips-linuxmusl-x64': 1.3.3 optional: true - '@img/sharp-wasm32@0.35.0': + '@img/sharp-wasm32@0.35.4': dependencies: '@emnapi/runtime': 1.11.3 optional: true - '@img/sharp-webcontainers-wasm32@0.35.0': + '@img/sharp-webcontainers-wasm32@0.35.4': dependencies: - '@img/sharp-wasm32': 0.35.0 + '@img/sharp-wasm32': 0.35.4 optional: true - '@img/sharp-win32-arm64@0.35.0': + '@img/sharp-win32-arm64@0.35.4': optional: true - '@img/sharp-win32-ia32@0.35.0': + '@img/sharp-win32-ia32@0.35.4': optional: true - '@img/sharp-win32-x64@0.35.0': + '@img/sharp-win32-x64@0.35.4': optional: true '@jridgewell/gen-mapping@0.3.13': @@ -6859,7 +6478,7 @@ snapshots: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 - picomatch: 4.0.5 + picomatch: 4.0.7 optionalDependencies: '@parcel/watcher-android-arm64': 2.6.0 '@parcel/watcher-darwin-arm64': 2.6.0 @@ -7032,32 +6651,24 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 - '@tailwindcss/postcss@4.3.3': - dependencies: - '@alloc/quick-lru': 5.3.0 - '@tailwindcss/node': 4.3.3 - '@tailwindcss/oxide': 4.3.3 - postcss: 8.5.26 - tailwindcss: 4.3.3 - - '@tailwindcss/typography@0.5.19(tailwindcss@4.3.3)': + '@tailwindcss/typography@0.5.20(tailwindcss@4.3.3)': dependencies: postcss-selector-parser: 6.0.10 tailwindcss: 4.3.3 - '@tailwindcss/vite@4.3.3(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0))': + '@tailwindcss/vite@4.3.3(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0))': dependencies: '@tailwindcss/node': 4.3.3 '@tailwindcss/oxide': 4.3.3 tailwindcss: 4.3.3 - vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) '@tanstack/table-core@8.21.3': {} - '@tanstack/vue-table@8.21.3(vue@3.5.25(typescript@5.9.3))': + '@tanstack/vue-table@8.21.3(vue@3.5.42(typescript@5.9.3))': dependencies: '@tanstack/table-core': 8.21.3 - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.42(typescript@5.9.3) '@trysound/sax@0.2.0': {} @@ -7159,14 +6770,14 @@ snapshots: '@types/web-bluetooth@0.0.20': {} - '@typescript-eslint/eslint-plugin@8.69.0(@typescript-eslint/parser@8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.69.0 - '@typescript-eslint/type-utils': 8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.69.0 + '@typescript-eslint/parser': 8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.70.0 + '@typescript-eslint/type-utils': 8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.70.0 eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) ignore: 7.0.8 natural-compare: 1.4.0 @@ -7175,18 +6786,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.69.0 - '@typescript-eslint/types': 8.69.0 - '@typescript-eslint/typescript-estree': 8.69.0(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.69.0 - debug: 4.4.3(supports-color@7.2.0) - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.70.0 @@ -7199,15 +6798,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.69.0(supports-color@7.2.0)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.69.0(typescript@5.9.3) - '@typescript-eslint/types': 8.69.0 - debug: 4.4.3(supports-color@7.2.0) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/project-service@8.70.0(supports-color@7.2.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.70.0(typescript@5.9.3) @@ -7227,19 +6817,15 @@ snapshots: '@typescript-eslint/types': 8.70.0 '@typescript-eslint/visitor-keys': 8.70.0 - '@typescript-eslint/tsconfig-utils@8.69.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - '@typescript-eslint/tsconfig-utils@8.70.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.69.0 - '@typescript-eslint/typescript-estree': 8.69.0(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/types': 8.70.0 + '@typescript-eslint/typescript-estree': 8.70.0(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) debug: 4.4.3(supports-color@7.2.0) eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) ts-api-utils: 2.5.0(typescript@5.9.3) @@ -7251,21 +6837,6 @@ snapshots: '@typescript-eslint/types@8.70.0': {} - '@typescript-eslint/typescript-estree@8.69.0(supports-color@7.2.0)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.69.0(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.69.0(typescript@5.9.3) - '@typescript-eslint/types': 8.69.0 - '@typescript-eslint/visitor-keys': 8.69.0 - debug: 4.4.3(supports-color@7.2.0) - minimatch: 10.2.6 - semver: 7.8.5 - tinyglobby: 0.2.17 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.70.0(supports-color@7.2.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/project-service': 8.70.0(supports-color@7.2.0)(typescript@5.9.3) @@ -7281,12 +6852,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': + '@typescript-eslint/utils@8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - '@typescript-eslint/scope-manager': 8.69.0 - '@typescript-eslint/types': 8.69.0 - '@typescript-eslint/typescript-estree': 8.69.0(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.70.0 + '@typescript-eslint/types': 8.70.0 + '@typescript-eslint/typescript-estree': 8.70.0(supports-color@7.2.0)(typescript@5.9.3) eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) typescript: 5.9.3 transitivePeerDependencies: @@ -7304,32 +6875,32 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-vue-jsx@5.1.6(supports-color@7.2.0)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0))(vue@3.5.25(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@5.1.6(supports-color@7.2.0)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3))': dependencies: '@babel/core': 7.29.6(supports-color@7.2.0) '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.6(supports-color@7.2.0)) '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.6(supports-color@7.2.0))(supports-color@7.2.0) '@rolldown/pluginutils': 1.0.1 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.6(supports-color@7.2.0))(supports-color@7.2.0) - vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) - vue: 3.5.25(typescript@5.9.3) + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) + vue: 3.5.42(typescript@5.9.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.8(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0))(vue@3.5.25(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.8(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) - vue: 3.5.25(typescript@5.9.3) + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) + vue: 3.5.42(typescript@5.9.3) - '@vitest/mocker@5.0.0(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0))': + '@vitest/mocker@5.0.0(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0))': dependencies: '@jridgewell/trace-mapping': 0.3.31 '@vitest/spy': 5.0.0 estree-walker: 3.0.3 magic-string: 1.2.3 optionalDependencies: - vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) '@vitest/spy@5.0.0': {} @@ -7447,43 +7018,31 @@ snapshots: transitivePeerDependencies: - supports-color - '@vue/compiler-core@3.5.25': + '@vue/compiler-core@3.5.41': dependencies: '@babel/parser': 7.29.8 - '@vue/shared': 3.5.25 - entities: 4.5.0 + '@vue/shared': 3.5.41 + entities: 7.0.1 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-core@3.5.41': + '@vue/compiler-core@3.5.42': dependencies: '@babel/parser': 7.29.8 - '@vue/shared': 3.5.41 + '@vue/shared': 3.5.42 entities: 7.0.1 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.25': - dependencies: - '@vue/compiler-core': 3.5.25 - '@vue/shared': 3.5.25 - '@vue/compiler-dom@3.5.41': dependencies: '@vue/compiler-core': 3.5.41 '@vue/shared': 3.5.41 - '@vue/compiler-sfc@3.5.25': + '@vue/compiler-dom@3.5.42': dependencies: - '@babel/parser': 7.29.8 - '@vue/compiler-core': 3.5.25 - '@vue/compiler-dom': 3.5.25 - '@vue/compiler-ssr': 3.5.25 - '@vue/shared': 3.5.25 - estree-walker: 2.0.2 - magic-string: 0.30.21 - postcss: 8.5.26 - source-map-js: 1.2.1 + '@vue/compiler-core': 3.5.42 + '@vue/shared': 3.5.42 '@vue/compiler-sfc@3.5.41': dependencies: @@ -7494,28 +7053,40 @@ snapshots: '@vue/shared': 3.5.41 estree-walker: 2.0.2 magic-string: 0.30.21 - postcss: 8.5.26 + postcss: 8.5.28 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.25': + '@vue/compiler-sfc@3.5.42': dependencies: - '@vue/compiler-dom': 3.5.25 - '@vue/shared': 3.5.25 + '@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.28 + source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.41': dependencies: '@vue/compiler-dom': 3.5.41 '@vue/shared': 3.5.41 + '@vue/compiler-ssr@3.5.42': + dependencies: + '@vue/compiler-dom': 3.5.42 + '@vue/shared': 3.5.42 + '@vue/devtools-api@7.7.10': dependencies: '@vue/devtools-kit': 7.7.10 - '@vue/devtools-core@8.2.1(vue@3.5.25(typescript@5.9.3))': + '@vue/devtools-core@8.2.1(vue@3.5.42(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 8.2.1 '@vue/devtools-shared': 8.2.1 - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.42(typescript@5.9.3) '@vue/devtools-kit@7.7.10': dependencies: @@ -7540,47 +7111,47 @@ snapshots: '@vue/devtools-shared@8.2.1': {} - '@vue/reactivity@3.5.25': + '@vue/reactivity@3.5.42': dependencies: - '@vue/shared': 3.5.25 + '@vue/shared': 3.5.42 - '@vue/runtime-core@3.5.25': + '@vue/runtime-core@3.5.42': dependencies: - '@vue/reactivity': 3.5.25 - '@vue/shared': 3.5.25 + '@vue/reactivity': 3.5.42 + '@vue/shared': 3.5.42 - '@vue/runtime-dom@3.5.25': + '@vue/runtime-dom@3.5.42': dependencies: - '@vue/reactivity': 3.5.25 - '@vue/runtime-core': 3.5.25 - '@vue/shared': 3.5.25 + '@vue/reactivity': 3.5.42 + '@vue/runtime-core': 3.5.42 + '@vue/shared': 3.5.42 csstype: 3.2.3 - '@vue/server-renderer@3.5.25(vue@3.5.25(typescript@5.9.3))': + '@vue/server-renderer@3.5.42': dependencies: - '@vue/compiler-ssr': 3.5.25 - '@vue/shared': 3.5.25 - vue: 3.5.25(typescript@5.9.3) - - '@vue/shared@3.5.25': {} + '@vue/compiler-ssr': 3.5.42 + '@vue/runtime-dom': 3.5.42 + '@vue/shared': 3.5.42 '@vue/shared@3.5.41': {} - '@vueuse/core@10.11.1(vue@3.5.25(typescript@5.9.3))': + '@vue/shared@3.5.42': {} + + '@vueuse/core@10.11.1(vue@3.5.42(typescript@5.9.3))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.5.25(typescript@5.9.3)) - vue-demi: 0.14.10(vue@3.5.25(typescript@5.9.3)) + '@vueuse/shared': 10.11.1(vue@3.5.42(typescript@5.9.3)) + vue-demi: 0.14.10(vue@3.5.42(typescript@5.9.3)) transitivePeerDependencies: - '@vue/composition-api' - vue '@vueuse/metadata@10.11.1': {} - '@vueuse/shared@10.11.1(vue@3.5.25(typescript@5.9.3))': + '@vueuse/shared@10.11.1(vue@3.5.42(typescript@5.9.3))': dependencies: - vue-demi: 0.14.10(vue@3.5.25(typescript@5.9.3)) + vue-demi: 0.14.10(vue@3.5.42(typescript@5.9.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -7681,10 +7252,10 @@ snapshots: astring@1.9.0: {} - astro-auto-import@0.5.2(astro@7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)): + astro-auto-import@0.5.2(astro@7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)): dependencies: acorn: 8.18.0 - astro: 7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) + astro: 7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) astro-eslint-parser@1.4.0(supports-color@7.2.0): dependencies: @@ -7703,7 +7274,7 @@ snapshots: transitivePeerDependencies: - supports-color - astro@7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0): + astro@7.2.3(@astrojs/markdown-remark@7.2.2(supports-color@7.2.0))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@18.19.130)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0): dependencies: '@astrojs/compiler-rs': 0.3.2(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3) '@astrojs/internal-helpers': 0.10.3 @@ -7753,14 +7324,14 @@ snapshots: ultrahtml: 1.6.0 unifont: 0.7.5 unstorage: 1.17.5 - vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) - vitefu: 1.1.3(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)) + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) + vitefu: 1.1.3(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)) xxhash-wasm: 1.1.0 yargs-parser: 22.0.0 zod: 4.4.3 optionalDependencies: '@astrojs/markdown-remark': 7.2.2(supports-color@7.2.0) - sharp: 0.35.0 + sharp: 0.35.4(@types/node@18.19.130) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8013,9 +7584,9 @@ snapshots: dependencies: uncrypto: 0.1.3 - css-declaration-sorter@7.3.0(postcss@8.5.26): + css-declaration-sorter@7.3.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 css-functions-list@3.3.3: {} @@ -8046,49 +7617,49 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-default@6.1.2(postcss@8.5.26): + cssnano-preset-default@6.1.2(postcss@8.5.28): dependencies: browserslist: 4.28.4 - css-declaration-sorter: 7.3.0(postcss@8.5.26) - cssnano-utils: 4.0.2(postcss@8.5.26) - postcss: 8.5.26 - postcss-calc: 9.0.1(postcss@8.5.26) - postcss-colormin: 6.1.0(postcss@8.5.26) - postcss-convert-values: 6.1.0(postcss@8.5.26) - postcss-discard-comments: 6.0.2(postcss@8.5.26) - postcss-discard-duplicates: 6.0.3(postcss@8.5.26) - postcss-discard-empty: 6.0.3(postcss@8.5.26) - postcss-discard-overridden: 6.0.2(postcss@8.5.26) - postcss-merge-longhand: 6.0.5(postcss@8.5.26) - postcss-merge-rules: 6.1.1(postcss@8.5.26) - postcss-minify-font-values: 6.1.0(postcss@8.5.26) - postcss-minify-gradients: 6.0.3(postcss@8.5.26) - postcss-minify-params: 6.1.0(postcss@8.5.26) - postcss-minify-selectors: 6.0.4(postcss@8.5.26) - postcss-normalize-charset: 6.0.2(postcss@8.5.26) - postcss-normalize-display-values: 6.0.2(postcss@8.5.26) - postcss-normalize-positions: 6.0.2(postcss@8.5.26) - postcss-normalize-repeat-style: 6.0.2(postcss@8.5.26) - postcss-normalize-string: 6.0.2(postcss@8.5.26) - postcss-normalize-timing-functions: 6.0.2(postcss@8.5.26) - postcss-normalize-unicode: 6.1.0(postcss@8.5.26) - postcss-normalize-url: 6.0.2(postcss@8.5.26) - postcss-normalize-whitespace: 6.0.2(postcss@8.5.26) - postcss-ordered-values: 6.0.2(postcss@8.5.26) - postcss-reduce-initial: 6.1.0(postcss@8.5.26) - postcss-reduce-transforms: 6.0.2(postcss@8.5.26) - postcss-svgo: 6.0.3(postcss@8.5.26) - postcss-unique-selectors: 6.0.4(postcss@8.5.26) - - cssnano-utils@4.0.2(postcss@8.5.26): - dependencies: - postcss: 8.5.26 - - cssnano@6.1.2(postcss@8.5.26): - dependencies: - cssnano-preset-default: 6.1.2(postcss@8.5.26) + css-declaration-sorter: 7.3.0(postcss@8.5.28) + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 + postcss-calc: 9.0.1(postcss@8.5.28) + postcss-colormin: 6.1.0(postcss@8.5.28) + postcss-convert-values: 6.1.0(postcss@8.5.28) + postcss-discard-comments: 6.0.2(postcss@8.5.28) + postcss-discard-duplicates: 6.0.3(postcss@8.5.28) + postcss-discard-empty: 6.0.3(postcss@8.5.28) + postcss-discard-overridden: 6.0.2(postcss@8.5.28) + postcss-merge-longhand: 6.0.5(postcss@8.5.28) + postcss-merge-rules: 6.1.1(postcss@8.5.28) + postcss-minify-font-values: 6.1.0(postcss@8.5.28) + postcss-minify-gradients: 6.0.3(postcss@8.5.28) + postcss-minify-params: 6.1.0(postcss@8.5.28) + postcss-minify-selectors: 6.0.4(postcss@8.5.28) + postcss-normalize-charset: 6.0.2(postcss@8.5.28) + postcss-normalize-display-values: 6.0.2(postcss@8.5.28) + postcss-normalize-positions: 6.0.2(postcss@8.5.28) + postcss-normalize-repeat-style: 6.0.2(postcss@8.5.28) + postcss-normalize-string: 6.0.2(postcss@8.5.28) + postcss-normalize-timing-functions: 6.0.2(postcss@8.5.28) + postcss-normalize-unicode: 6.1.0(postcss@8.5.28) + postcss-normalize-url: 6.0.2(postcss@8.5.28) + postcss-normalize-whitespace: 6.0.2(postcss@8.5.28) + postcss-ordered-values: 6.0.2(postcss@8.5.28) + postcss-reduce-initial: 6.1.0(postcss@8.5.28) + postcss-reduce-transforms: 6.0.2(postcss@8.5.28) + postcss-svgo: 6.0.3(postcss@8.5.28) + postcss-unique-selectors: 6.0.4(postcss@8.5.28) + + cssnano-utils@4.0.2(postcss@8.5.28): + dependencies: + postcss: 8.5.28 + + cssnano@6.1.2(postcss@8.5.28): + dependencies: + cssnano-preset-default: 6.1.2(postcss@8.5.28) lilconfig: 3.1.3 - postcss: 8.5.26 + postcss: 8.5.28 csso@5.0.5: dependencies: @@ -8236,8 +7807,6 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.7.0: {} - es-module-lexer@2.3.2: {} es-object-atoms@1.1.1: @@ -8343,35 +7912,6 @@ snapshots: esbuild-windows-64: 0.15.18 esbuild-windows-arm64: 0.15.18 - esbuild@0.27.7: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.7 - '@esbuild/android-arm': 0.27.7 - '@esbuild/android-arm64': 0.27.7 - '@esbuild/android-x64': 0.27.7 - '@esbuild/darwin-arm64': 0.27.7 - '@esbuild/darwin-x64': 0.27.7 - '@esbuild/freebsd-arm64': 0.27.7 - '@esbuild/freebsd-x64': 0.27.7 - '@esbuild/linux-arm': 0.27.7 - '@esbuild/linux-arm64': 0.27.7 - '@esbuild/linux-ia32': 0.27.7 - '@esbuild/linux-loong64': 0.27.7 - '@esbuild/linux-mips64el': 0.27.7 - '@esbuild/linux-ppc64': 0.27.7 - '@esbuild/linux-riscv64': 0.27.7 - '@esbuild/linux-s390x': 0.27.7 - '@esbuild/linux-x64': 0.27.7 - '@esbuild/netbsd-arm64': 0.27.7 - '@esbuild/netbsd-x64': 0.27.7 - '@esbuild/openbsd-arm64': 0.27.7 - '@esbuild/openbsd-x64': 0.27.7 - '@esbuild/openharmony-arm64': 0.27.7 - '@esbuild/sunos-x64': 0.27.7 - '@esbuild/win32-arm64': 0.27.7 - '@esbuild/win32-ia32': 0.27.7 - '@esbuild/win32-x64': 0.27.7 - esbuild@0.28.2: optionalDependencies: '@esbuild/aix-ppc64': 0.28.2 @@ -8423,12 +7963,12 @@ snapshots: eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) eslint-compat-utils: 0.6.5(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) globals: 16.5.0 - postcss: 8.5.26 + postcss: 8.5.28 postcss-selector-parser: 7.1.5 transitivePeerDependencies: - supports-color - eslint-plugin-vue@10.10.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)): + eslint-plugin-vue@10.11.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)): dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) @@ -8766,10 +8306,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-tsconfig@4.14.0: - dependencies: - resolve-pkg-maps: 1.0.0 - get-tsconfig@5.0.0-beta.4: dependencies: resolve-pkg-maps: 1.0.0 @@ -8844,14 +8380,6 @@ snapshots: dependencies: function-bind: 1.1.2 - hast-util-from-html@1.0.2: - dependencies: - '@types/hast': 2.3.10 - hast-util-from-parse5: 7.1.2 - parse5: 7.3.0 - vfile: 5.3.7 - vfile-message: 3.1.4 - hast-util-from-html@2.0.3: dependencies: '@types/hast': 3.0.5 @@ -9391,12 +8919,6 @@ snapshots: mathml-tag-names@2.1.3: {} - mdast-util-definitions@5.1.2: - dependencies: - '@types/mdast': 3.0.15 - '@types/unist': 2.0.11 - unist-util-visit: 4.1.2 - mdast-util-definitions@6.0.0: dependencies: '@types/mdast': 4.0.4 @@ -9415,13 +8937,6 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-find-and-replace@2.2.2: - dependencies: - '@types/mdast': 3.0.15 - escape-string-regexp: 5.0.0 - unist-util-is: 5.2.1 - unist-util-visit-parents: 5.1.3 - mdast-util-find-and-replace@3.0.2: dependencies: '@types/mdast': 4.0.4 @@ -9463,13 +8978,6 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-gfm-autolink-literal@1.0.3: - dependencies: - '@types/mdast': 3.0.15 - ccount: 2.0.1 - mdast-util-find-and-replace: 2.2.2 - micromark-util-character: 1.2.0 - mdast-util-gfm-autolink-literal@2.0.1: dependencies: '@types/mdast': 4.0.4 @@ -9478,12 +8986,6 @@ snapshots: mdast-util-find-and-replace: 3.0.2 micromark-util-character: 2.1.1 - mdast-util-gfm-footnote@1.0.2: - dependencies: - '@types/mdast': 3.0.15 - mdast-util-to-markdown: 1.5.0 - micromark-util-normalize-identifier: 1.1.0 - mdast-util-gfm-footnote@2.1.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 @@ -9494,11 +8996,6 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-gfm-strikethrough@1.0.3: - dependencies: - '@types/mdast': 3.0.15 - mdast-util-to-markdown: 1.5.0 - mdast-util-gfm-strikethrough@2.0.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 @@ -9507,15 +9004,6 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-gfm-table@1.0.7(supports-color@7.2.0): - dependencies: - '@types/mdast': 3.0.15 - markdown-table: 3.0.4 - mdast-util-from-markdown: 1.3.1(supports-color@7.2.0) - mdast-util-to-markdown: 1.5.0 - transitivePeerDependencies: - - supports-color - mdast-util-gfm-table@2.0.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 @@ -9526,11 +9014,6 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-gfm-task-list-item@1.0.2: - dependencies: - '@types/mdast': 3.0.15 - mdast-util-to-markdown: 1.5.0 - mdast-util-gfm-task-list-item@2.0.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 @@ -9540,18 +9023,6 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-gfm@2.0.2(supports-color@7.2.0): - dependencies: - mdast-util-from-markdown: 1.3.1(supports-color@7.2.0) - mdast-util-gfm-autolink-literal: 1.0.3 - mdast-util-gfm-footnote: 1.0.2 - mdast-util-gfm-strikethrough: 1.0.3 - mdast-util-gfm-table: 1.0.7(supports-color@7.2.0) - mdast-util-gfm-task-list-item: 1.0.2 - mdast-util-to-markdown: 1.5.0 - transitivePeerDependencies: - - supports-color - mdast-util-gfm@3.1.0(supports-color@7.2.0): dependencies: mdast-util-from-markdown: 2.0.2(supports-color@7.2.0) @@ -9640,17 +9111,6 @@ snapshots: '@types/mdast': 4.0.4 unist-util-is: 6.0.1 - mdast-util-to-hast@12.3.0: - dependencies: - '@types/hast': 2.3.10 - '@types/mdast': 3.0.15 - mdast-util-definitions: 5.1.2 - micromark-util-sanitize-uri: 1.2.0 - trim-lines: 3.0.1 - unist-util-generated: 2.0.1 - unist-util-position: 4.0.4 - unist-util-visit: 4.1.2 - mdast-util-to-hast@13.2.1: dependencies: '@types/hast': 3.0.5 @@ -9756,13 +9216,6 @@ snapshots: parse-entities: 4.0.2 uvu: 0.5.6 - micromark-extension-gfm-autolink-literal@1.0.5: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-sanitize-uri: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - micromark-extension-gfm-autolink-literal@2.1.0: dependencies: micromark-util-character: 2.1.1 @@ -9770,17 +9223,6 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - micromark-extension-gfm-footnote@1.1.2: - dependencies: - micromark-core-commonmark: 1.1.0 - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-sanitize-uri: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - micromark-extension-gfm-footnote@2.1.0: dependencies: devlop: 1.1.0 @@ -9792,15 +9234,6 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - micromark-extension-gfm-strikethrough@1.0.7: - dependencies: - micromark-util-chunked: 1.1.0 - micromark-util-classify-character: 1.1.0 - micromark-util-resolve-all: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - micromark-extension-gfm-strikethrough@2.1.0: dependencies: devlop: 1.1.0 @@ -9810,14 +9243,6 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - micromark-extension-gfm-table@1.0.7: - dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - micromark-extension-gfm-table@2.1.1: dependencies: devlop: 1.1.0 @@ -9826,22 +9251,10 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - micromark-extension-gfm-tagfilter@1.0.2: - dependencies: - micromark-util-types: 1.1.0 - micromark-extension-gfm-tagfilter@2.0.0: dependencies: micromark-util-types: 2.0.2 - micromark-extension-gfm-task-list-item@1.0.5: - dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - micromark-extension-gfm-task-list-item@2.1.0: dependencies: devlop: 1.1.0 @@ -9850,17 +9263,6 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - micromark-extension-gfm@2.0.3: - dependencies: - micromark-extension-gfm-autolink-literal: 1.0.5 - micromark-extension-gfm-footnote: 1.1.2 - micromark-extension-gfm-strikethrough: 1.0.7 - micromark-extension-gfm-table: 1.0.7 - micromark-extension-gfm-tagfilter: 1.0.2 - micromark-extension-gfm-task-list-item: 1.0.5 - micromark-util-combine-extensions: 1.1.0 - micromark-util-types: 1.1.0 - micromark-extension-gfm@3.0.0: dependencies: micromark-extension-gfm-autolink-literal: 2.1.0 @@ -10210,6 +9612,8 @@ snapshots: nanoid@3.3.17: {} + nanoid@3.3.18: {} + nanostores@0.10.3: {} natural-compare@1.4.0: {} @@ -10366,8 +9770,6 @@ snapshots: unist-util-visit-children: 3.0.0 vfile: 6.0.3 - parse-numeric-range@1.3.0: {} - parse5@6.0.1: {} parse5@7.3.0: @@ -10404,162 +9806,162 @@ snapshots: pkce-challenge@5.0.1: {} - postcss-calc@9.0.1(postcss@8.5.26): + postcss-calc@9.0.1(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-colormin@6.1.0(postcss@8.5.26): + postcss-colormin@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.4 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-convert-values@6.1.0(postcss@8.5.26): + postcss-convert-values@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.4 - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-discard-comments@6.0.2(postcss@8.5.26): + postcss-discard-comments@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - postcss-discard-duplicates@6.0.3(postcss@8.5.26): + postcss-discard-duplicates@6.0.3(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - postcss-discard-empty@6.0.3(postcss@8.5.26): + postcss-discard-empty@6.0.3(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - postcss-discard-overridden@6.0.2(postcss@8.5.26): + postcss-discard-overridden@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-html@1.8.1: dependencies: htmlparser2: 8.0.2 js-tokens: 9.0.1 - postcss: 8.5.26 - postcss-safe-parser: 6.0.0(postcss@8.5.26) + postcss: 8.5.28 + postcss-safe-parser: 6.0.0(postcss@8.5.28) - postcss-merge-longhand@6.0.5(postcss@8.5.26): + postcss-merge-longhand@6.0.5(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - stylehacks: 6.1.1(postcss@8.5.26) + stylehacks: 6.1.1(postcss@8.5.28) - postcss-merge-rules@6.1.1(postcss@8.5.26): + postcss-merge-rules@6.1.1(postcss@8.5.28): dependencies: browserslist: 4.28.4 caniuse-api: 3.0.0 - cssnano-utils: 4.0.2(postcss@8.5.26) - postcss: 8.5.26 + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 postcss-selector-parser: 6.1.2 - postcss-minify-font-values@6.1.0(postcss@8.5.26): + postcss-minify-font-values@6.1.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-minify-gradients@6.0.3(postcss@8.5.26): + postcss-minify-gradients@6.0.3(postcss@8.5.28): dependencies: colord: 2.9.3 - cssnano-utils: 4.0.2(postcss@8.5.26) - postcss: 8.5.26 + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-minify-params@6.1.0(postcss@8.5.26): + postcss-minify-params@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.4 - cssnano-utils: 4.0.2(postcss@8.5.26) - postcss: 8.5.26 + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-minify-selectors@6.0.4(postcss@8.5.26): + postcss-minify-selectors@6.0.4(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-selector-parser: 6.1.2 - postcss-normalize-charset@6.0.2(postcss@8.5.26): + postcss-normalize-charset@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - postcss-normalize-display-values@6.0.2(postcss@8.5.26): + postcss-normalize-display-values@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-positions@6.0.2(postcss@8.5.26): + postcss-normalize-positions@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@6.0.2(postcss@8.5.26): + postcss-normalize-repeat-style@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-string@6.0.2(postcss@8.5.26): + postcss-normalize-string@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@6.0.2(postcss@8.5.26): + postcss-normalize-timing-functions@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@6.1.0(postcss@8.5.26): + postcss-normalize-unicode@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.4 - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-url@6.0.2(postcss@8.5.26): + postcss-normalize-url@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@6.0.2(postcss@8.5.26): + postcss-normalize-whitespace@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-ordered-values@6.0.2(postcss@8.5.26): + postcss-ordered-values@6.0.2(postcss@8.5.28): dependencies: - cssnano-utils: 4.0.2(postcss@8.5.26) - postcss: 8.5.26 + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-reduce-initial@6.1.0(postcss@8.5.26): + postcss-reduce-initial@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.4 caniuse-api: 3.0.0 - postcss: 8.5.26 + postcss: 8.5.28 - postcss-reduce-transforms@6.0.2(postcss@8.5.26): + postcss-reduce-transforms@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 postcss-resolve-nested-selector@0.1.6: {} - postcss-safe-parser@6.0.0(postcss@8.5.26): + postcss-safe-parser@6.0.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - postcss-safe-parser@7.0.1(postcss@8.5.26): + postcss-safe-parser@7.0.1(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - postcss-scss@4.0.9(postcss@8.5.26): + postcss-scss@4.0.9(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-selector-parser@6.0.10: dependencies: @@ -10576,15 +9978,15 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@6.0.3(postcss@8.5.26): + postcss-svgo@6.0.3(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 svgo: 3.3.2 - postcss-unique-selectors@6.0.4(postcss@8.5.26): + postcss-unique-selectors@6.0.4(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-selector-parser: 6.1.2 postcss-value-parser@4.2.0: {} @@ -10595,6 +9997,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.28: + dependencies: + nanoid: 3.3.18 + picocolors: 1.1.1 + source-map-js: 1.2.1 + powershell-utils@0.1.0: {} powershell-utils@0.2.0: {} @@ -10708,13 +10116,6 @@ snapshots: unified: 11.0.5 unist-util-visit: 5.1.0 - rehype-parse@8.0.5: - dependencies: - '@types/hast': 2.3.10 - hast-util-from-parse5: 7.1.2 - parse5: 6.0.1 - unified: 10.1.2 - rehype-raw@7.0.0: dependencies: '@types/hast': 3.0.5 @@ -10735,19 +10136,6 @@ snapshots: hast-util-to-html: 9.0.5 unified: 11.0.5 - rehype-stringify@9.0.4: - dependencies: - '@types/hast': 2.3.10 - hast-util-to-html: 8.0.4 - unified: 10.1.2 - - rehype@12.0.1: - dependencies: - '@types/hast': 2.3.10 - rehype-parse: 8.0.5 - rehype-stringify: 9.0.4 - unified: 10.1.2 - remark-directive@2.0.1(supports-color@7.2.0): dependencies: '@types/mdast': 3.0.15 @@ -10757,15 +10145,6 @@ snapshots: transitivePeerDependencies: - supports-color - remark-gfm@3.0.1(supports-color@7.2.0): - dependencies: - '@types/mdast': 3.0.15 - mdast-util-gfm: 2.0.2(supports-color@7.2.0) - micromark-extension-gfm: 2.0.3 - unified: 10.1.2 - transitivePeerDependencies: - - supports-color - remark-gfm@4.0.1(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 @@ -11027,37 +10406,38 @@ snapshots: setprototypeof@1.2.0: {} - sharp@0.35.0: + sharp@0.35.4(@types/node@18.19.130): dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 semver: 7.8.5 optionalDependencies: - '@img/sharp-darwin-arm64': 0.35.0 - '@img/sharp-darwin-x64': 0.35.0 - '@img/sharp-freebsd-wasm32': 0.35.0 - '@img/sharp-libvips-darwin-arm64': 1.3.0 - '@img/sharp-libvips-darwin-x64': 1.3.0 - '@img/sharp-libvips-linux-arm': 1.3.0 - '@img/sharp-libvips-linux-arm64': 1.3.0 - '@img/sharp-libvips-linux-ppc64': 1.3.0 - '@img/sharp-libvips-linux-riscv64': 1.3.0 - '@img/sharp-libvips-linux-s390x': 1.3.0 - '@img/sharp-libvips-linux-x64': 1.3.0 - '@img/sharp-libvips-linuxmusl-arm64': 1.3.0 - '@img/sharp-libvips-linuxmusl-x64': 1.3.0 - '@img/sharp-linux-arm': 0.35.0 - '@img/sharp-linux-arm64': 0.35.0 - '@img/sharp-linux-ppc64': 0.35.0 - '@img/sharp-linux-riscv64': 0.35.0 - '@img/sharp-linux-s390x': 0.35.0 - '@img/sharp-linux-x64': 0.35.0 - '@img/sharp-linuxmusl-arm64': 0.35.0 - '@img/sharp-linuxmusl-x64': 0.35.0 - '@img/sharp-webcontainers-wasm32': 0.35.0 - '@img/sharp-win32-arm64': 0.35.0 - '@img/sharp-win32-ia32': 0.35.0 - '@img/sharp-win32-x64': 0.35.0 + '@img/sharp-darwin-arm64': 0.35.4 + '@img/sharp-darwin-x64': 0.35.4 + '@img/sharp-freebsd-wasm32': 0.35.4 + '@img/sharp-libvips-darwin-arm64': 1.3.3 + '@img/sharp-libvips-darwin-x64': 1.3.3 + '@img/sharp-libvips-linux-arm': 1.3.3 + '@img/sharp-libvips-linux-arm64': 1.3.3 + '@img/sharp-libvips-linux-ppc64': 1.3.3 + '@img/sharp-libvips-linux-riscv64': 1.3.3 + '@img/sharp-libvips-linux-s390x': 1.3.3 + '@img/sharp-libvips-linux-x64': 1.3.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.3 + '@img/sharp-libvips-linuxmusl-x64': 1.3.3 + '@img/sharp-linux-arm': 0.35.4 + '@img/sharp-linux-arm64': 0.35.4 + '@img/sharp-linux-ppc64': 0.35.4 + '@img/sharp-linux-riscv64': 0.35.4 + '@img/sharp-linux-s390x': 0.35.4 + '@img/sharp-linux-x64': 0.35.4 + '@img/sharp-linuxmusl-arm64': 0.35.4 + '@img/sharp-linuxmusl-x64': 0.35.4 + '@img/sharp-webcontainers-wasm32': 0.35.4 + '@img/sharp-win32-arm64': 0.35.4 + '@img/sharp-win32-ia32': 0.35.4 + '@img/sharp-win32-x64': 0.35.4 + '@types/node': 18.19.130 shebang-command@2.0.0: dependencies: @@ -11224,10 +10604,10 @@ snapshots: dependencies: inline-style-parser: 0.2.7 - stylehacks@6.1.1(postcss@8.5.26): + stylehacks@6.1.1(postcss@8.5.28): dependencies: browserslist: 4.28.4 - postcss: 8.5.26 + postcss: 8.5.28 postcss-selector-parser: 6.1.2 stylelint@16.26.1(supports-color@7.2.0)(typescript@5.9.3): @@ -11260,9 +10640,9 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.26 + postcss: 8.5.28 postcss-resolve-nested-selector: 0.1.6 - postcss-safe-parser: 7.0.1(postcss@8.5.26) + postcss-safe-parser: 7.0.1(postcss@8.5.28) postcss-selector-parser: 7.1.5 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 @@ -11392,10 +10772,9 @@ snapshots: dependencies: esbuild: 0.15.18 - tsx@4.21.0: + tsx@4.23.13: dependencies: - esbuild: 0.27.7 - get-tsconfig: 4.14.0 + esbuild: 0.28.2 optionalDependencies: fsevents: 2.3.3 @@ -11419,12 +10798,12 @@ snapshots: dependencies: semver: 7.8.5 - typescript-eslint@8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3): + typescript-eslint@8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.69.0(@typescript-eslint/parser@8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/parser': 8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.69.0(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.69.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.70.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.70.0(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.70.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) typescript: 5.9.3 transitivePeerDependencies: @@ -11481,8 +10860,6 @@ snapshots: '@types/unist': 3.0.3 unist-util-is: 6.0.1 - unist-util-generated@2.0.1: {} - unist-util-is@5.2.1: dependencies: '@types/unist': 2.0.11 @@ -11611,11 +10988,11 @@ snapshots: vary@1.1.2: {} - vee-validate@4.15.1(vue@3.5.25(typescript@5.9.3)): + vee-validate@4.15.1(vue@3.5.42(typescript@5.9.3)): dependencies: '@vue/devtools-api': 7.7.10 type-fest: 4.41.0 - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.42(typescript@5.9.3) vfile-location@4.1.0: dependencies: @@ -11649,24 +11026,17 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-dev-rpc@2.0.0(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)): + vite-dev-rpc@2.0.0(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)): dependencies: birpc: 4.1.0 - vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) - vite-hot-client: 2.2.0(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)) + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) + vite-hot-client: 2.2.0(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)) - vite-hot-client@2.2.0(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)): + vite-hot-client@2.2.0(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)): dependencies: - vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) - vite-plugin-dynamic-import@1.6.0: - dependencies: - acorn: 8.18.0 - es-module-lexer: 1.7.0 - fast-glob: 3.3.3 - magic-string: 0.30.21 - - vite-plugin-inspect@11.4.1(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)): + vite-plugin-inspect@11.4.1(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)): dependencies: ansis: 4.3.1 error-stack-parser-es: 1.0.5 @@ -11676,24 +11046,24 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.2 - vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) - vite-dev-rpc: 2.0.0(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)) + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) + vite-dev-rpc: 2.0.0(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)) - vite-plugin-vue-devtools@8.2.1(supports-color@7.2.0)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0))(vue@3.5.25(typescript@5.9.3)): + vite-plugin-vue-devtools@8.2.1(supports-color@7.2.0)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3)): dependencies: - '@vue/devtools-core': 8.2.1(vue@3.5.25(typescript@5.9.3)) + '@vue/devtools-core': 8.2.1(vue@3.5.42(typescript@5.9.3)) '@vue/devtools-kit': 8.2.1 '@vue/devtools-shared': 8.2.1 sirv: 3.0.2 - vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) - vite-plugin-inspect: 11.4.1(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)) - vite-plugin-vue-inspector: 6.0.0(supports-color@7.2.0)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)) - vue: 3.5.25(typescript@5.9.3) + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) + vite-plugin-inspect: 11.4.1(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)) + vite-plugin-vue-inspector: 6.0.0(supports-color@7.2.0)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)) + vue: 3.5.42(typescript@5.9.3) transitivePeerDependencies: - '@nuxt/kit' - supports-color - vite-plugin-vue-inspector@6.0.0(supports-color@7.2.0)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)): + vite-plugin-vue-inspector@6.0.0(supports-color@7.2.0)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)): dependencies: '@babel/core': 7.29.6(supports-color@7.2.0) '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.29.6(supports-color@7.2.0))(supports-color@7.2.0) @@ -11704,14 +11074,14 @@ snapshots: '@vue/compiler-dom': 3.5.41 kolorist: 1.8.0 magic-string: 0.30.21 - vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) transitivePeerDependencies: - supports-color - vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0): + vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 - picomatch: 4.0.5 + picomatch: 4.0.7 postcss: 8.5.26 rolldown: 1.2.4 tinyglobby: 0.2.17 @@ -11722,17 +11092,17 @@ snapshots: jiti: 2.7.0 sass: 1.102.0 terser: 5.44.1 - tsx: 4.21.0 + tsx: 4.23.13 yaml: 2.9.0 - vitefu@1.1.3(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)): + vitefu@1.1.3(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)): optionalDependencies: - vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) - vitest@5.0.0(@types/node@18.19.130)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)): + vitest@5.0.0(@types/node@18.19.130)(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)): dependencies: '@types/chai': 5.2.3 - '@vitest/mocker': 5.0.0(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0)) + '@vitest/mocker': 5.0.0(vite@8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0)) chai: 6.2.2 es-module-lexer: 2.3.2 expect-type: 1.4.0 @@ -11743,7 +11113,7 @@ snapshots: tinybench: 6.1.4 tinyexec: 1.3.0 tinyglobby: 0.2.17 - vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.9.0) + vite: 8.2.1(@types/node@18.19.130)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.44.1)(tsx@4.23.13)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 18.19.130 @@ -11849,9 +11219,9 @@ snapshots: vscode-uri@3.1.0: {} - vue-demi@0.14.10(vue@3.5.25(typescript@5.9.3)): + vue-demi@0.14.10(vue@3.5.42(typescript@5.9.3)): dependencies: - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.42(typescript@5.9.3) vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0): dependencies: @@ -11865,13 +11235,13 @@ snapshots: transitivePeerDependencies: - supports-color - vue@3.5.25(typescript@5.9.3): + vue@3.5.42(typescript@5.9.3): dependencies: - '@vue/compiler-dom': 3.5.25 - '@vue/compiler-sfc': 3.5.25 - '@vue/runtime-dom': 3.5.25 - '@vue/server-renderer': 3.5.25(vue@3.5.25(typescript@5.9.3)) - '@vue/shared': 3.5.25 + '@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 optionalDependencies: typescript: 5.9.3 From 6ee08f81f1ca6681ea2e3881da8a171f9aa3c102 Mon Sep 17 00:00:00 2001 From: Bruno Germano Date: Thu, 10 Sep 2026 17:14:32 -0300 Subject: [PATCH 17/33] chore: update dependencies --- pnpm-lock.yaml | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c0e4794d04..2279ed23e4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3821,11 +3821,6 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} - nanoid@3.3.17: - resolution: {integrity: sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - nanoid@3.3.18: resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4229,10 +4224,6 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.26: - resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.28: resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} engines: {node: ^10 || ^12 || >=14} @@ -9610,8 +9601,6 @@ snapshots: muggle-string@0.4.1: {} - nanoid@3.3.17: {} - nanoid@3.3.18: {} nanostores@0.10.3: {} @@ -9991,12 +9980,6 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.26: - dependencies: - nanoid: 3.3.17 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.5.28: dependencies: nanoid: 3.3.18 @@ -11082,7 +11065,7 @@ snapshots: dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 - postcss: 8.5.26 + postcss: 8.5.28 rolldown: 1.2.4 tinyglobby: 0.2.17 optionalDependencies: From b33b60978dc5ed6139d16e70729510610ff6731b Mon Sep 17 00:00:00 2001 From: Bruno Germano Date: Thu, 10 Sep 2026 17:54:44 -0300 Subject: [PATCH 18/33] refactor(docs-home): align the home with the design system reference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bring both language homes onto the shape the design system's own DocsHome reference draws — same components, same spacing rungs, same tokens. The masthead was a HeroTitle island wrapped in page spacing; it is now the reference's hero header as static markup, so only the copy pill hydrates. Its h1 caps at --container-2xl (the narrowest rung holding the headline on one line at 56px) and the lead one rung under it, and both controls keep their natural size at every width — HeroTitle stretched them full-bleed below sm, which made the rounded-full pill read as a second primary. The guided-route cell was missing its ground: PixelateField ports the system's PixelateBanner as pure CSS, masked to one ellipse in the outer corner so it fades out before reaching the copy. Sections open at 64 / 96 instead of DocProse's flat 56 — the page is heading, sentence and bordered grid throughout, where 56 reads as one continuous stack — and the column's own inset takes the same pair. The step lands in @layer components: Tailwind runs in important mode here, and the cascade reverses layer order for important declarations, so nothing else outranks DocProse's pt-14. The home also stops routing through PageContent, the reading shell: no trailing hr, and DocPagination closes the page with only its next half filled. Templates take the colored framework marks where the icon set ships one. Co-Authored-By: Claude Opus 5 --- src/components/homes/DocsHome.astro | 130 ++++++++++++++++++++--- src/components/homes/PixelateField.astro | 126 ++++++++++++++++++++++ src/components/webkit/HeroHome.vue | 97 ----------------- src/data/docs-home/en.ts | 14 ++- src/data/docs-home/pt-br.ts | 14 ++- src/data/docs-home/types.ts | 12 +++ src/layouts/DocsHomeLayout.astro | 56 +++++++--- src/pages/en/documentation/index.astro | 7 +- src/pages/pt-br/documentacao/index.astro | 7 +- src/styles/main.css | 22 ++++ 10 files changed, 346 insertions(+), 139 deletions(-) create mode 100644 src/components/homes/PixelateField.astro delete mode 100644 src/components/webkit/HeroHome.vue diff --git a/src/components/homes/DocsHome.astro b/src/components/homes/DocsHome.astro index 38bdeec031..4616df5315 100644 --- a/src/components/homes/DocsHome.astro +++ b/src/components/homes/DocsHome.astro @@ -1,12 +1,16 @@ --- +/** The documentation HOME: a directory, not a landing page. */ +// It opens the way every reading page does — the column, `DocProse`, a masthead as the +// first block — with no viewport-tall band, so the sections that answer "where do I +// start" are the top of the page. Copy lives in `~/data/docs-home`. import Button from '@aziontech/webkit/button'; import DocCard from '@aziontech/webkit/doc-card'; import DocCardGroup from '@aziontech/webkit/doc-card-group'; import FrameBox from '@aziontech/webkit/frame-box'; import CopyPromptButton from '~/components/webkit/CopyPromptButton.vue'; -import HeroHome from '~/components/webkit/HeroHome.vue'; import InlineLinks from '~/components/homes/InlineLinks.astro'; +import PixelateField from '~/components/homes/PixelateField.astro'; import SectionHeading from '~/components/homes/SectionHeading.astro'; import type { DocsHomeContent } from '~/data/docs-home'; @@ -19,21 +23,77 @@ const { content } = Astro.props; const { hero, interfaceSection, sections } = content; --- - +{ + /* + `data-doc-chrome` stops the prose type contract at the masthead's edge, so the h1 + and the lead take the hero scale set here. The title cap (752) is the narrowest + container rung that holds the headline on one line at 56px; the lead sits one rung + under it (644) so it breaks to two even lines instead of a stub. +*/ +} +
+

+ {hero.title} +

+

+ {hero.description} +

+ + { + /* + Two ways in: start reading, or hand the prompt to the tool already open. Both + controls keep their natural size at every width — the pill is `rounded-full` and + reads as a second primary when stretched — so the pair wraps instead of going fluid. + */ + } +
+
+
+ {/* In the action block, not under the masthead: it is the button's own line. */} +

+ {hero.note} +

+
+
+ +{ + /* Interface before objective: a reader who already knows they want the Console, the + terminal or an agent should not read four jobs first to find the way in. */ +}

{interfaceSection.intro}

+{ + /* + Both halves of one offer — "hand it the prompt" / "walk me through it" — as one + block. 7fr/3fr is the content's own ratio: 3fr is the narrowest the right cell can + be and still fit its button on one line. + + THE ROW IS THE FRAME, NOT THE CELLS. The cells draw no borders and the seam is the + grid's `gap-px` showing the wrapper's border colour, so the rule is one hairline + instead of two and the corner marks register the block once. + + `data-doc-chrome` stops the prose contract at the block's edge; `data-doc-block` + keeps its OUTER spacing in the prose's hands, so it sits in the flow like a group. +*/ +}
@@ -52,8 +112,34 @@ const { hero, interfaceSection, sections } = content; />
- -
+ + { + /* + `justify-between` pins the button to the cell's floor so both cells share one + baseline; the slack it leaves in the shorter cell is the price of that. + + The ground is the pixelate field at `opacity-40`, masked to one ellipse in the + outer corner so it fades out before it reaches the copy — a pool of light under + the cell, not wallpaper behind it. `overflow-hidden` is load-bearing: the field + is `inset-0`, and without it the grid's 1px seam shows a band of accent through. + */ + } + + + +

{interfaceSection.guided.title}