diff --git a/.github/workflows/ci-tests-e2e-coverage.yaml b/.github/workflows/ci-tests-e2e-coverage.yaml index a1b574db3b..246b551917 100644 --- a/.github/workflows/ci-tests-e2e-coverage.yaml +++ b/.github/workflows/ci-tests-e2e-coverage.yaml @@ -106,19 +106,12 @@ jobs: - name: Generate HTML coverage report if: steps.coverage-shards.outputs.has-coverage == 'true' run: | - if [ ! -s coverage/playwright/coverage.lcov ]; then - echo "No coverage data; generating placeholder report." - mkdir -p coverage/html - WORKFLOW_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}" - echo "

No E2E coverage data available for this run.

View workflow run

" > coverage/html/index.html - exit 0 - fi genhtml coverage/playwright/coverage.lcov \ -o coverage/html \ --title "ComfyUI E2E Coverage" \ --no-function-coverage \ --precision 1 \ - --ignore-errors source + --ignore-errors source,unmapped - name: Upload HTML report artifact if: steps.coverage-shards.outputs.has-coverage == 'true' diff --git a/browser_tests/fixtures/data/templateFixtures.ts b/browser_tests/fixtures/data/templateFixtures.ts index fdf40d9528..af6efa7783 100644 --- a/browser_tests/fixtures/data/templateFixtures.ts +++ b/browser_tests/fixtures/data/templateFixtures.ts @@ -2,6 +2,11 @@ import type { TemplateInfo, WorkflowTemplates } from '@/platform/workflow/templates/types/template' +import { TemplateIncludeOnDistributionEnum } from '@/platform/workflow/templates/types/template' + +const Cloud = TemplateIncludeOnDistributionEnum.Cloud +const Desktop = TemplateIncludeOnDistributionEnum.Desktop +const Local = TemplateIncludeOnDistributionEnum.Local export function makeTemplate( overrides: Partial & Pick @@ -26,3 +31,33 @@ export function mockTemplateIndex( } ] } + +export const STABLE_CLOUD_TEMPLATE: TemplateInfo = makeTemplate({ + name: 'cloud-stable', + title: 'Cloud Stable', + includeOnDistributions: [Cloud] +}) + +export const STABLE_DESKTOP_TEMPLATE: TemplateInfo = makeTemplate({ + name: 'desktop-stable', + title: 'Desktop Stable', + includeOnDistributions: [Desktop] +}) + +export const STABLE_LOCAL_TEMPLATE: TemplateInfo = makeTemplate({ + name: 'local-stable', + title: 'Local Stable', + includeOnDistributions: [Local] +}) + +export const STABLE_UNRESTRICTED_TEMPLATE: TemplateInfo = makeTemplate({ + name: 'unrestricted-stable', + title: 'Unrestricted Stable' +}) + +export const ALL_DISTRIBUTION_TEMPLATES: TemplateInfo[] = [ + STABLE_CLOUD_TEMPLATE, + STABLE_DESKTOP_TEMPLATE, + STABLE_LOCAL_TEMPLATE, + STABLE_UNRESTRICTED_TEMPLATE +] diff --git a/browser_tests/fixtures/helpers/JobsApiMock.ts b/browser_tests/fixtures/helpers/JobsApiMock.ts deleted file mode 100644 index aa61696c8f..0000000000 --- a/browser_tests/fixtures/helpers/JobsApiMock.ts +++ /dev/null @@ -1,176 +0,0 @@ -import type { Page, Route } from '@playwright/test' -import type { - JobDetailResponse, - JobEntry, - JobsListResponse -} from '@comfyorg/ingest-types' - -const jobsListRoutePattern = /\/api\/jobs(?:\?.*)?$/ -const jobDetailRoutePattern = /\/api\/jobs\/[^/?#]+(?:\?.*)?$/ -const historyRoutePattern = /\/api\/history(?:\?.*)?$/ -const defaultJobsListLimit = 100 - -export type MockJobRecord = { - listItem: JobEntry - detail: JobDetailResponse -} - -function parsePositiveIntegerParam(url: URL, name: string): number | undefined { - const value = Number(url.searchParams.get(name)) - - return Number.isInteger(value) && value > 0 ? value : undefined -} - -function getJobIdFromRequest(route: Route): string | null { - const url = new URL(route.request().url()) - const jobId = url.pathname.split('/').at(-1) - - return jobId ? decodeURIComponent(jobId) : null -} - -export class JobsApiMock { - private listRouteHandler: ((route: Route) => Promise) | null = null - private detailRouteHandler: ((route: Route) => Promise) | null = null - private historyRouteHandler: ((route: Route) => Promise) | null = null - private jobsById = new Map() - - constructor(private readonly page: Page) {} - - async mockJobs(jobs: MockJobRecord[]): Promise { - this.jobsById = new Map( - jobs.map( - (job) => [job.listItem.id, job] satisfies [string, MockJobRecord] - ) - ) - await this.ensureRoutesRegistered() - } - - async clear(): Promise { - this.jobsById.clear() - - if (this.listRouteHandler) { - await this.page.unroute(jobsListRoutePattern, this.listRouteHandler) - this.listRouteHandler = null - } - - if (this.detailRouteHandler) { - await this.page.unroute(jobDetailRoutePattern, this.detailRouteHandler) - this.detailRouteHandler = null - } - - if (this.historyRouteHandler) { - await this.page.unroute(historyRoutePattern, this.historyRouteHandler) - this.historyRouteHandler = null - } - } - - private async ensureRoutesRegistered(): Promise { - if (!this.listRouteHandler) { - this.listRouteHandler = async (route: Route) => { - const url = new URL(route.request().url()) - const statuses = url.searchParams - .get('status') - ?.split(',') - .map((status) => status.trim()) - .filter(Boolean) - - let filteredJobs = Array.from( - this.jobsById.values(), - ({ listItem }) => listItem - ) - - if (statuses?.length) { - filteredJobs = filteredJobs.filter((job) => - statuses.includes(job.status) - ) - } - - const offset = parsePositiveIntegerParam(url, 'offset') ?? 0 - const limit = - parsePositiveIntegerParam(url, 'limit') ?? defaultJobsListLimit - const total = filteredJobs.length - const visibleJobs = filteredJobs.slice(offset, offset + limit) - - const response = { - jobs: visibleJobs, - pagination: { - offset, - limit, - total, - has_more: offset + visibleJobs.length < total - } - } satisfies JobsListResponse - - await route.fulfill({ - status: 200, - contentType: 'application/json', - body: JSON.stringify(response) - }) - } - - await this.page.route(jobsListRoutePattern, this.listRouteHandler) - } - - if (!this.detailRouteHandler) { - this.detailRouteHandler = async (route: Route) => { - const jobId = getJobIdFromRequest(route) - const job = jobId ? this.jobsById.get(jobId) : undefined - - if (!job) { - await route.fulfill({ - status: 404, - contentType: 'application/json', - body: JSON.stringify({ error: 'Job not found' }) - }) - return - } - - await route.fulfill({ - status: 200, - contentType: 'application/json', - body: JSON.stringify(job.detail) - }) - } - - await this.page.route(jobDetailRoutePattern, this.detailRouteHandler) - } - - if (!this.historyRouteHandler) { - this.historyRouteHandler = async (route: Route) => { - const request = route.request() - if (request.method() !== 'POST') { - await route.continue() - return - } - - const requestBody = request.postDataJSON() as - | { delete?: string[]; clear?: boolean } - | undefined - - if (requestBody?.clear) { - this.jobsById = new Map( - Array.from(this.jobsById).filter(([, job]) => { - const status = job.listItem.status - - return status === 'pending' || status === 'in_progress' - }) - ) - } - - if (requestBody?.delete?.length) { - for (const jobId of requestBody.delete) { - this.jobsById.delete(jobId) - } - } - - await route.fulfill({ - status: 200, - contentType: 'application/json', - body: JSON.stringify({}) - }) - } - - await this.page.route(historyRoutePattern, this.historyRouteHandler) - } - } -} diff --git a/browser_tests/fixtures/helpers/TemplateHelper.ts b/browser_tests/fixtures/helpers/TemplateHelper.ts new file mode 100644 index 0000000000..7ae904e890 --- /dev/null +++ b/browser_tests/fixtures/helpers/TemplateHelper.ts @@ -0,0 +1,198 @@ +import type { Page, Route } from '@playwright/test' + +import type { + TemplateInfo, + WorkflowTemplates +} from '@/platform/workflow/templates/types/template' +import { TemplateIncludeOnDistributionEnum } from '@/platform/workflow/templates/types/template' +import { + makeTemplate, + mockTemplateIndex +} from '@e2e/fixtures/data/templateFixtures' + +/** + * Generate N deterministic templates, optionally restricted to a distribution. + * + * Lives here (not in `fixtures/data/`) because `fixtures/data/` is reserved + * for static test data with no executable fixture logic. + */ +function generateTemplates( + count: number, + distribution?: TemplateIncludeOnDistributionEnum +): TemplateInfo[] { + const slug = distribution ?? 'unrestricted' + return Array.from({ length: count }, (_, i) => + makeTemplate({ + name: `gen-${slug}-${String(i + 1).padStart(3, '0')}`, + title: `Generated ${slug} ${i + 1}`, + ...(distribution ? { includeOnDistributions: [distribution] } : {}) + }) + ) +} + +export interface TemplateConfig { + readonly templates: readonly TemplateInfo[] + readonly index: readonly WorkflowTemplates[] | null +} + +function emptyConfig(): TemplateConfig { + return { templates: [], index: null } +} + +export type TemplateOperator = (config: TemplateConfig) => TemplateConfig + +function cloneTemplates(templates: readonly TemplateInfo[]): TemplateInfo[] { + return templates.map((t) => structuredClone(t)) +} + +function cloneIndex( + index: readonly WorkflowTemplates[] | null +): WorkflowTemplates[] | null { + return index ? index.map((m) => structuredClone(m)) : null +} + +function addTemplates( + config: TemplateConfig, + templates: TemplateInfo[] +): TemplateConfig { + return { ...config, templates: [...config.templates, ...templates] } +} + +export function withTemplates(templates: TemplateInfo[]): TemplateOperator { + return (config) => addTemplates(config, templates) +} + +export function withTemplate(template: TemplateInfo): TemplateOperator { + return (config) => addTemplates(config, [template]) +} + +export function withCloudTemplates(count: number): TemplateOperator { + return (config) => + addTemplates( + config, + generateTemplates(count, TemplateIncludeOnDistributionEnum.Cloud) + ) +} + +export function withDesktopTemplates(count: number): TemplateOperator { + return (config) => + addTemplates( + config, + generateTemplates(count, TemplateIncludeOnDistributionEnum.Desktop) + ) +} + +export function withLocalTemplates(count: number): TemplateOperator { + return (config) => + addTemplates( + config, + generateTemplates(count, TemplateIncludeOnDistributionEnum.Local) + ) +} + +export function withUnrestrictedTemplates(count: number): TemplateOperator { + return (config) => addTemplates(config, generateTemplates(count)) +} + +/** + * Override the index payload entirely. Useful when a test needs a custom + * `WorkflowTemplates[]` shape (e.g. multiple modules). + */ +export function withRawIndex(index: WorkflowTemplates[]): TemplateOperator { + return (config) => ({ ...config, index }) +} + +export class TemplateHelper { + private templates: TemplateInfo[] + private index: WorkflowTemplates[] | null + private routeHandlers: Array<{ + pattern: string + handler: (route: Route) => Promise + }> = [] + + constructor( + private readonly page: Page, + config: TemplateConfig = emptyConfig() + ) { + this.templates = cloneTemplates(config.templates) + this.index = cloneIndex(config.index) + } + + configure(...operators: TemplateOperator[]): void { + const config = operators.reduce( + (cfg, op) => op(cfg), + emptyConfig() + ) + this.templates = cloneTemplates(config.templates) + this.index = cloneIndex(config.index) + } + + async mock(): Promise { + await this.mockIndex() + await this.mockThumbnails() + } + + async mockIndex(): Promise { + const indexHandler = async (route: Route) => { + const payload = this.index ?? mockTemplateIndex(this.templates) + await route.fulfill({ + status: 200, + body: JSON.stringify(payload), + headers: { + 'Content-Type': 'application/json', + 'Cache-Control': 'no-store' + } + }) + } + const indexPattern = '**/templates/index.json' + this.routeHandlers.push({ pattern: indexPattern, handler: indexHandler }) + await this.page.route(indexPattern, indexHandler) + } + + async mockThumbnails(): Promise { + const thumbnailHandler = async (route: Route) => { + await route.fulfill({ + status: 200, + path: 'browser_tests/assets/example.webp', + headers: { + 'Content-Type': 'image/webp', + 'Cache-Control': 'no-store' + } + }) + } + const thumbnailPattern = '**/templates/**.webp' + this.routeHandlers.push({ + pattern: thumbnailPattern, + handler: thumbnailHandler + }) + await this.page.route(thumbnailPattern, thumbnailHandler) + } + + getTemplates(): TemplateInfo[] { + return cloneTemplates(this.templates) + } + + get templateCount(): number { + return this.templates.length + } + + async clearMocks(): Promise { + for (const { pattern, handler } of this.routeHandlers) { + await this.page.unroute(pattern, handler) + } + this.routeHandlers = [] + this.templates = [] + this.index = null + } +} + +export function createTemplateHelper( + page: Page, + ...operators: TemplateOperator[] +): TemplateHelper { + const config = operators.reduce( + (cfg, op) => op(cfg), + emptyConfig() + ) + return new TemplateHelper(page, config) +} diff --git a/browser_tests/fixtures/jobsApiMockFixture.ts b/browser_tests/fixtures/jobsApiMockFixture.ts deleted file mode 100644 index cb25fbc472..0000000000 --- a/browser_tests/fixtures/jobsApiMockFixture.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { test as base } from '@playwright/test' - -import { JobsApiMock } from '@e2e/fixtures/helpers/JobsApiMock' - -export const jobsApiMockFixture = base.extend<{ - jobsApi: JobsApiMock -}>({ - jobsApi: async ({ page }, use) => { - const jobsApi = new JobsApiMock(page) - - await use(jobsApi) - - await jobsApi.clear() - } -}) diff --git a/browser_tests/fixtures/jobsRouteFixture.ts b/browser_tests/fixtures/jobsRouteFixture.ts new file mode 100644 index 0000000000..56abbbaaa2 --- /dev/null +++ b/browser_tests/fixtures/jobsRouteFixture.ts @@ -0,0 +1,169 @@ +import { test as base } from '@playwright/test' +import type { Page } from '@playwright/test' +import type { z } from 'zod' + +import type { + JobStatus, + RawJobListItem, + zJobsListResponse +} from '@/platform/remote/comfyui/jobs/jobTypes' + +type JobsListResponse = z.infer + +const terminalJobStatuses = [ + 'completed', + 'failed', + 'cancelled' +] as const satisfies readonly JobStatus[] +const activeJobStatuses = [ + 'in_progress', + 'pending' +] as const satisfies readonly JobStatus[] +const defaultJobsListLimit = 200 +const defaultScenarioHistoryLimit = 64 +const defaultJobsListOffset = 0 +const defaultRouteMockJobTimestamp = Date.UTC(2026, 0, 1, 12) + +interface JobsListRoute { + statuses: readonly JobStatus[] + jobs: readonly RawJobListItem[] + limit?: number + offset?: number +} + +interface JobsScenario { + history?: readonly RawJobListItem[] + queue?: readonly RawJobListItem[] +} + +function hasExactStatuses(url: URL, statuses: readonly JobStatus[]): boolean { + const requestedStatuses = new Set( + url.searchParams.get('status')?.split(',') ?? [] + ) + + return ( + requestedStatuses.size === statuses.length && + statuses.every((status) => requestedStatuses.has(status)) + ) +} + +function searchParamNumber(url: URL, name: string, fallback: number): number { + const value = url.searchParams.get(name) + return value === null ? fallback : Number(value) +} + +function hasJobsListPageParams( + url: URL, + { limit, offset }: Pick +): boolean { + return ( + searchParamNumber(url, 'limit', defaultJobsListLimit) === + (limit ?? defaultJobsListLimit) && + searchParamNumber(url, 'offset', defaultJobsListOffset) === + (offset ?? defaultJobsListOffset) + ) +} + +function isJobsListRequest(url: URL, route: JobsListRoute): boolean { + return ( + url.pathname.endsWith('/api/jobs') && + hasExactStatuses(url, route.statuses) && + hasJobsListPageParams(url, route) + ) +} + +function createJobsListResponse({ + jobs, + limit = defaultJobsListLimit, + offset = defaultJobsListOffset +}: Omit): JobsListResponse { + const pageJobs = jobs.slice(offset, offset + limit) + + return { + jobs: pageJobs, + pagination: { + offset, + limit, + total: jobs.length, + has_more: offset + pageJobs.length < jobs.length + } + } +} + +export function createRouteMockJob({ + id, + ...overrides +}: { id: string } & Partial>): RawJobListItem { + return { + id, + status: 'completed', + create_time: defaultRouteMockJobTimestamp, + execution_start_time: defaultRouteMockJobTimestamp, + execution_end_time: defaultRouteMockJobTimestamp + 5_000, + preview_output: { + filename: `output_${id}.png`, + subfolder: '', + type: 'output', + nodeId: '1', + mediaType: 'images' + }, + outputs_count: 1, + ...overrides + } +} + +export class JobsRouteMocker { + constructor(private readonly page: Page) {} + + async mockJobsHistory( + jobs: readonly RawJobListItem[], + limit = defaultJobsListLimit + ): Promise { + await this.mockJobsList({ + statuses: terminalJobStatuses, + jobs, + limit + }) + } + + async mockJobsQueue(jobs: readonly RawJobListItem[]): Promise { + await this.mockJobsList({ + statuses: activeJobStatuses, + jobs + }) + } + + async mockJobsScenario({ history, queue }: JobsScenario): Promise { + if (history) { + await this.mockJobsHistory(history, defaultScenarioHistoryLimit) + } + if (queue) { + await this.mockJobsQueue(queue) + } + } + + async mockJobsList(route: JobsListRoute): Promise { + const response = createJobsListResponse(route) + + await this.page.route( + (url) => isJobsListRequest(url, route), + async (requestRoute) => { + if (requestRoute.request().method().toUpperCase() !== 'GET') { + await requestRoute.fallback() + return + } + + await requestRoute.fulfill({ json: response }) + } + ) + } +} + +export const jobsRouteFixture = base.extend<{ + jobsRoutes: JobsRouteMocker +}>({ + jobsRoutes: async ({ page }, use) => { + await use(new JobsRouteMocker(page)) + await page.unrouteAll({ behavior: 'wait' }) + } +}) diff --git a/browser_tests/fixtures/templateApiFixture.ts b/browser_tests/fixtures/templateApiFixture.ts new file mode 100644 index 0000000000..eaa9f8d669 --- /dev/null +++ b/browser_tests/fixtures/templateApiFixture.ts @@ -0,0 +1,16 @@ +import { test as base } from '@playwright/test' + +import type { TemplateHelper } from '@e2e/fixtures/helpers/TemplateHelper' +import { createTemplateHelper } from '@e2e/fixtures/helpers/TemplateHelper' + +export const templateApiFixture = base.extend<{ + templateApi: TemplateHelper +}>({ + templateApi: async ({ page }, use) => { + const templateApi = createTemplateHelper(page) + + await use(templateApi) + + await templateApi.clearMocks() + } +}) diff --git a/browser_tests/fixtures/utils/jobFixtures.ts b/browser_tests/fixtures/utils/jobFixtures.ts deleted file mode 100644 index b674a9455f..0000000000 --- a/browser_tests/fixtures/utils/jobFixtures.ts +++ /dev/null @@ -1,52 +0,0 @@ -import type { JobDetailResponse, JobEntry } from '@comfyorg/ingest-types' - -import type { MockJobRecord } from '@e2e/fixtures/helpers/JobsApiMock' - -export function createMockJob( - overrides: Partial & { id: string } -): JobEntry { - const now = Date.now() - - return { - status: 'completed', - create_time: now, - execution_start_time: now, - execution_end_time: now + 5_000, - preview_output: { - filename: `output_${overrides.id}.png`, - subfolder: '', - type: 'output', - nodeId: '1', - mediaType: 'images' - }, - outputs_count: 1, - ...overrides - } -} - -function isTerminalStatus(status: JobEntry['status']) { - return status === 'completed' || status === 'failed' || status === 'cancelled' -} - -function createMockJobRecord(listItem: JobEntry): MockJobRecord { - const updateTime = - listItem.execution_end_time ?? - listItem.execution_start_time ?? - listItem.create_time - const detail: JobDetailResponse = { - ...listItem, - update_time: updateTime, - ...(isTerminalStatus(listItem.status) ? { outputs: {} } : {}) - } - - return { - listItem, - detail - } -} - -export function createMockJobRecords( - listItems: readonly JobEntry[] -): MockJobRecord[] { - return listItems.map(createMockJobRecord) -} diff --git a/browser_tests/tests/interaction.spec.ts-snapshots/dragged-node1-chromium-linux.png b/browser_tests/tests/interaction.spec.ts-snapshots/dragged-node1-chromium-linux.png index 9bbb027fbd..70abee3944 100644 Binary files a/browser_tests/tests/interaction.spec.ts-snapshots/dragged-node1-chromium-linux.png and b/browser_tests/tests/interaction.spec.ts-snapshots/dragged-node1-chromium-linux.png differ diff --git a/browser_tests/tests/propertiesPanel/errorsTabMissingMediaRuntime.spec.ts b/browser_tests/tests/propertiesPanel/errorsTabMissingMediaRuntime.spec.ts index b20c7d207e..96954139a6 100644 --- a/browser_tests/tests/propertiesPanel/errorsTabMissingMediaRuntime.spec.ts +++ b/browser_tests/tests/propertiesPanel/errorsTabMissingMediaRuntime.spec.ts @@ -8,15 +8,15 @@ import { } from '@e2e/fixtures/assetApiFixture' import { comfyPageFixture } from '@e2e/fixtures/ComfyPage' import type { ComfyPage } from '@e2e/fixtures/ComfyPage' -import { jobsApiMockFixture } from '@e2e/fixtures/jobsApiMockFixture' -import { TestIds } from '@e2e/fixtures/selectors' import { - createMockJob, - createMockJobRecords -} from '@e2e/fixtures/utils/jobFixtures' + createRouteMockJob, + jobsRouteFixture +} from '@e2e/fixtures/jobsRouteFixture' +import { TestIds } from '@e2e/fixtures/selectors' import { PropertiesPanelHelper } from '@e2e/tests/propertiesPanel/PropertiesPanelHelper' +import type { RawJobListItem } from '@/platform/remote/comfyui/jobs/jobTypes' -const ossTest = mergeTests(comfyPageFixture, jobsApiMockFixture) +const ossTest = mergeTests(comfyPageFixture, jobsRouteFixture) const outputHash = '147257c95a3e957e0deee73a077cfec89da2d906dd086ca70a2b0c897a9591d6e.png' const plainVideoFileName = 'plain_video.mp4' @@ -213,9 +213,9 @@ async function expectNoMissingMediaDuringUpload(comfyPage: ComfyPage) { .toBe(true) } -function outputHistoryJobs() { - return createMockJobRecords([ - createMockJob({ +function outputHistoryJobs(): RawJobListItem[] { + return [ + createRouteMockJob({ id: 'history-output-image', preview_output: { filename: 'ComfyUI_00001_.png', @@ -225,7 +225,7 @@ function outputHistoryJobs() { mediaType: 'images' } }), - createMockJob({ + createRouteMockJob({ id: 'history-output-video', preview_output: { filename: 'clip.mp4', @@ -235,7 +235,7 @@ function outputHistoryJobs() { mediaType: 'video' } }), - createMockJob({ + createRouteMockJob({ id: 'history-output-audio', preview_output: { filename: 'sound.wav', @@ -245,7 +245,7 @@ function outputHistoryJobs() { mediaType: 'audio' } }) - ]) + ] } ossTest.describe( @@ -258,8 +258,9 @@ ossTest.describe( ossTest( 'resolves annotated output media from job history', - async ({ comfyPage, jobsApi }) => { - await jobsApi.mockJobs(outputHistoryJobs()) + async ({ comfyPage, jobsRoutes }) => { + await jobsRoutes.mockJobsHistory(outputHistoryJobs()) + await jobsRoutes.mockJobsQueue([]) await comfyPage.workflow.loadWorkflow( 'missing/missing_media_output_annotations' diff --git a/browser_tests/tests/queue/queueOverlay.spec.ts b/browser_tests/tests/queue/queueOverlay.spec.ts index 3e996c31ab..436929b07e 100644 --- a/browser_tests/tests/queue/queueOverlay.spec.ts +++ b/browser_tests/tests/queue/queueOverlay.spec.ts @@ -1,56 +1,54 @@ import { expect, mergeTests } from '@playwright/test' -import type { JobEntry } from '@comfyorg/ingest-types' import { comfyPageFixture } from '@e2e/fixtures/ComfyPage' -import { jobsApiMockFixture } from '@e2e/fixtures/jobsApiMockFixture' import { - createMockJob, - createMockJobRecords -} from '@e2e/fixtures/utils/jobFixtures' + createRouteMockJob, + jobsRouteFixture +} from '@e2e/fixtures/jobsRouteFixture' import { TestIds } from '@e2e/fixtures/selectors' +import type { RawJobListItem } from '@/platform/remote/comfyui/jobs/jobTypes' -const test = mergeTests(comfyPageFixture, jobsApiMockFixture) +const test = mergeTests(comfyPageFixture, jobsRouteFixture) +const mockJobTimestamp = Date.UTC(2026, 0, 1, 12) -const now = Date.now() - -const MOCK_JOBS: JobEntry[] = [ - createMockJob({ +const MOCK_JOBS: RawJobListItem[] = [ + createRouteMockJob({ id: 'job-completed-1', status: 'completed', - create_time: now - 60_000, - execution_start_time: now - 60_000, - execution_end_time: now - 50_000, + create_time: mockJobTimestamp - 60_000, + execution_start_time: mockJobTimestamp - 60_000, + execution_end_time: mockJobTimestamp - 50_000, outputs_count: 2 }), - createMockJob({ + createRouteMockJob({ id: 'job-completed-2', status: 'completed', - create_time: now - 120_000, - execution_start_time: now - 120_000, - execution_end_time: now - 115_000, + create_time: mockJobTimestamp - 120_000, + execution_start_time: mockJobTimestamp - 120_000, + execution_end_time: mockJobTimestamp - 115_000, outputs_count: 1 }), - createMockJob({ + createRouteMockJob({ id: 'job-failed-1', status: 'failed', - create_time: now - 30_000, - execution_start_time: now - 30_000, - execution_end_time: now - 28_000, + create_time: mockJobTimestamp - 30_000, + execution_start_time: mockJobTimestamp - 30_000, + execution_end_time: mockJobTimestamp - 28_000, outputs_count: 0 }), - createMockJob({ + createRouteMockJob({ id: 'job-failed-bottom', status: 'failed', - create_time: now - 180_000, - execution_start_time: now - 180_000, - execution_end_time: now - 178_000, + create_time: mockJobTimestamp - 180_000, + execution_start_time: mockJobTimestamp - 180_000, + execution_end_time: mockJobTimestamp - 178_000, outputs_count: 0 }) ] test.describe('Queue overlay', () => { - test.beforeEach(async ({ comfyPage, jobsApi }) => { - await jobsApi.mockJobs(createMockJobRecords(MOCK_JOBS)) + test.beforeEach(async ({ comfyPage, jobsRoutes }) => { + await jobsRoutes.mockJobsScenario({ history: MOCK_JOBS, queue: [] }) await comfyPage.settings.setSetting('Comfy.Minimap.Visible', false) await comfyPage.settings.setSetting('Comfy.Queue.QPOV2', false) await comfyPage.setup() diff --git a/browser_tests/tests/templateFilteringCount.spec.ts b/browser_tests/tests/templateFilteringCount.spec.ts index 21165b0715..59f7d898b6 100644 --- a/browser_tests/tests/templateFilteringCount.spec.ts +++ b/browser_tests/tests/templateFilteringCount.spec.ts @@ -1,13 +1,13 @@ -import { expect } from '@playwright/test' +import { expect, mergeTests } from '@playwright/test' -import type { TemplateInfo } from '@/platform/workflow/templates/types/template' import { TemplateIncludeOnDistributionEnum } from '@/platform/workflow/templates/types/template' -import { comfyPageFixture as test } from '@e2e/fixtures/ComfyPage' -import { - makeTemplate, - mockTemplateIndex -} from '@e2e/fixtures/data/templateFixtures' +import { comfyPageFixture } from '@e2e/fixtures/ComfyPage' +import { makeTemplate } from '@e2e/fixtures/data/templateFixtures' +import { withTemplates } from '@e2e/fixtures/helpers/TemplateHelper' import { TestIds } from '@e2e/fixtures/selectors' +import { templateApiFixture } from '@e2e/fixtures/templateApiFixture' + +const test = mergeTests(comfyPageFixture, templateApiFixture) const Cloud = TemplateIncludeOnDistributionEnum.Cloud const Desktop = TemplateIncludeOnDistributionEnum.Desktop @@ -17,7 +17,7 @@ test.describe( 'Template distribution filtering count', { tag: '@cloud' }, () => { - test.beforeEach(async ({ comfyPage }) => { + test.beforeEach(async ({ comfyPage, templateApi }) => { await comfyPage.settings.setSetting('Comfy.Templates.SelectedModels', []) await comfyPage.settings.setSetting( 'Comfy.Templates.SelectedUseCases', @@ -26,53 +26,37 @@ test.describe( await comfyPage.settings.setSetting('Comfy.Templates.SelectedRunsOn', []) await comfyPage.settings.setSetting('Comfy.Templates.SortBy', 'default') - await comfyPage.page.route('**/templates/**.webp', async (route) => { - await route.fulfill({ - status: 200, - path: 'browser_tests/assets/example.webp', - headers: { - 'Content-Type': 'image/webp', - 'Cache-Control': 'no-store' - } - }) - }) + await templateApi.mockThumbnails() }) test('displayed count matches visible cards when distribution filter excludes templates', async ({ - comfyPage + comfyPage, + templateApi }) => { - const templates: TemplateInfo[] = [ - makeTemplate({ - name: 'cloud-1', - title: 'Cloud One', - includeOnDistributions: [Cloud] - }), - makeTemplate({ - name: 'cloud-2', - title: 'Cloud Two', - includeOnDistributions: [Cloud] - }), - makeTemplate({ - name: 'desktop-hidden', - title: 'Desktop Hidden', - includeOnDistributions: [Desktop] - }), - makeTemplate({ - name: 'universal', - title: 'Universal' - }) - ] - - await comfyPage.page.route('**/templates/index.json', async (route) => { - await route.fulfill({ - status: 200, - body: JSON.stringify(mockTemplateIndex(templates)), - headers: { - 'Content-Type': 'application/json', - 'Cache-Control': 'no-store' - } - }) - }) + templateApi.configure( + withTemplates([ + makeTemplate({ + name: 'cloud-1', + title: 'Cloud One', + includeOnDistributions: [Cloud] + }), + makeTemplate({ + name: 'cloud-2', + title: 'Cloud Two', + includeOnDistributions: [Cloud] + }), + makeTemplate({ + name: 'desktop-hidden', + title: 'Desktop Hidden', + includeOnDistributions: [Desktop] + }), + makeTemplate({ + name: 'universal', + title: 'Universal' + }) + ]) + ) + await templateApi.mockIndex() await comfyPage.command.executeCommand('Comfy.BrowseTemplates') await expect(comfyPage.templates.content).toBeVisible() @@ -86,45 +70,38 @@ test.describe( }) test('filtered count reflects distribution + model filter together', async ({ - comfyPage + comfyPage, + templateApi }) => { - const templates: TemplateInfo[] = [ - makeTemplate({ - name: 'wan-cloud-1', - title: 'Wan Cloud 1', - models: ['Wan 2.2'], - includeOnDistributions: [Cloud] - }), - makeTemplate({ - name: 'wan-cloud-2', - title: 'Wan Cloud 2', - models: ['Wan 2.2'], - includeOnDistributions: [Cloud] - }), - makeTemplate({ - name: 'wan-desktop', - title: 'Wan Desktop', - models: ['Wan 2.2'], - includeOnDistributions: [Desktop] - }), - makeTemplate({ - name: 'flux-cloud', - title: 'Flux Cloud', - models: ['Flux'], - includeOnDistributions: [Cloud] - }) - ] - - await comfyPage.page.route('**/templates/index.json', async (route) => { - await route.fulfill({ - status: 200, - body: JSON.stringify(mockTemplateIndex(templates)), - headers: { - 'Content-Type': 'application/json', - 'Cache-Control': 'no-store' - } - }) - }) + templateApi.configure( + withTemplates([ + makeTemplate({ + name: 'wan-cloud-1', + title: 'Wan Cloud 1', + models: ['Wan 2.2'], + includeOnDistributions: [Cloud] + }), + makeTemplate({ + name: 'wan-cloud-2', + title: 'Wan Cloud 2', + models: ['Wan 2.2'], + includeOnDistributions: [Cloud] + }), + makeTemplate({ + name: 'wan-desktop', + title: 'Wan Desktop', + models: ['Wan 2.2'], + includeOnDistributions: [Desktop] + }), + makeTemplate({ + name: 'flux-cloud', + title: 'Flux Cloud', + models: ['Flux'], + includeOnDistributions: [Cloud] + }) + ]) + ) + await templateApi.mockIndex() await comfyPage.command.executeCommand('Comfy.BrowseTemplates') await expect(comfyPage.templates.content).toBeVisible() @@ -144,36 +121,29 @@ test.describe( }) test('desktop-only templates never leak into DOM on cloud distribution', async ({ - comfyPage + comfyPage, + templateApi }) => { - const templates: TemplateInfo[] = [ - makeTemplate({ - name: 'cloud-visible', - title: 'Cloud Visible', - includeOnDistributions: [Cloud] - }), - makeTemplate({ - name: 'desktop-leak-check', - title: 'Desktop Leak Check', - includeOnDistributions: [Desktop] - }), - makeTemplate({ - name: 'local-leak-check', - title: 'Local Leak Check', - includeOnDistributions: [Local] - }) - ] - - await comfyPage.page.route('**/templates/index.json', async (route) => { - await route.fulfill({ - status: 200, - body: JSON.stringify(mockTemplateIndex(templates)), - headers: { - 'Content-Type': 'application/json', - 'Cache-Control': 'no-store' - } - }) - }) + templateApi.configure( + withTemplates([ + makeTemplate({ + name: 'cloud-visible', + title: 'Cloud Visible', + includeOnDistributions: [Cloud] + }), + makeTemplate({ + name: 'desktop-leak-check', + title: 'Desktop Leak Check', + includeOnDistributions: [Desktop] + }), + makeTemplate({ + name: 'local-leak-check', + title: 'Local Leak Check', + includeOnDistributions: [Local] + }) + ]) + ) + await templateApi.mockIndex() await comfyPage.command.executeCommand('Comfy.BrowseTemplates') await expect(comfyPage.templates.content).toBeVisible() @@ -200,28 +170,21 @@ test.describe( }) test('templates without includeOnDistributions are visible on cloud', async ({ - comfyPage + comfyPage, + templateApi }) => { - const templates: TemplateInfo[] = [ - makeTemplate({ name: 'unrestricted-1', title: 'Unrestricted 1' }), - makeTemplate({ name: 'unrestricted-2', title: 'Unrestricted 2' }), - makeTemplate({ - name: 'cloud-only', - title: 'Cloud Only', - includeOnDistributions: [Cloud] - }) - ] - - await comfyPage.page.route('**/templates/index.json', async (route) => { - await route.fulfill({ - status: 200, - body: JSON.stringify(mockTemplateIndex(templates)), - headers: { - 'Content-Type': 'application/json', - 'Cache-Control': 'no-store' - } - }) - }) + templateApi.configure( + withTemplates([ + makeTemplate({ name: 'unrestricted-1', title: 'Unrestricted 1' }), + makeTemplate({ name: 'unrestricted-2', title: 'Unrestricted 2' }), + makeTemplate({ + name: 'cloud-only', + title: 'Cloud Only', + includeOnDistributions: [Cloud] + }) + ]) + ) + await templateApi.mockIndex() await comfyPage.command.executeCommand('Comfy.BrowseTemplates') await expect(comfyPage.templates.content).toBeVisible() @@ -234,39 +197,32 @@ test.describe( }) test('clear filters button resets to correct distribution-filtered total', async ({ - comfyPage + comfyPage, + templateApi }) => { - const templates: TemplateInfo[] = [ - makeTemplate({ - name: 'wan-cloud', - title: 'Wan Cloud', - models: ['Wan 2.2'], - includeOnDistributions: [Cloud] - }), - makeTemplate({ - name: 'flux-cloud', - title: 'Flux Cloud', - models: ['Flux'], - includeOnDistributions: [Cloud] - }), - makeTemplate({ - name: 'wan-desktop', - title: 'Wan Desktop', - models: ['Wan 2.2'], - includeOnDistributions: [Desktop] - }) - ] - - await comfyPage.page.route('**/templates/index.json', async (route) => { - await route.fulfill({ - status: 200, - body: JSON.stringify(mockTemplateIndex(templates)), - headers: { - 'Content-Type': 'application/json', - 'Cache-Control': 'no-store' - } - }) - }) + templateApi.configure( + withTemplates([ + makeTemplate({ + name: 'wan-cloud', + title: 'Wan Cloud', + models: ['Wan 2.2'], + includeOnDistributions: [Cloud] + }), + makeTemplate({ + name: 'flux-cloud', + title: 'Flux Cloud', + models: ['Flux'], + includeOnDistributions: [Cloud] + }), + makeTemplate({ + name: 'wan-desktop', + title: 'Wan Desktop', + models: ['Wan 2.2'], + includeOnDistributions: [Desktop] + }) + ]) + ) + await templateApi.mockIndex() await comfyPage.command.executeCommand('Comfy.BrowseTemplates') await expect(comfyPage.templates.content).toBeVisible() diff --git a/browser_tests/tests/vueNodes/nodeStates/bypass.spec.ts-snapshots/vue-node-bypassed-state-chromium-linux.png b/browser_tests/tests/vueNodes/nodeStates/bypass.spec.ts-snapshots/vue-node-bypassed-state-chromium-linux.png index 508c23f5f6..105ff1bfd2 100644 Binary files a/browser_tests/tests/vueNodes/nodeStates/bypass.spec.ts-snapshots/vue-node-bypassed-state-chromium-linux.png and b/browser_tests/tests/vueNodes/nodeStates/bypass.spec.ts-snapshots/vue-node-bypassed-state-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-color-blue-chromium-linux.png b/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-color-blue-chromium-linux.png index 3cf9512cde..0ee1e30e71 100644 Binary files a/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-color-blue-chromium-linux.png and b/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-color-blue-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-dark-all-colors-chromium-linux.png b/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-dark-all-colors-chromium-linux.png index 37ef218410..6c595ceb95 100644 Binary files a/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-dark-all-colors-chromium-linux.png and b/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-dark-all-colors-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-light-all-colors-chromium-linux.png b/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-light-all-colors-chromium-linux.png index 95890502d4..2768713ad9 100644 Binary files a/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-light-all-colors-chromium-linux.png and b/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-light-all-colors-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/nodeStates/mute.spec.ts-snapshots/vue-node-muted-state-chromium-linux.png b/browser_tests/tests/vueNodes/nodeStates/mute.spec.ts-snapshots/vue-node-muted-state-chromium-linux.png index 5a673800c5..3ac38afd77 100644 Binary files a/browser_tests/tests/vueNodes/nodeStates/mute.spec.ts-snapshots/vue-node-muted-state-chromium-linux.png and b/browser_tests/tests/vueNodes/nodeStates/mute.spec.ts-snapshots/vue-node-muted-state-chromium-linux.png differ diff --git a/package.json b/package.json index 0a4a83d89e..2bc689b25d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@comfyorg/comfyui-frontend", - "version": "1.45.7", + "version": "1.45.8", "private": true, "description": "Official front-end implementation of ComfyUI", "homepage": "https://comfy.org", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6ac5b0dca6..89715d58a6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -106,8 +106,8 @@ catalogs: specifier: ^10.2.10 version: 10.2.10 '@tailwindcss/vite': - specifier: ^4.2.0 - version: 4.2.0 + specifier: ^4.3.0 + version: 4.3.0 '@tanstack/vue-virtual': specifier: ^3.13.12 version: 3.13.12 @@ -334,8 +334,8 @@ catalogs: specifier: ^16.26.1 version: 16.26.1 tailwindcss: - specifier: ^4.2.0 - version: 4.2.0 + specifier: ^4.3.0 + version: 4.3.0 tailwindcss-primeui: specifier: ^0.6.1 version: 0.6.1 @@ -653,7 +653,7 @@ importers: version: 22.6.1(@babel/traverse@7.29.0)(@zkochan/js-yaml@0.0.7)(eslint@9.39.1(jiti@2.6.1))(nx@22.6.1)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) '@nx/vite': specifier: 'catalog:' - version: 22.6.1(@babel/traverse@7.29.0)(nx@22.6.1)(typescript@5.9.3)(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vitest@4.0.16) + version: 22.6.1(@babel/traverse@7.29.0)(nx@22.6.1)(typescript@5.9.3)(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vitest@4.0.16) '@pinia/testing': specifier: 'catalog:' version: 1.0.3(pinia@3.0.4(typescript@5.9.3)(vue@3.5.13(typescript@5.9.3))) @@ -665,7 +665,7 @@ importers: version: 4.6.0 '@storybook/addon-docs': specifier: 'catalog:' - version: 10.2.10(@types/react@19.1.9)(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + version: 10.2.10(@types/react@19.1.9)(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) '@storybook/addon-mcp': specifier: 'catalog:' version: 0.1.6(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) @@ -674,10 +674,10 @@ importers: version: 10.2.10(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vue@3.5.13(typescript@5.9.3)) '@storybook/vue3-vite': specifier: 'catalog:' - version: 10.2.10(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)) + version: 10.2.10(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3)) '@tailwindcss/vite': specifier: 'catalog:' - version: 4.2.0(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + version: 4.3.0(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) '@testing-library/jest-dom': specifier: 'catalog:' version: 6.9.1 @@ -707,7 +707,7 @@ importers: version: 0.170.0 '@vitejs/plugin-vue': specifier: 'catalog:' - version: 6.0.3(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)) + version: 6.0.3(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3)) '@vitest/coverage-v8': specifier: 'catalog:' version: 4.0.16(vitest@4.0.16) @@ -731,7 +731,7 @@ importers: version: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.56.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1(jiti@2.6.1)))(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-better-tailwindcss: specifier: 'catalog:' - version: 4.3.1(eslint@9.39.1(jiti@2.6.1))(oxlint@1.59.0(oxlint-tsgolint@0.20.0))(tailwindcss@4.2.0)(typescript@5.9.3) + version: 4.3.1(eslint@9.39.1(jiti@2.6.1))(oxlint@1.59.0(oxlint-tsgolint@0.20.0))(tailwindcss@4.3.0)(typescript@5.9.3) eslint-plugin-import-x: specifier: 'catalog:' version: 4.16.1(@typescript-eslint/utils@8.56.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1(jiti@2.6.1)) @@ -821,7 +821,7 @@ importers: version: 16.26.1(typescript@5.9.3) tailwindcss: specifier: 'catalog:' - version: 4.2.0 + version: 4.3.0 tsx: specifier: 'catalog:' version: 4.19.4 @@ -845,19 +845,19 @@ importers: version: 11.1.0 vite: specifier: ^8.0.0 - version: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + version: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.4(@types/node@24.10.4)(rollup@4.53.5)(typescript@5.9.3)(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + version: 4.5.4(@types/node@24.10.4)(rollup@4.53.5)(typescript@5.9.3)(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) vite-plugin-html: specifier: 'catalog:' - version: 3.2.2(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + version: 3.2.2(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) vite-plugin-vue-devtools: specifier: 'catalog:' - version: 8.0.5(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)) + version: 8.0.5(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3)) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.4)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.4)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) vue-component-type-helpers: specifier: 'catalog:' version: 3.2.6 @@ -915,10 +915,10 @@ importers: devDependencies: '@tailwindcss/vite': specifier: 'catalog:' - version: 4.2.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + version: 4.3.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) '@vitejs/plugin-vue': specifier: 'catalog:' - version: 6.0.3(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)) + version: 6.0.3(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3)) dotenv: specifier: 'catalog:' version: 16.6.1 @@ -930,13 +930,13 @@ importers: version: 30.0.0(@babel/parser@7.29.0)(vue@3.5.13(typescript@5.9.3)) vite: specifier: ^8.0.0 - version: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + version: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) vite-plugin-html: specifier: 'catalog:' - version: 3.2.2(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + version: 3.2.2(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) vite-plugin-vue-devtools: specifier: 'catalog:' - version: 8.0.5(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)) + version: 8.0.5(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3)) vue-tsc: specifier: 'catalog:' version: 3.2.5(typescript@5.9.3) @@ -991,19 +991,19 @@ importers: version: 0.9.8(prettier@3.7.4)(typescript@5.9.3) '@astrojs/vue': specifier: 'catalog:' - version: 5.1.4(@types/node@25.0.3)(astro@5.18.1(@types/node@25.0.3)(jiti@2.6.1)(rollup@4.53.5)(terser@5.39.2)(tsx@4.19.4)(typescript@5.9.3)(yaml@2.8.2))(esbuild@0.27.3)(jiti@2.6.1)(rollup@4.53.5)(terser@5.39.2)(tsx@4.19.4)(vue@3.5.13(typescript@5.9.3))(yaml@2.8.2) + version: 5.1.4(@types/node@25.0.3)(astro@5.18.1(@types/node@25.0.3)(jiti@2.7.0)(rollup@4.53.5)(terser@5.39.2)(tsx@4.19.4)(typescript@5.9.3)(yaml@2.9.0))(esbuild@0.27.3)(jiti@2.7.0)(rollup@4.53.5)(terser@5.39.2)(tsx@4.19.4)(vue@3.5.13(typescript@5.9.3))(yaml@2.9.0) '@playwright/test': specifier: 'catalog:' version: 1.58.1 '@tailwindcss/vite': specifier: 'catalog:' - version: 4.2.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + version: 4.3.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) astro: specifier: 'catalog:' - version: 5.18.1(@types/node@25.0.3)(jiti@2.6.1)(rollup@4.53.5)(terser@5.39.2)(tsx@4.19.4)(typescript@5.9.3)(yaml@2.8.2) + version: 5.18.1(@types/node@25.0.3)(jiti@2.7.0)(rollup@4.53.5)(terser@5.39.2)(tsx@4.19.4)(typescript@5.9.3)(yaml@2.9.0) tailwindcss: specifier: 'catalog:' - version: 4.2.0 + version: 4.3.0 tsx: specifier: 'catalog:' version: 4.19.4 @@ -1012,7 +1012,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.7.0)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) packages/design-system: dependencies: @@ -1021,20 +1021,20 @@ importers: version: 1.2.79 '@iconify/tailwind4': specifier: 'catalog:' - version: 1.2.1(tailwindcss@4.2.0) + version: 1.2.1(tailwindcss@4.3.0) '@iconify/utils': specifier: 'catalog:' version: 3.1.0 tailwindcss-primeui: specifier: 'catalog:' - version: 0.6.1(tailwindcss@4.2.0) + version: 0.6.1(tailwindcss@4.3.0) tw-animate-css: specifier: 'catalog:' version: 1.3.8 devDependencies: tailwindcss: specifier: 'catalog:' - version: 4.2.0 + version: 4.3.0 typescript: specifier: 'catalog:' version: 5.9.3 @@ -1063,7 +1063,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.7.0)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) packages/registry-types: {} @@ -4134,69 +4134,69 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@tailwindcss/node@4.2.0': - resolution: {integrity: sha512-Yv+fn/o2OmL5fh/Ir62VXItdShnUxfpkMA4Y7jdeC8O81WPB8Kf6TT6GSHvnqgSwDzlB5iT7kDpeXxLsUS0T6Q==} + '@tailwindcss/node@4.3.0': + resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==} - '@tailwindcss/oxide-android-arm64@4.2.0': - resolution: {integrity: sha512-F0QkHAVaW/JNBWl4CEKWdZ9PMb0khw5DCELAOnu+RtjAfx5Zgw+gqCHFvqg3AirU1IAd181fwOtJQ5I8Yx5wtw==} + '@tailwindcss/oxide-android-arm64@4.3.0': + resolution: {integrity: sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==} engines: {node: '>= 20'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.2.0': - resolution: {integrity: sha512-I0QylkXsBsJMZ4nkUNSR04p6+UptjcwhcVo3Zu828ikiEqHjVmQL9RuQ6uT/cVIiKpvtVA25msu/eRV97JeNSA==} + '@tailwindcss/oxide-darwin-arm64@4.3.0': + resolution: {integrity: sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==} engines: {node: '>= 20'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.2.0': - resolution: {integrity: sha512-6TmQIn4p09PBrmnkvbYQ0wbZhLtbaksCDx7Y7R3FYYx0yxNA7xg5KP7dowmQ3d2JVdabIHvs3Hx4K3d5uCf8xg==} + '@tailwindcss/oxide-darwin-x64@4.3.0': + resolution: {integrity: sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==} engines: {node: '>= 20'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.2.0': - resolution: {integrity: sha512-qBudxDvAa2QwGlq9y7VIzhTvp2mLJ6nD/G8/tI70DCDoneaUeLWBJaPcbfzqRIWraj+o969aDQKvKW9dvkUizw==} + '@tailwindcss/oxide-freebsd-x64@4.3.0': + resolution: {integrity: sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==} engines: {node: '>= 20'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.0': - resolution: {integrity: sha512-7XKkitpy5NIjFZNUQPeUyNJNJn1CJeV7rmMR+exHfTuOsg8rxIO9eNV5TSEnqRcaOK77zQpsyUkBWmPy8FgdSg==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': + resolution: {integrity: sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==} engines: {node: '>= 20'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.2.0': - resolution: {integrity: sha512-Mff5a5Q3WoQR01pGU1gr29hHM1N93xYrKkGXfPw/aRtK4bOc331Ho4Tgfsm5WDGvpevqMpdlkCojT3qlCQbCpA==} + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': + resolution: {integrity: sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-arm64-musl@4.2.0': - resolution: {integrity: sha512-XKcSStleEVnbH6W/9DHzZv1YhjE4eSS6zOu2eRtYAIh7aV4o3vIBs+t/B15xlqoxt6ef/0uiqJVB6hkHjWD/0A==} + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': + resolution: {integrity: sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] libc: [musl] - '@tailwindcss/oxide-linux-x64-gnu@4.2.0': - resolution: {integrity: sha512-/hlXCBqn9K6fi7eAM0RsobHwJYa5V/xzWspVTzxnX+Ft9v6n+30Pz8+RxCn7sQL/vRHHLS30iQPrHQunu6/vJA==} + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': + resolution: {integrity: sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==} engines: {node: '>= 20'} cpu: [x64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-x64-musl@4.2.0': - resolution: {integrity: sha512-lKUaygq4G7sWkhQbfdRRBkaq4LY39IriqBQ+Gk6l5nKq6Ay2M2ZZb1tlIyRNgZKS8cbErTwuYSor0IIULC0SHw==} + '@tailwindcss/oxide-linux-x64-musl@4.3.0': + resolution: {integrity: sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==} engines: {node: '>= 20'} cpu: [x64] os: [linux] libc: [musl] - '@tailwindcss/oxide-wasm32-wasi@4.2.0': - resolution: {integrity: sha512-xuDjhAsFdUuFP5W9Ze4k/o4AskUtI8bcAGU4puTYprr89QaYFmhYOPfP+d1pH+k9ets6RoE23BXZM1X1jJqoyw==} + '@tailwindcss/oxide-wasm32-wasi@4.3.0': + resolution: {integrity: sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -4207,24 +4207,24 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.2.0': - resolution: {integrity: sha512-2UU/15y1sWDEDNJXxEIrfWKC2Yb4YgIW5Xz2fKFqGzFWfoMHWFlfa1EJlGO2Xzjkq/tvSarh9ZTjvbxqWvLLXA==} + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': + resolution: {integrity: sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==} engines: {node: '>= 20'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.2.0': - resolution: {integrity: sha512-CrFadmFoc+z76EV6LPG1jx6XceDsaCG3lFhyLNo/bV9ByPrE+FnBPckXQVP4XRkN76h3Fjt/a+5Er/oA/nCBvQ==} + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': + resolution: {integrity: sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==} engines: {node: '>= 20'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.2.0': - resolution: {integrity: sha512-AZqQzADaj742oqn2xjl5JbIOzZB/DGCYF/7bpvhA8KvjUj9HJkag6bBuwZvH1ps6dfgxNHyuJVlzSr2VpMgdTQ==} + '@tailwindcss/oxide@4.3.0': + resolution: {integrity: sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==} engines: {node: '>= 20'} - '@tailwindcss/vite@4.2.0': - resolution: {integrity: sha512-da9mFCaHpoOgtQiWtDGIikTrSpUFBtIZCG3jy/u2BGV+l/X1/pbxzmIUxNt6JWm19N3WtGi4KlJdSH/Si83WOA==} + '@tailwindcss/vite@4.3.0': + resolution: {integrity: sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==} peerDependencies: vite: ^8.0.0 @@ -5519,6 +5519,10 @@ packages: resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} + engines: {node: '>= 0.4'} + call-bound@1.0.4: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} @@ -6100,6 +6104,10 @@ packages: resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} engines: {node: '>=10.13.0'} + enhanced-resolve@5.21.3: + resolution: {integrity: sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q==} + engines: {node: '>=10.13.0'} + enquirer@2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} @@ -6140,8 +6148,8 @@ packages: error-stack-parser-es@1.0.5: resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} - es-abstract@1.24.1: - resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} + es-abstract@1.24.2: + resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} engines: {node: '>= 0.4'} es-define-property@1.0.1: @@ -6811,6 +6819,10 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hasown@2.0.3: + resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} + engines: {node: '>= 0.4'} + hast-util-from-html@2.0.3: resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} @@ -7014,6 +7026,10 @@ packages: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} + engines: {node: '>= 0.4'} + is-data-view@1.0.2: resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} engines: {node: '>= 0.4'} @@ -7235,6 +7251,10 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -7411,73 +7431,36 @@ packages: lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - lightningcss-android-arm64@1.31.1: - resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [android] - lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.31.1: - resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - lightningcss-darwin-arm64@1.32.0: resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.31.1: - resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - lightningcss-darwin-x64@1.32.0: resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.31.1: - resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - lightningcss-freebsd-x64@1.32.0: resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.31.1: - resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - lightningcss-linux-arm-gnueabihf@1.32.0: resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.31.1: - resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - libc: [glibc] - lightningcss-linux-arm64-gnu@1.32.0: resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} engines: {node: '>= 12.0.0'} @@ -7485,13 +7468,6 @@ packages: os: [linux] libc: [glibc] - lightningcss-linux-arm64-musl@1.31.1: - resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - libc: [musl] - lightningcss-linux-arm64-musl@1.32.0: resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} @@ -7499,13 +7475,6 @@ packages: os: [linux] libc: [musl] - lightningcss-linux-x64-gnu@1.31.1: - resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - libc: [glibc] - lightningcss-linux-x64-gnu@1.32.0: resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} @@ -7513,13 +7482,6 @@ packages: os: [linux] libc: [glibc] - lightningcss-linux-x64-musl@1.31.1: - resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - libc: [musl] - lightningcss-linux-x64-musl@1.32.0: resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} @@ -7527,34 +7489,18 @@ packages: os: [linux] libc: [musl] - lightningcss-win32-arm64-msvc@1.31.1: - resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - lightningcss-win32-arm64-msvc@1.32.0: resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.31.1: - resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - lightningcss-win32-x64-msvc@1.32.0: resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.31.1: - resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} - engines: {node: '>= 12.0.0'} - lightningcss@1.32.0: resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} @@ -8744,6 +8690,11 @@ packages: engines: {node: '>= 0.4'} hasBin: true + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} + engines: {node: '>= 0.4'} + hasBin: true + restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -8811,8 +8762,8 @@ packages: rxjs-interop@2.0.0: resolution: {integrity: sha512-ASEq9atUw7lualXB+knvgtvwkCEvGWV2gDD/8qnASzBkzEARZck9JAyxmY8OS6Nc1pCPEgDTKNcx+YqqYfzArw==} - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + safe-array-concat@1.1.4: + resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} engines: {node: '>=0.4'} safe-buffer@5.1.2: @@ -8863,6 +8814,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.0: + resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} + engines: {node: '>=10'} + hasBin: true + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -9173,11 +9129,11 @@ packages: peerDependencies: tailwindcss: '>=3.1.0' - tailwindcss@4.2.0: - resolution: {integrity: sha512-yYzTZ4++b7fNYxFfpnberEEKu43w44aqDMNM9MHMmcKuCH7lL8jJ4yJ7LGHv7rSwiqM0nkiobF9I6cLlpS2P7Q==} + tailwindcss@4.3.0: + resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} tar-stream@2.2.0: @@ -9914,8 +9870,8 @@ packages: vue-component-type-helpers@3.2.6: resolution: {integrity: sha512-O02tnvIfOQVmnvoWwuSydwRoHjZVt8UEBR+2p4rT35p8GAy5VTlWP8o5qXfJR/GWCN0nVZoYWsVUvx2jwgdBmQ==} - vue-component-type-helpers@3.2.8: - resolution: {integrity: sha512-9689efAXhN/EV86plgkL/XFiJSXhGtWPG6JDboZ+QnjlUWUUQrQ0ILKQtw4iQsuwIwu5k6Aw+JnehDe7161e7A==} + vue-component-type-helpers@3.2.9: + resolution: {integrity: sha512-S3BiWYaLSzHxTpln665ELSrMR9UYmrIDUmhik7nVZxmJjTKL2/a+ew1hvGxksKelivm0ujjWfG1fYOiU/2e8rA==} vue-demi@0.14.10: resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} @@ -10211,6 +10167,11 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -10492,14 +10453,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/vue@5.1.4(@types/node@25.0.3)(astro@5.18.1(@types/node@25.0.3)(jiti@2.6.1)(rollup@4.53.5)(terser@5.39.2)(tsx@4.19.4)(typescript@5.9.3)(yaml@2.8.2))(esbuild@0.27.3)(jiti@2.6.1)(rollup@4.53.5)(terser@5.39.2)(tsx@4.19.4)(vue@3.5.13(typescript@5.9.3))(yaml@2.8.2)': + '@astrojs/vue@5.1.4(@types/node@25.0.3)(astro@5.18.1(@types/node@25.0.3)(jiti@2.7.0)(rollup@4.53.5)(terser@5.39.2)(tsx@4.19.4)(typescript@5.9.3)(yaml@2.9.0))(esbuild@0.27.3)(jiti@2.7.0)(rollup@4.53.5)(terser@5.39.2)(tsx@4.19.4)(vue@3.5.13(typescript@5.9.3))(yaml@2.9.0)': dependencies: - '@vitejs/plugin-vue': 5.2.4(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)) - '@vitejs/plugin-vue-jsx': 4.2.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)) + '@vitejs/plugin-vue': 5.2.4(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3)) + '@vitejs/plugin-vue-jsx': 4.2.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3)) '@vue/compiler-sfc': 3.5.28 - astro: 5.18.1(@types/node@25.0.3)(jiti@2.6.1)(rollup@4.53.5)(terser@5.39.2)(tsx@4.19.4)(typescript@5.9.3)(yaml@2.8.2) - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vite-plugin-vue-devtools: 7.7.9(rollup@4.53.5)(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)) + astro: 5.18.1(@types/node@25.0.3)(jiti@2.7.0)(rollup@4.53.5)(terser@5.39.2)(tsx@4.19.4)(typescript@5.9.3)(yaml@2.9.0) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) + vite-plugin-vue-devtools: 7.7.9(rollup@4.53.5)(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3)) vue: 3.5.13(typescript@5.9.3) transitivePeerDependencies: - '@nuxt/kit' @@ -11966,12 +11927,12 @@ snapshots: '@iconify/types': 2.0.0 pathe: 1.1.2 - '@iconify/tailwind4@1.2.1(tailwindcss@4.2.0)': + '@iconify/tailwind4@1.2.1(tailwindcss@4.3.0)': dependencies: '@iconify/tools': 5.0.3 '@iconify/types': 2.0.0 '@iconify/utils': 3.1.0 - tailwindcss: 4.2.0 + tailwindcss: 4.3.0 '@iconify/tools@5.0.3': dependencies: @@ -12520,11 +12481,11 @@ snapshots: - typescript - verdaccio - '@nx/vite@22.6.1(@babel/traverse@7.29.0)(nx@22.6.1)(typescript@5.9.3)(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vitest@4.0.16)': + '@nx/vite@22.6.1(@babel/traverse@7.29.0)(nx@22.6.1)(typescript@5.9.3)(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vitest@4.0.16)': dependencies: '@nx/devkit': 22.6.1(nx@22.6.1) '@nx/js': 22.6.1(@babel/traverse@7.29.0)(nx@22.6.1) - '@nx/vitest': 22.6.1(@babel/traverse@7.29.0)(nx@22.6.1)(typescript@5.9.3)(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vitest@4.0.16) + '@nx/vitest': 22.6.1(@babel/traverse@7.29.0)(nx@22.6.1)(typescript@5.9.3)(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vitest@4.0.16) '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) ajv: 8.18.0 enquirer: 2.3.6 @@ -12532,8 +12493,8 @@ snapshots: semver: 7.7.4 tsconfig-paths: 4.2.0 tslib: 2.8.1 - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.4)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) + vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.4)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -12544,7 +12505,7 @@ snapshots: - typescript - verdaccio - '@nx/vitest@22.6.1(@babel/traverse@7.29.0)(nx@22.6.1)(typescript@5.9.3)(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vitest@4.0.16)': + '@nx/vitest@22.6.1(@babel/traverse@7.29.0)(nx@22.6.1)(typescript@5.9.3)(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vitest@4.0.16)': dependencies: '@nx/devkit': 22.6.1(nx@22.6.1) '@nx/js': 22.6.1(@babel/traverse@7.29.0)(nx@22.6.1) @@ -12552,8 +12513,8 @@ snapshots: semver: 7.7.4 tslib: 2.8.1 optionalDependencies: - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.4)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) + vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.4)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -13342,10 +13303,10 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@storybook/addon-docs@10.2.10(@types/react@19.1.9)(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))': + '@storybook/addon-docs@10.2.10(@types/react@19.1.9)(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))': dependencies: '@mdx-js/react': 3.1.1(@types/react@19.1.9)(react@19.2.4) - '@storybook/csf-plugin': 10.2.10(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + '@storybook/csf-plugin': 10.2.10(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) '@storybook/icons': 2.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@storybook/react-dom-shim': 10.2.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) react: 19.2.4 @@ -13371,25 +13332,25 @@ snapshots: - '@tmcp/auth' - typescript - '@storybook/builder-vite@10.2.10(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))': + '@storybook/builder-vite@10.2.10(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))': dependencies: - '@storybook/csf-plugin': 10.2.10(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + '@storybook/csf-plugin': 10.2.10(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) storybook: 10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) ts-dedent: 2.2.0 - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) transitivePeerDependencies: - esbuild - rollup - webpack - '@storybook/csf-plugin@10.2.10(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))': + '@storybook/csf-plugin@10.2.10(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))': dependencies: storybook: 10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) unplugin: 2.3.11 optionalDependencies: esbuild: 0.27.3 rollup: 4.53.5 - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) '@storybook/global@5.0.0': {} @@ -13414,14 +13375,14 @@ snapshots: react-dom: 19.2.4(react@19.2.4) storybook: 10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@storybook/vue3-vite@10.2.10(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3))': + '@storybook/vue3-vite@10.2.10(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3))': dependencies: - '@storybook/builder-vite': 10.2.10(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + '@storybook/builder-vite': 10.2.10(esbuild@0.27.3)(rollup@4.53.5)(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) '@storybook/vue3': 10.2.10(storybook@10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vue@3.5.13(typescript@5.9.3)) magic-string: 0.30.21 storybook: 10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) typescript: 5.9.3 - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) vue-component-meta: 2.2.12(typescript@5.9.3) vue-docgen-api: 4.79.2(vue@3.5.13(typescript@5.9.3)) transitivePeerDependencies: @@ -13436,86 +13397,86 @@ snapshots: storybook: 10.2.10(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) type-fest: 2.19.0 vue: 3.5.13(typescript@5.9.3) - vue-component-type-helpers: 3.2.8 + vue-component-type-helpers: 3.2.9 '@swc/helpers@0.5.17': dependencies: tslib: 2.8.1 - '@tailwindcss/node@4.2.0': + '@tailwindcss/node@4.3.0': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.19.0 - jiti: 2.6.1 - lightningcss: 1.31.1 + enhanced-resolve: 5.21.3 + jiti: 2.7.0 + lightningcss: 1.32.0 magic-string: 0.30.21 source-map-js: 1.2.1 - tailwindcss: 4.2.0 + tailwindcss: 4.3.0 - '@tailwindcss/oxide-android-arm64@4.2.0': + '@tailwindcss/oxide-android-arm64@4.3.0': optional: true - '@tailwindcss/oxide-darwin-arm64@4.2.0': + '@tailwindcss/oxide-darwin-arm64@4.3.0': optional: true - '@tailwindcss/oxide-darwin-x64@4.2.0': + '@tailwindcss/oxide-darwin-x64@4.3.0': optional: true - '@tailwindcss/oxide-freebsd-x64@4.2.0': + '@tailwindcss/oxide-freebsd-x64@4.3.0': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.0': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.2.0': + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.2.0': + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.2.0': + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.2.0': + '@tailwindcss/oxide-linux-x64-musl@4.3.0': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.2.0': + '@tailwindcss/oxide-wasm32-wasi@4.3.0': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.2.0': + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.2.0': + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': optional: true - '@tailwindcss/oxide@4.2.0': + '@tailwindcss/oxide@4.3.0': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.2.0 - '@tailwindcss/oxide-darwin-arm64': 4.2.0 - '@tailwindcss/oxide-darwin-x64': 4.2.0 - '@tailwindcss/oxide-freebsd-x64': 4.2.0 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.0 - '@tailwindcss/oxide-linux-arm64-gnu': 4.2.0 - '@tailwindcss/oxide-linux-arm64-musl': 4.2.0 - '@tailwindcss/oxide-linux-x64-gnu': 4.2.0 - '@tailwindcss/oxide-linux-x64-musl': 4.2.0 - '@tailwindcss/oxide-wasm32-wasi': 4.2.0 - '@tailwindcss/oxide-win32-arm64-msvc': 4.2.0 - '@tailwindcss/oxide-win32-x64-msvc': 4.2.0 + '@tailwindcss/oxide-android-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-x64': 4.3.0 + '@tailwindcss/oxide-freebsd-x64': 4.3.0 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.0 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.0 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-x64-musl': 4.3.0 + '@tailwindcss/oxide-wasm32-wasi': 4.3.0 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 - '@tailwindcss/vite@4.2.0(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))': + '@tailwindcss/vite@4.3.0(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))': dependencies: - '@tailwindcss/node': 4.2.0 - '@tailwindcss/oxide': 4.2.0 - tailwindcss: 4.2.0 - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + '@tailwindcss/node': 4.3.0 + '@tailwindcss/oxide': 4.3.0 + tailwindcss: 4.3.0 + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) - '@tailwindcss/vite@4.2.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))': + '@tailwindcss/vite@4.3.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))': dependencies: - '@tailwindcss/node': 4.2.0 - '@tailwindcss/oxide': 4.2.0 - tailwindcss: 4.2.0 - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + '@tailwindcss/node': 4.3.0 + '@tailwindcss/oxide': 4.3.0 + tailwindcss: 4.3.0 + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) '@tanstack/virtual-core@3.13.12': {} @@ -14108,32 +14069,32 @@ snapshots: vue: 3.5.13(typescript@5.9.3) vue-router: 4.4.3(vue@3.5.13(typescript@5.9.3)) - '@vitejs/plugin-vue-jsx@4.2.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@4.2.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) '@rolldown/pluginutils': 1.0.0-rc.9 '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.29.0) - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) vue: 3.5.13(typescript@5.9.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.4(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3))': + '@vitejs/plugin-vue@5.2.4(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3))': dependencies: - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) vue: 3.5.13(typescript@5.9.3) - '@vitejs/plugin-vue@6.0.3(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.3(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.53 - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) vue: 3.5.13(typescript@5.9.3) - '@vitejs/plugin-vue@6.0.3(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.3(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.53 - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) vue: 3.5.13(typescript@5.9.3) '@vitest/coverage-v8@4.0.16(vitest@4.0.16)': @@ -14149,7 +14110,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.4)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.4)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -14170,21 +14131,21 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.16(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))': + '@vitest/mocker@4.0.16(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.0.16 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) - '@vitest/mocker@4.0.16(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))': + '@vitest/mocker@4.0.16(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.0.16 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) '@vitest/pretty-format@3.2.4': dependencies: @@ -14220,7 +14181,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.7.0)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) '@vitest/utils@3.2.4': dependencies: @@ -14395,38 +14356,38 @@ snapshots: dependencies: '@vue/devtools-kit': 7.7.9 - '@vue/devtools-core@7.7.9(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3))': + '@vue/devtools-core@7.7.9(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 7.7.9 '@vue/devtools-shared': 7.7.9 mitt: 3.0.1 nanoid: 5.1.5 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + vite-hot-client: 2.1.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) vue: 3.5.13(typescript@5.9.3) transitivePeerDependencies: - vite - '@vue/devtools-core@8.0.5(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3))': + '@vue/devtools-core@8.0.5(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 8.0.5 '@vue/devtools-shared': 8.0.5 mitt: 3.0.1 nanoid: 5.1.5 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + vite-hot-client: 2.1.0(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) vue: 3.5.13(typescript@5.9.3) transitivePeerDependencies: - vite - '@vue/devtools-core@8.0.5(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3))': + '@vue/devtools-core@8.0.5(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 8.0.5 '@vue/devtools-shared': 8.0.5 mitt: 3.0.1 nanoid: 5.1.5 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + vite-hot-client: 2.1.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) vue: 3.5.13(typescript@5.9.3) transitivePeerDependencies: - vite @@ -14764,10 +14725,10 @@ snapshots: array-includes@3.1.9: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 is-string: 1.1.1 @@ -14780,10 +14741,10 @@ snapshots: array.prototype.findlastindex@1.2.6: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -14791,26 +14752,26 @@ snapshots: array.prototype.flat@1.3.3: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-shim-unscopables: 1.1.0 optional: true array.prototype.flatmap@1.3.3: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-shim-unscopables: 1.1.0 optional: true arraybuffer.prototype.slice@1.0.4: dependencies: array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 @@ -14834,7 +14795,7 @@ snapshots: astral-regex@2.0.0: {} - astro@5.18.1(@types/node@25.0.3)(jiti@2.6.1)(rollup@4.53.5)(terser@5.39.2)(tsx@4.19.4)(typescript@5.9.3)(yaml@2.8.2): + astro@5.18.1(@types/node@25.0.3)(jiti@2.7.0)(rollup@4.53.5)(terser@5.39.2)(tsx@4.19.4)(typescript@5.9.3)(yaml@2.9.0): dependencies: '@astrojs/compiler': 2.13.1 '@astrojs/internal-helpers': 0.7.6 @@ -14891,8 +14852,8 @@ snapshots: unist-util-visit: 5.1.0 unstorage: 1.17.4 vfile: 6.0.3 - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vitefu: 1.1.2(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) + vitefu: 1.1.2(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -15123,7 +15084,7 @@ snapshots: dotenv: 17.3.1 exsolve: 1.0.8 giget: 2.0.0 - jiti: 2.6.1 + jiti: 2.7.0 ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 2.0.0 @@ -15152,6 +15113,14 @@ snapshots: get-intrinsic: 1.3.0 set-function-length: 1.2.2 + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + optional: true + call-bound@1.0.4: dependencies: call-bind-apply-helpers: 1.0.2 @@ -15719,7 +15688,12 @@ snapshots: enhanced-resolve@5.19.0: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.0 + tapable: 2.3.3 + + enhanced-resolve@5.21.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 enquirer@2.3.6: dependencies: @@ -15747,12 +15721,12 @@ snapshots: error-stack-parser-es@1.0.5: {} - es-abstract@1.24.1: + es-abstract@1.24.2: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 available-typed-arrays: 1.0.7 - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 data-view-buffer: 1.0.2 data-view-byte-length: 1.0.2 @@ -15771,7 +15745,7 @@ snapshots: has-property-descriptors: 1.0.2 has-proto: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.3 internal-slot: 1.1.0 is-array-buffer: 3.0.5 is-callable: 1.2.7 @@ -15789,7 +15763,7 @@ snapshots: object.assign: 4.1.7 own-keys: 1.0.1 regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 + safe-array-concat: 1.1.4 safe-push-apply: 1.0.0 safe-regex-test: 1.1.0 set-proto: 1.0.0 @@ -15836,7 +15810,7 @@ snapshots: es-shim-unscopables@1.1.0: dependencies: - hasown: 2.0.2 + hasown: 2.0.3 optional: true es-to-primitive@1.3.0: @@ -15936,8 +15910,8 @@ snapshots: eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.16.1 - resolve: 1.22.11 + is-core-module: 2.16.2 + resolve: 1.22.12 transitivePeerDependencies: - supports-color optional: true @@ -15970,7 +15944,7 @@ snapshots: - supports-color optional: true - eslint-plugin-better-tailwindcss@4.3.1(eslint@9.39.1(jiti@2.6.1))(oxlint@1.59.0(oxlint-tsgolint@0.20.0))(tailwindcss@4.2.0)(typescript@5.9.3): + eslint-plugin-better-tailwindcss@4.3.1(eslint@9.39.1(jiti@2.6.1))(oxlint@1.59.0(oxlint-tsgolint@0.20.0))(tailwindcss@4.3.0)(typescript@5.9.3): dependencies: '@eslint/css-tree': 3.6.9 '@valibot/to-json-schema': 1.5.0(valibot@1.2.0(typescript@5.9.3)) @@ -15978,7 +15952,7 @@ snapshots: jiti: 2.6.1 synckit: 0.11.12 tailwind-csstree: 0.1.4 - tailwindcss: 4.2.0 + tailwindcss: 4.3.0 tsconfig-paths-webpack-plugin: 4.2.0 valibot: 1.2.0(typescript@5.9.3) optionalDependencies: @@ -16017,8 +15991,8 @@ snapshots: eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.1(jiti@2.6.1)) - hasown: 2.0.2 - is-core-module: 2.16.1 + hasown: 2.0.3 + is-core-module: 2.16.2 is-glob: 4.0.3 minimatch: 3.1.5 object.fromentries: 2.0.8 @@ -16442,11 +16416,11 @@ snapshots: function.prototype.name@1.1.8: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 functions-have-names: 1.2.3 - hasown: 2.0.2 + hasown: 2.0.3 is-callable: 1.2.7 optional: true @@ -16639,6 +16613,11 @@ snapshots: dependencies: function-bind: 1.1.2 + hasown@2.0.3: + dependencies: + function-bind: 1.1.2 + optional: true + hast-util-from-html@2.0.3: dependencies: '@types/hast': 3.0.4 @@ -16914,6 +16893,11 @@ snapshots: dependencies: hasown: 2.0.2 + is-core-module@2.16.2: + dependencies: + hasown: 2.0.3 + optional: true + is-data-view@1.0.2: dependencies: call-bound: 1.0.4 @@ -17116,6 +17100,8 @@ snapshots: jiti@2.6.1: {} + jiti@2.7.0: {} + jju@1.4.0: {} js-beautify@1.15.1: @@ -17209,7 +17195,7 @@ snapshots: acorn: 8.16.0 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - semver: 7.7.4 + semver: 7.8.0 jsonc-parser@2.3.1: {} @@ -17301,88 +17287,39 @@ snapshots: dependencies: immediate: 3.0.6 - lightningcss-android-arm64@1.31.1: - optional: true - lightningcss-android-arm64@1.32.0: optional: true - lightningcss-darwin-arm64@1.31.1: - optional: true - lightningcss-darwin-arm64@1.32.0: optional: true - lightningcss-darwin-x64@1.31.1: - optional: true - lightningcss-darwin-x64@1.32.0: optional: true - lightningcss-freebsd-x64@1.31.1: - optional: true - lightningcss-freebsd-x64@1.32.0: optional: true - lightningcss-linux-arm-gnueabihf@1.31.1: - optional: true - lightningcss-linux-arm-gnueabihf@1.32.0: optional: true - lightningcss-linux-arm64-gnu@1.31.1: - optional: true - lightningcss-linux-arm64-gnu@1.32.0: optional: true - lightningcss-linux-arm64-musl@1.31.1: - optional: true - lightningcss-linux-arm64-musl@1.32.0: optional: true - lightningcss-linux-x64-gnu@1.31.1: - optional: true - lightningcss-linux-x64-gnu@1.32.0: optional: true - lightningcss-linux-x64-musl@1.31.1: - optional: true - lightningcss-linux-x64-musl@1.32.0: optional: true - lightningcss-win32-arm64-msvc@1.31.1: - optional: true - lightningcss-win32-arm64-msvc@1.32.0: optional: true - lightningcss-win32-x64-msvc@1.31.1: - optional: true - lightningcss-win32-x64-msvc@1.32.0: optional: true - lightningcss@1.31.1: - dependencies: - detect-libc: 2.1.2 - optionalDependencies: - lightningcss-android-arm64: 1.31.1 - lightningcss-darwin-arm64: 1.31.1 - lightningcss-darwin-x64: 1.31.1 - lightningcss-freebsd-x64: 1.31.1 - lightningcss-linux-arm-gnueabihf: 1.31.1 - lightningcss-linux-arm64-gnu: 1.31.1 - lightningcss-linux-arm64-musl: 1.31.1 - lightningcss-linux-x64-gnu: 1.31.1 - lightningcss-linux-x64-musl: 1.31.1 - lightningcss-win32-arm64-msvc: 1.31.1 - lightningcss-win32-x64-msvc: 1.31.1 - lightningcss@1.32.0: dependencies: detect-libc: 2.1.2 @@ -18127,22 +18064,22 @@ snapshots: object.fromentries@2.0.8: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-object-atoms: 1.1.1 optional: true object.groupby@1.0.3: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 optional: true object.values@1.2.1: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -18895,9 +18832,9 @@ snapshots: reflect.getprototypeof@1.0.10: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -19069,6 +19006,14 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + resolve@1.22.12: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.2 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + optional: true + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 @@ -19183,9 +19128,9 @@ snapshots: rxjs-interop@2.0.0: {} - safe-array-concat@1.1.3: + safe-array-concat@1.1.4: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 get-intrinsic: 1.3.0 has-symbols: 1.1.0 @@ -19231,6 +19176,8 @@ snapshots: semver@7.7.4: {} + semver@7.8.0: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -19473,18 +19420,18 @@ snapshots: string.prototype.trim@1.2.10: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 optional: true string.prototype.trimend@1.0.9: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -19492,7 +19439,7 @@ snapshots: string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 es-object-atoms: 1.1.1 optional: true @@ -19653,13 +19600,13 @@ snapshots: tailwind-merge@2.6.0: {} - tailwindcss-primeui@0.6.1(tailwindcss@4.2.0): + tailwindcss-primeui@0.6.1(tailwindcss@4.3.0): dependencies: - tailwindcss: 4.2.0 + tailwindcss: 4.3.0 - tailwindcss@4.2.0: {} + tailwindcss@4.3.0: {} - tapable@2.3.0: {} + tapable@2.3.3: {} tar-stream@2.2.0: dependencies: @@ -19773,7 +19720,7 @@ snapshots: dependencies: chalk: 4.1.2 enhanced-resolve: 5.19.0 - tapable: 2.3.0 + tapable: 2.3.3 tsconfig-paths: 4.2.0 tsconfig-paths@3.15.0: @@ -19822,7 +19769,7 @@ snapshots: typed-array-byte-length@1.0.3: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 @@ -19832,7 +19779,7 @@ snapshots: typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.8 + call-bind: 1.0.9 for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 @@ -19842,7 +19789,7 @@ snapshots: typed-array-length@1.0.7: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 for-each: 0.3.5 gopd: 1.2.0 is-typed-array: 1.1.15 @@ -20136,27 +20083,27 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-dev-rpc@1.1.0(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)): + vite-dev-rpc@1.1.0(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)): dependencies: birpc: 2.9.0 - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vite-hot-client: 2.1.0(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) + vite-hot-client: 2.1.0(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) - vite-dev-rpc@1.1.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)): + vite-dev-rpc@1.1.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)): dependencies: birpc: 2.9.0 - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vite-hot-client: 2.1.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) + vite-hot-client: 2.1.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) - vite-hot-client@2.1.0(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)): + vite-hot-client@2.1.0(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)): dependencies: - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) - vite-hot-client@2.1.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)): + vite-hot-client@2.1.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)): dependencies: - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) - vite-plugin-dts@4.5.4(@types/node@24.10.4)(rollup@4.53.5)(typescript@5.9.3)(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)): + vite-plugin-dts@4.5.4(@types/node@24.10.4)(rollup@4.53.5)(typescript@5.9.3)(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)): dependencies: '@microsoft/api-extractor': 7.57.2(@types/node@24.10.4) '@rollup/pluginutils': 5.3.0(rollup@4.53.5) @@ -20169,13 +20116,13 @@ snapshots: magic-string: 0.30.21 typescript: 5.9.3 optionalDependencies: - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-html@3.2.2(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)): + vite-plugin-html@3.2.2(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)): dependencies: '@rollup/pluginutils': 4.2.1 colorette: 2.0.20 @@ -20189,9 +20136,9 @@ snapshots: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) - vite-plugin-html@3.2.2(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)): + vite-plugin-html@3.2.2(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)): dependencies: '@rollup/pluginutils': 4.2.1 colorette: 2.0.20 @@ -20205,9 +20152,9 @@ snapshots: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) - vite-plugin-inspect@0.8.9(rollup@4.53.5)(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)): + vite-plugin-inspect@0.8.9(rollup@4.53.5)(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.3.0(rollup@4.53.5) @@ -20218,12 +20165,12 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.1.1 sirv: 3.0.2 - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) transitivePeerDependencies: - rollup - supports-color - vite-plugin-inspect@11.3.3(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)): + vite-plugin-inspect@11.3.3(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)): dependencies: ansis: 4.2.0 debug: 4.4.3 @@ -20233,12 +20180,12 @@ snapshots: perfect-debounce: 2.0.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vite-dev-rpc: 1.1.0(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) + vite-dev-rpc: 1.1.0(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) transitivePeerDependencies: - supports-color - vite-plugin-inspect@11.3.3(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)): + vite-plugin-inspect@11.3.3(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)): dependencies: ansis: 4.2.0 debug: 4.4.3 @@ -20248,56 +20195,56 @@ snapshots: perfect-debounce: 2.0.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vite-dev-rpc: 1.1.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) + vite-dev-rpc: 1.1.0(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@7.7.9(rollup@4.53.5)(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)): + vite-plugin-vue-devtools@7.7.9(rollup@4.53.5)(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3)): dependencies: - '@vue/devtools-core': 7.7.9(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)) + '@vue/devtools-core': 7.7.9(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3)) '@vue/devtools-kit': 7.7.9 '@vue/devtools-shared': 7.7.9 execa: 9.6.1 sirv: 3.0.2 - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vite-plugin-inspect: 0.8.9(rollup@4.53.5)(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) - vite-plugin-vue-inspector: 5.3.2(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) + vite-plugin-inspect: 0.8.9(rollup@4.53.5)(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) + vite-plugin-vue-inspector: 5.3.2(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) transitivePeerDependencies: - '@nuxt/kit' - rollup - supports-color - vue - vite-plugin-vue-devtools@8.0.5(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)): + vite-plugin-vue-devtools@8.0.5(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3)): dependencies: - '@vue/devtools-core': 8.0.5(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)) + '@vue/devtools-core': 8.0.5(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3)) '@vue/devtools-kit': 8.0.5 '@vue/devtools-shared': 8.0.5 sirv: 3.0.2 - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vite-plugin-inspect: 11.3.3(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) - vite-plugin-vue-inspector: 5.3.2(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) + vite-plugin-inspect: 11.3.3(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) + vite-plugin-vue-inspector: 5.3.2(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) transitivePeerDependencies: - '@nuxt/kit' - supports-color - vue - vite-plugin-vue-devtools@8.0.5(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)): + vite-plugin-vue-devtools@8.0.5(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3)): dependencies: - '@vue/devtools-core': 8.0.5(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)) + '@vue/devtools-core': 8.0.5(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0))(vue@3.5.13(typescript@5.9.3)) '@vue/devtools-kit': 8.0.5 '@vue/devtools-shared': 8.0.5 sirv: 3.0.2 - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vite-plugin-inspect: 11.3.3(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) - vite-plugin-vue-inspector: 5.3.2(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) + vite-plugin-inspect: 11.3.3(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) + vite-plugin-vue-inspector: 5.3.2(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) transitivePeerDependencies: - '@nuxt/kit' - supports-color - vue - vite-plugin-vue-inspector@5.3.2(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)): + vite-plugin-vue-inspector@5.3.2(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)): dependencies: '@babel/core': 7.29.0 '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) @@ -20308,11 +20255,11 @@ snapshots: '@vue/compiler-dom': 3.5.28 kolorist: 1.8.0 magic-string: 0.30.21 - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) transitivePeerDependencies: - supports-color - vite-plugin-vue-inspector@5.3.2(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)): + vite-plugin-vue-inspector@5.3.2(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)): dependencies: '@babel/core': 7.29.0 '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) @@ -20323,11 +20270,11 @@ snapshots: '@vue/compiler-dom': 3.5.28 kolorist: 1.8.0 magic-string: 0.30.21 - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) transitivePeerDependencies: - supports-color - vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2): + vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0): dependencies: '@oxc-project/runtime': 0.115.0 lightningcss: 1.32.0 @@ -20342,9 +20289,9 @@ snapshots: jiti: 2.6.1 terser: 5.39.2 tsx: 4.19.4 - yaml: 2.8.2 + yaml: 2.9.0 - vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2): + vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0): dependencies: '@oxc-project/runtime': 0.115.0 lightningcss: 1.32.0 @@ -20356,19 +20303,19 @@ snapshots: '@types/node': 25.0.3 esbuild: 0.27.3 fsevents: 2.3.3 - jiti: 2.6.1 + jiti: 2.7.0 terser: 5.39.2 tsx: 4.19.4 - yaml: 2.8.2 + yaml: 2.9.0 - vitefu@1.1.2(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)): + vitefu@1.1.2(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)): optionalDependencies: - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) - vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.4)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2): + vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.4)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0): dependencies: '@vitest/expect': 4.0.16 - '@vitest/mocker': 4.0.16(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + '@vitest/mocker': 4.0.16(vite@8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) '@vitest/pretty-format': 4.0.16 '@vitest/runner': 4.0.16 '@vitest/snapshot': 4.0.16 @@ -20385,7 +20332,7 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.10.4)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -20407,10 +20354,10 @@ snapshots: - tsx - yaml - vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2): + vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(@vitest/ui@4.0.16)(esbuild@0.27.3)(happy-dom@20.0.11)(jiti@2.7.0)(jsdom@27.4.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0): dependencies: '@vitest/expect': 4.0.16 - '@vitest/mocker': 4.0.16(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + '@vitest/mocker': 4.0.16(vite@8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0)) '@vitest/pretty-format': 4.0.16 '@vitest/runner': 4.0.16 '@vitest/snapshot': 4.0.16 @@ -20427,7 +20374,7 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.7.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -20561,7 +20508,7 @@ snapshots: vue-component-type-helpers@3.2.6: {} - vue-component-type-helpers@3.2.8: {} + vue-component-type-helpers@3.2.9: {} vue-demi@0.14.10(vue@3.5.13(typescript@5.9.3)): dependencies: @@ -20837,7 +20784,7 @@ snapshots: yaml-eslint-parser@1.3.0: dependencies: eslint-visitor-keys: 3.4.3 - yaml: 2.8.2 + yaml: 2.9.0 yaml-language-server@1.20.0: dependencies: @@ -20859,6 +20806,8 @@ snapshots: yaml@2.8.2: {} + yaml@2.9.0: {} + yargs-parser@21.1.1: {} yargs@17.7.2: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7eb19d6d70..afba93ce98 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -36,7 +36,7 @@ catalog: '@storybook/addon-mcp': 0.1.6 '@storybook/vue3': ^10.2.10 '@storybook/vue3-vite': ^10.2.10 - '@tailwindcss/vite': ^4.2.0 + '@tailwindcss/vite': ^4.3.0 '@tanstack/vue-virtual': ^3.13.12 '@testing-library/jest-dom': ^6.9.1 '@testing-library/user-event': ^14.6.1 @@ -112,7 +112,7 @@ catalog: rollup-plugin-visualizer: ^6.0.4 storybook: ^10.2.10 stylelint: ^16.26.1 - tailwindcss: ^4.2.0 + tailwindcss: ^4.3.0 three: ^0.170.0 tailwindcss-primeui: ^0.6.1 tsx: ^4.15.6 diff --git a/src/components/common/CustomizationDialog.test.ts b/src/components/common/CustomizationDialog.test.ts index bb6f79fd1f..75c2c55c04 100644 --- a/src/components/common/CustomizationDialog.test.ts +++ b/src/components/common/CustomizationDialog.test.ts @@ -16,14 +16,6 @@ vi.mock('@/stores/nodeBookmarkStore', () => ({ }) })) -vi.mock('primevue/dialog', () => ({ - default: { - name: 'Dialog', - template: '
', - props: ['visible'] - } -})) - vi.mock('primevue/selectbutton', () => ({ default: { name: 'SelectButton', @@ -32,8 +24,29 @@ vi.mock('primevue/selectbutton', () => ({ } })) -vi.mock('primevue/divider', () => ({ - default: { name: 'Divider', template: '
' } +vi.mock('@/components/ui/dialog/Dialog.vue', () => ({ + default: { name: 'Dialog', template: '
' } +})) +vi.mock('@/components/ui/dialog/DialogPortal.vue', () => ({ + default: { name: 'DialogPortal', template: '
' } +})) +vi.mock('@/components/ui/dialog/DialogOverlay.vue', () => ({ + default: { name: 'DialogOverlay', template: '
' } +})) +vi.mock('@/components/ui/dialog/DialogContent.vue', () => ({ + default: { name: 'DialogContent', template: '
' } +})) +vi.mock('@/components/ui/dialog/DialogHeader.vue', () => ({ + default: { name: 'DialogHeader', template: '
' } +})) +vi.mock('@/components/ui/dialog/DialogFooter.vue', () => ({ + default: { name: 'DialogFooter', template: '
' } +})) +vi.mock('@/components/ui/dialog/DialogTitle.vue', () => ({ + default: { name: 'DialogTitle', template: '
' } +})) +vi.mock('@/components/ui/dialog/DialogClose.vue', () => ({ + default: { name: 'DialogClose', template: '' } +})) + +vi.mock('@/components/ui/select/Select.vue', () => ({ + default: { name: 'Select', template: '
' } +})) +vi.mock('@/components/ui/select/SelectContent.vue', () => ({ + default: { name: 'SelectContent', template: '
' } +})) +vi.mock('@/components/ui/select/SelectItem.vue', () => ({ + default: { name: 'SelectItem', template: '
' } +})) +vi.mock('@/components/ui/select/SelectTrigger.vue', () => ({ + default: { name: 'SelectTrigger', template: '
' } +})) +vi.mock('@/components/ui/select/SelectValue.vue', () => ({ + default: { name: 'SelectValue', template: '' } +})) + +vi.mock('@/components/ui/dialog/Dialog.vue', () => ({ + default: { name: 'Dialog', template: '
' } +})) +vi.mock('@/components/ui/dialog/DialogPortal.vue', () => ({ + default: { name: 'DialogPortal', template: '
' } +})) +vi.mock('@/components/ui/dialog/DialogOverlay.vue', () => ({ + default: { name: 'DialogOverlay', template: '
' } +})) +vi.mock('@/components/ui/dialog/DialogContent.vue', () => ({ + default: defineComponent({ + name: 'DialogContent', + inheritAttrs: false, + setup(_, { attrs }) { + const onPointerDownOutside = (attrs as Record)[ + 'onPointerDownOutside' + ] as ((event: Event) => void) | undefined + capturedPointerDownOutside = onPointerDownOutside ?? null + }, + template: '
' + }) +})) +vi.mock('@/components/ui/dialog/DialogHeader.vue', () => ({ + default: { name: 'DialogHeader', template: '
' } +})) +vi.mock('@/components/ui/dialog/DialogTitle.vue', () => ({ + default: { name: 'DialogTitle', template: '
' } +})) +vi.mock('@/components/ui/dialog/DialogClose.vue', () => ({ + default: { name: 'DialogClose', template: '