kmcom-nuxt-layers 5.0.0 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,48 @@
1
+ # Peer Dependency Mismatches
2
+
3
+ ## Context
4
+
5
+ Checked on 2026-10-16 against the `KMCOMv5/frontend` consumer after upgrading its dependencies. `pnpm peers check` reports four unmet peers from `kmcom-nuxt-layers@5.0.0`:
6
+
7
+ | Package | Consumer version | Current layer peer range | Suggested supported majors, after testing |
8
+ | ---------------- | ---------------- | ------------------------ | ----------------------------------------- |
9
+ | `@nuxtjs/seo` | `6.0.1` | `^5.0.0` | 5 and 6 |
10
+ | `@vueuse/nuxt` | `15.0.0` | `^14.3.0` | 14 and 15 |
11
+ | `better-sqlite3` | `13.0.3` | `^12.10.0` | 12 and 13 |
12
+ | `pinia` | `4.1.0` | `^3.0.4` | 3 and 4 |
13
+
14
+ Suggested `peerDependencies` values:
15
+
16
+ ```json
17
+ {
18
+ "@nuxtjs/seo": "^5.0.0 || ^6.0.0",
19
+ "@vueuse/nuxt": "^14.3.0 || ^15.0.0",
20
+ "better-sqlite3": "^12.10.0 || ^13.0.0",
21
+ "pinia": "^3.0.4 || ^4.1.0"
22
+ }
23
+ ```
24
+
25
+ These ranges are proposals, not proof of compatibility. A peer range is a support promise: widen it only after the layer code and tests pass against the new major. `@pinia/nuxt@1.0.3` itself requires `pinia@^4.1.0`, so the consumer's Pinia 4 pairing is intentional.
26
+
27
+ ## Recommended Fix
28
+
29
+ 1. In the layers repo root `package.json`, update the four entries under `peerDependencies` to the proposed ranges above. Keep their existing `peerDependenciesMeta` optional flags; these packages are optional for consumers that do not use those layers.
30
+ 2. Align the layers repo's development catalog and test dependencies with the versions being claimed. In particular, test Pinia 4 together with `@pinia/nuxt` 1, not the existing Pinia 3 test setup.
31
+ 3. Run the affected layer checks and tests, then build the playground with the SEO, VueUse, and database layers enabled. Check both the currently supported older majors and the new majors where practical. If an older major is no longer supported, remove it from the range and document the minimum instead of claiming compatibility.
32
+ 4. Publish a patch release if the change only adds verified compatibility to the existing v5 contract. Use a breaking release if layer APIs or supported behavior must change.
33
+ 5. In the frontend consumer, reinstall and run `pnpm peers check`. Do not silence these warnings with `allowedVersions` or overrides; those mechanisms do not establish runtime compatibility.
34
+
35
+ ## Separate Transitive Warnings
36
+
37
+ The same consumer check also reported two warnings that do not come from `kmcom-nuxt-layers`' peer declarations:
38
+
39
+ | Package | Installed | Requested by `unctx@3.0.1` |
40
+ | ------------ | --------- | -------------------------- |
41
+ | `oxc-parser` | `0.139.0` | `>=0.140.0` |
42
+ | `unplugin` | `2.3.11` | `^3.3.0` |
43
+
44
+ Trace these with `pnpm why unctx` in the consumer and inspect the resolved dependency chain. Update the dependency that brings in `unctx` or move to a compatible `unctx` release; only use an override after confirming the affected packages support the overridden versions. Keep this investigation separate from the four layer peer-range changes.
45
+
46
+ ## Runtime Note
47
+
48
+ `@nuxtjs/seo@6.0.1` declares Node support for `^22.22.3 || ^24.15.0 || >=26.0.0`. The frontend check used Node `24.22.0`, which is supported. Consumers on Node 25 or earlier Node 24 releases are outside that declared range and should not be considered covered by this upgrade.
@@ -0,0 +1,246 @@
1
+ # Migrating to Vite+ (nuxt-layers v5.0.0)
2
+
3
+ **Audience:** a developer or AI coding agent updating a downstream Nuxt app that consumes
4
+ `kmcom-nuxt-layers`, and wants the same toolchain this repo moved to in v5.0.0.
5
+
6
+ > Using the layers does **not** force you onto Vite+. The layers are plain Nuxt layers and keep
7
+ > working in an app on stock Vite/Vitest/Prettier. This guide is for apps that want to adopt the
8
+ > same toolchain. Sections 1–2 say what changed in the repo; sections 3–9 are the steps.
9
+
10
+ Work top to bottom. Each step has a **Detect** (does it apply?) and an **Apply**. Run the
11
+ **Verify** checklist at the end before calling it done. Where this guide and the repo disagree,
12
+ the repo wins — the reference files are listed at the bottom.
13
+
14
+ ## 1. What Vite+ is, and what v5.0.0 changed
15
+
16
+ [Vite+](https://viteplus.dev) (`vp`, package `vite-plus`) is one CLI over the Vite ecosystem:
17
+ dev/build (Vite), test (Vitest), lint (oxlint), format (oxfmt), and a managed Node runtime.
18
+
19
+ In this repo the migration (`vp migrate`, then hand fixes) did:
20
+
21
+ | Area | Before | After |
22
+ | --------- | ---------------------------------- | -------------------------------------------------------------- |
23
+ | Vite | `vite: ^8` | `vite: npm:@voidzero-dev/vite-plus-core@1.2.0` (catalog alias) |
24
+ | Vitest | `vitest ^4` | `vitest 5.0.4` + `@vitest/coverage-v8 5.0.4` |
25
+ | Test API | `import … from 'vitest'` | `import … from 'vite-plus/test'` |
26
+ | Formatter | Prettier + 6 plugins | oxfmt (`vp fmt`), config in `vite.config.ts` |
27
+ | Linter | ESLint only | `vp lint` (oxlint) chained before the per-package ESLint |
28
+ | Scripts | `vitest run`, `prettier --write .` | `vp test run`, `vp fmt .` |
29
+ | Node file | `.nvmrc` | `.node-version` |
30
+ | pnpm | 11 | 12 (`packageManager: pnpm@12.10.1`) |
31
+ | `nuxt` | `latest` | pinned `4.6.1` |
32
+
33
+ **Breaking for consumers:** Node 24 only (`engines: >=24 <25`), and the toolchain/script names
34
+ above. The layers' runtime behaviour is unchanged.
35
+
36
+ ## 2. Preconditions
37
+
38
+ - Node 24 (`node -v`). Vite+ can manage this for you via `.node-version`.
39
+ - pnpm 12 (`corepack enable && corepack use pnpm@12`). pnpm 10/11 will not read the new settings
40
+ locations in step 4.
41
+ - A clean git tree, on a new branch. `vp migrate` rewrites many files.
42
+
43
+ ## 3. Install Vite+ and run the migration
44
+
45
+ **Detect:** your `package.json` has `vite`, `vitest`, or `prettier` in `devDependencies`.
46
+
47
+ **Apply:**
48
+
49
+ ```bash
50
+ git switch -c chore/migrate-to-vite-plus
51
+ vp migrate # rewrites vite/vitest deps, test imports, scripts, prettier → oxfmt
52
+ pnpm install
53
+ ```
54
+
55
+ `vp migrate` handles the mechanical parts: dependency swap, `vitest` → `vite-plus/test` imports,
56
+ script renames, `.nvmrc` → `.node-version`. Review the diff before moving on — it is the source
57
+ of truth for what changed in _your_ app.
58
+
59
+ If you use a pnpm catalog, point `vite` / `vitest` / `@vitest/coverage-v8` at the Vite+ entries
60
+ (see the table in section 1) and add overrides so transitive deps resolve to the same copy:
61
+
62
+ ```yaml
63
+ # pnpm-workspace.yaml
64
+ overrides:
65
+ vite@*: 'catalog:'
66
+ vitest@*: 'catalog:'
67
+ ```
68
+
69
+ ## 4. pnpm 12 settings (don't skip)
70
+
71
+ **Detect:** your `.npmrc` contains `shamefully-hoist` or `strict-peer-dependencies`.
72
+
73
+ pnpm 12 **ignores those keys in `.npmrc`**. Symptom: dev server dies with
74
+ `"extend" … no default export` (a CJS interop failure from a package that is no longer hoisted).
75
+
76
+ **Apply:** move them to `pnpm-workspace.yaml` (create it for single-package projects):
77
+
78
+ ```yaml
79
+ shamefullyHoist: true
80
+ strictPeerDependencies: false
81
+ ```
82
+
83
+ Keep `allowBuilds` for packages with install scripts (`esbuild`, `sharp`, `@parcel/watcher`, …).
84
+
85
+ ## 5. Pin Nuxt (and the Vite builder patch)
86
+
87
+ **Detect:** your `nuxt` version is `latest` or a loose range.
88
+
89
+ This repo patches `@nuxt/vite-builder` (a `listenAndRestrict` `ENOENT` guard on the vite-node
90
+ socket chmod). A pnpm patch targets an **exact** version, so an unpinned `nuxt` silently breaks it
91
+ on the next release.
92
+
93
+ **Apply:**
94
+
95
+ 1. Pin `nuxt` to an exact version (this repo: `4.6.1`).
96
+ 2. Only if you hit `NUXT_B7018` on the vite-node socket, copy
97
+ `patches/@nuxt__vite-builder@4.6.1.patch` and register it:
98
+
99
+ ```yaml
100
+ patchedDependencies:
101
+ '@nuxt/vite-builder@4.6.1': patches/@nuxt__vite-builder@4.6.1.patch
102
+ ```
103
+
104
+ If you do not hit that error, you do not need the patch. Patches are **not** inherited from the
105
+ layers package — they only apply where declared.
106
+
107
+ ## 6. Declare `typescript` in every app
108
+
109
+ **Detect:** `pnpm why typescript` shows two versions (e.g. 5.9.3 and 6.0.3), or
110
+ `@nuxt/test-utils` fails with
111
+ `Failed to resolve import "./diagnostics/core.js" from … nuxt-vitest-app-entry.js`.
112
+
113
+ pnpm builds a separate `nuxt` install per set of resolved peers. If an app doesn't declare
114
+ `typescript`, it can resolve a different TS than the rest of the workspace and get a `nuxt`
115
+ variant whose generated test entry can't find its own files.
116
+
117
+ **Apply:** add `"typescript": "catalog:"` (or the same range as the rest of the repo) to each
118
+ app's `devDependencies`, then `pnpm install`. Confirm one `nuxt` variant per app with
119
+ `ls -d node_modules/.pnpm/nuxt@*`.
120
+
121
+ ## 7. Replace Prettier with oxfmt
122
+
123
+ **Detect:** `prettier`, `prettier-plugin-*`, `.prettierrc*`, or `prettier` scripts exist.
124
+
125
+ **Apply:**
126
+
127
+ - Delete Prettier and every plugin from `devDependencies`, and remove `eslint-plugin-prettier` /
128
+ `stylelint-prettier` from your ESLint and Stylelint configs.
129
+ - Put formatter options in `vite.config.ts` under `fmt` (this repo: no semicolons, single quotes,
130
+ ES5 trailing commas, 100 columns, `sortTailwindcss: {}`, `vueIndentScriptAndStyle: true`).
131
+ - Move `.prettierignore` entries into `fmt.ignorePatterns`.
132
+ - Scripts: `"format": "vp fmt ."`, `"format:check": "vp fmt --check ."`.
133
+ - Run `vp fmt .` once as its own commit (`style: format with oxfmt`) so it stays out of review diffs.
134
+
135
+ Expect small differences from Prettier output (quote style in CSS `@import`, JSON line widths).
136
+ Reformatting generated baselines or lockfiles is churn — ignore them.
137
+
138
+ ## 8. Lint: oxlint first, ESLint second
139
+
140
+ **Apply:**
141
+
142
+ ```ts
143
+ // vite.config.ts
144
+ import { defineConfig } from 'vite-plus'
145
+
146
+ export default defineConfig({
147
+ lint: {
148
+ jsPlugins: [{ name: 'vite-plus', specifier: 'vite-plus/oxlint-plugin' }],
149
+ rules: { 'vite-plus/prefer-vite-plus-imports': 'error' },
150
+ // Nuxt auto-imports are invisible to oxlint's type analysis — keep these off
151
+ // or every `ref`/`computed`/`useFetch` is reported as undefined.
152
+ options: { typeAware: false, typeCheck: false },
153
+ },
154
+ })
155
+ ```
156
+
157
+ ```jsonc
158
+ // package.json
159
+ "lint": "vp lint && turbo run lint", // or just `vp lint && eslint .` without Turbo
160
+ "lint:fix": "vp lint --fix && turbo run lint -- --fix"
161
+ ```
162
+
163
+ `vp lint` is the built-in oxlint with rules from `vite.config.ts`; `pnpm lint` runs your
164
+ `package.json` script. They are different commands.
165
+
166
+ ### Stylelint with Tailwind v4
167
+
168
+ If you run Stylelint, these false positives are expected with Tailwind v4 and layer CSS:
169
+
170
+ - `at-rule-no-unknown` / `no-invalid-position-at-import-rule`: ignore `layer`, `config`,
171
+ `custom-variant`, `source`, `plugin`, `utility`, `variant`.
172
+ - `no-invalid-position-declaration`: off for `.vue`.
173
+ - `value-keyword-case`: ignore font properties and `--*font*` custom properties.
174
+ - `declaration-no-important`: allow only in files that implement user-preference overrides
175
+ (reduced motion / transparency) that must beat utilities and inline styles. Scope it with an
176
+ `overrides` entry — do not disable it globally.
177
+ - Ignore `**/dist/**`, `**/.output/**`, `**/.nuxt/**`.
178
+
179
+ ## 9. Tests
180
+
181
+ **Apply:**
182
+
183
+ - `vitest` imports → `vite-plus/test` (done by `vp migrate`; `vite-plus/prefer-vite-plus-imports`
184
+ keeps it that way).
185
+ - Scripts: `"test": "vp test run"`, `"test:watch": "vp test"`, `"test:coverage": "vp test run --coverage"`.
186
+ - If tests relied on mock call history surviving between tests, keep
187
+ `test: { clearMocks: false }` in `vite.config.ts` (newer Vitest versions clear mocks by default).
188
+ - `@nuxt/test-utils` projects (`defineVitestProject`) keep working; see step 6 if they fail to load.
189
+ - Playwright: the repo's Playwright wants its own browser build. Run
190
+ `pnpm exec playwright install chromium` (not a globally installed Playwright) before e2e.
191
+ Stop dev servers with `pkill -f "nuxt dev"` **and** delete a stale
192
+ `apps/<app>/.nuxt/nuxt.lock` if the next start says "Another Nuxt dev server is already running".
193
+
194
+ ## 10. Nuxt-specific issues you may meet
195
+
196
+ These came up during this migration and are independent of Vite+ itself:
197
+
198
+ - **Hydration mismatches** after changing theme state: don't read `localStorage` during plugin
199
+ setup — apply stored prefs in `useNuxtApp().hook('app:mounted', …)`, and keep per-page state in
200
+ `useState`. A Playwright spec that fails on any `hydrat` console message is a cheap guard
201
+ (see `tests/playwright/hydration.spec.ts`).
202
+ - **`NUXT_E4004` / "Component inside `<Transition>` renders non-element root node"**: a page root
203
+ that is a fragment (multiple roots, a root-level HTML comment, or a renderless provider like
204
+ `ShaderRuntime`). Wrap in `<div class="contents">` — `display: contents` generates no box, so
205
+ grid children still lay out as direct children of the parent grid.
206
+ - **jiti warnings for layer configs**: use explicit `.ts` extensions in layer `nuxt.config.ts`
207
+ relative imports.
208
+ - **Dev prebundling**: this repo adds `@vue/devtools-core` to `vite.optimizeDeps.include`
209
+ (see `apps/playground/nuxt.config.ts`) so dev doesn't re-optimise it on first load. Only needed
210
+ if you see repeated dependency re-optimisation reloads.
211
+
212
+ ## Verify checklist
213
+
214
+ Run all of these; every one should be clean.
215
+
216
+ ```bash
217
+ pnpm install --frozen-lockfile # lockfile consistent
218
+ vp fmt --check . # formatting
219
+ command vp lint # oxlint, 0 warnings
220
+ pnpm lint # oxlint + ESLint across packages
221
+ pnpm typecheck # vue-tsc
222
+ vp test run # unit / nuxt-env tests
223
+ pnpm test:e2e # Playwright (needs matching chromium)
224
+ pnpm build # production build
225
+ ```
226
+
227
+ Also: `ls -d node_modules/.pnpm/nuxt@*` shows one variant per app, `pnpm why typescript` shows one
228
+ version, and the dev server starts with no `no default export` error.
229
+
230
+ ## Rollback
231
+
232
+ The migration is mechanical and lives on one branch. To back out: `git revert` the migration and
233
+ format commits, restore `.nvmrc`, and `pnpm install`. Nothing in the layers package requires
234
+ Vite+, so rolling back does not break layer consumption.
235
+
236
+ ## Reference files in this repo
237
+
238
+ | Topic | File |
239
+ | ---------------------- | ----------------------------------------- |
240
+ | Vite+ config | `vite.config.ts` |
241
+ | Catalog / overrides | `pnpm-workspace.yaml` |
242
+ | Scripts | `package.json` |
243
+ | Builder patch | `patches/@nuxt__vite-builder@4.6.1.patch` |
244
+ | Stylelint overrides | `stylelint.config.mjs` |
245
+ | Hydration spec | `tests/playwright/hydration.spec.ts` |
246
+ | Migration PR / release | PR #57, #58; release `v5.0.0` |
@@ -17,8 +17,8 @@
17
17
  source/import order still decides the winner. */
18
18
  @layer theme, base, components, utilities;
19
19
 
20
- @import "tailwindcss";
21
- @import "@nuxt/ui";
20
+ @import 'tailwindcss';
21
+ @import '@nuxt/ui';
22
22
 
23
23
  @config '#layers/core/tailwind.config.js';
24
24
 
@@ -28,18 +28,18 @@
28
28
  @source '../../../../*/app/**/*.{vue,ts}';
29
29
  @source '../../../../../apps/*/app/**/*.{vue,ts}';
30
30
 
31
- @import "#layers/core/app/assets/css/layout.css";
32
- @import "#layers/core/app/assets/css/base.css";
33
- @import "#layers/core/app/assets/css/tokens/breakpoints.css";
34
- @import "#layers/core/app/assets/css/tokens/spacing-fluid.css";
35
- @import "#layers/core/app/assets/css/tokens/container.css";
31
+ @import '#layers/core/app/assets/css/layout.css';
32
+ @import '#layers/core/app/assets/css/base.css';
33
+ @import '#layers/core/app/assets/css/tokens/breakpoints.css';
34
+ @import '#layers/core/app/assets/css/tokens/spacing-fluid.css';
35
+ @import '#layers/core/app/assets/css/tokens/container.css';
36
36
 
37
37
  /* Relative path, not the '#layers/typography' alias — that alias only exists
38
38
  when the typography layer is in a consumer's `extends`. This file is a CSS
39
39
  import (needed so Tailwind treats it as part of this one build root, see
40
40
  typography.css's header comment), and must resolve even for consumers that
41
41
  only extend core, since it lives in the same single published package. */
42
- @import "../../../../design-system/typography/app/assets/css/typography.css";
42
+ @import '../../../../design-system/typography/app/assets/css/typography.css';
43
43
 
44
44
  /* Same relative-path requirement as typography.css above. tokens.css defines
45
45
  an `@theme static` block (radius/shadow/duration) — per the CSS
@@ -51,4 +51,4 @@
51
51
  every rounded-, shadow-, duration- utility fell back to Tailwind's stock
52
52
  defaults instead of this file's values. Confirmed via compiled dev output:
53
53
  the custom --shadow-sm value never appeared; Tailwind's built-in default did. */
54
- @import "../../../../design-system/theming/app/assets/css/tokens.css";
54
+ @import '../../../../design-system/theming/app/assets/css/tokens.css';
@@ -1,4 +1,4 @@
1
- import type { Plugin } from 'vite'
1
+ import type { Plugin } from 'vite-plus'
2
2
 
3
3
  /**
4
4
  * Intercepts three.webgpu.js in SSR via the transform hook.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "kmcom-nuxt-layers",
3
3
  "private": false,
4
- "version": "5.0.0",
4
+ "version": "5.0.1",
5
5
  "description": "Composable Nuxt 4 layers for building scalable Vue applications",
6
6
  "exports": {
7
7
  "./layers/core": "./layers/core/nuxt.config.ts",
@@ -77,18 +77,18 @@
77
77
  "@nuxt/scripts": "^0.11.0 || ^1.0.0",
78
78
  "@nuxt/ui": "^4.8.1",
79
79
  "@nuxtjs/device": "^4.0.0",
80
- "@nuxtjs/seo": "^5.0.0",
80
+ "@nuxtjs/seo": "^5.0.0 || ^6.0.0",
81
81
  "@tresjs/cientos": "^5.7.2",
82
82
  "@tresjs/core": "^5.8.1",
83
83
  "@tresjs/nuxt": "^5.6.1",
84
84
  "@tresjs/post-processing": "^3.7.2",
85
85
  "@vite-pwa/nuxt": "^1.1.1",
86
- "@vueuse/nuxt": "^14.3.0",
87
- "better-sqlite3": "^12.10.0",
86
+ "@vueuse/nuxt": "^14.3.0 || ^15.0.0",
87
+ "better-sqlite3": "^12.10.0 || ^13.0.0",
88
88
  "gsap": "^3.15.0",
89
89
  "locomotive-scroll": "^5.0.1",
90
90
  "nuxt": "^4.4.7",
91
- "pinia": "^3.0.4",
91
+ "pinia": "^3.0.4 || ^4.1.0",
92
92
  "tailwindcss": "^4.3.0",
93
93
  "three": ">=0.184.0",
94
94
  "v-gsap-nuxt": ">=1.5.12",
@@ -148,8 +148,6 @@
148
148
  }
149
149
  },
150
150
  "devDependencies": {
151
- "@commitlint/cli": "^21.0.2",
152
- "@commitlint/config-conventional": "^21.0.2",
153
151
  "@culur/config-stylelint": "^1.7.2",
154
152
  "@eslint/json": "^1.2.0",
155
153
  "@eslint/markdown": "^8.0.3",
@@ -161,7 +159,8 @@
161
159
  "@nuxt/test-utils": "^4.0.3",
162
160
  "@nuxt/ui": "latest",
163
161
  "@nuxtjs/device": "^4.0.0",
164
- "@oxc-parser/binding-darwin-arm64": "^0.134.0",
162
+ "@nuxtjs/seo": "^5.0.0",
163
+ "better-sqlite3": "^12.10.0",
165
164
  "@perplex-digital/stylelint-config": "^17.4.0",
166
165
  "@pinia/nuxt": "^0.11.3",
167
166
  "@playwright/test": "1.61.0",
@@ -170,7 +169,7 @@
170
169
  "@typescript-eslint/eslint-plugin": "^8.60.1",
171
170
  "@typescript-eslint/parser": "^8.60.1",
172
171
  "@vitejs/plugin-vue": "^6.0.8",
173
- "@vitest/coverage-v8": "5.0.4",
172
+ "@vitest/coverage-v8": "5.0.5",
174
173
  "@vue/eslint-config-typescript": "^14.7.0",
175
174
  "@vue/test-utils": "^2.4.10",
176
175
  "@vueuse/core": "^14.3.0",
@@ -179,16 +178,10 @@
179
178
  "@webgpu/types": "^0.1.72",
180
179
  "browserslist": "^4.28.8",
181
180
  "browserslist-config-baseline": "^0.5.0",
182
- "changesets": "^1.0.2",
183
181
  "csstype": "^3.2.3",
184
- "cypress": "^15.16.0",
185
- "depcheck": "^1.4.7",
186
182
  "eslint": "^10.4.1",
187
183
  "eslint-plugin-compat": "^7.0.2",
188
- "eslint-plugin-glsl": "0.0.0-wip",
189
184
  "eslint-plugin-pnpm": "^1.6.1",
190
- "eslint-plugin-unicorn": "^64.0.0",
191
- "eslint-plugin-unused-imports": "^4.4.1",
192
185
  "eslint-plugin-vue": "^10.9.2",
193
186
  "fallow": "^2.92.1",
194
187
  "happy-dom": "^20.10.3",
@@ -208,12 +201,12 @@
208
201
  "type-fest": "^5.7.0",
209
202
  "typescript": "^6",
210
203
  "vite-plugin-checker": "^0.14.5",
211
- "vitest": "5.0.4",
204
+ "vitest": "5.0.5",
212
205
  "vue": "3.5.35",
213
206
  "vue-tsc": "3.3.11",
214
207
  "zod": "^4.4.3",
215
208
  "zod-to-json-schema": "^3.25.2",
216
- "vite-plus": "1.2.0"
209
+ "vite-plus": "1.3.0"
217
210
  },
218
211
  "browserslist": [
219
212
  "last 2 Chrome major versions",