From b95835f6e084a210765f5cfd9e77c2505ff7d876 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 18:09:00 +0200 Subject: [PATCH 001/158] chore: declare the nuxt stack instead of a playground override MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The playground carried its own .gitignore for .nuxt, .output, .data and .nitro, on the premise that gitignore-sync ships no nuxt stack. It does, and has since v0.1.0 — the stack was simply never declared here, because duxt is a layer and its nuxt.config.ts sits under playground/ rather than at the root. Detection finds it anyway (PATTERN_DEPTH looks one level down), so `sync --detect` has been proposing nuxt all along. Declare it, and the root patterns cover the playground: they are unanchored, so .nuxt, .output and .data match at any depth. The override's only remaining line, .cache, is a Nuxt 2 leftover — no such directory exists and Nuxt 3 caches under .nuxt/cache. Adding the stack also re-sorts `agents` into template order; no block content changes. --- .gitignore | 19 +++++++++++++------ playground/.gitignore | 8 -------- 2 files changed, 13 insertions(+), 14 deletions(-) delete mode 100644 playground/.gitignore diff --git a/.gitignore b/.gitignore index 3af46a99..c0168f0b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,16 @@ # region gitignore-sync -# stacks: core, git, node, vscode, intellij, macos, windows, linux, agents +# stacks: core, agents, git, node, nuxt, vscode, intellij, macos, windows, linux # ───────────────────────────────────────── # region core@v1 .DS_Store # endregion +# region agents@v1 +.claude/settings.local.json +.claude/worktrees/ +# endregion + # region git@v1 *.orig *.rej @@ -31,6 +36,13 @@ coverage *.tgz # endregion +# region nuxt@v1 +.nuxt +.output +.nitro +.data +# endregion + # region vscode@v1 .vscode/* !.vscode/extensions.json @@ -85,9 +97,4 @@ $RECYCLE.BIN/ .nfs* # endregion -# region agents@v1 -.claude/settings.local.json -.claude/worktrees/ -# endregion - # endregion diff --git a/playground/.gitignore b/playground/.gitignore deleted file mode 100644 index f1dfc5c1..00000000 --- a/playground/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Nuxt build artefacts and Content's git-source cache. Kept local to the -# playground because the root .gitignore is generated by gitignore-sync and -# carries no nuxt stack. -.nuxt -.output -.data -.nitro -.cache From 747ef4bebf02285bf82a547eb164165b1378aed1 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 18:31:13 +0200 Subject: [PATCH 002/158] refactor: make the repo root the layer, with www beside it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit playground/ was a standalone Nuxt project that used Content directly. That was right for the spike and wrong as a base: it contained no layer, so nothing was installable. ZTL-UwU/shadcn-docs-nuxt shows the shape a published theme takes, and this adopts it. The root IS the layer now — nuxt.config.ts, content.config.ts and app/ sit here, package.json points at them with main plus a files allowlist, and nuxt is a peerDependency. www/ is the consuming site, the only workspace package, and it extends the layer by path exactly as a downstream repo extends it by name. The finding that forced the design: Content resolves a collection against the rootDir of the LAYER that declared it (collection.__rootDir = curr.cwd), not against the consumer. A relative source.cwd in this repo points into this repo. The layer therefore computes an absolute path at load time — join(process.cwd(), 'docs') — which works because c12 executes the config rather than reading it. www/docs/ renders through the layer's own collection, proving it. Also here, both forced by the split: - tsc stops at the meta scripts. It cannot typecheck a Nuxt config, whose module options exist only in generated types. `nuxt typecheck` is the tool for that, but vue-tsc 3.3.11 cannot run on TypeScript 7 (it requires typescript/lib/tsc, gone in 7), so the layer's own typecheck is unsolved rather than solved badly. - The lockfile is rebuilt: after the rename pnpm 12 kept writing symlinks to store paths it never materialised. --- AGENTS.md | 11 +- CLAUDE.md | 11 +- README.md | 2 +- {playground/app => app}/app.vue | 0 app/pages/[...slug].vue | 15 + content.config.ts | 24 ++ nuxt.config.ts | 16 + package.json | 13 + playground/nuxt.config.ts | 13 - playground/package.json | 17 - pnpm-lock.yaml | 401 ++++++++---------------- pnpm-workspace.yaml | 4 +- tsconfig.json | 7 +- {playground => www}/app/pages/index.vue | 0 {playground => www}/content.config.ts | 0 www/docs/edge-cases.md | 9 + www/docs/index.md | 10 + www/nuxt.config.ts | 9 + www/package.json | 15 + {playground => www}/tsconfig.json | 0 20 files changed, 266 insertions(+), 311 deletions(-) rename {playground/app => app}/app.vue (100%) create mode 100644 app/pages/[...slug].vue create mode 100644 content.config.ts create mode 100644 nuxt.config.ts delete mode 100644 playground/nuxt.config.ts delete mode 100644 playground/package.json rename {playground => www}/app/pages/index.vue (100%) rename {playground => www}/content.config.ts (100%) create mode 100644 www/docs/edge-cases.md create mode 100644 www/docs/index.md create mode 100644 www/nuxt.config.ts create mode 100644 www/package.json rename {playground => www}/tsconfig.json (100%) diff --git a/AGENTS.md b/AGENTS.md index 6104243d..d07afa97 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -43,10 +43,15 @@ What that leaves as candidate value: the **ergonomics** (a compact `sources` lis **Decided so far:** - **The theme is shadcn-vue, wired through `shadcn-nuxt`** — a clean base with owned components, not Docus or Nuxt UI. No UI-Pro dependency, and the components are copied into the repo rather than imported, so overriding them is editing them. -- **Numbered section prefixes are a non-issue.** Content strips them itself: `1.guides/` renders at `/guides`, `99.adr/` at `/adr`. Verified in the playground. Reordering does not move a URL; only renaming the name part does. -- **No SQLite driver is installed.** Content's default is `better-sqlite3`, a native addon needing a node-gyp toolchain. `content.experimental.nativeSqlite` uses Node 24's built-in `node:sqlite` instead, which needs no package at all — the playground builds and renders with neither `better-sqlite3` nor `@libsql/client` present. It is flagged experimental in Content; if that changes, `@libsql/client` is the prebuilt fallback, not `better-sqlite3`. +- **Numbered section prefixes are a non-issue.** Content strips them itself: `1.guides/` renders at `/guides`, `99.adr/` at `/adr`. Verified in `www/`. Reordering does not move a URL; only renaming the name part does. +- **No SQLite driver is installed.** Content's default is `better-sqlite3`, a native addon needing a node-gyp toolchain. `content.experimental.nativeSqlite` uses Node 24's built-in `node:sqlite` instead, which needs no package at all — `www/` builds and renders with neither `better-sqlite3` nor `@libsql/client` present. It is flagged experimental in Content; if that changes, `@libsql/client` is the prebuilt fallback, not `better-sqlite3`. -If the layer is built, `playground/` is where it is developed and wants edge cases, ugly frontmatter, several sources and a tag to read from. [`kirchDev/duxt-starter`](https://github.com/kirchDev/duxt-starter) would be a **different artifact** — minimal and exemplary, what a stranger clones with `npx nuxi@latest init -t github:kirchDev/duxt-starter`. Do not conflate the two; a playground makes a bad starter. +**Repo shape — the root IS the layer.** `nuxt.config.ts`, `content.config.ts` and `app/` sit at the repo root, and `package.json` points at them with `main: "./nuxt.config.ts"` plus a `files` allowlist, so `extends: ['@kirchdev/duxt']` resolves. `www/` is the consuming site beside it — the only workspace package, and the development target, exactly as `www/` is in `ZTL-UwU/shadcn-docs-nuxt`. `nuxt` is a peerDependency of the layer and a real dependency only of `www/`. + +> [!IMPORTANT] +> **A layer's collections resolve against the LAYER, not the consumer.** Content sets `collection.__rootDir = curr.cwd` per layer, so a relative `source.cwd` in this repo's `content.config.ts` points into this repo — never into the site that extends it. The layer therefore computes an absolute path at load time (`join(process.cwd(), 'docs')`), which works because c12 executes the config. This is the seam the whole `sources` shorthand sits on. + +`www/` wants edge cases, ugly frontmatter, several sources and a tag to read from. [`kirchDev/duxt-starter`](https://github.com/kirchDev/duxt-starter) would be a **different artifact** — minimal and exemplary, what a stranger clones with `npx nuxi@latest init -t github:kirchDev/duxt-starter`. Do not conflate the two; a development site makes a bad starter. ## Commands diff --git a/CLAUDE.md b/CLAUDE.md index 6104243d..d07afa97 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -43,10 +43,15 @@ What that leaves as candidate value: the **ergonomics** (a compact `sources` lis **Decided so far:** - **The theme is shadcn-vue, wired through `shadcn-nuxt`** — a clean base with owned components, not Docus or Nuxt UI. No UI-Pro dependency, and the components are copied into the repo rather than imported, so overriding them is editing them. -- **Numbered section prefixes are a non-issue.** Content strips them itself: `1.guides/` renders at `/guides`, `99.adr/` at `/adr`. Verified in the playground. Reordering does not move a URL; only renaming the name part does. -- **No SQLite driver is installed.** Content's default is `better-sqlite3`, a native addon needing a node-gyp toolchain. `content.experimental.nativeSqlite` uses Node 24's built-in `node:sqlite` instead, which needs no package at all — the playground builds and renders with neither `better-sqlite3` nor `@libsql/client` present. It is flagged experimental in Content; if that changes, `@libsql/client` is the prebuilt fallback, not `better-sqlite3`. +- **Numbered section prefixes are a non-issue.** Content strips them itself: `1.guides/` renders at `/guides`, `99.adr/` at `/adr`. Verified in `www/`. Reordering does not move a URL; only renaming the name part does. +- **No SQLite driver is installed.** Content's default is `better-sqlite3`, a native addon needing a node-gyp toolchain. `content.experimental.nativeSqlite` uses Node 24's built-in `node:sqlite` instead, which needs no package at all — `www/` builds and renders with neither `better-sqlite3` nor `@libsql/client` present. It is flagged experimental in Content; if that changes, `@libsql/client` is the prebuilt fallback, not `better-sqlite3`. -If the layer is built, `playground/` is where it is developed and wants edge cases, ugly frontmatter, several sources and a tag to read from. [`kirchDev/duxt-starter`](https://github.com/kirchDev/duxt-starter) would be a **different artifact** — minimal and exemplary, what a stranger clones with `npx nuxi@latest init -t github:kirchDev/duxt-starter`. Do not conflate the two; a playground makes a bad starter. +**Repo shape — the root IS the layer.** `nuxt.config.ts`, `content.config.ts` and `app/` sit at the repo root, and `package.json` points at them with `main: "./nuxt.config.ts"` plus a `files` allowlist, so `extends: ['@kirchdev/duxt']` resolves. `www/` is the consuming site beside it — the only workspace package, and the development target, exactly as `www/` is in `ZTL-UwU/shadcn-docs-nuxt`. `nuxt` is a peerDependency of the layer and a real dependency only of `www/`. + +> [!IMPORTANT] +> **A layer's collections resolve against the LAYER, not the consumer.** Content sets `collection.__rootDir = curr.cwd` per layer, so a relative `source.cwd` in this repo's `content.config.ts` points into this repo — never into the site that extends it. The layer therefore computes an absolute path at load time (`join(process.cwd(), 'docs')`), which works because c12 executes the config. This is the seam the whole `sources` shorthand sits on. + +`www/` wants edge cases, ugly frontmatter, several sources and a tag to read from. [`kirchDev/duxt-starter`](https://github.com/kirchDev/duxt-starter) would be a **different artifact** — minimal and exemplary, what a stranger clones with `npx nuxi@latest init -t github:kirchDev/duxt-starter`. Do not conflate the two; a development site makes a bad starter. ## Commands diff --git a/README.md b/README.md index d7f78855..03ec5861 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ pnpm install # wires the husky hooks pnpm check # lint + format + typecheck + policy parity ``` -`playground/` does not exist yet. It is meant to be where the layer is developed — it deliberately carries edge cases, ugly frontmatter, several sources and a tag to read from. It is not a template; the exemplary starting point lives in [`kirchDev/duxt-starter`](https://github.com/kirchDev/duxt-starter). +The repo root **is** the layer — `nuxt.config.ts`, `content.config.ts` and `app/` live there, and `package.json` points at them. `www/` beside it is the site that consumes the layer, and the development target: it deliberately carries the ugly cases — edge-case frontmatter, several sources, a tag to read from. It is not a template; the exemplary starting point lives in [`kirchDev/duxt-starter`](https://github.com/kirchDev/duxt-starter). ## 🤝 Contributing diff --git a/playground/app/app.vue b/app/app.vue similarity index 100% rename from playground/app/app.vue rename to app/app.vue diff --git a/app/pages/[...slug].vue b/app/pages/[...slug].vue new file mode 100644 index 00000000..5cd7cce4 --- /dev/null +++ b/app/pages/[...slug].vue @@ -0,0 +1,15 @@ + + + diff --git a/content.config.ts b/content.config.ts new file mode 100644 index 00000000..cf593854 --- /dev/null +++ b/content.config.ts @@ -0,0 +1,24 @@ +import { join } from 'node:path'; +import { defineCollection, defineContentConfig } from '@nuxt/content'; + +// Content merges content.config.ts from every layer — but it resolves each +// collection against the rootDir of the LAYER that declared it +// (`collection.__rootDir = curr.cwd` in the module), not against the consumer. +// A layer therefore cannot declare a collection over the consumer's docs/ by +// writing a relative path; it has to compute an absolute one. +// +// It can, because c12 executes this file: process.cwd() is the directory the +// consumer's nuxt process runs in. This is the seam the whole `sources` +// shorthand will sit on, so it is proven here first. +export default defineContentConfig({ + collections: { + docs: defineCollection({ + type: 'page', + source: { + include: '**/*.md', + cwd: join(process.cwd(), 'docs'), + prefix: '' + } + }) + } +}); diff --git a/nuxt.config.ts b/nuxt.config.ts new file mode 100644 index 00000000..7766fdcd --- /dev/null +++ b/nuxt.config.ts @@ -0,0 +1,16 @@ +import { defineNuxtConfig } from 'nuxt/config'; + +// The layer itself. A consumer gets all of this by extending '@kirchdev/duxt', +// which resolves through package.json's `main` to this file. +export default defineNuxtConfig({ + modules: ['@nuxt/content'], + + content: { + // Content's default driver, better-sqlite3, is a native addon compiled + // through node-gyp. Node 24 ships node:sqlite, so no driver package is + // needed — see CLAUDE.md for the fallback if this flag ever goes away. + experimental: { + nativeSqlite: true + } + } +}); diff --git a/package.json b/package.json index 18a81450..48e739aa 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,13 @@ "type": "git", "url": "git+https://github.com/kirchDev/duxt.git" }, + "files": [ + "app", + "content.config.ts", + "nuxt.config.ts" + ], "type": "module", + "main": "./nuxt.config.ts", "publishConfig": { "access": "public" }, @@ -43,6 +49,9 @@ "taze:w": "taze -w", "prepare": "husky" }, + "dependencies": { + "@nuxt/content": "^3.16.0" + }, "devDependencies": { "@commitlint/cli": "^21.2.2", "@commitlint/config-conventional": "^21.2.2", @@ -50,11 +59,15 @@ "@types/node": "^26.4.0", "husky": "^9.1.7", "lint-staged": "^17.4.1", + "nuxt": "^4.5.2", "oxfmt": "0.65.0", "oxlint": "1.80.0", "taze": "^21.1.0", "typescript": "^7.0.2" }, + "peerDependencies": { + "nuxt": "^4.0.0" + }, "engines": { "node": ">=24" }, diff --git a/playground/nuxt.config.ts b/playground/nuxt.config.ts deleted file mode 100644 index e9228a00..00000000 --- a/playground/nuxt.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -export default defineNuxtConfig({ - modules: ['@nuxt/content'], - compatibilityDate: '2026-09-02', - - content: { - // Content's default driver is better-sqlite3, a native addon that needs a - // node-gyp toolchain. Node 24 ships node:sqlite, so the driver can be - // dropped entirely instead of swapped for another package. - experimental: { - nativeSqlite: true - } - } -}); diff --git a/playground/package.json b/playground/package.json deleted file mode 100644 index dc8a02bd..00000000 --- a/playground/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "$schema": "https://www.schemastore.org/package.json", - "name": "playground", - "version": "0.0.0", - "private": true, - "description": "Development playground for the duxt layer — deliberately carries the ugly cases.", - "type": "module", - "scripts": { - "dev": "nuxt dev", - "build": "nuxt build", - "prepare": "nuxt prepare" - }, - "dependencies": { - "@nuxt/content": "^3.16.0", - "nuxt": "^4.5.2" - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4ff01dff..923b16d9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -108,6 +108,10 @@ settings: importers: .: + dependencies: + '@nuxt/content': + specifier: ^3.16.0 + version: 3.16.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) devDependencies: '@commitlint/cli': specifier: ^21.2.2 @@ -127,6 +131,9 @@ importers: lint-staged: specifier: ^17.4.1 version: 17.4.1 + nuxt: + specifier: ^4.5.2 + version: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@7.0.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@7.0.2))(yaml@2.9.0) oxfmt: specifier: 0.65.0 version: 0.65.0 @@ -140,14 +147,11 @@ importers: specifier: ^7.0.2 version: 7.0.2 - playground: + www: dependencies: - '@nuxt/content': - specifier: ^3.16.0 - version: 3.16.0(@libsql/client@0.17.4)(@oxc-project/types@0.147.0)(better-sqlite3@13.0.3)(esbuild@0.28.2)(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) nuxt: specifier: ^4.5.2 - version: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@libsql/client@0.17.4)(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(better-sqlite3@13.0.3)(db0@0.3.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3))(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(yaml@2.9.0) + version: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@7.0.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@7.0.2))(yaml@2.9.0) packages: @@ -604,63 +608,6 @@ packages: '@kwsites/promise-deferred@1.1.1': resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} - '@libsql/client@0.17.4': - resolution: {integrity: sha512-lYayFWasDV78A+TjlEhr6ubb3odBV6OHjb+wdp8VQcyWWAEIjuwbCHaraEUS4m4yWoo0BvZo96It4VdzZRmRWw==} - - '@libsql/core@0.17.4': - resolution: {integrity: sha512-LqF9gIvnJ38nmAH1y/ChizHqDO/MO1wLgA96XrraulEEbqXxLjleSH92YWTolbuJKgPUmGu4aJk9W3UnAcxLOQ==} - - '@libsql/darwin-arm64@0.5.29': - resolution: {integrity: sha512-K+2RIB1OGFPYQbfay48GakLhqf3ArcbHqPFu7EZiaUcRgFcdw8RoltsMyvbj5ix2fY0HV3Q3Ioa/ByvQdaSM0A==} - cpu: [arm64] - os: [darwin] - - '@libsql/darwin-x64@0.5.29': - resolution: {integrity: sha512-OtT+KFHsKFy1R5FVadr8FJ2Bb1mghtXTyJkxv0trocq7NuHntSki1eUbxpO5ezJesDvBlqFjnWaYYY516QNLhQ==} - cpu: [x64] - os: [darwin] - - '@libsql/hrana-client@0.10.0': - resolution: {integrity: sha512-OoA4EMqRAC7kn7V2P6EQqRcpZf2W+AjsNIyCizBg339Tq/aMC7sRnzs3SklderhmQWAqEzvv8A2vhxVmWpkVvw==} - - '@libsql/isomorphic-ws@0.1.5': - resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} - - '@libsql/linux-arm-gnueabihf@0.5.29': - resolution: {integrity: sha512-CD4n4zj7SJTHso4nf5cuMoWoMSS7asn5hHygsDuhRl8jjjCTT3yE+xdUvI4J7zsyb53VO5ISh4cwwOtf6k2UhQ==} - cpu: [arm] - os: [linux] - - '@libsql/linux-arm-musleabihf@0.5.29': - resolution: {integrity: sha512-2Z9qBVpEJV7OeflzIR3+l5yAd4uTOLxklScYTwpZnkm2vDSGlC1PRlueLaufc4EFITkLKXK2MWBpexuNJfMVcg==} - cpu: [arm] - os: [linux] - - '@libsql/linux-arm64-gnu@0.5.29': - resolution: {integrity: sha512-gURBqaiXIGGwFNEaUj8Ldk7Hps4STtG+31aEidCk5evMMdtsdfL3HPCpvys+ZF/tkOs2MWlRWoSq7SOuCE9k3w==} - cpu: [arm64] - os: [linux] - - '@libsql/linux-arm64-musl@0.5.29': - resolution: {integrity: sha512-fwgYZ0H8mUkyVqXZHF3mT/92iIh1N94Owi/f66cPVNsk9BdGKq5gVpoKO+7UxaNzuEH1roJp2QEwsCZMvBLpqg==} - cpu: [arm64] - os: [linux] - - '@libsql/linux-x64-gnu@0.5.29': - resolution: {integrity: sha512-y14V0vY0nmMC6G0pHeJcEarcnGU2H6cm21ZceRkacWHvQAEhAG0latQkCtoS2njFOXiYIg+JYPfAoWKbi82rkg==} - cpu: [x64] - os: [linux] - - '@libsql/linux-x64-musl@0.5.29': - resolution: {integrity: sha512-gquqwA/39tH4pFl+J9n3SOMSymjX+6kZ3kWgY3b94nXFTwac9bnFNMffIomgvlFaC4ArVqMnOZD3nuJ3H3VO1w==} - cpu: [x64] - os: [linux] - - '@libsql/win32-x64-msvc@0.5.29': - resolution: {integrity: sha512-4/0CvEdhi6+KjMxMaVbFM2n2Z44escBRoEYpR+gZg64DdetzGnYm8mcNLcoySaDJZNaBd6wz5DNdgRmcI4hXcg==} - cpu: [x64] - os: [win32] - '@mapbox/node-pre-gyp@2.0.3': resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==} engines: {node: '>=18'} @@ -680,9 +627,6 @@ packages: '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 - '@neon-rs/load@0.0.4': - resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1627,9 +1571,6 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/ws@8.18.1': - resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript/typescript-aix-ppc64@7.0.2': resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} engines: {node: '>=16.20.0'} @@ -2058,10 +1999,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - better-sqlite3@13.0.3: - resolution: {integrity: sha512-RbOBxmLBG8uvFUc15X9+9SFemKcQ0WBuISBVkpuiaUB2qblC8UWlHEjdWVoZ8AdhSwmoEgsiXKfopX0CQxaACQ==} - engines: {node: '>=22'} - bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} @@ -2227,11 +2164,6 @@ packages: resolution: {integrity: sha512-Rriac6ZrAlVm6cy9Bz4NSp+WMHpwNXoPIYex+HjCgduAVUSbnew29DQjQw0C4g9u3HtSYzGiGY+pdBXAZo+4aA==} engines: {node: '>=22'} - conventional-commits-parser@7.1.0: - resolution: {integrity: sha512-DPp6hkUjvwIivxbkrTiLXeRswNv1A/4GFA2X6scXma0AMa9632V3TwxmrlkUIEtUktiM3Ln+RrSH2xlP3/jUTw==} - engines: {node: '>=22'} - hasBin: true - conventional-commits-parser@7.1.2: resolution: {integrity: sha512-O+x4N2yH+ijvqWlIyTHsXTAP+algNWgGbjY2duCe8w2vUMvUB95cLRslCPfTMQyLAKlet3bhZTdu6ozn4M+QJQ==} engines: {node: '>=22'} @@ -2425,10 +2357,6 @@ packages: detab@3.0.2: resolution: {integrity: sha512-7Bp16Bk8sk0Y6gdXiCtnpGbghn8atnTJdd/82aWvS5ESnlcNvgUc10U2NYS0PAiDSGjWiI8qs/Cv1b2uSGdQ8w==} - detect-libc@2.0.2: - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} - engines: {node: '>=8'} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -2556,8 +2484,8 @@ packages: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} - es-toolkit@1.51.0: - resolution: {integrity: sha512-zC2lQGkM7QX+Gm6iM3+WIdZJzthsEd14LvRNJneSO2hzyz/zNBENR8+YXWo1cKxgPBtV6ksPYHELbcwBRzmdCw==} + es-toolkit@1.52.0: + resolution: {integrity: sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA==} esbuild@0.28.2: resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} @@ -3038,9 +2966,6 @@ packages: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true - js-base64@3.9.3: - resolution: {integrity: sha512-uwYQp+VJ38FVvtim6qNbit6e9uT6dwWQ4Y1+H9TxhW5hcHjpHwoxlR0nMpqUmIFOmu4VqMxwdJA88gIVuZJQ/g==} - js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} @@ -3088,11 +3013,6 @@ packages: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} - libsql@0.5.29: - resolution: {integrity: sha512-8lMP8iMgiBzzoNbAPQ59qdVcj6UaE/Vnm+fiwX4doX4Narook0a4GPKWBEv+CR8a1OwbfkgL18uBfBjWdF0Fzg==} - cpu: [x64, arm64, wasm32, arm] - os: [darwin, linux, win32] - lightningcss-android-arm64@1.33.0: resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} engines: {node: '>= 12.0.0'} @@ -3457,10 +3377,6 @@ packages: xml2js: optional: true - node-addon-api@8.9.2: - resolution: {integrity: sha512-VijLXbi3UACN69I0JVXJsX4tjACjNoQDgv2gTF6sx2wWEi8tkSg2eX8p5gSIFi8z2+DL3oHmY6OyKce38SDolg==} - engines: {node: ^18 || ^20 || >= 21} - node-emoji@2.2.0: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} @@ -3912,9 +3828,6 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - promise-limit@2.7.0: - resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==} - proper-lockfile@4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} @@ -4787,6 +4700,12 @@ packages: vite: optional: true + vue-tsc@3.3.11: + resolution: {integrity: sha512-gOb0B9rtU2+f1dszwPqSH5kAieIF9ReeLhD3kSRNHv5WZZUQz/JdVXW0RTdqhNTMlQkqKzrTTviqKr/4FYZraQ==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + vue@3.5.42: resolution: {integrity: sha512-4RyHQTbQvOPs3MfvUO1Sg0YRrKNnA0mAVtvpd12Tg1fKDN7OHBUl1IqSn8zGJjK9nI3NkNp8cgTpVrSZC5TTcA==} peerDependencies: @@ -5131,7 +5050,7 @@ snapshots: '@commitlint/ensure@21.2.0': dependencies: '@commitlint/types': 21.2.0 - es-toolkit: 1.51.0 + es-toolkit: 1.52.0 '@commitlint/execute-rule@21.0.1': {} @@ -5160,7 +5079,7 @@ snapshots: '@commitlint/types': 21.2.0 cosmiconfig: 9.0.2(typescript@7.0.2) cosmiconfig-typescript-loader: 6.3.0(@types/node@26.4.0)(cosmiconfig@9.0.2(typescript@7.0.2))(typescript@7.0.2) - es-toolkit: 1.51.0 + es-toolkit: 1.52.0 is-plain-obj: 4.1.0 picocolors: 1.1.1 transitivePeerDependencies: @@ -5189,7 +5108,7 @@ snapshots: dependencies: '@commitlint/config-validator': 21.2.0 '@commitlint/types': 21.2.0 - es-toolkit: 1.51.0 + es-toolkit: 1.52.0 global-directory: 5.0.0 resolve-from: 5.0.0 @@ -5208,7 +5127,7 @@ snapshots: '@commitlint/types@21.2.0': dependencies: - conventional-commits-parser: 7.1.0 + conventional-commits-parser: 7.1.2 picocolors: 1.1.1 '@conventional-changelog/git-client@3.1.2(conventional-commits-parser@7.1.2)': @@ -5390,68 +5309,6 @@ snapshots: '@kwsites/promise-deferred@1.1.1': {} - '@libsql/client@0.17.4': - dependencies: - '@libsql/core': 0.17.4 - '@libsql/hrana-client': 0.10.0 - js-base64: 3.9.3 - libsql: 0.5.29 - promise-limit: 2.7.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - optional: true - - '@libsql/core@0.17.4': - dependencies: - js-base64: 3.9.3 - optional: true - - '@libsql/darwin-arm64@0.5.29': - optional: true - - '@libsql/darwin-x64@0.5.29': - optional: true - - '@libsql/hrana-client@0.10.0': - dependencies: - '@libsql/isomorphic-ws': 0.1.5 - js-base64: 3.9.3 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - optional: true - - '@libsql/isomorphic-ws@0.1.5': - dependencies: - '@types/ws': 8.18.1 - ws: 8.21.3 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - optional: true - - '@libsql/linux-arm-gnueabihf@0.5.29': - optional: true - - '@libsql/linux-arm-musleabihf@0.5.29': - optional: true - - '@libsql/linux-arm64-gnu@0.5.29': - optional: true - - '@libsql/linux-arm64-musl@0.5.29': - optional: true - - '@libsql/linux-x64-gnu@0.5.29': - optional: true - - '@libsql/linux-x64-musl@0.5.29': - optional: true - - '@libsql/win32-x64-msvc@0.5.29': - optional: true - '@mapbox/node-pre-gyp@2.0.3(supports-color@10.2.2)': dependencies: consola: 3.4.2 @@ -5475,9 +5332,6 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true - '@neon-rs/load@0.0.4': - optional: true - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5529,10 +5383,10 @@ snapshots: - magicast - supports-color - '@nuxt/content@3.16.0(@libsql/client@0.17.4)(@oxc-project/types@0.147.0)(better-sqlite3@13.0.3)(esbuild@0.28.2)(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))': + '@nuxt/content@3.16.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) - '@nuxtjs/mdc': 0.23.1(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) + '@nuxtjs/mdc': 0.23.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) '@shikijs/langs': 4.4.3 '@sqlite.org/sqlite-wasm': 3.53.0-build1 '@standard-schema/spec': 1.1.0 @@ -5572,16 +5426,13 @@ snapshots: std-env: 4.2.0 tinyglobby: 0.2.17 ufo: 1.6.4 - unctx: 3.0.1(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) + unctx: 3.0.1(magic-string@0.30.21)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) unified: 11.0.5 unist-util-stringify-position: 4.0.0 unist-util-visit: 5.1.0 unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) zod: 3.25.76 zod-to-json-schema: 3.25.2(zod@3.25.76) - optionalDependencies: - '@libsql/client': 0.17.4 - better-sqlite3: 13.0.3 transitivePeerDependencies: - '@farmfe/core' - '@oxc-project/types' @@ -5625,12 +5476,12 @@ snapshots: pkg-types: 2.3.1 semver: 7.8.5 - '@nuxt/devtools@3.4.2(db0@0.3.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3))(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3))': + '@nuxt/devtools@3.4.2(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2))': dependencies: '@nuxt/devtools-kit': 3.4.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) '@nuxt/devtools-wizard': 3.4.2 '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) - '@vue/devtools-core': 8.2.1(vue@3.5.42(typescript@5.9.3)) + '@vue/devtools-core': 8.2.1(vue@3.5.42(typescript@7.0.2)) '@vue/devtools-kit': 8.2.1 birpc: 4.2.0 consola: 3.4.2 @@ -5655,10 +5506,10 @@ snapshots: sirv: 3.0.2 structured-clone-es: 2.0.1 tinyglobby: 0.2.17 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3))(ioredis@5.11.1(supports-color@10.2.2)) + unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) vite-plugin-inspect: 11.4.1(@nuxt/kit@4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) - vite-plugin-vue-tracer: 1.5.0(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3)) + vite-plugin-vue-tracer: 1.5.0(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)) which: 6.0.1 ws: 8.21.3 transitivePeerDependencies: @@ -5720,6 +5571,36 @@ snapshots: - rolldown - unplugin + '@nuxt/kit@4.5.2(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))': + dependencies: + c12: 3.3.4(magicast@0.5.4) + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + errx: 0.1.2 + exsolve: 1.1.1 + ignore: 7.0.7 + jiti: 2.7.0 + klona: 2.0.6 + mlly: 1.8.2 + nostics: 1.2.0 + ohash: 2.0.12 + pathe: 2.0.3 + pkg-types: 2.3.1 + rc9: 3.0.1 + scule: 1.3.0 + tinyglobby: 0.2.17 + ufo: 1.6.4 + unctx: 3.0.1(magic-string@0.30.21)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) + untyped: 2.0.0 + verkit: 0.3.2 + transitivePeerDependencies: + - magic-string + - magicast + - oxc-parser + - rolldown + - unplugin + '@nuxt/kit@4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))': dependencies: c12: 3.3.4(magicast@0.5.4) @@ -5750,11 +5631,11 @@ snapshots: - rolldown - unplugin - '@nuxt/nitro-server@4.5.2(0017822a1f4c4c34d0b677f25750e65c)': + '@nuxt/nitro-server@4.5.2(e3f8ac5671454bf37b86c423677f56de)': dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) - '@unhead/vue': 3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3)) + '@unhead/vue': 3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)) '@vue/shared': 3.5.42 consola: 3.4.2 defu: 6.1.7 @@ -5767,9 +5648,9 @@ snapshots: impound: 1.2.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(srvx@0.11.22)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + nitropack: 2.13.4(oxc-parser@0.139.0)(rolldown@1.2.6)(srvx@0.11.22)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) nostics: 1.2.0 - nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@libsql/client@0.17.4)(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(better-sqlite3@13.0.3)(db0@0.3.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3))(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(yaml@2.9.0) + nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@7.0.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@7.0.2))(yaml@2.9.0) nypm: 0.6.9 ohash: 2.0.12 pathe: 2.0.3 @@ -5777,8 +5658,8 @@ snapshots: std-env: 4.2.0 ufo: 1.6.4 unctx: 3.0.1(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3))(ioredis@5.11.1(supports-color@10.2.2)) - vue: 3.5.42(typescript@5.9.3) + unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) + vue: 3.5.42(typescript@7.0.2) vue-bundle-renderer: 2.3.2 vue-devtools-stub: 0.1.0 optionalDependencies: @@ -5854,11 +5735,11 @@ snapshots: rc9: 3.0.1 std-env: 4.2.0 - '@nuxt/vite-builder@4.5.2(9e723e4baa030f67095820d55f2ef31c)': + '@nuxt/vite-builder@4.5.2(c1a8a6120ba3a6c438fe66804e584211)': dependencies: '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) - '@vitejs/plugin-vue': 6.0.8(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3)) + '@vitejs/plugin-vue': 6.0.8(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)) + '@vitejs/plugin-vue-jsx': 5.1.6(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)) autoprefixer: 10.5.4(postcss@8.5.26) consola: 3.4.2 cssnano: 8.0.10(postcss@8.5.26) @@ -5872,7 +5753,7 @@ snapshots: knitwork: 1.3.0 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@libsql/client@0.17.4)(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(better-sqlite3@13.0.3)(db0@0.3.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3))(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(yaml@2.9.0) + nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@7.0.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@7.0.2))(yaml@2.9.0) nypm: 0.6.9 pathe: 2.0.3 pkg-types: 2.3.1 @@ -5885,8 +5766,8 @@ snapshots: unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) vite-node: 6.0.0(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) - vite-plugin-checker: 0.14.5(oxlint@1.80.0)(typescript@5.9.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) - vue: 3.5.42(typescript@5.9.3) + vite-plugin-checker: 0.14.5(oxlint@1.80.0)(typescript@7.0.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@7.0.2)) + vue: 3.5.42(typescript@7.0.2) vue-bundle-renderer: 2.3.2 optionalDependencies: '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) @@ -5923,9 +5804,9 @@ snapshots: - webpack - yaml - '@nuxtjs/mdc@0.23.1(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))': + '@nuxtjs/mdc@0.23.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))': dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) '@shikijs/core': 4.4.3 '@shikijs/engine-javascript': 4.4.3 '@shikijs/langs': 4.4.3 @@ -6478,11 +6359,6 @@ snapshots: '@types/unist@3.0.3': {} - '@types/ws@8.18.1': - dependencies: - '@types/node': 26.4.0 - optional: true - '@typescript/typescript-aix-ppc64@7.0.2': optional: true @@ -6565,13 +6441,13 @@ snapshots: - rollup - unloader - '@unhead/vue@3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3))': + '@unhead/vue@3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2))': dependencies: '@unhead/bundler': 3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(unhead@3.4.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) hookable: 6.1.1 unhead: 3.4.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) - vue: 3.5.42(typescript@5.9.3) + vue: 3.5.42(typescript@7.0.2) optionalDependencies: vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) transitivePeerDependencies: @@ -6607,7 +6483,7 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-vue-jsx@5.1.6(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@5.1.6(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2))': dependencies: '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) @@ -6615,15 +6491,15 @@ snapshots: '@rolldown/pluginutils': 1.0.1 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) - vue: 3.5.42(typescript@5.9.3) + vue: 3.5.42(typescript@7.0.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.8(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.8(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2))': dependencies: '@rolldown/pluginutils': 1.0.1 vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) - vue: 3.5.42(typescript@5.9.3) + vue: 3.5.42(typescript@7.0.2) '@volar/language-core@2.4.28': dependencies: @@ -6639,7 +6515,16 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@vue-macros/common@3.1.4(vue@3.5.42(typescript@5.9.3))': + '@volar/typescript@2.4.28(typescript@7.0.2)': + dependencies: + '@volar/language-core': 2.4.28 + path-browserify: 1.0.1 + vscode-uri: 3.2.0 + optionalDependencies: + typescript: 7.0.2 + optional: true + + '@vue-macros/common@3.1.4(vue@3.5.42(typescript@7.0.2))': dependencies: '@vue/compiler-sfc': 3.5.42 ast-kit: 2.2.0 @@ -6647,7 +6532,7 @@ snapshots: magic-string-ast: 1.0.3 unplugin-utils: 0.3.2 optionalDependencies: - vue: 3.5.42(typescript@5.9.3) + vue: 3.5.42(typescript@7.0.2) '@vue/babel-helper-vue-transform-on@2.0.1': {} @@ -6712,11 +6597,11 @@ snapshots: dependencies: '@vue/devtools-kit': 8.2.1 - '@vue/devtools-core@8.2.1(vue@3.5.42(typescript@5.9.3))': + '@vue/devtools-core@8.2.1(vue@3.5.42(typescript@7.0.2))': dependencies: '@vue/devtools-kit': 8.2.1 '@vue/devtools-shared': 8.2.1 - vue: 3.5.42(typescript@5.9.3) + vue: 3.5.42(typescript@7.0.2) '@vue/devtools-kit@8.2.1': dependencies: @@ -6902,11 +6787,6 @@ snapshots: baseline-browser-mapping@2.11.20: {} - better-sqlite3@13.0.3: - dependencies: - node-addon-api: 8.9.2 - optional: true - bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 @@ -7067,11 +6947,6 @@ snapshots: dependencies: '@conventional-changelog/template': 1.4.0 - conventional-commits-parser@7.1.0: - dependencies: - '@simple-libs/stream-utils': 2.0.0 - argue-cli: 3.1.0 - conventional-commits-parser@7.1.2: dependencies: '@simple-libs/stream-utils': 2.0.0 @@ -7197,10 +7072,7 @@ snapshots: csstype@3.2.3: {} - db0@0.3.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3): - optionalDependencies: - '@libsql/client': 0.17.4 - better-sqlite3: 13.0.3 + db0@0.3.4: {} db0@0.4.0: {} @@ -7247,9 +7119,6 @@ snapshots: detab@3.0.2: {} - detect-libc@2.0.2: - optional: true - detect-libc@2.1.2: {} devalue@5.9.2: {} @@ -7356,7 +7225,7 @@ snapshots: dependencies: es-errors: 1.3.0 - es-toolkit@1.51.0: {} + es-toolkit@1.52.0: {} esbuild@0.28.2: optionalDependencies: @@ -7937,9 +7806,6 @@ snapshots: jiti@2.7.0: {} - js-base64@3.9.3: - optional: true - js-tokens@10.0.0: {} js-tokens@4.0.0: {} @@ -7976,22 +7842,6 @@ snapshots: dependencies: readable-stream: 2.3.8 - libsql@0.5.29: - dependencies: - '@neon-rs/load': 0.0.4 - detect-libc: 2.0.2 - optionalDependencies: - '@libsql/darwin-arm64': 0.5.29 - '@libsql/darwin-x64': 0.5.29 - '@libsql/linux-arm-gnueabihf': 0.5.29 - '@libsql/linux-arm-musleabihf': 0.5.29 - '@libsql/linux-arm64-gnu': 0.5.29 - '@libsql/linux-arm64-musl': 0.5.29 - '@libsql/linux-x64-gnu': 0.5.29 - '@libsql/linux-x64-musl': 0.5.29 - '@libsql/win32-x64-msvc': 0.5.29 - optional: true - lightningcss-android-arm64@1.33.0: optional: true @@ -8493,7 +8343,7 @@ snapshots: nanotar@0.3.0: {} - nitropack@2.13.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(srvx@0.11.22)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)): + nitropack@2.13.4(oxc-parser@0.139.0)(rolldown@1.2.6)(srvx@0.11.22)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.63.1) @@ -8514,7 +8364,7 @@ snapshots: cookie-es: 2.0.1 croner: 10.0.1 crossws: 0.3.5 - db0: 0.3.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3) + db0: 0.3.4 defu: 6.1.7 destr: 2.0.5 dot-prop: 10.2.0 @@ -8560,7 +8410,7 @@ snapshots: unenv: 2.0.0-rc.24 unimport: 6.4.0(esbuild@0.28.2)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) unplugin-utils: 0.3.2 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3))(ioredis@5.11.1(supports-color@10.2.2)) + unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) untyped: 2.0.0 unwasm: 0.5.3 youch: 4.1.1 @@ -8605,9 +8455,6 @@ snapshots: - vite - webpack - node-addon-api@8.9.2: - optional: true - node-emoji@2.2.0: dependencies: '@sindresorhus/is': 4.6.0 @@ -8672,17 +8519,17 @@ snapshots: - magicast - rolldown - nuxt@4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@libsql/client@0.17.4)(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(better-sqlite3@13.0.3)(db0@0.3.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3))(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(yaml@2.9.0): + nuxt@4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@7.0.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@7.0.2))(yaml@2.9.0): dependencies: '@dxup/nuxt': 0.5.10(esbuild@0.28.2)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) '@nuxt/cli': 3.37.0(@nuxt/schema@4.5.2)(magicast@0.5.4)(supports-color@10.2.2) - '@nuxt/devtools': 3.4.2(db0@0.3.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3))(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3)) + '@nuxt/devtools': 3.4.2(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)) '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) - '@nuxt/nitro-server': 4.5.2(0017822a1f4c4c34d0b677f25750e65c) + '@nuxt/nitro-server': 4.5.2(e3f8ac5671454bf37b86c423677f56de) '@nuxt/schema': 4.5.2 '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))) - '@nuxt/vite-builder': 4.5.2(9e723e4baa030f67095820d55f2ef31c) - '@unhead/vue': 3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3)) + '@nuxt/vite-builder': 4.5.2(c1a8a6120ba3a6c438fe66804e584211) + '@unhead/vue': 3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)) '@vue/shared': 3.5.42 chokidar: 5.0.0 compatx: 0.2.0 @@ -8731,9 +8578,9 @@ snapshots: unrouting: 0.2.3 untyped: 2.0.0 verkit: 0.3.2 - vue: 3.5.42(typescript@5.9.3) + vue: 3.5.42(typescript@7.0.2) vue-component-type-helpers: 3.3.11 - vue-router: 5.3.0(@vue/compiler-sfc@3.5.42)(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3)) + vue-router: 5.3.0(@vue/compiler-sfc@3.5.42)(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)) optionalDependencies: '@types/node': 26.4.0 transitivePeerDependencies: @@ -9213,9 +9060,6 @@ snapshots: process@0.11.10: {} - promise-limit@2.7.0: - optional: true - proper-lockfile@4.1.2: dependencies: graceful-fs: 4.2.11 @@ -9901,6 +9745,13 @@ snapshots: rolldown: 1.2.6 unplugin: 2.3.11 + unctx@3.0.1(magic-string@0.30.21)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))): + optionalDependencies: + magic-string: 0.30.21 + oxc-parser: 0.139.0 + rolldown: 1.2.6 + unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + unctx@3.0.1(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))): optionalDependencies: magic-string: 1.2.3 @@ -10037,7 +9888,7 @@ snapshots: escape-string-regexp: 5.0.0 ufo: 1.6.4 - unstorage@1.17.5(db0@0.3.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3))(ioredis@5.11.1(supports-color@10.2.2)): + unstorage@1.17.5(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 @@ -10048,7 +9899,7 @@ snapshots: ofetch: 1.5.1 ufo: 1.6.4 optionalDependencies: - db0: 0.3.4(@libsql/client@0.17.4)(better-sqlite3@13.0.3) + db0: 0.3.4 ioredis: 5.11.1(supports-color@10.2.2) untun@0.2.2: {} @@ -10128,7 +9979,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.14.5(oxlint@1.80.0)(typescript@5.9.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)): + vite-plugin-checker@0.14.5(oxlint@1.80.0)(typescript@7.0.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@7.0.2)): dependencies: '@babel/code-frame': 7.29.7 chokidar: 5.0.0 @@ -10140,7 +9991,8 @@ snapshots: vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) optionalDependencies: oxlint: 1.80.0 - typescript: 5.9.3 + typescript: 7.0.2 + vue-tsc: 3.3.11(typescript@7.0.2) vite-plugin-inspect@11.4.1(@nuxt/kit@4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)): dependencies: @@ -10157,7 +10009,7 @@ snapshots: optionalDependencies: '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) - vite-plugin-vue-tracer@1.5.0(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3)): + vite-plugin-vue-tracer@1.5.0(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)): dependencies: estree-walker: 3.0.3 exsolve: 1.1.1 @@ -10165,7 +10017,7 @@ snapshots: pathe: 2.0.3 source-map-js: 1.2.1 vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) - vue: 3.5.42(typescript@5.9.3) + vue: 3.5.42(typescript@7.0.2) vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0): dependencies: @@ -10200,9 +10052,9 @@ snapshots: vue-devtools-stub@0.1.0: {} - vue-router@5.3.0(@vue/compiler-sfc@3.5.42)(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@5.9.3)): + vue-router@5.3.0(@vue/compiler-sfc@3.5.42)(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)): dependencies: - '@vue-macros/common': 3.1.4(vue@3.5.42(typescript@5.9.3)) + '@vue-macros/common': 3.1.4(vue@3.5.42(typescript@7.0.2)) '@vue/devtools-api': 8.2.1 ast-walker-scope: 0.9.0 chokidar: 5.0.0 @@ -10218,7 +10070,7 @@ snapshots: tinyglobby: 0.2.17 unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) unplugin-utils: 0.3.2 - vue: 3.5.42(typescript@5.9.3) + vue: 3.5.42(typescript@7.0.2) optionalDependencies: '@vue/compiler-sfc': 3.5.42 vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) @@ -10232,7 +10084,14 @@ snapshots: - unloader - webpack - vue@3.5.42(typescript@5.9.3): + vue-tsc@3.3.11(typescript@7.0.2): + dependencies: + '@volar/typescript': 2.4.28(typescript@7.0.2) + '@vue/language-core': 3.3.11 + typescript: 7.0.2 + optional: true + + vue@3.5.42(typescript@7.0.2): dependencies: '@vue/compiler-dom': 3.5.42 '@vue/compiler-sfc': 3.5.42 @@ -10240,7 +10099,7 @@ snapshots: '@vue/server-renderer': 3.5.42 '@vue/shared': 3.5.42 optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 web-namespaces@2.0.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6dee8c54..b2ffe5be 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -28,9 +28,9 @@ nodeLinker: isolated # field, which is the closest match to the old packageManagerStrict: true plus # packageManagerStrictVersion: false. Setting pmOnFail here would only weaken that. -# The layer is developed against playground/ — see CLAUDE.md. +# The layer is developed against www/ — see CLAUDE.md. packages: - - playground + - www # Build scripts are blocked by default; each one is answered explicitly here. # esbuild places a platform binary in its postinstall and does not run without diff --git a/tsconfig.json b/tsconfig.json index 21fbeb39..1da24d68 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,5 +13,10 @@ "isolatedModules": true, "skipLibCheck": true }, - "include": ["scripts/**/*.ts", "*.config.ts"] + "include": [ + "scripts/**/*.ts", + "commitlint.config.ts", + "lint-staged.config.ts", + "taze.config.ts" + ] } diff --git a/playground/app/pages/index.vue b/www/app/pages/index.vue similarity index 100% rename from playground/app/pages/index.vue rename to www/app/pages/index.vue diff --git a/playground/content.config.ts b/www/content.config.ts similarity index 100% rename from playground/content.config.ts rename to www/content.config.ts diff --git a/www/docs/edge-cases.md b/www/docs/edge-cases.md new file mode 100644 index 00000000..5c94f59f --- /dev/null +++ b/www/docs/edge-cases.md @@ -0,0 +1,9 @@ +--- +title: Edge cases +description: Deliberately awkward frontmatter lives here. +--- + +# Edge cases + +The playground is meant to carry the ugly material — long titles, missing +frontmatter, deep nesting — so the theme meets it before a consumer does. diff --git a/www/docs/index.md b/www/docs/index.md new file mode 100644 index 00000000..32ea09fd --- /dev/null +++ b/www/docs/index.md @@ -0,0 +1,10 @@ +--- +title: Playground +description: The local, unversioned case — no config at all. +--- + +# Playground + +This file is served by the layer's own `docs` collection. Nothing in +`playground/nuxt.config.ts` configures it: the collection ships with the layer, +and Content merges the config from every layer in the chain. diff --git a/www/nuxt.config.ts b/www/nuxt.config.ts new file mode 100644 index 00000000..acf26120 --- /dev/null +++ b/www/nuxt.config.ts @@ -0,0 +1,9 @@ +import { defineNuxtConfig } from 'nuxt/config'; + +// Consumes the layer exactly as a downstream repo would, by path instead of by +// package name. Modules, the Content driver and the default `docs` collection +// all arrive from '..'. +export default defineNuxtConfig({ + extends: ['..'], + compatibilityDate: '2026-09-02' +}); diff --git a/www/package.json b/www/package.json new file mode 100644 index 00000000..1d64124e --- /dev/null +++ b/www/package.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://www.schemastore.org/package.json", + "name": "www", + "version": "0.0.0", + "private": true, + "description": "The duxt documentation site — consumes the layer exactly as a downstream repo does.", + "type": "module", + "scripts": { + "dev": "nuxt dev", + "build": "nuxt build" + }, + "dependencies": { + "nuxt": "^4.5.2" + } +} diff --git a/playground/tsconfig.json b/www/tsconfig.json similarity index 100% rename from playground/tsconfig.json rename to www/tsconfig.json From 71b0231ae0fce5bb3e3019f163840836ec565e0a Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 18:58:25 +0200 Subject: [PATCH 003/158] build: hold TypeScript at 6 so the layer can be typechecked MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TypeScript 7 is the native port. Its exports map no longer exposes the compiler internals Volar builds on — lib/tsc.js is still in the package, just unreachable through require.resolve — so vue-tsc cannot run on it, and vue-tsc is the only thing that can typecheck a .vue file or a Nuxt config. 3.3.11 is the current release and declares typescript >=5.0.0, which is a promise it does not keep. Given the choice between a version number and a typecheck, take the typecheck: the whole repo moves to 6, rather than carrying two TypeScript versions to hide the conflict. Move to 7 when Volar does. That makes the layer checkable, so `check` now chains typecheck:app (nuxt typecheck, run through www/) beside the tsc pass over the meta scripts. tsc keeps the scripts; it cannot see module options that exist only in generated types. --- AGENTS.md | 9 +- CLAUDE.md | 9 +- CONTRIBUTING.md | 17 +- package.json | 7 +- pnpm-lock.yaml | 713 +++++++++++++++++++++++++++++------------------ www/package.json | 7 +- 6 files changed, 475 insertions(+), 287 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index d07afa97..b54944d8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -61,7 +61,8 @@ What that leaves as candidate value: the **ergonomics** (a compact `sources` lis | `pnpm lint` | `oxlint . --deny-warnings` | | `pnpm format` | `oxfmt --check .` (note: `format` is the check, not fix) | | `pnpm typecheck` | `tsc --noEmit` over the meta scripts | -| `pnpm check` | Runs `lint` + `format` + `typecheck` + `check:policy` — the CI gate | +| `pnpm typecheck:app`| `nuxt typecheck` over the layer, run through `www/` | +| `pnpm check` | Runs `lint` + `format` + `typecheck` + `typecheck:app` + `check:policy` — the CI gate | | `pnpm check:policy` | Proves the two agent policy files ban the same commands | | `pnpm lint:fix` | Auto-fix lint | | `pnpm format:fix` | Auto-fix format | @@ -70,13 +71,13 @@ What that leaves as candidate value: the **ergonomics** (a compact `sources` lis | `pnpm taze` | Interactive dependency upgrade check | | `pnpm taze:w` | Write upgrade results | -There is no test suite yet — the repo currently carries only the meta layer. CI runs `pnpm lint`, `pnpm format`, `pnpm typecheck` and `pnpm check:policy` on PR; adding a check to the `check` script is enough, no workflow change needed. +There is no test suite yet — the repo currently carries only the meta layer. CI runs whatever `check` chains on PR; adding a check to the `check` script is enough, no workflow change needed. ## Architecture / conventions -- **Node 24, pnpm 12.** Pinned via `.nvmrc`, `engines`, and `packageManager`. `pnpm-workspace.yaml` enforces `minimumReleaseAge=4320` (3-day cooldown), isolated node-linker. Don't loosen these without reason. Package-manager enforcement carries no key on purpose: pnpm 11 replaced `packageManagerStrict`/`packageManagerStrictVersion` with `pmOnFail`, whose default `download` already errors on a foreign package manager and fetches the pinned pnpm version — every other value only weakens it, so leave it unset (the rationale sits as a comment in the file). +- **Node 24, pnpm 12, TypeScript 6.** Pinned via `.nvmrc`, `engines`, and `packageManager`. `pnpm-workspace.yaml` enforces `minimumReleaseAge=4320` (3-day cooldown), isolated node-linker. Don't loosen these without reason. **TypeScript stays on 6 deliberately**: 7 is the native port, whose `exports` map no longer exposes the compiler internals Volar builds on, so `vue-tsc` cannot run on it — and without `vue-tsc` the layer has no typecheck at all. Move to 7 when Volar does, not before. Package-manager enforcement carries no key on purpose: pnpm 11 replaced `packageManagerStrict`/`packageManagerStrictVersion` with `pmOnFail`, whose default `download` already errors on a foreign package manager and fetches the pinned pnpm version — every other value only weakens it, so leave it unset (the rationale sits as a comment in the file). - **oxc, not eslint/prettier.** Linting via `oxlint`, formatting via `oxfmt`. Configs live in `.oxlintrc.json` / `.oxfmtrc.json`. `oxlint` uses `unicorn` + `oxc` plugins; rules deliberately minimal. -- **TypeScript, no build step.** The meta scripts and the three tool configs are `.ts` — Node 24 strips types natively, so `scripts/check-policy-parity.ts`, `commitlint.config.ts`, `lint-staged.config.ts` and `taze.config.ts` stay directly executable and each tool loads its own `.ts` config unaided. `tsconfig.json` is `noEmit` + `strict` + `erasableSyntaxOnly`, so only strippable syntax (no enums, no parameter properties) can be written; `pnpm typecheck` is the gate. Once `.vue` files land, `typecheck` moves to `vue-tsc`; `oxlint` + `oxfmt` cover `.vue` on their own, so no ESLint is coming. +- **TypeScript, no build step.** The meta scripts and the three tool configs are `.ts` — Node 24 strips types natively, so `scripts/check-policy-parity.ts`, `commitlint.config.ts`, `lint-staged.config.ts` and `taze.config.ts` stay directly executable and each tool loads its own `.ts` config unaided. `tsconfig.json` is `noEmit` + `strict` + `erasableSyntaxOnly`, so only strippable syntax (no enums, no parameter properties) can be written; `pnpm typecheck` is the gate for those. The layer itself is checked separately by `pnpm typecheck:app` (`nuxt typecheck` in `www/`), because `tsc` cannot see a Nuxt config's module options — those exist only in generated types. `oxlint` + `oxfmt` cover `.vue`, so no ESLint is coming. - **Husky hooks** (`.husky/pre-commit`, `.husky/commit-msg`) run `lint-staged` and `commitlint`. `lint-staged.config.ts` excludes `README.md`, `CLAUDE.md`, and `AGENTS.md` (free-form prose) and `pnpm-lock.yaml`. `oxlint --fix --deny-warnings` then `oxfmt` on JS/TS; `oxfmt` only on JSON/YAML/MD. - **Conventional Commits enforced** via `@commitlint/config-conventional`. Don't `--no-verify` unless explicitly asked. - **release-please** drives the versioning. Files: `release-please-config.json`, `.release-please-manifest.json`, `.github/workflows/release-please.yml`. `release-type: node` (this is a published package, so `package.json` gets bumped too), `include-v-in-tag: true`, starting from `0.0.0`. Publishing to npm is a job added to `release-please.yml`, gated on `needs.release-please.outputs.release-created`. diff --git a/CLAUDE.md b/CLAUDE.md index d07afa97..b54944d8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -61,7 +61,8 @@ What that leaves as candidate value: the **ergonomics** (a compact `sources` lis | `pnpm lint` | `oxlint . --deny-warnings` | | `pnpm format` | `oxfmt --check .` (note: `format` is the check, not fix) | | `pnpm typecheck` | `tsc --noEmit` over the meta scripts | -| `pnpm check` | Runs `lint` + `format` + `typecheck` + `check:policy` — the CI gate | +| `pnpm typecheck:app`| `nuxt typecheck` over the layer, run through `www/` | +| `pnpm check` | Runs `lint` + `format` + `typecheck` + `typecheck:app` + `check:policy` — the CI gate | | `pnpm check:policy` | Proves the two agent policy files ban the same commands | | `pnpm lint:fix` | Auto-fix lint | | `pnpm format:fix` | Auto-fix format | @@ -70,13 +71,13 @@ What that leaves as candidate value: the **ergonomics** (a compact `sources` lis | `pnpm taze` | Interactive dependency upgrade check | | `pnpm taze:w` | Write upgrade results | -There is no test suite yet — the repo currently carries only the meta layer. CI runs `pnpm lint`, `pnpm format`, `pnpm typecheck` and `pnpm check:policy` on PR; adding a check to the `check` script is enough, no workflow change needed. +There is no test suite yet — the repo currently carries only the meta layer. CI runs whatever `check` chains on PR; adding a check to the `check` script is enough, no workflow change needed. ## Architecture / conventions -- **Node 24, pnpm 12.** Pinned via `.nvmrc`, `engines`, and `packageManager`. `pnpm-workspace.yaml` enforces `minimumReleaseAge=4320` (3-day cooldown), isolated node-linker. Don't loosen these without reason. Package-manager enforcement carries no key on purpose: pnpm 11 replaced `packageManagerStrict`/`packageManagerStrictVersion` with `pmOnFail`, whose default `download` already errors on a foreign package manager and fetches the pinned pnpm version — every other value only weakens it, so leave it unset (the rationale sits as a comment in the file). +- **Node 24, pnpm 12, TypeScript 6.** Pinned via `.nvmrc`, `engines`, and `packageManager`. `pnpm-workspace.yaml` enforces `minimumReleaseAge=4320` (3-day cooldown), isolated node-linker. Don't loosen these without reason. **TypeScript stays on 6 deliberately**: 7 is the native port, whose `exports` map no longer exposes the compiler internals Volar builds on, so `vue-tsc` cannot run on it — and without `vue-tsc` the layer has no typecheck at all. Move to 7 when Volar does, not before. Package-manager enforcement carries no key on purpose: pnpm 11 replaced `packageManagerStrict`/`packageManagerStrictVersion` with `pmOnFail`, whose default `download` already errors on a foreign package manager and fetches the pinned pnpm version — every other value only weakens it, so leave it unset (the rationale sits as a comment in the file). - **oxc, not eslint/prettier.** Linting via `oxlint`, formatting via `oxfmt`. Configs live in `.oxlintrc.json` / `.oxfmtrc.json`. `oxlint` uses `unicorn` + `oxc` plugins; rules deliberately minimal. -- **TypeScript, no build step.** The meta scripts and the three tool configs are `.ts` — Node 24 strips types natively, so `scripts/check-policy-parity.ts`, `commitlint.config.ts`, `lint-staged.config.ts` and `taze.config.ts` stay directly executable and each tool loads its own `.ts` config unaided. `tsconfig.json` is `noEmit` + `strict` + `erasableSyntaxOnly`, so only strippable syntax (no enums, no parameter properties) can be written; `pnpm typecheck` is the gate. Once `.vue` files land, `typecheck` moves to `vue-tsc`; `oxlint` + `oxfmt` cover `.vue` on their own, so no ESLint is coming. +- **TypeScript, no build step.** The meta scripts and the three tool configs are `.ts` — Node 24 strips types natively, so `scripts/check-policy-parity.ts`, `commitlint.config.ts`, `lint-staged.config.ts` and `taze.config.ts` stay directly executable and each tool loads its own `.ts` config unaided. `tsconfig.json` is `noEmit` + `strict` + `erasableSyntaxOnly`, so only strippable syntax (no enums, no parameter properties) can be written; `pnpm typecheck` is the gate for those. The layer itself is checked separately by `pnpm typecheck:app` (`nuxt typecheck` in `www/`), because `tsc` cannot see a Nuxt config's module options — those exist only in generated types. `oxlint` + `oxfmt` cover `.vue`, so no ESLint is coming. - **Husky hooks** (`.husky/pre-commit`, `.husky/commit-msg`) run `lint-staged` and `commitlint`. `lint-staged.config.ts` excludes `README.md`, `CLAUDE.md`, and `AGENTS.md` (free-form prose) and `pnpm-lock.yaml`. `oxlint --fix --deny-warnings` then `oxfmt` on JS/TS; `oxfmt` only on JSON/YAML/MD. - **Conventional Commits enforced** via `@commitlint/config-conventional`. Don't `--no-verify` unless explicitly asked. - **release-please** drives the versioning. Files: `release-please-config.json`, `.release-please-manifest.json`, `.github/workflows/release-please.yml`. `release-type: node` (this is a published package, so `package.json` gets bumped too), `include-v-in-tag: true`, starting from `0.0.0`. Publishing to npm is a job added to `release-please.yml`, gated on `needs.release-please.outputs.release-created`. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8f20339d..abb2f509 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,7 +17,7 @@ This project follows the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT. Requirements: -- Node **24+** and **pnpm 12** +- Node **24+**, **pnpm 12** and **TypeScript 6** (7 is held back — see CLAUDE.md) - `git` Clone and install: @@ -30,13 +30,14 @@ pnpm install # wires husky hooks ## Running the suite -| Command | What it does | -| :--------------- | :----------------------------------------------------- | -| `pnpm lint` | oxlint across the repo. | -| `pnpm format` | oxfmt check across JS / TS / JSON / YAML / MD. | -| `pnpm typecheck` | `tsc --noEmit` over the meta scripts. | -| `pnpm check` | Runs `lint`, `format`, `typecheck` and `check:policy`. | -| `pnpm check:fix` | Auto-fix lint + format issues. | +| Command | What it does | +| :------------------- | :--------------------------------------------------------- | +| `pnpm lint` | oxlint across the repo. | +| `pnpm format` | oxfmt check across JS / TS / JSON / YAML / MD. | +| `pnpm typecheck` | `tsc --noEmit` over the meta scripts. | +| `pnpm typecheck:app` | `nuxt typecheck` over the layer, via `www/`. | +| `pnpm check` | Runs `lint`, `format`, both typechecks and `check:policy`. | +| `pnpm check:fix` | Auto-fix lint + format issues. | The same commands run in CI — keep them green before you push. diff --git a/package.json b/package.json index 48e739aa..81bdc377 100644 --- a/package.json +++ b/package.json @@ -41,13 +41,14 @@ "format": "oxfmt --check .", "format:fix": "oxfmt .", "typecheck": "tsc --noEmit", - "check": "pnpm lint && pnpm format && pnpm typecheck && pnpm check:policy", + "check": "pnpm lint && pnpm format && pnpm typecheck && pnpm typecheck:app && pnpm check:policy", "check:fix": "pnpm lint:fix && pnpm format:fix", "check:policy": "node scripts/check-policy-parity.ts", "skills:update": "pnpm dlx skills@latest update -p -y", "taze": "taze", "taze:w": "taze -w", - "prepare": "husky" + "prepare": "husky", + "typecheck:app": "pnpm --filter www typecheck" }, "dependencies": { "@nuxt/content": "^3.16.0" @@ -63,7 +64,7 @@ "oxfmt": "0.65.0", "oxlint": "1.80.0", "taze": "^21.1.0", - "typescript": "^7.0.2" + "typescript": "^6.0.3" }, "peerDependencies": { "nuxt": "^4.0.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 923b16d9..1c39218c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -115,7 +115,7 @@ importers: devDependencies: '@commitlint/cli': specifier: ^21.2.2 - version: 21.2.2(@types/node@26.4.0)(conventional-commits-parser@7.1.2)(typescript@7.0.2) + version: 21.2.2(@types/node@26.4.0)(conventional-commits-parser@7.1.2)(typescript@6.0.3) '@commitlint/config-conventional': specifier: ^21.2.2 version: 21.2.2 @@ -133,7 +133,7 @@ importers: version: 17.4.1 nuxt: specifier: ^4.5.2 - version: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@7.0.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@7.0.2))(yaml@2.9.0) + version: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@6.0.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) oxfmt: specifier: 0.65.0 version: 0.65.0 @@ -144,14 +144,21 @@ importers: specifier: ^21.1.0 version: 21.1.0 typescript: - specifier: ^7.0.2 - version: 7.0.2 + specifier: ^6.0.3 + version: 6.0.3 www: dependencies: nuxt: specifier: ^4.5.2 - version: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@7.0.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@7.0.2))(yaml@2.9.0) + version: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.4.0)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@6.0.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + devDependencies: + typescript: + specifier: ^6.0.3 + version: 6.0.3 + vue-tsc: + specifier: ^3.3.11 + version: 3.3.11(typescript@6.0.3) packages: @@ -1571,126 +1578,6 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript/typescript-aix-ppc64@7.0.2': - resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} - engines: {node: '>=16.20.0'} - cpu: [ppc64] - os: [aix] - - '@typescript/typescript-darwin-arm64@7.0.2': - resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [darwin] - - '@typescript/typescript-darwin-x64@7.0.2': - resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [darwin] - - '@typescript/typescript-freebsd-arm64@7.0.2': - resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [freebsd] - - '@typescript/typescript-freebsd-x64@7.0.2': - resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [freebsd] - - '@typescript/typescript-linux-arm64@7.0.2': - resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [linux] - - '@typescript/typescript-linux-arm@7.0.2': - resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} - engines: {node: '>=16.20.0'} - cpu: [arm] - os: [linux] - - '@typescript/typescript-linux-loong64@7.0.2': - resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} - engines: {node: '>=16.20.0'} - cpu: [loong64] - os: [linux] - - '@typescript/typescript-linux-mips64el@7.0.2': - resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} - engines: {node: '>=16.20.0'} - cpu: [mips64el] - os: [linux] - - '@typescript/typescript-linux-ppc64@7.0.2': - resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} - engines: {node: '>=16.20.0'} - cpu: [ppc64] - os: [linux] - - '@typescript/typescript-linux-riscv64@7.0.2': - resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} - engines: {node: '>=16.20.0'} - cpu: [riscv64] - os: [linux] - - '@typescript/typescript-linux-s390x@7.0.2': - resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} - engines: {node: '>=16.20.0'} - cpu: [s390x] - os: [linux] - - '@typescript/typescript-linux-x64@7.0.2': - resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [linux] - - '@typescript/typescript-netbsd-arm64@7.0.2': - resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [netbsd] - - '@typescript/typescript-netbsd-x64@7.0.2': - resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [netbsd] - - '@typescript/typescript-openbsd-arm64@7.0.2': - resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [openbsd] - - '@typescript/typescript-openbsd-x64@7.0.2': - resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [openbsd] - - '@typescript/typescript-sunos-x64@7.0.2': - resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [sunos] - - '@typescript/typescript-win32-arm64@7.0.2': - resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [win32] - - '@typescript/typescript-win32-x64@7.0.2': - resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [win32] - '@ungap/structured-clone@1.4.0': resolution: {integrity: sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==} @@ -4309,9 +4196,9 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@7.0.2: - resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} - engines: {node: '>=16.20.0'} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} hasBin: true ufo@1.6.4: @@ -5021,12 +4908,12 @@ snapshots: '@colordx/core@5.6.0': {} - '@commitlint/cli@21.2.2(@types/node@26.4.0)(conventional-commits-parser@7.1.2)(typescript@7.0.2)': + '@commitlint/cli@21.2.2(@types/node@26.4.0)(conventional-commits-parser@7.1.2)(typescript@6.0.3)': dependencies: '@commitlint/config-conventional': 21.2.2 '@commitlint/format': 21.2.2 '@commitlint/lint': 21.2.2 - '@commitlint/load': 21.2.2(@types/node@26.4.0)(typescript@7.0.2) + '@commitlint/load': 21.2.2(@types/node@26.4.0)(typescript@6.0.3) '@commitlint/read': 21.2.1(conventional-commits-parser@7.1.2) '@commitlint/types': 21.2.0 tinyexec: 1.3.0 @@ -5071,14 +4958,14 @@ snapshots: '@commitlint/rules': 21.2.2 '@commitlint/types': 21.2.0 - '@commitlint/load@21.2.2(@types/node@26.4.0)(typescript@7.0.2)': + '@commitlint/load@21.2.2(@types/node@26.4.0)(typescript@6.0.3)': dependencies: '@commitlint/config-validator': 21.2.0 '@commitlint/execute-rule': 21.0.1 '@commitlint/resolve-extends': 21.2.2 '@commitlint/types': 21.2.0 - cosmiconfig: 9.0.2(typescript@7.0.2) - cosmiconfig-typescript-loader: 6.3.0(@types/node@26.4.0)(cosmiconfig@9.0.2(typescript@7.0.2))(typescript@7.0.2) + cosmiconfig: 9.0.2(typescript@6.0.3) + cosmiconfig-typescript-loader: 6.3.0(@types/node@26.4.0)(cosmiconfig@9.0.2(typescript@6.0.3))(typescript@6.0.3) es-toolkit: 1.52.0 is-plain-obj: 4.1.0 picocolors: 1.1.1 @@ -5476,12 +5363,12 @@ snapshots: pkg-types: 2.3.1 semver: 7.8.5 - '@nuxt/devtools@3.4.2(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2))': + '@nuxt/devtools@3.4.2(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3))': dependencies: '@nuxt/devtools-kit': 3.4.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) '@nuxt/devtools-wizard': 3.4.2 '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) - '@vue/devtools-core': 8.2.1(vue@3.5.42(typescript@7.0.2)) + '@vue/devtools-core': 8.2.1(vue@3.5.42(typescript@6.0.3)) '@vue/devtools-kit': 8.2.1 birpc: 4.2.0 consola: 3.4.2 @@ -5509,7 +5396,72 @@ snapshots: unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) vite-plugin-inspect: 11.4.1(@nuxt/kit@4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) - vite-plugin-vue-tracer: 1.5.0(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)) + vite-plugin-vue-tracer: 1.5.0(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) + which: 6.0.1 + ws: 8.21.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - idb-keyval + - ioredis + - magic-string + - oxc-parser + - rolldown + - supports-color + - unplugin + - uploadthing + - utf-8-validate + - vue + + '@nuxt/devtools@3.4.2(db0@0.4.0)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3))': + dependencies: + '@nuxt/devtools-kit': 3.4.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + '@nuxt/devtools-wizard': 3.4.2 + '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) + '@vue/devtools-core': 8.2.1(vue@3.5.42(typescript@6.0.3)) + '@vue/devtools-kit': 8.2.1 + birpc: 4.2.0 + consola: 3.4.2 + destr: 2.0.5 + error-stack-parser-es: 2.0.1 + execa: 8.0.1 + fast-npm-meta: 2.2.0 + get-port-please: 3.2.0 + hookable: 6.1.1 + image-meta: 0.2.2 + is-installed-globally: 1.0.0 + launch-editor: 2.14.1 + local-pkg: 1.2.1 + magicast: 0.5.4 + nypm: 0.6.9 + ohash: 2.0.12 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + pkg-types: 2.3.1 + semver: 7.8.5 + simple-git: 3.36.0(supports-color@10.2.2) + sirv: 3.0.2 + structured-clone-es: 2.0.1 + tinyglobby: 0.2.17 + unstorage: 1.17.5(db0@0.4.0)(ioredis@5.11.1(supports-color@10.2.2)) + vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) + vite-plugin-inspect: 11.4.1(@nuxt/kit@4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + vite-plugin-vue-tracer: 1.5.0(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) which: 6.0.1 ws: 8.21.3 transitivePeerDependencies: @@ -5631,11 +5583,11 @@ snapshots: - rolldown - unplugin - '@nuxt/nitro-server@4.5.2(e3f8ac5671454bf37b86c423677f56de)': + '@nuxt/nitro-server@4.5.2(2420a9583a85b8bd7cfa917919a83024)': dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) - '@unhead/vue': 3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)) + '@unhead/vue': 3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) '@vue/shared': 3.5.42 consola: 3.4.2 defu: 6.1.7 @@ -5650,7 +5602,7 @@ snapshots: mocked-exports: 0.1.1 nitropack: 2.13.4(oxc-parser@0.139.0)(rolldown@1.2.6)(srvx@0.11.22)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) nostics: 1.2.0 - nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@7.0.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@7.0.2))(yaml@2.9.0) + nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@6.0.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) nypm: 0.6.9 ohash: 2.0.12 pathe: 2.0.3 @@ -5659,7 +5611,93 @@ snapshots: ufo: 1.6.4 unctx: 3.0.1(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) - vue: 3.5.42(typescript@7.0.2) + vue: 3.5.42(typescript@6.0.3) + vue-bundle-renderer: 2.3.2 + vue-devtools-stub: 0.1.0 + optionalDependencies: + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@electric-sql/pglite' + - '@farmfe/core' + - '@libsql/client' + - '@netlify/blobs' + - '@oxc-project/types' + - '@parcel/watcher' + - '@planetscale/database' + - '@rspack/core' + - '@unhead/cli' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@vitejs/devtools-kit' + - aws4fetch + - bare-abort-controller + - bare-buffer + - better-sqlite3 + - bun-types-no-globals + - db0 + - drizzle-orm + - encoding + - esbuild + - idb-keyval + - ioredis + - lightningcss + - magic-string + - magicast + - mysql2 + - oxc-parser + - react-native-b4a + - rolldown + - rollup + - sqlite3 + - srvx + - supports-color + - typescript + - unloader + - unplugin + - uploadthing + - vite + - webpack + - xml2js + + '@nuxt/nitro-server@4.5.2(6692208593466a047c9c1da45e9ddbcc)': + dependencies: + '@nuxt/devalue': 2.0.2 + '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) + '@unhead/vue': 3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) + '@vue/shared': 3.5.42 + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + devalue: 5.9.2 + errx: 0.1.2 + escape-string-regexp: 5.0.0 + exsolve: 1.1.1 + h3: 1.15.11 + impound: 1.2.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + klona: 2.0.6 + mocked-exports: 0.1.1 + nitropack: 2.13.4(oxc-parser@0.139.0)(rolldown@1.2.6)(srvx@0.11.22)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + nostics: 1.2.0 + nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.4.0)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@6.0.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nypm: 0.6.9 + ohash: 2.0.12 + pathe: 2.0.3 + rou3: 0.9.2 + std-env: 4.2.0 + ufo: 1.6.4 + unctx: 3.0.1(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) + unstorage: 1.17.5(db0@0.4.0)(ioredis@5.11.1(supports-color@10.2.2)) + vue: 3.5.42(typescript@6.0.3) vue-bundle-renderer: 2.3.2 vue-devtools-stub: 0.1.0 optionalDependencies: @@ -5735,11 +5773,11 @@ snapshots: rc9: 3.0.1 std-env: 4.2.0 - '@nuxt/vite-builder@4.5.2(c1a8a6120ba3a6c438fe66804e584211)': + '@nuxt/vite-builder@4.5.2(04dcacb2fd48a5257f1fd4667d8cfece)': dependencies: '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) - '@vitejs/plugin-vue': 6.0.8(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)) - '@vitejs/plugin-vue-jsx': 5.1.6(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)) + '@vitejs/plugin-vue': 6.0.8(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.6(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) autoprefixer: 10.5.4(postcss@8.5.26) consola: 3.4.2 cssnano: 8.0.10(postcss@8.5.26) @@ -5753,7 +5791,7 @@ snapshots: knitwork: 1.3.0 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@7.0.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@7.0.2))(yaml@2.9.0) + nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@6.0.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) nypm: 0.6.9 pathe: 2.0.3 pkg-types: 2.3.1 @@ -5766,8 +5804,77 @@ snapshots: unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) vite-node: 6.0.0(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) - vite-plugin-checker: 0.14.5(oxlint@1.80.0)(typescript@7.0.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@7.0.2)) - vue: 3.5.42(typescript@7.0.2) + vite-plugin-checker: 0.14.5(oxlint@1.80.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3)) + vue: 3.5.42(typescript@6.0.3) + vue-bundle-renderer: 2.3.2 + optionalDependencies: + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + rolldown: 1.2.6 + rollup-plugin-visualizer: 7.1.1(rolldown@1.2.6)(rollup@4.63.1) + transitivePeerDependencies: + - '@biomejs/biome' + - '@farmfe/core' + - '@rspack/core' + - '@types/node' + - '@vitejs/devtools' + - bun-types-no-globals + - esbuild + - eslint + - less + - magic-string + - magicast + - meow + - optionator + - oxc-parser + - oxlint + - rollup + - sass + - sass-embedded + - stylelint + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - unloader + - vue-tsc + - webpack + - yaml + + '@nuxt/vite-builder@4.5.2(d0cd0ef317e51d9c0a1b53cac6dc8cca)': + dependencies: + '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) + '@vitejs/plugin-vue': 6.0.8(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.6(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) + autoprefixer: 10.5.4(postcss@8.5.26) + consola: 3.4.2 + cssnano: 8.0.10(postcss@8.5.26) + defu: 6.1.7 + escape-string-regexp: 5.0.0 + exsolve: 1.1.1 + generic-names: 4.0.0 + get-port-please: 3.2.0 + jiti: 2.7.0 + js-tokens: 10.0.0 + knitwork: 1.3.0 + mlly: 1.8.2 + mocked-exports: 0.1.1 + nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.4.0)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@6.0.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nypm: 0.6.9 + pathe: 2.0.3 + pkg-types: 2.3.1 + postcss: 8.5.26 + rolldown-string: 0.3.1(rolldown@1.2.6) + seroval: 1.6.4 + std-env: 4.2.0 + ufo: 1.6.4 + unenv: 2.0.0-rc.24 + unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) + vite-node: 6.0.0(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) + vite-plugin-checker: 0.14.5(oxlint@1.80.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3)) + vue: 3.5.42(typescript@6.0.3) vue-bundle-renderer: 2.3.2 optionalDependencies: '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) @@ -6359,66 +6466,6 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript/typescript-aix-ppc64@7.0.2': - optional: true - - '@typescript/typescript-darwin-arm64@7.0.2': - optional: true - - '@typescript/typescript-darwin-x64@7.0.2': - optional: true - - '@typescript/typescript-freebsd-arm64@7.0.2': - optional: true - - '@typescript/typescript-freebsd-x64@7.0.2': - optional: true - - '@typescript/typescript-linux-arm64@7.0.2': - optional: true - - '@typescript/typescript-linux-arm@7.0.2': - optional: true - - '@typescript/typescript-linux-loong64@7.0.2': - optional: true - - '@typescript/typescript-linux-mips64el@7.0.2': - optional: true - - '@typescript/typescript-linux-ppc64@7.0.2': - optional: true - - '@typescript/typescript-linux-riscv64@7.0.2': - optional: true - - '@typescript/typescript-linux-s390x@7.0.2': - optional: true - - '@typescript/typescript-linux-x64@7.0.2': - optional: true - - '@typescript/typescript-netbsd-arm64@7.0.2': - optional: true - - '@typescript/typescript-netbsd-x64@7.0.2': - optional: true - - '@typescript/typescript-openbsd-arm64@7.0.2': - optional: true - - '@typescript/typescript-openbsd-x64@7.0.2': - optional: true - - '@typescript/typescript-sunos-x64@7.0.2': - optional: true - - '@typescript/typescript-win32-arm64@7.0.2': - optional: true - - '@typescript/typescript-win32-x64@7.0.2': - optional: true - '@ungap/structured-clone@1.4.0': {} '@unhead/bundler@3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(unhead@3.4.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))': @@ -6441,13 +6488,13 @@ snapshots: - rollup - unloader - '@unhead/vue@3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2))': + '@unhead/vue@3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3))': dependencies: '@unhead/bundler': 3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(unhead@3.4.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) hookable: 6.1.1 unhead: 3.4.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) - vue: 3.5.42(typescript@7.0.2) + vue: 3.5.42(typescript@6.0.3) optionalDependencies: vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) transitivePeerDependencies: @@ -6483,7 +6530,7 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-vue-jsx@5.1.6(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2))': + '@vitejs/plugin-vue-jsx@5.1.6(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3))': dependencies: '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) @@ -6491,15 +6538,15 @@ snapshots: '@rolldown/pluginutils': 1.0.1 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) - vue: 3.5.42(typescript@7.0.2) + vue: 3.5.42(typescript@6.0.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.8(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2))': + '@vitejs/plugin-vue@6.0.8(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3))': dependencies: '@rolldown/pluginutils': 1.0.1 vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) - vue: 3.5.42(typescript@7.0.2) + vue: 3.5.42(typescript@6.0.3) '@volar/language-core@2.4.28': dependencies: @@ -6515,16 +6562,15 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@volar/typescript@2.4.28(typescript@7.0.2)': + '@volar/typescript@2.4.28(typescript@6.0.3)': dependencies: '@volar/language-core': 2.4.28 path-browserify: 1.0.1 vscode-uri: 3.2.0 optionalDependencies: - typescript: 7.0.2 - optional: true + typescript: 6.0.3 - '@vue-macros/common@3.1.4(vue@3.5.42(typescript@7.0.2))': + '@vue-macros/common@3.1.4(vue@3.5.42(typescript@6.0.3))': dependencies: '@vue/compiler-sfc': 3.5.42 ast-kit: 2.2.0 @@ -6532,7 +6578,7 @@ snapshots: magic-string-ast: 1.0.3 unplugin-utils: 0.3.2 optionalDependencies: - vue: 3.5.42(typescript@7.0.2) + vue: 3.5.42(typescript@6.0.3) '@vue/babel-helper-vue-transform-on@2.0.1': {} @@ -6597,11 +6643,11 @@ snapshots: dependencies: '@vue/devtools-kit': 8.2.1 - '@vue/devtools-core@8.2.1(vue@3.5.42(typescript@7.0.2))': + '@vue/devtools-core@8.2.1(vue@3.5.42(typescript@6.0.3))': dependencies: '@vue/devtools-kit': 8.2.1 '@vue/devtools-shared': 8.2.1 - vue: 3.5.42(typescript@7.0.2) + vue: 3.5.42(typescript@6.0.3) '@vue/devtools-kit@8.2.1': dependencies: @@ -6962,21 +7008,21 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@6.3.0(@types/node@26.4.0)(cosmiconfig@9.0.2(typescript@7.0.2))(typescript@7.0.2): + cosmiconfig-typescript-loader@6.3.0(@types/node@26.4.0)(cosmiconfig@9.0.2(typescript@6.0.3))(typescript@6.0.3): dependencies: '@types/node': 26.4.0 - cosmiconfig: 9.0.2(typescript@7.0.2) + cosmiconfig: 9.0.2(typescript@6.0.3) jiti: 2.6.1 - typescript: 7.0.2 + typescript: 6.0.3 - cosmiconfig@9.0.2(typescript@7.0.2): + cosmiconfig@9.0.2(typescript@6.0.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.3.2 parse-json: 5.2.0 optionalDependencies: - typescript: 7.0.2 + typescript: 6.0.3 crc-32@1.2.2: {} @@ -8519,17 +8565,17 @@ snapshots: - magicast - rolldown - nuxt@4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@7.0.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@7.0.2))(yaml@2.9.0): + nuxt@4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@6.0.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0): dependencies: '@dxup/nuxt': 0.5.10(esbuild@0.28.2)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) '@nuxt/cli': 3.37.0(@nuxt/schema@4.5.2)(magicast@0.5.4)(supports-color@10.2.2) - '@nuxt/devtools': 3.4.2(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)) + '@nuxt/devtools': 3.4.2(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) - '@nuxt/nitro-server': 4.5.2(e3f8ac5671454bf37b86c423677f56de) + '@nuxt/nitro-server': 4.5.2(2420a9583a85b8bd7cfa917919a83024) '@nuxt/schema': 4.5.2 '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))) - '@nuxt/vite-builder': 4.5.2(c1a8a6120ba3a6c438fe66804e584211) - '@unhead/vue': 3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)) + '@nuxt/vite-builder': 4.5.2(04dcacb2fd48a5257f1fd4667d8cfece) + '@unhead/vue': 3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) '@vue/shared': 3.5.42 chokidar: 5.0.0 compatx: 0.2.0 @@ -8578,9 +8624,150 @@ snapshots: unrouting: 0.2.3 untyped: 2.0.0 verkit: 0.3.2 - vue: 3.5.42(typescript@7.0.2) + vue: 3.5.42(typescript@6.0.3) vue-component-type-helpers: 3.3.11 - vue-router: 5.3.0(@vue/compiler-sfc@3.5.42)(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)) + vue-router: 5.3.0(@vue/compiler-sfc@3.5.42)(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) + optionalDependencies: + '@types/node': 26.4.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@babel/plugin-proposal-decorators' + - '@babel/plugin-syntax-jsx' + - '@babel/plugin-syntax-typescript' + - '@biomejs/biome' + - '@capacitor/preferences' + - '@deno/kv' + - '@electric-sql/pglite' + - '@farmfe/core' + - '@libsql/client' + - '@netlify/blobs' + - '@oxc-project/types' + - '@pinia/colada' + - '@planetscale/database' + - '@rollup/plugin-babel' + - '@rspack/core' + - '@unhead/cli' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@vitejs/devtools' + - '@vitejs/devtools-kit' + - '@vue/compiler-sfc' + - aws4fetch + - bare-abort-controller + - bare-buffer + - better-sqlite3 + - bufferutil + - bun-types-no-globals + - cac + - commander + - db0 + - drizzle-orm + - encoding + - esbuild + - eslint + - idb-keyval + - ioredis + - less + - lightningcss + - magicast + - meow + - mysql2 + - optionator + - oxc-parser + - oxlint + - pinia + - react-native-b4a + - rollup + - rollup-plugin-visualizer + - sass + - sass-embedded + - sqlite3 + - srvx + - stylelint + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - unloader + - uploadthing + - utf-8-validate + - vite + - vue-tsc + - webpack + - xml2js + - yaml + + nuxt@4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.147.0)(@types/node@26.4.0)(@vue/compiler-sfc@3.5.42)(db0@0.4.0)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.139.0)(oxlint@1.80.0)(rolldown@1.2.6)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.6)(rollup@4.63.1))(rollup@4.63.1)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@6.0.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0): + dependencies: + '@dxup/nuxt': 0.5.10(esbuild@0.28.2)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + '@nuxt/cli': 3.37.0(@nuxt/schema@4.5.2)(magicast@0.5.4)(supports-color@10.2.2) + '@nuxt/devtools': 3.4.2(db0@0.4.0)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) + '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) + '@nuxt/nitro-server': 4.5.2(6692208593466a047c9c1da45e9ddbcc) + '@nuxt/schema': 4.5.2 + '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))) + '@nuxt/vite-builder': 4.5.2(d0cd0ef317e51d9c0a1b53cac6dc8cca) + '@unhead/vue': 3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) + '@vue/shared': 3.5.42 + chokidar: 5.0.0 + compatx: 0.2.0 + consola: 3.4.2 + cookie-es: 3.1.1 + defu: 6.1.7 + devalue: 5.9.2 + errx: 0.1.2 + escape-string-regexp: 5.0.0 + exsolve: 1.1.1 + fnv1a-64: 0.1.2 + hookable: 6.1.1 + ignore: 7.0.7 + impound: 1.2.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + jiti: 2.7.0 + klona: 2.0.6 + knitwork: 1.3.0 + magic-string: 1.2.3 + mlly: 1.8.2 + nanotar: 0.3.0 + nostics: 1.2.0 + nypm: 0.6.9 + object-identity: 0.2.3 + ofetch: 1.5.1 + ohash: 2.0.12 + on-change: 6.0.2 + oxc-walker: 1.1.1(@oxc-project/types@0.147.0)(oxc-parser@0.139.0)(rolldown@1.2.6) + pathe: 2.0.3 + perfect-debounce: 2.1.0 + picomatch: 4.0.7 + pkg-types: 2.3.1 + rolldown: 1.2.6 + rolldown-string: 0.3.1(rolldown@1.2.6) + rou3: 0.9.2 + scule: 1.3.0 + std-env: 4.2.0 + tinyglobby: 0.2.17 + ufo: 1.6.4 + ultrahtml: 1.7.0 + uncrypto: 0.1.3 + unctx: 3.0.1(magic-string@1.2.3)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) + undici: 8.10.0 + unhead: 3.4.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + unimport: 6.4.0(esbuild@0.28.2)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + unrouting: 0.2.3 + untyped: 2.0.0 + verkit: 0.3.2 + vue: 3.5.42(typescript@6.0.3) + vue-component-type-helpers: 3.3.11 + vue-router: 5.3.0(@vue/compiler-sfc@3.5.42)(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) optionalDependencies: '@types/node': 26.4.0 transitivePeerDependencies: @@ -9689,28 +9876,7 @@ snapshots: typescript@5.9.3: {} - typescript@7.0.2: - optionalDependencies: - '@typescript/typescript-aix-ppc64': 7.0.2 - '@typescript/typescript-darwin-arm64': 7.0.2 - '@typescript/typescript-darwin-x64': 7.0.2 - '@typescript/typescript-freebsd-arm64': 7.0.2 - '@typescript/typescript-freebsd-x64': 7.0.2 - '@typescript/typescript-linux-arm': 7.0.2 - '@typescript/typescript-linux-arm64': 7.0.2 - '@typescript/typescript-linux-loong64': 7.0.2 - '@typescript/typescript-linux-mips64el': 7.0.2 - '@typescript/typescript-linux-ppc64': 7.0.2 - '@typescript/typescript-linux-riscv64': 7.0.2 - '@typescript/typescript-linux-s390x': 7.0.2 - '@typescript/typescript-linux-x64': 7.0.2 - '@typescript/typescript-netbsd-arm64': 7.0.2 - '@typescript/typescript-netbsd-x64': 7.0.2 - '@typescript/typescript-openbsd-arm64': 7.0.2 - '@typescript/typescript-openbsd-x64': 7.0.2 - '@typescript/typescript-sunos-x64': 7.0.2 - '@typescript/typescript-win32-arm64': 7.0.2 - '@typescript/typescript-win32-x64': 7.0.2 + typescript@6.0.3: {} ufo@1.6.4: {} @@ -9902,6 +10068,20 @@ snapshots: db0: 0.3.4 ioredis: 5.11.1(supports-color@10.2.2) + unstorage@1.17.5(db0@0.4.0)(ioredis@5.11.1(supports-color@10.2.2)): + dependencies: + anymatch: 3.1.3 + chokidar: 5.0.0 + destr: 2.0.5 + h3: 1.15.11 + lru-cache: 11.5.2 + node-fetch-native: 1.6.7 + ofetch: 1.5.1 + ufo: 1.6.4 + optionalDependencies: + db0: 0.4.0 + ioredis: 5.11.1(supports-color@10.2.2) + untun@0.2.2: {} untyped@2.0.0: @@ -9979,7 +10159,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.14.5(oxlint@1.80.0)(typescript@7.0.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@7.0.2)): + vite-plugin-checker@0.14.5(oxlint@1.80.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3)): dependencies: '@babel/code-frame': 7.29.7 chokidar: 5.0.0 @@ -9991,8 +10171,8 @@ snapshots: vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) optionalDependencies: oxlint: 1.80.0 - typescript: 7.0.2 - vue-tsc: 3.3.11(typescript@7.0.2) + typescript: 6.0.3 + vue-tsc: 3.3.11(typescript@6.0.3) vite-plugin-inspect@11.4.1(@nuxt/kit@4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)): dependencies: @@ -10009,7 +10189,7 @@ snapshots: optionalDependencies: '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) - vite-plugin-vue-tracer@1.5.0(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)): + vite-plugin-vue-tracer@1.5.0(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)): dependencies: estree-walker: 3.0.3 exsolve: 1.1.1 @@ -10017,7 +10197,7 @@ snapshots: pathe: 2.0.3 source-map-js: 1.2.1 vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) - vue: 3.5.42(typescript@7.0.2) + vue: 3.5.42(typescript@6.0.3) vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0): dependencies: @@ -10052,9 +10232,9 @@ snapshots: vue-devtools-stub@0.1.0: {} - vue-router@5.3.0(@vue/compiler-sfc@3.5.42)(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@7.0.2)): + vue-router@5.3.0(@vue/compiler-sfc@3.5.42)(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)): dependencies: - '@vue-macros/common': 3.1.4(vue@3.5.42(typescript@7.0.2)) + '@vue-macros/common': 3.1.4(vue@3.5.42(typescript@6.0.3)) '@vue/devtools-api': 8.2.1 ast-walker-scope: 0.9.0 chokidar: 5.0.0 @@ -10070,7 +10250,7 @@ snapshots: tinyglobby: 0.2.17 unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) unplugin-utils: 0.3.2 - vue: 3.5.42(typescript@7.0.2) + vue: 3.5.42(typescript@6.0.3) optionalDependencies: '@vue/compiler-sfc': 3.5.42 vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) @@ -10084,14 +10264,13 @@ snapshots: - unloader - webpack - vue-tsc@3.3.11(typescript@7.0.2): + vue-tsc@3.3.11(typescript@6.0.3): dependencies: - '@volar/typescript': 2.4.28(typescript@7.0.2) + '@volar/typescript': 2.4.28(typescript@6.0.3) '@vue/language-core': 3.3.11 - typescript: 7.0.2 - optional: true + typescript: 6.0.3 - vue@3.5.42(typescript@7.0.2): + vue@3.5.42(typescript@6.0.3): dependencies: '@vue/compiler-dom': 3.5.42 '@vue/compiler-sfc': 3.5.42 @@ -10099,7 +10278,7 @@ snapshots: '@vue/server-renderer': 3.5.42 '@vue/shared': 3.5.42 optionalDependencies: - typescript: 7.0.2 + typescript: 6.0.3 web-namespaces@2.0.1: {} diff --git a/www/package.json b/www/package.json index 1d64124e..25d523b9 100644 --- a/www/package.json +++ b/www/package.json @@ -7,9 +7,14 @@ "type": "module", "scripts": { "dev": "nuxt dev", - "build": "nuxt build" + "build": "nuxt build", + "typecheck": "nuxt typecheck" }, "dependencies": { "nuxt": "^4.5.2" + }, + "devDependencies": { + "typescript": "^6.0.3", + "vue-tsc": "^3.3.11" } } From 6c30b5fd7b2406e82d6e3bbde923ca59373f2a12 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 19:07:41 +0200 Subject: [PATCH 004/158] build: pin the whole graph to the TypeScript 6 line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vue declares typescript as an optional peer with range `*`. With autoInstallPeers, any package that does not pin it can pull in TypeScript 7 — which vue-tsc cannot run on, taking down `pnpm typecheck:app` even though the repo's own devDependency says 6. An override closes that door for transitive packages too. gildstone carries the same one for the same reason, retested there against 7.0.2. --- pnpm-lock.yaml | 42 +++++++++++++++--------------------------- pnpm-workspace.yaml | 9 +++++++++ 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1c39218c..2c65e23e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,6 +105,9 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + typescript: ^6.0.3 + importers: .: @@ -1651,7 +1654,7 @@ packages: '@volar/typescript@2.4.28': resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} peerDependencies: - typescript: '*' + typescript: ^6.0.3 peerDependenciesMeta: typescript: optional: true @@ -2077,13 +2080,13 @@ packages: peerDependencies: '@types/node': '*' cosmiconfig: '>=9' - typescript: '>=5' + typescript: ^6.0.3 cosmiconfig@9.0.2: resolution: {integrity: sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==} engines: {node: '>=14'} peerDependencies: - typescript: '>=4.9.5' + typescript: ^6.0.3 peerDependenciesMeta: typescript: optional: true @@ -4191,11 +4194,6 @@ packages: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true - typescript@6.0.3: resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} @@ -4469,7 +4467,7 @@ packages: optionator: ^0.9.4 oxlint: '>=1' stylelint: '>=16.26.1' - typescript: '*' + typescript: ^6.0.3 vite: '>=5.4.21' vue-tsc: ~2.2.10 || ^3.0.0 peerDependenciesMeta: @@ -4558,7 +4556,7 @@ packages: vue-component-meta@3.3.11: resolution: {integrity: sha512-fskQZaIFOifwB4x+/J24795yvezOJ1TKaqn97/4PHybyvXpDNdcKn3oTcPrw6HnNoZWe343A+TiCFOcFv1/SuQ==} peerDependencies: - typescript: '*' + typescript: ^6.0.3 peerDependenciesMeta: typescript: optional: true @@ -4591,12 +4589,12 @@ packages: resolution: {integrity: sha512-gOb0B9rtU2+f1dszwPqSH5kAieIF9ReeLhD3kSRNHv5WZZUQz/JdVXW0RTdqhNTMlQkqKzrTTviqKr/4FYZraQ==} hasBin: true peerDependencies: - typescript: '>=5.0.0' + typescript: ^6.0.3 vue@3.5.42: resolution: {integrity: sha512-4RyHQTbQvOPs3MfvUO1Sg0YRrKNnA0mAVtvpd12Tg1fKDN7OHBUl1IqSn8zGJjK9nI3NkNp8cgTpVrSZC5TTcA==} peerDependencies: - typescript: '*' + typescript: ^6.0.3 peerDependenciesMeta: typescript: optional: true @@ -6554,14 +6552,6 @@ snapshots: '@volar/source-map@2.4.28': {} - '@volar/typescript@2.4.28(typescript@5.9.3)': - dependencies: - '@volar/language-core': 2.4.28 - path-browserify: 1.0.1 - vscode-uri: 3.2.0 - optionalDependencies: - typescript: 5.9.3 - '@volar/typescript@2.4.28(typescript@6.0.3)': dependencies: '@volar/language-core': 2.4.28 @@ -8556,10 +8546,10 @@ snapshots: oxc-walker: 1.1.1(@oxc-project/types@0.147.0)(oxc-parser@0.139.0)(rolldown@1.2.6) pathe: 2.0.3 scule: 1.3.0 - typescript: 5.9.3 + typescript: 6.0.3 ufo: 1.6.4 unplugin: 2.3.11 - vue-component-meta: 3.3.11(typescript@5.9.3) + vue-component-meta: 3.3.11(typescript@6.0.3) transitivePeerDependencies: - '@oxc-project/types' - magicast @@ -9874,8 +9864,6 @@ snapshots: es-errors: 1.3.0 is-typed-array: 1.1.15 - typescript@5.9.3: {} - typescript@6.0.3: {} ufo@1.6.4: {} @@ -10220,13 +10208,13 @@ snapshots: dependencies: ufo: 1.6.4 - vue-component-meta@3.3.11(typescript@5.9.3): + vue-component-meta@3.3.11(typescript@6.0.3): dependencies: - '@volar/typescript': 2.4.28(typescript@5.9.3) + '@volar/typescript': 2.4.28(typescript@6.0.3) '@vue/language-core': 3.3.11 path-browserify: 1.0.1 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 vue-component-type-helpers@3.3.11: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index b2ffe5be..c8896c98 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -32,6 +32,15 @@ nodeLinker: isolated packages: - www +# Vue declares `typescript` as an optional peer with range `*`, and with +# autoInstallPeers any package that does not pin it can pull in TypeScript 7 — +# which vue-tsc cannot run on (it resolves typescript/lib/tsc, a subpath 7 no +# longer exports), taking down `pnpm typecheck:app`. Pin the whole graph to the +# 6 line the repo targets; gildstone carries the same override for the same +# reason. Revisit when vue-tsc supports 7. +overrides: + typescript: ^6.0.3 + # Build scripts are blocked by default; each one is answered explicitly here. # esbuild places a platform binary in its postinstall and does not run without # it. better-sqlite3 arrives transitively through @nuxt/content and db0 and From 6f4309f611dce9b803ef947111b1ab18b295422c Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 19:07:49 +0200 Subject: [PATCH 005/158] fix: look for docs at the repository root, not the site root MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The layer computed the docs folder from process.cwd(), which is the directory the site runs in. Those are the same directory only when the Nuxt app sits at the repository root — the case for a JavaScript project, and not the case when the site lives in a subfolder while docs/ stays at the root where a reader on GitHub expects it. This repo is the second kind, so its own docs move up to docs/ and the resolution walks up to the nearest .git instead, falling back to the working directory when there is no repository. Provisional: the `sources` shorthand should make this explicit rather than inferred. --- content.config.ts | 31 ++++++++++++++++++++++++------- docs/index.md | 20 ++++++++++++++++++++ www/docs/edge-cases.md | 9 --------- www/docs/index.md | 10 ---------- 4 files changed, 44 insertions(+), 26 deletions(-) create mode 100644 docs/index.md delete mode 100644 www/docs/edge-cases.md delete mode 100644 www/docs/index.md diff --git a/content.config.ts b/content.config.ts index cf593854..f137c0d8 100644 --- a/content.config.ts +++ b/content.config.ts @@ -1,22 +1,39 @@ -import { join } from 'node:path'; +import { existsSync } from 'node:fs'; +import { dirname, join } from 'node:path'; import { defineCollection, defineContentConfig } from '@nuxt/content'; // Content merges content.config.ts from every layer — but it resolves each // collection against the rootDir of the LAYER that declared it // (`collection.__rootDir = curr.cwd` in the module), not against the consumer. -// A layer therefore cannot declare a collection over the consumer's docs/ by -// writing a relative path; it has to compute an absolute one. +// A layer therefore cannot reach the consumer's docs/ with a relative path; it +// has to compute an absolute one. It can, because c12 executes this file. // -// It can, because c12 executes this file: process.cwd() is the directory the -// consumer's nuxt process runs in. This is the seam the whole `sources` -// shorthand will sit on, so it is proven here first. +// The path resolves against the REPOSITORY root rather than the directory the +// site runs in, because those differ whenever the site sits in a subfolder — +// as it does in this repo, where www/ is the site and docs/ is one level up. +// Provisional: the `sources` shorthand will make this explicit rather than +// inferred. +function repositoryRoot(): string { + let dir = process.cwd(); + + for (;;) { + if (existsSync(join(dir, '.git'))) return dir; + + const parent = dirname(dir); + if (parent === dir) return process.cwd(); // no repository — fall back to the site + dir = parent; + } +} + export default defineContentConfig({ collections: { + // The degenerate case the brief calls the most common one: the consumer's + // own docs/, current branch, no versions, no configuration. docs: defineCollection({ type: 'page', source: { include: '**/*.md', - cwd: join(process.cwd(), 'docs'), + cwd: join(repositoryRoot(), 'docs'), prefix: '' } }) diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..bc57442a --- /dev/null +++ b/docs/index.md @@ -0,0 +1,20 @@ +--- +title: duxt +description: A Nuxt documentation layer on Content v3 — the idea, and what is built so far. +--- + +# duxt + +A Nuxt layer that turns a repository's `docs/` folder into a documentation +site. Extend it and the folder is served; point it at other repositories, or at +tags of the same one, and those become versions. + +> Nothing here is decided yet. The layer exists as a skeleton, the theme does +> not, and whether this carries a public project is still an open question. + +## The shape of it + +The repo root **is** the layer. `www/` beside it is the site that consumes the +layer, the way a downstream project would — which is also how this page is +being served to you right now: through the layer's own `docs` collection, +reading the folder you are reading. diff --git a/www/docs/edge-cases.md b/www/docs/edge-cases.md deleted file mode 100644 index 5c94f59f..00000000 --- a/www/docs/edge-cases.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Edge cases -description: Deliberately awkward frontmatter lives here. ---- - -# Edge cases - -The playground is meant to carry the ugly material — long titles, missing -frontmatter, deep nesting — so the theme meets it before a consumer does. diff --git a/www/docs/index.md b/www/docs/index.md deleted file mode 100644 index 32ea09fd..00000000 --- a/www/docs/index.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Playground -description: The local, unversioned case — no config at all. ---- - -# Playground - -This file is served by the layer's own `docs` collection. Nothing in -`playground/nuxt.config.ts` configures it: the collection ships with the layer, -and Content merges the config from every layer in the chain. From 66cb7513c2e97a8816111fd151c4f229f160fdb4 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 19:07:57 +0200 Subject: [PATCH 006/158] docs: explain where a project's docs and its site live MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The two arrangements a consumer can pick — Markdown only, with the site in another repository, or a site beside docs/ in the same one — and the rule that follows from both: the layer resolves docs/ against the repository, never against the site. --- docs/structure.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 docs/structure.md diff --git a/docs/structure.md b/docs/structure.md new file mode 100644 index 00000000..3817b5bc --- /dev/null +++ b/docs/structure.md @@ -0,0 +1,26 @@ +--- +title: Where your docs live +description: The two ways a project can carry a documentation site. +--- + +# Where your docs live + +Your Markdown stays in `docs/` at the root of your repository. Where the _site_ +lives is a separate question, and there are two answers. + +## The site lives elsewhere + +Your repository holds nothing but Markdown — no Nuxt, no `package.json`, no npm +dependencies. A separate site reads `docs/` straight from git, at a branch or at +a tag. This is the only sane option for a Go, PHP or Rust repository, and it is +what lets one site serve many projects. + +## The site lives beside your docs + +A folder in the same repository holds the site, and `docs/` stays at the root +where a reader on GitHub expects it. Sensible when the repository is JavaScript +anyway and the docs deploy together with the code. That is the arrangement this +repository itself uses: `docs/` here, `www/` beside it. + +In both cases the layer resolves `docs/` against the **repository** root, not +against the directory the site happens to run in. From 0020313cfa257ee5c9a89acb099afe0dc30bbc54 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 20:32:30 +0200 Subject: [PATCH 007/158] feat: set up shadcn-vue, Tailwind and the base theme MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The theme decision, made concrete: shadcn-vue through shadcn-nuxt on a clean Tailwind 4 base, not Docus or Nuxt UI. Components are copied into app/components/ui rather than imported, so a consumer overriding one is editing a file, not fighting a prop. The palette is the neutral shadcn set as CSS variables in duxt.css, with @nuxtjs/color-mode toggling the `dark` class shadcn expects. A consumer redefines a token in its own stylesheet; nothing needs forking. Two traps a layer has to work around, both the same shape as the docs cwd: - A relative path in the layer's nuxt.config resolves against the CONSUMER, so the css entry and componentDir go through a layer() helper that resolves against import.meta.url. - '@' belongs to whoever extends the layer. Imports inside the layer use a layer-owned '@duxt' alias instead, and components.json points the shadcn CLI at the same one so generated files get it right. tsconfig gains the matching path for the CLI's resolution step. baseUrl is deliberately absent — TypeScript 6 deprecates it. --- app/assets/css/duxt.css | 90 ++ app/assets/css/prose.css | 73 ++ app/components/ui/button/Button.vue | 31 + app/components/ui/button/index.ts | 39 + app/components/ui/collapsible/Collapsible.vue | 19 + .../ui/collapsible/CollapsibleContent.vue | 12 + .../ui/collapsible/CollapsibleTrigger.vue | 12 + app/components/ui/collapsible/index.ts | 3 + app/components/ui/scroll-area/ScrollArea.vue | 31 + app/components/ui/scroll-area/ScrollBar.vue | 38 + app/components/ui/scroll-area/index.ts | 2 + app/components/ui/separator/Separator.vue | 30 + app/components/ui/separator/index.ts | 1 + app/lib/utils.ts | 7 + components.json | 19 + nuxt.config.ts | 35 +- package.json | 16 +- pnpm-lock.yaml | 849 +++++++++++++++++- pnpm-workspace.yaml | 3 + tsconfig.json | 5 +- 20 files changed, 1310 insertions(+), 5 deletions(-) create mode 100644 app/assets/css/duxt.css create mode 100644 app/assets/css/prose.css create mode 100644 app/components/ui/button/Button.vue create mode 100644 app/components/ui/button/index.ts create mode 100644 app/components/ui/collapsible/Collapsible.vue create mode 100644 app/components/ui/collapsible/CollapsibleContent.vue create mode 100644 app/components/ui/collapsible/CollapsibleTrigger.vue create mode 100644 app/components/ui/collapsible/index.ts create mode 100644 app/components/ui/scroll-area/ScrollArea.vue create mode 100644 app/components/ui/scroll-area/ScrollBar.vue create mode 100644 app/components/ui/scroll-area/index.ts create mode 100644 app/components/ui/separator/Separator.vue create mode 100644 app/components/ui/separator/index.ts create mode 100644 app/lib/utils.ts create mode 100644 components.json diff --git a/app/assets/css/duxt.css b/app/assets/css/duxt.css new file mode 100644 index 00000000..222808f0 --- /dev/null +++ b/app/assets/css/duxt.css @@ -0,0 +1,90 @@ +@import 'tailwindcss'; +@import 'tw-animate-css'; +@import './prose.css'; + +/* shadcn switches themes on a class, not a media query — @nuxtjs/color-mode + sets it with classSuffix: '' so the two agree. */ +@custom-variant dark (&:is(.dark *)); + +/* The neutral base palette, in oklch. A consumer overrides a token by + redefining it in its own stylesheet — no fork of this file needed. */ +:root { + --radius: 0.625rem; + --background: oklch(1 0 0); + --foreground: oklch(0.145 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.205 0 0); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.97 0 0); + --secondary-foreground: oklch(0.205 0 0); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); + --destructive: oklch(0.577 0.245 27.325); + --destructive-foreground: oklch(0.985 0 0); + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); +} + +.dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.205 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.205 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.922 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.269 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --destructive-foreground: oklch(0.985 0 0); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.556 0 0); +} + +@theme inline { + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + + body { + @apply bg-background text-foreground; + } +} diff --git a/app/assets/css/prose.css b/app/assets/css/prose.css new file mode 100644 index 00000000..5ac16628 --- /dev/null +++ b/app/assets/css/prose.css @@ -0,0 +1,73 @@ +/* Prose styling as plain CSS rather than a typography plugin: a consumer + overriding one element should not have to learn a plugin's option shape. */ +.duxt-prose { + @apply text-[15px] leading-7; +} + +.duxt-prose h1 { + @apply mt-0 mb-4 scroll-m-20 text-3xl font-semibold tracking-tight; +} + +.duxt-prose h2 { + @apply mt-10 mb-4 scroll-m-20 border-b pb-2 text-2xl font-semibold tracking-tight; +} + +.duxt-prose h3 { + @apply mt-8 mb-3 scroll-m-20 text-xl font-semibold tracking-tight; +} + +.duxt-prose h4 { + @apply mt-6 mb-2 scroll-m-20 text-lg font-semibold tracking-tight; +} + +.duxt-prose p { + @apply my-4; +} + +.duxt-prose a { + @apply font-medium underline underline-offset-4 hover:text-primary; +} + +.duxt-prose ul { + @apply my-4 ml-6 list-disc space-y-2; +} + +.duxt-prose ol { + @apply my-4 ml-6 list-decimal space-y-2; +} + +.duxt-prose blockquote { + @apply my-4 border-l-2 pl-4 text-muted-foreground italic; +} + +.duxt-prose :not(pre) > code { + @apply rounded bg-muted px-1.5 py-0.5 font-mono text-sm; +} + +.duxt-prose pre { + @apply my-4 overflow-x-auto rounded-lg border bg-muted p-4 text-sm; +} + +.duxt-prose pre code { + @apply bg-transparent p-0; +} + +.duxt-prose table { + @apply my-4 w-full text-sm; +} + +.duxt-prose th { + @apply border-b px-3 py-2 text-left font-medium; +} + +.duxt-prose td { + @apply border-b px-3 py-2; +} + +.duxt-prose hr { + @apply my-8; +} + +.duxt-prose img { + @apply my-4 rounded-lg border; +} diff --git a/app/components/ui/button/Button.vue b/app/components/ui/button/Button.vue new file mode 100644 index 00000000..7313db4e --- /dev/null +++ b/app/components/ui/button/Button.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/ui/button/index.ts b/app/components/ui/button/index.ts new file mode 100644 index 00000000..c45751b7 --- /dev/null +++ b/app/components/ui/button/index.ts @@ -0,0 +1,39 @@ +import type { VariantProps } from 'class-variance-authority'; +import { cva } from 'class-variance-authority'; + +export { default as Button } from './Button.vue'; + +export const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground hover:bg-primary/90', + destructive: + 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', + outline: + 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50', + secondary: + 'bg-secondary text-secondary-foreground hover:bg-secondary/80', + ghost: + 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50', + link: 'text-primary underline-offset-4 hover:underline' + }, + size: { + default: 'h-9 px-4 py-2 has-[>svg]:px-3', + xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3", + sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5', + lg: 'h-10 rounded-md px-6 has-[>svg]:px-4', + icon: 'size-9', + 'icon-xs': "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3", + 'icon-sm': 'size-8', + 'icon-lg': 'size-10' + } + }, + defaultVariants: { + variant: 'default', + size: 'default' + } + } +); +export type ButtonVariants = VariantProps; diff --git a/app/components/ui/collapsible/Collapsible.vue b/app/components/ui/collapsible/Collapsible.vue new file mode 100644 index 00000000..e1edac96 --- /dev/null +++ b/app/components/ui/collapsible/Collapsible.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/ui/collapsible/CollapsibleContent.vue b/app/components/ui/collapsible/CollapsibleContent.vue new file mode 100644 index 00000000..6a6c8436 --- /dev/null +++ b/app/components/ui/collapsible/CollapsibleContent.vue @@ -0,0 +1,12 @@ + + + diff --git a/app/components/ui/collapsible/CollapsibleTrigger.vue b/app/components/ui/collapsible/CollapsibleTrigger.vue new file mode 100644 index 00000000..d10540dc --- /dev/null +++ b/app/components/ui/collapsible/CollapsibleTrigger.vue @@ -0,0 +1,12 @@ + + + diff --git a/app/components/ui/collapsible/index.ts b/app/components/ui/collapsible/index.ts new file mode 100644 index 00000000..56b5a955 --- /dev/null +++ b/app/components/ui/collapsible/index.ts @@ -0,0 +1,3 @@ +export { default as Collapsible } from './Collapsible.vue'; +export { default as CollapsibleContent } from './CollapsibleContent.vue'; +export { default as CollapsibleTrigger } from './CollapsibleTrigger.vue'; diff --git a/app/components/ui/scroll-area/ScrollArea.vue b/app/components/ui/scroll-area/ScrollArea.vue new file mode 100644 index 00000000..4a4ed1dd --- /dev/null +++ b/app/components/ui/scroll-area/ScrollArea.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/ui/scroll-area/ScrollBar.vue b/app/components/ui/scroll-area/ScrollBar.vue new file mode 100644 index 00000000..4389106e --- /dev/null +++ b/app/components/ui/scroll-area/ScrollBar.vue @@ -0,0 +1,38 @@ + + + diff --git a/app/components/ui/scroll-area/index.ts b/app/components/ui/scroll-area/index.ts new file mode 100644 index 00000000..d6541f36 --- /dev/null +++ b/app/components/ui/scroll-area/index.ts @@ -0,0 +1,2 @@ +export { default as ScrollArea } from './ScrollArea.vue'; +export { default as ScrollBar } from './ScrollBar.vue'; diff --git a/app/components/ui/separator/Separator.vue b/app/components/ui/separator/Separator.vue new file mode 100644 index 00000000..e519ade4 --- /dev/null +++ b/app/components/ui/separator/Separator.vue @@ -0,0 +1,30 @@ + + + diff --git a/app/components/ui/separator/index.ts b/app/components/ui/separator/index.ts new file mode 100644 index 00000000..3cb07b01 --- /dev/null +++ b/app/components/ui/separator/index.ts @@ -0,0 +1 @@ +export { default as Separator } from './Separator.vue'; diff --git a/app/lib/utils.ts b/app/lib/utils.ts new file mode 100644 index 00000000..8e533ebb --- /dev/null +++ b/app/lib/utils.ts @@ -0,0 +1,7 @@ +import { type ClassValue, clsx } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +/** Merge conditional class lists, letting later Tailwind utilities win. */ +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/components.json b/components.json new file mode 100644 index 00000000..9e621b03 --- /dev/null +++ b/components.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://shadcn-vue.com/schema.json", + "style": "new-york", + "typescript": true, + "tailwind": { + "config": "", + "css": "app/assets/css/duxt.css", + "baseColor": "neutral", + "cssVariables": true + }, + "aliases": { + "components": "@duxt/components", + "composables": "@duxt/composables", + "utils": "@duxt/lib/utils", + "ui": "@duxt/components/ui", + "lib": "@duxt/lib" + }, + "iconLibrary": "lucide" +} diff --git a/nuxt.config.ts b/nuxt.config.ts index 7766fdcd..a9dc2507 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -1,9 +1,22 @@ +import { fileURLToPath } from 'node:url'; import { defineNuxtConfig } from 'nuxt/config'; +import tailwindcss from '@tailwindcss/vite'; + +/** Resolve against this layer, not the project extending it. */ +const layer = (path: string) => fileURLToPath(new URL(path, import.meta.url)); // The layer itself. A consumer gets all of this by extending '@kirchdev/duxt', // which resolves through package.json's `main` to this file. export default defineNuxtConfig({ - modules: ['@nuxt/content'], + modules: ['@nuxt/content', '@nuxt/icon', '@nuxtjs/color-mode', 'shadcn-nuxt'], + + css: [layer('./app/assets/css/duxt.css')], + + // '@' belongs to whoever extends the layer. Imports inside the layer use + // '@duxt' so they resolve here regardless of the consumer's own aliases. + alias: { + '@duxt': layer('./app') + }, content: { // Content's default driver, better-sqlite3, is a native addon compiled @@ -12,5 +25,25 @@ export default defineNuxtConfig({ experimental: { nativeSqlite: true } + }, + + colorMode: { + // shadcn switches on a `dark` class, not a data attribute or a media query. + classSuffix: '', + preference: 'system', + fallback: 'light' + }, + + shadcn: { + prefix: '', + componentDir: layer('./app/components/ui') + }, + + icon: { + mode: 'svg' + }, + + vite: { + plugins: [tailwindcss()] } }); diff --git a/package.json b/package.json index 81bdc377..b0e08fcb 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ }, "files": [ "app", + "components.json", "content.config.ts", "nuxt.config.ts" ], @@ -51,7 +52,20 @@ "typecheck:app": "pnpm --filter www typecheck" }, "dependencies": { - "@nuxt/content": "^3.16.0" + "@iconify-json/lucide": "^1.2.127", + "@lucide/vue": "^1.37.0", + "@nuxt/content": "^3.16.0", + "@nuxt/icon": "^2.5.1", + "@nuxtjs/color-mode": "^4.0.1", + "@tailwindcss/vite": "^4.3.3", + "@vueuse/core": "^14.4.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "reka-ui": "^2.10.4", + "shadcn-nuxt": "^2.8.2", + "tailwind-merge": "^3.6.0", + "tailwindcss": "^4.3.3", + "tw-animate-css": "^1.4.0" }, "devDependencies": { "@commitlint/cli": "^21.2.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2c65e23e..15b0a3b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -112,9 +112,48 @@ importers: .: dependencies: + '@iconify-json/lucide': + specifier: ^1.2.127 + version: 1.2.127 + '@lucide/vue': + specifier: ^1.37.0 + version: 1.37.0(vue@3.5.42(typescript@6.0.3)) '@nuxt/content': specifier: ^3.16.0 version: 3.16.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + '@nuxt/icon': + specifier: ^2.5.1 + version: 2.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@2.3.11)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)) + '@nuxtjs/color-mode': + specifier: ^4.0.1 + version: 4.0.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@2.3.11) + '@tailwindcss/vite': + specifier: ^4.3.3 + version: 4.3.3(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + '@vueuse/core': + specifier: ^14.4.0 + version: 14.4.0(vue@3.5.42(typescript@6.0.3)) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + reka-ui: + specifier: ^2.10.4 + version: 2.10.4(vue@3.5.42(typescript@6.0.3)) + shadcn-nuxt: + specifier: ^2.8.2 + version: 2.8.2(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(magicast@0.5.4) + tailwind-merge: + specifier: ^3.6.0 + version: 3.6.0 + tailwindcss: + specifier: ^4.3.3 + version: 4.3.3 + tw-animate-css: + specifier: ^1.4.0 + version: 1.4.0 devDependencies: '@commitlint/cli': specifier: ^21.2.2 @@ -165,6 +204,9 @@ importers: packages: + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + '@antfu/ni@30.5.0': resolution: {integrity: sha512-VwQoM9qF1dzDrye55b1qIBeLr4zQ1a5wZQMPCe496HTiquViBZqxtNBaq98WX3ze5kC9Yl7gKSU4W2vtLztxYw==} engines: {node: '>=20.19.0'} @@ -579,9 +621,44 @@ packages: cpu: [x64] os: [win32] + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} + + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} + + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} + + '@floating-ui/vue@1.1.11': + resolution: {integrity: sha512-HzHKCNVxnGS35r9fCHBc3+uCnjw9IWIlCPL683cGgM9Kgj2BiAl8x1mS7vtvP6F9S/e/q4O6MApwSHj8hNLGfw==} + '@henrygd/queue@1.2.0': resolution: {integrity: sha512-jW/BLSTpcvExDhqJGxtIPgGr2O0IFF8XUNDwEbfCfhrXT8a4xztQ9Lv6U/vbYzYC0xVWn+3zv6YnLUh3bEFUKA==} + '@iconify-json/lucide@1.2.127': + resolution: {integrity: sha512-7KuCCpkly00kefna4wEnCr8l2HFRkbn4mD4zRib8wCSbrBmnR/l57ExpU6j5jv/Bo+qHpWuHpDtcqceQ0ptArw==} + + '@iconify/collections@1.0.730': + resolution: {integrity: sha512-vuSS1r5FVWH5Oo6vEnAYvCd4u13sr95s0uDjfOaSFdF15EvLAaUKA2yDpufc5KbFLBVvwzE5pIFt0dIM2kjYWA==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@3.1.4': + resolution: {integrity: sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==} + + '@iconify/vue@5.0.1': + resolution: {integrity: sha512-aumwwooJlFJ5H5qYWB6ZTAyM0C8hpfcSVLB9/a3qnH1GGvIJ+FEbpEs4s/HfErYe/M5qZeLjwmESR5fFm3lXEw==} + peerDependencies: + vue: '>=3.0.0' + + '@internationalized/date@3.12.3': + resolution: {integrity: sha512-fuLX+3ZKLsxI73y8b01EG/WjHb6gE6weCqlfawPO27kBWGMh9G1yH6Csv1uU7/cac9H2GHmOMt6CjmuQ1aia4Q==} + + '@internationalized/number@3.6.7': + resolution: {integrity: sha512-3ji1fcrT+FPAK86UqEhB/psHixYo6niWPJtt7+qRaYFynt/BaJG8GhAPimtWUpEiVSTq8ZM8L5psMxGquiB/Vg==} + '@ioredis/commands@1.10.0': resolution: {integrity: sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==} @@ -618,6 +695,11 @@ packages: '@kwsites/promise-deferred@1.1.1': resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + '@lucide/vue@1.37.0': + resolution: {integrity: sha512-outqiaDIgg8SUANr8q27cHB0V6vAOEB0CwEDe+fyVjSuCDAscVlplHH+cRld9nNNYQ5KJ6MBRmNMICpq42pXYw==} + peerDependencies: + vue: '>=3.0.1' + '@mapbox/node-pre-gyp@2.0.3': resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==} engines: {node: '>=18'} @@ -705,6 +787,13 @@ packages: '@vitejs/devtools': optional: true + '@nuxt/icon@2.5.1': + resolution: {integrity: sha512-zBP72Po7BS+tXzoeDRA/Y9TTY77OIcNCyzfgXsOmep7zZShTEoe4p1WZBXce/9oJDK3YXmbYC3ILQ7XvqM4/XA==} + + '@nuxt/kit@3.21.11': + resolution: {integrity: sha512-0Xi3tgwN77w43Q8GCPIrvWmF1J7Peehkts44E0uKNIml9lB8WoUn8YxyUjxBv47XtVR86NWoWALAT+/IEMHJEA==} + engines: {node: '>=18.12.0'} + '@nuxt/kit@4.5.2': resolution: {integrity: sha512-l66LU9DcJYjmNwqwAj2I5UGRrUbnG2DOKGChnN70zIGtn0eq/z87gi/FRgha6eMb9/FmB1PFHgtx6PWVml1C2Q==} engines: {node: '>=18.12.0'} @@ -756,6 +845,9 @@ packages: rollup-plugin-visualizer: optional: true + '@nuxtjs/color-mode@4.0.1': + resolution: {integrity: sha512-eiA7hWXi5zNHaYKyJFCGF6i0wFZtuvR7KDXZ6jiSvwxjCpRFwphrw0MOSmNfArTSSsT1wpW+/2H92cejeVfUlg==} + '@nuxtjs/mdc@0.23.1': resolution: {integrity: sha512-H+e/eO/Uj5Apb3YwFQs3X0e6HsIPYEm++/lEDFGuQCvPxUh89idhsZRnYQ5EQgAMge5uTS2hmSYIH4mX8xj+Hw==} @@ -765,30 +857,60 @@ packages: cpu: [arm] os: [android] + '@oxc-parser/binding-android-arm64@0.102.0': + resolution: {integrity: sha512-pD2if3w3cxPvYbsBSTbhxAYGDaG6WVwnqYG0mYRQ142D6SJ6BpNs7YVQrqpRA2AJQCmzaPP5TRp/koFLebagfQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@oxc-parser/binding-android-arm64@0.139.0': resolution: {integrity: sha512-uASQkZV+CUQ6xXvoMzDQyfhd8OMusdv2FyCPfAi5ZDYptesapJlw7erhpGi1Lc+U8QjQV2JUrIh7d/3su2LzmQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] + '@oxc-parser/binding-darwin-arm64@0.102.0': + resolution: {integrity: sha512-RzMN6f6MrjjpQC2Dandyod3iOscofYBpHaTecmoRRbC5sJMwsurkqUMHzoJX9F6IM87kn8m/JcClnoOfx5Sesw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@oxc-parser/binding-darwin-arm64@0.139.0': resolution: {integrity: sha512-vuQOv2WF5pZCkdSPEExul98o853M3MCR24DpWsGrUoPJu5KcnGE34kLXY2yFwBwZwT+eN1x40Tt4q6ZzlEdNUA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] + '@oxc-parser/binding-darwin-x64@0.102.0': + resolution: {integrity: sha512-Sr2/3K6GEcejY+HgWp5HaxRPzW5XHe9IfGKVn9OhLt8fzVLnXbK5/GjXj7JjMCNKI3G3ZPZDG2Dgm6CX3MaHCA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@oxc-parser/binding-darwin-x64@0.139.0': resolution: {integrity: sha512-zxZB8ChS+7XactZhcyxQ292P/DNiiBaPPKYiVUlb3RC0V/hme5bokNubjcmEmbW9uTfmqLTpveAdkbe66H3pGg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] + '@oxc-parser/binding-freebsd-x64@0.102.0': + resolution: {integrity: sha512-s9F2N0KJCGEpuBW6ChpFfR06m2Id9ReaHSl8DCca4HvFNt8SJFPp8fq42n2PZy68rtkremQasM0JDrK2BoBeBQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@oxc-parser/binding-freebsd-x64@0.139.0': resolution: {integrity: sha512-iw2MsoCPBQwdJqywRAGsF1jEAcGoZ+DeG2LVzt5pdUvRHqajsMF46BH0rHiWoWtMwcMSia+oQYga7fHo7u7Bcw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] + '@oxc-parser/binding-linux-arm-gnueabihf@0.102.0': + resolution: {integrity: sha512-zRCIOWzLbqhfY4g8KIZDyYfO2Fl5ltxdQI1v2GlePj66vFWRl8cf4qcBGzxKfsH3wCZHAhmWd1Ht59mnrfH/UQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@oxc-parser/binding-linux-arm-gnueabihf@0.139.0': resolution: {integrity: sha512-SwjD/k3Y5bwGJWOH313VyaDrAuaYg1Pe+4AAXCgUKvSO5IHkj+mZ0oFcOWmB5nTuOM3uwdT+leL8h4OnFlI5hw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -801,6 +923,13 @@ packages: cpu: [arm] os: [linux] + '@oxc-parser/binding-linux-arm64-gnu@0.102.0': + resolution: {integrity: sha512-5n5RbHgfjulRhKB0pW5p0X/NkQeOpI4uI9WHgIZbORUDATGFC8yeyPA6xYGEs+S3MyEAFxl4v544UEIWwqAgsA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-arm64-gnu@0.139.0': resolution: {integrity: sha512-SrlL02KeImKlvx/9rCeopOLH7qKI3rqKKEguK6KBwVwEGLhV/A47dW4DNigf6/LFhrwoovaiayEQryjYAI86dQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -808,6 +937,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-arm64-musl@0.102.0': + resolution: {integrity: sha512-/XWcmglH/VJ4yKAGTLRgPKSSikh3xciNxkwGiURt8dS30b+3pwc4ZZmudMu0tQ3mjSu0o7V9APZLMpbHK8Bp5w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-linux-arm64-musl@0.139.0': resolution: {integrity: sha512-u9e884ChAVRmIZ1jr/m46S96FoDQnruFjISLi4Y0i6Wu/JUUmIiw7+umLyXILJsPfUuqnN5BJLe23t07+Y6+IA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -822,6 +958,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-riscv64-gnu@0.102.0': + resolution: {integrity: sha512-2jtIq4nswvy6xdqv1ndWyvVlaRpS0yqomLCvvHdCFx3pFXo5Aoq4RZ39kgvFWrbAtpeYSYeAGFnwgnqjx9ftdw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-riscv64-gnu@0.139.0': resolution: {integrity: sha512-RyUbr7hzPK84YDWKs77PRYk9VBwWbsbuYsQzQWiSmLnARXTg2zntLPGfCH/1wpfUYdmGkp/6SsqTXSsYdw9Jgw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -836,6 +979,13 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-linux-s390x-gnu@0.102.0': + resolution: {integrity: sha512-Yp6HX/574mvYryiqj0jNvNTJqo4pdAsNP2LPBTxlDQ1cU3lPd7DUA4MQZadaeLI8+AGB2Pn50mPuPyEwFIxeFg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-s390x-gnu@0.139.0': resolution: {integrity: sha512-iuGrxysV4rGUymdKpn7bgZQ6Vix8Bi/6D/rp71HYIzphq6NKrsBhsGOYsSZte+uBFL43tXh7Xr7TM72sGliJNA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -843,6 +993,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-x64-gnu@0.102.0': + resolution: {integrity: sha512-R4b0xZpDRhoNB2XZy0kLTSYm0ZmWeKjTii9fcv1Mk3/SIGPrrglwt4U6zEtwK54Dfi4Bve5JnQYduigR/gyDzw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-x64-gnu@0.139.0': resolution: {integrity: sha512-NxJdZZyaa2JLLvNfH/iJQXfCNfKcPMylwY4ObMpBVmW4Nq+RyUpVVQXrMMelcQ6rwx3nuhF1Iga8n+eoAKGCIA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -850,6 +1007,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-x64-musl@0.102.0': + resolution: {integrity: sha512-xM5A+03Ti3jvWYZoqaBRS3lusvnvIQjA46Fc9aBE/MHgvKgHSkrGEluLWg/33QEwBwxupkH25Pxc1yu97oZCtg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-linux-x64-musl@0.139.0': resolution: {integrity: sha512-ePxBvvtzISmSsJ0RIj8FNikSCn58i1jtccj7XR4U9Li4iSzhkFyYlnJ51cQTUwkairz8WMTD4SpKoot8RyTnQA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -857,17 +1021,34 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-openharmony-arm64@0.102.0': + resolution: {integrity: sha512-AieLlsliblyaTFq7Iw9Nc618tgwV02JT4fQ6VIUd/3ZzbluHIHfPjIXa6Sds+04krw5TvCS8lsegtDYAyzcyhg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@oxc-parser/binding-openharmony-arm64@0.139.0': resolution: {integrity: sha512-b/c2+mPXMOxG5x16n8yf9cjor/ntQQScmYnSmLEWIWJ4rfXd5dokMxx0kliSLA+YAGq6DD3K9BWi+aFXHiiV1w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] + '@oxc-parser/binding-wasm32-wasi@0.102.0': + resolution: {integrity: sha512-w6HRyArs1PBb9rDsQSHlooe31buUlUI2iY8sBzp62jZ1tmvaJo9EIVTQlRNDkwJmk9DF9uEyIJ82EkZcCZTs9A==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + '@oxc-parser/binding-wasm32-wasi@0.139.0': resolution: {integrity: sha512-rNU0pO+/CVPC2qZ+xtX5R2cOje9Q75q3UkfgwUCPlplqxMv6Iffd5tMPGVMCLGnPINxPlmi0WPsW94HltbYvfQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] + '@oxc-parser/binding-win32-arm64-msvc@0.102.0': + resolution: {integrity: sha512-pqP5UuLiiFONQxqGiUFMdsfybaK1EOK4AXiPlvOvacLaatSEPObZGpyCkAcj9aZcvvNwYdeY9cxGM9IT3togaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@oxc-parser/binding-win32-arm64-msvc@0.139.0': resolution: {integrity: sha512-JPEmfncZfqAFiGsAN6UZSMIBqnG8wn8buywRacFOWjP+9dZwcs03SsBp4tmyjM/4l/VoH/IuThrW1Jof3OyQUw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -880,12 +1061,21 @@ packages: cpu: [ia32] os: [win32] + '@oxc-parser/binding-win32-x64-msvc@0.102.0': + resolution: {integrity: sha512-ntMcL35wuLR1A145rLSmm7m7j8JBZGkROoB9Du0KFIFcfi/w1qk75BdCeiTl3HAKrreAnuhW3QOGs6mJhntowA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@oxc-parser/binding-win32-x64-msvc@0.139.0': resolution: {integrity: sha512-bI3/44urQjW/D495JPXe+c9d+4Q+ONi3DvDNnzwRZYTWHZ3hAlFdmirYK4mzhTfCZiAly02EbMYir7QGU+9O2Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] + '@oxc-project/types@0.102.0': + resolution: {integrity: sha512-8Skrw405g+/UJPKWJ1twIk3BIH2nXdiVlVNtYT23AXVwpsd79es4K+KYt06Fbnkc5BaTvk/COT2JuCLYdwnCdA==} + '@oxc-project/types@0.139.0': resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} @@ -1544,6 +1734,111 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@swc/helpers@0.5.23': + resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} + + '@tailwindcss/node@4.3.3': + resolution: {integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==} + + '@tailwindcss/oxide-android-arm64@4.3.3': + resolution: {integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.3.3': + resolution: {integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.3.3': + resolution: {integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.3.3': + resolution: {integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + resolution: {integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + resolution: {integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + resolution: {integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + resolution: {integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + resolution: {integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + resolution: {integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + resolution: {integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + resolution: {integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.3.3': + resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} + engines: {node: '>= 20'} + + '@tailwindcss/vite@4.3.3': + resolution: {integrity: sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 || ^8 + + '@tanstack/virtual-core@3.17.8': + resolution: {integrity: sha512-BfEvehNpOT75r5Ksc5xW6NZuXujTfb7nlSEyVu4XHG3gdxNg1KqXruWbDewXOUaUYIo4oRbSfkjIajz4MAT8tA==} + + '@tanstack/vue-virtual@3.13.36': + resolution: {integrity: sha512-gKpExv4RbB9luVG+SucTXoqPZv/gzu/Yvz6BNO+8kpNxJ2x+I/ulryzl5W9BRciahZGp5Tls3Dp5XP1ztVGbMw==} + peerDependencies: + vue: ^2.7.0 || ^3.0.0 + '@tybys/wasm-util@0.10.3': resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} @@ -1581,6 +1876,9 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + '@ungap/structured-clone@1.4.0': resolution: {integrity: sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==} @@ -1728,6 +2026,19 @@ packages: '@vue/shared@3.5.42': resolution: {integrity: sha512-2rPxex1jQf4jvl9MOHl6YaXCPcrNqz/FstMOEh3QWY+/OME9nQTvl9WYeCwhW7AFjaR0SnngZGlp/wkR6rkI6g==} + '@vueuse/core@14.4.0': + resolution: {integrity: sha512-X4WHz1HlCzCBoYXesUkifzzWBAcZgXG8Fi5iNPQg/epdzOB3gu8Fawj3hvuwYR1nGcXGnvxwYYcUC/71++svtQ==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/metadata@14.4.0': + resolution: {integrity: sha512-swx/255R6JyHZFJhx845iz5CRWDZdCfvkZOpACWc5+c5WHcG24mv8gUT1WIdFQaHt6dq79rvILd9QnCWiyVm9g==} + + '@vueuse/shared@14.4.0': + resolution: {integrity: sha512-JRgY90Sz8DDtPMsaDflvPMp9xYk69JZAmbuDvAquUVXKr2gEjqtzGNTTthLfckH0BzBqvnu31gb4a8TGLRe79g==} + peerDependencies: + vue: ^3.5.0 + '@webcontainer/env@1.1.1': resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==} @@ -1798,6 +2109,10 @@ packages: resolution: {integrity: sha512-DhBpBfXL4SS2uC0N922MMajKR3CdrTG0u2or1PNYgXMsrSzViJrbtvT0nCLlLGUI0plam/ZZCs7aAauHtW9thw==} engines: {node: '>=22'} + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + ast-kit@2.2.0: resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} engines: {node: '>=20.19.0'} @@ -1998,6 +2313,9 @@ packages: citty@0.2.2: resolution: {integrity: sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==} + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + clean-git-ref@2.0.1: resolution: {integrity: sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==} @@ -2005,6 +2323,10 @@ packages: resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} engines: {node: '>=20'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + cluster-key-slot@1.1.1: resolution: {integrity: sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==} engines: {node: '>=0.10.0'} @@ -2327,6 +2649,10 @@ packages: resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} engines: {node: '>=10.0.0'} + enhanced-resolve@5.24.5: + resolution: {integrity: sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==} + engines: {node: '>=10.13.0'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -2712,6 +3038,9 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + impound@1.2.0: resolution: {integrity: sha512-hbFh2WURN+XQ364SbblzubhEEj/B3qZCe80l/EHXPWM6/kZP2mvOllxwRBBWNxe4gLbqXZL0fxOZwoDCSlJZQw==} @@ -2903,36 +3232,73 @@ packages: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + lightningcss-android-arm64@1.33.0: resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + lightningcss-darwin-arm64@1.33.0: resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + lightningcss-darwin-x64@1.33.0: resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + lightningcss-freebsd-x64@1.33.0: resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + lightningcss-linux-arm-gnueabihf@1.33.0: resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + lightningcss-linux-arm64-gnu@1.33.0: resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} engines: {node: '>= 12.0.0'} @@ -2940,6 +3306,13 @@ packages: os: [linux] libc: [glibc] + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + lightningcss-linux-arm64-musl@1.33.0: resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} engines: {node: '>= 12.0.0'} @@ -2947,6 +3320,13 @@ packages: os: [linux] libc: [musl] + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + lightningcss-linux-x64-gnu@1.33.0: resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} engines: {node: '>= 12.0.0'} @@ -2954,6 +3334,13 @@ packages: os: [linux] libc: [glibc] + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + lightningcss-linux-x64-musl@1.33.0: resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} engines: {node: '>= 12.0.0'} @@ -2961,18 +3348,34 @@ packages: os: [linux] libc: [musl] + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + lightningcss-win32-arm64-msvc@1.33.0: resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + lightningcss-win32-x64-msvc@1.33.0: resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + lightningcss@1.33.0: resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} engines: {node: '>= 12.0.0'} @@ -3389,6 +3792,10 @@ packages: resolution: {integrity: sha512-RWqF+pBSkqecEvCKOn8QYhaNdRMJDZRIrlS/7rTDdLHaPcfXGCZ/h8zb413NfvdeAV0MR7T1yJcA34/q+CSm1Q==} engines: {node: '>=20'} + oxc-parser@0.102.0: + resolution: {integrity: sha512-xMiyHgr2FZsphQ12ZCsXRvSYzmKXCm1ejmyG4GDZIiKOmhyt5iKtWq0klOfFsEQ6jcgbwrUdwcCVYzr1F+h5og==} + engines: {node: ^20.19.0 || >=22.12.0} + oxc-parser@0.139.0: resolution: {integrity: sha512-cf1TKZN+zc0lwqigeyXKzKVk5+vNRe99Or2+wVJsXLdlhJgC+gsIniYDfj/ZEBzCJ8Xm21ZG6YtMbR262CcS2w==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3798,6 +4205,11 @@ packages: rehype-sort-attributes@5.0.1: resolution: {integrity: sha512-Bxo+AKUIELcnnAZwJDt5zUDDRpt4uzhfz9d0PVGhcxYWsbFj5Cv35xuWxu5r1LeYNFNhgGqsr9Q2QiIOM/Qctg==} + reka-ui@2.10.4: + resolution: {integrity: sha512-kbS5GAbkHkYj0EVKAg5ZPEPndhBjeUFSa1Aq5m5ftQwyHnB1v5tw8X6fcwfKH/ry3StPXblMWM1DW82MVS71cw==} + peerDependencies: + vue: '>= 3.4.0' + remark-emoji@5.0.2: resolution: {integrity: sha512-IyIqGELcyK5AVdLFafoiNww+Eaw/F+rGrNSXoKucjo95uL267zrddgxGM83GN1wFIb68pyDuAsY3m5t2Cav1pQ==} engines: {node: '>=18'} @@ -3941,6 +4353,9 @@ packages: engines: {node: '>= 0.10'} hasBin: true + shadcn-nuxt@2.8.2: + resolution: {integrity: sha512-MjHCs7tAO/xJDk80JUeHe2QtkOAN3a/qEK5zX4UTrZY0q1/pFglBdf88OUC+w0SNZJBIeCMjdth57ucK74hM5g==} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4114,6 +4529,16 @@ packages: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} + tailwind-merge@3.6.0: + resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==} + + tailwindcss@4.3.3: + resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} + + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + tar-stream@3.2.1: resolution: {integrity: sha512-nqsEO8zLZJvrOMdEwkA0QdCLFbetHMn95Zqu4fKwX+hkaTWJPZZOrxx/PwtxoK0MMGQmBQNRW3CPs8IFYQz4cQ==} @@ -4186,6 +4611,9 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tw-animate-css@1.4.0: + resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} + type-fest@5.8.0: resolution: {integrity: sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==} engines: {node: '>=20'} @@ -4564,6 +4992,17 @@ packages: vue-component-type-helpers@3.3.11: resolution: {integrity: sha512-LwcxzeliO9fkQcpJG0PoX8X5kmAhKmH9wkpDLxNabwzkQ9Zeib2YVHwFV4pcWmMLfXVfjr/dSV+DaJ3cIPgSNA==} + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue-devtools-stub@0.1.0: resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==} @@ -4707,6 +5146,11 @@ packages: snapshots: + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.8.0 + tinyexec: 1.3.0 + '@antfu/ni@30.5.0': dependencies: fzf: 0.5.2 @@ -5145,8 +5589,57 @@ snapshots: '@esbuild/win32-x64@0.28.2': optional: true + '@floating-ui/core@1.8.0': + dependencies: + '@floating-ui/utils': 0.2.12 + + '@floating-ui/dom@1.8.0': + dependencies: + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 + + '@floating-ui/utils@0.2.12': {} + + '@floating-ui/vue@1.1.11(vue@3.5.42(typescript@6.0.3))': + dependencies: + '@floating-ui/dom': 1.8.0 + '@floating-ui/utils': 0.2.12 + vue-demi: 0.14.10(vue@3.5.42(typescript@6.0.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + '@henrygd/queue@1.2.0': {} + '@iconify-json/lucide@1.2.127': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/collections@1.0.730': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/types@2.0.0': {} + + '@iconify/utils@3.1.4': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@iconify/types': 2.0.0 + import-meta-resolve: 4.2.0 + + '@iconify/vue@5.0.1(vue@3.5.42(typescript@6.0.3))': + dependencies: + '@iconify/types': 2.0.0 + vue: 3.5.42(typescript@6.0.3) + + '@internationalized/date@3.12.3': + dependencies: + '@swc/helpers': 0.5.23 + + '@internationalized/number@3.6.7': + dependencies: + '@swc/helpers': 0.5.23 + '@ioredis/commands@1.10.0': {} '@isaacs/cliui@8.0.2': @@ -5194,6 +5687,10 @@ snapshots: '@kwsites/promise-deferred@1.1.1': {} + '@lucide/vue@1.37.0(vue@3.5.42(typescript@6.0.3))': + dependencies: + vue: 3.5.42(typescript@6.0.3) + '@mapbox/node-pre-gyp@2.0.3(supports-color@10.2.2)': dependencies: consola: 3.4.2 @@ -5338,6 +5835,18 @@ snapshots: '@nuxt/devalue@2.0.2': {} + '@nuxt/devtools-kit@3.4.2(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@2.3.11)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))': + dependencies: + '@nuxt/kit': 4.5.2(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@2.3.11) + execa: 8.0.1 + vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) + transitivePeerDependencies: + - magic-string + - magicast + - oxc-parser + - rolldown + - unplugin + '@nuxt/devtools-kit@3.4.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))': dependencies: '@nuxt/kit': 4.5.2(magic-string@1.2.3)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) @@ -5491,6 +6000,57 @@ snapshots: - utf-8-validate - vue + '@nuxt/icon@2.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@2.3.11)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3))': + dependencies: + '@iconify/collections': 1.0.730 + '@iconify/types': 2.0.0 + '@iconify/utils': 3.1.4 + '@iconify/vue': 5.0.1(vue@3.5.42(typescript@6.0.3)) + '@nuxt/devtools-kit': 3.4.2(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@2.3.11)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + '@nuxt/kit': 4.5.2(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@2.3.11) + consola: 3.4.2 + local-pkg: 1.2.1 + mlly: 1.8.2 + ohash: 2.0.12 + picomatch: 4.0.7 + std-env: 4.2.0 + tinyglobby: 0.2.17 + ufo: 1.6.4 + transitivePeerDependencies: + - magic-string + - magicast + - oxc-parser + - rolldown + - unplugin + - vite + - vue + + '@nuxt/kit@3.21.11(magicast@0.5.4)': + dependencies: + c12: 3.3.4(magicast@0.5.4) + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + errx: 0.1.2 + exsolve: 1.1.1 + ignore: 7.0.7 + jiti: 2.7.0 + klona: 2.0.6 + knitwork: 1.3.0 + mlly: 1.8.2 + ohash: 2.0.12 + pathe: 2.0.3 + pkg-types: 2.3.1 + rc9: 3.0.1 + scule: 1.3.0 + semver: 7.8.5 + tinyglobby: 0.2.17 + ufo: 1.6.4 + unctx: 2.5.0 + untyped: 2.0.0 + transitivePeerDependencies: + - magicast + '@nuxt/kit@4.5.2(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@2.3.11)': dependencies: c12: 3.3.4(magicast@0.5.4) @@ -5909,6 +6469,20 @@ snapshots: - webpack - yaml + '@nuxtjs/color-mode@4.0.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@2.3.11)': + dependencies: + '@nuxt/kit': 4.5.2(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@2.3.11) + exsolve: 1.1.1 + pathe: 2.0.3 + pkg-types: 2.3.1 + semver: 7.8.5 + transitivePeerDependencies: + - magic-string + - magicast + - oxc-parser + - rolldown + - unplugin + '@nuxtjs/mdc@0.23.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))': dependencies: '@nuxt/kit': 4.5.2(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.139.0)(rolldown@1.2.6)(unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))) @@ -5966,51 +6540,95 @@ snapshots: '@oxc-parser/binding-android-arm-eabi@0.139.0': optional: true + '@oxc-parser/binding-android-arm64@0.102.0': + optional: true + '@oxc-parser/binding-android-arm64@0.139.0': optional: true + '@oxc-parser/binding-darwin-arm64@0.102.0': + optional: true + '@oxc-parser/binding-darwin-arm64@0.139.0': optional: true + '@oxc-parser/binding-darwin-x64@0.102.0': + optional: true + '@oxc-parser/binding-darwin-x64@0.139.0': optional: true + '@oxc-parser/binding-freebsd-x64@0.102.0': + optional: true + '@oxc-parser/binding-freebsd-x64@0.139.0': optional: true + '@oxc-parser/binding-linux-arm-gnueabihf@0.102.0': + optional: true + '@oxc-parser/binding-linux-arm-gnueabihf@0.139.0': optional: true '@oxc-parser/binding-linux-arm-musleabihf@0.139.0': optional: true + '@oxc-parser/binding-linux-arm64-gnu@0.102.0': + optional: true + '@oxc-parser/binding-linux-arm64-gnu@0.139.0': optional: true + '@oxc-parser/binding-linux-arm64-musl@0.102.0': + optional: true + '@oxc-parser/binding-linux-arm64-musl@0.139.0': optional: true '@oxc-parser/binding-linux-ppc64-gnu@0.139.0': optional: true + '@oxc-parser/binding-linux-riscv64-gnu@0.102.0': + optional: true + '@oxc-parser/binding-linux-riscv64-gnu@0.139.0': optional: true '@oxc-parser/binding-linux-riscv64-musl@0.139.0': optional: true + '@oxc-parser/binding-linux-s390x-gnu@0.102.0': + optional: true + '@oxc-parser/binding-linux-s390x-gnu@0.139.0': optional: true + '@oxc-parser/binding-linux-x64-gnu@0.102.0': + optional: true + '@oxc-parser/binding-linux-x64-gnu@0.139.0': optional: true + '@oxc-parser/binding-linux-x64-musl@0.102.0': + optional: true + '@oxc-parser/binding-linux-x64-musl@0.139.0': optional: true + '@oxc-parser/binding-openharmony-arm64@0.102.0': + optional: true + '@oxc-parser/binding-openharmony-arm64@0.139.0': optional: true + '@oxc-parser/binding-wasm32-wasi@0.102.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + '@oxc-parser/binding-wasm32-wasi@0.139.0': dependencies: '@emnapi/core': 1.11.1 @@ -6018,15 +6636,23 @@ snapshots: '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true + '@oxc-parser/binding-win32-arm64-msvc@0.102.0': + optional: true + '@oxc-parser/binding-win32-arm64-msvc@0.139.0': optional: true '@oxc-parser/binding-win32-ia32-msvc@0.139.0': optional: true + '@oxc-parser/binding-win32-x64-msvc@0.102.0': + optional: true + '@oxc-parser/binding-win32-x64-msvc@0.139.0': optional: true + '@oxc-project/types@0.102.0': {} + '@oxc-project/types@0.139.0': {} '@oxc-project/types@0.147.0': {} @@ -6427,6 +7053,85 @@ snapshots: '@standard-schema/spec@1.1.0': {} + '@swc/helpers@0.5.23': + dependencies: + tslib: 2.8.1 + + '@tailwindcss/node@4.3.3': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.24.5 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.3 + + '@tailwindcss/oxide-android-arm64@4.3.3': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.3.3': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.3.3': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + optional: true + + '@tailwindcss/oxide@4.3.3': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-x64': 4.3.3 + '@tailwindcss/oxide-freebsd-x64': 4.3.3 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.3 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.3 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-x64-musl': 4.3.3 + '@tailwindcss/oxide-wasm32-wasi': 4.3.3 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 + + '@tailwindcss/vite@4.3.3(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))': + dependencies: + '@tailwindcss/node': 4.3.3 + '@tailwindcss/oxide': 4.3.3 + tailwindcss: 4.3.3 + vite: 8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) + + '@tanstack/virtual-core@3.17.8': {} + + '@tanstack/vue-virtual@3.13.36(vue@3.5.42(typescript@6.0.3))': + dependencies: + '@tanstack/virtual-core': 3.17.8 + vue: 3.5.42(typescript@6.0.3) + '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 @@ -6464,6 +7169,8 @@ snapshots: '@types/unist@3.0.3': {} + '@types/web-bluetooth@0.0.21': {} + '@ungap/structured-clone@1.4.0': {} '@unhead/bundler@3.4.0(@oxc-project/types@0.147.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.139.0)(rolldown@1.2.6)(rollup@4.63.1)(unhead@3.4.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))': @@ -6682,6 +7389,19 @@ snapshots: '@vue/shared@3.5.42': {} + '@vueuse/core@14.4.0(vue@3.5.42(typescript@6.0.3))': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 14.4.0 + '@vueuse/shared': 14.4.0(vue@3.5.42(typescript@6.0.3)) + vue: 3.5.42(typescript@6.0.3) + + '@vueuse/metadata@14.4.0': {} + + '@vueuse/shared@14.4.0(vue@3.5.42(typescript@6.0.3))': + dependencies: + vue: 3.5.42(typescript@6.0.3) + '@webcontainer/env@1.1.1': {} abbrev@3.0.1: {} @@ -6752,6 +7472,10 @@ snapshots: argue-cli@3.1.0: {} + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + ast-kit@2.2.0: dependencies: '@babel/parser': 7.29.8 @@ -6935,6 +7659,10 @@ snapshots: citty@0.2.2: {} + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + clean-git-ref@2.0.1: {} cliui@9.0.1: @@ -6943,6 +7671,8 @@ snapshots: strip-ansi: 7.2.0 wrap-ansi: 9.0.2 + clsx@2.1.1: {} + cluster-key-slot@1.1.1: {} color-convert@2.0.1: @@ -7231,6 +7961,11 @@ snapshots: engine.io-parser@5.2.3: {} + enhanced-resolve@5.24.5: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + entities@4.5.0: {} entities@6.0.1: {} @@ -7702,6 +8437,8 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-meta-resolve@4.2.0: {} + impound@1.2.0(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -7878,39 +8615,88 @@ snapshots: dependencies: readable-stream: 2.3.8 + lightningcss-android-arm64@1.32.0: + optional: true + lightningcss-android-arm64@1.33.0: optional: true + lightningcss-darwin-arm64@1.32.0: + optional: true + lightningcss-darwin-arm64@1.33.0: optional: true + lightningcss-darwin-x64@1.32.0: + optional: true + lightningcss-darwin-x64@1.33.0: optional: true + lightningcss-freebsd-x64@1.32.0: + optional: true + lightningcss-freebsd-x64@1.33.0: optional: true + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + lightningcss-linux-arm-gnueabihf@1.33.0: optional: true + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + lightningcss-linux-arm64-gnu@1.33.0: optional: true + lightningcss-linux-arm64-musl@1.32.0: + optional: true + lightningcss-linux-arm64-musl@1.33.0: optional: true + lightningcss-linux-x64-gnu@1.32.0: + optional: true + lightningcss-linux-x64-gnu@1.33.0: optional: true + lightningcss-linux-x64-musl@1.32.0: + optional: true + lightningcss-linux-x64-musl@1.33.0: optional: true + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + lightningcss-win32-arm64-msvc@1.33.0: optional: true + lightningcss-win32-x64-msvc@1.32.0: + optional: true + lightningcss-win32-x64-msvc@1.33.0: optional: true + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + lightningcss@1.33.0: dependencies: detect-libc: 2.1.2 @@ -8892,6 +9678,29 @@ snapshots: powershell-utils: 0.2.1 wsl-utils: 1.0.0 + oxc-parser@0.102.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1): + dependencies: + '@oxc-project/types': 0.102.0 + optionalDependencies: + '@oxc-parser/binding-android-arm64': 0.102.0 + '@oxc-parser/binding-darwin-arm64': 0.102.0 + '@oxc-parser/binding-darwin-x64': 0.102.0 + '@oxc-parser/binding-freebsd-x64': 0.102.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.102.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.102.0 + '@oxc-parser/binding-linux-arm64-musl': 0.102.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.102.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.102.0 + '@oxc-parser/binding-linux-x64-gnu': 0.102.0 + '@oxc-parser/binding-linux-x64-musl': 0.102.0 + '@oxc-parser/binding-openharmony-arm64': 0.102.0 + '@oxc-parser/binding-wasm32-wasi': 0.102.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@oxc-parser/binding-win32-arm64-msvc': 0.102.0 + '@oxc-parser/binding-win32-x64-msvc': 0.102.0 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + oxc-parser@0.139.0: dependencies: '@oxc-project/types': 0.139.0 @@ -9349,6 +10158,22 @@ snapshots: '@types/hast': 3.0.5 unist-util-visit: 5.1.0 + reka-ui@2.10.4(vue@3.5.42(typescript@6.0.3)): + dependencies: + '@floating-ui/dom': 1.8.0 + '@floating-ui/vue': 1.1.11(vue@3.5.42(typescript@6.0.3)) + '@internationalized/date': 3.12.3 + '@internationalized/number': 3.6.7 + '@tanstack/vue-virtual': 3.13.36(vue@3.5.42(typescript@6.0.3)) + '@vueuse/core': 14.4.0(vue@3.5.42(typescript@6.0.3)) + '@vueuse/shared': 14.4.0(vue@3.5.42(typescript@6.0.3)) + aria-hidden: 1.2.6 + defu: 6.1.7 + ohash: 2.0.12 + vue: 3.5.42(typescript@6.0.3) + transitivePeerDependencies: + - '@vue/composition-api' + remark-emoji@5.0.2: dependencies: '@types/mdast': 4.0.4 @@ -9575,6 +10400,15 @@ snapshots: safe-buffer: 5.2.1 to-buffer: 1.2.2 + shadcn-nuxt@2.8.2(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(magicast@0.5.4): + dependencies: + '@nuxt/kit': 3.21.11(magicast@0.5.4) + oxc-parser: 0.102.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + - magicast + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -9760,6 +10594,12 @@ snapshots: tagged-tag@1.0.0: {} + tailwind-merge@3.6.0: {} + + tailwindcss@4.3.3: {} + + tapable@2.3.3: {} + tar-stream@3.2.1: dependencies: b4a: 1.8.1 @@ -9851,8 +10691,9 @@ snapshots: trough@2.2.0: {} - tslib@2.8.1: - optional: true + tslib@2.8.1: {} + + tw-animate-css@1.4.0: {} type-fest@5.8.0: dependencies: @@ -10218,6 +11059,10 @@ snapshots: vue-component-type-helpers@3.3.11: {} + vue-demi@0.14.10(vue@3.5.42(typescript@6.0.3)): + dependencies: + vue: 3.5.42(typescript@6.0.3) + vue-devtools-stub@0.1.0: {} vue-router@5.3.0(@vue/compiler-sfc@3.5.42)(esbuild@0.28.2)(rolldown@1.2.6)(rollup@4.63.1)(vite@8.2.2(@types/node@26.4.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3)): diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c8896c98..e18b7b78 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -50,3 +50,6 @@ overrides: allowBuilds: better-sqlite3: false esbuild: true + # reka-ui pulls vue-demi, whose postinstall picks the Vue 2/3 shim. gildstone + # allows it for the same reason. + vue-demi: true diff --git a/tsconfig.json b/tsconfig.json index 1da24d68..b0ddb008 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,7 +11,10 @@ "erasableSyntaxOnly": true, "verbatimModuleSyntax": true, "isolatedModules": true, - "skipLibCheck": true + "skipLibCheck": true, + "paths": { + "@duxt/*": ["./app/*"] + } }, "include": [ "scripts/**/*.ts", From 30c7fe56ecbe3557f0040d94366db58a76e3cf51 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 20:32:38 +0200 Subject: [PATCH 008/158] =?UTF-8?q?feat:=20add=20the=20documentation=20she?= =?UTF-8?q?ll=20=E2=80=94=20header,=20navigation,=20page=20and=20TOC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The layout a docs site needs before anything else: a sticky header with the theme toggle, a sidebar built from queryCollectionNavigation, the page itself, and a table of contents from the page's own toc links. The catch-all page now 404s on a missing path instead of rendering an empty article, and sets title and description from frontmatter. Navigation renders one level of nesting. Deeper trees are a sign the docs need splitting rather than the navigation needing more levels — revisit if a real project disagrees. --- app/app.vue | 4 ++- app/components/DuxtHeader.vue | 34 ++++++++++++++++++++++ app/components/DuxtNavigation.vue | 48 +++++++++++++++++++++++++++++++ app/components/DuxtToc.vue | 36 +++++++++++++++++++++++ app/layouts/default.vue | 21 ++++++++++++++ app/pages/[...slug].vue | 41 ++++++++++++++++++++++---- 6 files changed, 177 insertions(+), 7 deletions(-) create mode 100644 app/components/DuxtHeader.vue create mode 100644 app/components/DuxtNavigation.vue create mode 100644 app/components/DuxtToc.vue create mode 100644 app/layouts/default.vue diff --git a/app/app.vue b/app/app.vue index 8f62b8bf..f8eacfa7 100644 --- a/app/app.vue +++ b/app/app.vue @@ -1,3 +1,5 @@ diff --git a/app/components/DuxtHeader.vue b/app/components/DuxtHeader.vue new file mode 100644 index 00000000..81b6bf5b --- /dev/null +++ b/app/components/DuxtHeader.vue @@ -0,0 +1,34 @@ + + + diff --git a/app/components/DuxtNavigation.vue b/app/components/DuxtNavigation.vue new file mode 100644 index 00000000..853d1581 --- /dev/null +++ b/app/components/DuxtNavigation.vue @@ -0,0 +1,48 @@ + + + diff --git a/app/components/DuxtToc.vue b/app/components/DuxtToc.vue new file mode 100644 index 00000000..9e3fceec --- /dev/null +++ b/app/components/DuxtToc.vue @@ -0,0 +1,36 @@ + + + diff --git a/app/layouts/default.vue b/app/layouts/default.vue new file mode 100644 index 00000000..57fa480f --- /dev/null +++ b/app/layouts/default.vue @@ -0,0 +1,21 @@ + + + diff --git a/app/pages/[...slug].vue b/app/pages/[...slug].vue index 5cd7cce4..44052871 100644 --- a/app/pages/[...slug].vue +++ b/app/pages/[...slug].vue @@ -1,15 +1,44 @@ From 319267d0932363fe83a03cffa86241cfea98cd2e Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 20:32:45 +0200 Subject: [PATCH 009/158] feat: ship callout and steps components for Markdown Content already ships MDC, so a page calls a Vue component with `::callout{type="tip"}` and needs no MDX and no extra module. What was missing is components worth calling: a callout in four intents and a stepped list. The docs page documents the syntax by using it, so a broken MDC setup breaks a visible page rather than passing silently. --- app/components/content/Callout.vue | 56 ++++++++++++++++++++++++++++++ app/components/content/Steps.vue | 9 +++++ docs/structure.md | 13 +++++++ 3 files changed, 78 insertions(+) create mode 100644 app/components/content/Callout.vue create mode 100644 app/components/content/Steps.vue diff --git a/app/components/content/Callout.vue b/app/components/content/Callout.vue new file mode 100644 index 00000000..7b5d38d1 --- /dev/null +++ b/app/components/content/Callout.vue @@ -0,0 +1,56 @@ + + + diff --git a/app/components/content/Steps.vue b/app/components/content/Steps.vue new file mode 100644 index 00000000..05feff53 --- /dev/null +++ b/app/components/content/Steps.vue @@ -0,0 +1,9 @@ + diff --git a/docs/structure.md b/docs/structure.md index 3817b5bc..b9cab1bf 100644 --- a/docs/structure.md +++ b/docs/structure.md @@ -24,3 +24,16 @@ repository itself uses: `docs/` here, `www/` beside it. In both cases the layer resolves `docs/` against the **repository** root, not against the directory the site happens to run in. + +## Components in Markdown + +Content ships MDC, so a Markdown page can call a Vue component with block +syntax — no MDX, no extra module: + +::callout{type="tip" title="This is a callout"} +It is a Vue component, called from Markdown, rendering Markdown inside itself. +:: + +The block above is written as `::callout{type="tip" title="…"}`, the body, then +a closing `::`. Any component in `components/content/` is available this way, +including your own. From fd72d4a3fdc59706af332d02756264d04576d694 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 20:33:14 +0200 Subject: [PATCH 010/158] docs: record the theme setup and the layer path traps Three separate paths in this repo resolved against the consumer instead of the layer before being fixed. Write the rule down once, so the fourth is expected rather than debugged. --- AGENTS.md | 6 +++++- CLAUDE.md | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index b54944d8..88c22445 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -42,12 +42,16 @@ What that leaves as candidate value: the **ergonomics** (a compact `sources` lis **Decided so far:** -- **The theme is shadcn-vue, wired through `shadcn-nuxt`** — a clean base with owned components, not Docus or Nuxt UI. No UI-Pro dependency, and the components are copied into the repo rather than imported, so overriding them is editing them. +- **The theme is shadcn-vue, wired through `shadcn-nuxt`** — a clean Tailwind 4 base with owned components in `app/components/ui/`, not Docus or Nuxt UI. Add one with `pnpm dlx shadcn-vue@latest add `; `components.json` already points the CLI at the layer's own alias. The palette is the neutral shadcn set as CSS variables in `app/assets/css/duxt.css`, `dark` class toggled by `@nuxtjs/color-mode`; a consumer redefines a token in its own stylesheet rather than forking the file. +- **Markdown components are MDC, not MDX.** Content ships MDC, so `::callout{type="tip"}` works with no extra module. Components live in `app/components/content/`. - **Numbered section prefixes are a non-issue.** Content strips them itself: `1.guides/` renders at `/guides`, `99.adr/` at `/adr`. Verified in `www/`. Reordering does not move a URL; only renaming the name part does. - **No SQLite driver is installed.** Content's default is `better-sqlite3`, a native addon needing a node-gyp toolchain. `content.experimental.nativeSqlite` uses Node 24's built-in `node:sqlite` instead, which needs no package at all — `www/` builds and renders with neither `better-sqlite3` nor `@libsql/client` present. It is flagged experimental in Content; if that changes, `@libsql/client` is the prebuilt fallback, not `better-sqlite3`. **Repo shape — the root IS the layer.** `nuxt.config.ts`, `content.config.ts` and `app/` sit at the repo root, and `package.json` points at them with `main: "./nuxt.config.ts"` plus a `files` allowlist, so `extends: ['@kirchdev/duxt']` resolves. `www/` is the consuming site beside it — the only workspace package, and the development target, exactly as `www/` is in `ZTL-UwU/shadcn-docs-nuxt`. `nuxt` is a peerDependency of the layer and a real dependency only of `www/`. +> [!IMPORTANT] +> **Nothing layer-relative resolves the way it reads.** Three places have hit this already, and a fourth will: the Content collection `cwd`, the `css` entry and `componentDir` in `nuxt.config.ts` (both go through the `layer()` helper resolving against `import.meta.url`), and the `@` alias — which belongs to whoever extends the layer, so the layer's own imports use `@duxt` instead. Assume any path written here is read from the consumer's directory until proven otherwise. + > [!IMPORTANT] > **A layer's collections resolve against the LAYER, not the consumer.** Content sets `collection.__rootDir = curr.cwd` per layer, so a relative `source.cwd` in this repo's `content.config.ts` points into this repo — never into the site that extends it. The layer therefore computes an absolute path at load time (`join(process.cwd(), 'docs')`), which works because c12 executes the config. This is the seam the whole `sources` shorthand sits on. diff --git a/CLAUDE.md b/CLAUDE.md index b54944d8..88c22445 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -42,12 +42,16 @@ What that leaves as candidate value: the **ergonomics** (a compact `sources` lis **Decided so far:** -- **The theme is shadcn-vue, wired through `shadcn-nuxt`** — a clean base with owned components, not Docus or Nuxt UI. No UI-Pro dependency, and the components are copied into the repo rather than imported, so overriding them is editing them. +- **The theme is shadcn-vue, wired through `shadcn-nuxt`** — a clean Tailwind 4 base with owned components in `app/components/ui/`, not Docus or Nuxt UI. Add one with `pnpm dlx shadcn-vue@latest add `; `components.json` already points the CLI at the layer's own alias. The palette is the neutral shadcn set as CSS variables in `app/assets/css/duxt.css`, `dark` class toggled by `@nuxtjs/color-mode`; a consumer redefines a token in its own stylesheet rather than forking the file. +- **Markdown components are MDC, not MDX.** Content ships MDC, so `::callout{type="tip"}` works with no extra module. Components live in `app/components/content/`. - **Numbered section prefixes are a non-issue.** Content strips them itself: `1.guides/` renders at `/guides`, `99.adr/` at `/adr`. Verified in `www/`. Reordering does not move a URL; only renaming the name part does. - **No SQLite driver is installed.** Content's default is `better-sqlite3`, a native addon needing a node-gyp toolchain. `content.experimental.nativeSqlite` uses Node 24's built-in `node:sqlite` instead, which needs no package at all — `www/` builds and renders with neither `better-sqlite3` nor `@libsql/client` present. It is flagged experimental in Content; if that changes, `@libsql/client` is the prebuilt fallback, not `better-sqlite3`. **Repo shape — the root IS the layer.** `nuxt.config.ts`, `content.config.ts` and `app/` sit at the repo root, and `package.json` points at them with `main: "./nuxt.config.ts"` plus a `files` allowlist, so `extends: ['@kirchdev/duxt']` resolves. `www/` is the consuming site beside it — the only workspace package, and the development target, exactly as `www/` is in `ZTL-UwU/shadcn-docs-nuxt`. `nuxt` is a peerDependency of the layer and a real dependency only of `www/`. +> [!IMPORTANT] +> **Nothing layer-relative resolves the way it reads.** Three places have hit this already, and a fourth will: the Content collection `cwd`, the `css` entry and `componentDir` in `nuxt.config.ts` (both go through the `layer()` helper resolving against `import.meta.url`), and the `@` alias — which belongs to whoever extends the layer, so the layer's own imports use `@duxt` instead. Assume any path written here is read from the consumer's directory until proven otherwise. + > [!IMPORTANT] > **A layer's collections resolve against the LAYER, not the consumer.** Content sets `collection.__rootDir = curr.cwd` per layer, so a relative `source.cwd` in this repo's `content.config.ts` points into this repo — never into the site that extends it. The layer therefore computes an absolute path at load time (`join(process.cwd(), 'docs')`), which works because c12 executes the config. This is the seam the whole `sources` shorthand sits on. From 0c9902d5df4716c2adbd652f1cd002b235048e0a Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 21:32:03 +0200 Subject: [PATCH 011/158] fix: keep reka-ui to one copy so SSR survives a production build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every route returned 500 with "Cannot read properties of null (reading 'ce')" — but only in a production build, never in dev, which is what made it look like a component bug rather than a resolution one. reka-ui is a dependency of the LAYER, so Nitro externalises it for SSR and the server ends up importing a different copy than the client bundle. Its provide/inject stops matching across the two and the first component that reads its context renders against a null instance. Dev never hits it because the module graph is shared there. Inlining reka-ui for SSR keeps one copy on both sides. dedupe alone is not enough — the copies are physically the same file, they are just reached through two module graphs. gildstone carries a dedupe for the neighbouring version of this bug. Also switches @nuxt/icon to a scanned client bundle, so icons ship with the page instead of being fetched per collection after hydration. --- nuxt.config.ts | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/nuxt.config.ts b/nuxt.config.ts index a9dc2507..6a5337b4 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -40,10 +40,32 @@ export default defineNuxtConfig({ }, icon: { - mode: 'svg' + // Inline the icons actually used into the client bundle instead of fetching + // them per collection after hydration — no roundtrip, no icon flash. + clientBundle: { + scan: true, + sizeLimitKb: 512 + } }, vite: { - plugins: [tailwindcss()] + plugins: [tailwindcss()], + + ssr: { + // reka-ui is a dependency of the LAYER, so Nitro externalises it for SSR + // and the server imports a different copy than the client bundle uses. + // Its provide/inject then never matches and SSR dies with a null + // instance. Inlining it keeps one copy on both sides. + noExternal: ['reka-ui'] + }, + + resolve: { + // Force singleton resolution. The layer and the project extending it can + // each resolve their own copy of these, and reka-ui's provide/inject then + // stops matching across the two — which only fails in a production build, + // where dev's shared module graph is gone. gildstone carries the same + // dedupe for the same class of bug. + dedupe: ['vue', 'reka-ui'] + } } }); From 0a66f853555f1ee57e791e87fe89b8581409a94c Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 21:32:14 +0200 Subject: [PATCH 012/158] feat: add the shadcn components the theme is built from alert, badge, breadcrumb, card, dropdown-menu, navigation-menu, sheet, sidebar, tabs, tooltip and friends, added through the shadcn CLI rather than hand-written, so they stay the upstream files a consumer already knows how to override. --- app/components/ui/alert/Alert.vue | 21 ++++ app/components/ui/alert/AlertDescription.vue | 22 ++++ app/components/ui/alert/AlertTitle.vue | 22 ++++ app/components/ui/alert/index.ts | 24 ++++ app/components/ui/badge/Badge.vue | 28 +++++ app/components/ui/badge/index.ts | 26 +++++ app/components/ui/breadcrumb/Breadcrumb.vue | 13 +++ .../ui/breadcrumb/BreadcrumbEllipsis.vue | 23 ++++ .../ui/breadcrumb/BreadcrumbItem.vue | 17 +++ .../ui/breadcrumb/BreadcrumbLink.vue | 24 ++++ .../ui/breadcrumb/BreadcrumbList.vue | 22 ++++ .../ui/breadcrumb/BreadcrumbPage.vue | 20 ++++ .../ui/breadcrumb/BreadcrumbSeparator.vue | 22 ++++ app/components/ui/breadcrumb/index.ts | 7 ++ app/components/ui/card/Card.vue | 22 ++++ app/components/ui/card/CardAction.vue | 22 ++++ app/components/ui/card/CardContent.vue | 14 +++ app/components/ui/card/CardDescription.vue | 17 +++ app/components/ui/card/CardFooter.vue | 17 +++ app/components/ui/card/CardHeader.vue | 22 ++++ app/components/ui/card/CardTitle.vue | 17 +++ app/components/ui/card/index.ts | 7 ++ .../ui/dropdown-menu/DropdownMenu.vue | 19 +++ .../DropdownMenuCheckboxItem.vue | 48 ++++++++ .../ui/dropdown-menu/DropdownMenuContent.vue | 47 ++++++++ .../ui/dropdown-menu/DropdownMenuGroup.vue | 12 ++ .../ui/dropdown-menu/DropdownMenuItem.vue | 41 +++++++ .../ui/dropdown-menu/DropdownMenuLabel.vue | 27 +++++ .../dropdown-menu/DropdownMenuRadioGroup.vue | 21 ++++ .../dropdown-menu/DropdownMenuRadioItem.vue | 49 ++++++++ .../dropdown-menu/DropdownMenuSeparator.vue | 23 ++++ .../ui/dropdown-menu/DropdownMenuShortcut.vue | 19 +++ .../ui/dropdown-menu/DropdownMenuSub.vue | 19 +++ .../dropdown-menu/DropdownMenuSubContent.vue | 34 ++++++ .../dropdown-menu/DropdownMenuSubTrigger.vue | 35 ++++++ .../ui/dropdown-menu/DropdownMenuTrigger.vue | 17 +++ app/components/ui/dropdown-menu/index.ts | 16 +++ app/components/ui/input/Input.vue | 35 ++++++ app/components/ui/input/index.ts | 1 + .../ui/navigation-menu/NavigationMenu.vue | 42 +++++++ .../navigation-menu/NavigationMenuContent.vue | 35 ++++++ .../NavigationMenuIndicator.vue | 32 +++++ .../ui/navigation-menu/NavigationMenuItem.vue | 23 ++++ .../ui/navigation-menu/NavigationMenuLink.vue | 30 +++++ .../ui/navigation-menu/NavigationMenuList.vue | 30 +++++ .../navigation-menu/NavigationMenuTrigger.vue | 31 +++++ .../NavigationMenuViewport.vue | 30 +++++ app/components/ui/navigation-menu/index.ts | 14 +++ app/components/ui/sheet/Sheet.vue | 15 +++ app/components/ui/sheet/SheetClose.vue | 12 ++ app/components/ui/sheet/SheetContent.vue | 65 +++++++++++ app/components/ui/sheet/SheetDescription.vue | 23 ++++ app/components/ui/sheet/SheetFooter.vue | 15 +++ app/components/ui/sheet/SheetHeader.vue | 15 +++ app/components/ui/sheet/SheetOverlay.vue | 28 +++++ app/components/ui/sheet/SheetTitle.vue | 23 ++++ app/components/ui/sheet/SheetTrigger.vue | 12 ++ app/components/ui/sheet/index.ts | 8 ++ app/components/ui/sidebar/Sidebar.vue | 110 ++++++++++++++++++ app/components/ui/sidebar/SidebarContent.vue | 23 ++++ app/components/ui/sidebar/SidebarFooter.vue | 18 +++ app/components/ui/sidebar/SidebarGroup.vue | 18 +++ .../ui/sidebar/SidebarGroupAction.vue | 31 +++++ .../ui/sidebar/SidebarGroupContent.vue | 18 +++ .../ui/sidebar/SidebarGroupLabel.vue | 30 +++++ app/components/ui/sidebar/SidebarHeader.vue | 18 +++ app/components/ui/sidebar/SidebarInput.vue | 19 +++ app/components/ui/sidebar/SidebarInset.vue | 23 ++++ app/components/ui/sidebar/SidebarMenu.vue | 18 +++ .../ui/sidebar/SidebarMenuAction.vue | 42 +++++++ .../ui/sidebar/SidebarMenuBadge.vue | 28 +++++ .../ui/sidebar/SidebarMenuButton.vue | 60 ++++++++++ .../ui/sidebar/SidebarMenuButtonChild.vue | 36 ++++++ app/components/ui/sidebar/SidebarMenuItem.vue | 18 +++ .../ui/sidebar/SidebarMenuSkeleton.vue | 35 ++++++ app/components/ui/sidebar/SidebarMenuSub.vue | 24 ++++ .../ui/sidebar/SidebarMenuSubButton.vue | 43 +++++++ .../ui/sidebar/SidebarMenuSubItem.vue | 18 +++ app/components/ui/sidebar/SidebarProvider.vue | 109 +++++++++++++++++ app/components/ui/sidebar/SidebarRail.vue | 35 ++++++ .../ui/sidebar/SidebarSeparator.vue | 19 +++ app/components/ui/sidebar/SidebarTrigger.vue | 27 +++++ app/components/ui/sidebar/index.ts | 62 ++++++++++ app/components/ui/sidebar/utils.ts | 19 +++ app/components/ui/skeleton/Skeleton.vue | 17 +++ app/components/ui/skeleton/index.ts | 1 + app/components/ui/tabs/Tabs.vue | 26 +++++ app/components/ui/tabs/TabsContent.vue | 23 ++++ app/components/ui/tabs/TabsList.vue | 28 +++++ app/components/ui/tabs/TabsTrigger.vue | 30 +++++ app/components/ui/tabs/index.ts | 4 + app/components/ui/tooltip/Tooltip.vue | 15 +++ app/components/ui/tooltip/TooltipContent.vue | 49 ++++++++ app/components/ui/tooltip/TooltipProvider.vue | 14 +++ app/components/ui/tooltip/TooltipTrigger.vue | 12 ++ app/components/ui/tooltip/index.ts | 4 + 96 files changed, 2499 insertions(+) create mode 100644 app/components/ui/alert/Alert.vue create mode 100644 app/components/ui/alert/AlertDescription.vue create mode 100644 app/components/ui/alert/AlertTitle.vue create mode 100644 app/components/ui/alert/index.ts create mode 100644 app/components/ui/badge/Badge.vue create mode 100644 app/components/ui/badge/index.ts create mode 100644 app/components/ui/breadcrumb/Breadcrumb.vue create mode 100644 app/components/ui/breadcrumb/BreadcrumbEllipsis.vue create mode 100644 app/components/ui/breadcrumb/BreadcrumbItem.vue create mode 100644 app/components/ui/breadcrumb/BreadcrumbLink.vue create mode 100644 app/components/ui/breadcrumb/BreadcrumbList.vue create mode 100644 app/components/ui/breadcrumb/BreadcrumbPage.vue create mode 100644 app/components/ui/breadcrumb/BreadcrumbSeparator.vue create mode 100644 app/components/ui/breadcrumb/index.ts create mode 100644 app/components/ui/card/Card.vue create mode 100644 app/components/ui/card/CardAction.vue create mode 100644 app/components/ui/card/CardContent.vue create mode 100644 app/components/ui/card/CardDescription.vue create mode 100644 app/components/ui/card/CardFooter.vue create mode 100644 app/components/ui/card/CardHeader.vue create mode 100644 app/components/ui/card/CardTitle.vue create mode 100644 app/components/ui/card/index.ts create mode 100644 app/components/ui/dropdown-menu/DropdownMenu.vue create mode 100644 app/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue create mode 100644 app/components/ui/dropdown-menu/DropdownMenuContent.vue create mode 100644 app/components/ui/dropdown-menu/DropdownMenuGroup.vue create mode 100644 app/components/ui/dropdown-menu/DropdownMenuItem.vue create mode 100644 app/components/ui/dropdown-menu/DropdownMenuLabel.vue create mode 100644 app/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue create mode 100644 app/components/ui/dropdown-menu/DropdownMenuRadioItem.vue create mode 100644 app/components/ui/dropdown-menu/DropdownMenuSeparator.vue create mode 100644 app/components/ui/dropdown-menu/DropdownMenuShortcut.vue create mode 100644 app/components/ui/dropdown-menu/DropdownMenuSub.vue create mode 100644 app/components/ui/dropdown-menu/DropdownMenuSubContent.vue create mode 100644 app/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue create mode 100644 app/components/ui/dropdown-menu/DropdownMenuTrigger.vue create mode 100644 app/components/ui/dropdown-menu/index.ts create mode 100644 app/components/ui/input/Input.vue create mode 100644 app/components/ui/input/index.ts create mode 100644 app/components/ui/navigation-menu/NavigationMenu.vue create mode 100644 app/components/ui/navigation-menu/NavigationMenuContent.vue create mode 100644 app/components/ui/navigation-menu/NavigationMenuIndicator.vue create mode 100644 app/components/ui/navigation-menu/NavigationMenuItem.vue create mode 100644 app/components/ui/navigation-menu/NavigationMenuLink.vue create mode 100644 app/components/ui/navigation-menu/NavigationMenuList.vue create mode 100644 app/components/ui/navigation-menu/NavigationMenuTrigger.vue create mode 100644 app/components/ui/navigation-menu/NavigationMenuViewport.vue create mode 100644 app/components/ui/navigation-menu/index.ts create mode 100644 app/components/ui/sheet/Sheet.vue create mode 100644 app/components/ui/sheet/SheetClose.vue create mode 100644 app/components/ui/sheet/SheetContent.vue create mode 100644 app/components/ui/sheet/SheetDescription.vue create mode 100644 app/components/ui/sheet/SheetFooter.vue create mode 100644 app/components/ui/sheet/SheetHeader.vue create mode 100644 app/components/ui/sheet/SheetOverlay.vue create mode 100644 app/components/ui/sheet/SheetTitle.vue create mode 100644 app/components/ui/sheet/SheetTrigger.vue create mode 100644 app/components/ui/sheet/index.ts create mode 100644 app/components/ui/sidebar/Sidebar.vue create mode 100644 app/components/ui/sidebar/SidebarContent.vue create mode 100644 app/components/ui/sidebar/SidebarFooter.vue create mode 100644 app/components/ui/sidebar/SidebarGroup.vue create mode 100644 app/components/ui/sidebar/SidebarGroupAction.vue create mode 100644 app/components/ui/sidebar/SidebarGroupContent.vue create mode 100644 app/components/ui/sidebar/SidebarGroupLabel.vue create mode 100644 app/components/ui/sidebar/SidebarHeader.vue create mode 100644 app/components/ui/sidebar/SidebarInput.vue create mode 100644 app/components/ui/sidebar/SidebarInset.vue create mode 100644 app/components/ui/sidebar/SidebarMenu.vue create mode 100644 app/components/ui/sidebar/SidebarMenuAction.vue create mode 100644 app/components/ui/sidebar/SidebarMenuBadge.vue create mode 100644 app/components/ui/sidebar/SidebarMenuButton.vue create mode 100644 app/components/ui/sidebar/SidebarMenuButtonChild.vue create mode 100644 app/components/ui/sidebar/SidebarMenuItem.vue create mode 100644 app/components/ui/sidebar/SidebarMenuSkeleton.vue create mode 100644 app/components/ui/sidebar/SidebarMenuSub.vue create mode 100644 app/components/ui/sidebar/SidebarMenuSubButton.vue create mode 100644 app/components/ui/sidebar/SidebarMenuSubItem.vue create mode 100644 app/components/ui/sidebar/SidebarProvider.vue create mode 100644 app/components/ui/sidebar/SidebarRail.vue create mode 100644 app/components/ui/sidebar/SidebarSeparator.vue create mode 100644 app/components/ui/sidebar/SidebarTrigger.vue create mode 100644 app/components/ui/sidebar/index.ts create mode 100644 app/components/ui/sidebar/utils.ts create mode 100644 app/components/ui/skeleton/Skeleton.vue create mode 100644 app/components/ui/skeleton/index.ts create mode 100644 app/components/ui/tabs/Tabs.vue create mode 100644 app/components/ui/tabs/TabsContent.vue create mode 100644 app/components/ui/tabs/TabsList.vue create mode 100644 app/components/ui/tabs/TabsTrigger.vue create mode 100644 app/components/ui/tabs/index.ts create mode 100644 app/components/ui/tooltip/Tooltip.vue create mode 100644 app/components/ui/tooltip/TooltipContent.vue create mode 100644 app/components/ui/tooltip/TooltipProvider.vue create mode 100644 app/components/ui/tooltip/TooltipTrigger.vue create mode 100644 app/components/ui/tooltip/index.ts diff --git a/app/components/ui/alert/Alert.vue b/app/components/ui/alert/Alert.vue new file mode 100644 index 00000000..7f068fb8 --- /dev/null +++ b/app/components/ui/alert/Alert.vue @@ -0,0 +1,21 @@ + + + diff --git a/app/components/ui/alert/AlertDescription.vue b/app/components/ui/alert/AlertDescription.vue new file mode 100644 index 00000000..a329ad6b --- /dev/null +++ b/app/components/ui/alert/AlertDescription.vue @@ -0,0 +1,22 @@ + + + diff --git a/app/components/ui/alert/AlertTitle.vue b/app/components/ui/alert/AlertTitle.vue new file mode 100644 index 00000000..c6fa8d7c --- /dev/null +++ b/app/components/ui/alert/AlertTitle.vue @@ -0,0 +1,22 @@ + + + diff --git a/app/components/ui/alert/index.ts b/app/components/ui/alert/index.ts new file mode 100644 index 00000000..907e0663 --- /dev/null +++ b/app/components/ui/alert/index.ts @@ -0,0 +1,24 @@ +import type { VariantProps } from 'class-variance-authority'; +import { cva } from 'class-variance-authority'; + +export { default as Alert } from './Alert.vue'; +export { default as AlertDescription } from './AlertDescription.vue'; +export { default as AlertTitle } from './AlertTitle.vue'; + +export const alertVariants = cva( + 'relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current', + { + variants: { + variant: { + default: 'bg-card text-card-foreground', + destructive: + 'text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90' + } + }, + defaultVariants: { + variant: 'default' + } + } +); + +export type AlertVariants = VariantProps; diff --git a/app/components/ui/badge/Badge.vue b/app/components/ui/badge/Badge.vue new file mode 100644 index 00000000..6fe97b84 --- /dev/null +++ b/app/components/ui/badge/Badge.vue @@ -0,0 +1,28 @@ + + + diff --git a/app/components/ui/badge/index.ts b/app/components/ui/badge/index.ts new file mode 100644 index 00000000..6d4673cc --- /dev/null +++ b/app/components/ui/badge/index.ts @@ -0,0 +1,26 @@ +import type { VariantProps } from 'class-variance-authority'; +import { cva } from 'class-variance-authority'; + +export { default as Badge } from './Badge.vue'; + +export const badgeVariants = cva( + 'inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden', + { + variants: { + variant: { + default: + 'border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90', + secondary: + 'border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90', + destructive: + 'border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', + outline: + 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground' + } + }, + defaultVariants: { + variant: 'default' + } + } +); +export type BadgeVariants = VariantProps; diff --git a/app/components/ui/breadcrumb/Breadcrumb.vue b/app/components/ui/breadcrumb/Breadcrumb.vue new file mode 100644 index 00000000..5219e5cd --- /dev/null +++ b/app/components/ui/breadcrumb/Breadcrumb.vue @@ -0,0 +1,13 @@ + + + diff --git a/app/components/ui/breadcrumb/BreadcrumbEllipsis.vue b/app/components/ui/breadcrumb/BreadcrumbEllipsis.vue new file mode 100644 index 00000000..1501edcc --- /dev/null +++ b/app/components/ui/breadcrumb/BreadcrumbEllipsis.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/ui/breadcrumb/BreadcrumbItem.vue b/app/components/ui/breadcrumb/BreadcrumbItem.vue new file mode 100644 index 00000000..308f76d1 --- /dev/null +++ b/app/components/ui/breadcrumb/BreadcrumbItem.vue @@ -0,0 +1,17 @@ + + + diff --git a/app/components/ui/breadcrumb/BreadcrumbLink.vue b/app/components/ui/breadcrumb/BreadcrumbLink.vue new file mode 100644 index 00000000..46de77f5 --- /dev/null +++ b/app/components/ui/breadcrumb/BreadcrumbLink.vue @@ -0,0 +1,24 @@ + + + diff --git a/app/components/ui/breadcrumb/BreadcrumbList.vue b/app/components/ui/breadcrumb/BreadcrumbList.vue new file mode 100644 index 00000000..02d47e20 --- /dev/null +++ b/app/components/ui/breadcrumb/BreadcrumbList.vue @@ -0,0 +1,22 @@ + + + diff --git a/app/components/ui/breadcrumb/BreadcrumbPage.vue b/app/components/ui/breadcrumb/BreadcrumbPage.vue new file mode 100644 index 00000000..d8981872 --- /dev/null +++ b/app/components/ui/breadcrumb/BreadcrumbPage.vue @@ -0,0 +1,20 @@ + + + diff --git a/app/components/ui/breadcrumb/BreadcrumbSeparator.vue b/app/components/ui/breadcrumb/BreadcrumbSeparator.vue new file mode 100644 index 00000000..c8a5095d --- /dev/null +++ b/app/components/ui/breadcrumb/BreadcrumbSeparator.vue @@ -0,0 +1,22 @@ + + + diff --git a/app/components/ui/breadcrumb/index.ts b/app/components/ui/breadcrumb/index.ts new file mode 100644 index 00000000..d650f7e4 --- /dev/null +++ b/app/components/ui/breadcrumb/index.ts @@ -0,0 +1,7 @@ +export { default as Breadcrumb } from './Breadcrumb.vue'; +export { default as BreadcrumbEllipsis } from './BreadcrumbEllipsis.vue'; +export { default as BreadcrumbItem } from './BreadcrumbItem.vue'; +export { default as BreadcrumbLink } from './BreadcrumbLink.vue'; +export { default as BreadcrumbList } from './BreadcrumbList.vue'; +export { default as BreadcrumbPage } from './BreadcrumbPage.vue'; +export { default as BreadcrumbSeparator } from './BreadcrumbSeparator.vue'; diff --git a/app/components/ui/card/Card.vue b/app/components/ui/card/Card.vue new file mode 100644 index 00000000..56ee0a82 --- /dev/null +++ b/app/components/ui/card/Card.vue @@ -0,0 +1,22 @@ + + + diff --git a/app/components/ui/card/CardAction.vue b/app/components/ui/card/CardAction.vue new file mode 100644 index 00000000..1e57d012 --- /dev/null +++ b/app/components/ui/card/CardAction.vue @@ -0,0 +1,22 @@ + + + diff --git a/app/components/ui/card/CardContent.vue b/app/components/ui/card/CardContent.vue new file mode 100644 index 00000000..7a78fad3 --- /dev/null +++ b/app/components/ui/card/CardContent.vue @@ -0,0 +1,14 @@ + + + diff --git a/app/components/ui/card/CardDescription.vue b/app/components/ui/card/CardDescription.vue new file mode 100644 index 00000000..65385236 --- /dev/null +++ b/app/components/ui/card/CardDescription.vue @@ -0,0 +1,17 @@ + + + diff --git a/app/components/ui/card/CardFooter.vue b/app/components/ui/card/CardFooter.vue new file mode 100644 index 00000000..cd3b81be --- /dev/null +++ b/app/components/ui/card/CardFooter.vue @@ -0,0 +1,17 @@ + + + diff --git a/app/components/ui/card/CardHeader.vue b/app/components/ui/card/CardHeader.vue new file mode 100644 index 00000000..ef5e37c1 --- /dev/null +++ b/app/components/ui/card/CardHeader.vue @@ -0,0 +1,22 @@ + + + diff --git a/app/components/ui/card/CardTitle.vue b/app/components/ui/card/CardTitle.vue new file mode 100644 index 00000000..16850aff --- /dev/null +++ b/app/components/ui/card/CardTitle.vue @@ -0,0 +1,17 @@ + + + diff --git a/app/components/ui/card/index.ts b/app/components/ui/card/index.ts new file mode 100644 index 00000000..a71b2f6a --- /dev/null +++ b/app/components/ui/card/index.ts @@ -0,0 +1,7 @@ +export { default as Card } from './Card.vue'; +export { default as CardAction } from './CardAction.vue'; +export { default as CardContent } from './CardContent.vue'; +export { default as CardDescription } from './CardDescription.vue'; +export { default as CardFooter } from './CardFooter.vue'; +export { default as CardHeader } from './CardHeader.vue'; +export { default as CardTitle } from './CardTitle.vue'; diff --git a/app/components/ui/dropdown-menu/DropdownMenu.vue b/app/components/ui/dropdown-menu/DropdownMenu.vue new file mode 100644 index 00000000..eefe888d --- /dev/null +++ b/app/components/ui/dropdown-menu/DropdownMenu.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue b/app/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue new file mode 100644 index 00000000..491d6966 --- /dev/null +++ b/app/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue @@ -0,0 +1,48 @@ + + + diff --git a/app/components/ui/dropdown-menu/DropdownMenuContent.vue b/app/components/ui/dropdown-menu/DropdownMenuContent.vue new file mode 100644 index 00000000..2cfedb90 --- /dev/null +++ b/app/components/ui/dropdown-menu/DropdownMenuContent.vue @@ -0,0 +1,47 @@ + + + diff --git a/app/components/ui/dropdown-menu/DropdownMenuGroup.vue b/app/components/ui/dropdown-menu/DropdownMenuGroup.vue new file mode 100644 index 00000000..1491e2b2 --- /dev/null +++ b/app/components/ui/dropdown-menu/DropdownMenuGroup.vue @@ -0,0 +1,12 @@ + + + diff --git a/app/components/ui/dropdown-menu/DropdownMenuItem.vue b/app/components/ui/dropdown-menu/DropdownMenuItem.vue new file mode 100644 index 00000000..07562815 --- /dev/null +++ b/app/components/ui/dropdown-menu/DropdownMenuItem.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/components/ui/dropdown-menu/DropdownMenuLabel.vue b/app/components/ui/dropdown-menu/DropdownMenuLabel.vue new file mode 100644 index 00000000..3bbf9e18 --- /dev/null +++ b/app/components/ui/dropdown-menu/DropdownMenuLabel.vue @@ -0,0 +1,27 @@ + + + diff --git a/app/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue b/app/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue new file mode 100644 index 00000000..6961bc6d --- /dev/null +++ b/app/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue @@ -0,0 +1,21 @@ + + + diff --git a/app/components/ui/dropdown-menu/DropdownMenuRadioItem.vue b/app/components/ui/dropdown-menu/DropdownMenuRadioItem.vue new file mode 100644 index 00000000..12425bf1 --- /dev/null +++ b/app/components/ui/dropdown-menu/DropdownMenuRadioItem.vue @@ -0,0 +1,49 @@ + + + diff --git a/app/components/ui/dropdown-menu/DropdownMenuSeparator.vue b/app/components/ui/dropdown-menu/DropdownMenuSeparator.vue new file mode 100644 index 00000000..9eda1322 --- /dev/null +++ b/app/components/ui/dropdown-menu/DropdownMenuSeparator.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/ui/dropdown-menu/DropdownMenuShortcut.vue b/app/components/ui/dropdown-menu/DropdownMenuShortcut.vue new file mode 100644 index 00000000..fce332c3 --- /dev/null +++ b/app/components/ui/dropdown-menu/DropdownMenuShortcut.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/ui/dropdown-menu/DropdownMenuSub.vue b/app/components/ui/dropdown-menu/DropdownMenuSub.vue new file mode 100644 index 00000000..8797d82b --- /dev/null +++ b/app/components/ui/dropdown-menu/DropdownMenuSub.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/ui/dropdown-menu/DropdownMenuSubContent.vue b/app/components/ui/dropdown-menu/DropdownMenuSubContent.vue new file mode 100644 index 00000000..f3251414 --- /dev/null +++ b/app/components/ui/dropdown-menu/DropdownMenuSubContent.vue @@ -0,0 +1,34 @@ + + + diff --git a/app/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue b/app/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue new file mode 100644 index 00000000..52f00354 --- /dev/null +++ b/app/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue @@ -0,0 +1,35 @@ + + + diff --git a/app/components/ui/dropdown-menu/DropdownMenuTrigger.vue b/app/components/ui/dropdown-menu/DropdownMenuTrigger.vue new file mode 100644 index 00000000..fb0641e0 --- /dev/null +++ b/app/components/ui/dropdown-menu/DropdownMenuTrigger.vue @@ -0,0 +1,17 @@ + + + diff --git a/app/components/ui/dropdown-menu/index.ts b/app/components/ui/dropdown-menu/index.ts new file mode 100644 index 00000000..bde907bf --- /dev/null +++ b/app/components/ui/dropdown-menu/index.ts @@ -0,0 +1,16 @@ +export { default as DropdownMenu } from './DropdownMenu.vue'; + +export { default as DropdownMenuCheckboxItem } from './DropdownMenuCheckboxItem.vue'; +export { default as DropdownMenuContent } from './DropdownMenuContent.vue'; +export { default as DropdownMenuGroup } from './DropdownMenuGroup.vue'; +export { default as DropdownMenuItem } from './DropdownMenuItem.vue'; +export { default as DropdownMenuLabel } from './DropdownMenuLabel.vue'; +export { default as DropdownMenuRadioGroup } from './DropdownMenuRadioGroup.vue'; +export { default as DropdownMenuRadioItem } from './DropdownMenuRadioItem.vue'; +export { default as DropdownMenuSeparator } from './DropdownMenuSeparator.vue'; +export { default as DropdownMenuShortcut } from './DropdownMenuShortcut.vue'; +export { default as DropdownMenuSub } from './DropdownMenuSub.vue'; +export { default as DropdownMenuSubContent } from './DropdownMenuSubContent.vue'; +export { default as DropdownMenuSubTrigger } from './DropdownMenuSubTrigger.vue'; +export { default as DropdownMenuTrigger } from './DropdownMenuTrigger.vue'; +export { DropdownMenuPortal } from 'reka-ui'; diff --git a/app/components/ui/input/Input.vue b/app/components/ui/input/Input.vue new file mode 100644 index 00000000..700cb3af --- /dev/null +++ b/app/components/ui/input/Input.vue @@ -0,0 +1,35 @@ + + + diff --git a/app/components/ui/input/index.ts b/app/components/ui/input/index.ts new file mode 100644 index 00000000..c5248c5c --- /dev/null +++ b/app/components/ui/input/index.ts @@ -0,0 +1 @@ +export { default as Input } from './Input.vue'; diff --git a/app/components/ui/navigation-menu/NavigationMenu.vue b/app/components/ui/navigation-menu/NavigationMenu.vue new file mode 100644 index 00000000..b635c51f --- /dev/null +++ b/app/components/ui/navigation-menu/NavigationMenu.vue @@ -0,0 +1,42 @@ + + + diff --git a/app/components/ui/navigation-menu/NavigationMenuContent.vue b/app/components/ui/navigation-menu/NavigationMenuContent.vue new file mode 100644 index 00000000..2911e1c4 --- /dev/null +++ b/app/components/ui/navigation-menu/NavigationMenuContent.vue @@ -0,0 +1,35 @@ + + + diff --git a/app/components/ui/navigation-menu/NavigationMenuIndicator.vue b/app/components/ui/navigation-menu/NavigationMenuIndicator.vue new file mode 100644 index 00000000..5db1dcdd --- /dev/null +++ b/app/components/ui/navigation-menu/NavigationMenuIndicator.vue @@ -0,0 +1,32 @@ + + + diff --git a/app/components/ui/navigation-menu/NavigationMenuItem.vue b/app/components/ui/navigation-menu/NavigationMenuItem.vue new file mode 100644 index 00000000..a6a7d9ab --- /dev/null +++ b/app/components/ui/navigation-menu/NavigationMenuItem.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/ui/navigation-menu/NavigationMenuLink.vue b/app/components/ui/navigation-menu/NavigationMenuLink.vue new file mode 100644 index 00000000..221f4f7e --- /dev/null +++ b/app/components/ui/navigation-menu/NavigationMenuLink.vue @@ -0,0 +1,30 @@ + + + diff --git a/app/components/ui/navigation-menu/NavigationMenuList.vue b/app/components/ui/navigation-menu/NavigationMenuList.vue new file mode 100644 index 00000000..96d1483e --- /dev/null +++ b/app/components/ui/navigation-menu/NavigationMenuList.vue @@ -0,0 +1,30 @@ + + + diff --git a/app/components/ui/navigation-menu/NavigationMenuTrigger.vue b/app/components/ui/navigation-menu/NavigationMenuTrigger.vue new file mode 100644 index 00000000..2336747b --- /dev/null +++ b/app/components/ui/navigation-menu/NavigationMenuTrigger.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/ui/navigation-menu/NavigationMenuViewport.vue b/app/components/ui/navigation-menu/NavigationMenuViewport.vue new file mode 100644 index 00000000..0506344b --- /dev/null +++ b/app/components/ui/navigation-menu/NavigationMenuViewport.vue @@ -0,0 +1,30 @@ + + + diff --git a/app/components/ui/navigation-menu/index.ts b/app/components/ui/navigation-menu/index.ts new file mode 100644 index 00000000..dce83879 --- /dev/null +++ b/app/components/ui/navigation-menu/index.ts @@ -0,0 +1,14 @@ +import { cva } from 'class-variance-authority'; + +export { default as NavigationMenu } from './NavigationMenu.vue'; +export { default as NavigationMenuContent } from './NavigationMenuContent.vue'; +export { default as NavigationMenuIndicator } from './NavigationMenuIndicator.vue'; +export { default as NavigationMenuItem } from './NavigationMenuItem.vue'; +export { default as NavigationMenuLink } from './NavigationMenuLink.vue'; +export { default as NavigationMenuList } from './NavigationMenuList.vue'; +export { default as NavigationMenuTrigger } from './NavigationMenuTrigger.vue'; +export { default as NavigationMenuViewport } from './NavigationMenuViewport.vue'; + +export const navigationMenuTriggerStyle = cva( + 'group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-3 focus-visible:outline-1' +); diff --git a/app/components/ui/sheet/Sheet.vue b/app/components/ui/sheet/Sheet.vue new file mode 100644 index 00000000..4223317b --- /dev/null +++ b/app/components/ui/sheet/Sheet.vue @@ -0,0 +1,15 @@ + + + diff --git a/app/components/ui/sheet/SheetClose.vue b/app/components/ui/sheet/SheetClose.vue new file mode 100644 index 00000000..0d01bc64 --- /dev/null +++ b/app/components/ui/sheet/SheetClose.vue @@ -0,0 +1,12 @@ + + + diff --git a/app/components/ui/sheet/SheetContent.vue b/app/components/ui/sheet/SheetContent.vue new file mode 100644 index 00000000..4c140baf --- /dev/null +++ b/app/components/ui/sheet/SheetContent.vue @@ -0,0 +1,65 @@ + + + diff --git a/app/components/ui/sheet/SheetDescription.vue b/app/components/ui/sheet/SheetDescription.vue new file mode 100644 index 00000000..ba56aeea --- /dev/null +++ b/app/components/ui/sheet/SheetDescription.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/ui/sheet/SheetFooter.vue b/app/components/ui/sheet/SheetFooter.vue new file mode 100644 index 00000000..01f5dae9 --- /dev/null +++ b/app/components/ui/sheet/SheetFooter.vue @@ -0,0 +1,15 @@ + + + diff --git a/app/components/ui/sheet/SheetHeader.vue b/app/components/ui/sheet/SheetHeader.vue new file mode 100644 index 00000000..217e4631 --- /dev/null +++ b/app/components/ui/sheet/SheetHeader.vue @@ -0,0 +1,15 @@ + + + diff --git a/app/components/ui/sheet/SheetOverlay.vue b/app/components/ui/sheet/SheetOverlay.vue new file mode 100644 index 00000000..1ecaf7e6 --- /dev/null +++ b/app/components/ui/sheet/SheetOverlay.vue @@ -0,0 +1,28 @@ + + + diff --git a/app/components/ui/sheet/SheetTitle.vue b/app/components/ui/sheet/SheetTitle.vue new file mode 100644 index 00000000..5de4ef2e --- /dev/null +++ b/app/components/ui/sheet/SheetTitle.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/ui/sheet/SheetTrigger.vue b/app/components/ui/sheet/SheetTrigger.vue new file mode 100644 index 00000000..f107d26f --- /dev/null +++ b/app/components/ui/sheet/SheetTrigger.vue @@ -0,0 +1,12 @@ + + + diff --git a/app/components/ui/sheet/index.ts b/app/components/ui/sheet/index.ts new file mode 100644 index 00000000..37498e1d --- /dev/null +++ b/app/components/ui/sheet/index.ts @@ -0,0 +1,8 @@ +export { default as Sheet } from './Sheet.vue'; +export { default as SheetClose } from './SheetClose.vue'; +export { default as SheetContent } from './SheetContent.vue'; +export { default as SheetDescription } from './SheetDescription.vue'; +export { default as SheetFooter } from './SheetFooter.vue'; +export { default as SheetHeader } from './SheetHeader.vue'; +export { default as SheetTitle } from './SheetTitle.vue'; +export { default as SheetTrigger } from './SheetTrigger.vue'; diff --git a/app/components/ui/sidebar/Sidebar.vue b/app/components/ui/sidebar/Sidebar.vue new file mode 100644 index 00000000..19db2c69 --- /dev/null +++ b/app/components/ui/sidebar/Sidebar.vue @@ -0,0 +1,110 @@ + + + diff --git a/app/components/ui/sidebar/SidebarContent.vue b/app/components/ui/sidebar/SidebarContent.vue new file mode 100644 index 00000000..5a29c635 --- /dev/null +++ b/app/components/ui/sidebar/SidebarContent.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/ui/sidebar/SidebarFooter.vue b/app/components/ui/sidebar/SidebarFooter.vue new file mode 100644 index 00000000..46f1c036 --- /dev/null +++ b/app/components/ui/sidebar/SidebarFooter.vue @@ -0,0 +1,18 @@ + + + diff --git a/app/components/ui/sidebar/SidebarGroup.vue b/app/components/ui/sidebar/SidebarGroup.vue new file mode 100644 index 00000000..40c81b87 --- /dev/null +++ b/app/components/ui/sidebar/SidebarGroup.vue @@ -0,0 +1,18 @@ + + + diff --git a/app/components/ui/sidebar/SidebarGroupAction.vue b/app/components/ui/sidebar/SidebarGroupAction.vue new file mode 100644 index 00000000..c7c58d39 --- /dev/null +++ b/app/components/ui/sidebar/SidebarGroupAction.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/ui/sidebar/SidebarGroupContent.vue b/app/components/ui/sidebar/SidebarGroupContent.vue new file mode 100644 index 00000000..389b4145 --- /dev/null +++ b/app/components/ui/sidebar/SidebarGroupContent.vue @@ -0,0 +1,18 @@ + + + diff --git a/app/components/ui/sidebar/SidebarGroupLabel.vue b/app/components/ui/sidebar/SidebarGroupLabel.vue new file mode 100644 index 00000000..56bbdd6a --- /dev/null +++ b/app/components/ui/sidebar/SidebarGroupLabel.vue @@ -0,0 +1,30 @@ + + + diff --git a/app/components/ui/sidebar/SidebarHeader.vue b/app/components/ui/sidebar/SidebarHeader.vue new file mode 100644 index 00000000..5dea1ffc --- /dev/null +++ b/app/components/ui/sidebar/SidebarHeader.vue @@ -0,0 +1,18 @@ + + + diff --git a/app/components/ui/sidebar/SidebarInput.vue b/app/components/ui/sidebar/SidebarInput.vue new file mode 100644 index 00000000..494c74c0 --- /dev/null +++ b/app/components/ui/sidebar/SidebarInput.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/ui/sidebar/SidebarInset.vue b/app/components/ui/sidebar/SidebarInset.vue new file mode 100644 index 00000000..e4af7e43 --- /dev/null +++ b/app/components/ui/sidebar/SidebarInset.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/ui/sidebar/SidebarMenu.vue b/app/components/ui/sidebar/SidebarMenu.vue new file mode 100644 index 00000000..abab73d7 --- /dev/null +++ b/app/components/ui/sidebar/SidebarMenu.vue @@ -0,0 +1,18 @@ + + + diff --git a/app/components/ui/sidebar/SidebarMenuAction.vue b/app/components/ui/sidebar/SidebarMenuAction.vue new file mode 100644 index 00000000..1ae3b93c --- /dev/null +++ b/app/components/ui/sidebar/SidebarMenuAction.vue @@ -0,0 +1,42 @@ + + + diff --git a/app/components/ui/sidebar/SidebarMenuBadge.vue b/app/components/ui/sidebar/SidebarMenuBadge.vue new file mode 100644 index 00000000..f21903ca --- /dev/null +++ b/app/components/ui/sidebar/SidebarMenuBadge.vue @@ -0,0 +1,28 @@ + + + diff --git a/app/components/ui/sidebar/SidebarMenuButton.vue b/app/components/ui/sidebar/SidebarMenuButton.vue new file mode 100644 index 00000000..69bbab4b --- /dev/null +++ b/app/components/ui/sidebar/SidebarMenuButton.vue @@ -0,0 +1,60 @@ + + + diff --git a/app/components/ui/sidebar/SidebarMenuButtonChild.vue b/app/components/ui/sidebar/SidebarMenuButtonChild.vue new file mode 100644 index 00000000..466dae24 --- /dev/null +++ b/app/components/ui/sidebar/SidebarMenuButtonChild.vue @@ -0,0 +1,36 @@ + + + diff --git a/app/components/ui/sidebar/SidebarMenuItem.vue b/app/components/ui/sidebar/SidebarMenuItem.vue new file mode 100644 index 00000000..7a21dd18 --- /dev/null +++ b/app/components/ui/sidebar/SidebarMenuItem.vue @@ -0,0 +1,18 @@ + + + diff --git a/app/components/ui/sidebar/SidebarMenuSkeleton.vue b/app/components/ui/sidebar/SidebarMenuSkeleton.vue new file mode 100644 index 00000000..20ced386 --- /dev/null +++ b/app/components/ui/sidebar/SidebarMenuSkeleton.vue @@ -0,0 +1,35 @@ + + + diff --git a/app/components/ui/sidebar/SidebarMenuSub.vue b/app/components/ui/sidebar/SidebarMenuSub.vue new file mode 100644 index 00000000..0e22a11f --- /dev/null +++ b/app/components/ui/sidebar/SidebarMenuSub.vue @@ -0,0 +1,24 @@ + + + diff --git a/app/components/ui/sidebar/SidebarMenuSubButton.vue b/app/components/ui/sidebar/SidebarMenuSubButton.vue new file mode 100644 index 00000000..5b82410c --- /dev/null +++ b/app/components/ui/sidebar/SidebarMenuSubButton.vue @@ -0,0 +1,43 @@ + + + diff --git a/app/components/ui/sidebar/SidebarMenuSubItem.vue b/app/components/ui/sidebar/SidebarMenuSubItem.vue new file mode 100644 index 00000000..a3c46f2d --- /dev/null +++ b/app/components/ui/sidebar/SidebarMenuSubItem.vue @@ -0,0 +1,18 @@ + + + diff --git a/app/components/ui/sidebar/SidebarProvider.vue b/app/components/ui/sidebar/SidebarProvider.vue new file mode 100644 index 00000000..75394373 --- /dev/null +++ b/app/components/ui/sidebar/SidebarProvider.vue @@ -0,0 +1,109 @@ + + + diff --git a/app/components/ui/sidebar/SidebarRail.vue b/app/components/ui/sidebar/SidebarRail.vue new file mode 100644 index 00000000..724cc23c --- /dev/null +++ b/app/components/ui/sidebar/SidebarRail.vue @@ -0,0 +1,35 @@ + + + diff --git a/app/components/ui/sidebar/SidebarSeparator.vue b/app/components/ui/sidebar/SidebarSeparator.vue new file mode 100644 index 00000000..8f64e25a --- /dev/null +++ b/app/components/ui/sidebar/SidebarSeparator.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/ui/sidebar/SidebarTrigger.vue b/app/components/ui/sidebar/SidebarTrigger.vue new file mode 100644 index 00000000..c6c806ff --- /dev/null +++ b/app/components/ui/sidebar/SidebarTrigger.vue @@ -0,0 +1,27 @@ + + + diff --git a/app/components/ui/sidebar/index.ts b/app/components/ui/sidebar/index.ts new file mode 100644 index 00000000..73706740 --- /dev/null +++ b/app/components/ui/sidebar/index.ts @@ -0,0 +1,62 @@ +import type { VariantProps } from 'class-variance-authority'; +import type { HTMLAttributes } from 'vue'; +import { cva } from 'class-variance-authority'; + +export interface SidebarProps { + side?: 'left' | 'right'; + variant?: 'sidebar' | 'floating' | 'inset'; + collapsible?: 'offcanvas' | 'icon' | 'none'; + class?: HTMLAttributes['class']; +} + +export { default as Sidebar } from './Sidebar.vue'; +export { default as SidebarContent } from './SidebarContent.vue'; +export { default as SidebarFooter } from './SidebarFooter.vue'; +export { default as SidebarGroup } from './SidebarGroup.vue'; +export { default as SidebarGroupAction } from './SidebarGroupAction.vue'; +export { default as SidebarGroupContent } from './SidebarGroupContent.vue'; +export { default as SidebarGroupLabel } from './SidebarGroupLabel.vue'; +export { default as SidebarHeader } from './SidebarHeader.vue'; +export { default as SidebarInput } from './SidebarInput.vue'; +export { default as SidebarInset } from './SidebarInset.vue'; +export { default as SidebarMenu } from './SidebarMenu.vue'; +export { default as SidebarMenuAction } from './SidebarMenuAction.vue'; +export { default as SidebarMenuBadge } from './SidebarMenuBadge.vue'; +export { default as SidebarMenuButton } from './SidebarMenuButton.vue'; +export { default as SidebarMenuItem } from './SidebarMenuItem.vue'; +export { default as SidebarMenuSkeleton } from './SidebarMenuSkeleton.vue'; +export { default as SidebarMenuSub } from './SidebarMenuSub.vue'; +export { default as SidebarMenuSubButton } from './SidebarMenuSubButton.vue'; +export { default as SidebarMenuSubItem } from './SidebarMenuSubItem.vue'; +export { default as SidebarProvider } from './SidebarProvider.vue'; +export { default as SidebarRail } from './SidebarRail.vue'; +export { default as SidebarSeparator } from './SidebarSeparator.vue'; +export { default as SidebarTrigger } from './SidebarTrigger.vue'; + +export { useSidebar } from './utils'; + +export const sidebarMenuButtonVariants = cva( + 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', + { + variants: { + variant: { + default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground', + outline: + 'bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]' + }, + size: { + default: 'h-8 text-sm', + sm: 'h-7 text-xs', + lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!' + } + }, + defaultVariants: { + variant: 'default', + size: 'default' + } + } +); + +export type SidebarMenuButtonVariants = VariantProps< + typeof sidebarMenuButtonVariants +>; diff --git a/app/components/ui/sidebar/utils.ts b/app/components/ui/sidebar/utils.ts new file mode 100644 index 00000000..4f471cbe --- /dev/null +++ b/app/components/ui/sidebar/utils.ts @@ -0,0 +1,19 @@ +import type { ComputedRef, Ref } from 'vue'; +import { createContext } from 'reka-ui'; + +export const SIDEBAR_COOKIE_NAME = 'sidebar_state'; +export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7; +export const SIDEBAR_WIDTH = '16rem'; +export const SIDEBAR_WIDTH_MOBILE = '18rem'; +export const SIDEBAR_WIDTH_ICON = '3rem'; +export const SIDEBAR_KEYBOARD_SHORTCUT = 'b'; + +export const [useSidebar, provideSidebarContext] = createContext<{ + state: ComputedRef<'expanded' | 'collapsed'>; + open: Ref; + setOpen: (value: boolean) => void; + isMobile: Ref; + openMobile: Ref; + setOpenMobile: (value: boolean) => void; + toggleSidebar: () => void; +}>('Sidebar'); diff --git a/app/components/ui/skeleton/Skeleton.vue b/app/components/ui/skeleton/Skeleton.vue new file mode 100644 index 00000000..9e7c77ba --- /dev/null +++ b/app/components/ui/skeleton/Skeleton.vue @@ -0,0 +1,17 @@ + + + diff --git a/app/components/ui/skeleton/index.ts b/app/components/ui/skeleton/index.ts new file mode 100644 index 00000000..38cc2bac --- /dev/null +++ b/app/components/ui/skeleton/index.ts @@ -0,0 +1 @@ +export { default as Skeleton } from './Skeleton.vue'; diff --git a/app/components/ui/tabs/Tabs.vue b/app/components/ui/tabs/Tabs.vue new file mode 100644 index 00000000..9b23171a --- /dev/null +++ b/app/components/ui/tabs/Tabs.vue @@ -0,0 +1,26 @@ + + + diff --git a/app/components/ui/tabs/TabsContent.vue b/app/components/ui/tabs/TabsContent.vue new file mode 100644 index 00000000..db7e9d8e --- /dev/null +++ b/app/components/ui/tabs/TabsContent.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/ui/tabs/TabsList.vue b/app/components/ui/tabs/TabsList.vue new file mode 100644 index 00000000..77c27719 --- /dev/null +++ b/app/components/ui/tabs/TabsList.vue @@ -0,0 +1,28 @@ + + + diff --git a/app/components/ui/tabs/TabsTrigger.vue b/app/components/ui/tabs/TabsTrigger.vue new file mode 100644 index 00000000..1bd19b23 --- /dev/null +++ b/app/components/ui/tabs/TabsTrigger.vue @@ -0,0 +1,30 @@ + + + diff --git a/app/components/ui/tabs/index.ts b/app/components/ui/tabs/index.ts new file mode 100644 index 00000000..8f5f7445 --- /dev/null +++ b/app/components/ui/tabs/index.ts @@ -0,0 +1,4 @@ +export { default as Tabs } from './Tabs.vue'; +export { default as TabsContent } from './TabsContent.vue'; +export { default as TabsList } from './TabsList.vue'; +export { default as TabsTrigger } from './TabsTrigger.vue'; diff --git a/app/components/ui/tooltip/Tooltip.vue b/app/components/ui/tooltip/Tooltip.vue new file mode 100644 index 00000000..46dd2443 --- /dev/null +++ b/app/components/ui/tooltip/Tooltip.vue @@ -0,0 +1,15 @@ + + + diff --git a/app/components/ui/tooltip/TooltipContent.vue b/app/components/ui/tooltip/TooltipContent.vue new file mode 100644 index 00000000..cf762a39 --- /dev/null +++ b/app/components/ui/tooltip/TooltipContent.vue @@ -0,0 +1,49 @@ + + + diff --git a/app/components/ui/tooltip/TooltipProvider.vue b/app/components/ui/tooltip/TooltipProvider.vue new file mode 100644 index 00000000..71bec268 --- /dev/null +++ b/app/components/ui/tooltip/TooltipProvider.vue @@ -0,0 +1,14 @@ + + + diff --git a/app/components/ui/tooltip/TooltipTrigger.vue b/app/components/ui/tooltip/TooltipTrigger.vue new file mode 100644 index 00000000..8bef43ca --- /dev/null +++ b/app/components/ui/tooltip/TooltipTrigger.vue @@ -0,0 +1,12 @@ + + + diff --git a/app/components/ui/tooltip/index.ts b/app/components/ui/tooltip/index.ts new file mode 100644 index 00000000..94e681c8 --- /dev/null +++ b/app/components/ui/tooltip/index.ts @@ -0,0 +1,4 @@ +export { default as Tooltip } from './Tooltip.vue'; +export { default as TooltipContent } from './TooltipContent.vue'; +export { default as TooltipProvider } from './TooltipProvider.vue'; +export { default as TooltipTrigger } from './TooltipTrigger.vue'; From 0fa43cb8970ccd13a843e32ca1200c44db903638 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 21:32:15 +0200 Subject: [PATCH 013/158] feat: drive the navbar, landing and footer from app.config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Everything a consumer would otherwise fork a component to change — title, navbar links (with dropdowns), icon links, the landing hero and its feature cards, the footer — is data in the layer's app.config.ts. Nuxt merges a consumer's own on top, so overriding one key does not mean copying the rest. The config carries a real interface rather than being inferred from the layer's literal. Without it, every optional key the layer happens not to use becomes a type error in a consumer that does use it. --- app/app.config.ts | 113 ++++++++++++++++++++++++++++++++++++++++++++ app/types/duxt.d.ts | 59 +++++++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 app/app.config.ts create mode 100644 app/types/duxt.d.ts diff --git a/app/app.config.ts b/app/app.config.ts new file mode 100644 index 00000000..ceb26b97 --- /dev/null +++ b/app/app.config.ts @@ -0,0 +1,113 @@ +// Layer defaults a consumer overrides in its own app.config.ts — Nuxt merges +// them, the consumer winning. Nothing here needs editing to get a site up. +export default defineAppConfig({ + duxt: { + /** Shown in the navbar and used as the SEO title. */ + title: 'duxt', + + /** Navbar links. An entry with `children` becomes a dropdown. */ + navigation: [ + { label: 'Docs', to: '/getting-started', icon: 'lucide:book-open-text' }, + { + label: 'Resources', + icon: 'lucide:library', + children: [ + { + label: 'Nuxt Content', + to: 'https://content.nuxt.com', + icon: 'lucide:file-text', + description: 'The engine underneath', + external: true + }, + { + label: 'shadcn-vue', + to: 'https://www.shadcn-vue.com', + icon: 'lucide:palette', + description: 'The component base', + external: true + } + ] + } + ], + + /** Icon links on the right of the navbar. */ + links: [ + { + icon: 'lucide:github', + to: 'https://github.com/kirchDev/duxt', + label: 'Repository' + } + ], + + /** The landing page at `/`. Drop your own index.vue to replace it wholesale. */ + landing: { + badge: 'Early days — nothing is decided', + headline: 'Documentation for Nuxt, versioned and multi-repo', + description: + 'Extend one layer and your docs/ folder becomes a site. Point it at other repositories, or at tags of the same one, and those become versions.', + actions: [ + { + label: 'Read the docs', + to: '/getting-started', + icon: 'lucide:arrow-right' + }, + { + label: 'GitHub', + to: 'https://github.com/kirchDev/duxt', + variant: 'outline', + external: true + } + ], + features: [ + { + title: "Extend, don't scaffold", + description: + 'One line of config brings theme, pages and components — override any file.', + icon: 'lucide:package' + }, + { + title: 'Sources as a list', + description: + 'One declaration per source instead of one collection per version and repo.', + icon: 'lucide:git-branch' + }, + { + title: 'Git-native, not reinvented', + description: + 'Branches, tags, private repos and caching come from Content v3 itself.', + icon: 'lucide:git-merge' + }, + { + title: 'shadcn-vue', + description: + 'Components are copied in, not imported. Restyling one is editing a file.', + icon: 'lucide:palette' + }, + { + title: 'Components in Markdown', + description: + 'MDC ships with Content — call a Vue component with block syntax.', + icon: 'lucide:code' + }, + { + title: 'Machine-readable', + description: + 'llms.txt and an MCP route over the same content, planned as build output.', + icon: 'lucide:bot' + } + ] + }, + + /** Footer columns and the line below them. */ + footer: { + note: 'Built with duxt.', + links: [ + { + label: 'Source', + to: 'https://github.com/kirchDev/duxt', + external: true + } + ] + } + } +}); diff --git a/app/types/duxt.d.ts b/app/types/duxt.d.ts new file mode 100644 index 00000000..521a99ae --- /dev/null +++ b/app/types/duxt.d.ts @@ -0,0 +1,59 @@ +/** A navbar, footer or landing link. `children` turns a navbar entry into a dropdown. */ +interface DuxtLink { + label: string; + to?: string; + icon?: string; + description?: string; + external?: boolean; + children?: DuxtLink[]; +} + +interface DuxtAction extends DuxtLink { + variant?: + | 'default' + | 'secondary' + | 'outline' + | 'ghost' + | 'link' + | 'destructive'; +} + +interface DuxtFeature { + title: string; + description?: string; + icon?: string; +} + +interface DuxtLanding { + badge?: string; + headline?: string; + description?: string; + actions?: DuxtAction[]; + features?: DuxtFeature[]; +} + +interface DuxtConfig { + title: string; + navigation?: DuxtLink[]; + links?: DuxtLink[]; + landing?: DuxtLanding; + footer?: { + note?: string; + links?: DuxtLink[]; + }; +} + +// Typing the config is what makes a consumer's override checkable — without +// this it is inferred structurally from the layer's own literal, and every +// optional key the layer happens not to use becomes a type error downstream. +declare module 'nuxt/schema' { + interface AppConfigInput { + duxt?: Partial; + } + + interface AppConfig { + duxt: DuxtConfig; + } +} + +export {}; From fe77698578bc541ccf327b727838bdfd27d3c24c Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 21:32:25 +0200 Subject: [PATCH 014/158] feat: split the landing page from the docs view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The landing page is its own route now, full width, no sidebar — and its own file, so a consumer replaces it by dropping an index.vue rather than by configuring around it. It was a Markdown page picking a layout at runtime, which cost an SSR crash: setPageLayout() after an await runs without a component context. The docs view keeps the two sidebars: navigation left, table of contents right. The navigation is built on shadcn's Sidebar primitives inside their provider, so restyling SidebarMenuButton restyles the docs tree with it. The spike page moves off "/" to /spike, where it stops shadowing the landing page. --- app/components/DuxtFooter.vue | 24 ++++++ app/components/DuxtHeader.vue | 115 ++++++++++++++++++++++++- app/components/DuxtNavigation.vue | 71 ++++++++------- app/layouts/default.vue | 16 +--- app/layouts/docs.vue | 29 +++++++ app/pages/[...slug].vue | 32 ++++--- app/pages/index.vue | 77 +++++++++++++++++ www/app/pages/{index.vue => spike.vue} | 2 +- 8 files changed, 302 insertions(+), 64 deletions(-) create mode 100644 app/components/DuxtFooter.vue create mode 100644 app/layouts/docs.vue create mode 100644 app/pages/index.vue rename www/app/pages/{index.vue => spike.vue} (92%) diff --git a/app/components/DuxtFooter.vue b/app/components/DuxtFooter.vue new file mode 100644 index 00000000..0820bd43 --- /dev/null +++ b/app/components/DuxtFooter.vue @@ -0,0 +1,24 @@ + + + diff --git a/app/components/DuxtHeader.vue b/app/components/DuxtHeader.vue index 81b6bf5b..d1b36e1e 100644 --- a/app/components/DuxtHeader.vue +++ b/app/components/DuxtHeader.vue @@ -1,22 +1,129 @@