diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6ae97ed4..bed1d839 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -48,6 +48,7 @@ jobs: deno-version: v2.x - run: pnpm install --frozen-lockfile + - run: pnpm exec playwright install chromium - run: pnpm build - name: test diff --git a/.gitignore b/.gitignore index d9855b00..0158f260 100644 --- a/.gitignore +++ b/.gitignore @@ -9,5 +9,6 @@ test-results .yarn .pnp.* samples/**/coverage +samples/**/.vitest tests-logs-* -*.tsbuildinfo \ No newline at end of file +*.tsbuildinfo diff --git a/.vscode/launch.json b/.vscode/launch.json index aa817475..d1d99acb 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -38,6 +38,17 @@ ], "outFiles": ["${workspaceFolder}/dist/**/*.js"] }, + { + "name": "Run Extension Browser V5 Sample", + "type": "extensionHost", + "request": "launch", + "args": [ + "--disable-extensions", + "--extensionDevelopmentPath=${workspaceFolder}", + "${workspaceFolder}/samples/browser-v5" + ], + "outFiles": ["${workspaceFolder}/dist/**/*.js"] + }, { "name": "Run Extension Continuous Sample", "type": "extensionHost", diff --git a/README.md b/README.md index d3950247..6048f5c9 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ - **Coverage** support - **Inline console.log display**: Console logs appear inline in the editor next to the code that produced them - **Imports duration**: Displays the execution time for each import during continuous test runs. +- **Trace View**: Opens recorded Vitest 5 browser interactions for a selected test. ## Requirements @@ -134,6 +135,28 @@ If you hover over it, you can get a more detailed diagnostic. You can disable this feature by turning off `vitest.showImportsDuration`. +### Trace View + +With Vitest 5, the extension can open recorded browser interactions for a selected test in [Vitest Trace View](https://vitest.dev/guide/browser/trace-view.html). Enable Trace View and the HTML reporter in your existing Browser Mode configuration: + +```ts +import { configDefaults, defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + reporters: [...configDefaults.reporters, 'html'], + browser: { + // Your existing Browser Mode configuration + traceView: true, + }, + }, +}) +``` + +After running a browser test through the extension, right-click the test in the Testing view or its editor gutter icon and select **Open Trace View**. The extension opens the trace view of the selected test from the generated HTML report in an editor tab. + +![Vitest Trace View open in Visual Studio Code](./img/trace-view.png) + ## FAQs (Frequently Asked Questions) ### How can I use it in monorepo? diff --git a/img/trace-view.png b/img/trace-view.png new file mode 100644 index 00000000..0244c712 Binary files /dev/null and b/img/trace-view.png differ diff --git a/package.json b/package.json index 85b2ea10..aea782e0 100644 --- a/package.json +++ b/package.json @@ -78,6 +78,7 @@ "tsdown": "catalog:", "tsx": "catalog:", "typescript": "catalog:", + "vite": "catalog:latest", "vitest": "catalog:latest", "which": "catalog:", "ws": "catalog:" @@ -121,6 +122,11 @@ "command": "vitest.openOutput", "category": "Vitest" }, + { + "title": "Open Trace View", + "command": "vitest.openTraceView", + "category": "Vitest" + }, { "title": "Show Shell Terminal", "command": "vitest.showShellTerminal", @@ -189,6 +195,10 @@ } ], "commandPalette": [ + { + "command": "vitest.openTraceView", + "when": "false" + }, { "command": "vitest.toggleContinuousRun", "when": "false" @@ -203,6 +213,11 @@ } ], "testing/item/context": [ + { + "command": "vitest.openTraceView", + "when": "controllerId == 'vitest' && testId in vitest.traceViewTests", + "group": "vitest" + }, { "command": "vitest.updateSnapshot", "when": "controllerId == 'vitest'" @@ -213,6 +228,11 @@ } ], "testing/item/gutter": [ + { + "command": "vitest.openTraceView", + "when": "controllerId == 'vitest' && testId in vitest.traceViewTests", + "group": "vitest" + }, { "command": "vitest.updateSnapshot", "when": "controllerId == 'vitest'" diff --git a/packages/extension/src/apiProcess.ts b/packages/extension/src/apiProcess.ts index 5801efa0..8285e239 100644 --- a/packages/extension/src/apiProcess.ts +++ b/packages/extension/src/apiProcess.ts @@ -57,6 +57,10 @@ export class VitestProjectConfig { return usesJestTestNamePattern(this.pkg) } + get htmlReportPath() { + return this.metadata.htmlReportPath + } + get package() { return this.pkg } diff --git a/packages/extension/src/extension.ts b/packages/extension/src/extension.ts index 0de203e1..846071e8 100644 --- a/packages/extension/src/extension.ts +++ b/packages/extension/src/extension.ts @@ -19,6 +19,7 @@ import { ExtensionTerminalProcess } from './spawn/terminal' import { ExtensionState } from './state' import { TagsManager } from './tagsManager' import { TestTree } from './testTree' +import { TraceViewManager } from './traceView' import { getTestData, TestFile } from './testTreeData' import { debounce, showVitestError } from './utils' import './polyfills' @@ -52,6 +53,7 @@ class VitestExtension { private debugManager: DebugManager private schemaProvider: TransformSchemaProvider private importsBreakdownProvider: ImportsBreakdownProvider + private traceViewManager = new TraceViewManager() /** @internal */ _debugDisposable: vscode.Disposable | undefined @@ -106,6 +108,7 @@ class VitestExtension { private async _defineTestProfiles(showWarning: boolean, cancelToken?: vscode.CancellationToken) { this.importsBreakdownProvider.clear() this.testTree.reset([]) + this.traceViewManager.clear() this.runQueues.forEach((q) => q.dispose()) this.runQueues.clear() @@ -222,6 +225,7 @@ class VitestExtension { vitest, this.diagnostic, this.importsBreakdownProvider, + this.traceViewManager, ) const runQueueId = `${vitest.id}:run` this.runQueues.set(runQueueId, runQueue) @@ -284,6 +288,7 @@ class VitestExtension { vitest, this.diagnostic, this.importsBreakdownProvider, + this.traceViewManager, ) const coverageQueueId = `${vitest.id}:coverage` this.runQueues.set(coverageQueueId, coverageQueue) @@ -342,6 +347,9 @@ class VitestExtension { vscode.commands.registerCommand('vitest.openOutput', () => { log.openOutput() }), + vscode.commands.registerCommand('vitest.openTraceView', (testItem: vscode.TestItem) => + this.traceViewManager.open(testItem), + ), vscode.commands.registerCommand('vitest.runRelatedTests', async (uri?: vscode.Uri) => { const currentUri = uri || vscode.window.activeTextEditor?.document.uri if (!currentUri) { @@ -638,6 +646,7 @@ class VitestExtension { this.testController.dispose() this.schemaProvider.dispose() this.importsBreakdownProvider.dispose() + this.traceViewManager.dispose() this.runProfiles.forEach((p) => p.dispose()) this.runProfiles.clear() this.disposables.forEach((d) => d.dispose()) diff --git a/packages/extension/src/runQueue.ts b/packages/extension/src/runQueue.ts index 89cb2923..897045ec 100644 --- a/packages/extension/src/runQueue.ts +++ b/packages/extension/src/runQueue.ts @@ -3,6 +3,7 @@ import type { RunHandle } from './apiProcess' import type { ExtensionDiagnostic } from './diagnostic' import type { ImportsBreakdownProvider } from './importsBreakdownProvider' import type { TestTree } from './testTree' +import type { TraceViewManager } from './traceView' import { VitestProcessAPI } from './apiProcess' import { log } from './log' import { ContinuousTestRunner, TestRunner } from './runner' @@ -33,6 +34,7 @@ export class RunQueue { private readonly api: VitestProcessAPI, private readonly diagnostic: ExtensionDiagnostic | undefined, private readonly importsBreakdown: ImportsBreakdownProvider, + private readonly traceViewManager: TraceViewManager, ) {} public isContinuousTestItem(testItem: vscode.TestItem): boolean { @@ -205,6 +207,7 @@ export class RunQueue { api || this.api, this.diagnostic, this.importsBreakdown, + this.traceViewManager, ) } @@ -216,6 +219,7 @@ export class RunQueue { this.api, this.diagnostic, this.importsBreakdown, + this.traceViewManager, this.testRunProfile, this.continuousRequests, ) diff --git a/packages/extension/src/runner.ts b/packages/extension/src/runner.ts index c38b076d..98f867e0 100644 --- a/packages/extension/src/runner.ts +++ b/packages/extension/src/runner.ts @@ -4,6 +4,7 @@ import type { RunHandle, VitestProcessAPI } from './apiProcess' import type { ExtensionDiagnostic } from './diagnostic' import type { ImportsBreakdownProvider } from './importsBreakdownProvider' import type { TestTree } from './testTree' +import type { TraceViewManager } from './traceView' import crypto from 'node:crypto' import path from 'node:path' import { stripVTControlCharacters } from 'node:util' @@ -40,6 +41,7 @@ export class TestRunner extends vscode.Disposable { protected readonly api: VitestProcessAPI, protected readonly diagnostic: ExtensionDiagnostic | undefined, protected readonly importsBreakdown: ImportsBreakdownProvider, + protected readonly traceViewManager?: TraceViewManager, ) { super(() => { log.verbose?.('Disposing test runner') @@ -110,6 +112,10 @@ export class TestRunner extends vscode.Disposable { }) handle.handlers.onTestRunEnd(async (files, unhandledError, collecting, coverage) => { + const htmlReportPath = this.api.config.htmlReportPath + if (!collecting && htmlReportPath) { + await this.traceViewManager?.update(this.api.id, htmlReportPath, files, this.tree) + } const testRun = this.testRun if (!testRun) { @@ -369,10 +375,11 @@ export class ContinuousTestRunner extends TestRunner { api: VitestProcessAPI, diagnostic: ExtensionDiagnostic | undefined, importsBreakdown: ImportsBreakdownProvider, + traceViewManager: TraceViewManager, private readonly testRunProfile: vscode.TestRunProfile, private readonly continuousRequests: Set, ) { - super(handle, controller, tree, api, diagnostic, importsBreakdown) + super(handle, controller, tree, api, diagnostic, importsBreakdown, traceViewManager) handle.handlers.onTestRunStart((files) => { this.startTestRun(files) log.verbose?.( diff --git a/packages/extension/src/traceView.ts b/packages/extension/src/traceView.ts new file mode 100644 index 00000000..36d94cc6 --- /dev/null +++ b/packages/extension/src/traceView.ts @@ -0,0 +1,347 @@ +import type { RunnerTask, RunnerTestFile } from 'vitest' +import type { TestTree } from './testTree' +import { randomBytes } from 'node:crypto' +import * as vscode from 'vscode' + +interface TraceReportEntry { + apiId: string + reportPath: string + fileId: string + testId: string +} + +type TraceSelectionMessage = { + type: 'traceSelection' + testId: string | null + traceAttempt: string | null + traceStep: number +} + +interface TraceViewState { + panel: vscode.WebviewPanel + entry: TraceReportEntry + watcher: vscode.FileSystemWatcher + traceAttempt?: string + traceStep: number + refreshTimer?: ReturnType +} + +/** + * Keeps the active trace selection across report regeneration: + * - Test results update available entries. Report file changes trigger reloads, so external runs writing the same report also refresh the panel. + * - Tracks selection through webview messages and restores it through URL parameters so the attempt and step survive reloads. + * - Explicit opens reset the attempt and step. If the selected test disappears, follow the first available trace. + */ +export class TraceViewManager { + private traceReportEntries = new Map() + private viewState?: TraceViewState + + dispose() { + this.viewState?.panel.dispose() + } + + clear() { + this.traceReportEntries.clear() + void this.updateContext() + } + + async update(apiId: string, reportPath: string, files: RunnerTestFile[], tree: TestTree) { + // Remove Open Trace View actions from the previous run of this process. + for (const [item, entry] of this.traceReportEntries) { + if (entry.apiId === apiId) { + this.traceReportEntries.delete(item) + } + } + + // Keep the selected test when available, otherwise follow the first traced test. + // HTML report file writes trigger the reload. + const entries = findTraceReportEntries(apiId, reportPath, files) + const viewState = this.viewState + const entry = + entries.find( + (entry) => + entry.apiId === viewState?.entry.apiId && entry.testId === viewState.entry.testId, + ) ?? entries[0] + if (viewState && entry) { + if (viewState.entry.reportPath !== entry.reportPath) { + clearTimeout(viewState.refreshTimer) + viewState.watcher.dispose() + viewState.watcher = this.watchReport(entry.reportPath) + } + if (viewState.entry.apiId !== entry.apiId || viewState.entry.testId !== entry.testId) { + viewState.entry = entry + viewState.traceAttempt = undefined + viewState.traceStep = 0 + } + } + + // Register Open Trace View actions for the latest results. + for (const entry of entries) { + const item = tree.getTestItemByTaskId(entry.testId) + if (item) { + this.traceReportEntries.set(item, entry) + } + } + await this.updateContext() + } + + private updateContext() { + // Limit the test-item actions to tests with a recorded trace. + return vscode.commands.executeCommand( + 'setContext', + 'vitest.traceViewTests', + [...this.traceReportEntries.keys()].map((item) => item.id), + ) + } + + async open(testItem: vscode.TestItem) { + // Resolve the requested test and check that its report exists. + const entry = this.traceReportEntries.get(testItem) + if (!entry) return + + const reportUri = vscode.Uri.file(entry.reportPath) + try { + await vscode.workspace.fs.stat(reportUri) + } catch { + await vscode.window.showWarningMessage( + `The Vitest HTML report does not exist at ${entry.reportPath}.`, + ) + return + } + + // Create the panel and its listeners on the first open. + let viewState = this.viewState + if (!viewState) { + const panel = vscode.window.createWebviewPanel( + 'vitest.traceView', + 'Vitest Trace View', + { viewColumn: vscode.ViewColumn.Beside, preserveFocus: true }, + { enableScripts: true, retainContextWhenHidden: true }, + ) + viewState = { + panel, + entry, + watcher: this.watchReport(entry.reportPath), + traceStep: 0, + } + this.viewState = viewState + // Remember attempt and step changes for the next report reload. + panel.webview.onDidReceiveMessage((message: TraceSelectionMessage) => { + const viewState = this.viewState + if (viewState && message.type === 'traceSelection') { + viewState.traceAttempt = message.traceAttempt ?? undefined + viewState.traceStep = message.traceStep + } + }) + // Release the watcher and pending reload when the panel closes. + panel.onDidDispose(() => { + const viewState = this.viewState + if (viewState?.panel !== panel) return + viewState.watcher.dispose() + clearTimeout(viewState.refreshTimer) + this.viewState = undefined + }) + } else { + // Reuse the panel for the requested test with its initial attempt and step. + clearTimeout(viewState.refreshTimer) + viewState.watcher.dispose() + viewState.watcher = this.watchReport(entry.reportPath) + viewState.entry = entry + viewState.traceAttempt = undefined + viewState.traceStep = 0 + } + // Explicit opens load immediately. Later report changes reload through the watcher. + viewState.panel.reveal(undefined, true) + await this.refresh() + } + + private watchReport(reportPath: string) { + // Watch only index.html because the HTML reporter writes it after ui/html.meta.json.gz. + const watcher = vscode.workspace.createFileSystemWatcher(reportPath) + const debouncedRefresh = () => { + const viewState = this.viewState + if (viewState?.watcher !== watcher) return + clearTimeout(viewState.refreshTimer) + viewState.refreshTimer = setTimeout(() => void this.refresh(), 150) + } + watcher.onDidChange(debouncedRefresh) + watcher.onDidCreate(debouncedRefresh) + return watcher + } + + private async refresh() { + const viewState = this.viewState + if (!viewState) return + + const { panel, entry } = viewState + + // Restore the current test, attempt, and step in the new document. + const traceViewUrlHash = createTraceViewUrlHash( + entry, + viewState.traceStep, + viewState.traceAttempt, + ) + const reportUri = vscode.Uri.file(entry.reportPath) + // Read the generated report. + let reportHtml: Uint8Array + try { + reportHtml = await vscode.workspace.fs.readFile(reportUri) + } catch (error) { + await vscode.window.showWarningMessage(`Failed to load Vitest trace report: ${String(error)}`) + return + } + + // Adapt report resources and bootstrap code for the webview. + const directory = vscode.Uri.joinPath(reportUri, '..') + panel.webview.options = { enableScripts: true, localResourceRoots: [directory] } + panel.webview.html = transformTraceViewHtml( + Buffer.from(reportHtml).toString('utf8'), + panel.webview, + directory, + traceViewUrlHash, + ) + } +} + +function findTraceReportEntries( + apiId: string, + reportPath: string, + files: RunnerTestFile[], +): TraceReportEntry[] { + const entries: TraceReportEntry[] = [] + for (const file of files) { + const queue: RunnerTask[] = [file] + for (let index = 0; index < queue.length; index++) { + const task = queue[index] + if (task.type === 'test') { + // Vitest 3 does not type artifacts, while the field is provided by Vitest 5. + // https://github.com/vitest-dev/vitest/blob/c666d149a4516761bae92ca56ce1336d2fd352c3/packages/runner/src/types/tasks.ts#L265-L279 + const { artifacts } = task as typeof task & { artifacts?: { type: string }[] } + // https://github.com/vitest-dev/vitest/blob/decfeb61c71a93372f84b6d43893df86a1756308/packages/vitest/src/runtime/runner/types.ts#L1479-L1485 + if (artifacts?.some((artifact) => artifact.type === 'internal:browserTrace')) { + entries.push({ apiId, reportPath, fileId: file.id, testId: task.id }) + } + } else { + queue.push(...task.tasks) + } + } + } + return entries +} + +function createTraceViewUrlHash(entry: TraceReportEntry, traceStep = 0, traceAttempt?: string) { + // https://github.com/vitest-dev/vitest/blob/decfeb61c71a93372f84b6d43893df86a1756308/packages/ui/client/composables/params.ts#L3-L24 + const params = new URLSearchParams({ + file: entry.fileId, + layout: 'trace', + view: 'editor', + test: entry.testId, + traceStep: String(traceStep), + }) + if (traceAttempt) { + params.set('traceAttempt', traceAttempt) + } + return `/?${params}` +} + +function transformTraceViewHtml( + html: string, + webview: vscode.Webview, + directory: vscode.Uri, + traceViewUrlHash: string, +) { + const base = `${webview.asWebviewUri(directory).toString()}/` + const nonce = randomBytes(16).toString('hex') + const csp = [ + `default-src 'none'`, + `script-src ${webview.cspSource} 'nonce-${nonce}'`, + `style-src ${webview.cspSource} http: https: 'unsafe-inline'`, + `img-src ${webview.cspSource} data: blob: http: https:`, + `font-src ${webview.cspSource} data: http: https:`, + `media-src ${webview.cspSource} data: blob: http: https:`, + `connect-src ${webview.cspSource}`, + `frame-src 'self' blob: data:;`, + ].join('; ') + // Resolve metadata from the report directory instead of the webview URL. + const metadata = webview.asWebviewUri(vscode.Uri.joinPath(directory, 'ui', 'html.meta.json.gz')) + html = html.replaceAll( + 'new URL("./ui/html.meta.json.gz", window.location.href)', + JSON.stringify(metadata.toString()), + ) + // Resolve relative asset URLs from the report directory. + html = html.replaceAll('src="./', `src="${base}`).replaceAll('href="./', `href="${base}`) + html = html.replace(/]*>/i, + `$& + + `, + ) + html = html.replace( + /]*>/i, + `$& + `, + ) + return html +} + +// fixup vscode webview default styles +const TRACE_VIEW_CSS = ` + body { + padding: 0; + color: var(--color-text); + } + html:not(.dark) { + background-color: white; + color-scheme: light; + } +` + +function initializeTraceView(vscode: any, window: any, traceViewUrlHash: string) { + // Keep Vitest's color mode in sync with the VS Code webview theme. + const { document, localStorage } = window + const syncTheme = () => { + const theme = document.body.dataset.vscodeThemeKind + const dark = theme === 'vscode-dark' || theme === 'vscode-high-contrast' + const key = 'vueuse-color-scheme' + const newValue = dark ? 'dark' : 'light' + localStorage.setItem(key, newValue) + document.documentElement.classList.toggle('dark', dark) + window.dispatchEvent( + new window.StorageEvent('storage', { key, newValue, storageArea: localStorage }), + ) + } + syncTheme() + new window.MutationObserver(syncTheme).observe(document.body, { + attributes: true, + attributeFilter: ['data-vscode-theme-kind'], + }) + + const reportSelection = () => { + const params = new URLSearchParams(window.location.hash.split('?')[1]) + const step = params.get('traceStep') + if (step !== null) { + vscode.postMessage({ + type: 'traceSelection', + testId: params.get('test'), + traceAttempt: params.get('traceAttempt'), + traceStep: Number(step), + } satisfies TraceSelectionMessage) + } + } + // Vitest updates URL parameters through History, which does not + // emit hashchange events. + for (const method of ['replaceState', 'pushState']) { + const original = window.history[method] + window.history[method] = function (...args: any[]) { + const result = original.apply(this, args) + reportSelection() + return result + } + } + window.addEventListener('hashchange', reportSelection) + window.addEventListener('popstate', reportSelection) + window.location.hash = traceViewUrlHash +} diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 9e1cd884..affaf1a2 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -192,6 +192,7 @@ export interface SerializedProject { export interface WorkerReadyMetadata { projects: SerializedProject[] workspaceSource: string | false + htmlReportPath?: string } export interface EventReady { diff --git a/packages/worker/package.json b/packages/worker/package.json index 0a1918f9..40c8be84 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -7,6 +7,7 @@ }, "devDependencies": { "@vitest/utils": "catalog:latest", + "vite": "catalog:latest", "vitest": "catalog:latest", "vitest-vscode-shared": "workspace:*" } diff --git a/packages/worker/src/index.ts b/packages/worker/src/index.ts index 727004a5..137aa81a 100644 --- a/packages/worker/src/index.ts +++ b/packages/worker/src/index.ts @@ -8,6 +8,7 @@ import type { Reporter, TestUserConfig } from 'vitest/node' import { Console } from 'node:console' import { Writable } from 'node:stream' import { toArray } from '@vitest/utils/helpers' +import { resolve } from 'pathe' import { VSCodeReporter } from './reporter' import { ExtensionWorker } from './worker' @@ -169,6 +170,17 @@ export async function initVitest( const workspaceSource: string | false = vitest.config.projects != null ? vitest.vite.config.configFile || false : false const metadata: WorkerReadyMetadata = { projects, workspaceSource } + for (const reporter of vitest.config.reporters) { + if (Array.isArray(reporter) && reporter[0] === 'html') { + const options = reporter[1] as { outputDir?: string } + metadata.htmlReportPath = resolve( + vitest.config.root, + options.outputDir || '.vitest', + 'index.html', + ) + break + } + } return { vitest, reporter, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 261fb98b..078f3c6f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,8 @@ settings: catalogs: default: '@playwright/test': - specifier: ^1.42.1 - version: 1.57.0 + specifier: 1.62.1 + version: 1.62.1 '@types/chai': specifier: ^5.2.2 version: 5.2.3 @@ -87,6 +87,9 @@ catalogs: picocolors: specifier: ^1.0.0 version: 1.1.1 + playwright: + specifier: 1.62.1 + version: 1.62.1 prompts: specifier: ^2.4.2 version: 2.4.2 @@ -155,6 +158,16 @@ catalogs: vitest: specifier: ^3.2.4 version: 3.2.4 + v5: + '@vitest/browser-playwright': + specifier: https://pkg.pr.new/@vitest/browser-playwright@0ae5d17 + version: 5.0.0 + '@vitest/ui': + specifier: https://pkg.pr.new/@vitest/ui@0ae5d17 + version: 5.0.0 + vitest: + specifier: https://pkg.pr.new/vitest@0ae5d17 + version: 5.0.0 importers: @@ -162,7 +175,7 @@ importers: devDependencies: '@playwright/test': specifier: 'catalog:' - version: 1.57.0 + version: 1.62.1 '@types/chai': specifier: 'catalog:' version: 5.2.3 @@ -262,9 +275,12 @@ importers: typescript: specifier: 'catalog:' version: 5.9.3 + vite: + specifier: catalog:latest + version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) which: specifier: 'catalog:' version: 4.0.0 @@ -279,13 +295,13 @@ importers: version: 4.0.2 '@vitest/browser': specifier: catalog:v3 - version: 3.2.4(playwright@1.57.0)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.2.4) + version: 3.2.4(playwright@1.62.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.2.4) picomatch: specifier: catalog:latest version: 4.0.3 vitest: specifier: catalog:v3 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(happy-dom@20.9.0)(jiti@2.6.1)(jsdom@29.1.1)(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(happy-dom@20.9.0)(jiti@2.6.1)(jsdom@29.1.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) vitest-vscode-shared: specifier: workspace:* version: link:../shared @@ -301,16 +317,19 @@ importers: version: 2.4.0 vitest: specifier: catalog:v3 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(happy-dom@20.9.0)(jiti@2.6.1)(jsdom@29.1.1)(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(happy-dom@20.9.0)(jiti@2.6.1)(jsdom@29.1.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) packages/worker: devDependencies: '@vitest/utils': specifier: catalog:latest version: 4.1.0 + vite: + specifier: catalog:latest + version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) vitest-vscode-shared: specifier: workspace:* version: link:../shared @@ -325,7 +344,7 @@ importers: version: 3.2.4 vitest: specifier: catalog:v3 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(happy-dom@20.9.0)(jiti@2.6.1)(jsdom@29.1.1)(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(happy-dom@20.9.0)(jiti@2.6.1)(jsdom@29.1.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) vitest-vscode-shared: specifier: workspace:* version: link:../shared @@ -338,13 +357,13 @@ importers: devDependencies: '@vitest/coverage-v8': specifier: catalog:latest - version: 4.1.0(@vitest/browser@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0) + version: 4.1.0(@vitest/browser@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0) vite: specifier: catalog:latest - version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) samples/basic: dependencies: @@ -357,28 +376,28 @@ importers: version: 3.2.4(@vitest/browser@3.2.4)(vitest@3.2.4) vite: specifier: catalog:v3 - version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: catalog:v3 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(happy-dom@20.9.0)(jiti@2.6.1)(jsdom@29.1.1)(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(happy-dom@20.9.0)(jiti@2.6.1)(jsdom@29.1.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) samples/basic-v4: devDependencies: '@vitest/browser': specifier: catalog:latest - version: 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + version: 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) '@vitest/coverage-istanbul': specifier: catalog:latest version: 4.1.0(vitest@4.1.0) '@vitest/coverage-v8': specifier: catalog:latest - version: 4.1.0(@vitest/browser@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0) + version: 4.1.0(@vitest/browser@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0) vite: specifier: catalog:latest - version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) samples/browser: dependencies: @@ -388,40 +407,58 @@ importers: devDependencies: '@vitest/browser': specifier: catalog:latest - version: 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + version: 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) '@vitest/browser-playwright': specifier: catalog:latest - version: 4.1.0(playwright@1.57.0)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + version: 4.1.0(playwright@1.62.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) '@vitest/coverage-v8': specifier: catalog:latest - version: 4.1.0(@vitest/browser@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0) + version: 4.1.0(@vitest/browser@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0) playwright: - specifier: ^1.47.0 - version: 1.57.0 + specifier: 'catalog:' + version: 1.62.1 vite: specifier: catalog:latest - version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) + + samples/browser-v5: + devDependencies: + '@vitest/browser-playwright': + specifier: catalog:v5 + version: https://pkg.pr.new/@vitest/browser-playwright@0ae5d17(playwright@1.62.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@5.0.0) + '@vitest/ui': + specifier: catalog:v5 + version: https://pkg.pr.new/@vitest/ui@0ae5d17(vitest@5.0.0) + playwright: + specifier: 'catalog:' + version: 1.62.1 + vite: + specifier: 8.2.2 + version: 8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: + specifier: catalog:v5 + version: https://pkg.pr.new/vitest@0ae5d17(@types/node@24.10.1)(@vitest/browser-playwright@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) samples/continuous: devDependencies: vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) samples/deno: devDependencies: vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) samples/e2e: devDependencies: vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) samples/imba: devDependencies: @@ -433,19 +470,19 @@ importers: version: 6.9.1 imba: specifier: ^2.0.0-alpha.235 - version: 2.0.0-alpha.247(@testing-library/dom@9.3.4)(@testing-library/jest-dom@6.9.1)(picomatch@4.0.3)(vite-node@3.2.4(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + version: 2.0.0-alpha.247(@testing-library/dom@9.3.4)(@testing-library/jest-dom@6.9.1)(picomatch@4.0.7)(vite-node@3.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) jsdom: specifier: ^24.0.0 version: 24.1.3 vite: specifier: catalog:latest - version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-imba: specifier: ^0.10.3 - version: 0.10.3(imba@2.0.0-alpha.247(@testing-library/dom@9.3.4)(@testing-library/jest-dom@6.9.1)(picomatch@4.0.3)(vite-node@3.2.4(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.10.3(imba@2.0.0-alpha.247(@testing-library/dom@9.3.4)(@testing-library/jest-dom@6.9.1)(picomatch@4.0.7)(vite-node@3.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@24.1.3)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@24.1.3)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) vitest-github-actions-reporter-temp: specifier: ^0.8.3 version: 0.8.3(vitest@4.1.0) @@ -454,22 +491,22 @@ importers: devDependencies: vite: specifier: catalog:latest - version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) samples/monorepo-vitest-workspace: devDependencies: '@vitest/coverage-v8': specifier: catalog:latest - version: 4.1.0(@vitest/browser@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0) + version: 4.1.0(@vitest/browser@4.1.0(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0) happy-dom: specifier: ^20.9.0 version: 20.9.0 vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) samples/monorepo-vitest-workspace/packages/react: dependencies: @@ -525,13 +562,13 @@ importers: dependencies: vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) samples/no-config: devDependencies: vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) samples/projects: devDependencies: @@ -540,13 +577,13 @@ importers: version: 20.9.0 vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) samples/readme: devDependencies: vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) samples/vue: dependencies: @@ -556,10 +593,10 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: ^6.0.2 - version: 6.0.2(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) + version: 6.0.2(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) '@vitest/coverage-v8': specifier: catalog:latest - version: 4.1.0(@vitest/browser@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0) + version: 4.1.0(@vitest/browser@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0) '@vue/test-utils': specifier: ^2.4.5 version: 2.4.6 @@ -568,10 +605,10 @@ importers: version: 20.9.0 vite: specifier: catalog:latest - version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: catalog:latest - version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) packages: @@ -853,6 +890,9 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} + '@blazediff/core@1.10.0': + resolution: {integrity: sha512-AOQff0zgR7cGsZL+4E7hVkmujoPUpm0J9xzWGWZj5wCjd3gmxESXAPfKyuzs93VdpQNFhHlBhfOjrcZ+XTERtQ==} + '@blazediff/core@1.9.1': resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} @@ -1315,6 +1355,9 @@ packages: '@oxc-project/types@0.112.0': resolution: {integrity: sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ==} + '@oxc-project/types@0.148.0': + resolution: {integrity: sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==} + '@oxfmt/binding-android-arm-eabi@0.37.0': resolution: {integrity: sha512-2AW4VHG6mePEb1r4l6nBOVz1MwevNa0obayXd5Xce+gtP+cL/FCaoVK7JtpqCj4cEVxbLU4jijBUIWK41X2GGg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1445,9 +1488,9 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@playwright/test@1.57.0': - resolution: {integrity: sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==} - engines: {node: '>=18'} + '@playwright/test@1.62.1': + resolution: {integrity: sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==} + engines: {node: '>=20'} hasBin: true '@polka/url@1.0.0-next.29': @@ -1456,36 +1499,72 @@ packages: '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} + '@rolldown/binding-android-arm-eabi@1.2.7': + resolution: {integrity: sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + '@rolldown/binding-android-arm64@1.0.0-rc.3': resolution: {integrity: sha512-0T1k9FinuBZ/t7rZ8jN6OpUKPnUjNdYHoj/cESWrQ3ZraAJ4OMm6z7QjSfCxqj8mOp9kTKc1zHK3kGz5vMu+nQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] + '@rolldown/binding-android-arm64@1.2.7': + resolution: {integrity: sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@rolldown/binding-darwin-arm64@1.0.0-rc.3': resolution: {integrity: sha512-JWWLzvcmc/3pe7qdJqPpuPk91SoE/N+f3PcWx/6ZwuyDVyungAEJPvKm/eEldiDdwTmaEzWfIR+HORxYWrCi1A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] + '@rolldown/binding-darwin-arm64@1.2.7': + resolution: {integrity: sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@rolldown/binding-darwin-x64@1.0.0-rc.3': resolution: {integrity: sha512-MTakBxfx3tde5WSmbHxuqlDsIW0EzQym+PJYGF4P6lG2NmKzi128OGynoFUqoD5ryCySEY85dug4v+LWGBElIw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] + '@rolldown/binding-darwin-x64@1.2.7': + resolution: {integrity: sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@rolldown/binding-freebsd-x64@1.0.0-rc.3': resolution: {integrity: sha512-jje3oopyOLs7IwfvXoS6Lxnmie5JJO7vW29fdGFu5YGY1EDbVDhD+P9vDihqS5X6fFiqL3ZQZCMBg6jyHkSVww==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] + '@rolldown/binding-freebsd-x64@1.2.7': + resolution: {integrity: sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.3': resolution: {integrity: sha512-A0n8P3hdLAaqzSFrQoA42p23ZKBYQOw+8EH5r15Sa9X1kD9/JXe0YT2gph2QTWvdr0CVK2BOXiK6ENfy6DXOag==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@rolldown/binding-linux-arm-gnueabihf@1.2.7': + resolution: {integrity: sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.3': resolution: {integrity: sha512-kWXkoxxarYISBJ4bLNf5vFkEbb4JvccOwxWDxuK9yee8lg5XA7OpvlTptfRuwEvYcOZf+7VS69Uenpmpyo5Bjw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1493,6 +1572,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-arm64-gnu@1.2.7': + resolution: {integrity: sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.3': resolution: {integrity: sha512-Z03/wrqau9Bicfgb3Dbs6SYTHliELk2PM2LpG2nFd+cGupTMF5kanLEcj2vuuJLLhptNyS61rtk7SOZ+lPsTUA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1500,6 +1586,27 @@ packages: os: [linux] libc: [musl] + '@rolldown/binding-linux-arm64-musl@1.2.7': + resolution: {integrity: sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.2.7': + resolution: {integrity: sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.2.7': + resolution: {integrity: sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.3': resolution: {integrity: sha512-iSXXZsQp08CSilff/DCTFZHSVEpEwdicV3W8idHyrByrcsRDVh9sGC3sev6d8BygSGj3vt8GvUKBPCoyMA4tgQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1507,6 +1614,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-x64-gnu@1.2.7': + resolution: {integrity: sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-x64-musl@1.0.0-rc.3': resolution: {integrity: sha512-qaj+MFudtdCv9xZo9znFvkgoajLdc+vwf0Kz5N44g+LU5XMe+IsACgn3UG7uTRlCCvhMAGXm1XlpEA5bZBrOcw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1514,12 +1628,25 @@ packages: os: [linux] libc: [musl] + '@rolldown/binding-linux-x64-musl@1.2.7': + resolution: {integrity: sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + '@rolldown/binding-openharmony-arm64@1.0.0-rc.3': resolution: {integrity: sha512-U662UnMETyjT65gFmG9ma+XziENrs7BBnENi/27swZPYagubfHRirXHG2oMl+pEax2WvO7Kb9gHZmMakpYqBHQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] + '@rolldown/binding-openharmony-arm64@1.2.7': + resolution: {integrity: sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@rolldown/binding-wasm32-wasi@1.0.0-rc.3': resolution: {integrity: sha512-gekrQ3Q2HiC1T5njGyuUJoGpK/l6B/TNXKed3fZXNf9YRTJn3L5MOZsFBn4bN2+UX+8+7hgdlTcEsexX988G4g==} engines: {node: '>=14.0.0'} @@ -1531,18 +1658,33 @@ packages: cpu: [arm64] os: [win32] + '@rolldown/binding-win32-arm64-msvc@1.2.7': + resolution: {integrity: sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.3': resolution: {integrity: sha512-a4VUQZH7LxGbUJ3qJ/TzQG8HxdHvf+jOnqf7B7oFx1TEBm+j2KNL2zr5SQ7wHkNAcaPevF6gf9tQnVBnC4mD+A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] + '@rolldown/binding-win32-x64-msvc@1.2.7': + resolution: {integrity: sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.0-beta.50': resolution: {integrity: sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==} '@rolldown/pluginutils@1.0.0-rc.3': resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@rollup/pluginutils@4.2.1': resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} @@ -1859,6 +2001,13 @@ packages: playwright: '*' vitest: 4.1.0 + '@vitest/browser-playwright@https://pkg.pr.new/@vitest/browser-playwright@0ae5d17': + resolution: {integrity: sha512-k3JT+oQKVXTpRVzxBWrJ04LE1nv7O/dEqwpBSIGcQPcIZmmsJvmosVwDKOh9U2V8OfY5nlfBMkJINXen8D17KA==, tarball: https://pkg.pr.new/@vitest/browser-playwright@0ae5d17} + version: 5.0.0 + peerDependencies: + playwright: '*' + vitest: 5.0.0 + '@vitest/browser@3.2.4': resolution: {integrity: sha512-tJxiPrWmzH8a+w9nLKlQMzAKX/7VjFs50MWgcAj7p9XQ7AQ9/35fByFYptgPELyLw+0aixTnC4pUWV+APcZ/kw==} peerDependencies: @@ -1879,6 +2028,12 @@ packages: peerDependencies: vitest: 4.1.0 + '@vitest/browser@https://pkg.pr.new/vitest-dev/vitest/@vitest/browser@0ae5d17': + resolution: {integrity: sha512-lG12dbjSu+9JoUwzkaA8CHJbezaeARbv2HhGw7UecOm6S91iBE1HfecNIX0Div5fg2cXZGllEiO0HlumlWXDbw==, tarball: https://pkg.pr.new/vitest-dev/vitest/@vitest/browser@0ae5d17} + version: 5.0.0 + peerDependencies: + vitest: 5.0.0 + '@vitest/coverage-istanbul@4.1.0': resolution: {integrity: sha512-0+67gA94YToxd+Pc3XgIA/2c8HN2hXNSg3T+1FI4HW7W/2gPitYCtktsY6Ke7vrt5caboMq3TUf0/vwbHRb0og==} peerDependencies: @@ -1930,12 +2085,28 @@ packages: vite: optional: true + '@vitest/mocker@https://pkg.pr.new/vitest-dev/vitest/@vitest/mocker@0ae5d17': + resolution: {integrity: sha512-RMYv9xs/dO/l5oV8+adMjoVNKRUN5K/cBvOoba1DsJTjPjqwoG3J5hPBIX8oWAq4gEuPNbwi2eYBoBFLZ12dCA==, tarball: https://pkg.pr.new/vitest-dev/vitest/@vitest/mocker@0ae5d17} + version: 5.0.0 + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + '@vitest/pretty-format@3.2.4': resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} '@vitest/pretty-format@4.1.0': resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==} + '@vitest/pretty-format@https://pkg.pr.new/vitest-dev/vitest/@vitest/pretty-format@0ae5d17': + resolution: {integrity: sha512-PVRNuB3wpReb4SQEs4zTKM4KWFhQ5pw3spE8naoDJNB5T5aWRzGKHwXcLUllr0WeOTXpB6bSr3CJLo5+7XQSSQ==, tarball: https://pkg.pr.new/vitest-dev/vitest/@vitest/pretty-format@0ae5d17} + version: 5.0.0 + '@vitest/runner@3.2.4': resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} @@ -1954,12 +2125,32 @@ packages: '@vitest/spy@4.1.0': resolution: {integrity: sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==} + '@vitest/spy@https://pkg.pr.new/vitest-dev/vitest/@vitest/spy@0ae5d17': + resolution: {integrity: sha512-uy+luWBAPw9XfthoHi5AkfHUnuPYEESjl0p/r+meoBnU8bxg5GDQ3Ey8MjcJ6sqahkL4PFyrvfMJJBw7LbU06g==, tarball: https://pkg.pr.new/vitest-dev/vitest/@vitest/spy@0ae5d17} + version: 5.0.0 + + '@vitest/ui@https://pkg.pr.new/@vitest/ui@0ae5d17': + resolution: {integrity: sha512-s09V2poailZE3fNw9lSyAIKZQUQGoizyru8I7P/TE5mbT/ET4ip203Uy1PlKvbkuQ9HxXILuIXTHLcPsjLiNHA==, tarball: https://pkg.pr.new/@vitest/ui@0ae5d17} + version: 5.0.0 + peerDependencies: + vitest: 5.0.0 + + '@vitest/ui@https://pkg.pr.new/vitest-dev/vitest/@vitest/ui@0ae5d17': + resolution: {integrity: sha512-s09V2poailZE3fNw9lSyAIKZQUQGoizyru8I7P/TE5mbT/ET4ip203Uy1PlKvbkuQ9HxXILuIXTHLcPsjLiNHA==, tarball: https://pkg.pr.new/vitest-dev/vitest/@vitest/ui@0ae5d17} + version: 5.0.0 + peerDependencies: + vitest: 5.0.0 + '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} '@vitest/utils@4.1.0': resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==} + '@vitest/utils@https://pkg.pr.new/vitest-dev/vitest/@vitest/utils@0ae5d17': + resolution: {integrity: sha512-QtW27LH02mO4CPR1UIV1U/25TUm1XisCPF/4tnucrmWUZrL1ZXlEWrdABrgYxQLhLfUO02Rhtx0/fwHZ2G+Otg==, tarball: https://pkg.pr.new/vitest-dev/vitest/@vitest/utils@0ae5d17} + version: 5.0.0 + '@vscode/test-cli@0.0.6': resolution: {integrity: sha512-4i61OUv5PQr3GxhHOuUgHdgBDfIO/kXTPCsEyFiMaY4SOqQTgkTmyZLagHehjOgCfsXdcrJa3zgQ7zoc+Dh6hQ==} hasBin: true @@ -2649,6 +2840,9 @@ packages: es-module-lexer@2.0.0: resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-module-lexer@2.3.2: + resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -2831,6 +3025,10 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} + engines: {node: '>=12.0.0'} + exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} @@ -2859,6 +3057,9 @@ packages: picomatch: optional: true + fflate@0.8.3: + resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} + figures@6.1.0: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} @@ -2882,6 +3083,9 @@ packages: flatted@3.4.2: resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + flatted@3.4.4: + resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==} + for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} @@ -3429,6 +3633,80 @@ packages: lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} + engines: {node: '>= 12.0.0'} + linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} @@ -3518,6 +3796,9 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magic-string@1.2.3: + resolution: {integrity: sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==} + magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} @@ -3662,6 +3943,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.18: + resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + napi-build-utils@2.0.0: resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} @@ -3746,6 +4032,10 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + obug@2.1.4: + resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} + engines: {node: '>=12.20.0'} + ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} @@ -3900,20 +4190,24 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - playwright-core@1.57.0: - resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==} - engines: {node: '>=18'} + playwright-core@1.62.1: + resolution: {integrity: sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==} + engines: {node: '>=20'} hasBin: true - playwright@1.57.0: - resolution: {integrity: sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==} - engines: {node: '>=18'} + playwright@1.62.1: + resolution: {integrity: sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==} + engines: {node: '>=20'} hasBin: true pluralize@2.0.0: @@ -3931,6 +4225,10 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} + postcss@8.5.28: + resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} + engines: {node: ^10 || ^12 || >=14} + postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -4102,6 +4400,11 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + rolldown@1.2.7: + resolution: {integrity: sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup@4.53.3: resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -4265,6 +4568,9 @@ packages: std-env@4.0.0: resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + std-env@4.2.0: + resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} + stdin-discarder@0.2.2: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} @@ -4398,6 +4704,10 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinybench@6.1.4: + resolution: {integrity: sha512-9APumHG7r4yOk4X4WlkmE71aZcv1gvin1czO3OQ1U9iJcFA5Ja/ygyb0vPOVHTthFozUYs8CLoLUlM8grb2lTQ==} + engines: {node: '>=20.0.0'} + tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} @@ -4405,10 +4715,18 @@ packages: resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} engines: {node: '>=18'} + tinyexec@1.3.0: + resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} + engines: {node: '>=18'} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + tinypool@1.1.1: resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} @@ -4425,6 +4743,10 @@ packages: resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} + tinyrainbow@3.1.1: + resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==} + engines: {node: '>=14.0.0'} + tinyspy@4.0.4: resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} @@ -4659,6 +4981,49 @@ packages: yaml: optional: true + vite@8.2.2: + resolution: {integrity: sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.4.0 || ^0.5.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitest-github-actions-reporter-temp@0.8.3: resolution: {integrity: sha512-JnBZW20iSnt9cwadfeL1E5UXmsSucsCWNC2mvppjPOXAXdS76WvwQW2VKahoAuyB5iQOREVO3pkzmID+yK6orQ==} engines: {node: '>=14'} @@ -4728,6 +5093,48 @@ packages: jsdom: optional: true + vitest@https://pkg.pr.new/vitest@0ae5d17: + resolution: {integrity: sha512-ftyomCQf1wpgz+JFU7yXbW/bGfxFJ17YphoM+fD+Kk3rUtS/m2wsnZBHBbdRA9g+qbswIE/Uhd5khDkhccaB/A==, tarball: https://pkg.pr.new/vitest@0ae5d17} + version: 5.0.0 + engines: {node: ^22.12.0 || ^24.0.0 || >=26.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 5.0.0 + '@vitest/browser-preview': 5.0.0 + '@vitest/browser-webdriverio': ^5.0.0-beta.5 || >=5.0.0 + '@vitest/coverage-istanbul': 5.0.0 + '@vitest/coverage-v8': 5.0.0 + '@vitest/ui': 5.0.0 + happy-dom: '*' + jsdom: '*' + vite: ^6.4.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + vue-component-type-helpers@2.2.12: resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==} @@ -4841,6 +5248,18 @@ packages: utf-8-validate: optional: true + ws@8.21.3: + resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + wsl-utils@0.1.0: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} @@ -5319,6 +5738,8 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} + '@blazediff/core@1.10.0': {} + '@blazediff/core@1.9.1': {} '@bramus/specificity@2.4.2': @@ -5604,6 +6025,8 @@ snapshots: '@oxc-project/types@0.112.0': {} + '@oxc-project/types@0.148.0': {} + '@oxfmt/binding-android-arm-eabi@0.37.0': optional: true @@ -5667,9 +6090,9 @@ snapshots: '@pkgr/core@0.2.9': optional: true - '@playwright/test@1.57.0': + '@playwright/test@1.62.1': dependencies: - playwright: 1.57.0 + playwright: 1.62.1 '@polka/url@1.0.0-next.29': {} @@ -5677,36 +6100,75 @@ snapshots: dependencies: quansync: 1.0.0 + '@rolldown/binding-android-arm-eabi@1.2.7': + optional: true + '@rolldown/binding-android-arm64@1.0.0-rc.3': optional: true + '@rolldown/binding-android-arm64@1.2.7': + optional: true + '@rolldown/binding-darwin-arm64@1.0.0-rc.3': optional: true + '@rolldown/binding-darwin-arm64@1.2.7': + optional: true + '@rolldown/binding-darwin-x64@1.0.0-rc.3': optional: true + '@rolldown/binding-darwin-x64@1.2.7': + optional: true + '@rolldown/binding-freebsd-x64@1.0.0-rc.3': optional: true + '@rolldown/binding-freebsd-x64@1.2.7': + optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.3': optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.2.7': + optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.3': optional: true + '@rolldown/binding-linux-arm64-gnu@1.2.7': + optional: true + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.3': optional: true + '@rolldown/binding-linux-arm64-musl@1.2.7': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.2.7': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.2.7': + optional: true + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.3': optional: true + '@rolldown/binding-linux-x64-gnu@1.2.7': + optional: true + '@rolldown/binding-linux-x64-musl@1.0.0-rc.3': optional: true + '@rolldown/binding-linux-x64-musl@1.2.7': + optional: true + '@rolldown/binding-openharmony-arm64@1.0.0-rc.3': optional: true + '@rolldown/binding-openharmony-arm64@1.2.7': + optional: true + '@rolldown/binding-wasm32-wasi@1.0.0-rc.3': dependencies: '@napi-rs/wasm-runtime': 1.1.1 @@ -5715,13 +6177,21 @@ snapshots: '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.3': optional: true + '@rolldown/binding-win32-arm64-msvc@1.2.7': + optional: true + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.3': optional: true + '@rolldown/binding-win32-x64-msvc@1.2.7': + optional: true + '@rolldown/pluginutils@1.0.0-beta.50': {} '@rolldown/pluginutils@1.0.0-rc.3': {} + '@rolldown/pluginutils@1.0.1': {} + '@rollup/pluginutils@4.2.1': dependencies: estree-walker: 2.0.2 @@ -6037,54 +6507,81 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.2(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.2(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.50 - vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) vue: 3.5.25(typescript@5.9.3) - '@vitest/browser-playwright@4.1.0(playwright@1.57.0)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0)': + '@vitest/browser-playwright@4.1.0(playwright@1.62.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0)': + dependencies: + '@vitest/browser': 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + '@vitest/mocker': 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) + playwright: 1.62.1 + tinyrainbow: 3.0.3 + vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/browser-playwright@4.1.0(playwright@1.62.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0)': dependencies: - '@vitest/browser': 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) - '@vitest/mocker': 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - playwright: 1.57.0 + '@vitest/browser': 4.1.0(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + '@vitest/mocker': 4.1.0(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + playwright: 1.62.1 tinyrainbow: 3.0.3 - vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite + optional: true - '@vitest/browser@3.2.4(playwright@1.57.0)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.2.4)': + '@vitest/browser-playwright@https://pkg.pr.new/@vitest/browser-playwright@0ae5d17(playwright@1.62.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@5.0.0)': + dependencies: + '@vitest/browser': https://pkg.pr.new/vitest-dev/vitest/@vitest/browser@0ae5d17(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@5.0.0) + '@vitest/mocker': https://pkg.pr.new/vitest-dev/vitest/@vitest/mocker@0ae5d17(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + playwright: 1.62.1 + tinyrainbow: 3.1.1 + vitest: https://pkg.pr.new/vitest@0ae5d17(@types/node@24.10.1)(@vitest/browser-playwright@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/browser@3.2.4(playwright@1.62.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.2.4)': dependencies: '@testing-library/dom': 10.4.1 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) - '@vitest/mocker': 3.2.4(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 3.2.4(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/utils': 3.2.4 magic-string: 0.30.21 sirv: 3.0.2 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(happy-dom@20.9.0)(jiti@2.6.1)(jsdom@29.1.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(happy-dom@20.9.0)(jiti@2.6.1)(jsdom@29.1.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) ws: 8.19.0 optionalDependencies: - playwright: 1.57.0 + playwright: 1.62.1 transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0)': + '@vitest/browser@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/utils': 4.1.0 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) ws: 8.19.0 transitivePeerDependencies: - bufferutil @@ -6092,6 +6589,42 @@ snapshots: - utf-8-validate - vite + '@vitest/browser@4.1.0(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0)': + dependencies: + '@blazediff/core': 1.9.1 + '@vitest/mocker': 4.1.0(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/utils': 4.1.0 + magic-string: 0.30.21 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.0.3 + vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + ws: 8.19.0 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + optional: true + + '@vitest/browser@https://pkg.pr.new/vitest-dev/vitest/@vitest/browser@0ae5d17(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@5.0.0)': + dependencies: + '@blazediff/core': 1.10.0 + '@vitest/mocker': https://pkg.pr.new/vitest-dev/vitest/@vitest/mocker@0ae5d17(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/ui': https://pkg.pr.new/vitest-dev/vitest/@vitest/ui@0ae5d17(vitest@5.0.0) + '@vitest/utils': https://pkg.pr.new/vitest-dev/vitest/@vitest/utils@0ae5d17 + magic-string: 1.2.3 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.1.1 + vitest: https://pkg.pr.new/vitest@0ae5d17(@types/node@24.10.1)(@vitest/browser-playwright@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + ws: 8.21.3 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + '@vitest/coverage-istanbul@4.1.0(vitest@4.1.0)': dependencies: '@babel/core': 7.29.0 @@ -6104,7 +6637,7 @@ snapshots: magicast: 0.5.2 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - supports-color @@ -6123,13 +6656,13 @@ snapshots: std-env: 3.10.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(happy-dom@20.9.0)(jiti@2.6.1)(jsdom@29.1.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(happy-dom@20.9.0)(jiti@2.6.1)(jsdom@29.1.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: - '@vitest/browser': 3.2.4(playwright@1.57.0)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.2.4) + '@vitest/browser': 3.2.4(playwright@1.62.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.2.4) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.1.0(@vitest/browser@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0)': + '@vitest/coverage-v8@4.1.0(@vitest/browser@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0)': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.0 @@ -6141,9 +6674,25 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.0.3 - vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) optionalDependencies: - '@vitest/browser': 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + '@vitest/browser': 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + + '@vitest/coverage-v8@4.1.0(@vitest/browser@4.1.0(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0)': + dependencies: + '@bcoe/v8-coverage': 1.0.2 + '@vitest/utils': 4.1.0 + ast-v8-to-istanbul: 1.0.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.2.0 + magicast: 0.5.2 + obug: 2.1.1 + std-env: 4.0.0 + tinyrainbow: 3.0.3 + vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + optionalDependencies: + '@vitest/browser': 4.1.0(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) '@vitest/expect@3.2.4': dependencies: @@ -6162,21 +6711,38 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@3.2.4(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@3.2.4(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) + + '@vitest/mocker@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@vitest/spy': 4.1.0 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/mocker@4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.1.0(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + + '@vitest/mocker@https://pkg.pr.new/vitest-dev/vitest/@vitest/mocker@0ae5d17(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + '@vitest/spy': https://pkg.pr.new/vitest-dev/vitest/@vitest/spy@0ae5d17 + estree-walker: 3.0.3 + magic-string: 1.2.3 + optionalDependencies: + vite: 8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@3.2.4': dependencies: @@ -6186,6 +6752,10 @@ snapshots: dependencies: tinyrainbow: 3.0.3 + '@vitest/pretty-format@https://pkg.pr.new/vitest-dev/vitest/@vitest/pretty-format@0ae5d17': + dependencies: + tinyrainbow: 3.1.1 + '@vitest/runner@3.2.4': dependencies: '@vitest/utils': 3.2.4 @@ -6216,6 +6786,28 @@ snapshots: '@vitest/spy@4.1.0': {} + '@vitest/spy@https://pkg.pr.new/vitest-dev/vitest/@vitest/spy@0ae5d17': {} + + '@vitest/ui@https://pkg.pr.new/@vitest/ui@0ae5d17(vitest@5.0.0)': + dependencies: + '@vitest/utils': https://pkg.pr.new/vitest-dev/vitest/@vitest/utils@0ae5d17 + fflate: 0.8.3 + flatted: 3.4.4 + pathe: 2.0.3 + sirv: 3.0.2 + tinyrainbow: 3.1.1 + vitest: https://pkg.pr.new/vitest@0ae5d17(@types/node@24.10.1)(@vitest/browser-playwright@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + + '@vitest/ui@https://pkg.pr.new/vitest-dev/vitest/@vitest/ui@0ae5d17(vitest@5.0.0)': + dependencies: + '@vitest/utils': https://pkg.pr.new/vitest-dev/vitest/@vitest/utils@0ae5d17 + fflate: 0.8.3 + flatted: 3.4.4 + pathe: 2.0.3 + sirv: 3.0.2 + tinyrainbow: 3.1.1 + vitest: https://pkg.pr.new/vitest@0ae5d17(@types/node@24.10.1)(@vitest/browser-playwright@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/utils@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 @@ -6228,6 +6820,12 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.0.3 + '@vitest/utils@https://pkg.pr.new/vitest-dev/vitest/@vitest/utils@0ae5d17': + dependencies: + '@vitest/pretty-format': https://pkg.pr.new/vitest-dev/vitest/@vitest/pretty-format@0ae5d17 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.1 + '@vscode/test-cli@0.0.6': dependencies: '@types/mocha': 10.0.10 @@ -6921,8 +7519,7 @@ snapshots: destr@2.0.5: {} - detect-libc@2.1.2: - optional: true + detect-libc@2.1.2: {} diff@5.2.0: {} @@ -7034,6 +7631,8 @@ snapshots: es-module-lexer@2.0.0: {} + es-module-lexer@2.3.2: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -7244,6 +7843,8 @@ snapshots: expect-type@1.3.0: {} + expect-type@1.4.0: {} + exsolve@1.0.8: {} fast-deep-equal@3.1.3: {} @@ -7270,6 +7871,12 @@ snapshots: optionalDependencies: picomatch: 4.0.3 + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + + fflate@0.8.3: {} + figures@6.1.0: dependencies: is-unicode-supported: 2.1.0 @@ -7293,6 +7900,8 @@ snapshots: flatted@3.4.2: {} + flatted@3.4.4: {} + for-each@0.3.5: dependencies: is-callable: 1.2.7 @@ -7538,7 +8147,7 @@ snapshots: ignore@7.0.5: {} - imba@2.0.0-alpha.247(@testing-library/dom@9.3.4)(@testing-library/jest-dom@6.9.1)(picomatch@4.0.3)(vite-node@3.2.4(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0): + imba@2.0.0-alpha.247(@testing-library/dom@9.3.4)(@testing-library/jest-dom@6.9.1)(picomatch@4.0.7)(vite-node@3.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0): dependencies: '@antfu/install-pkg': 0.1.1 chokidar: 3.6.0 @@ -7548,7 +8157,7 @@ snapshots: dotenv: 16.6.1 envinfo: 7.21.0 esbuild: 0.15.18 - fdir: 6.5.0(picomatch@4.0.3) + fdir: 6.5.0(picomatch@4.0.7) get-port: 5.1.1 local-pkg: 0.4.3 lodash.mergewith: 4.6.2 @@ -7556,9 +8165,9 @@ snapshots: optionalDependencies: '@testing-library/dom': 9.3.4 '@testing-library/jest-dom': 6.9.1 - vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@24.1.3)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@24.1.3)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - picomatch - supports-color @@ -7892,6 +8501,55 @@ snapshots: dependencies: immediate: 3.0.6 + lightningcss-android-arm64@1.33.0: + optional: true + + lightningcss-darwin-arm64@1.33.0: + optional: true + + lightningcss-darwin-x64@1.33.0: + optional: true + + lightningcss-freebsd-x64@1.33.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + + lightningcss-linux-arm64-musl@1.33.0: + optional: true + + lightningcss-linux-x64-gnu@1.33.0: + optional: true + + lightningcss-linux-x64-musl@1.33.0: + optional: true + + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + + lightningcss-win32-x64-msvc@1.33.0: + optional: true + + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + linkify-it@5.0.0: dependencies: uc.micro: 2.1.0 @@ -7966,6 +8624,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@1.2.3: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + magicast@0.3.5: dependencies: '@babel/parser': 7.28.5 @@ -8108,6 +8770,8 @@ snapshots: nanoid@3.3.11: {} + nanoid@3.3.18: {} + napi-build-utils@2.0.0: optional: true @@ -8198,6 +8862,8 @@ snapshots: obug@2.1.1: {} + obug@2.1.4: {} + ofetch@1.5.1: dependencies: destr: 2.0.5 @@ -8362,6 +9028,8 @@ snapshots: picomatch@4.0.3: {} + picomatch@4.0.7: {} + pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -8374,11 +9042,11 @@ snapshots: exsolve: 1.0.8 pathe: 2.0.3 - playwright-core@1.57.0: {} + playwright-core@1.62.1: {} - playwright@1.57.0: + playwright@1.62.1: dependencies: - playwright-core: 1.57.0 + playwright-core: 1.62.1 optionalDependencies: fsevents: 2.3.2 @@ -8390,6 +9058,12 @@ snapshots: possible-typed-array-names@1.1.0: {} + postcss@8.5.28: + dependencies: + nanoid: 3.3.18 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -8610,6 +9284,27 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.3 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.3 + rolldown@1.2.7: + dependencies: + '@oxc-project/types': 0.148.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm-eabi': 1.2.7 + '@rolldown/binding-android-arm64': 1.2.7 + '@rolldown/binding-darwin-arm64': 1.2.7 + '@rolldown/binding-darwin-x64': 1.2.7 + '@rolldown/binding-freebsd-x64': 1.2.7 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.7 + '@rolldown/binding-linux-arm64-gnu': 1.2.7 + '@rolldown/binding-linux-arm64-musl': 1.2.7 + '@rolldown/binding-linux-ppc64-gnu': 1.2.7 + '@rolldown/binding-linux-s390x-gnu': 1.2.7 + '@rolldown/binding-linux-x64-gnu': 1.2.7 + '@rolldown/binding-linux-x64-musl': 1.2.7 + '@rolldown/binding-openharmony-arm64': 1.2.7 + '@rolldown/binding-win32-arm64-msvc': 1.2.7 + '@rolldown/binding-win32-x64-msvc': 1.2.7 + rollup@4.53.3: dependencies: '@types/estree': 1.0.8 @@ -8805,6 +9500,8 @@ snapshots: std-env@4.0.0: {} + std-env@4.2.0: {} + stdin-discarder@0.2.2: {} stop-iteration-iterator@1.1.0: @@ -8955,15 +9652,24 @@ snapshots: tinybench@2.9.0: {} + tinybench@6.1.4: {} + tinyexec@0.3.2: {} tinyexec@1.0.2: {} + tinyexec@1.3.0: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + tinypool@1.1.1: {} tinypool@2.1.0: {} @@ -8972,6 +9678,8 @@ snapshots: tinyrainbow@3.0.3: {} + tinyrainbow@3.1.1: {} + tinyspy@4.0.4: {} tldts-core@7.0.19: {} @@ -9127,13 +9835,13 @@ snapshots: version-range@4.15.0: {} - vite-node@3.2.4(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): + vite-node@3.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -9148,21 +9856,21 @@ snapshots: - tsx - yaml - vite-plugin-imba@0.10.3(imba@2.0.0-alpha.247(@testing-library/dom@9.3.4)(@testing-library/jest-dom@6.9.1)(picomatch@4.0.3)(vite-node@3.2.4(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-imba@0.10.3(imba@2.0.0-alpha.247(@testing-library/dom@9.3.4)(@testing-library/jest-dom@6.9.1)(picomatch@4.0.7)(vite-node@3.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@rollup/pluginutils': 4.2.1 cross-env: 7.0.3 debug: 4.4.3(supports-color@8.1.1) deepmerge: 4.3.1 diff: 5.2.0 - imba: 2.0.0-alpha.247(@testing-library/dom@9.3.4)(@testing-library/jest-dom@6.9.1)(picomatch@4.0.3)(vite-node@3.2.4(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + imba: 2.0.0-alpha.247(@testing-library/dom@9.3.4)(@testing-library/jest-dom@6.9.1)(picomatch@4.0.7)(vite-node@3.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) kleur: 4.1.5 magic-string: 0.26.7 - vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): + vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -9174,6 +9882,22 @@ snapshots: '@types/node': 24.10.1 fsevents: 2.3.3 jiti: 2.6.1 + lightningcss: 1.33.0 + tsx: 4.21.0 + yaml: 2.8.2 + + vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): + dependencies: + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.28 + rolldown: 1.2.7 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 24.10.1 + esbuild: 0.27.0 + fsevents: 2.3.3 + jiti: 2.6.1 tsx: 4.21.0 yaml: 2.8.2 @@ -9181,13 +9905,13 @@ snapshots: dependencies: '@actions/core': 1.11.1 source-map-js: 1.2.1 - vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@24.1.3)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + vitest: 4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@24.1.3)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(happy-dom@20.9.0)(jiti@2.6.1)(jsdom@29.1.1)(tsx@4.21.0)(yaml@2.8.2): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(happy-dom@20.9.0)(jiti@2.6.1)(jsdom@29.1.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 3.2.4(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -9205,13 +9929,13 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 '@types/node': 24.10.1 - '@vitest/browser': 3.2.4(playwright@1.57.0)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.2.4) + '@vitest/browser': 3.2.4(playwright@1.62.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.2.4) happy-dom: 20.9.0 jsdom: 29.1.1 transitivePeerDependencies: @@ -9228,10 +9952,10 @@ snapshots: - tsx - yaml - vitest@4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@24.1.3)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)): + vitest@4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@24.1.3)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -9248,20 +9972,50 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 24.10.1 - '@vitest/browser-playwright': 4.1.0(playwright@1.57.0)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + '@vitest/browser-playwright': 4.1.0(playwright@1.62.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) happy-dom: 20.9.0 jsdom: 24.1.3 transitivePeerDependencies: - msw - vitest@4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)): + vitest@4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)): + dependencies: + '@vitest/expect': 4.1.0 + '@vitest/mocker': 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/pretty-format': 4.1.0 + '@vitest/runner': 4.1.0 + '@vitest/snapshot': 4.1.0 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 4.0.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 24.10.1 + '@vitest/browser-playwright': 4.1.0(playwright@1.62.1)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + happy-dom: 20.9.0 + jsdom: 29.1.1 + transitivePeerDependencies: + - msw + + vitest@4.1.0(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.1.0(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -9278,11 +10032,36 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 24.10.1 + '@vitest/browser-playwright': 4.1.0(playwright@1.62.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + happy-dom: 20.9.0 + jsdom: 29.1.1 + transitivePeerDependencies: + - msw + + vitest@https://pkg.pr.new/vitest@0ae5d17(@types/node@24.10.1)(@vitest/browser-playwright@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)): + dependencies: + '@types/chai': 5.2.3 + '@vitest/mocker': https://pkg.pr.new/vitest-dev/vitest/@vitest/mocker@0ae5d17(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + chai: 6.2.2 + es-module-lexer: 2.3.2 + expect-type: 1.4.0 + magic-string: 1.2.3 + obug: 2.1.4 + picomatch: 4.0.7 + std-env: 4.2.0 + tinybench: 6.1.4 + tinyexec: 1.3.0 + tinyglobby: 0.2.17 + vite: 8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 24.10.1 - '@vitest/browser-playwright': 4.1.0(playwright@1.57.0)(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + '@vitest/browser-playwright': https://pkg.pr.new/@vitest/browser-playwright@0ae5d17(playwright@1.62.1)(vite@8.2.2(@types/node@24.10.1)(esbuild@0.27.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@5.0.0) + '@vitest/ui': https://pkg.pr.new/@vitest/ui@0ae5d17(vitest@5.0.0) happy-dom: 20.9.0 jsdom: 29.1.1 transitivePeerDependencies: @@ -9389,6 +10168,8 @@ snapshots: ws@8.19.0: {} + ws@8.21.3: {} + wsl-utils@0.1.0: dependencies: is-wsl: 3.1.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 460d486c..ffbb0222 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -4,7 +4,7 @@ packages: - samples/* - samples/monorepo-vitest-workspace/packages/* catalog: - '@playwright/test': ^1.42.1 + '@playwright/test': 1.62.1 '@types/chai': ^5.2.2 '@types/micromatch': ^4.0.6 '@types/mocha': ^10.0.6 @@ -31,6 +31,7 @@ catalog: mocha: ^10.3.0 pathe: ^1.1.2 picocolors: ^1.0.0 + playwright: 1.62.1 prompts: ^2.4.2 semver: ^7.3.5 tsdown: ^0.20.3 @@ -56,6 +57,10 @@ catalogs: '@vitest/utils': ^3.2.4 vite: ^7.2.6 vitest: ^3.2.4 + v5: + '@vitest/browser-playwright': https://pkg.pr.new/@vitest/browser-playwright@0ae5d17 + '@vitest/ui': https://pkg.pr.new/@vitest/ui@0ae5d17 + vitest: https://pkg.pr.new/vitest@0ae5d17 onlyBuiltDependencies: - '@vscode/vsce-sign' - esbuild diff --git a/samples/browser-v5/basic.test.ts b/samples/browser-v5/basic.test.ts new file mode 100644 index 00000000..38acd598 --- /dev/null +++ b/samples/browser-v5/basic.test.ts @@ -0,0 +1,14 @@ +import { expect, test } from 'vitest' +import { page } from 'vitest/browser' + +test('records a trace', async () => { + document.body.innerHTML = '' + await page.getByRole('button').mark('Render button') + await expect.element(page.getByRole('button')).toBeVisible() +}) + +test('records a second trace', async () => { + document.body.innerHTML = '' + await page.getByRole('button').mark('Render cancel button') + await expect.element(page.getByRole('button')).toHaveTextContent('Cancel BAR') +}) diff --git a/samples/browser-v5/package.json b/samples/browser-v5/package.json new file mode 100644 index 00000000..77b4c9de --- /dev/null +++ b/samples/browser-v5/package.json @@ -0,0 +1,16 @@ +{ + "name": "browser-v5", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "test": "vitest run" + }, + "devDependencies": { + "@vitest/browser-playwright": "catalog:v5", + "@vitest/ui": "catalog:v5", + "playwright": "catalog:", + "vite": "8.2.2", + "vitest": "catalog:v5" + } +} diff --git a/samples/browser-v5/vitest.config.ts b/samples/browser-v5/vitest.config.ts new file mode 100644 index 00000000..8b5ac7d4 --- /dev/null +++ b/samples/browser-v5/vitest.config.ts @@ -0,0 +1,15 @@ +import { playwright } from '@vitest/browser-playwright' +import { configDefaults, defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + reporters: [...configDefaults.reporters, 'html'], + browser: { + enabled: true, + provider: playwright(), + instances: [{ browser: 'chromium' }], + headless: true, + traceView: true, + }, + }, +}) diff --git a/samples/browser/package.json b/samples/browser/package.json index 8b3f3be2..d547287f 100644 --- a/samples/browser/package.json +++ b/samples/browser/package.json @@ -14,7 +14,7 @@ "@vitest/browser": "catalog:latest", "@vitest/browser-playwright": "catalog:latest", "@vitest/coverage-v8": "catalog:latest", - "playwright": "^1.47.0", + "playwright": "catalog:", "vite": "catalog:latest", "vitest": "catalog:latest" } diff --git a/test/e2e/runner.test.ts b/test/e2e/runner.test.ts index 642e0da3..da3c6c65 100644 --- a/test/e2e/runner.test.ts +++ b/test/e2e/runner.test.ts @@ -441,3 +441,28 @@ test('renaming a folder back preserves test items', async ({ launch }) => { const restoredTest = tester.tree.getFileItem('deep.test.ts') await expect(restoredTest.locator).toBeVisible() }) + +test.skipIf(process.env.TEST_LEGACY)('opens trace view', async ({ launch }) => { + const { page, tester } = await launch({ + workspacePath: './samples/browser-v5', + }) + + // Run the browser tests to generate a trace report. + await tester.tree.expand('basic.test.ts [chromium]') + await tester.runAllTests() + await expect(tester.tree.getResultsLocator()).toHaveText('2/2', { timeout: 15_000 }) + + // Open the recorded trace from the test's context menu. + await page.locator('[aria-label*="records a trace (Passed)"]').click({ button: 'right' }) + // VS Code enables menu mouse-up handlers 100ms after rendering. + await page.getByRole('menuitem', { name: 'Open Trace View', exact: true }).click({ delay: 150 }) + + // Verify the webview displays the selected test's recorded button. + const traceView = page + .frameLocator('iframe.webview') + .frameLocator('#active-frame') + .getByTestId('trace-view') + const traceViewFrame = traceView.frameLocator('iframe') + await expect(traceView).toBeVisible() + await expect(traceViewFrame.getByRole('button', { name: 'Submit FOO' })).toBeVisible() +}) diff --git a/test/e2e/utils/helper.ts b/test/e2e/utils/helper.ts index 6bfdd98f..d46eb854 100644 --- a/test/e2e/utils/helper.ts +++ b/test/e2e/utils/helper.ts @@ -44,6 +44,12 @@ export const test = baseTest.extend<{ launch: LaunchFixture; taskName: string; l const trace = (options.trace ?? defaultConfig.VSCODE_E2E_TRACE) === 'on' const tempDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'vscode-e2e-')) + // Use DOM menus so Playwright can interact with context menus on macOS. + await fs.promises.mkdir(path.join(tempDir, 'user-data', 'User'), { recursive: true }) + await fs.promises.writeFile( + path.join(tempDir, 'user-data', 'User', 'settings.json'), + JSON.stringify({ 'window.menuStyle': 'custom' }), + ) // inherited from the extension host when tests run in a terminal inside // VS Code; it would force the spawned VS Code to run as plain Node const { ELECTRON_RUN_AS_NODE: _, ...env } = process.env