From 868a8c9e7fdb95332ece21285a1c9e70a2765ca3 Mon Sep 17 00:00:00 2001 From: Romain Hamel Date: Fri, 29 Aug 2025 16:55:47 +0200 Subject: [PATCH 01/16] feat(testing): setup --- packages/core/build.config.ts | 1 - packages/core/package.json | 3 +- packages/core/src/index.ts | 18 +- packages/core/src/plugins/collections.ts | 125 +- packages/core/src/plugins/colors.ts | 1 + packages/core/src/plugins/devtools.ts | 2 +- packages/core/src/plugins/examples.ts | 1 + packages/core/src/plugins/iconify.ts | 2 + packages/core/src/plugins/meta/index.ts | 65 +- packages/core/src/runtime/preview.vue | 5 - packages/core/src/runtime/root.vue | 25 +- packages/core/src/types.ts | 19 +- .../app/components/ComboInputMenu.vue | 101 ++ .../app/components/ComponentCodeTab.vue | 63 + .../components/ComponentCollectionMenu.vue | 20 +- .../app/components/ComponentEventsTab.vue | 67 + .../app/components/ComponentPropsTab.vue | 124 ++ .../app/components/ComponentTestsTab.vue | 57 + .../app/components/inputs/ArrayInput.vue | 4 +- .../app/components/inputs/ObjectInput.vue | 2 +- .../app/components/inputs/PropInput.vue | 182 +++ .../app/components/testing/TestMenu.vue | 168 +++ .../app/components/testing/TestResult.vue | 89 ++ .../app/components/testing/TestStatusIcon.vue | 31 + .../app/composables/useComponentTests.ts | 108 ++ .../devtools/app/composables/useViteClient.ts | 33 + packages/devtools/app/pages/components.vue | 60 +- packages/devtools/package.json | 6 +- packages/testing/.gitignore | 81 ++ packages/testing/LICENSE | 9 + packages/testing/README.md | 125 ++ packages/testing/build.config.ts | 14 + packages/testing/package.json | 47 + packages/testing/src/e2e/index.ts | 55 + packages/testing/src/index.ts | 10 + packages/testing/src/plugins/reporter.ts | 100 ++ packages/testing/src/plugins/vitest.ts | 107 ++ packages/testing/src/types.ts | 19 + packages/testing/src/unit/index.ts | 40 + packages/testing/tsconfig.json | 17 + packages/vue/src/plugins/renderer.ts | 8 +- playgrounds/vue/package.json | 7 +- .../vue/src/components/CompodiumWelcome.vue | 8 +- playgrounds/vue/src/main.ts | 1 - playgrounds/vue/test/CompodiumWelcome.spec.ts | 20 + .../CompodiumWelcome.spec.ts.snap | 18 + playgrounds/vue/vite.config.ts | 9 +- pnpm-lock.yaml | 1239 +++++++++++++++-- vitest.config.ts | 5 +- 49 files changed, 3068 insertions(+), 253 deletions(-) create mode 100644 packages/devtools/app/components/ComboInputMenu.vue create mode 100644 packages/devtools/app/components/ComponentCodeTab.vue create mode 100644 packages/devtools/app/components/ComponentEventsTab.vue create mode 100644 packages/devtools/app/components/ComponentPropsTab.vue create mode 100644 packages/devtools/app/components/ComponentTestsTab.vue create mode 100644 packages/devtools/app/components/inputs/PropInput.vue create mode 100644 packages/devtools/app/components/testing/TestMenu.vue create mode 100644 packages/devtools/app/components/testing/TestResult.vue create mode 100644 packages/devtools/app/components/testing/TestStatusIcon.vue create mode 100644 packages/devtools/app/composables/useComponentTests.ts create mode 100644 packages/devtools/app/composables/useViteClient.ts create mode 100644 packages/testing/.gitignore create mode 100644 packages/testing/LICENSE create mode 100644 packages/testing/README.md create mode 100644 packages/testing/build.config.ts create mode 100644 packages/testing/package.json create mode 100644 packages/testing/src/e2e/index.ts create mode 100644 packages/testing/src/index.ts create mode 100644 packages/testing/src/plugins/reporter.ts create mode 100644 packages/testing/src/plugins/vitest.ts create mode 100644 packages/testing/src/types.ts create mode 100644 packages/testing/src/unit/index.ts create mode 100644 packages/testing/tsconfig.json create mode 100644 playgrounds/vue/test/CompodiumWelcome.spec.ts create mode 100644 playgrounds/vue/test/__snapshots__/CompodiumWelcome.spec.ts.snap diff --git a/packages/core/build.config.ts b/packages/core/build.config.ts index 5e4c37ff..f9e289ff 100644 --- a/packages/core/build.config.ts +++ b/packages/core/build.config.ts @@ -8,7 +8,6 @@ export default defineBuildConfig({ { builder: 'copy', input: './src/runtime', outDir: './dist/runtime' } ], replace: { - 'process.env.COMPODIUM_TEST': 'false', 'process.env.COMPODIUM_DEVTOOLS_URL': undefined } }) diff --git a/packages/core/package.json b/packages/core/package.json index 8c298bb8..cfc9e14e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -33,11 +33,12 @@ "typecheck": "tsc --noEmit" }, "peerDependencies": { + "@compodium/testing": "workspace:^", "vite": ">=6", "vue": ">=3" }, "peerDependenciesMeta": { - "vite": { + "@compodium/testing": { "optional": true } }, diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 97623298..6d1ff5e2 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,3 +1,4 @@ +import type { Plugin } from 'vite' import { collectionsPlugin } from './plugins/collections' import { extendMetaPlugin, metaPlugin } from './plugins/meta' import { examplePlugin } from './plugins/examples' @@ -8,8 +9,8 @@ import type { PluginOptions } from './types' export * from './types' -export const compodium = /* #__PURE__ */ (options: PluginOptions) => { - return [ +export const compodium = /* #__PURE__ */ async (options: PluginOptions) => { + const plugins: Plugin[] = [ collectionsPlugin(options), metaPlugin(options), extendMetaPlugin(options), @@ -18,4 +19,17 @@ export const compodium = /* #__PURE__ */ (options: PluginOptions) => { iconifyPlugin(options), colorsPlugin(options) ] + + if (options.testing?.enabled) { + try { + const { compodiumTesting } = await import('@compodium/testing') + compodiumTesting(options).forEach(p => plugins.push(p)) + } catch { + throw new Error( + 'The `@compodium/testing` package is required when tests are enabled.' + ) + } + } + + return plugins } diff --git a/packages/core/src/plugins/collections.ts b/packages/core/src/plugins/collections.ts index c15eaf42..d213a88e 100644 --- a/packages/core/src/plugins/collections.ts +++ b/packages/core/src/plugins/collections.ts @@ -7,6 +7,9 @@ import { resolve } from 'pathe' import { joinURL } from 'ufo' import type { ResolvedConfig } from 'vite' +const VIRTUAL_MODULE_ID = 'virtual:compodium/collections' +const RESOLVED_VIRTUAL_MODULE_ID = '\0' + VIRTUAL_MODULE_ID + export function resolveCollections(options: PluginOptions, viteConfig: ResolvedConfig): Collection[] { const rootDir = options.rootDir ?? viteConfig.root @@ -54,52 +57,76 @@ export function resolveCollections(options: PluginOptions, viteConfig: ResolvedC ] } +async function generateCollectionsData(collections: Collection[]) { + const result = await Promise.all(collections.map(async (col) => { + const components = await scanComponents(col.dirs) + const examples = await scanComponents([col.exampleDir]) + + const collectionComponents = components.flatMap((c) => { + const componentExamples = examples?.filter(e => e.pascalName.startsWith(`${c.pascalName}Example`)).map(e => ({ + ...e, + isExample: true, + componentPath: c.filePath, + componentName: c.pascalName, + collectionName: col.name + })) + + const mainExample = componentExamples.find(e => e.pascalName === `${c.pascalName}Example`) + const component = mainExample ?? c + + if (col.name !== 'Components' && !mainExample) return [] + + return [{ + ...component, + wrapperComponent: col.wrapperComponent, + docUrl: col.getDocUrl?.(c.pascalName), + examples: componentExamples.filter(e => e.pascalName !== mainExample?.pascalName), + collectionName: col.name + }] + }) + + return { + ...col, + components: collectionComponents + } + })) + + return result +} + export function collectionsPlugin(options: PluginOptions): VitePlugin { let collections: Collection[] + let server: any return { name: 'compodium:collections', apply: 'serve', - enforce: 'post', + enforce: 'pre', configResolved(viteConfig) { collections = resolveCollections(options, viteConfig) }, - configureServer(server) { + resolveId(id) { + if (id === VIRTUAL_MODULE_ID) { + return RESOLVED_VIRTUAL_MODULE_ID + } + }, + + async load(id) { + if (id === RESOLVED_VIRTUAL_MODULE_ID) { + const data = await generateCollectionsData(collections) + return `export default ${JSON.stringify(data, null, 2)}` + } + }, + + configureServer(_server) { + server = _server + + // Existing middleware endpoint server.middlewares.use('/__compodium__/api/collections', async (_, res) => { try { - const result = await Promise.all(collections.map(async (col) => { - const components = await scanComponents(col.dirs) - const examples = await scanComponents([col.exampleDir]) - - const collectionComponents = components.flatMap((c) => { - const componentExamples = examples?.filter(e => e.pascalName.startsWith(`${c.pascalName}Example`)).map(e => ({ - ...e, - isExample: true, - componentPath: c.filePath - })) - - const mainExample = componentExamples.find(e => e.pascalName === `${c.pascalName}Example`) - const component = mainExample ?? c - - // Hides third party library components if no example can be found. - if (col.name !== 'Components' && !mainExample) return [] - - return [{ - ...component, - wrapperComponent: col.wrapperComponent, - docUrl: col.getDocUrl?.(c.pascalName), - examples: componentExamples.filter(e => e.pascalName !== mainExample?.pascalName) - }] - }) - - return { - ...col, - components: collectionComponents - } - })) - + const result = await generateCollectionsData(collections) res.setHeader('Content-Type', 'application/json') res.write(JSON.stringify(result)) res.end() @@ -116,7 +143,6 @@ export function collectionsPlugin(options: PluginOptions): VitePlugin { componentCollection.exampleDir ].map(d => d.path) - // Watch for changes in example directory const watcher = watch(watchedPaths, { persistent: true, awaitWriteFinish: { @@ -125,34 +151,33 @@ export function collectionsPlugin(options: PluginOptions): VitePlugin { } }) - watcher.on('add', async (filePath: string) => { + const handleFileChange = async (filePath: string, event: string) => { if (watchedPaths.find(p => filePath.startsWith(p))) { + // Existing WebSocket HMR server.ws.send({ type: 'custom', event: 'compodium:hmr', - data: { path: filePath, event: 'component:added' } + data: { path: filePath, event } }) + + // Virtual module invalidation + const module = server.moduleGraph.getModuleById(RESOLVED_VIRTUAL_MODULE_ID) + if (module) { + server.reloadModule(module) + } } + } + + watcher.on('add', async (filePath: string) => { + await handleFileChange(filePath, 'component:added') }) watcher.on('addDir', async (filePath: string) => { - if (watchedPaths.find(p => filePath.startsWith(p))) { - server.ws.send({ - type: 'custom', - event: 'compodium:hmr', - data: { path: filePath, event: 'component:added' } - }) - } + await handleFileChange(filePath, 'component:added') }) watcher.on('unlink', async (filePath: string) => { - if (watchedPaths.find(p => filePath.startsWith(p))) { - server.ws.send({ - type: 'custom', - event: 'compodium:hmr', - data: { path: filePath, event: 'component:removed' } - }) - } + await handleFileChange(filePath, 'component:removed') }) } } diff --git a/packages/core/src/plugins/colors.ts b/packages/core/src/plugins/colors.ts index 85e9888b..e684bb27 100644 --- a/packages/core/src/plugins/colors.ts +++ b/packages/core/src/plugins/colors.ts @@ -9,6 +9,7 @@ export function colorsPlugin(options: PluginOptions): VitePlugin { return { name: 'compodium:colors', apply: 'serve', + enforce: 'pre', configureServer(server) { server.middlewares.use('/__compodium__/api/colors', async (req, res) => { try { diff --git a/packages/core/src/plugins/devtools.ts b/packages/core/src/plugins/devtools.ts index a600b486..68be9e10 100644 --- a/packages/core/src/plugins/devtools.ts +++ b/packages/core/src/plugins/devtools.ts @@ -32,7 +32,7 @@ export function devtoolsPlugin(options: PluginOptions): VitePlugin { }, configureServer(server) { - if (process.env.COMPODIUM_DEVTOOLS_URL || process.env.COMPODIUM_TEST) return + if (process.env.COMPODIUM_DEVTOOLS_URL || process.env.VITEST) return server.middlewares.use('/__compodium__/devtools', sirv(resolve(dirname(fileURLToPath(import.meta.url)), './client/devtools'), { single: true, setHeaders: res => res.setHeader('Cache-Control', 'public, max-age=3600, stale-while-revalidate=86400') } diff --git a/packages/core/src/plugins/examples.ts b/packages/core/src/plugins/examples.ts index 4eac1e1a..05898634 100644 --- a/packages/core/src/plugins/examples.ts +++ b/packages/core/src/plugins/examples.ts @@ -8,6 +8,7 @@ export function examplePlugin(options: PluginOptions): VitePlugin { return { name: 'compodium:examples', + enforce: 'pre', apply: 'serve', configResolved(viteConfig) { diff --git a/packages/core/src/plugins/iconify.ts b/packages/core/src/plugins/iconify.ts index add34f71..0af0c069 100644 --- a/packages/core/src/plugins/iconify.ts +++ b/packages/core/src/plugins/iconify.ts @@ -5,7 +5,9 @@ import { joinURL } from 'ufo' export function iconifyPlugin(_options: PluginOptions): VitePlugin { return { name: 'compodium:iconify', + enforce: 'pre', apply: 'serve', + configureServer(server) { server.middlewares.use('/__compodium__/api/iconify', async (req, res) => { try { diff --git a/packages/core/src/plugins/meta/index.ts b/packages/core/src/plugins/meta/index.ts index 37737e59..c0829ca7 100644 --- a/packages/core/src/plugins/meta/index.ts +++ b/packages/core/src/plugins/meta/index.ts @@ -2,12 +2,15 @@ import { readFile } from 'node:fs/promises' import type { Collection, PluginOptions } from '../../types' import { createChecker } from './checker' import { watch } from 'chokidar' -import type { VitePlugin } from 'unplugin' +import type { Plugin } from 'vite' import AST from 'unplugin-ast/vite' import { resolveCollections } from '../collections' -export function extendMetaPlugin(_options: PluginOptions): VitePlugin { +const VIRTUAL_MODULE_ID = 'virtual:compodium/meta' +const RESOLVED_VIRTUAL_MODULE_ID = '\0' + VIRTUAL_MODULE_ID + +export function extendMetaPlugin(_options: PluginOptions): Plugin { return AST({ include: [/\.[jt]sx?$/, /\.vue$/], enforce: 'post', @@ -24,8 +27,10 @@ export function extendMetaPlugin(_options: PluginOptions): VitePlugin { }) } -export function metaPlugin(options: PluginOptions): VitePlugin { +export function metaPlugin(options: PluginOptions): Plugin { let collections: Collection[] + let checker: any + let server: any return { name: 'compodium:meta', @@ -36,13 +41,40 @@ export function metaPlugin(options: PluginOptions): VitePlugin { collections = resolveCollections(options, viteConfig) }, - configureServer(server) { + resolveId(id) { + if (id.startsWith(VIRTUAL_MODULE_ID)) { + return RESOLVED_VIRTUAL_MODULE_ID + id.slice(VIRTUAL_MODULE_ID.length) + } + }, + + async load(id) { + if (id.startsWith(RESOLVED_VIRTUAL_MODULE_ID)) { + const url = new URL(id.slice(1), 'http://localhost') // Remove the \0 prefix + const componentPath = url.searchParams.get('component') + + if (!componentPath) { + return 'export default null' + } + + if (!checker) { + return 'export default null' + } + + const meta = checker.getComponentMeta(componentPath) + return `export default ${JSON.stringify(meta, null, 2)}` + } + }, + + configureServer(_server) { + server = _server + const checkerDirs = collections.flatMap(c => [ ...c.dirs, c.exampleDir ]) - const checker = createChecker(checkerDirs) + checker = createChecker(checkerDirs) + // Existing middleware endpoint server.middlewares.use('/__compodium__/api/meta', async (req, res) => { try { const url = new URL(req.url!, `http://${req.headers.host}`) @@ -77,7 +109,23 @@ export function metaPlugin(options: PluginOptions): VitePlugin { componentCollection.exampleDir ].map(d => d.path) - // Watch for changes in example directory + const invalidateVirtualModuleForFile = (filePath: string) => { + const virtualModuleId = `${RESOLVED_VIRTUAL_MODULE_ID}?component=${encodeURIComponent(filePath)}` + const module = server.moduleGraph.getModuleById(virtualModuleId) + if (module) { + server.reloadModule(module) + } + } + + const invalidateAllVirtualModules = () => { + // Only for add events where we need to reload all modules + for (const [id, module] of server.moduleGraph.idToModuleMap) { + if (id.startsWith(RESOLVED_VIRTUAL_MODULE_ID)) { + server.reloadModule(module) + } + } + } + const watcher = watch(watchedPaths, { persistent: true, awaitWriteFinish: { @@ -88,6 +136,7 @@ export function metaPlugin(options: PluginOptions): VitePlugin { watcher.on('add', async () => { checker.reload() + invalidateAllVirtualModules() }) watcher.on('change', async (filePath: string) => { @@ -95,11 +144,15 @@ export function metaPlugin(options: PluginOptions): VitePlugin { const code = await readFile(filePath, 'utf-8') checker.updateFile(filePath, code) + // Existing WebSocket HMR server.ws.send({ type: 'custom', event: 'compodium:hmr', data: { path: filePath, event: 'component:changed' } }) + + // Virtual module invalidation for specific file + invalidateVirtualModuleForFile(filePath) } }) } diff --git a/packages/core/src/runtime/preview.vue b/packages/core/src/runtime/preview.vue index fc6de94c..7aeb33f7 100644 --- a/packages/core/src/runtime/preview.vue +++ b/packages/core/src/runtime/preview.vue @@ -20,10 +20,5 @@ body { #compodium-default-preview { display: flex; - justify-content: center; - align-items: center; - min-height: 100vh; - min-width: fit-content; - padding: 24px; } diff --git a/packages/core/src/runtime/root.vue b/packages/core/src/runtime/root.vue index f908a9db..855bfd7f 100644 --- a/packages/core/src/runtime/root.vue +++ b/packages/core/src/runtime/root.vue @@ -1,8 +1,12 @@ + + + + diff --git a/packages/devtools/app/components/ComponentCodeTab.vue b/packages/devtools/app/components/ComponentCodeTab.vue new file mode 100644 index 00000000..2603c5cf --- /dev/null +++ b/packages/devtools/app/components/ComponentCodeTab.vue @@ -0,0 +1,63 @@ + + + diff --git a/packages/devtools/app/components/ComponentCollectionMenu.vue b/packages/devtools/app/components/ComponentCollectionMenu.vue index 9f8803d1..772e7a55 100644 --- a/packages/devtools/app/components/ComponentCollectionMenu.vue +++ b/packages/devtools/app/components/ComponentCollectionMenu.vue @@ -4,6 +4,8 @@ import type { Component, ComponentCollection, ComponentExample } from '@compodiu const props = defineProps<{ collections: ComponentCollection[] }>() const modelValue = defineModel() +const { testStates, testStatus, partialTestRun } = useComponentTests() + const treeItems = computed(() => { if (!props.collections) return @@ -11,15 +13,20 @@ const treeItems = computed(() => { label: col.name, icon: col.icon, defaultExpanded: true, + testState: testStates.value?.[col.name], children: col.components?.map(comp => ({ label: comp?.isExample ? comp.pascalName.replace(/Example$/, '') : comp.pascalName, + pascalName: comp.pascalName, active: modelValue.value?.pascalName === comp.pascalName, + testState: testStates.value?.[comp.pascalName], onSelect() { modelValue.value = comp }, children: comp.examples?.map(ex => ({ label: ex.pascalName.replace(comp.pascalName, ''), + pascalName: ex.pascalName, active: modelValue.value?.pascalName === ex.pascalName, + testState: testStates.value?.[ex.pascalName], onSelect() { modelValue.value = ex } @@ -32,7 +39,7 @@ const treeItems = computed(() => { - + new Set(fuseResults.value?.map(result => res class="w-full ml-1" /> - +import type { PropInputType, PropSchema } from '@compodium/core' +import { createReusableTemplate } from '@vueuse/core' + +import BooleanInput from './BooleanInput.vue' +import StringInput from './StringInput.vue' +import NumberInput from './NumberInput.vue' +import StringEnumInput from './StringEnumInput.vue' +import ObjectInput from './ObjectInput.vue' +import ArrayInput from './ArrayInput.vue' +import PrimitiveArrayInput from './PrimitiveArrayInput.vue' +import DateInput from './DateInput.vue' +import IconInput from './IconInput.vue' + +const inputTypes: Record = { + icon: IconInput, + array: ArrayInput, + object: ObjectInput, + boolean: BooleanInput, + string: StringInput, + number: NumberInput, + primitiveArray: PrimitiveArrayInput, + date: DateInput, + stringEnum: StringEnumInput +} + + + + + diff --git a/packages/devtools/app/components/testing/TestMenu.vue b/packages/devtools/app/components/testing/TestMenu.vue new file mode 100644 index 00000000..1450b691 --- /dev/null +++ b/packages/devtools/app/components/testing/TestMenu.vue @@ -0,0 +1,168 @@ + + + diff --git a/packages/devtools/app/components/testing/TestResult.vue b/packages/devtools/app/components/testing/TestResult.vue new file mode 100644 index 00000000..be124219 --- /dev/null +++ b/packages/devtools/app/components/testing/TestResult.vue @@ -0,0 +1,89 @@ + + + diff --git a/packages/devtools/app/components/testing/TestStatusIcon.vue b/packages/devtools/app/components/testing/TestStatusIcon.vue new file mode 100644 index 00000000..f3da1345 --- /dev/null +++ b/packages/devtools/app/components/testing/TestStatusIcon.vue @@ -0,0 +1,31 @@ + + + diff --git a/packages/devtools/app/composables/useComponentTests.ts b/packages/devtools/app/composables/useComponentTests.ts new file mode 100644 index 00000000..28b0792f --- /dev/null +++ b/packages/devtools/app/composables/useComponentTests.ts @@ -0,0 +1,108 @@ +import type { Component, ComponentExample } from '@compodium/core' +import type { CompodiumTestResult } from '@compodium/testing' +import { createSharedComposable } from '@vueuse/core' +import type { TestState } from 'vitest/node' + +function _useComponentTests() { + const { onEvent } = useViteClient() + + const componentTestMap = ref>>({}) + + const testStatus: Ref = ref() + const testResults = ref>({}) + + const testStats = ref<{ took?: number } | undefined>() + const testStates = ref>({}) + const partialTestRun = ref(false) + + const flatTestResults = computed(() => { + const allResults = Object.values(testResults.value).flat() + const seenIds = new Set() + return allResults.filter((test) => { + if (!test || seenIds.has(test.id)) return false + seenIds.add(test.id) + return true + }) + }) + + const testErrors = computed( + () => flatTestResults.value.filter(t => !t?.ok) + ) + + onEvent('compodium:test:log', async (payload) => { + console.log(...payload) + }) + + onEvent('compodium:test:start', async () => { + testStatus.value = 'running' + }) + + onEvent('compodium:test:result', async (payload) => { + const components = componentTestMap.value[payload.id] + if (!components?.size) return + + components.forEach((component) => { + testResults.value[component] ??= [] + testResults.value[component].push(payload) + }) + }) + + onEvent('compodium:test:finished', async (payload) => { + testStats.value = payload + testStatus.value = payload.reason + }) + + onEvent('compodium:test:suite', async (payload) => { + payload.tests.forEach((id: number) => { + componentTestMap.value[id] ??= new Set() + componentTestMap.value[id].add(payload.name) + }) + }) + + onEvent('compodium:test:suite:result', async (payload) => { + if (!payload.name) return + testStates.value[payload.name] = payload.state + }) + + const watchMode = ref(true) + + return { + testStatus, + testResults, + testStats, + testStates, + + testErrors, + + watchMode, + + partialTestRun, + + async stopTests() { + await $fetch('/api/stop-tests') + }, + + async runTests(components?: (Component & Partial) | (Component & Partial)[], updateSnapshots?: boolean) { + components = Array.isArray(components) ? components : components ? [components] : undefined + + componentTestMap.value = {} + + if (!components?.length) { + partialTestRun.value = false + testStates.value = {} + testResults.value = {} + } else { + partialTestRun.value = true + components.forEach((c) => { + testResults.value[c.pascalName] = [] + testStates.value[c.pascalName] = 'pending' + testStates.value[c.collectionName] = 'pending' + }) + } + + await $fetch('/api/test', { query: { component: components?.map(c => c.pascalName), update: updateSnapshots } }) + } + } +} + +export const useComponentTests = createSharedComposable(_useComponentTests) diff --git a/packages/devtools/app/composables/useViteClient.ts b/packages/devtools/app/composables/useViteClient.ts new file mode 100644 index 00000000..0708a852 --- /dev/null +++ b/packages/devtools/app/composables/useViteClient.ts @@ -0,0 +1,33 @@ +import { createSharedComposable } from '@vueuse/core' +import type { ViteHotContext } from 'vite/types/hot.js' + +function _useViteClient() { + const { hooks } = useCompodiumClient() + let hot: ViteHotContext | undefined = undefined + + hooks.hook('renderer:mounted', (_hot?: ViteHotContext) => { + hot = _hot + + for (const [e, fns] of Object.entries(viteHandlers.value)) { + fns?.forEach(fn => hot?.on(e, fn)) + } + + viteHandlers.value = {} + }) + + const viteHandlers = shallowRef void)[]>>({}) + + function onEvent(e: string, fn: (payload: any) => void) { + if (hot) hot.on(e, fn) + else { + viteHandlers.value[e] ??= [] + viteHandlers.value[e].push(fn) + } + } + + return { + onEvent + } +} + +export const useViteClient = createSharedComposable(_useViteClient) diff --git a/packages/devtools/app/pages/components.vue b/packages/devtools/app/pages/components.vue index bd3d15be..088f044f 100644 --- a/packages/devtools/app/pages/components.vue +++ b/packages/devtools/app/pages/components.vue @@ -1,7 +1,7 @@ diff --git a/packages/devtools/app/composables/useComponentTests.ts b/packages/devtools/app/composables/useComponentTests.ts index 28b0792f..10eb369e 100644 --- a/packages/devtools/app/composables/useComponentTests.ts +++ b/packages/devtools/app/composables/useComponentTests.ts @@ -79,7 +79,7 @@ function _useComponentTests() { partialTestRun, async stopTests() { - await $fetch('/api/stop-tests') + await $fetch('/api/stop-tests', { baseURL: '/__compodium__' }) }, async runTests(components?: (Component & Partial) | (Component & Partial)[], updateSnapshots?: boolean) { @@ -100,7 +100,7 @@ function _useComponentTests() { }) } - await $fetch('/api/test', { query: { component: components?.map(c => c.pascalName), update: updateSnapshots } }) + await $fetch('/api/test', { baseURL: '/__compodium__', query: { component: components?.map(c => c.pascalName), update: updateSnapshots } }) } } } diff --git a/packages/nuxt/src/module.ts b/packages/nuxt/src/module.ts index 9d42986d..e4b984b1 100644 --- a/packages/nuxt/src/module.ts +++ b/packages/nuxt/src/module.ts @@ -20,7 +20,7 @@ export default defineNuxtModule({ }, async setup(options, nuxt) { - if (!nuxt.options.dev) return + if (!nuxt.options.dev && !nuxt.options.test) return const { resolve } = createResolver(import.meta.url) @@ -44,7 +44,7 @@ export default defineNuxtModule({ } nuxt.hooks.hookOnce('components:dirs', async (dirs) => { - addVitePlugin(compodium({ + addVitePlugin(await compodium({ componentDirs: dirs, rootDir: nuxt.options.rootDir, baseUrl: nuxt.options.app.baseURL, diff --git a/packages/testing/src/e2e/index.ts b/packages/testing/src/e2e/index.ts index bd61b065..a6d8b545 100644 --- a/packages/testing/src/e2e/index.ts +++ b/packages/testing/src/e2e/index.ts @@ -1,55 +1,55 @@ -import { describe, beforeEach, afterEach } from 'vitest' -import type { CompodiumHooks, ComponentCollection, CompodiumMeta, Component } from '@compodium/core' -import type { Hookable } from 'hookable' -import { page } from '@vitest/browser/context' - -export { page } - -const collections = await import('virtual:compodium/collections').then(c => c.default) as ComponentCollection[] - -const componentMap = collections.flatMap(col => col.components?.flatMap(comp => [comp, ...(comp.examples ?? [])])).reduce((acc, c) => { - if (c.componentName) acc[c.componentName] = c - acc[c.pascalName] = c - - return acc -}, {} as Record) - -const hooks = window.__COMPODIUM_HOOKS__ as Hookable - -export type CompodiumTestFunction = (ctx: { - component: Component - meta: CompodiumMeta - collection: ComponentCollection -}) => void | Promise - -export function describeComponent(componentName: string, fn: CompodiumTestFunction) { - const component = componentMap[componentName] - if (!component) throw new Error(`[Compodium] Component not found ${componentName}`) - - const collection = collections.find(c => c.name === component?.collectionName) as ComponentCollection - - return describe(collection.name, async () => { - describe(componentName, async () => { - const meta = await fetch(`/__compodium__/api/meta?component=${component.filePath}`).then(async r => (await r.json()) as CompodiumMeta) - - beforeEach(async () => { - await hooks?.callHook('renderer:update-component', { - path: component.filePath, - props: meta.compodium?.defaultProps, - wrapper: collection.wrapperComponent, - events: meta.events - }) - }) - - afterEach(({ task }) => { - task.meta.compodium ??= {} - task.meta.compodium.screenshotPath = task.annotations.find(a => a.message === 'Actual screenshot')?.attachment?.path - task.meta.compodium.stagedScreenshotPath = task.annotations.find(a => a.message === 'Reference screenshot')?.attachment?.path - task.meta.compodium.diff = !!task.meta.compodium.stagedScreenshotPath - task.meta.compodium.diffPath = task.annotations.find(a => a.message === 'Diff')?.attachment?.path - }) - - await fn({ collection, component, meta }) - }) - }) -} +// import { describe, beforeEach, afterEach } from 'vitest' +// import type { CompodiumHooks, ComponentCollection, CompodiumMeta, Component } from '@compodium/core' +// import type { Hookable } from 'hookable' +// import { page } from '@vitest/browser/context' +// +// export { page } +// +// const collections = await import('virtual:compodium/collections').then(c => c.default) as ComponentCollection[] +// +// const componentMap = collections.flatMap(col => col.components?.flatMap(comp => [comp, ...(comp.examples ?? [])])).reduce((acc, c) => { +// if (c.componentName) acc[c.componentName] = c +// acc[c.pascalName] = c +// +// return acc +// }, {} as Record) +// +// const hooks = window.__COMPODIUM_HOOKS__ as Hookable +// +// export type CompodiumTestFunction = (ctx: { +// component: Component +// meta: CompodiumMeta +// collection: ComponentCollection +// }) => void | Promise +// +// export function describeComponent(componentName: string, fn: CompodiumTestFunction) { +// const component = componentMap[componentName] +// if (!component) throw new Error(`[Compodium] Component not found ${componentName}`) +// +// const collection = collections.find(c => c.name === component?.collectionName) as ComponentCollection +// +// return describe(collection.name, async () => { +// describe(componentName, async () => { +// const meta = await fetch(`/__compodium__/api/meta?component=${component.filePath}`).then(async r => (await r.json()) as CompodiumMeta) +// +// beforeEach(async () => { +// await hooks?.callHook('renderer:update-component', { +// path: component.filePath, +// props: meta.compodium?.defaultProps, +// wrapper: collection.wrapperComponent, +// events: meta.events +// }) +// }) +// +// afterEach(({ task }) => { +// task.meta.compodium ??= {} +// task.meta.compodium.screenshotPath = task.annotations.find(a => a.message === 'Actual screenshot')?.attachment?.path +// task.meta.compodium.stagedScreenshotPath = task.annotations.find(a => a.message === 'Reference screenshot')?.attachment?.path +// task.meta.compodium.diff = !!task.meta.compodium.stagedScreenshotPath +// task.meta.compodium.diffPath = task.annotations.find(a => a.message === 'Diff')?.attachment?.path +// }) +// +// await fn({ collection, component, meta }) +// }) +// }) +// } diff --git a/packages/testing/src/plugins/vitest.ts b/packages/testing/src/plugins/vitest.ts index 0b2f446f..d6a87279 100644 --- a/packages/testing/src/plugins/vitest.ts +++ b/packages/testing/src/plugins/vitest.ts @@ -1,5 +1,4 @@ /// -/// import { createVitest } from 'vitest/node' import type { Vitest } from 'vitest/node' @@ -58,7 +57,7 @@ export function testPlugin(options: PluginOptions): VitePlugin { configureServer(server) { ws = server.ws - server.middlewares.use('/__compodium__/devtools/api/stop-tests', async (req, res) => { + server.middlewares.use('/__compodium__/api/stop-tests', async (req, res) => { if (!vitestRunning) { res.statusCode = 200 res.end() @@ -78,7 +77,7 @@ export function testPlugin(options: PluginOptions): VitePlugin { } }) - server.middlewares.use('/__compodium__/devtools/api/test', async (req, res) => { + server.middlewares.use('/__compodium__/api/test', async (req, res) => { if (vitestRunning) { res.statusCode = 423 res.end() diff --git a/packages/testing/src/unit/index.ts b/packages/testing/src/unit/index.ts index f563effb..8985bf17 100644 --- a/packages/testing/src/unit/index.ts +++ b/packages/testing/src/unit/index.ts @@ -1,9 +1,8 @@ -/// - import { describe, beforeEach } from 'vitest' import type { ComponentCollection, CompodiumMeta, Component } from '@compodium/core' import type { Component as VueComponent } from 'vue' +// @ts-expect-error virtual import const collections = await import(/* vite-ignore */ 'virtual:compodium/collections').then(c => c.default) as ComponentCollection[] const componentMap = collections.flatMap(col => col.components?.flatMap(comp => [comp, ...(comp.examples ?? [])])).reduce((acc, c) => { diff --git a/playgrounds/nuxt/app/components/CompodiumWelcome.vue b/playgrounds/nuxt/app/components/CompodiumWelcome.vue index 06ec1578..d5cc024e 100644 --- a/playgrounds/nuxt/app/components/CompodiumWelcome.vue +++ b/playgrounds/nuxt/app/components/CompodiumWelcome.vue @@ -1,7 +1,4 @@ diff --git a/playgrounds/nuxt/nuxt.config.ts b/playgrounds/nuxt/nuxt.config.ts index 3c5480ba..fc107dab 100644 --- a/playgrounds/nuxt/nuxt.config.ts +++ b/playgrounds/nuxt/nuxt.config.ts @@ -1,5 +1,9 @@ export default defineNuxtConfig({ - modules: ['@nuxt/ui', '@compodium/nuxt'], + modules: [ + '@nuxt/ui', + '@compodium/nuxt', + '@nuxt/test-utils/module' + ], devtools: { enabled: true }, css: ['~/assets/css/main.css'], @@ -17,6 +21,9 @@ export default defineNuxtConfig({ primary: 'blue', neutral: 'zinc' } + }, + testing: { + enabled: false } } }) diff --git a/playgrounds/nuxt/package.json b/playgrounds/nuxt/package.json index 1cc19be6..aea456ca 100644 --- a/playgrounds/nuxt/package.json +++ b/playgrounds/nuxt/package.json @@ -11,7 +11,12 @@ }, "dependencies": { "@nuxt/ui": "catalog:", - "nuxt": "catalog:", - "@compodium/nuxt": "workspace:^" + "nuxt": "catalog:" + }, + "devDependencies": { + "@compodium/nuxt": "workspace:^", + "@compodium/testing": "workspace:^", + "@nuxt/test-utils": "^3.19.2", + "vitest": "^3.2.4" } } diff --git a/playgrounds/nuxt/test/CompodiumWelcome.spec.ts b/playgrounds/nuxt/test/CompodiumWelcome.spec.ts new file mode 100644 index 00000000..3be29715 --- /dev/null +++ b/playgrounds/nuxt/test/CompodiumWelcome.spec.ts @@ -0,0 +1,22 @@ +import { describe, expect, it } from 'vitest' +import { mountSuspended } from '@nuxt/test-utils/runtime' +import { describeComponent } from '@compodium/testing/unit' + +describe('test', () => { + describeComponent('CompodiumWelcome', ({ component, props }) => { + it('includes default props', () => { + expect(props?.bounceIt).toEqual(true) + }) + + it('works', async () => { + const wrapper = await mountSuspended(component, { props }) + const instance = wrapper.findComponent({ name: 'CompodiumWelcome' }) + expect(instance.exists()).toBe(true) + }) + + it('snapshot', async () => { + const wrapper = await mountSuspended(component, { props }) + expect(wrapper.html()).toMatchSnapshot() + }) + }) +}) diff --git a/playgrounds/nuxt/test/__snapshots__/CompodiumWelcome.spec.ts.snap b/playgrounds/nuxt/test/__snapshots__/CompodiumWelcome.spec.ts.snap new file mode 100644 index 00000000..06bfe7d9 --- /dev/null +++ b/playgrounds/nuxt/test/__snapshots__/CompodiumWelcome.spec.ts.snap @@ -0,0 +1,35 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Components > CompodiumWelcomeExample > snapshot 1`] = ` +"
+
+

Welcome!

+ +
+
" +`; + +exports[`test > Components > CompodiumWelcomeExample > snapshot 1`] = ` +"
+
+

Welcome!

+ +
+
" +`; diff --git a/playgrounds/nuxt/vitest.config.ts b/playgrounds/nuxt/vitest.config.ts new file mode 100644 index 00000000..65313fdb --- /dev/null +++ b/playgrounds/nuxt/vitest.config.ts @@ -0,0 +1,11 @@ +import { defineVitestConfig } from '@nuxt/test-utils/config' + +export default defineVitestConfig({ + test: { + environment: 'nuxt', + silent: 'passed-only', + include: [ + './playgrounds/nuxt/test/**/*.{test,spec}.?(c|m)[jt]s?(x)' + ] + } +}) diff --git a/playgrounds/vue/src/components/CompodiumWelcome.vue b/playgrounds/vue/src/components/CompodiumWelcome.vue index 80074953..37ab23b3 100644 --- a/playgrounds/vue/src/components/CompodiumWelcome.vue +++ b/playgrounds/vue/src/components/CompodiumWelcome.vue @@ -57,80 +57,16 @@ function goToCompodium() { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 896fcd56..a7503831 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -379,15 +379,25 @@ importers: playgrounds/nuxt: dependencies: - '@compodium/nuxt': - specifier: workspace:^ - version: link:../../packages/nuxt '@nuxt/ui': specifier: 'catalog:' version: 3.3.3(@babel/parser@7.28.4)(@netlify/blobs@9.1.2)(change-case@5.4.4)(db0@0.3.2(better-sqlite3@12.2.0))(embla-carousel@8.6.0)(ioredis@5.7.0)(jwt-decode@4.0.0)(magicast@0.3.5)(typescript@5.6.3)(vite@7.1.5(@types/node@22.18.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-router@4.5.1(vue@3.5.21(typescript@5.6.3)))(vue@3.5.21(typescript@5.6.3))(zod@4.1.8) nuxt: specifier: 'catalog:' version: 4.1.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.18.3)(@vue/compiler-sfc@3.5.21)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.35.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.1)(terser@5.43.1)(typescript@5.6.3)(vite@7.1.5(@types/node@22.18.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.0(typescript@5.6.3))(yaml@2.8.0) + devDependencies: + '@compodium/nuxt': + specifier: workspace:^ + version: link:../../packages/nuxt + '@compodium/testing': + specifier: workspace:^ + version: link:../../packages/testing + '@nuxt/test-utils': + specifier: ^3.19.2 + version: 3.19.2(@vue/test-utils@2.4.6)(happy-dom@17.6.3)(magicast@0.3.5)(playwright-core@1.55.0)(typescript@5.6.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.3)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) + vitest: + specifier: ^3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.3)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) playgrounds/vue: dependencies: @@ -4240,10 +4250,6 @@ packages: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} - expect-type@1.2.1: - resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} - engines: {node: '>=12.0.0'} - expect-type@1.2.2: resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} engines: {node: '>=12.0.0'} @@ -11707,8 +11713,6 @@ snapshots: expand-template@2.0.3: {} - expect-type@1.2.1: {} - expect-type@1.2.2: {} exsolve@1.0.7: {} @@ -15493,7 +15497,7 @@ snapshots: '@vitest/utils': 3.2.4 chai: 5.2.0 debug: 4.4.1 - expect-type: 1.2.1 + expect-type: 1.2.2 magic-string: 0.30.19 pathe: 2.0.3 picomatch: 4.0.3 diff --git a/vitest.config.ts b/vitest.config.ts index 9ed2bcc1..2ad40f37 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -3,7 +3,8 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { projects: [ - 'packages/*' + 'packages/*', + 'playgrounds/*' ] } }) From 395297b5b2a5c96a61b45b878ec3f9a8f16d92a1 Mon Sep 17 00:00:00 2001 From: Romain Hamel Date: Fri, 26 Sep 2025 13:24:01 +0200 Subject: [PATCH 03/16] fix(nuxt): start vitest --- package.json | 11 +- packages/core/src/types.ts | 8 + packages/nuxt/src/module.ts | 16 +- packages/testing/package.json | 4 +- packages/testing/src/plugins/vitest.ts | 19 +- playgrounds/nuxt/app/app.vue | 4 +- .../nuxt/app/components/CompodiumWelcome.vue | 2 +- playgrounds/nuxt/nuxt.config.ts | 10 +- playgrounds/nuxt/package.json | 6 +- .../nuxt/test/CompodiumWelcome.spec.ts | 22 - .../CompodiumWelcome.nuxt.spec.ts.snap | 18 + .../CompodiumWelcome.spec.ts.snap | 21 +- .../nuxt/test/nuxt/CompodiumWelcome.spec.ts | 16 + .../CompodiumWelcome.spec.ts.snap | 18 + playgrounds/nuxt/vitest.config.ts | 17 +- playgrounds/vue/package.json | 1 + .../vue/src/components/CompodiumWelcome.vue | 2 +- pnpm-lock.yaml | 1087 ++++++++--------- vitest.config.ts | 3 +- 19 files changed, 631 insertions(+), 654 deletions(-) delete mode 100644 playgrounds/nuxt/test/CompodiumWelcome.spec.ts create mode 100644 playgrounds/nuxt/test/__snapshots__/CompodiumWelcome.nuxt.spec.ts.snap create mode 100644 playgrounds/nuxt/test/nuxt/CompodiumWelcome.spec.ts create mode 100644 playgrounds/nuxt/test/nuxt/__snapshots__/CompodiumWelcome.spec.ts.snap diff --git a/package.json b/package.json index 64e0d6be..a61a0b58 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,16 @@ "pnpm": { "onlyBuiltDependencies": [ "better-sqlite3" - ] + ], + "overrides": { + "@compodium/core": "workspace:^", + "@compodium/examples": "workspace:^", + "@compodium/meta": "workspace:^", + "@compodium/nuxt": "workspace:^", + "@compodium/vue": "workspace:^", + "typescript": "5.6.3", + "vue-tsc": "2.2.0" + } }, "packageManager": "pnpm@10.17.1" } diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 38ee9ad6..cdbc3c9d 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -1,3 +1,4 @@ +import type { UserConfig as VitestUserConfig, InlineConfig as VitestInlineConfig } from 'vitest/node' import type { PropertyMeta as VuePropertyMeta } from '@compodium/meta' import type { Hookable } from 'hookable' import type { InputSchema } from './plugins/meta/infer' @@ -66,6 +67,9 @@ export type PluginOptions = { } /* Internal */ _nuxt?: boolean + + /* Internal */ + _vitestConfig?: Promise | TestConfig } export type IconifyIcon = string & {} @@ -165,6 +169,10 @@ export type ComponentCollection = Collection & { components: (Component & Partial)[] } +export type TestConfig = VitestUserConfig & { + test?: VitestInlineConfig +} + export interface CompodiumHooks { // Triggered when the components code has been updated 'component:changed': (path: string) => void diff --git a/packages/nuxt/src/module.ts b/packages/nuxt/src/module.ts index e4b984b1..295a301d 100644 --- a/packages/nuxt/src/module.ts +++ b/packages/nuxt/src/module.ts @@ -5,7 +5,9 @@ import { joinURL } from 'ufo' import { version } from '../package.json' import { defu } from 'defu' import { compodium } from '@compodium/core' -import type { PluginOptions } from '@compodium/core' +import type { PluginOptions, TestConfig } from '@compodium/core' +import { getVitestConfigFromNuxt } from '@nuxt/test-utils/config' +import { mergeConfig } from 'vite' export type ModuleOptions = Omit @@ -21,7 +23,6 @@ export default defineNuxtModule({ async setup(options, nuxt) { if (!nuxt.options.dev && !nuxt.options.test) return - const { resolve } = createResolver(import.meta.url) nuxt.hooks.hookOnce('app:resolve', (app) => { @@ -43,12 +44,23 @@ export default defineNuxtModule({ nuxt.options.routeRules = defu(nuxt.options.routeRules, { '/__compodium__/**': { ssr: false } }) } + const rawViteConfigPromise: Promise = new Promise((resolve) => { + nuxt.hooks.hookOnce('app:resolve', () => { + nuxt.hook('vite:configResolved', (config, { isClient }) => { + if (!isClient) return + const _config = mergeConfig({}, config) + resolve(getVitestConfigFromNuxt({ nuxt, viteConfig: _config }) as Promise) + }) + }) + }) + nuxt.hooks.hookOnce('components:dirs', async (dirs) => { addVitePlugin(await compodium({ componentDirs: dirs, rootDir: nuxt.options.rootDir, baseUrl: nuxt.options.app.baseURL, _nuxt: true, + _vitestConfig: rawViteConfigPromise, ...options })) }) diff --git a/packages/testing/package.json b/packages/testing/package.json index 6be54fde..9c505da6 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -32,12 +32,12 @@ "typecheck": "tsc --noEmit" }, "peerDependencies": { - "@vitest/browser": ">=4.0.0-beta.5", "@vue/test-utils": ">=2", "playwright": ">=1", - "vitest": ">=4.0.0-beta.5" + "vitest": ">=3.2.4" }, "dependencies": { + "defu": "^6.1.4", "unplugin": "^2.3.5" }, "devDependencies": { diff --git a/packages/testing/src/plugins/vitest.ts b/packages/testing/src/plugins/vitest.ts index d6a87279..f6c812cc 100644 --- a/packages/testing/src/plugins/vitest.ts +++ b/packages/testing/src/plugins/vitest.ts @@ -1,11 +1,12 @@ /// -import { createVitest } from 'vitest/node' +import { createVitest, startVitest as _startVitest } from 'vitest/node' import type { Vitest } from 'vitest/node' -import type { PluginOptions } from '@compodium/core' +import type { PluginOptions, TestConfig } from '@compodium/core' import { CompodiumReporter } from './reporter' import type { WebSocketServer, Plugin as VitePlugin } from 'vite' import { DefaultReporter } from 'vitest/reporters' +import { defu } from 'defu' export function testPlugin(options: PluginOptions): VitePlugin { let rootDir: string @@ -16,17 +17,19 @@ export function testPlugin(options: PluginOptions): VitePlugin { async function getVitest() { if (!vitest) { - vitest = await createVitest('test', { + const viteConfig = options._vitestConfig ? await options._vitestConfig : {} as TestConfig + + const vitestConfig = defu({ root: rootDir, watch: false, passWithNoTests: true, reporters: [new DefaultReporter(), new CompodiumReporter(ws)], - silent: true, - env: { - VITEST: 'true' - } - }) + silent: true + }, viteConfig.test) + + vitest = await createVitest('test', vitestConfig, viteConfig as any) } + return vitest } diff --git a/playgrounds/nuxt/app/app.vue b/playgrounds/nuxt/app/app.vue index 2e790405..1a6f0735 100644 --- a/playgrounds/nuxt/app/app.vue +++ b/playgrounds/nuxt/app/app.vue @@ -1,5 +1,7 @@ diff --git a/playgrounds/nuxt/app/components/CompodiumWelcome.vue b/playgrounds/nuxt/app/components/CompodiumWelcome.vue index d5cc024e..febf5c2f 100644 --- a/playgrounds/nuxt/app/components/CompodiumWelcome.vue +++ b/playgrounds/nuxt/app/components/CompodiumWelcome.vue @@ -42,7 +42,7 @@ function openDevtools() { > Go to Compodium
- or + { - describeComponent('CompodiumWelcome', ({ component, props }) => { - it('includes default props', () => { - expect(props?.bounceIt).toEqual(true) - }) - - it('works', async () => { - const wrapper = await mountSuspended(component, { props }) - const instance = wrapper.findComponent({ name: 'CompodiumWelcome' }) - expect(instance.exists()).toBe(true) - }) - - it('snapshot', async () => { - const wrapper = await mountSuspended(component, { props }) - expect(wrapper.html()).toMatchSnapshot() - }) - }) -}) diff --git a/playgrounds/nuxt/test/__snapshots__/CompodiumWelcome.nuxt.spec.ts.snap b/playgrounds/nuxt/test/__snapshots__/CompodiumWelcome.nuxt.spec.ts.snap new file mode 100644 index 00000000..56f5a2b5 --- /dev/null +++ b/playgrounds/nuxt/test/__snapshots__/CompodiumWelcome.nuxt.spec.ts.snap @@ -0,0 +1,18 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Components > CompodiumWelcomeExample > snapshot 1`] = ` +"
+
+

Welcome!

+ +
+
" +`; diff --git a/playgrounds/nuxt/test/__snapshots__/CompodiumWelcome.spec.ts.snap b/playgrounds/nuxt/test/__snapshots__/CompodiumWelcome.spec.ts.snap index 06bfe7d9..56f5a2b5 100644 --- a/playgrounds/nuxt/test/__snapshots__/CompodiumWelcome.spec.ts.snap +++ b/playgrounds/nuxt/test/__snapshots__/CompodiumWelcome.spec.ts.snap @@ -1,23 +1,6 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`Components > CompodiumWelcomeExample > snapshot 1`] = ` -"
-
-

Welcome!

- -
-
" -`; - -exports[`test > Components > CompodiumWelcomeExample > snapshot 1`] = ` "

Welcome!

diff --git a/playgrounds/nuxt/test/nuxt/CompodiumWelcome.spec.ts b/playgrounds/nuxt/test/nuxt/CompodiumWelcome.spec.ts new file mode 100644 index 00000000..3f2f9a37 --- /dev/null +++ b/playgrounds/nuxt/test/nuxt/CompodiumWelcome.spec.ts @@ -0,0 +1,16 @@ +import { expect, it } from 'vitest' +import { mountSuspended } from '@nuxt/test-utils/runtime' +import { describeComponent } from '@compodium/testing/unit' + +describeComponent('CompodiumWelcome', ({ component, props }) => { + it('works', async () => { + const wrapper = await mountSuspended(component, { props }) + const instance = wrapper.findComponent({ name: 'CompodiumWelcome' }) + expect(instance.exists()).toBe(true) + }) + + it('snapshot', async () => { + const wrapper = await mountSuspended(component, { props }) + expect(wrapper.html()).toMatchSnapshot() + }) +}) diff --git a/playgrounds/nuxt/test/nuxt/__snapshots__/CompodiumWelcome.spec.ts.snap b/playgrounds/nuxt/test/nuxt/__snapshots__/CompodiumWelcome.spec.ts.snap new file mode 100644 index 00000000..56f5a2b5 --- /dev/null +++ b/playgrounds/nuxt/test/nuxt/__snapshots__/CompodiumWelcome.spec.ts.snap @@ -0,0 +1,18 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Components > CompodiumWelcomeExample > snapshot 1`] = ` +"
+
+

Welcome!

+ +
+
" +`; diff --git a/playgrounds/nuxt/vitest.config.ts b/playgrounds/nuxt/vitest.config.ts index 65313fdb..eec9586b 100644 --- a/playgrounds/nuxt/vitest.config.ts +++ b/playgrounds/nuxt/vitest.config.ts @@ -1,11 +1,16 @@ -import { defineVitestConfig } from '@nuxt/test-utils/config' +import { defineVitestProject } from '@nuxt/test-utils/config' +import { defineConfig } from 'vitest/config' -export default defineVitestConfig({ +export default defineConfig({ test: { - environment: 'nuxt', - silent: 'passed-only', - include: [ - './playgrounds/nuxt/test/**/*.{test,spec}.?(c|m)[jt]s?(x)' + projects: [ + await defineVitestProject({ + test: { + name: 'nuxt', + include: ['test/nuxt/*.{test,spec}.ts'], + environment: 'nuxt' + } + }) ] } }) diff --git a/playgrounds/vue/package.json b/playgrounds/vue/package.json index 2d8eaf64..2c36109e 100644 --- a/playgrounds/vue/package.json +++ b/playgrounds/vue/package.json @@ -12,6 +12,7 @@ "dependencies": { "@compodium/vue": "workspace:^", "@nuxt/ui": "catalog:", + "reka-ui": "^2.5.1", "vue": "catalog:", "vue-router": "^4.5.1" }, diff --git a/playgrounds/vue/src/components/CompodiumWelcome.vue b/playgrounds/vue/src/components/CompodiumWelcome.vue index 37ab23b3..a6d6c053 100644 --- a/playgrounds/vue/src/components/CompodiumWelcome.vue +++ b/playgrounds/vue/src/components/CompodiumWelcome.vue @@ -41,7 +41,7 @@ function goToCompodium() { > Go to Compodium
- or + =3' - version: 3.5.21(typescript@5.9.2) + version: 3.5.21(typescript@5.6.3) zod: specifier: ^4.1.11 version: 4.1.11 @@ -161,13 +163,13 @@ importers: dependencies: '@nuxt/ui': specifier: 'catalog:' - version: 4.0.0(@babel/parser@7.28.4)(@netlify/blobs@9.1.2)(change-case@5.4.4)(db0@0.3.2(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.7.0)(jwt-decode@4.0.0)(magicast@0.3.5)(typescript@5.9.2)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-router@4.5.1(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2))(zod@4.1.11) + version: 4.0.0(@babel/parser@7.28.4)(@netlify/blobs@9.1.2)(change-case@5.4.4)(db0@0.3.2(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.7.0)(jwt-decode@4.0.0)(magicast@0.3.5)(typescript@5.6.3)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-router@4.5.1(vue@3.5.22(typescript@5.6.3)))(vue@3.5.22(typescript@5.6.3))(zod@4.1.11) '@vueuse/core': specifier: ^13.9.0 - version: 13.9.0(vue@3.5.21(typescript@5.9.2)) + version: 13.9.0(vue@3.5.22(typescript@5.6.3)) '@vueuse/integrations': specifier: ^13.9.0 - version: 13.9.0(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(vue@3.5.21(typescript@5.9.2)) + version: 13.9.0(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(vue@3.5.22(typescript@5.6.3)) deep-eql: specifier: ^5.0.2 version: 5.0.2 @@ -182,16 +184,16 @@ importers: version: 5.5.3 json-editor-vue: specifier: ^0.18.1 - version: 0.18.1(vue@3.5.21(typescript@5.9.2)) + version: 0.18.1(vue@3.5.22(typescript@5.6.3)) knitwork: specifier: ^1.2.0 version: 1.2.0 motion-v: specifier: ^1.4.0 - version: 1.7.1(@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2)) + version: 1.7.1(@vueuse/core@13.9.0(vue@3.5.22(typescript@5.6.3)))(vue@3.5.22(typescript@5.6.3)) nuxt: specifier: 'catalog:' - version: 4.1.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.18.6)(@vue/compiler-sfc@3.5.21)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(eslint@9.36.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.1)(terser@5.43.1)(typescript@5.9.2)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.12(typescript@5.9.2))(yaml@2.8.0) + version: 4.1.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.18.6)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(eslint@9.36.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.1)(terser@5.43.1)(typescript@5.6.3)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.0(typescript@5.6.3))(yaml@2.8.0) pathe: specifier: ^2.0.3 version: 2.0.3 @@ -209,7 +211,7 @@ importers: version: 3.13.0 vue: specifier: 'catalog:' - version: 3.5.21(typescript@5.9.2) + version: 3.5.22(typescript@5.6.3) devDependencies: '@compodium/core': specifier: workspace:^ @@ -267,7 +269,7 @@ importers: specifier: ^2.0.3 version: 2.0.3 typescript: - specifier: '*' + specifier: 5.6.3 version: 5.6.3 vue-component-meta: specifier: ^2.2.12 @@ -303,25 +305,25 @@ importers: devDependencies: '@nuxt/module-builder': specifier: ^1.0.2 - version: 1.0.2(@nuxt/cli@3.28.0(magicast@0.3.5))(@vue/compiler-core@3.5.21)(esbuild@0.25.9)(typescript@5.9.2)(vue-tsc@2.2.12(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2)) + version: 1.0.2(@nuxt/cli@3.28.0(magicast@0.3.5))(@vue/compiler-core@3.5.22)(esbuild@0.25.9)(typescript@5.6.3)(vue-tsc@2.2.0(typescript@5.6.3))(vue@3.5.22(typescript@5.6.3)) '@nuxt/schema': specifier: 'catalog:' version: 4.1.2 nuxt: specifier: 'catalog: ' - version: 4.1.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.18.6)(@vue/compiler-sfc@3.5.21)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(eslint@9.36.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.1)(terser@5.43.1)(typescript@5.9.2)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.12(typescript@5.9.2))(yaml@2.8.0) + version: 4.1.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.18.6)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(eslint@9.36.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.1)(terser@5.43.1)(typescript@5.6.3)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.0(typescript@5.6.3))(yaml@2.8.0) pathe: specifier: ^2.0.3 version: 2.0.3 packages/testing: dependencies: - '@vitest/browser': - specifier: '>=4.0.0-beta.5' - version: 4.0.0-beta.13(playwright@1.55.1)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vitest@4.0.0-beta.13) '@vue/test-utils': specifier: '>=2' version: 2.4.6 + defu: + specifier: ^6.1.4 + version: 6.1.4 playwright: specifier: '>=1' version: 1.55.1 @@ -329,8 +331,8 @@ importers: specifier: ^2.3.5 version: 2.3.10 vitest: - specifier: '>=4.0.0-beta.5' - version: 4.0.0-beta.13(@types/debug@4.1.12)(@types/node@22.18.6)(@vitest/browser@4.0.0-beta.13)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) + specifier: '>=3.2.4' + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(@vitest/ui@3.2.4)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) devDependencies: '@compodium/core': specifier: workspace:^ @@ -376,10 +378,13 @@ importers: dependencies: '@nuxt/ui': specifier: 'catalog:' - version: 4.0.0(@babel/parser@7.28.4)(@netlify/blobs@9.1.2)(change-case@5.4.4)(db0@0.3.2(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.7.0)(jwt-decode@4.0.0)(magicast@0.3.5)(typescript@5.9.2)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-router@4.5.1(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2))(zod@4.1.11) + version: 4.0.0(@babel/parser@7.28.4)(@netlify/blobs@9.1.2)(change-case@5.4.4)(db0@0.3.2(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.7.0)(jwt-decode@4.0.0)(magicast@0.3.5)(typescript@5.6.3)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-router@4.5.1(vue@3.5.22(typescript@5.6.3)))(vue@3.5.22(typescript@5.6.3))(zod@4.1.11) nuxt: specifier: 'catalog:' - version: 4.1.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.18.6)(@vue/compiler-sfc@3.5.21)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(eslint@9.36.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.1)(terser@5.43.1)(typescript@5.9.2)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.12(typescript@5.9.2))(yaml@2.8.0) + version: 4.1.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.18.6)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(eslint@9.36.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.1)(terser@5.43.1)(typescript@5.6.3)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.0(typescript@5.6.3))(yaml@2.8.0) + reka-ui: + specifier: ^2.5.1 + version: 2.5.1(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3)) devDependencies: '@compodium/nuxt': specifier: workspace:^ @@ -389,10 +394,13 @@ importers: version: link:../../packages/testing '@nuxt/test-utils': specifier: ^3.19.2 - version: 3.19.2(@vue/test-utils@2.4.6)(happy-dom@17.6.3)(magicast@0.3.5)(playwright-core@1.55.1)(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) + version: 3.19.2(@vitest/ui@3.2.4)(@vue/test-utils@2.4.6)(happy-dom@17.6.3)(magicast@0.3.5)(playwright-core@1.55.1)(typescript@5.6.3)(vitest@3.2.4) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(@vitest/ui@3.2.4)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) + vitest-environment-nuxt: + specifier: ^1.0.1 + version: 1.0.1(@vitest/ui@3.2.4)(@vue/test-utils@2.4.6)(happy-dom@17.6.3)(magicast@0.3.5)(playwright-core@1.55.1)(typescript@5.6.3)(vitest@3.2.4) playgrounds/vue: dependencies: @@ -401,13 +409,16 @@ importers: version: link:../../packages/vue '@nuxt/ui': specifier: 'catalog:' - version: 4.0.0(@babel/parser@7.28.4)(@netlify/blobs@9.1.2)(change-case@5.4.4)(db0@0.3.2(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.7.0)(jwt-decode@4.0.0)(magicast@0.3.5)(typescript@5.9.2)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-router@4.5.1(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2))(zod@4.1.11) + version: 4.0.0(@babel/parser@7.28.4)(@netlify/blobs@9.1.2)(change-case@5.4.4)(db0@0.3.2(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.7.0)(jwt-decode@4.0.0)(magicast@0.3.5)(typescript@5.6.3)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-router@4.5.1(vue@3.5.22(typescript@5.6.3)))(vue@3.5.22(typescript@5.6.3))(zod@4.1.11) + reka-ui: + specifier: ^2.5.1 + version: 2.5.1(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3)) vue: specifier: 'catalog:' - version: 3.5.21(typescript@5.9.2) + version: 3.5.22(typescript@5.6.3) vue-router: specifier: ^4.5.1 - version: 4.5.1(vue@3.5.21(typescript@5.9.2)) + version: 4.5.1(vue@3.5.22(typescript@5.6.3)) devDependencies: '@compodium/testing': specifier: workspace:^ @@ -420,10 +431,10 @@ importers: version: 22.18.6 '@vitejs/plugin-vue': specifier: ^6.0.1 - version: 6.0.1(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2)) + version: 6.0.1(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.6.3)) '@vue/tsconfig': specifier: ^0.8.1 - version: 0.8.1(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + version: 0.8.1(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3)) happy-dom: specifier: ^17.6.3 version: 17.6.3 @@ -432,13 +443,13 @@ importers: version: 7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) vite-plugin-vue-devtools: specifier: ^8.0.2 - version: 8.0.2(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2)) + version: 8.0.2(@nuxt/kit@4.1.2(magicast@0.3.5))(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.6.3)) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(@vitest/ui@3.2.4)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) vue-tsc: - specifier: ^2.2.2 - version: 2.2.12(typescript@5.9.2) + specifier: 2.2.0 + version: 2.2.0(typescript@5.6.3) packages: @@ -616,10 +627,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} - engines: {node: '>=6.9.0'} - '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} @@ -1489,7 +1496,7 @@ packages: hasBin: true peerDependencies: '@nuxt/cli': ^3.26.4 - typescript: ^5.8.3 + typescript: 5.6.3 '@nuxt/schema@4.1.2': resolution: {integrity: sha512-uFr13C6c52OFbF3hZVIV65KvhQRyrwp1GlAm7EVNGjebY8279QEel57T4R9UA1dn2Et6CBynBFhWoFwwo97Pig==} @@ -1543,7 +1550,7 @@ packages: '@inertiajs/vue3': ^2.0.7 joi: ^18.0.0 superstruct: ^2.0.0 - typescript: ^5.6.3 + typescript: 5.6.3 valibot: ^1.0.0 vue-router: ^4.5.0 yup: ^1.7.0 @@ -2517,16 +2524,6 @@ packages: peerDependencies: vue: ^2.7.0 || ^3.0.0 - '@testing-library/dom@10.4.1': - resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} - engines: {node: '>=18'} - - '@testing-library/user-event@14.6.1': - resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} - engines: {node: '>=12', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' - '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -2537,9 +2534,6 @@ packages: '@tybys/wasm-util@0.10.0': resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} - '@types/aria-query@5.0.4': - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -2613,20 +2607,20 @@ packages: peerDependencies: '@typescript-eslint/parser': ^8.40.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: 5.6.3 '@typescript-eslint/parser@8.40.0': resolution: {integrity: sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: 5.6.3 '@typescript-eslint/project-service@8.40.0': resolution: {integrity: sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: 5.6.3 '@typescript-eslint/scope-manager@8.40.0': resolution: {integrity: sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==} @@ -2636,14 +2630,14 @@ packages: resolution: {integrity: sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: 5.6.3 '@typescript-eslint/type-utils@8.40.0': resolution: {integrity: sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: 5.6.3 '@typescript-eslint/types@8.40.0': resolution: {integrity: sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==} @@ -2653,14 +2647,14 @@ packages: resolution: {integrity: sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: 5.6.3 '@typescript-eslint/utils@8.40.0': resolution: {integrity: sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: 5.6.3 '@typescript-eslint/visitor-keys@8.40.0': resolution: {integrity: sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==} @@ -2807,27 +2801,9 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 vue: ^3.2.25 - '@vitest/browser@4.0.0-beta.13': - resolution: {integrity: sha512-Vn9XmqM24644xLbNnWIGdb3wTfHnCF5gu3wLo+8488bCfhkYAWmfX6wCIsSa3FtNnW1VmrD36FOTsTlMNl/XeA==} - peerDependencies: - playwright: '*' - safaridriver: '*' - vitest: 4.0.0-beta.13 - webdriverio: ^7.0.0 || ^8.0.0 || ^9.0.0 - peerDependenciesMeta: - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true - '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/expect@4.0.0-beta.13': - resolution: {integrity: sha512-IedkvNE1MdIy3chCbXLqHqhaFGyOaF27p7UuRiMg6UAAcj0ls2vLFaig/GYZkuCmkAHyIbSzwwyGGpBqEEMuMQ==} - '@vitest/mocker@3.2.4': resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: @@ -2839,47 +2815,26 @@ packages: vite: optional: true - '@vitest/mocker@4.0.0-beta.13': - resolution: {integrity: sha512-aE0e4ClvYDrhK8vZFrDFt3M+9rFev6oJrEI5UpA92zytf/+FmjBAoPCZrJCFRNCtyyadwVMYMjvDcM9dd/eLvg==} - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - '@vitest/pretty-format@3.2.4': resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/pretty-format@4.0.0-beta.13': - resolution: {integrity: sha512-s/CRImJgxB8TsaEmFJn/coheUfs6ln5rZw0d7YK1Fw3Tebck4HDBZT1LoBF3cXVEc4h9WS4n1CjuxtQo6qNnRQ==} - '@vitest/runner@3.2.4': resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - '@vitest/runner@4.0.0-beta.13': - resolution: {integrity: sha512-nntrDl4/G3YWTUy/4Nm6lcWjZhPLzLYaNlctTP2WxPFvqIxkeKt4QmCUsTbiI0ltkdJ3PNhKRKDnXZEY6NPr+Q==} - '@vitest/snapshot@3.2.4': resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@vitest/snapshot@4.0.0-beta.13': - resolution: {integrity: sha512-4eIcUWQMr2UzA011iS/q+pfbtIiCAhFxlqoZkt3DEn/6rE2IIQV7w1wU9Jl8rzzGp2e42yTDoM7W+92imGnAeA==} - '@vitest/spy@3.2.4': resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/spy@4.0.0-beta.13': - resolution: {integrity: sha512-wjIjMhR385hfExvh6IpEvCaYCvnRb/7Uu9SXXFPbnalGIuG8CGiMsId02nNI3Q3WvqSon5IYqgXU3zkrzKtQ4A==} + '@vitest/ui@3.2.4': + resolution: {integrity: sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==} + peerDependencies: + vitest: 3.2.4 '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@vitest/utils@4.0.0-beta.13': - resolution: {integrity: sha512-vR+JiskbK9zYbnSn2OLZvAUOItAZSDaXSfi3lJwax21ue162ODNSM5GHk/GtnBtoHQoe0IWMpAMwRaJm8Isftg==} - '@volar/language-core@2.4.15': resolution: {integrity: sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==} @@ -2926,15 +2881,27 @@ packages: '@vue/compiler-core@3.5.21': resolution: {integrity: sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==} + '@vue/compiler-core@3.5.22': + resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==} + '@vue/compiler-dom@3.5.21': resolution: {integrity: sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==} + '@vue/compiler-dom@3.5.22': + resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==} + '@vue/compiler-sfc@3.5.21': resolution: {integrity: sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==} + '@vue/compiler-sfc@3.5.22': + resolution: {integrity: sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==} + '@vue/compiler-ssr@3.5.21': resolution: {integrity: sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==} + '@vue/compiler-ssr@3.5.22': + resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==} + '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} @@ -2963,10 +2930,18 @@ packages: '@vue/devtools-shared@8.0.2': resolution: {integrity: sha512-mLU0QVdy5Lp40PMGSixDw/Kbd6v5dkQXltd2r+mdVQV7iUog2NlZuLxFZApFZ/mObUBDhoCpf0T3zF2FWWdeHw==} + '@vue/language-core@2.2.0': + resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} + peerDependencies: + typescript: 5.6.3 + peerDependenciesMeta: + typescript: + optional: true + '@vue/language-core@2.2.12': resolution: {integrity: sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==} peerDependencies: - typescript: '*' + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -2974,7 +2949,7 @@ packages: '@vue/language-core@3.0.8': resolution: {integrity: sha512-eYs6PF7bxoPYvek9qxceo1BCwFbJZYqJll+WaYC8o8ec60exqj+n+QRGGiJHSeUfYp0hDxARbMdxMq/fbPgU5g==} peerDependencies: - typescript: '*' + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -2982,27 +2957,44 @@ packages: '@vue/reactivity@3.5.21': resolution: {integrity: sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA==} + '@vue/reactivity@3.5.22': + resolution: {integrity: sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==} + '@vue/runtime-core@3.5.21': resolution: {integrity: sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA==} + '@vue/runtime-core@3.5.22': + resolution: {integrity: sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==} + '@vue/runtime-dom@3.5.21': resolution: {integrity: sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w==} + '@vue/runtime-dom@3.5.22': + resolution: {integrity: sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==} + '@vue/server-renderer@3.5.21': resolution: {integrity: sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA==} peerDependencies: vue: 3.5.21 + '@vue/server-renderer@3.5.22': + resolution: {integrity: sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==} + peerDependencies: + vue: 3.5.22 + '@vue/shared@3.5.21': resolution: {integrity: sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==} + '@vue/shared@3.5.22': + resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==} + '@vue/test-utils@2.4.6': resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==} '@vue/tsconfig@0.8.1': resolution: {integrity: sha512-aK7feIWPXFSUhsCP9PFqPyFOcz4ENkb8hZ2pneL6m2UjCkccvaOhC/5KCKluuBufvp2KzkbdA2W2pk20vLzu3g==} peerDependencies: - typescript: 5.x + typescript: 5.6.3 vue: ^3.4.0 peerDependenciesMeta: typescript: @@ -3165,6 +3157,9 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + alien-signals@0.4.14: + resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} + alien-signals@1.0.13: resolution: {integrity: sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==} @@ -3183,10 +3178,6 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -3226,9 +3217,6 @@ packages: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - aria-query@5.3.2: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} @@ -3426,10 +3414,6 @@ packages: resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} - chai@6.0.1: - resolution: {integrity: sha512-/JOoU2//6p5vCXh00FpNgtlw0LjvhGttaWc+y7wpW9yjBm3ys0dI8tSKZxIOgNruz5J0RleccatSIC3uxEZP0g==} - engines: {node: '>=18'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -3902,9 +3886,6 @@ packages: resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} - dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -4122,7 +4103,7 @@ packages: engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=9.0.0' - typescript: '>=4.5' + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -4265,10 +4246,6 @@ packages: resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} - expect-type@1.2.2: - resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} - engines: {node: '>=12.0.0'} - exsolve@1.0.7: resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} @@ -4323,6 +4300,9 @@ packages: fflate@0.7.4: resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + figures@6.1.0: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} @@ -5123,10 +5103,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true - magic-regexp@0.10.0: resolution: {integrity: sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg==} @@ -5422,10 +5398,10 @@ packages: hasBin: true peerDependencies: sass: ^1.85.0 - typescript: '>=5.7.3' + typescript: 5.6.3 vue: ^3.5.13 vue-sfc-transformer: ^0.1.1 - vue-tsc: ^1.8.27 || ^2.0.21 + vue-tsc: 2.2.0 peerDependenciesMeta: sass: optional: true @@ -5849,10 +5825,6 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - pixelmatch@7.1.0: - resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} - hasBin: true - pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} @@ -5873,10 +5845,6 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - pngjs@7.0.0: - resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} - engines: {node: '>=14.19.0'} - postcss-calc@10.1.1: resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==} engines: {node: ^18.12 || ^20.9 || >=22.0} @@ -6078,10 +6046,6 @@ packages: resolution: {integrity: sha512-285/jRCYIbMGDciDdrw0KPNC4LKEEwz/bwErcYNxSJOi4CpGUuLpb9gQpg3XJP0XYj9ldSRluXxih4lX2YN8Xw==} engines: {node: '>=20'} - pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - pretty-ms@9.2.0: resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} engines: {node: '>=18'} @@ -6143,9 +6107,6 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true - react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -6227,6 +6188,11 @@ packages: peerDependencies: vue: '>= 3.2.0' + reka-ui@2.5.1: + resolution: {integrity: sha512-QJGB3q21wQ1Kw28HhhNDpjfFe8qpePX1gK4FTBRd68XTh9aEnhR5bTJnlV0jxi8FBPh0xivZBeNFUc3jiGx7mQ==} + peerDependencies: + vue: '>= 3.2.0' + remark-emoji@5.0.2: resolution: {integrity: sha512-IyIqGELcyK5AVdLFafoiNww+Eaw/F+rGrNSXoKucjo95uL267zrddgxGM83GN1wFIb68pyDuAsY3m5t2Cav1pQ==} engines: {node: '>=18'} @@ -6293,7 +6259,7 @@ packages: engines: {node: '>=16'} peerDependencies: rollup: ^3.29.4 || ^4 - typescript: ^4.5 || ^5.0 + typescript: 5.6.3 rollup-plugin-visualizer@6.0.3: resolution: {integrity: sha512-ZU41GwrkDcCpVoffviuM9Clwjy5fcUxlz0oMoTXTYsK+tcIFzbdacnrr2n8TXcHxbGKKXtOdjxM2HUS4HjkwIw==} @@ -6715,18 +6681,10 @@ packages: resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} - tinypool@2.0.0: - resolution: {integrity: sha512-/RX9RzeH2xU5ADE7n2Ykvmi9ED3FBGPAjw9u3zucrNNaEBIO0HPSYgL0NT7+3p147ojeSdaVu08F6hjpv31HJg==} - engines: {node: ^20.0.0 || >=22.0.0} - tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} - engines: {node: '>=14.0.0'} - tinyspy@4.0.3: resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} @@ -6759,14 +6717,14 @@ packages: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} peerDependencies: - typescript: '>=4.8.4' + typescript: 5.6.3 tsconfck@3.1.6: resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} engines: {node: ^18 || >=20} hasBin: true peerDependencies: - typescript: ^5.0.0 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -6793,11 +6751,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.9.2: - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} - engines: {node: '>=14.17'} - hasBin: true - ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} @@ -6808,7 +6761,7 @@ packages: resolution: {integrity: sha512-+U5CdtrdjfWkZhuO4N9l5UhyiccoeMEXIc2Lbs30Haxb+tRwB3VwB8AoZRxlAzORXunenSo+j6lh45jx+xkKgg==} hasBin: true peerDependencies: - typescript: ^5.9.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -7078,11 +7031,11 @@ packages: meow: ^13.2.0 optionator: ^0.9.4 stylelint: '>=16' - typescript: '*' + typescript: 5.6.3 vite: '>=2.0.0' vls: '*' vti: '*' - vue-tsc: ~2.2.10 || ^3.0.0 + vue-tsc: 2.2.0 peerDependenciesMeta: '@biomejs/biome': optional: true @@ -7201,34 +7154,6 @@ packages: jsdom: optional: true - vitest@4.0.0-beta.13: - resolution: {integrity: sha512-Y37TT2UTQHfv4UfzlqgYd+98sUqSWrSrCiaM1WDZASQCNKam1eBJ74hfdgnCHu9hG+eyGduHC/xloQayQibrig==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 4.0.0-beta.13 - '@vitest/ui': 4.0.0-beta.13 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/debug': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} @@ -7238,7 +7163,7 @@ packages: vue-component-meta@2.2.12: resolution: {integrity: sha512-dQU6/obNSNbennJ1xd+rhDid4g3vQro+9qUBBIg8HMZH2Zs1jTpkFNxuQ3z77bOlU+ew08Qck9sbYkdSePr0Pw==} peerDependencies: - typescript: '*' + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -7246,7 +7171,7 @@ packages: vue-component-meta@3.0.8: resolution: {integrity: sha512-DEdPomVB6p/zYT4XUgav+NiA2LtkoDQ7HCY0hQaHc8YvoDwA2q0hHsQdX3uDQuFNcZTiwX+lIUuGU4iaVybDcA==} peerDependencies: - typescript: '*' + typescript: 5.6.3 vue-component-type-helpers@2.2.12: resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==} @@ -7287,16 +7212,24 @@ packages: esbuild: '*' vue: ^3.5.13 - vue-tsc@2.2.12: - resolution: {integrity: sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==} + vue-tsc@2.2.0: + resolution: {integrity: sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg==} hasBin: true peerDependencies: - typescript: '>=5.0.0' + typescript: 5.6.3 vue@3.5.21: resolution: {integrity: sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==} peerDependencies: - typescript: '*' + typescript: 5.6.3 + peerDependenciesMeta: + typescript: + optional: true + + vue@3.5.22: + resolution: {integrity: sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==} + peerDependencies: + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -7531,13 +7464,13 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/vue@2.0.51(vue@3.5.21(typescript@5.9.2))(zod@4.1.11)': + '@ai-sdk/vue@2.0.51(vue@3.5.22(typescript@5.6.3))(zod@4.1.11)': dependencies: '@ai-sdk/provider-utils': 3.0.9(zod@4.1.11) ai: 5.0.51(zod@4.1.11) - swrv: 1.1.0(vue@3.5.21(typescript@5.9.2)) + swrv: 1.1.0(vue@3.5.22(typescript@5.6.3)) optionalDependencies: - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) zod: 4.1.11 '@alloc/quick-lru@5.2.0': {} @@ -7728,8 +7661,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/runtime@7.28.4': {} - '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 @@ -7744,7 +7675,7 @@ snapshots: '@babel/parser': 7.28.4 '@babel/template': 7.27.2 '@babel/types': 7.28.4 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -8098,11 +8029,11 @@ snapshots: '@floating-ui/utils@0.2.9': {} - '@floating-ui/vue@1.1.6(vue@3.5.21(typescript@5.9.2))': + '@floating-ui/vue@1.1.6(vue@3.5.22(typescript@5.6.3))': dependencies: '@floating-ui/dom': 1.7.1 '@floating-ui/utils': 0.2.9 - vue-demi: 0.14.10(vue@3.5.21(typescript@5.9.2)) + vue-demi: 0.14.10(vue@3.5.22(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -8165,10 +8096,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@iconify/vue@5.0.0(vue@3.5.21(typescript@5.9.2))': + '@iconify/vue@5.0.0(vue@3.5.22(typescript@5.6.3))': dependencies: '@iconify/types': 2.0.0 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: @@ -8544,12 +8475,12 @@ snapshots: prompts: 2.4.2 semver: 7.7.2 - '@nuxt/devtools@2.6.3(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2))': + '@nuxt/devtools@2.6.3(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.6.3))': dependencies: '@nuxt/devtools-kit': 2.6.3(magicast@0.3.5)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) '@nuxt/devtools-wizard': 2.6.3 '@nuxt/kit': 3.19.2(magicast@0.3.5) - '@vue/devtools-core': 7.7.7(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2)) + '@vue/devtools-core': 7.7.7(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.6.3)) '@vue/devtools-kit': 7.7.7 birpc: 2.5.0 consola: 3.4.2 @@ -8576,7 +8507,7 @@ snapshots: tinyglobby: 0.2.15 vite: 7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) vite-plugin-inspect: 11.3.3(@nuxt/kit@3.19.2(magicast@0.3.5))(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) - vite-plugin-vue-tracer: 1.0.0(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2)) + vite-plugin-vue-tracer: 1.0.0(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.6.3)) which: 5.0.0 ws: 8.18.3 transitivePeerDependencies: @@ -8585,26 +8516,26 @@ snapshots: - utf-8-validate - vue - '@nuxt/eslint-config@1.9.0(@typescript-eslint/utils@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@nuxt/eslint-config@1.9.0(@typescript-eslint/utils@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3))(@vue/compiler-sfc@3.5.22)(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3)': dependencies: '@antfu/install-pkg': 1.1.0 '@clack/prompts': 0.11.0 '@eslint/js': 9.36.0 - '@nuxt/eslint-plugin': 1.9.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@nuxt/eslint-plugin': 1.9.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3) '@stylistic/eslint-plugin': 5.2.3(eslint@9.36.0(jiti@2.5.1)) - '@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3))(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3) eslint: 9.36.0(jiti@2.5.1) eslint-config-flat-gitignore: 2.1.0(eslint@9.36.0(jiti@2.5.1)) eslint-flat-config-utils: 2.1.1 eslint-merge-processors: 2.0.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-import-lite: 0.3.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-import-lite: 0.3.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3))(eslint@9.36.0(jiti@2.5.1)) eslint-plugin-jsdoc: 54.1.1(eslint@9.36.0(jiti@2.5.1)) eslint-plugin-regexp: 2.10.0(eslint@9.36.0(jiti@2.5.1)) eslint-plugin-unicorn: 60.0.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-vue: 10.4.0(@typescript-eslint/parser@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1))) - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-vue: 10.4.0(@typescript-eslint/parser@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3))(eslint@9.36.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1))) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.22)(eslint@9.36.0(jiti@2.5.1)) globals: 16.3.0 local-pkg: 1.1.2 pathe: 2.0.3 @@ -8616,10 +8547,10 @@ snapshots: - supports-color - typescript - '@nuxt/eslint-plugin@1.9.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@nuxt/eslint-plugin@1.9.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/utils': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3) eslint: 9.36.0(jiti@2.5.1) transitivePeerDependencies: - supports-color @@ -8671,12 +8602,12 @@ snapshots: - uploadthing - vite - '@nuxt/icon@2.0.0(magicast@0.3.5)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2))': + '@nuxt/icon@2.0.0(magicast@0.3.5)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.6.3))': dependencies: '@iconify/collections': 1.0.597 '@iconify/types': 2.0.0 '@iconify/utils': 3.0.2 - '@iconify/vue': 5.0.0(vue@3.5.21(typescript@5.9.2)) + '@iconify/vue': 5.0.0(vue@3.5.22(typescript@5.6.3)) '@nuxt/devtools-kit': 2.6.5(magicast@0.3.5)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) '@nuxt/kit': 4.1.2(magicast@0.3.5) consola: 3.4.2 @@ -8785,7 +8716,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/module-builder@1.0.2(@nuxt/cli@3.28.0(magicast@0.3.5))(@vue/compiler-core@3.5.21)(esbuild@0.25.9)(typescript@5.9.2)(vue-tsc@2.2.12(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2))': + '@nuxt/module-builder@1.0.2(@nuxt/cli@3.28.0(magicast@0.3.5))(@vue/compiler-core@3.5.22)(esbuild@0.25.9)(typescript@5.6.3)(vue-tsc@2.2.0(typescript@5.6.3))(vue@3.5.22(typescript@5.6.3))': dependencies: '@nuxt/cli': 3.28.0(magicast@0.3.5) citty: 0.1.6 @@ -8793,14 +8724,14 @@ snapshots: defu: 6.1.4 jiti: 2.5.1 magic-regexp: 0.10.0 - mkdist: 2.3.0(typescript@5.9.2)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.21)(esbuild@0.25.9)(vue@3.5.21(typescript@5.9.2)))(vue-tsc@2.2.12(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2)) + mkdist: 2.3.0(typescript@5.6.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.22)(esbuild@0.25.9)(vue@3.5.22(typescript@5.6.3)))(vue-tsc@2.2.0(typescript@5.6.3))(vue@3.5.22(typescript@5.6.3)) mlly: 1.8.0 pathe: 2.0.3 pkg-types: 2.3.0 - tsconfck: 3.1.6(typescript@5.9.2) - typescript: 5.9.2 - unbuild: 3.6.1(typescript@5.9.2)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.21)(esbuild@0.25.9)(vue@3.5.21(typescript@5.9.2)))(vue-tsc@2.2.12(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2)) - vue-sfc-transformer: 0.1.16(@vue/compiler-core@3.5.21)(esbuild@0.25.9)(vue@3.5.21(typescript@5.9.2)) + tsconfck: 3.1.6(typescript@5.6.3) + typescript: 5.6.3 + unbuild: 3.6.1(typescript@5.6.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.22)(esbuild@0.25.9)(vue@3.5.22(typescript@5.6.3)))(vue-tsc@2.2.0(typescript@5.6.3))(vue@3.5.22(typescript@5.6.3)) + vue-sfc-transformer: 0.1.16(@vue/compiler-core@3.5.22)(esbuild@0.25.9)(vue@3.5.22(typescript@5.6.3)) transitivePeerDependencies: - '@vue/compiler-core' - esbuild @@ -8835,7 +8766,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/test-utils@3.19.2(@vue/test-utils@2.4.6)(happy-dom@17.6.3)(magicast@0.3.5)(playwright-core@1.55.1)(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))': + '@nuxt/test-utils@3.19.2(@vitest/ui@3.2.4)(@vue/test-utils@2.4.6)(happy-dom@17.6.3)(magicast@0.3.5)(playwright-core@1.55.1)(typescript@5.6.3)(vitest@3.2.4)': dependencies: '@nuxt/kit': 3.19.2(magicast@0.3.5) c12: 3.2.0(magicast@0.3.5) @@ -8859,35 +8790,36 @@ snapshots: tinyexec: 1.0.1 ufo: 1.6.1 unplugin: 2.3.10 - vitest-environment-nuxt: 1.0.1(@vue/test-utils@2.4.6)(happy-dom@17.6.3)(magicast@0.3.5)(playwright-core@1.55.1)(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) - vue: 3.5.21(typescript@5.9.2) + vitest-environment-nuxt: 1.0.1(@vitest/ui@3.2.4)(@vue/test-utils@2.4.6)(happy-dom@17.6.3)(magicast@0.3.5)(playwright-core@1.55.1)(typescript@5.6.3)(vitest@3.2.4) + vue: 3.5.21(typescript@5.6.3) optionalDependencies: + '@vitest/ui': 3.2.4(vitest@3.2.4) '@vue/test-utils': 2.4.6 happy-dom: 17.6.3 playwright-core: 1.55.1 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(@vitest/ui@3.2.4)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) transitivePeerDependencies: - magicast - typescript - '@nuxt/ui@4.0.0(@babel/parser@7.28.4)(@netlify/blobs@9.1.2)(change-case@5.4.4)(db0@0.3.2(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.7.0)(jwt-decode@4.0.0)(magicast@0.3.5)(typescript@5.9.2)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-router@4.5.1(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2))(zod@4.1.11)': + '@nuxt/ui@4.0.0(@babel/parser@7.28.4)(@netlify/blobs@9.1.2)(change-case@5.4.4)(db0@0.3.2(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.7.0)(jwt-decode@4.0.0)(magicast@0.3.5)(typescript@5.6.3)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-router@4.5.1(vue@3.5.22(typescript@5.6.3)))(vue@3.5.22(typescript@5.6.3))(zod@4.1.11)': dependencies: - '@ai-sdk/vue': 2.0.51(vue@3.5.21(typescript@5.9.2))(zod@4.1.11) - '@iconify/vue': 5.0.0(vue@3.5.21(typescript@5.9.2)) + '@ai-sdk/vue': 2.0.51(vue@3.5.22(typescript@5.6.3))(zod@4.1.11) + '@iconify/vue': 5.0.0(vue@3.5.22(typescript@5.6.3)) '@internationalized/date': 3.9.0 '@internationalized/number': 3.6.5 '@nuxt/fonts': 0.11.4(@netlify/blobs@9.1.2)(db0@0.3.2(better-sqlite3@12.4.1))(ioredis@5.7.0)(magicast@0.3.5)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) - '@nuxt/icon': 2.0.0(magicast@0.3.5)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2)) + '@nuxt/icon': 2.0.0(magicast@0.3.5)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.6.3)) '@nuxt/kit': 4.1.2(magicast@0.3.5) '@nuxt/schema': 4.1.2 '@nuxtjs/color-mode': 3.5.2(magicast@0.3.5) '@standard-schema/spec': 1.0.0 '@tailwindcss/postcss': 4.1.13 '@tailwindcss/vite': 4.1.13(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) - '@tanstack/vue-table': 8.21.3(vue@3.5.21(typescript@5.9.2)) - '@unhead/vue': 2.0.17(vue@3.5.21(typescript@5.9.2)) - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) - '@vueuse/integrations': 13.9.0(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(vue@3.5.21(typescript@5.9.2)) + '@tanstack/vue-table': 8.21.3(vue@3.5.22(typescript@5.6.3)) + '@unhead/vue': 2.0.17(vue@3.5.22(typescript@5.6.3)) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.6.3)) + '@vueuse/integrations': 13.9.0(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(vue@3.5.22(typescript@5.6.3)) colortranslator: 5.0.0 consola: 3.4.2 defu: 6.1.4 @@ -8896,30 +8828,30 @@ snapshots: embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0) embla-carousel-class-names: 8.6.0(embla-carousel@8.6.0) embla-carousel-fade: 8.6.0(embla-carousel@8.6.0) - embla-carousel-vue: 8.6.0(vue@3.5.21(typescript@5.9.2)) + embla-carousel-vue: 8.6.0(vue@3.5.22(typescript@5.6.3)) embla-carousel-wheel-gestures: 8.1.0(embla-carousel@8.6.0) fuse.js: 7.1.0 hookable: 5.5.3 knitwork: 1.2.0 magic-string: 0.30.19 mlly: 1.8.0 - motion-v: 1.7.1(@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2)) + motion-v: 1.7.1(@vueuse/core@13.9.0(vue@3.5.22(typescript@5.6.3)))(vue@3.5.22(typescript@5.6.3)) ohash: 2.0.11 pathe: 2.0.3 - reka-ui: 2.5.0(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + reka-ui: 2.5.0(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3)) scule: 1.3.0 tailwind-merge: 3.3.1 tailwind-variants: 3.1.1(tailwind-merge@3.3.1)(tailwindcss@4.1.13) tailwindcss: 4.1.13 tinyglobby: 0.2.15 - typescript: 5.9.2 + typescript: 5.6.3 unplugin: 2.3.10 - unplugin-auto-import: 20.2.0(@nuxt/kit@4.1.2(magicast@0.3.5))(@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2))) - unplugin-vue-components: 29.1.0(@babel/parser@7.28.4)(@nuxt/kit@4.1.2(magicast@0.3.5))(vue@3.5.21(typescript@5.9.2)) - vaul-vue: 0.4.1(reka-ui@2.5.0(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2)) + unplugin-auto-import: 20.2.0(@nuxt/kit@4.1.2(magicast@0.3.5))(@vueuse/core@13.9.0(vue@3.5.22(typescript@5.6.3))) + unplugin-vue-components: 29.1.0(@babel/parser@7.28.4)(@nuxt/kit@4.1.2(magicast@0.3.5))(vue@3.5.22(typescript@5.6.3)) + vaul-vue: 0.4.1(reka-ui@2.5.0(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3)))(vue@3.5.22(typescript@5.6.3)) vue-component-type-helpers: 3.0.8 optionalDependencies: - vue-router: 4.5.1(vue@3.5.21(typescript@5.9.2)) + vue-router: 4.5.1(vue@3.5.22(typescript@5.6.3)) zod: 4.1.11 transitivePeerDependencies: - '@azure/app-configuration' @@ -8963,12 +8895,12 @@ snapshots: - vite - vue - '@nuxt/vite-builder@4.1.2(@types/node@22.18.6)(eslint@9.36.0(jiti@2.5.1))(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.1)(terser@5.43.1)(typescript@5.9.2)(vue-tsc@2.2.12(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2))(yaml@2.8.0)': + '@nuxt/vite-builder@4.1.2(@types/node@22.18.6)(eslint@9.36.0(jiti@2.5.1))(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.1)(terser@5.43.1)(typescript@5.6.3)(vue-tsc@2.2.0(typescript@5.6.3))(vue@3.5.21(typescript@5.6.3))(yaml@2.8.0)': dependencies: '@nuxt/kit': 4.1.2(magicast@0.3.5) '@rollup/plugin-replace': 6.0.2(rollup@4.50.1) - '@vitejs/plugin-vue': 6.0.1(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2)) - '@vitejs/plugin-vue-jsx': 5.1.1(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2)) + '@vitejs/plugin-vue': 6.0.1(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.6.3)) + '@vitejs/plugin-vue-jsx': 5.1.1(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.6.3)) autoprefixer: 10.4.21(postcss@8.5.6) consola: 3.4.2 cssnano: 7.1.1(postcss@8.5.6) @@ -8992,8 +8924,8 @@ snapshots: unenv: 2.0.0-rc.21 vite: 7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) vite-node: 3.2.4(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) - vite-plugin-checker: 0.10.3(eslint@9.36.0(jiti@2.5.1))(optionator@0.9.4)(typescript@5.9.2)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.12(typescript@5.9.2)) - vue: 3.5.21(typescript@5.9.2) + vite-plugin-checker: 0.10.3(eslint@9.36.0(jiti@2.5.1))(optionator@0.9.4)(typescript@5.6.3)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.0(typescript@5.6.3)) + vue: 3.5.21(typescript@5.6.3) vue-bundle-renderer: 2.1.2 transitivePeerDependencies: - '@biomejs/biome' @@ -9794,30 +9726,15 @@ snapshots: '@tanstack/virtual-core@3.13.10': {} - '@tanstack/vue-table@8.21.3(vue@3.5.21(typescript@5.9.2))': + '@tanstack/vue-table@8.21.3(vue@3.5.22(typescript@5.6.3))': dependencies: '@tanstack/table-core': 8.21.3 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) - '@tanstack/vue-virtual@3.13.10(vue@3.5.21(typescript@5.9.2))': + '@tanstack/vue-virtual@3.13.10(vue@3.5.22(typescript@5.6.3))': dependencies: '@tanstack/virtual-core': 3.13.10 - vue: 3.5.21(typescript@5.9.2) - - '@testing-library/dom@10.4.1': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.28.4 - '@types/aria-query': 5.0.4 - aria-query: 5.3.0 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - picocolors: 1.1.1 - pretty-format: 27.5.1 - - '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': - dependencies: - '@testing-library/dom': 10.4.1 + vue: 3.5.22(typescript@5.6.3) '@trysound/sax@0.2.0': optional: true @@ -9829,8 +9746,6 @@ snapshots: tslib: 2.8.1 optional: true - '@types/aria-query@5.0.4': {} - '@types/chai@5.2.2': dependencies: '@types/deep-eql': 4.0.2 @@ -9895,41 +9810,41 @@ snapshots: '@types/web-bluetooth@0.0.21': {} - '@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3))(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.40.0 - '@typescript-eslint/type-utils': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/type-utils': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3) + '@typescript-eslint/utils': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.40.0 eslint: 9.36.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 8.40.0 '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.40.0 debug: 4.4.1 eslint: 9.36.0(jiti@2.5.1) - typescript: 5.9.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.40.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.40.0(typescript@5.6.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.6.3) '@typescript-eslint/types': 8.40.0 - debug: 4.4.1 - typescript: 5.9.2 + debug: 4.4.3 + typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -9938,28 +9853,28 @@ snapshots: '@typescript-eslint/types': 8.40.0 '@typescript-eslint/visitor-keys': 8.40.0 - '@typescript-eslint/tsconfig-utils@8.40.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.40.0(typescript@5.6.3)': dependencies: - typescript: 5.9.2 + typescript: 5.6.3 - '@typescript-eslint/type-utils@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3) debug: 4.4.1 eslint: 9.36.0(jiti@2.5.1) - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.40.0': {} - '@typescript-eslint/typescript-estree@8.40.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.40.0(typescript@5.6.3)': dependencies: - '@typescript-eslint/project-service': 8.40.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.2) + '@typescript-eslint/project-service': 8.40.0(typescript@5.6.3) + '@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.6.3) '@typescript-eslint/types': 8.40.0 '@typescript-eslint/visitor-keys': 8.40.0 debug: 4.4.1 @@ -9967,19 +9882,19 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.40.0 '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.6.3) eslint: 9.36.0(jiti@2.5.1) - typescript: 5.9.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -9990,11 +9905,17 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@unhead/vue@2.0.17(vue@3.5.21(typescript@5.9.2))': + '@unhead/vue@2.0.17(vue@3.5.21(typescript@5.6.3))': dependencies: hookable: 5.5.3 unhead: 2.0.17 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.21(typescript@5.6.3) + + '@unhead/vue@2.0.17(vue@3.5.22(typescript@5.6.3))': + dependencies: + hookable: 5.5.3 + unhead: 2.0.17 + vue: 3.5.22(typescript@5.6.3) '@unocss/core@66.5.2': {} @@ -10099,7 +10020,7 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-vue-jsx@5.1.1(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2))': + '@vitejs/plugin-vue-jsx@5.1.1(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.6.3))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) @@ -10107,36 +10028,21 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.36 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.4) vite: 7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.21(typescript@5.6.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.1(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2))': + '@vitejs/plugin-vue@6.0.1(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.6.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.29 vite: 7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.21(typescript@5.6.3) - '@vitest/browser@4.0.0-beta.13(playwright@1.55.1)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vitest@4.0.0-beta.13)': + '@vitejs/plugin-vue@6.0.1(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.6.3))': dependencies: - '@testing-library/dom': 10.4.1 - '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) - '@vitest/mocker': 4.0.0-beta.13(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) - '@vitest/utils': 4.0.0-beta.13 - magic-string: 0.30.19 - pixelmatch: 7.1.0 - pngjs: 7.0.0 - sirv: 3.0.2 - tinyrainbow: 3.0.3 - vitest: 4.0.0-beta.13(@types/debug@4.1.12)(@types/node@22.18.6)(@vitest/browser@4.0.0-beta.13)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) - ws: 8.18.3 - optionalDependencies: - playwright: 1.55.1 - transitivePeerDependencies: - - bufferutil - - msw - - utf-8-validate - - vite + '@rolldown/pluginutils': 1.0.0-beta.29 + vite: 7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) + vue: 3.5.22(typescript@5.6.3) '@vitest/expect@3.2.4': dependencies: @@ -10146,14 +10052,6 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/expect@4.0.0-beta.13': - dependencies: - '@types/chai': 5.2.2 - '@vitest/spy': 4.0.0-beta.13 - '@vitest/utils': 4.0.0-beta.13 - chai: 6.0.1 - tinyrainbow: 3.0.3 - '@vitest/mocker@3.2.4(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.2.4 @@ -10162,50 +10060,37 @@ snapshots: optionalDependencies: vite: 7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) - '@vitest/mocker@4.0.0-beta.13(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))': - dependencies: - '@vitest/spy': 4.0.0-beta.13 - estree-walker: 3.0.3 - magic-string: 0.30.19 - optionalDependencies: - vite: 7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) - '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 - '@vitest/pretty-format@4.0.0-beta.13': - dependencies: - tinyrainbow: 3.0.3 - '@vitest/runner@3.2.4': dependencies: '@vitest/utils': 3.2.4 pathe: 2.0.3 strip-literal: 3.0.0 - '@vitest/runner@4.0.0-beta.13': - dependencies: - '@vitest/utils': 4.0.0-beta.13 - pathe: 2.0.3 - '@vitest/snapshot@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 magic-string: 0.30.19 pathe: 2.0.3 - '@vitest/snapshot@4.0.0-beta.13': - dependencies: - '@vitest/pretty-format': 4.0.0-beta.13 - magic-string: 0.30.19 - pathe: 2.0.3 - '@vitest/spy@3.2.4': dependencies: tinyspy: 4.0.3 - '@vitest/spy@4.0.0-beta.13': {} + '@vitest/ui@3.2.4(vitest@3.2.4)': + dependencies: + '@vitest/utils': 3.2.4 + fflate: 0.8.2 + flatted: 3.3.3 + pathe: 2.0.3 + sirv: 3.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 2.0.0 + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(@vitest/ui@3.2.4)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) + optional: true '@vitest/utils@3.2.4': dependencies: @@ -10213,11 +10098,6 @@ snapshots: loupe: 3.1.4 tinyrainbow: 2.0.0 - '@vitest/utils@4.0.0-beta.13': - dependencies: - '@vitest/pretty-format': 4.0.0-beta.13 - tinyrainbow: 3.0.3 - '@volar/language-core@2.4.15': dependencies: '@volar/source-map': 2.4.15 @@ -10242,7 +10122,7 @@ snapshots: path-browserify: 1.0.1 vscode-uri: 3.1.0 - '@vue-macros/common@3.0.0-beta.16(vue@3.5.21(typescript@5.9.2))': + '@vue-macros/common@3.0.0-beta.16(vue@3.5.21(typescript@5.6.3))': dependencies: '@vue/compiler-sfc': 3.5.21 ast-kit: 2.1.2 @@ -10250,7 +10130,7 @@ snapshots: magic-string-ast: 1.0.2 unplugin-utils: 0.2.4 optionalDependencies: - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.21(typescript@5.6.3) '@vue/babel-helper-vue-transform-on@1.5.0': {} @@ -10289,11 +10169,24 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 + '@vue/compiler-core@3.5.22': + dependencies: + '@babel/parser': 7.28.4 + '@vue/shared': 3.5.22 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + '@vue/compiler-dom@3.5.21': dependencies: '@vue/compiler-core': 3.5.21 '@vue/shared': 3.5.21 + '@vue/compiler-dom@3.5.22': + dependencies: + '@vue/compiler-core': 3.5.22 + '@vue/shared': 3.5.22 + '@vue/compiler-sfc@3.5.21': dependencies: '@babel/parser': 7.28.4 @@ -10306,11 +10199,28 @@ snapshots: postcss: 8.5.6 source-map-js: 1.2.1 + '@vue/compiler-sfc@3.5.22': + dependencies: + '@babel/parser': 7.28.4 + '@vue/compiler-core': 3.5.22 + '@vue/compiler-dom': 3.5.22 + '@vue/compiler-ssr': 3.5.22 + '@vue/shared': 3.5.22 + estree-walker: 2.0.2 + magic-string: 0.30.19 + postcss: 8.5.6 + source-map-js: 1.2.1 + '@vue/compiler-ssr@3.5.21': dependencies: '@vue/compiler-dom': 3.5.21 '@vue/shared': 3.5.21 + '@vue/compiler-ssr@3.5.22': + dependencies: + '@vue/compiler-dom': 3.5.22 + '@vue/shared': 3.5.22 + '@vue/compiler-vue2@2.7.16': dependencies: de-indent: 1.0.2 @@ -10318,7 +10228,7 @@ snapshots: '@vue/devtools-api@6.6.4': {} - '@vue/devtools-core@7.7.7(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2))': + '@vue/devtools-core@7.7.7(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.6.3))': dependencies: '@vue/devtools-kit': 7.7.7 '@vue/devtools-shared': 7.7.7 @@ -10326,11 +10236,11 @@ snapshots: nanoid: 5.1.5 pathe: 2.0.3 vite-hot-client: 2.1.0(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.21(typescript@5.6.3) transitivePeerDependencies: - vite - '@vue/devtools-core@8.0.2(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2))': + '@vue/devtools-core@8.0.2(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.6.3))': dependencies: '@vue/devtools-kit': 8.0.2 '@vue/devtools-shared': 8.0.2 @@ -10338,7 +10248,7 @@ snapshots: nanoid: 5.1.5 pathe: 2.0.3 vite-hot-client: 2.1.0(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) transitivePeerDependencies: - vite @@ -10370,20 +10280,20 @@ snapshots: dependencies: rfdc: 1.4.1 - '@vue/language-core@2.2.12(typescript@5.6.3)': + '@vue/language-core@2.2.0(typescript@5.6.3)': dependencies: - '@volar/language-core': 2.4.15 + '@volar/language-core': 2.4.23 '@vue/compiler-dom': 3.5.21 '@vue/compiler-vue2': 2.7.16 '@vue/shared': 3.5.21 - alien-signals: 1.0.13 + alien-signals: 0.4.14 minimatch: 9.0.5 muggle-string: 0.4.1 path-browserify: 1.0.1 optionalDependencies: typescript: 5.6.3 - '@vue/language-core@2.2.12(typescript@5.9.2)': + '@vue/language-core@2.2.12(typescript@5.6.3)': dependencies: '@volar/language-core': 2.4.15 '@vue/compiler-dom': 3.5.21 @@ -10394,9 +10304,9 @@ snapshots: muggle-string: 0.4.1 path-browserify: 1.0.1 optionalDependencies: - typescript: 5.9.2 + typescript: 5.6.3 - '@vue/language-core@3.0.8(typescript@5.9.2)': + '@vue/language-core@3.0.8(typescript@5.6.3)': dependencies: '@volar/language-core': 2.4.23 '@vue/compiler-dom': 3.5.21 @@ -10407,17 +10317,26 @@ snapshots: path-browserify: 1.0.1 picomatch: 4.0.3 optionalDependencies: - typescript: 5.9.2 + typescript: 5.6.3 '@vue/reactivity@3.5.21': dependencies: '@vue/shared': 3.5.21 + '@vue/reactivity@3.5.22': + dependencies: + '@vue/shared': 3.5.22 + '@vue/runtime-core@3.5.21': dependencies: '@vue/reactivity': 3.5.21 '@vue/shared': 3.5.21 + '@vue/runtime-core@3.5.22': + dependencies: + '@vue/reactivity': 3.5.22 + '@vue/shared': 3.5.22 + '@vue/runtime-dom@3.5.21': dependencies: '@vue/reactivity': 3.5.21 @@ -10425,55 +10344,77 @@ snapshots: '@vue/shared': 3.5.21 csstype: 3.1.3 - '@vue/server-renderer@3.5.21(vue@3.5.21(typescript@5.9.2))': + '@vue/runtime-dom@3.5.22': + dependencies: + '@vue/reactivity': 3.5.22 + '@vue/runtime-core': 3.5.22 + '@vue/shared': 3.5.22 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.21(vue@3.5.21(typescript@5.6.3))': dependencies: '@vue/compiler-ssr': 3.5.21 '@vue/shared': 3.5.21 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.21(typescript@5.6.3) + + '@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.6.3))': + dependencies: + '@vue/compiler-ssr': 3.5.22 + '@vue/shared': 3.5.22 + vue: 3.5.22(typescript@5.6.3) '@vue/shared@3.5.21': {} + '@vue/shared@3.5.22': {} + '@vue/test-utils@2.4.6': dependencies: js-beautify: 1.15.4 vue-component-type-helpers: 2.2.12 - '@vue/tsconfig@0.8.1(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))': + '@vue/tsconfig@0.8.1(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3))': optionalDependencies: - typescript: 5.9.2 - vue: 3.5.21(typescript@5.9.2) + typescript: 5.6.3 + vue: 3.5.22(typescript@5.6.3) - '@vueuse/core@10.11.1(vue@3.5.21(typescript@5.9.2))': + '@vueuse/core@10.11.1(vue@3.5.22(typescript@5.6.3))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.5.21(typescript@5.9.2)) - vue-demi: 0.14.10(vue@3.5.21(typescript@5.9.2)) + '@vueuse/shared': 10.11.1(vue@3.5.22(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.22(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/core@12.8.2(typescript@5.9.2)': + '@vueuse/core@12.8.2(typescript@5.6.3)': dependencies: '@types/web-bluetooth': 0.0.21 '@vueuse/metadata': 12.8.2 - '@vueuse/shared': 12.8.2(typescript@5.9.2) - vue: 3.5.21(typescript@5.9.2) + '@vueuse/shared': 12.8.2(typescript@5.6.3) + vue: 3.5.22(typescript@5.6.3) transitivePeerDependencies: - typescript - '@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2))': + '@vueuse/core@13.9.0(vue@3.5.21(typescript@5.6.3))': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 13.9.0 + '@vueuse/shared': 13.9.0(vue@3.5.21(typescript@5.6.3)) + vue: 3.5.21(typescript@5.6.3) + + '@vueuse/core@13.9.0(vue@3.5.22(typescript@5.6.3))': dependencies: '@types/web-bluetooth': 0.0.21 '@vueuse/metadata': 13.9.0 - '@vueuse/shared': 13.9.0(vue@3.5.21(typescript@5.9.2)) - vue: 3.5.21(typescript@5.9.2) + '@vueuse/shared': 13.9.0(vue@3.5.22(typescript@5.6.3)) + vue: 3.5.22(typescript@5.6.3) - '@vueuse/integrations@13.9.0(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(vue@3.5.21(typescript@5.9.2))': + '@vueuse/integrations@13.9.0(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(vue@3.5.22(typescript@5.6.3))': dependencies: - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) - '@vueuse/shared': 13.9.0(vue@3.5.21(typescript@5.9.2)) - vue: 3.5.21(typescript@5.9.2) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.6.3)) + '@vueuse/shared': 13.9.0(vue@3.5.22(typescript@5.6.3)) + vue: 3.5.22(typescript@5.6.3) optionalDependencies: change-case: 5.4.4 fuse.js: 7.1.0 @@ -10485,22 +10426,26 @@ snapshots: '@vueuse/metadata@13.9.0': {} - '@vueuse/shared@10.11.1(vue@3.5.21(typescript@5.9.2))': + '@vueuse/shared@10.11.1(vue@3.5.22(typescript@5.6.3))': dependencies: - vue-demi: 0.14.10(vue@3.5.21(typescript@5.9.2)) + vue-demi: 0.14.10(vue@3.5.22(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/shared@12.8.2(typescript@5.9.2)': + '@vueuse/shared@12.8.2(typescript@5.6.3)': dependencies: - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) transitivePeerDependencies: - typescript - '@vueuse/shared@13.9.0(vue@3.5.21(typescript@5.9.2))': + '@vueuse/shared@13.9.0(vue@3.5.21(typescript@5.6.3))': + dependencies: + vue: 3.5.21(typescript@5.6.3) + + '@vueuse/shared@13.9.0(vue@3.5.22(typescript@5.6.3))': dependencies: - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) '@webcontainer/env@1.1.1': {} @@ -10593,6 +10538,8 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + alien-signals@0.4.14: {} + alien-signals@1.0.13: {} alien-signals@2.0.5: {} @@ -10605,8 +10552,6 @@ snapshots: dependencies: color-convert: 2.0.1 - ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} ansis@4.1.0: {} @@ -10653,10 +10598,6 @@ snapshots: dependencies: tslib: 2.8.1 - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 - aria-query@5.3.2: {} asap@2.0.6: {} @@ -10860,8 +10801,6 @@ snapshots: loupe: 3.1.4 pathval: 2.0.0 - chai@6.0.1: {} - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -11283,8 +11222,6 @@ snapshots: diff@8.0.2: {} - dom-accessibility-api@0.5.16: {} - dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -11356,11 +11293,11 @@ snapshots: dependencies: embla-carousel: 8.6.0 - embla-carousel-vue@8.6.0(vue@3.5.21(typescript@5.9.2)): + embla-carousel-vue@8.6.0(vue@3.5.22(typescript@5.6.3)): dependencies: embla-carousel: 8.6.0 embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) embla-carousel-wheel-gestures@8.1.0(embla-carousel@8.6.0): dependencies: @@ -11519,15 +11456,15 @@ snapshots: dependencies: eslint: 9.36.0(jiti@2.5.1) - eslint-plugin-import-lite@0.3.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-import-lite@0.3.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3): dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1)) '@typescript-eslint/types': 8.40.0 eslint: 9.36.0(jiti@2.5.1) optionalDependencies: - typescript: 5.9.2 + typescript: 5.6.3 - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3))(eslint@9.36.0(jiti@2.5.1)): dependencies: '@typescript-eslint/types': 8.40.0 comment-parser: 1.4.1 @@ -11540,7 +11477,7 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3) transitivePeerDependencies: - supports-color @@ -11593,7 +11530,7 @@ snapshots: semver: 7.7.2 strip-indent: 4.0.0 - eslint-plugin-vue@10.4.0(@typescript-eslint/parser@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1))): + eslint-plugin-vue@10.4.0(@typescript-eslint/parser@8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3))(eslint@9.36.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1))): dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1)) eslint: 9.36.0(jiti@2.5.1) @@ -11604,11 +11541,11 @@ snapshots: vue-eslint-parser: 10.2.0(eslint@9.36.0(jiti@2.5.1)) xml-name-validator: 4.0.0 optionalDependencies: - '@typescript-eslint/parser': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.40.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.6.3) - eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1)): + eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.22)(eslint@9.36.0(jiti@2.5.1)): dependencies: - '@vue/compiler-sfc': 3.5.21 + '@vue/compiler-sfc': 3.5.22 eslint: 9.36.0(jiti@2.5.1) eslint-scope@8.4.0: @@ -11733,8 +11670,6 @@ snapshots: expect-type@1.2.1: {} - expect-type@1.2.2: {} - exsolve@1.0.7: {} extend@3.0.2: {} @@ -11779,6 +11714,9 @@ snapshots: fflate@0.7.4: {} + fflate@0.8.2: + optional: true + figures@6.1.0: dependencies: is-unicode-supported: 2.1.0 @@ -12236,7 +12174,7 @@ snapshots: https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -12480,11 +12418,11 @@ snapshots: json-buffer@3.0.1: {} - json-editor-vue@0.18.1(vue@3.5.21(typescript@5.9.2)): + json-editor-vue@0.18.1(vue@3.5.22(typescript@5.6.3)): dependencies: vanilla-jsoneditor: 3.6.0 - vue: 3.5.21(typescript@5.9.2) - vue-demi: 0.14.10(vue@3.5.21(typescript@5.9.2)) + vue: 3.5.22(typescript@5.6.3) + vue-demi: 0.14.10(vue@3.5.22(typescript@5.6.3)) json-schema-to-typescript@15.0.4: dependencies: @@ -12675,8 +12613,6 @@ snapshots: dependencies: yallist: 3.1.1 - lz-string@1.5.0: {} - magic-regexp@0.10.0: dependencies: estree-walker: 3.0.3 @@ -13138,7 +13074,7 @@ snapshots: mkdirp@3.0.1: {} - mkdist@2.3.0(typescript@5.9.2)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.21)(esbuild@0.25.9)(vue@3.5.21(typescript@5.9.2)))(vue-tsc@2.2.12(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2)): + mkdist@2.3.0(typescript@5.6.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.22)(esbuild@0.25.9)(vue@3.5.22(typescript@5.6.3)))(vue-tsc@2.2.0(typescript@5.6.3))(vue@3.5.22(typescript@5.6.3)): dependencies: autoprefixer: 10.4.21(postcss@8.5.6) citty: 0.1.6 @@ -13154,10 +13090,10 @@ snapshots: semver: 7.7.2 tinyglobby: 0.2.15 optionalDependencies: - typescript: 5.9.2 - vue: 3.5.21(typescript@5.9.2) - vue-sfc-transformer: 0.1.16(@vue/compiler-core@3.5.21)(esbuild@0.25.9)(vue@3.5.21(typescript@5.9.2)) - vue-tsc: 2.2.12(typescript@5.9.2) + typescript: 5.6.3 + vue: 3.5.22(typescript@5.6.3) + vue-sfc-transformer: 0.1.16(@vue/compiler-core@3.5.22)(esbuild@0.25.9)(vue@3.5.22(typescript@5.6.3)) + vue-tsc: 2.2.0(typescript@5.6.3) mlly@1.8.0: dependencies: @@ -13174,13 +13110,13 @@ snapshots: motion-utils@12.23.6: {} - motion-v@1.7.1(@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2)): + motion-v@1.7.1(@vueuse/core@13.9.0(vue@3.5.22(typescript@5.6.3)))(vue@3.5.22(typescript@5.6.3)): dependencies: - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.6.3)) framer-motion: 12.23.12 hey-listen: 1.0.8 motion-dom: 12.23.12 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) transitivePeerDependencies: - '@emotion/is-prop-valid' - react @@ -13415,9 +13351,9 @@ snapshots: mlly: 1.8.0 ohash: 2.0.11 scule: 1.3.0 - typescript: 5.9.2 + typescript: 5.6.3 ufo: 1.6.1 - vue-component-meta: 3.0.8(typescript@5.9.2) + vue-component-meta: 3.0.8(typescript@5.6.3) transitivePeerDependencies: - magicast @@ -13427,13 +13363,13 @@ snapshots: transitivePeerDependencies: - magicast - nuxt-og-image@5.1.11(@unhead/vue@2.0.17(vue@3.5.21(typescript@5.9.2)))(h3@1.15.4)(magicast@0.3.5)(unstorage@1.17.1(@netlify/blobs@9.1.2)(db0@0.3.2(better-sqlite3@12.4.1))(ioredis@5.7.0))(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2)): + nuxt-og-image@5.1.11(@unhead/vue@2.0.17(vue@3.5.22(typescript@5.6.3)))(h3@1.15.4)(magicast@0.3.5)(unstorage@1.17.1(@netlify/blobs@9.1.2)(db0@0.3.2(better-sqlite3@12.4.1))(ioredis@5.7.0))(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.6.3)): dependencies: '@nuxt/devtools-kit': 2.6.5(magicast@0.3.5)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) '@nuxt/kit': 4.1.2(magicast@0.3.5) '@resvg/resvg-js': 2.6.2 '@resvg/resvg-wasm': 2.6.2 - '@unhead/vue': 2.0.17(vue@3.5.21(typescript@5.9.2)) + '@unhead/vue': 2.0.17(vue@3.5.22(typescript@5.6.3)) '@unocss/core': 66.5.2 '@unocss/preset-wind3': 66.5.2 chrome-launcher: 1.2.0 @@ -13443,7 +13379,7 @@ snapshots: image-size: 2.0.2 magic-string: 0.30.19 mocked-exports: 0.1.1 - nuxt-site-config: 3.2.9(h3@1.15.4)(magicast@0.3.5)(vue@3.5.21(typescript@5.9.2)) + nuxt-site-config: 3.2.9(h3@1.15.4)(magicast@0.3.5)(vue@3.5.22(typescript@5.6.3)) nypm: 0.6.2 ofetch: 1.4.1 ohash: 2.0.11 @@ -13468,41 +13404,41 @@ snapshots: - vite - vue - nuxt-site-config-kit@3.2.9(magicast@0.3.5)(vue@3.5.21(typescript@5.9.2)): + nuxt-site-config-kit@3.2.9(magicast@0.3.5)(vue@3.5.22(typescript@5.6.3)): dependencies: '@nuxt/kit': 4.1.2(magicast@0.3.5) pkg-types: 2.3.0 - site-config-stack: 3.2.9(vue@3.5.21(typescript@5.9.2)) + site-config-stack: 3.2.9(vue@3.5.22(typescript@5.6.3)) std-env: 3.9.0 ufo: 1.6.1 transitivePeerDependencies: - magicast - vue - nuxt-site-config@3.2.9(h3@1.15.4)(magicast@0.3.5)(vue@3.5.21(typescript@5.9.2)): + nuxt-site-config@3.2.9(h3@1.15.4)(magicast@0.3.5)(vue@3.5.22(typescript@5.6.3)): dependencies: '@nuxt/kit': 4.1.2(magicast@0.3.5) h3: 1.15.4 - nuxt-site-config-kit: 3.2.9(magicast@0.3.5)(vue@3.5.21(typescript@5.9.2)) + nuxt-site-config-kit: 3.2.9(magicast@0.3.5)(vue@3.5.22(typescript@5.6.3)) pathe: 2.0.3 pkg-types: 2.3.0 sirv: 3.0.2 - site-config-stack: 3.2.9(vue@3.5.21(typescript@5.9.2)) + site-config-stack: 3.2.9(vue@3.5.22(typescript@5.6.3)) ufo: 1.6.1 transitivePeerDependencies: - magicast - vue - nuxt@4.1.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.18.6)(@vue/compiler-sfc@3.5.21)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(eslint@9.36.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.1)(terser@5.43.1)(typescript@5.9.2)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.12(typescript@5.9.2))(yaml@2.8.0): + nuxt@4.1.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.18.6)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(eslint@9.36.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.1)(terser@5.43.1)(typescript@5.6.3)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.0(typescript@5.6.3))(yaml@2.8.0): dependencies: '@nuxt/cli': 3.28.0(magicast@0.3.5) '@nuxt/devalue': 2.0.2 - '@nuxt/devtools': 2.6.3(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2)) + '@nuxt/devtools': 2.6.3(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.6.3)) '@nuxt/kit': 4.1.2(magicast@0.3.5) '@nuxt/schema': 4.1.2 '@nuxt/telemetry': 2.6.6(magicast@0.3.5) - '@nuxt/vite-builder': 4.1.2(@types/node@22.18.6)(eslint@9.36.0(jiti@2.5.1))(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.1)(terser@5.43.1)(typescript@5.9.2)(vue-tsc@2.2.12(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2))(yaml@2.8.0) - '@unhead/vue': 2.0.17(vue@3.5.21(typescript@5.9.2)) + '@nuxt/vite-builder': 4.1.2(@types/node@22.18.6)(eslint@9.36.0(jiti@2.5.1))(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.1)(terser@5.43.1)(typescript@5.6.3)(vue-tsc@2.2.0(typescript@5.6.3))(vue@3.5.21(typescript@5.6.3))(yaml@2.8.0) + '@unhead/vue': 2.0.17(vue@3.5.21(typescript@5.6.3)) '@vue/shared': 3.5.21 c12: 3.2.0(magicast@0.3.5) chokidar: 4.0.3 @@ -13551,13 +13487,13 @@ snapshots: unctx: 2.4.1 unimport: 5.2.0 unplugin: 2.3.10 - unplugin-vue-router: 0.15.0(@vue/compiler-sfc@3.5.21)(typescript@5.9.2)(vue-router@4.5.1(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2)) + unplugin-vue-router: 0.15.0(@vue/compiler-sfc@3.5.22)(typescript@5.6.3)(vue-router@4.5.1(vue@3.5.21(typescript@5.6.3)))(vue@3.5.21(typescript@5.6.3)) unstorage: 1.17.1(@netlify/blobs@9.1.2)(db0@0.3.2(better-sqlite3@12.4.1))(ioredis@5.7.0) untyped: 2.0.0 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.21(typescript@5.6.3) vue-bundle-renderer: 2.1.2 vue-devtools-stub: 0.1.0 - vue-router: 4.5.1(vue@3.5.21(typescript@5.9.2)) + vue-router: 4.5.1(vue@3.5.22(typescript@5.6.3)) optionalDependencies: '@parcel/watcher': 2.5.1 '@types/node': 22.18.6 @@ -13864,10 +13800,6 @@ snapshots: picomatch@4.0.3: {} - pixelmatch@7.1.0: - dependencies: - pngjs: 7.0.0 - pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -13890,8 +13822,6 @@ snapshots: pluralize@8.0.0: {} - pngjs@7.0.0: {} - postcss-calc@10.1.1(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -14085,12 +14015,6 @@ snapshots: pretty-bytes@7.0.1: {} - pretty-format@27.5.1: - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - pretty-ms@9.2.0: dependencies: parse-ms: 4.0.0 @@ -14147,8 +14071,6 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-is@17.0.2: {} - readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -14261,19 +14183,36 @@ snapshots: '@types/hast': 3.0.4 unist-util-visit: 5.0.0 - reka-ui@2.5.0(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)): + reka-ui@2.5.0(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3)): dependencies: '@floating-ui/dom': 1.7.1 - '@floating-ui/vue': 1.1.6(vue@3.5.21(typescript@5.9.2)) + '@floating-ui/vue': 1.1.6(vue@3.5.22(typescript@5.6.3)) '@internationalized/date': 3.9.0 '@internationalized/number': 3.6.5 - '@tanstack/vue-virtual': 3.13.10(vue@3.5.21(typescript@5.9.2)) - '@vueuse/core': 12.8.2(typescript@5.9.2) - '@vueuse/shared': 12.8.2(typescript@5.9.2) + '@tanstack/vue-virtual': 3.13.10(vue@3.5.22(typescript@5.6.3)) + '@vueuse/core': 12.8.2(typescript@5.6.3) + '@vueuse/shared': 12.8.2(typescript@5.6.3) aria-hidden: 1.2.6 defu: 6.1.4 ohash: 2.0.11 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) + transitivePeerDependencies: + - '@vue/composition-api' + - typescript + + reka-ui@2.5.1(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3)): + dependencies: + '@floating-ui/dom': 1.7.1 + '@floating-ui/vue': 1.1.6(vue@3.5.22(typescript@5.6.3)) + '@internationalized/date': 3.9.0 + '@internationalized/number': 3.6.5 + '@tanstack/vue-virtual': 3.13.10(vue@3.5.22(typescript@5.6.3)) + '@vueuse/core': 12.8.2(typescript@5.6.3) + '@vueuse/shared': 12.8.2(typescript@5.6.3) + aria-hidden: 1.2.6 + defu: 6.1.4 + ohash: 2.0.11 + vue: 3.5.22(typescript@5.6.3) transitivePeerDependencies: - '@vue/composition-api' - typescript @@ -14377,11 +14316,11 @@ snapshots: glob: 7.2.3 optional: true - rollup-plugin-dts@6.2.1(rollup@4.50.1)(typescript@5.9.2): + rollup-plugin-dts@6.2.1(rollup@4.50.1)(typescript@5.6.3): dependencies: magic-string: 0.30.19 rollup: 4.50.1 - typescript: 5.9.2 + typescript: 5.6.3 optionalDependencies: '@babel/code-frame': 7.27.1 @@ -14630,10 +14569,10 @@ snapshots: sisteransi@1.0.5: {} - site-config-stack@3.2.9(vue@3.5.21(typescript@5.9.2)): + site-config-stack@3.2.9(vue@3.5.22(typescript@5.6.3)): dependencies: ufo: 1.6.1 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) skin-tone@2.0.0: dependencies: @@ -14840,9 +14779,9 @@ snapshots: picocolors: 1.1.1 sax: 1.4.1 - swrv@1.1.0(vue@3.5.21(typescript@5.9.2)): + swrv@1.1.0(vue@3.5.22(typescript@5.6.3)): dependencies: - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) system-architecture@0.1.0: {} @@ -14939,12 +14878,8 @@ snapshots: tinypool@1.1.1: {} - tinypool@2.0.0: {} - tinyrainbow@2.0.0: {} - tinyrainbow@3.0.3: {} - tinyspy@4.0.3: {} to-regex-range@5.0.1: @@ -14963,13 +14898,13 @@ snapshots: trough@2.2.0: {} - ts-api-utils@2.1.0(typescript@5.9.2): + ts-api-utils@2.1.0(typescript@5.6.3): dependencies: - typescript: 5.9.2 + typescript: 5.6.3 - tsconfck@3.1.6(typescript@5.9.2): + tsconfck@3.1.6(typescript@5.6.3): optionalDependencies: - typescript: 5.9.2 + typescript: 5.6.3 tslib@2.8.1: {} @@ -14987,13 +14922,11 @@ snapshots: typescript@5.6.3: {} - typescript@5.9.2: {} - ufo@1.6.1: {} ultrahtml@1.6.0: {} - unbuild@3.6.1(typescript@5.9.2)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.21)(esbuild@0.25.9)(vue@3.5.21(typescript@5.9.2)))(vue-tsc@2.2.12(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2)): + unbuild@3.6.1(typescript@5.6.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.22)(esbuild@0.25.9)(vue@3.5.22(typescript@5.6.3)))(vue-tsc@2.2.0(typescript@5.6.3))(vue@3.5.22(typescript@5.6.3)): dependencies: '@rollup/plugin-alias': 5.1.1(rollup@4.50.1) '@rollup/plugin-commonjs': 28.0.6(rollup@4.50.1) @@ -15009,18 +14942,18 @@ snapshots: hookable: 5.5.3 jiti: 2.5.1 magic-string: 0.30.19 - mkdist: 2.3.0(typescript@5.9.2)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.21)(esbuild@0.25.9)(vue@3.5.21(typescript@5.9.2)))(vue-tsc@2.2.12(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2)) + mkdist: 2.3.0(typescript@5.6.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.22)(esbuild@0.25.9)(vue@3.5.22(typescript@5.6.3)))(vue-tsc@2.2.0(typescript@5.6.3))(vue@3.5.22(typescript@5.6.3)) mlly: 1.8.0 pathe: 2.0.3 pkg-types: 2.3.0 pretty-bytes: 7.0.1 rollup: 4.50.1 - rollup-plugin-dts: 6.2.1(rollup@4.50.1)(typescript@5.9.2) + rollup-plugin-dts: 6.2.1(rollup@4.50.1)(typescript@5.6.3) scule: 1.3.0 tinyglobby: 0.2.15 untyped: 2.0.0 optionalDependencies: - typescript: 5.9.2 + typescript: 5.6.3 transitivePeerDependencies: - sass - vue @@ -15157,7 +15090,7 @@ snapshots: magic-string-ast: 1.0.2 unplugin: 2.3.10 - unplugin-auto-import@20.2.0(@nuxt/kit@4.1.2(magicast@0.3.5))(@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2))): + unplugin-auto-import@20.2.0(@nuxt/kit@4.1.2(magicast@0.3.5))(@vueuse/core@13.9.0(vue@3.5.22(typescript@5.6.3))): dependencies: local-pkg: 1.1.2 magic-string: 0.30.19 @@ -15167,7 +15100,7 @@ snapshots: unplugin-utils: 0.3.0 optionalDependencies: '@nuxt/kit': 4.1.2(magicast@0.3.5) - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.6.3)) unplugin-utils@0.2.4: dependencies: @@ -15179,7 +15112,7 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.3 - unplugin-vue-components@29.1.0(@babel/parser@7.28.4)(@nuxt/kit@4.1.2(magicast@0.3.5))(vue@3.5.21(typescript@5.9.2)): + unplugin-vue-components@29.1.0(@babel/parser@7.28.4)(@nuxt/kit@4.1.2(magicast@0.3.5))(vue@3.5.22(typescript@5.6.3)): dependencies: chokidar: 3.6.0 debug: 4.4.3 @@ -15189,18 +15122,18 @@ snapshots: tinyglobby: 0.2.15 unplugin: 2.3.10 unplugin-utils: 0.3.0 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) optionalDependencies: '@babel/parser': 7.28.4 '@nuxt/kit': 4.1.2(magicast@0.3.5) transitivePeerDependencies: - supports-color - unplugin-vue-router@0.15.0(@vue/compiler-sfc@3.5.21)(typescript@5.9.2)(vue-router@4.5.1(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2)): + unplugin-vue-router@0.15.0(@vue/compiler-sfc@3.5.22)(typescript@5.6.3)(vue-router@4.5.1(vue@3.5.21(typescript@5.6.3)))(vue@3.5.21(typescript@5.6.3)): dependencies: - '@vue-macros/common': 3.0.0-beta.16(vue@3.5.21(typescript@5.9.2)) - '@vue/compiler-sfc': 3.5.21 - '@vue/language-core': 3.0.8(typescript@5.9.2) + '@vue-macros/common': 3.0.0-beta.16(vue@3.5.21(typescript@5.6.3)) + '@vue/compiler-sfc': 3.5.22 + '@vue/language-core': 3.0.8(typescript@5.6.3) ast-walker-scope: 0.8.1 chokidar: 4.0.3 json5: 2.2.3 @@ -15216,7 +15149,7 @@ snapshots: unplugin-utils: 0.2.4 yaml: 2.8.0 optionalDependencies: - vue-router: 4.5.1(vue@3.5.21(typescript@5.9.2)) + vue-router: 4.5.1(vue@3.5.22(typescript@5.6.3)) transitivePeerDependencies: - typescript - vue @@ -15343,11 +15276,11 @@ snapshots: dependencies: '@sphinxxxx/color-conversion': 2.2.2 - vaul-vue@0.4.1(reka-ui@2.5.0(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2)): + vaul-vue@0.4.1(reka-ui@2.5.0(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3)))(vue@3.5.22(typescript@5.6.3)): dependencies: - '@vueuse/core': 10.11.1(vue@3.5.21(typescript@5.9.2)) - reka-ui: 2.5.0(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) - vue: 3.5.21(typescript@5.9.2) + '@vueuse/core': 10.11.1(vue@3.5.22(typescript@5.6.3)) + reka-ui: 2.5.0(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3)) + vue: 3.5.22(typescript@5.6.3) transitivePeerDependencies: - '@vue/composition-api' @@ -15397,7 +15330,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.10.3(eslint@9.36.0(jiti@2.5.1))(optionator@0.9.4)(typescript@5.9.2)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.12(typescript@5.9.2)): + vite-plugin-checker@0.10.3(eslint@9.36.0(jiti@2.5.1))(optionator@0.9.4)(typescript@5.6.3)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.0(typescript@5.6.3)): dependencies: '@babel/code-frame': 7.27.1 chokidar: 4.0.3 @@ -15412,8 +15345,8 @@ snapshots: optionalDependencies: eslint: 9.36.0(jiti@2.5.1) optionator: 0.9.4 - typescript: 5.9.2 - vue-tsc: 2.2.12(typescript@5.9.2) + typescript: 5.6.3 + vue-tsc: 2.2.0(typescript@5.6.3) vite-plugin-inspect@11.3.3(@nuxt/kit@3.19.2(magicast@0.3.5))(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)): dependencies: @@ -15432,15 +15365,32 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@8.0.2(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2)): + vite-plugin-inspect@11.3.3(@nuxt/kit@4.1.2(magicast@0.3.5))(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)): + dependencies: + ansis: 4.1.0 + debug: 4.4.1 + error-stack-parser-es: 1.0.5 + ohash: 2.0.11 + open: 10.2.0 + perfect-debounce: 2.0.0 + sirv: 3.0.2 + unplugin-utils: 0.3.0 + vite: 7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) + vite-dev-rpc: 1.1.0(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) + optionalDependencies: + '@nuxt/kit': 4.1.2(magicast@0.3.5) + transitivePeerDependencies: + - supports-color + + vite-plugin-vue-devtools@8.0.2(@nuxt/kit@4.1.2(magicast@0.3.5))(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.6.3)): dependencies: - '@vue/devtools-core': 8.0.2(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2)) + '@vue/devtools-core': 8.0.2(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.6.3)) '@vue/devtools-kit': 8.0.2 '@vue/devtools-shared': 8.0.2 execa: 9.6.0 sirv: 3.0.2 vite: 7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) - vite-plugin-inspect: 11.3.3(@nuxt/kit@3.19.2(magicast@0.3.5))(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) + vite-plugin-inspect: 11.3.3(@nuxt/kit@4.1.2(magicast@0.3.5))(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) vite-plugin-vue-inspector: 5.3.2(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) transitivePeerDependencies: - '@nuxt/kit' @@ -15462,7 +15412,7 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-vue-tracer@1.0.0(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.9.2)): + vite-plugin-vue-tracer@1.0.0(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.6.3)): dependencies: estree-walker: 3.0.3 exsolve: 1.0.7 @@ -15470,7 +15420,7 @@ snapshots: pathe: 2.0.3 source-map-js: 1.2.1 vite: 7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.21(typescript@5.6.3) vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0): dependencies: @@ -15488,9 +15438,9 @@ snapshots: terser: 5.43.1 yaml: 2.8.0 - vitest-environment-nuxt@1.0.1(@vue/test-utils@2.4.6)(happy-dom@17.6.3)(magicast@0.3.5)(playwright-core@1.55.1)(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)): + vitest-environment-nuxt@1.0.1(@vitest/ui@3.2.4)(@vue/test-utils@2.4.6)(happy-dom@17.6.3)(magicast@0.3.5)(playwright-core@1.55.1)(typescript@5.6.3)(vitest@3.2.4): dependencies: - '@nuxt/test-utils': 3.19.2(@vue/test-utils@2.4.6)(happy-dom@17.6.3)(magicast@0.3.5)(playwright-core@1.55.1)(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) + '@nuxt/test-utils': 3.19.2(@vitest/ui@3.2.4)(@vue/test-utils@2.4.6)(happy-dom@17.6.3)(magicast@0.3.5)(playwright-core@1.55.1)(typescript@5.6.3)(vitest@3.2.4) transitivePeerDependencies: - '@cucumber/cucumber' - '@jest/globals' @@ -15505,7 +15455,7 @@ snapshots: - typescript - vitest - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.6)(@vitest/ui@3.2.4)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 @@ -15533,48 +15483,7 @@ snapshots: optionalDependencies: '@types/debug': 4.1.12 '@types/node': 22.18.6 - happy-dom: 17.6.3 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vitest@4.0.0-beta.13(@types/debug@4.1.12)(@types/node@22.18.6)(@vitest/browser@4.0.0-beta.13)(happy-dom@17.6.3)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0): - dependencies: - '@vitest/expect': 4.0.0-beta.13 - '@vitest/mocker': 4.0.0-beta.13(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)) - '@vitest/pretty-format': 4.0.0-beta.13 - '@vitest/runner': 4.0.0-beta.13 - '@vitest/snapshot': 4.0.0-beta.13 - '@vitest/spy': 4.0.0-beta.13 - '@vitest/utils': 4.0.0-beta.13 - debug: 4.4.3 - es-module-lexer: 1.7.0 - expect-type: 1.2.2 - magic-string: 0.30.19 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.9.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.15 - tinypool: 2.0.0 - tinyrainbow: 3.0.3 - vite: 7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/debug': 4.1.12 - '@types/node': 22.18.6 - '@vitest/browser': 4.0.0-beta.13(playwright@1.55.1)(vite@7.1.7(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vitest@4.0.0-beta.13) + '@vitest/ui': 3.2.4(vitest@3.2.4) happy-dom: 17.6.3 transitivePeerDependencies: - jiti @@ -15605,21 +15514,21 @@ snapshots: optionalDependencies: typescript: 5.6.3 - vue-component-meta@3.0.8(typescript@5.9.2): + vue-component-meta@3.0.8(typescript@5.6.3): dependencies: '@volar/typescript': 2.4.23 - '@vue/language-core': 3.0.8(typescript@5.9.2) + '@vue/language-core': 3.0.8(typescript@5.6.3) path-browserify: 1.0.1 - typescript: 5.9.2 + typescript: 5.6.3 vue-component-type-helpers: 3.0.8 vue-component-type-helpers@2.2.12: {} vue-component-type-helpers@3.0.8: {} - vue-demi@0.14.10(vue@3.5.21(typescript@5.9.2)): + vue-demi@0.14.10(vue@3.5.22(typescript@5.6.3)): dependencies: - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) vue-devtools-stub@0.1.0: {} @@ -15635,33 +15544,43 @@ snapshots: transitivePeerDependencies: - supports-color - vue-router@4.5.1(vue@3.5.21(typescript@5.9.2)): + vue-router@4.5.1(vue@3.5.22(typescript@5.6.3)): dependencies: '@vue/devtools-api': 6.6.4 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) - vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.21)(esbuild@0.25.9)(vue@3.5.21(typescript@5.9.2)): + vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.22)(esbuild@0.25.9)(vue@3.5.22(typescript@5.6.3)): dependencies: '@babel/parser': 7.28.4 - '@vue/compiler-core': 3.5.21 + '@vue/compiler-core': 3.5.22 esbuild: 0.25.9 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.6.3) - vue-tsc@2.2.12(typescript@5.9.2): + vue-tsc@2.2.0(typescript@5.6.3): dependencies: - '@volar/typescript': 2.4.15 - '@vue/language-core': 2.2.12(typescript@5.9.2) - typescript: 5.9.2 + '@volar/typescript': 2.4.23 + '@vue/language-core': 2.2.0(typescript@5.6.3) + typescript: 5.6.3 - vue@3.5.21(typescript@5.9.2): + vue@3.5.21(typescript@5.6.3): dependencies: '@vue/compiler-dom': 3.5.21 '@vue/compiler-sfc': 3.5.21 '@vue/runtime-dom': 3.5.21 - '@vue/server-renderer': 3.5.21(vue@3.5.21(typescript@5.9.2)) + '@vue/server-renderer': 3.5.21(vue@3.5.21(typescript@5.6.3)) '@vue/shared': 3.5.21 optionalDependencies: - typescript: 5.9.2 + typescript: 5.6.3 + + vue@3.5.22(typescript@5.6.3): + dependencies: + '@vue/compiler-dom': 3.5.22 + '@vue/compiler-sfc': 3.5.22 + '@vue/runtime-dom': 3.5.22 + '@vue/server-renderer': 3.5.22(vue@3.5.22(typescript@5.6.3)) + '@vue/shared': 3.5.22 + optionalDependencies: + typescript: 5.6.3 w3c-keyname@2.2.8: {} diff --git a/vitest.config.ts b/vitest.config.ts index 2ad40f37..9ed2bcc1 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -3,8 +3,7 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { projects: [ - 'packages/*', - 'playgrounds/*' + 'packages/*' ] } }) From f8bd84f6b0b9aaf278153c19d4be6a5455fa86e9 Mon Sep 17 00:00:00 2001 From: Romain Hamel Date: Fri, 26 Sep 2025 14:11:07 +0200 Subject: [PATCH 04/16] chore(testing): remove e2e utils --- packages/testing/src/e2e/index.ts | 55 ------------------------------- 1 file changed, 55 deletions(-) delete mode 100644 packages/testing/src/e2e/index.ts diff --git a/packages/testing/src/e2e/index.ts b/packages/testing/src/e2e/index.ts deleted file mode 100644 index a6d8b545..00000000 --- a/packages/testing/src/e2e/index.ts +++ /dev/null @@ -1,55 +0,0 @@ -// import { describe, beforeEach, afterEach } from 'vitest' -// import type { CompodiumHooks, ComponentCollection, CompodiumMeta, Component } from '@compodium/core' -// import type { Hookable } from 'hookable' -// import { page } from '@vitest/browser/context' -// -// export { page } -// -// const collections = await import('virtual:compodium/collections').then(c => c.default) as ComponentCollection[] -// -// const componentMap = collections.flatMap(col => col.components?.flatMap(comp => [comp, ...(comp.examples ?? [])])).reduce((acc, c) => { -// if (c.componentName) acc[c.componentName] = c -// acc[c.pascalName] = c -// -// return acc -// }, {} as Record) -// -// const hooks = window.__COMPODIUM_HOOKS__ as Hookable -// -// export type CompodiumTestFunction = (ctx: { -// component: Component -// meta: CompodiumMeta -// collection: ComponentCollection -// }) => void | Promise -// -// export function describeComponent(componentName: string, fn: CompodiumTestFunction) { -// const component = componentMap[componentName] -// if (!component) throw new Error(`[Compodium] Component not found ${componentName}`) -// -// const collection = collections.find(c => c.name === component?.collectionName) as ComponentCollection -// -// return describe(collection.name, async () => { -// describe(componentName, async () => { -// const meta = await fetch(`/__compodium__/api/meta?component=${component.filePath}`).then(async r => (await r.json()) as CompodiumMeta) -// -// beforeEach(async () => { -// await hooks?.callHook('renderer:update-component', { -// path: component.filePath, -// props: meta.compodium?.defaultProps, -// wrapper: collection.wrapperComponent, -// events: meta.events -// }) -// }) -// -// afterEach(({ task }) => { -// task.meta.compodium ??= {} -// task.meta.compodium.screenshotPath = task.annotations.find(a => a.message === 'Actual screenshot')?.attachment?.path -// task.meta.compodium.stagedScreenshotPath = task.annotations.find(a => a.message === 'Reference screenshot')?.attachment?.path -// task.meta.compodium.diff = !!task.meta.compodium.stagedScreenshotPath -// task.meta.compodium.diffPath = task.annotations.find(a => a.message === 'Diff')?.attachment?.path -// }) -// -// await fn({ collection, component, meta }) -// }) -// }) -// } From 7fbff70d2360d103f34a926314cb459046f5e07d Mon Sep 17 00:00:00 2001 From: Romain Hamel Date: Sun, 28 Sep 2025 12:48:08 +0200 Subject: [PATCH 05/16] refactor(testing): use `@vitest/ws-client` and fix `@nuxt/test-utils` integration --- .../components/ComponentCollectionMenu.vue | 15 +- .../app/components/ComponentTestsTab.vue | 20 +-- .../app/components/testing/TestMenu.vue | 68 +++------ .../app/components/testing/TestResult.vue | 22 +-- .../app/components/testing/TestStatusIcon.vue | 12 +- .../app/composables/useComponentTests.ts | 108 ------------- .../devtools/app/composables/useVitest.ts | 144 ++++++++++++++++++ packages/devtools/app/pages/components.vue | 27 ++-- packages/devtools/package.json | 1 + packages/testing/package.json | 1 - packages/testing/src/plugins/reporter.ts | 100 ------------ packages/testing/src/plugins/vitest.ts | 88 +++-------- packages/testing/src/types.ts | 23 ++- packages/testing/src/unit/index.ts | 45 ++++-- packages/vue/test/vitest.d.ts | 11 -- .../vue/src/components/CompodiumWelcome.vue | 4 +- playgrounds/vue/test/CompodiumWelcome.spec.ts | 29 ++++ playgrounds/vue/test/SupportedProps.spec.ts | 8 + .../CompodiumWelcome.spec.ts.snap | 2 +- .../__snapshots__/SupportedProps.spec.ts.snap | 18 +++ playgrounds/vue/vite.config.ts | 3 +- pnpm-lock.yaml | 52 ++++--- 22 files changed, 351 insertions(+), 450 deletions(-) delete mode 100644 packages/devtools/app/composables/useComponentTests.ts create mode 100644 packages/devtools/app/composables/useVitest.ts delete mode 100644 packages/testing/src/plugins/reporter.ts delete mode 100644 packages/vue/test/vitest.d.ts create mode 100644 playgrounds/vue/test/SupportedProps.spec.ts create mode 100644 playgrounds/vue/test/__snapshots__/SupportedProps.spec.ts.snap diff --git a/packages/devtools/app/components/ComponentCollectionMenu.vue b/packages/devtools/app/components/ComponentCollectionMenu.vue index 772e7a55..0358981b 100644 --- a/packages/devtools/app/components/ComponentCollectionMenu.vue +++ b/packages/devtools/app/components/ComponentCollectionMenu.vue @@ -4,21 +4,20 @@ import type { Component, ComponentCollection, ComponentExample } from '@compodiu const props = defineProps<{ collections: ComponentCollection[] }>() const modelValue = defineModel() -const { testStates, testStatus, partialTestRun } = useComponentTests() +const { suites } = useVitest() const treeItems = computed(() => { if (!props.collections) return return props.collections?.map(col => ({ label: col.name, + pascalName: col.name, icon: col.icon, defaultExpanded: true, - testState: testStates.value?.[col.name], children: col.components?.map(comp => ({ label: comp?.isExample ? comp.pascalName.replace(/Example$/, '') : comp.pascalName, pascalName: comp.pascalName, active: modelValue.value?.pascalName === comp.pascalName, - testState: testStates.value?.[comp.pascalName], onSelect() { modelValue.value = comp }, @@ -26,7 +25,6 @@ const treeItems = computed(() => { label: ex.pascalName.replace(comp.pascalName, ''), pascalName: ex.pascalName, active: modelValue.value?.pascalName === ex.pascalName, - testState: testStates.value?.[ex.pascalName], onSelect() { modelValue.value = ex } @@ -56,14 +54,7 @@ const treeItems = computed(() => { diff --git a/packages/devtools/app/components/ComponentTestsTab.vue b/packages/devtools/app/components/ComponentTestsTab.vue index cecedfbd..e682515f 100644 --- a/packages/devtools/app/components/ComponentTestsTab.vue +++ b/packages/devtools/app/components/ComponentTestsTab.vue @@ -5,16 +5,19 @@ const props = defineProps<{ component?: Component }>() -const { testResults, runTests, testStatus } = useComponentTests() -const componentTestResults = computed(() => - props.component && testResults.value?.[props.component?.pascalName]?.toSorted((a, _) => !a.ok ? 0 : 1) -) +const { suites, runTests, testStatus } = useVitest() + +const componentTests = computed(() => { + if (!props.component) return [] + const suite = suites.get(props.component.pascalName) + return Array.from(suite?.tests?.values() ?? []) as TestState[] +})