From 3de0537c7b4f37f729637383622155a29a4e7288 Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Mon, 13 Apr 2026 05:12:02 -0400 Subject: [PATCH 01/22] test(vite-plugin-nitro): add snapshot test for Vite config mutations --- .../src/lib/vite-plugin-nitro.spec.ts | 70 +++++++++++++++++++ .../src/lib/vite-plugin-nitro.ts | 55 ++++++++++++++- 2 files changed, 124 insertions(+), 1 deletion(-) diff --git a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts index 213f1f6df..217470515 100644 --- a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts +++ b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts @@ -51,6 +51,76 @@ describe('nitro', () => { expect(nitro({})[1].name).toEqual('@analogjs/vite-plugin-nitro'); }); + it('should snapshot the incoming Vite config before later mutations', async () => { + vi.stubEnv('VITEST', ''); + vi.stubEnv('NODE_ENV', 'production'); + + const workspaceRoot = mkdtempSync(join(tmpdir(), 'analog-nitro-config-')); + const originalBuildOutDir = 'custom-client'; + const pluginPrototype = { marker: 'user-plugin-prototype' }; + const originalHook = { handler: vi.fn(), order: 'pre' }; + const userPlugin = Object.assign(Object.create(pluginPrototype), { + name: 'user-plugin', + configResolved: originalHook, + }) as vite.Plugin; + const userConfig: vite.UserConfig = { + root: workspaceRoot, + build: { outDir: originalBuildOutDir }, + plugins: [userPlugin], + }; + const ssrBuildDir = resolve(workspaceRoot, 'dist', 'ssr'); + + const { buildServerImportSpy } = await mockBuildFunctions(); + vi.mocked(buildClientApp).mockImplementation(async () => { + writeBuiltClientIndexHtml( + workspaceRoot, + 'snapshot', + resolve(workspaceRoot, originalBuildOutDir), + ); + }); + + try { + mkdirSync(ssrBuildDir, { recursive: true }); + writeFileSync( + resolve(ssrBuildDir, 'main.server.js'), + 'export default async function renderer() {}', + ); + + const plugin = nitro({ workspaceRoot }); + + await (plugin[1].config as any)(userConfig, { + command: 'build', + mode: 'production', + }); + + const mutatedHook = { handler: vi.fn(), order: 'post' }; + userConfig.build!.outDir = 'mutated-client'; + (userConfig.plugins![0] as Record)['configResolved'] = + mutatedHook; + + await (plugin[1].closeBundle as any)(); + + expect(buildClientApp).toHaveBeenCalledOnce(); + expect(buildServerImportSpy).toHaveBeenCalledOnce(); + + const capturedConfig = vi.mocked(buildClientApp).mock.calls[0]?.[0] as + | vite.UserConfig + | undefined; + const capturedPlugin = capturedConfig?.plugins?.[0] as + | Record + | undefined; + + expect(capturedConfig?.build?.outDir).toBe(originalBuildOutDir); + expect(capturedPlugin).toBeDefined(); + expect(Object.getPrototypeOf(capturedPlugin!)).toBe(pluginPrototype); + expect(capturedPlugin?.['configResolved']).toEqual(originalHook); + expect(capturedPlugin?.['configResolved']).not.toBe(originalHook); + expect(capturedPlugin?.['configResolved']).not.toBe(mutatedHook); + } finally { + rmSync(workspaceRoot, { recursive: true, force: true }); + } + }); + it('should not call the route middleware in test mode', async () => { // Arrange const spy = vi.spyOn(mockViteDevServer.middlewares, 'use'); diff --git a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts index 7b347adbc..6691d5d7a 100644 --- a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts +++ b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts @@ -34,6 +34,59 @@ import { import { getBundleOptionsKey, isRolldown } from './utils/rolldown.js'; import { debugNitro, debugSsr } from './utils/debug.js'; +type ObjectHook = { handler: T; [key: string]: unknown }; + +function isObjectHook(value: unknown): value is ObjectHook { + return !!value && typeof value === 'object' && 'handler' in value; +} + +function cloneObjectHook(hook: T): T { + if (!isObjectHook(hook)) { + return hook; + } + + return { + ...hook, + handler: hook.handler, + } as T; +} + +function cloneUserPlugin(plugin: T): T { + if (!plugin || typeof plugin !== 'object') return plugin; + const pluginRecord = plugin as Record; + const clone = Object.assign( + Object.create(Object.getPrototypeOf(plugin)), + pluginRecord, + ) as Record; + + for (const key of Object.keys(pluginRecord)) { + clone[key] = cloneObjectHook(pluginRecord[key]); + } + + return clone as T; +} + +function cloneUserConfig(userConfig: UserConfig): UserConfig { + const { resolve, build, server, plugins } = userConfig; + const test = (userConfig as UserConfig & { test?: Record }) + .test; + return { + ...userConfig, + plugins: plugins?.map(cloneUserPlugin), + build: build && { ...build }, + server: server && { ...server }, + test: test && { ...test }, + resolve: resolve && { + ...resolve, + alias: Array.isArray(resolve.alias) + ? [...resolve.alias] + : resolve.alias && typeof resolve.alias === 'object' + ? { ...resolve.alias } + : resolve.alias, + }, + } as UserConfig; +} + function createNitroMiddlewareHandler(handler: string): NitroEventHandler { return { route: '/**', @@ -544,7 +597,7 @@ export function nitro(options?: Options, nitroOptions?: NitroConfig): Plugin[] { isServe = command === 'serve'; isBuild = command === 'build'; ssrBuild = userConfig.build?.ssr === true; - config = userConfig; + config = cloneUserConfig(userConfig); isTest = isTest ? isTest : mode === 'test'; rollupExternalEntries.length = 0; clientIndexHtml = undefined; From 88269897d6a6546a310e6ec2638152139262f745 Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Mon, 13 Apr 2026 06:37:42 -0400 Subject: [PATCH 02/22] feat(vite-plugin-angular): enhance debugging documentation and improve test coverage for Angular plugin --- apps/docs-app/docs/guides/debugging.md | 86 +++++++++ .../angular-vite-plugin-live-reload.spec.ts | 107 ++++++++++- .../lib/angular-vite-plugin-transform.spec.ts | 161 ++++++++++++++++ .../src/lib/angular-vite-plugin.ts | 174 +++++++++++++----- 4 files changed, 483 insertions(+), 45 deletions(-) create mode 100644 packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts diff --git a/apps/docs-app/docs/guides/debugging.md b/apps/docs-app/docs/guides/debugging.md index 7d336c213..6a7cb3cb6 100644 --- a/apps/docs-app/docs/guides/debugging.md +++ b/apps/docs-app/docs/guides/debugging.md @@ -122,6 +122,92 @@ DEBUG=analog:platform:routes,analog:angular:compiler pnpm build DEBUG=analog:platform:* pnpm dev ``` +## Debugging a local Analog checkout from another pnpm workspace + +If you want to debug Analog while serving a different app on your machine, point that consumer workspace at the built Analog package outputs under `/Volumes/Development/analog/packages/*/dist`. + +Use the built `dist` directories, not the raw package roots. Build the packages first so each `dist` folder contains its generated `package.json`. The source package manifests still contain `catalog:` and `workspace:*` references that are only rewritten during Analog's release-style build pipeline. + +### Local checkout example + +`pnpm-workspace.yaml` + +```yaml +packages: + - 'apps/*' + - 'libs/**' + +overrides: + '@analogjs/platform': file:/Volumes/Development/analog/packages/platform/dist + '@analogjs/router': file:/Volumes/Development/analog/packages/router/dist + '@analogjs/vite-plugin-angular': file:/Volumes/Development/analog/packages/vite-plugin-angular/dist + '@analogjs/vite-plugin-nitro': file:/Volumes/Development/analog/packages/vite-plugin-nitro/dist + '@analogjs/vitest-angular': file:/Volumes/Development/analog/packages/vitest-angular/dist +``` + +Root `package.json` + +```json +{ + "dependencies": { + "@analogjs/platform": "file:/Volumes/Development/analog/packages/platform/dist" + }, + "overrides": { + "@analogjs/platform": "file:/Volumes/Development/analog/packages/platform/dist", + "@analogjs/router": "file:/Volumes/Development/analog/packages/router/dist", + "@analogjs/vite-plugin-angular": "file:/Volumes/Development/analog/packages/vite-plugin-angular/dist", + "@analogjs/vite-plugin-nitro": "file:/Volumes/Development/analog/packages/vite-plugin-nitro/dist", + "@analogjs/vitest-angular": "file:/Volumes/Development/analog/packages/vitest-angular/dist" + } +} +``` + +:::important +Keep the overrides in both places. If you only pin `@analogjs/platform`, pnpm will still resolve transitive packages like `@analogjs/vite-plugin-angular` and `@analogjs/vite-plugin-nitro` from npm instead of your local checkout. +::: + +:::note +pnpm currently does not allow `file:` entries in `catalog`, so local checkout wiring needs direct `file:` overrides instead of `catalog:` indirection. +::: + +If your app also uses other published Analog packages such as `@analogjs/content` or `@analogjs/storybook-angular`, pin those the same way. + +### GitHub branch example + +If you want the same pattern from a GitHub branch instead of a local path, pnpm supports Git subdirectory specs via `#branch&path:...`. + +`pnpm-workspace.yaml` + +```yaml +catalog: + '@analogjs/platform': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/platform/dist + '@analogjs/router': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/router/dist + '@analogjs/vite-plugin-angular': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/vite-plugin-angular/dist + '@analogjs/vite-plugin-nitro': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/vite-plugin-nitro/dist + '@analogjs/vitest-angular': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/vitest-angular/dist +``` + +Root `package.json` + +```json +{ + "dependencies": { + "@analogjs/platform": "catalog:" + }, + "overrides": { + "@analogjs/platform": "$@analogjs/platform", + "@analogjs/router": "$@analogjs/router", + "@analogjs/vite-plugin-angular": "$@analogjs/vite-plugin-angular", + "@analogjs/vite-plugin-nitro": "$@analogjs/vite-plugin-nitro", + "@analogjs/vitest-angular": "$@analogjs/vitest-angular" + } +} +``` + +:::caution +For Analog, the GitHub form only works when the branch exposes release-ready `dist/package.json` files at those paths. Pointing pnpm at `path:packages/platform` or any other raw source package path will fail because those manifests still contain unresolved `catalog:` and `workspace:*` specifiers. +::: + ## Configuration Reference | Form | Scopes | When | diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts index 6a3f2b7d8..ef1ae87fc 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts @@ -1,3 +1,12 @@ +import { + mkdtempSync, + mkdirSync, + readFileSync, + rmSync, + writeFileSync, +} from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; const preprocessCSSMock = vi.fn(); @@ -14,6 +23,7 @@ let cachedViteActual: typeof import('vite'); let cachedDevkitActual: typeof import('./utils/devkit.js'); async function setupLiveReloadPlugin(options: { + include?: string[]; stylePreprocessor?: ( code: string, filename: string, @@ -25,6 +35,8 @@ async function setupLiveReloadPlugin(options: { preprocessStylesheet?: (code: string, context: unknown) => string; }>; }; + tsconfig?: string; + workspaceRoot?: string; }) { vi.resetModules(); preprocessCSSMock.mockReset(); @@ -32,6 +44,14 @@ async function setupLiveReloadPlugin(options: { process.env['NODE_ENV'] = 'development'; delete process.env['VITEST']; + const resolvedWorkspaceRoot = options.workspaceRoot ?? workspaceRoot; + const resolvedTsconfig = + options.tsconfig ?? `${resolvedWorkspaceRoot}/tsconfig.base.json`; + const resolvedCacheDir = join( + resolvedWorkspaceRoot, + 'node_modules/.vite/live-reload-spec', + ); + cachedViteActual ??= await vi.importActual('vite'); cachedDevkitActual ??= await vi.importActual( @@ -77,11 +97,13 @@ async function setupLiveReloadPlugin(options: { const { angular } = await import('./angular-vite-plugin'); const plugin = angular({ - tsconfig: `${workspaceRoot}/tsconfig.base.json`, + include: options.include, + tsconfig: resolvedTsconfig, hmr: true, inlineStylesExtension: 'css', stylePreprocessor: options.stylePreprocessor, stylePipeline: options.stylePipeline, + workspaceRoot: resolvedWorkspaceRoot, experimental: { useAngularCompilationAPI: true, }, @@ -89,13 +111,14 @@ async function setupLiveReloadPlugin(options: { await plugin.config( { - root: workspaceRoot, + root: resolvedWorkspaceRoot, mode: 'development', }, { command: 'serve', mode: 'development' }, ); await plugin.configResolved({ - root: workspaceRoot, + cacheDir: resolvedCacheDir, + root: resolvedWorkspaceRoot, mode: 'development', build: {}, server: {}, @@ -110,6 +133,7 @@ async function setupLiveReloadPlugin(options: { expect(transformStylesheet).toBeTypeOf('function'); return { + initialize, plugin, transformStylesheet: transformStylesheet!, }; @@ -300,4 +324,81 @@ describe('angular hmr style preprocessing', () => { ); }, ); + + it( + 'wraps the compilation API tsconfig when include adds extra source roots', + { timeout: 15_000 }, + async () => { + const tempWorkspaceRoot = mkdtempSync( + join(tmpdir(), 'analog-compilation-api-include-'), + ); + const normalize = (value: string) => value.replaceAll('\\', '/'); + + try { + mkdirSync(join(tempWorkspaceRoot, 'src/app'), { recursive: true }); + mkdirSync(join(tempWorkspaceRoot, 'libs/shared/feature/src'), { + recursive: true, + }); + + writeFileSync( + join(tempWorkspaceRoot, 'src/app/app.component.ts'), + 'export const app = true;\n', + ); + writeFileSync( + join( + tempWorkspaceRoot, + 'libs/shared/feature/src/feature.component.ts', + ), + 'export const feature = true;\n', + ); + writeFileSync( + join(tempWorkspaceRoot, 'tsconfig.base.json'), + JSON.stringify( + { + compilerOptions: { + module: 'esnext', + moduleResolution: 'bundler', + target: 'es2022', + }, + files: ['./src/app/app.component.ts'], + }, + null, + 2, + ), + ); + + const { initialize } = await setupLiveReloadPlugin({ + include: ['libs/shared/feature/src/**/*.ts'], + tsconfig: join(tempWorkspaceRoot, 'tsconfig.base.json'), + workspaceRoot: tempWorkspaceRoot, + }); + + const [generatedTsconfigPath] = initialize.mock.calls[0] as [string]; + expect(normalize(generatedTsconfigPath)).not.toBe( + normalize(join(tempWorkspaceRoot, 'tsconfig.base.json')), + ); + + const generatedConfig = JSON.parse( + readFileSync(generatedTsconfigPath, 'utf-8'), + ) as { extends: string; files: string[] }; + + expect(generatedConfig.extends).toBe( + normalize(join(tempWorkspaceRoot, 'tsconfig.base.json')), + ); + expect(generatedConfig.files).toEqual( + expect.arrayContaining([ + normalize(join(tempWorkspaceRoot, 'src/app/app.component.ts')), + normalize( + join( + tempWorkspaceRoot, + 'libs/shared/feature/src/feature.component.ts', + ), + ), + ]), + ); + } finally { + rmSync(tempWorkspaceRoot, { force: true, recursive: true }); + } + }, + ); }); diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts new file mode 100644 index 000000000..86a243848 --- /dev/null +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts @@ -0,0 +1,161 @@ +import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; + +const originalNodeEnv = process.env['NODE_ENV']; +const originalVitestEnv = process.env['VITEST']; +const temporaryWorkspaceRoots = new Set(); + +async function setupLegacyTransformPlugin() { + vi.resetModules(); + process.env['NODE_ENV'] = 'test'; + process.env['VITEST'] = 'true'; + + const workspaceRoot = mkdtempSync(join(tmpdir(), 'analog-transform-')); + temporaryWorkspaceRoots.add(workspaceRoot); + mkdirSync(join(workspaceRoot, 'src', 'app'), { recursive: true }); + const tsconfigPath = join(workspaceRoot, 'tsconfig.app.json'); + writeFileSync(tsconfigPath, '{\n "compilerOptions": {}\n}\n', 'utf-8'); + + const mockBuilder = { + emit: vi.fn(), + emitNextAffectedFile: vi.fn().mockReturnValue(false), + getProgram: vi.fn().mockReturnValue({ + getTypeChecker: vi.fn(), + }), + getSourceFile: vi.fn().mockReturnValue(undefined), + }; + + vi.doMock('typescript', () => ({ + sys: { + readFile: vi.fn(), + }, + readBuilderProgram: vi.fn().mockReturnValue(undefined), + createAbstractBuilder: vi.fn().mockReturnValue(mockBuilder), + createEmitAndSemanticDiagnosticsBuilderProgram: vi + .fn() + .mockReturnValue(mockBuilder), + createIncrementalCompilerHost: vi.fn().mockReturnValue({}), + })); + + vi.doMock('@angular/compiler-cli', () => ({ + NgtscProgram: class {}, + constructorParametersDownlevelTransform: vi.fn(() => vi.fn()), + readConfiguration: vi.fn(() => ({ + options: {}, + rootNames: [`${workspaceRoot}/src/app/app.component.ts`], + })), + })); + + vi.doMock('./compiler-plugin.js', () => ({ + createCompilerPlugin: vi.fn(() => ({ + name: 'mock-compiler-plugin', + })), + createRolldownCompilerPlugin: vi.fn(() => ({ + name: 'mock-rolldown-compiler-plugin', + })), + })); + + vi.doMock('./host.js', () => ({ + augmentHostWithCaching: vi.fn(), + augmentHostWithResources: vi.fn(), + augmentProgramWithVersioning: vi.fn(), + mergeTransformers: vi.fn(() => ({})), + })); + + vi.doMock('./utils/devkit.js', () => ({ + JavaScriptTransformer: class { + close = vi.fn(); + transformFile = vi.fn(); + }, + SourceFileCache: class { + invalidate = vi.fn(); + }, + angularFullVersion: 200000, + createAngularCompilation: vi.fn(), + createJitResourceTransformer: vi.fn(() => vi.fn()), + })); + + const { angular } = await import('./angular-vite-plugin'); + const plugin = angular({ + tsconfig: tsconfigPath, + workspaceRoot, + experimental: { + useAngularCompilationAPI: false, + }, + }).find((entry) => entry.name === '@analogjs/vite-plugin-angular') as any; + + await plugin.config?.( + { + mode: 'development', + resolve: {}, + root: workspaceRoot, + }, + { command: 'serve', mode: 'development' }, + ); + await plugin.configResolved?.({ + build: {}, + cacheDir: `${workspaceRoot}/node_modules/.vite/transform-spec`, + mode: 'development', + plugins: [], + root: workspaceRoot, + server: {}, + }); + await plugin.buildStart?.call({ + addWatchFile: vi.fn(), + error: vi.fn(), + warn: vi.fn(), + }); + + return { plugin, workspaceRoot }; +} + +describe('legacy Angular transform', () => { + beforeEach(() => { + process.env['NODE_ENV'] = 'test'; + process.env['VITEST'] = 'true'; + }); + + afterEach(() => { + vi.doUnmock('typescript'); + vi.doUnmock('@angular/compiler-cli'); + vi.doUnmock('./compiler-plugin.js'); + vi.doUnmock('./host.js'); + vi.doUnmock('./utils/devkit.js'); + for (const workspaceRoot of temporaryWorkspaceRoots) { + rmSync(workspaceRoot, { recursive: true, force: true }); + } + temporaryWorkspaceRoots.clear(); + + if (typeof originalNodeEnv === 'undefined') { + delete process.env['NODE_ENV']; + } else { + process.env['NODE_ENV'] = originalNodeEnv; + } + + if (typeof originalVitestEnv === 'undefined') { + delete process.env['VITEST']; + } else { + process.env['VITEST'] = originalVitestEnv; + } + }); + + it('returns undefined when Angular did not emit the requested TS file', async () => { + const { plugin, workspaceRoot } = await setupLegacyTransformPlugin(); + const transformHook = plugin.transform.handler; + const id = `${workspaceRoot}/enterpriseOS/schema/src/gdm/identifiers.ts`; + + const result = await transformHook.call( + { + addWatchFile: vi.fn(), + error: vi.fn(), + warn: vi.fn(), + }, + 'export const DvsEntityUuidSchema = {};', + id, + ); + + expect(result).toBeUndefined(); + }); +}); diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts index a53690731..0e8c334a6 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -1729,20 +1729,26 @@ export function angular(options?: PluginOptions): Plugin[] { } const typescriptResult = fileEmitter(id); + if (!typescriptResult) { + debugCompilerV('transform skip (file not emitted by Angular)', { + id, + }); + return; + } if ( - typescriptResult?.warnings && - typescriptResult?.warnings.length > 0 + typescriptResult.warnings && + typescriptResult.warnings.length > 0 ) { this.warn(`${typescriptResult.warnings.join('\n')}`); } - if (typescriptResult?.errors && typescriptResult?.errors.length > 0) { + if (typescriptResult.errors && typescriptResult.errors.length > 0) { this.error(`${typescriptResult.errors.join('\n')}`); } // return fileEmitter - let data = typescriptResult?.content ?? ''; + let data = typescriptResult.content; if (jit && data.includes('angular:jit:')) { data = data.replace( @@ -2016,6 +2022,121 @@ export function angular(options?: PluginOptions): Plugin[] { }); } + function ensureIncludeCache(): string[] { + if (pluginOptions.include.length > 0 && includeCache.length === 0) { + includeCache = findIncludes(); + } + + return includeCache; + } + + function getTsconfigCacheKey( + resolvedTsConfigPath: string, + config: ResolvedConfig, + ): string { + const isProd = config.mode === 'production'; + + return [ + resolvedTsConfigPath, + isProd ? 'prod' : 'dev', + isTest ? 'test' : 'app', + config.build?.lib ? 'lib' : 'nolib', + pluginOptions.hmr ? 'hmr' : 'nohmr', + pluginOptions.hasTailwindCss ? 'tw' : 'notw', + ].join('|'); + } + + function getCachedTsconfigOptions( + resolvedTsConfigPath: string, + config: ResolvedConfig, + ): { options: ts.CompilerOptions; rootNames: string[] } { + const isProd = config.mode === 'production'; + const tsconfigKey = getTsconfigCacheKey(resolvedTsConfigPath, config); + let cached = tsconfigOptionsCache.get(tsconfigKey); + + if (!cached) { + const read = compilerCli.readConfiguration(resolvedTsConfigPath, { + suppressOutputPathCheck: true, + outDir: undefined, + sourceMap: false, + inlineSourceMap: !isProd, + inlineSources: !isProd, + declaration: false, + declarationMap: false, + allowEmptyCodegenFiles: false, + annotationsAs: 'decorators', + enableResourceInlining: false, + noEmitOnError: false, + mapRoot: undefined, + sourceRoot: undefined, + supportTestBed: false, + supportJitMode: false, + }); + cached = { options: read.options, rootNames: read.rootNames }; + tsconfigOptionsCache.set(tsconfigKey, cached); + } + + return cached; + } + + function resolveCompilationApiTsConfigPath( + resolvedTsConfigPath: string, + config: ResolvedConfig, + ): string { + const includedFiles = ensureIncludeCache(); + if (includedFiles.length === 0) { + return resolvedTsConfigPath; + } + + const cached = getCachedTsconfigOptions(resolvedTsConfigPath, config); + const mergedRootNames = union(cached.rootNames, includedFiles).map((file) => + normalizePath(file), + ); + + if (mergedRootNames.length === cached.rootNames.length) { + return resolvedTsConfigPath; + } + + const resolvedCacheDir = isAbsolute(config.cacheDir) + ? config.cacheDir + : resolve(config.root, config.cacheDir); + const wrapperDir = join( + resolvedCacheDir, + 'analog-angular', + 'compilation-api', + ); + const wrapperPayload = { + extends: normalizePath(resolvedTsConfigPath), + files: [...mergedRootNames].sort(), + }; + const wrapperHash = createHash('sha1') + .update(JSON.stringify(wrapperPayload)) + .digest('hex') + .slice(0, 12); + const wrapperPath = join( + wrapperDir, + `tsconfig.includes.${wrapperHash}.json`, + ); + + mkdirSync(wrapperDir, { recursive: true }); + if (!existsSync(wrapperPath)) { + writeFileSync( + wrapperPath, + `${JSON.stringify(wrapperPayload, null, 2)}\n`, + 'utf-8', + ); + } + + debugCompilationApi('generated include wrapper tsconfig', { + originalTsconfig: resolvedTsConfigPath, + wrapperTsconfig: wrapperPath, + includeCount: includedFiles.length, + rootNameCount: mergedRootNames.length, + }); + + return wrapperPath; + } + function createTsConfigGetter(tsconfigOrGetter?: string | (() => string)) { if (typeof tsconfigOrGetter === 'function') { return tsconfigOrGetter; @@ -2119,8 +2240,12 @@ export function angular(options?: PluginOptions): Plugin[] { } const resolvedTsConfigPath = resolveTsConfigPath(); - const compilationResult = await angularCompilation.initialize( + const compilationApiTsConfigPath = resolveCompilationApiTsConfigPath( resolvedTsConfigPath, + config, + ); + const compilationResult = await angularCompilation.initialize( + compilationApiTsConfigPath, { // Convert Analog's browser-style `{ replace, with }` entries into the // `Record` shape that Angular's AngularHostOptions @@ -2504,43 +2629,8 @@ export function angular(options?: PluginOptions): Plugin[] { } } - // Cached include discovery (invalidated only on FS events) - if (pluginOptions.include.length > 0 && includeCache.length === 0) { - includeCache = findIncludes(); - } - const resolvedTsConfigPath = resolveTsConfigPath(); - const tsconfigKey = [ - resolvedTsConfigPath, - isProd ? 'prod' : 'dev', - isTest ? 'test' : 'app', - config.build?.lib ? 'lib' : 'nolib', - pluginOptions.hmr ? 'hmr' : 'nohmr', - pluginOptions.hasTailwindCss ? 'tw' : 'notw', - ].join('|'); - let cached = tsconfigOptionsCache.get(tsconfigKey); - - if (!cached) { - const read = compilerCli.readConfiguration(resolvedTsConfigPath, { - suppressOutputPathCheck: true, - outDir: undefined, - sourceMap: false, - inlineSourceMap: !isProd, - inlineSources: !isProd, - declaration: false, - declarationMap: false, - allowEmptyCodegenFiles: false, - annotationsAs: 'decorators', - enableResourceInlining: false, - noEmitOnError: false, - mapRoot: undefined, - sourceRoot: undefined, - supportTestBed: false, - supportJitMode: false, - }); - cached = { options: read.options, rootNames: read.rootNames }; - tsconfigOptionsCache.set(tsconfigKey, cached); - } + const cached = getCachedTsconfigOptions(resolvedTsConfigPath, config); // Clone options before mutation (preserve cache purity) const tsCompilerOptions = { ...cached.options }; @@ -2591,7 +2681,7 @@ export function angular(options?: PluginOptions): Plugin[] { ), ); // Merge + dedupe root names - rootNames = union(rootNames, includeCache, replacements); + rootNames = union(rootNames, ensureIncludeCache(), replacements); const hostKey = JSON.stringify(tsCompilerOptions); let host: ts.CompilerHost; From 6f72fa145b483112fb87fef65f832e28a777bf70 Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Mon, 13 Apr 2026 07:05:29 -0400 Subject: [PATCH 03/22] feat: add error handling for @reference in comments and improve directive inspection --- .../src/lib/tailwind-preprocessor.spec.ts | 18 ++++ .../platform/src/lib/tailwind-preprocessor.ts | 58 ++++++++++++- .../src/lib/angular-vite-plugin.spec.ts | 29 +++++++ .../src/lib/angular-vite-plugin.ts | 82 ++++++++++++++++--- 4 files changed, 172 insertions(+), 15 deletions(-) diff --git a/packages/platform/src/lib/tailwind-preprocessor.spec.ts b/packages/platform/src/lib/tailwind-preprocessor.spec.ts index e50b26f06..287dfd387 100644 --- a/packages/platform/src/lib/tailwind-preprocessor.spec.ts +++ b/packages/platform/src/lib/tailwind-preprocessor.spec.ts @@ -43,6 +43,24 @@ describe('tailwindPreprocessor', () => { expect(preprocess(code, '/project/src/app/demo.component.css')).toBe(code); }); + it('throws a clear error when @reference only appears in comment text', () => { + vi.mocked(readFileSync).mockReturnValue( + '@import "tailwindcss" prefix(sa);', + ); + const preprocess = tailwindPreprocessor({ + tailwindRootCss: '/project/src/styles/tailwind.css', + }); + + expect(() => + preprocess( + '/* keep this comment away from @reference injection */\n.demo { @apply sa:text-red-500; }', + '/project/src/app/demo.component.css', + ), + ).toThrowError( + /contains the text "@reference" but does not contain a real @reference directive/, + ); + }); + it('skips injection when no Tailwind prefix is configured', () => { vi.mocked(readFileSync).mockReturnValue('@import "tailwindcss";'); const preprocess = tailwindPreprocessor({ diff --git a/packages/platform/src/lib/tailwind-preprocessor.ts b/packages/platform/src/lib/tailwind-preprocessor.ts index 65b5905a1..fced81742 100644 --- a/packages/platform/src/lib/tailwind-preprocessor.ts +++ b/packages/platform/src/lib/tailwind-preprocessor.ts @@ -5,6 +5,52 @@ import type { StylePreprocessor } from './style-preprocessor.js'; import { debugTailwind } from './utils/debug.js'; export type TailwindPreprocessorMode = 'auto' | 'disabled' | { prefix: string }; +const PLATFORM_TAILWIND_PREFIX = '[@analogjs/platform]'; +const CSS_BLOCK_COMMENT_REGEX = /\/\*[\s\S]*?\*\//g; +const CSS_REFERENCE_DIRECTIVE_REGEX = /(^|[;}\n\r])\s*@reference\b/m; +const CSS_TAILWIND_IMPORT_REGEX = + /(^|[;}\n\r])\s*@import\s+["']tailwindcss["']/m; + +interface CssTailwindDirectiveState { + commentlessCode: string; + hasReferenceDirective: boolean; + hasReferenceText: boolean; + hasTailwindImportDirective: boolean; +} + +function stripCssBlockComments(code: string): string { + return code.replace(CSS_BLOCK_COMMENT_REGEX, (comment) => + comment.replace(/[^\n\r]/g, ' '), + ); +} + +function inspectCssTailwindDirectives(code: string): CssTailwindDirectiveState { + const commentlessCode = stripCssBlockComments(code); + + return { + commentlessCode, + hasReferenceDirective: CSS_REFERENCE_DIRECTIVE_REGEX.test(commentlessCode), + hasReferenceText: code.includes('@reference'), + hasTailwindImportDirective: CSS_TAILWIND_IMPORT_REGEX.test(commentlessCode), + }; +} + +function throwTailwindReferenceTextError( + filename: string, + tailwindRootCss: string, +): never { + throw new Error( + `${PLATFORM_TAILWIND_PREFIX} Tailwind @reference auto-injection was ` + + `blocked for "${filename}" because the stylesheet contains the ` + + `text "@reference" but does not contain a real @reference ` + + `directive.\n\n` + + `This is usually caused by a CSS comment such as ` + + `"/* ... @reference ... */".\n\n` + + `Fix one of:\n` + + ` - Reword the comment so it does not contain "@reference"\n` + + ` - Add a real @reference "${tailwindRootCss}"; directive\n`, + ); +} export interface TailwindPreprocessorOptions { /** Absolute path to the Tailwind root CSS file that imports `tailwindcss`. */ @@ -42,7 +88,9 @@ export function tailwindPreprocessor( debugTailwind('configured', { tailwindRootCss, mode: modeOption }); return (code: string, filename: string): string => { - if (code.includes('@reference')) { + const directiveState = inspectCssTailwindDirectives(code); + + if (directiveState.hasReferenceDirective) { debugTailwind('skip (already has @reference)', { filename }); return code; } @@ -59,9 +107,9 @@ export function tailwindPreprocessor( typeof resolvedMode === 'object' ? resolvedMode.prefix : getRootPrefix(); const isRootFile = path.resolve(filename) === path.resolve(tailwindRootCss) || - /@import\s+["']tailwindcss["']/.test(code); + directiveState.hasTailwindImportDirective; const hasTailwindUsage = resolvedPrefix - ? code.includes(`${resolvedPrefix}:`) + ? directiveState.commentlessCode.includes(`${resolvedPrefix}:`) : false; const shouldAddReference = shouldInject ? shouldInject(code, filename, resolvedPrefix) @@ -77,6 +125,10 @@ export function tailwindPreprocessor( return code; } + if (directiveState.hasReferenceText) { + throwTailwindReferenceTextError(filename, tailwindRootCss); + } + const refPath = path .relative(path.dirname(filename), tailwindRootCss) .replace(/\\/g, '/'); diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts index 23ab49bbf..4c80b92ef 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts @@ -5,6 +5,7 @@ import { join } from 'node:path'; import type { Plugin } from 'vite'; import { angular, + buildStylePreprocessor, createFsWatcherCacheInvalidator, evictDeletedFileMetadata, findBoundClassAndNgClassConflicts, @@ -1148,6 +1149,17 @@ describe('tailwind-reference plugin', () => { expect(result).toBeUndefined(); }); + it('throws a clear error when @reference only appears in comment text', () => { + const css = + '/* keep this comment away from @reference injection */\n.demo { @apply sa:flex; }'; + + expect(() => + callTransform(plugin, css, '/project/src/app/demo.component.css'), + ).toThrowError( + /contains the text "@reference" but does not contain a real @reference directive/, + ); + }); + it('skips CSS that imports tailwindcss directly (double quotes)', () => { const css = '@import "tailwindcss" prefix(sa);\n.demo { @apply sa:flex; }'; @@ -1229,6 +1241,23 @@ describe('tailwind-reference plugin', () => { expect(result).toBe(`@reference "${ROOT_CSS}";\n${css}`); }); }); + + describe('buildStylePreprocessor', () => { + it('throws a clear error when @reference only appears in comment text', () => { + const preprocessor = buildStylePreprocessor({ + tailwindCss: { rootStylesheet: ROOT_CSS, prefixes: ['sa:'] }, + }); + + expect(() => + preprocessor?.( + '/* keep this comment away from @reference injection */\n.demo { @apply sa:flex; }', + '/project/src/app/demo.component.css', + ), + ).toThrowError( + /contains the text "@reference" but does not contain a real @reference directive/, + ); + }); + }); }); // ============================================================================= diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts index 0e8c334a6..ed53b3746 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -278,6 +278,52 @@ export function normalizeIncludeGlob( */ const TS_EXT_REGEX = /\.[cm]?(ts)[^x]?\??/; const classNames = new Map(); +const ANGULAR_TAILWIND_PREFIX = '[@analogjs/vite-plugin-angular]'; +const CSS_BLOCK_COMMENT_REGEX = /\/\*[\s\S]*?\*\//g; +const CSS_REFERENCE_DIRECTIVE_REGEX = /(^|[;}\n\r])\s*@reference\b/m; +const CSS_TAILWIND_IMPORT_REGEX = + /(^|[;}\n\r])\s*@import\s+["']tailwindcss["']/m; + +interface CssTailwindDirectiveState { + commentlessCode: string; + hasReferenceDirective: boolean; + hasReferenceText: boolean; + hasTailwindImportDirective: boolean; +} + +function stripCssBlockComments(code: string): string { + return code.replace(CSS_BLOCK_COMMENT_REGEX, (comment) => + comment.replace(/[^\n\r]/g, ' '), + ); +} + +function inspectCssTailwindDirectives(code: string): CssTailwindDirectiveState { + const commentlessCode = stripCssBlockComments(code); + + return { + commentlessCode, + hasReferenceDirective: CSS_REFERENCE_DIRECTIVE_REGEX.test(commentlessCode), + hasReferenceText: code.includes('@reference'), + hasTailwindImportDirective: CSS_TAILWIND_IMPORT_REGEX.test(commentlessCode), + }; +} + +function throwTailwindReferenceTextError( + filename: string, + rootStylesheet: string, +): never { + throw new Error( + `${ANGULAR_TAILWIND_PREFIX} Tailwind @reference auto-injection was ` + + `blocked for "${filename}" because the stylesheet contains the ` + + `text "@reference" but does not contain a real @reference ` + + `directive.\n\n` + + `This is usually caused by a CSS comment such as ` + + `"/* ... @reference ... */".\n\n` + + `Fix one of:\n` + + ` - Reword the comment so it does not contain "@reference"\n` + + ` - Add a real @reference "${rootStylesheet}"; directive\n`, + ); +} export function evictDeletedFileMetadata( file: string, @@ -339,7 +385,7 @@ interface DeclarationFile { * chained: Tailwind reference injection runs first, then the user's * custom preprocessor. */ -function buildStylePreprocessor( +export function buildStylePreprocessor( options?: PluginOptions, ): StylePreprocessor | undefined { const userPreprocessor = options?.stylePreprocessor; @@ -371,11 +417,12 @@ function buildStylePreprocessor( } tailwindPreprocessor = (code: string, filename: string): string => { + const directiveState = inspectCssTailwindDirectives(code); + // Skip files that already define the Tailwind config if ( - code.includes('@reference') || - code.includes('@import "tailwindcss"') || - code.includes("@import 'tailwindcss'") + directiveState.hasReferenceDirective || + directiveState.hasTailwindImportDirective ) { debugTailwindV('skip (already has @reference or is root)', { filename, @@ -384,14 +431,20 @@ function buildStylePreprocessor( } const needsReference = prefixes - ? prefixes.some((prefix) => code.includes(prefix)) - : code.includes('@apply'); + ? prefixes.some((prefix) => + directiveState.commentlessCode.includes(prefix), + ) + : directiveState.commentlessCode.includes('@apply'); if (!needsReference) { debugTailwindV('skip (no Tailwind usage detected)', { filename }); return code; } + if (directiveState.hasReferenceText) { + throwTailwindReferenceTextError(filename, rootStylesheet); + } + debugTailwind('injected @reference via preprocessor', { filename }); // Absolute path — required for virtual modules (see JSDoc above). @@ -1968,22 +2021,27 @@ export function angular(options?: PluginOptions): Plugin[] { const cleanId = id.split('?')[0]; if (cleanId === tw.rootStylesheet) return; + const directiveState = inspectCssTailwindDirectives(code); + if ( - code.includes('@reference') || - code.includes('@import "tailwindcss"') || - code.includes("@import 'tailwindcss'") + directiveState.hasReferenceDirective || + directiveState.hasTailwindImportDirective ) { return; } // Skip entry stylesheets that @import the root config const rootBasename = basename(tw.rootStylesheet); - if (code.includes(rootBasename)) return; + if (directiveState.commentlessCode.includes(rootBasename)) return; const prefixes = tw.prefixes; const needsRef = prefixes - ? prefixes.some((p) => code.includes(p)) - : code.includes('@apply'); + ? prefixes.some((p) => directiveState.commentlessCode.includes(p)) + : directiveState.commentlessCode.includes('@apply'); + + if (needsRef && directiveState.hasReferenceText) { + throwTailwindReferenceTextError(id, tw.rootStylesheet); + } if (needsRef) { debugTailwind('injected @reference via pre-transform', { From 43a5438dd7cda67c45be0c77d9218bd7a2a523cf Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Mon, 13 Apr 2026 07:10:13 -0400 Subject: [PATCH 04/22] chore: update dependencies and configurations for Docusaurus and Angular packages --- .dagger/package.json | 2 +- .github/workflows/ci.yml | 16 +- .npmrc | 3 +- apps/docs-app/docusaurus.config.js | 2 +- apps/docs-app/package.json | 24 +- .../src/components/HomepageFeatures/index.tsx | 4 +- .../src/components/StackblitzButton/index.tsx | 2 +- apps/docs-app/src/pages/index.tsx | 2 +- dagger.json | 2 +- libs/my-package/package.json | 2 +- package.json | 12 +- packages/astro-angular/package.json | 2 +- packages/content-plugin/migrations.json | 2 +- .../update-markdown-version.spec.ts | 4 +- .../update-markdown-version.ts | 2 +- packages/create-analog/index.js | 2 +- packages/create-analog/package.json | 6 +- .../template-angular-v17/package.json | 2 +- .../template-angular-v18/package.json | 2 +- .../template-angular-v19/package.json | 2 +- .../template-angular-v20/package.json | 2 +- .../create-analog/template-blog/package.json | 2 +- .../template-latest/package.json | 2 +- .../template-minimal/package.json | 2 +- .../src/generators/app/generator.spec.ts | 2 +- .../nx-plugin/src/generators/app/generator.ts | 2 +- .../app/versions/nx_17_X/versions.ts | 2 +- .../app/versions/nx_18_X/versions.ts | 2 +- .../src/utils/versions/ng_17_X/versions.ts | 2 +- .../src/utils/versions/ng_18_X/versions.ts | 2 +- .../src/utils/versions/ng_19_X/versions.ts | 2 +- pnpm-lock.yaml | 3730 ++++++----------- pnpm-workspace.yaml | 71 +- 33 files changed, 1481 insertions(+), 2437 deletions(-) diff --git a/.dagger/package.json b/.dagger/package.json index b1ee001ce..b901aed21 100644 --- a/.dagger/package.json +++ b/.dagger/package.json @@ -1,7 +1,7 @@ { "name": "analog-ci", "type": "module", - "packageManager": "pnpm@10.32.0", + "packageManager": "pnpm@10.33.0", "dependencies": { "typescript": "^5.9.0" } diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f509f321d..bfe400544 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,9 +22,9 @@ jobs: - uses: actions/checkout@v4 - name: Prettier - uses: dagger/dagger-for-github@v8.4.0 + uses: dagger/dagger-for-github@v8.4.1 with: - version: '0.20.3' + version: '0.20.5' verb: call args: prettier --source=. cloud-token: ${{ secrets.DAGGER_CLOUD_TOKEN }} @@ -36,9 +36,9 @@ jobs: - uses: actions/checkout@v4 - name: Lint - uses: dagger/dagger-for-github@v8.4.0 + uses: dagger/dagger-for-github@v8.4.1 with: - version: '0.20.3' + version: '0.20.5' verb: call args: lint --source=. cloud-token: ${{ secrets.DAGGER_CLOUD_TOKEN }} @@ -50,9 +50,9 @@ jobs: - uses: actions/checkout@v4 - name: Build + Test - uses: dagger/dagger-for-github@v8.4.0 + uses: dagger/dagger-for-github@v8.4.1 with: - version: '0.20.3' + version: '0.20.5' verb: call args: build-and-test --source=. --nx-cloud-token=env:NX_CLOUD_ACCESS_TOKEN cloud-token: ${{ secrets.DAGGER_CLOUD_TOKEN }} @@ -101,9 +101,9 @@ jobs: - uses: actions/checkout@v4 - name: E2E (${{ matrix.project }}) - uses: dagger/dagger-for-github@v8.4.0 + uses: dagger/dagger-for-github@v8.4.1 with: - version: '0.20.3' + version: '0.20.5' verb: call args: end-to-end --source=. --nx-cloud-token=env:NX_CLOUD_ACCESS_TOKEN --projects=${{ matrix.project }} cloud-token: ${{ secrets.DAGGER_CLOUD_TOKEN }} diff --git a/.npmrc b/.npmrc index f45707942..45708286e 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,2 @@ -node-options=--max-old-space-size=16384 \ No newline at end of file +node-options=--max-old-space-size=16384 +manage-package-manager-versions=false diff --git a/apps/docs-app/docusaurus.config.js b/apps/docs-app/docusaurus.config.js index 3769dc77f..e7ecd8fd2 100644 --- a/apps/docs-app/docusaurus.config.js +++ b/apps/docs-app/docusaurus.config.js @@ -35,7 +35,7 @@ const config = { future: { // Webpackbar currently trips webpack's ProgressPlugin schema validation // in this workspace. Use Docusaurus' Rspack path instead. - experimental_faster: { + faster: { rspackBundler: true, }, }, diff --git a/apps/docs-app/package.json b/apps/docs-app/package.json index 89c1e73e1..41861c8eb 100644 --- a/apps/docs-app/package.json +++ b/apps/docs-app/package.json @@ -11,22 +11,22 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/faster": "3.9.2", - "@docusaurus/core": "3.9.2", - "@docusaurus/preset-classic": "3.9.2", - "@mdx-js/react": "^3.1.1", - "clsx": "^2.1.1", - "prism-react-renderer": "^2.4.1", + "@docusaurus/faster": "catalog:docsApp", + "@docusaurus/core": "catalog:docsApp", + "@docusaurus/preset-classic": "catalog:docsApp", + "@mdx-js/react": "catalog:", + "clsx": "catalog:docsApp", + "prism-react-renderer": "catalog:docsApp", "react": "catalog:", "react-dom": "catalog:" }, "devDependencies": { - "@docusaurus/faster": "3.9.2", - "@docusaurus/module-type-aliases": "3.9.2", - "@docusaurus/tsconfig": "3.9.2", - "@docusaurus/types": "3.9.2", - "@types/react": "^18.3.28", - "@types/react-dom": "^18.3.7", + "@docusaurus/faster": "catalog:docsApp", + "@docusaurus/module-type-aliases": "catalog:docsApp", + "@docusaurus/tsconfig": "catalog:docsApp", + "@docusaurus/types": "catalog:docsApp", + "@types/react": "catalog:", + "@types/react-dom": "catalog:", "typescript": "catalog:" }, "browserslist": { diff --git a/apps/docs-app/src/components/HomepageFeatures/index.tsx b/apps/docs-app/src/components/HomepageFeatures/index.tsx index 2f129d047..4407f9a5a 100644 --- a/apps/docs-app/src/components/HomepageFeatures/index.tsx +++ b/apps/docs-app/src/components/HomepageFeatures/index.tsx @@ -7,7 +7,7 @@ type FeatureItem = { title: string; Svg: React.ComponentType>; png?: string; - description: JSX.Element; + description: React.JSX.Element; }; const FeatureList: FeatureItem[] = [ @@ -87,7 +87,7 @@ function Feature({ title, Svg, description, png }: FeatureItem) { ); } -export default function HomepageFeatures(): JSX.Element { +export default function HomepageFeatures(): React.JSX.Element { return (
diff --git a/apps/docs-app/src/components/StackblitzButton/index.tsx b/apps/docs-app/src/components/StackblitzButton/index.tsx index ef11322b3..79e2e02bc 100644 --- a/apps/docs-app/src/components/StackblitzButton/index.tsx +++ b/apps/docs-app/src/components/StackblitzButton/index.tsx @@ -7,7 +7,7 @@ import Translate from '@docusaurus/Translate'; const StackblitzLogo: React.ComponentType> = require('@site/static/img/logos/stackblitz-logo.svg').default; -export default function StackblitzButton(): JSX.Element { +export default function StackblitzButton(): React.JSX.Element { return ( { const pkg = JSON.parse(tree.read('package.json', 'utf-8')); expect(pkg.dependencies).toMatchObject({ - marked: '^15.0.7', + marked: '^18.0.0', 'marked-mangle': '^1.1.10', 'marked-highlight': '^2.2.1', 'marked-gfm-heading-id': '^4.1.1', @@ -56,7 +56,7 @@ describe('update-markdown-version migration', () => { const pkg = JSON.parse(tree.read('package.json', 'utf-8')); expect(pkg.dependencies).toMatchObject({ - marked: '^15.0.7', + marked: '^18.0.0', 'marked-mangle': '^1.1.10', 'marked-highlight': '^2.2.1', 'marked-gfm-heading-id': '^4.1.1', diff --git a/packages/content-plugin/src/migrations/update-markdown-version/update-markdown-version.ts b/packages/content-plugin/src/migrations/update-markdown-version/update-markdown-version.ts index 273c7fc75..1551a8da1 100644 --- a/packages/content-plugin/src/migrations/update-markdown-version/update-markdown-version.ts +++ b/packages/content-plugin/src/migrations/update-markdown-version/update-markdown-version.ts @@ -15,7 +15,7 @@ export default async function update( addDependenciesToPackageJson( host, { - marked: '^15.0.7', + marked: '^18.0.0', 'marked-mangle': '^1.1.10', 'marked-highlight': '^2.2.1', 'marked-gfm-heading-id': '^4.1.1', diff --git a/packages/create-analog/index.js b/packages/create-analog/index.js index ce18fa5c2..cfc85ede5 100755 --- a/packages/create-analog/index.js +++ b/packages/create-analog/index.js @@ -108,7 +108,7 @@ const HIGHLIGHTERS = { highlighter: 'withShikiHighlighter', entryPoint: 'shiki-highlighter', dependencies: { - marked: '^15.0.7', + marked: '^18.0.0', 'marked-shiki': '^1.1.0', shiki: '^1.6.1', }, diff --git a/packages/create-analog/package.json b/packages/create-analog/package.json index 701b0893c..cd4270d39 100644 --- a/packages/create-analog/package.json +++ b/packages/create-analog/package.json @@ -36,9 +36,9 @@ }, "homepage": "https://github.com/analogjs/analog/tree/main#readme", "dependencies": { - "kolorist": "^1.8.0", - "minimist": "^1.2.8", - "prompts": "^2.4.2" + "kolorist": "catalog:", + "minimist": "catalog:", + "prompts": "catalog:" }, "devDependencies": { "@analogjs/platform": "workspace:*" diff --git a/packages/create-analog/template-angular-v17/package.json b/packages/create-analog/template-angular-v17/package.json index 15a5b3366..9a460a923 100644 --- a/packages/create-analog/template-angular-v17/package.json +++ b/packages/create-analog/template-angular-v17/package.json @@ -28,7 +28,7 @@ "@angular/router": "^17.2.0", "@nx/angular": "~18.0.0", "front-matter": "^4.0.2", - "marked": "^17.0.5", + "marked": "^18.0.0", "marked-gfm-heading-id": "^4.1.1", "marked-highlight": "^2.2.1", "mermaid": "^10.2.4", diff --git a/packages/create-analog/template-angular-v18/package.json b/packages/create-analog/template-angular-v18/package.json index 784036555..bd8ad82fa 100644 --- a/packages/create-analog/template-angular-v18/package.json +++ b/packages/create-analog/template-angular-v18/package.json @@ -28,7 +28,7 @@ "@angular/platform-server": "^18.0.0", "@angular/router": "^18.0.0", "front-matter": "^4.0.2", - "marked": "^17.0.5", + "marked": "^18.0.0", "marked-gfm-heading-id": "^4.1.1", "marked-highlight": "^2.2.1", "marked-mangle": "^1.1.10", diff --git a/packages/create-analog/template-angular-v19/package.json b/packages/create-analog/template-angular-v19/package.json index 75741c096..bb7903841 100644 --- a/packages/create-analog/template-angular-v19/package.json +++ b/packages/create-analog/template-angular-v19/package.json @@ -27,7 +27,7 @@ "@angular/platform-server": "^19.0.0", "@angular/router": "^19.0.0", "front-matter": "^4.0.2", - "marked": "^17.0.5", + "marked": "^18.0.0", "marked-gfm-heading-id": "^4.1.1", "marked-highlight": "^2.2.1", "marked-mangle": "^1.1.10", diff --git a/packages/create-analog/template-angular-v20/package.json b/packages/create-analog/template-angular-v20/package.json index d0cbf816f..49288098d 100644 --- a/packages/create-analog/template-angular-v20/package.json +++ b/packages/create-analog/template-angular-v20/package.json @@ -27,7 +27,7 @@ "@angular/platform-server": "^20.0.0", "@angular/router": "^20.0.0", "front-matter": "^4.0.2", - "marked": "^17.0.5", + "marked": "^18.0.0", "marked-gfm-heading-id": "^4.1.1", "marked-highlight": "^2.2.1", "marked-mangle": "^1.1.10", diff --git a/packages/create-analog/template-blog/package.json b/packages/create-analog/template-blog/package.json index 04086788d..2a1a134e5 100644 --- a/packages/create-analog/template-blog/package.json +++ b/packages/create-analog/template-blog/package.json @@ -27,7 +27,7 @@ "@angular/platform-server": "^21.0.0", "@angular/router": "^21.0.0", "front-matter": "^4.0.2", - "marked": "^17.0.5", + "marked": "^18.0.0", "marked-gfm-heading-id": "^4.1.1", "marked-highlight": "^2.2.1", "marked-mangle": "^1.1.10", diff --git a/packages/create-analog/template-latest/package.json b/packages/create-analog/template-latest/package.json index e73a70ee9..bdcb50c52 100644 --- a/packages/create-analog/template-latest/package.json +++ b/packages/create-analog/template-latest/package.json @@ -27,7 +27,7 @@ "@angular/platform-server": "^21.0.0", "@angular/router": "^21.0.0", "front-matter": "^4.0.2", - "marked": "^17.0.5", + "marked": "^18.0.0", "marked-gfm-heading-id": "^4.1.1", "marked-highlight": "^2.2.1", "marked-mangle": "^1.1.10", diff --git a/packages/create-analog/template-minimal/package.json b/packages/create-analog/template-minimal/package.json index e73a70ee9..bdcb50c52 100644 --- a/packages/create-analog/template-minimal/package.json +++ b/packages/create-analog/template-minimal/package.json @@ -27,7 +27,7 @@ "@angular/platform-server": "^21.0.0", "@angular/router": "^21.0.0", "front-matter": "^4.0.2", - "marked": "^17.0.5", + "marked": "^18.0.0", "marked-gfm-heading-id": "^4.1.1", "marked-highlight": "^2.2.1", "marked-mangle": "^1.1.10", diff --git a/packages/nx-plugin/src/generators/app/generator.spec.ts b/packages/nx-plugin/src/generators/app/generator.spec.ts index 5a3de7474..cc0321ae5 100644 --- a/packages/nx-plugin/src/generators/app/generator.spec.ts +++ b/packages/nx-plugin/src/generators/app/generator.spec.ts @@ -38,7 +38,7 @@ describe('nx-plugin generator', () => { expect(dependencies['@analogjs/router']).toBeDefined(); expect(dependencies['@angular/platform-server']).toBeDefined(); expect(dependencies['front-matter']).toBe('^4.0.2'); - expect(dependencies['marked']).toBe('^15.0.7'); + expect(dependencies['marked']).toBe('^18.0.0'); expect(dependencies['marked-gfm-heading-id']).toBe('^4.1.1'); expect(dependencies['marked-highlight']).toBe('^2.2.1'); expect(dependencies['marked-mangle']).toBe('^1.1.10'); diff --git a/packages/nx-plugin/src/generators/app/generator.ts b/packages/nx-plugin/src/generators/app/generator.ts index c9502bfb6..276347354 100644 --- a/packages/nx-plugin/src/generators/app/generator.ts +++ b/packages/nx-plugin/src/generators/app/generator.ts @@ -119,7 +119,7 @@ async function appGenerator( tree, { 'front-matter': '^4.0.2', - marked: '^15.0.7', + marked: '^18.0.0', mermaid: '^10.2.4', prismjs: '^1.29.0', }, diff --git a/packages/nx-plugin/src/generators/app/versions/nx_17_X/versions.ts b/packages/nx-plugin/src/generators/app/versions/nx_17_X/versions.ts index 5a22117fe..ee53b92d6 100644 --- a/packages/nx-plugin/src/generators/app/versions/nx_17_X/versions.ts +++ b/packages/nx-plugin/src/generators/app/versions/nx_17_X/versions.ts @@ -6,7 +6,7 @@ export const V17_X_ANALOG_JS_CONTENT = '^1.2.0'; export const V17_X_ANALOG_JS_ROUTER = '^1.2.0'; export const V17_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^1.2.0'; export const V17_X_FRONT_MATTER = '^4.0.2'; -export const V17_X_MARKED = '^5.0.2'; +export const V17_X_MARKED = '^18.0.0'; export const V17_X_MARKED_GFM_HEADING_ID = '^4.1.1'; export const V17_X_MARKED_HIGHLIGHT = '^2.2.1'; export const V17_X_MARKED_MANGLE = '^1.1.10'; diff --git a/packages/nx-plugin/src/generators/app/versions/nx_18_X/versions.ts b/packages/nx-plugin/src/generators/app/versions/nx_18_X/versions.ts index bb140169f..e9e2c256a 100644 --- a/packages/nx-plugin/src/generators/app/versions/nx_18_X/versions.ts +++ b/packages/nx-plugin/src/generators/app/versions/nx_18_X/versions.ts @@ -7,7 +7,7 @@ export const V18_X_ANALOG_JS_ROUTER = '^3.0.0-alpha.29'; export const V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^3.0.0-alpha.29'; export const V18_X_ANALOG_JS_VITEST_ANGULAR = '^3.0.0-alpha.29'; export const V18_X_FRONT_MATTER = '^4.0.2'; -export const V18_X_MARKED = '^15.0.7'; +export const V18_X_MARKED = '^18.0.0'; export const V18_X_MARKED_GFM_HEADING_ID = '^4.1.1'; export const V18_X_MARKED_HIGHLIGHT = '^2.2.1'; export const V18_X_MARKED_MANGLE = '^1.1.10'; diff --git a/packages/nx-plugin/src/utils/versions/ng_17_X/versions.ts b/packages/nx-plugin/src/utils/versions/ng_17_X/versions.ts index 2bc393f16..4f8e82918 100644 --- a/packages/nx-plugin/src/utils/versions/ng_17_X/versions.ts +++ b/packages/nx-plugin/src/utils/versions/ng_17_X/versions.ts @@ -1,7 +1,7 @@ // V17_X export const V17_X_ANALOG_JS_ROUTER = '^1.7.0'; export const V17_X_ANALOG_JS_CONTENT = '^1.7.0'; -export const V17_X_MARKED = '^5.0.2'; +export const V17_X_MARKED = '^18.0.0'; export const V17_X_MARKED_GFM_HEADING_ID = '^4.1.1'; export const V17_X_MARKED_HIGHLIGHT = '^2.2.1'; export const V17_X_MARKED_MANGLE = '^1.1.10'; diff --git a/packages/nx-plugin/src/utils/versions/ng_18_X/versions.ts b/packages/nx-plugin/src/utils/versions/ng_18_X/versions.ts index ec1154ab1..2f5328f3e 100644 --- a/packages/nx-plugin/src/utils/versions/ng_18_X/versions.ts +++ b/packages/nx-plugin/src/utils/versions/ng_18_X/versions.ts @@ -1,7 +1,7 @@ // V18_X export const V18_X_ANALOG_JS_ROUTER = '^1.7.0'; export const V18_X_ANALOG_JS_CONTENT = '^1.7.0'; -export const V18_X_MARKED = '^15.0.7'; +export const V18_X_MARKED = '^18.0.0'; export const V18_X_MARKED_GFM_HEADING_ID = '^4.1.1'; export const V18_X_MARKED_HIGHLIGHT = '^2.2.1'; export const V18_X_MARKED_MANGLE = '^1.1.10'; diff --git a/packages/nx-plugin/src/utils/versions/ng_19_X/versions.ts b/packages/nx-plugin/src/utils/versions/ng_19_X/versions.ts index d48eb5409..2943898fe 100644 --- a/packages/nx-plugin/src/utils/versions/ng_19_X/versions.ts +++ b/packages/nx-plugin/src/utils/versions/ng_19_X/versions.ts @@ -1,7 +1,7 @@ // V19_X export const V19_X_ANALOG_JS_ROUTER = '^3.0.0-alpha.29'; export const V19_X_ANALOG_JS_CONTENT = '^3.0.0-alpha.29'; -export const V19_X_MARKED = '^15.0.7'; +export const V19_X_MARKED = '^18.0.0'; export const V19_X_MARKED_GFM_HEADING_ID = '^4.1.1'; export const V19_X_MARKED_HIGHLIGHT = '^2.2.1'; export const V19_X_MARKED_MANGLE = '^1.1.10'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3213b3b99..a2f88feb4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,17 +7,17 @@ settings: catalogs: default: '@angular-devkit/architect': - specifier: 0.2102.6 - version: 0.2102.6 + specifier: 0.2102.7 + version: 0.2102.7 '@angular-devkit/build-angular': - specifier: 21.2.4 - version: 21.2.4 + specifier: 21.2.7 + version: 21.2.7 '@angular-devkit/core': - specifier: 21.2.4 - version: 21.2.4 + specifier: 21.2.7 + version: 21.2.7 '@angular-devkit/schematics': - specifier: 21.2.4 - version: 21.2.4 + specifier: 21.2.7 + version: 21.2.7 '@angular-eslint/eslint-plugin': specifier: 21.3.1 version: 21.3.1 @@ -31,14 +31,14 @@ catalogs: specifier: 21.2.8 version: 21.2.8 '@angular/build': - specifier: 21.2.4 - version: 21.2.4 + specifier: 21.2.7 + version: 21.2.7 '@angular/cdk': - specifier: 21.2.4 - version: 21.2.4 + specifier: 21.2.6 + version: 21.2.6 '@angular/cli': - specifier: 21.2.4 - version: 21.2.4 + specifier: 21.2.7 + version: 21.2.7 '@angular/common': specifier: 21.2.8 version: 21.2.8 @@ -58,8 +58,8 @@ catalogs: specifier: 21.2.8 version: 21.2.8 '@angular/material': - specifier: 21.2.4 - version: 21.2.4 + specifier: 21.2.6 + version: 21.2.6 '@angular/platform-browser': specifier: 21.2.8 version: 21.2.8 @@ -73,8 +73,8 @@ catalogs: specifier: 21.2.8 version: 21.2.8 '@angular/ssr': - specifier: 21.2.4 - version: 21.2.4 + specifier: 21.2.7 + version: 21.2.7 '@astrojs/markdown-component': specifier: ^1.0.5 version: 1.0.5 @@ -139,17 +139,17 @@ catalogs: specifier: 22.7.0-beta.12 version: 22.7.0-beta.12 '@oxc-angular/vite': - specifier: ^0.0.22 - version: 0.0.22 + specifier: ^0.0.23 + version: 0.0.23 '@oxc-project/runtime': - specifier: ^0.123.0 - version: 0.123.0 + specifier: ^0.124.0 + version: 0.124.0 '@playwright/test': specifier: ^1.58.2 version: 1.59.1 '@schematics/angular': - specifier: 21.2.4 - version: 21.2.4 + specifier: 21.2.7 + version: 21.2.7 '@semantic-release/changelog': specifier: ^6.0.3 version: 6.0.3 @@ -172,8 +172,8 @@ catalogs: specifier: ^10.3.3 version: 10.3.5 '@storybook/angular': - specifier: 10.3.3 - version: 10.3.3 + specifier: 10.3.5 + version: 10.3.5 '@swc-node/register': specifier: ~1.11.1 version: 1.11.1 @@ -214,26 +214,26 @@ catalogs: specifier: ^7.7.1 version: 7.7.1 '@typescript-eslint/eslint-plugin': - specifier: 8.58.0 - version: 8.58.0 + specifier: 8.58.1 + version: 8.58.1 '@typescript-eslint/parser': - specifier: 8.58.0 - version: 8.58.0 + specifier: 8.58.1 + version: 8.58.1 '@typescript-eslint/type-utils': - specifier: 8.58.0 - version: 8.58.0 + specifier: 8.58.1 + version: 8.58.1 '@typescript-eslint/utils': specifier: ^8.57.2 version: 8.58.1 '@vitest/browser-playwright': - specifier: 4.1.2 - version: 4.1.2 + specifier: 4.1.4 + version: 4.1.4 '@vitest/coverage-v8': - specifier: 4.1.2 - version: 4.1.2 + specifier: 4.1.4 + version: 4.1.4 '@vitest/ui': - specifier: 4.1.2 - version: 4.1.2 + specifier: 4.1.4 + version: 4.1.4 ajv: specifier: ^8.18.0 version: 8.18.0 @@ -247,8 +247,8 @@ catalogs: specifier: ^21.2.0 version: 21.3.1 astro: - specifier: 6.1.1 - version: 6.1.1 + specifier: 6.1.5 + version: 6.1.5 conventional-changelog: specifier: ^7.2.0 version: 7.2.0 @@ -280,8 +280,8 @@ catalogs: specifier: ^2.10.1 version: 2.10.1 eslint-plugin-storybook: - specifier: 10.3.3 - version: 10.3.3 + specifier: 10.3.5 + version: 10.3.5 execa: specifier: ^9.6.1 version: 9.6.1 @@ -307,8 +307,8 @@ catalogs: specifier: 2.6.1 version: 2.6.1 jsdom: - specifier: 29.0.1 - version: 29.0.1 + specifier: 29.0.2 + version: 29.0.2 jsonc-eslint-parser: specifier: ^3.1.0 version: 3.1.0 @@ -325,8 +325,8 @@ catalogs: specifier: ^16.4.0 version: 16.4.0 marked: - specifier: ^17.0.5 - version: 17.0.6 + specifier: ^18.0.0 + version: 18.0.0 marked-gfm-heading-id: specifier: ^4.1.3 version: 4.1.4 @@ -349,8 +349,8 @@ catalogs: specifier: ^1.2.8 version: 1.2.8 ng-packagr: - specifier: 21.2.1 - version: 21.2.1 + specifier: 21.2.2 + version: 21.2.2 nitro: specifier: 3.0.260311-beta version: 3.0.260311-beta @@ -364,20 +364,20 @@ catalogs: specifier: 2.0.0-alpha.3 version: 2.0.0-alpha.3 oxc-parser: - specifier: ^0.123.0 - version: 0.123.0 + specifier: ^0.124.0 + version: 0.124.0 oxc-resolver: specifier: ^11.19.1 version: 11.19.1 oxc-transform: - specifier: ^0.123.0 - version: 0.123.0 + specifier: ^0.124.0 + version: 0.124.0 oxlint: specifier: ^1.57.0 version: 1.59.0 oxlint-tsgolint: - specifier: ^0.19.0 - version: 0.19.0 + specifier: ^0.20.0 + version: 0.20.0 playwright: specifier: ^1.58.2 version: 1.59.1 @@ -454,8 +454,8 @@ catalogs: specifier: ^3.0.0 version: 3.0.2 storybook: - specifier: 10.3.3 - version: 10.3.3 + specifier: 10.3.5 + version: 10.3.5 tailwindcss: specifier: ^4.2.2 version: 4.2.2 @@ -466,8 +466,8 @@ catalogs: specifier: ^2.2.0 version: 2.2.0 ts-morph: - specifier: ^27.0.2 - version: 27.0.2 + specifier: ^28.0.0 + version: 28.0.0 tsdown: specifier: ^0.21.5 version: 0.21.7 @@ -502,8 +502,8 @@ catalogs: specifier: ^1.1.2 version: 1.1.3 vitest: - specifier: 4.1.2 - version: 4.1.2 + specifier: 4.1.4 + version: 4.1.4 xhr2: specifier: ^0.2.1 version: 0.2.1 @@ -516,6 +516,31 @@ catalogs: zone.js: specifier: ^0.16.1 version: 0.16.1 + docsApp: + '@docusaurus/core': + specifier: 3.10.0 + version: 3.10.0 + '@docusaurus/faster': + specifier: 3.10.0 + version: 3.10.0 + '@docusaurus/module-type-aliases': + specifier: 3.10.0 + version: 3.10.0 + '@docusaurus/preset-classic': + specifier: 3.10.0 + version: 3.10.0 + '@docusaurus/tsconfig': + specifier: 3.10.0 + version: 3.10.0 + '@docusaurus/types': + specifier: 3.10.0 + version: 3.10.0 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + prism-react-renderer: + specifier: ^2.4.1 + version: 2.4.1 peerAngular20Plus: '@angular/animations': specifier: '>=20.0.0' @@ -597,7 +622,7 @@ catalogs: specifier: ^10.0.0 version: 10.3.5 '@storybook/builder-vite': - specifier: ^10.3.3 + specifier: ^10.3.5 version: 10.3.5 storybook: specifier: ^10.0.0 @@ -628,7 +653,7 @@ importers: version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/cdk': specifier: 'catalog:' - version: 21.2.4(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + version: 21.2.6(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/common': specifier: 'catalog:' version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) @@ -643,7 +668,7 @@ importers: version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/material': specifier: 'catalog:' - version: 21.2.4(fbde9ce512ad4d9140426a0e0f8b7baf) + version: 21.2.6(0a54f93f8328dbd3883663025155f2ad) '@angular/platform-browser': specifier: 'catalog:' version: 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) @@ -658,10 +683,10 @@ importers: version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/ssr': specifier: 'catalog:' - version: 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) + version: 21.2.7(9c898ff27dabd87c2e39c7d23b6394cf) '@astrojs/mdx': specifier: 'catalog:' - version: 5.0.3(astro@6.1.1(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@6.0.2)(yaml@2.8.3)) + version: 5.0.3(astro@6.1.5(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@6.0.2)(yaml@2.8.3)) '@astrojs/react': specifier: 'catalog:' version: 5.0.3(@types/node@25.6.0)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3) @@ -670,7 +695,7 @@ importers: version: 3.1.1(@types/react@19.2.14)(react@19.2.5) '@nx/angular': specifier: 'catalog:' - version: 22.7.0-beta.12(511707817f1ccc80b4289f18bce96908) + version: 22.7.0-beta.12(8ebe91e9c9195d5c85ef02c48c9502a4) '@nx/devkit': specifier: 'catalog:' version: 22.7.0-beta.12(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) @@ -700,13 +725,13 @@ importers: version: 4.0.2 marked: specifier: 'catalog:' - version: 17.0.6 + version: 18.0.0 marked-gfm-heading-id: specifier: 'catalog:' - version: 4.1.4(marked@17.0.6) + version: 4.1.4(marked@18.0.0) marked-highlight: specifier: 'catalog:' - version: 2.2.4(marked@17.0.6) + version: 2.2.4(marked@18.0.0) mermaid: specifier: 'catalog:' version: 11.14.0 @@ -749,16 +774,16 @@ importers: devDependencies: '@angular-devkit/architect': specifier: 'catalog:' - version: 0.2102.6(chokidar@5.0.0) + version: 0.2102.7(chokidar@5.0.0) '@angular-devkit/build-angular': specifier: 'catalog:' - version: 21.2.4(58973c4e634acdaeac68b624dc858cb9) + version: 21.2.7(181b35eb2462485c944a6ce64e49407b) '@angular-devkit/core': specifier: 'catalog:' - version: 21.2.4(chokidar@5.0.0) + version: 21.2.7(chokidar@5.0.0) '@angular-devkit/schematics': specifier: 'catalog:' - version: 21.2.4(chokidar@5.0.0) + version: 21.2.7(chokidar@5.0.0) '@angular-eslint/eslint-plugin': specifier: 'catalog:' version: 21.3.1(@typescript-eslint/utils@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) @@ -770,10 +795,10 @@ importers: version: 21.3.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) '@angular/build': specifier: 'catalog:' - version: 21.2.4(d420cc8f9f399e85da6a2b440ffa8d8e) + version: 21.2.7(e408ccba00006cab6e3974b844d6f1ab) '@angular/cli': specifier: 'catalog:' - version: 21.2.4(@types/node@25.6.0)(chokidar@5.0.0) + version: 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) '@angular/compiler-cli': specifier: 'catalog:' version: 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) @@ -806,7 +831,7 @@ importers: version: 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@zkochan/js-yaml@0.0.7)(eslint@10.2.0(jiti@2.6.1))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@nx/eslint-plugin': specifier: 'catalog:' - version: 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@typescript-eslint/parser@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2) + version: 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2) '@nx/js': specifier: 'catalog:' version: 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) @@ -818,28 +843,28 @@ importers: version: 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@types/node@25.6.0)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@10.2.0(jiti@2.6.1))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2) '@nx/storybook': specifier: 'catalog:' - version: 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@zkochan/js-yaml@0.0.7)(eslint@10.2.0(jiti@2.6.1))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2) + version: 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@zkochan/js-yaml@0.0.7)(eslint@10.2.0(jiti@2.6.1))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2) '@nx/vite': specifier: 'catalog:' - version: 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2) + version: 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) '@nx/vitest': specifier: 'catalog:' - version: 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2) + version: 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) '@nx/web': specifier: 'catalog:' version: 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@oxc-angular/vite': specifier: 'catalog:' - version: 0.0.22(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + version: 0.0.23(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) '@oxc-project/runtime': specifier: 'catalog:' - version: 0.123.0 + version: 0.124.0 '@playwright/test': specifier: 'catalog:' version: 1.59.1 '@schematics/angular': specifier: 'catalog:' - version: 21.2.4(chokidar@5.0.0) + version: 21.2.7(chokidar@5.0.0) '@semantic-release/changelog': specifier: 'catalog:' version: 6.0.3(semantic-release@25.0.3(typescript@6.0.2)) @@ -851,19 +876,19 @@ importers: version: 10.0.1(semantic-release@25.0.3(typescript@6.0.2)) '@storybook/addon-docs': specifier: 'catalog:' - version: 10.3.5(@types/react@19.2.14)(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + version: 10.3.5(@types/react@19.2.14)(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) '@storybook/addon-links': specifier: 'catalog:' - version: 10.3.5(react@19.2.5)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)) + version: 10.3.5(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)) '@storybook/addon-vitest': specifier: 'catalog:' - version: 10.3.5(@vitest/browser-playwright@4.1.2)(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(@vitest/runner@4.1.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vitest@4.1.2) + version: 10.3.5(@vitest/browser-playwright@4.1.4)(@vitest/browser@4.1.4)(@vitest/runner@4.1.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vitest@4.1.4) '@storybook/angular': specifier: 'catalog:' - version: 10.3.3(997df74c02245c6578b235f702d52bf0) + version: 10.3.5(0705d093f0757a9b48b20cfb74007f8e) '@storybook/builder-vite': specifier: catalog:peerStorybook10 - version: 10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + version: 10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) '@swc-node/register': specifier: 'catalog:' version: 1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2) @@ -896,28 +921,28 @@ importers: version: 7.7.1 '@typescript-eslint/eslint-plugin': specifier: 'catalog:' - version: 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.1(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) '@typescript-eslint/type-utils': specifier: 'catalog:' - version: 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) '@typescript-eslint/utils': specifier: 'catalog:' version: 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) '@typescript/native-preview': - specifier: 7.0.0-dev.20260411.1 - version: 7.0.0-dev.20260411.1 + specifier: 7.0.0-dev.20260412.1 + version: 7.0.0-dev.20260412.1 '@vitest/browser-playwright': specifier: 'catalog:' - version: 4.1.2(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2) + version: 4.1.4(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) '@vitest/coverage-v8': specifier: 'catalog:' - version: 4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2) + version: 4.1.4(@vitest/browser@4.1.4)(vitest@4.1.4) '@vitest/ui': specifier: 'catalog:' - version: 4.1.2(vitest@4.1.2) + version: 4.1.4(vitest@4.1.4) ajv: specifier: 'catalog:' version: 8.18.0 @@ -926,10 +951,10 @@ importers: version: 6.26.1(encoding@0.1.13) angular-eslint: specifier: 'catalog:' - version: 21.3.1(@angular/cli@21.2.4(@types/node@25.6.0)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@10.2.0(jiti@2.6.1))(typescript-eslint@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(typescript@6.0.2) + version: 21.3.1(@angular/cli@21.2.7(@types/node@25.6.0)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@10.2.0(jiti@2.6.1))(typescript-eslint@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(typescript@6.0.2) astro: specifier: 'catalog:' - version: 6.1.1(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@6.0.2)(yaml@2.8.3) + version: 6.1.5(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@6.0.2)(yaml@2.8.3) conventional-changelog: specifier: 'catalog:' version: 7.2.0(conventional-commits-filter@5.0.0) @@ -950,13 +975,13 @@ importers: version: 10.1.8(eslint@10.2.0(jiti@2.6.1)) eslint-plugin-oxlint: specifier: 'catalog:' - version: 1.59.0(oxlint@1.59.0(oxlint-tsgolint@0.19.0)) + version: 1.59.0(oxlint@1.59.0(oxlint-tsgolint@0.20.0)) eslint-plugin-playwright: specifier: 'catalog:' version: 2.10.1(eslint@10.2.0(jiti@2.6.1)) eslint-plugin-storybook: specifier: 'catalog:' - version: 10.3.3(eslint@10.2.0(jiti@2.6.1))(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2) + version: 10.3.5(eslint@10.2.0(jiti@2.6.1))(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2) execa: specifier: 'catalog:' version: 9.6.1 @@ -980,7 +1005,7 @@ importers: version: 2.6.1 jsdom: specifier: 'catalog:' - version: 29.0.1 + version: 29.0.2 jsonc-eslint-parser: specifier: 'catalog:' version: 3.1.0 @@ -998,10 +1023,10 @@ importers: version: 16.4.0 marked-mangle: specifier: 'catalog:' - version: 1.1.13(marked@17.0.6) + version: 1.1.13(marked@18.0.0) marked-shiki: specifier: 'catalog:' - version: 1.2.1(marked@17.0.6)(shiki@4.0.2) + version: 1.2.1(marked@18.0.0)(shiki@4.0.2) md4x: specifier: 'catalog:' version: 0.0.25 @@ -1010,7 +1035,7 @@ importers: version: 1.2.8 ng-packagr: specifier: 'catalog:' - version: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) + version: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) nitro: specifier: 'catalog:' version: 3.0.260311-beta(chokidar@5.0.0)(dotenv@16.4.7)(jiti@2.6.1)(lru-cache@11.3.3)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) @@ -1025,19 +1050,19 @@ importers: version: 2.0.0-alpha.3 oxc-parser: specifier: 'catalog:' - version: 0.123.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + version: 0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) oxc-resolver: specifier: 'catalog:' version: 11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) oxc-transform: specifier: 'catalog:' - version: 0.123.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + version: 0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) oxlint: specifier: 'catalog:' - version: 1.59.0(oxlint-tsgolint@0.19.0) + version: 1.59.0(oxlint-tsgolint@0.20.0) oxlint-tsgolint: specifier: 'catalog:' - version: 0.19.0 + version: 0.20.0 playwright: specifier: 'catalog:' version: 1.59.1 @@ -1058,7 +1083,7 @@ importers: version: 1.0.0-rc.15 rolldown-plugin-dts: specifier: 'catalog:' - version: 0.23.2(@typescript/native-preview@7.0.0-dev.20260411.1)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(rolldown@1.0.0-rc.15)(typescript@6.0.2) + version: 0.23.2(@typescript/native-preview@7.0.0-dev.20260412.1)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(rolldown@1.0.0-rc.15)(typescript@6.0.2) rollup: specifier: 'catalog:' version: 4.60.1 @@ -1097,7 +1122,7 @@ importers: version: 3.0.2 storybook: specifier: 'catalog:' - version: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) tailwindcss: specifier: 'catalog:' version: 4.2.2 @@ -1109,10 +1134,10 @@ importers: version: 2.2.0 ts-morph: specifier: 'catalog:' - version: 27.0.2 + version: 28.0.0 tsdown: specifier: 'catalog:' - version: 0.21.7(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@typescript/native-preview@7.0.0-dev.20260411.1)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(synckit@0.11.12)(typescript@6.0.2) + version: 0.21.7(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@typescript/native-preview@7.0.0-dev.20260412.1)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(synckit@0.11.12)(typescript@6.0.2) typescript: specifier: 'catalog:' version: 6.0.2 @@ -1136,7 +1161,7 @@ importers: version: 1.1.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) vitest: specifier: 'catalog:' - version: 4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) xmlbuilder2: specifier: 'catalog:' version: 4.0.3 @@ -1181,13 +1206,13 @@ importers: version: link:../../packages/astro-angular '@astrojs/mdx': specifier: 'catalog:' - version: 5.0.3(astro@6.1.1(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3)) + version: 5.0.3(astro@6.1.5(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3)) '@astrojs/react': specifier: 'catalog:' version: 5.0.3(@types/node@25.6.0)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3) astro: specifier: 'catalog:' - version: 6.1.1(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3) + version: 6.1.5(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3) apps/astro-app-e2e-playwright: {} @@ -1209,22 +1234,22 @@ importers: apps/docs-app: dependencies: '@docusaurus/core': - specifier: 3.9.2 - version: 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + specifier: catalog:docsApp + version: 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) '@docusaurus/faster': - specifier: 3.9.2 - version: 3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7) + specifier: catalog:docsApp + version: 3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7) '@docusaurus/preset-classic': - specifier: 3.9.2 - version: 3.9.2(@algolia/client-search@5.50.1)(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@types/react@18.3.28)(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)(typescript@6.0.2) + specifier: catalog:docsApp + version: 3.10.0(@algolia/client-search@5.50.1)(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@types/react@19.2.14)(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)(typescript@6.0.2) '@mdx-js/react': - specifier: ^3.1.1 - version: 3.1.1(@types/react@18.3.28)(react@19.2.5) + specifier: 'catalog:' + version: 3.1.1(@types/react@19.2.14)(react@19.2.5) clsx: - specifier: ^2.1.1 + specifier: catalog:docsApp version: 2.1.1 prism-react-renderer: - specifier: ^2.4.1 + specifier: catalog:docsApp version: 2.4.1(react@19.2.5) react: specifier: 'catalog:' @@ -1234,20 +1259,20 @@ importers: version: 19.2.5(react@19.2.5) devDependencies: '@docusaurus/module-type-aliases': - specifier: 3.9.2 - version: 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + specifier: catalog:docsApp + version: 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/tsconfig': - specifier: 3.9.2 - version: 3.9.2 + specifier: catalog:docsApp + version: 3.10.0 '@docusaurus/types': - specifier: 3.9.2 - version: 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + specifier: catalog:docsApp + version: 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@types/react': - specifier: ^18.3.28 - version: 18.3.28 + specifier: 'catalog:' + version: 19.2.14 '@types/react-dom': - specifier: ^18.3.7 - version: 18.3.7(@types/react@18.3.28) + specifier: 'catalog:' + version: 19.2.3(@types/react@19.2.14) typescript: specifier: 'catalog:' version: 6.0.2 @@ -1325,7 +1350,7 @@ importers: specifier: catalog:peerCompat version: 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) tslib: - specifier: ^2.8.1 + specifier: 'catalog:' version: 2.8.1 devDependencies: '@analogjs/vite-plugin-angular': @@ -1360,7 +1385,7 @@ importers: version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/build': specifier: catalog:peerAngular20Plus - version: 21.2.7(d96f627e1308d93e6fd6257980a11d4d) + version: 21.2.7(e408ccba00006cab6e3974b844d6f1ab) '@angular/common': specifier: catalog:peerAngular20Plus version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) @@ -1383,7 +1408,7 @@ importers: specifier: catalog:peerAngular20Plus version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) rehype: - specifier: ^13.0.2 + specifier: 'catalog:' version: 13.0.2 rxjs: specifier: catalog:peerAngular20Plus @@ -1420,16 +1445,16 @@ importers: version: 4.0.2 marked: specifier: 'catalog:' - version: 17.0.6 + version: 18.0.0 marked-gfm-heading-id: specifier: 'catalog:' - version: 4.1.4(marked@17.0.6) + version: 4.1.4(marked@18.0.0) marked-highlight: specifier: 'catalog:' - version: 2.2.4(marked@17.0.6) + version: 2.2.4(marked@18.0.0) marked-mangle: specifier: 'catalog:' - version: 1.1.13(marked@17.0.6) + version: 1.1.13(marked@18.0.0) md4x: specifier: catalog:peerContentOptional version: 0.0.25 @@ -1466,7 +1491,7 @@ importers: version: 22.6.5(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) tsdown: specifier: 'catalog:' - version: 0.21.7(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@typescript/native-preview@7.0.0-dev.20260411.1)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(synckit@0.11.12)(typescript@6.0.2) + version: 0.21.7(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@typescript/native-preview@7.0.0-dev.20260412.1)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(synckit@0.11.12)(typescript@6.0.2) vite: specifier: catalog:peerCompat version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3) @@ -1474,13 +1499,13 @@ importers: packages/create-analog: dependencies: kolorist: - specifier: ^1.8.0 + specifier: 'catalog:' version: 1.8.0 minimist: - specifier: ^1.2.8 + specifier: 'catalog:' version: 1.2.8 prompts: - specifier: ^2.4.2 + specifier: 'catalog:' version: 2.4.2 devDependencies: '@analogjs/platform': @@ -1503,13 +1528,13 @@ importers: version: link:../vite-plugin-nitro '@nx/angular': specifier: catalog:peerCompat - version: 22.6.5(c9fba921d0a0df3dadfac611be078779) + version: 22.6.5(f41ea577200f0ac9bb38e70364e33be3) '@nx/devkit': specifier: catalog:peerCompat version: 22.6.5(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@nx/vite': specifier: catalog:peerCompat - version: 22.6.5(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2) + version: 22.6.5(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) es-toolkit: specifier: 'catalog:' version: 1.45.1 @@ -1518,19 +1543,19 @@ importers: version: 4.0.2 marked: specifier: 'catalog:' - version: 17.0.6 + version: 18.0.0 marked-gfm-heading-id: specifier: 'catalog:' - version: 4.1.4(marked@17.0.6) + version: 4.1.4(marked@18.0.0) marked-highlight: specifier: 'catalog:' - version: 2.2.4(marked@17.0.6) + version: 2.2.4(marked@18.0.0) marked-mangle: specifier: 'catalog:' - version: 1.1.13(marked@17.0.6) + version: 1.1.13(marked@18.0.0) marked-shiki: specifier: 'catalog:' - version: 1.2.1(marked@17.0.6)(shiki@4.0.2) + version: 1.2.1(marked@18.0.0)(shiki@4.0.2) nitro: specifier: 'catalog:' version: 3.0.260311-beta(chokidar@5.0.0)(dotenv@16.4.7)(jiti@2.6.1)(lru-cache@11.3.3)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) @@ -1594,10 +1619,10 @@ importers: dependencies: '@analogjs/vite-plugin-angular': specifier: catalog:peerVitestAngular - version: 2.4.5(@angular-devkit/build-angular@21.2.4(3964406a4d3b8b07c14eff877b373c9b))(@angular/build@21.2.7(8e65f8e48c9e332d0b9f72f53830b70c)) + version: 2.4.5(@angular-devkit/build-angular@21.2.7(181b35eb2462485c944a6ce64e49407b))(@angular/build@21.2.7(e408ccba00006cab6e3974b844d6f1ab)) '@storybook/angular': specifier: catalog:peerStorybook10 - version: 10.3.5(3a78019390f1229089d9b40c9648e520) + version: 10.3.5(0705d093f0757a9b48b20cfb74007f8e) '@storybook/builder-vite': specifier: catalog:peerStorybook10 version: 10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) @@ -1612,10 +1637,10 @@ importers: dependencies: '@angular-devkit/build-angular': specifier: catalog:peerAngularBuilders - version: 21.2.7(34d0cc00c22339a2fe7fff06b757b60c) + version: 21.2.7(6751719947dac3e331bdc3e329959f6e) '@angular/build': specifier: catalog:peerAngularBuilders - version: 21.2.7(96b25aee48d0098251f6172ee94d10d9) + version: 21.2.7(478511f8927fcfdfc701bd8769da9049) es-toolkit: specifier: 'catalog:' version: 1.45.1 @@ -1624,7 +1649,7 @@ importers: version: 2.1.1 oxc-parser: specifier: 'catalog:' - version: 0.123.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + version: 0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) oxc-resolver: specifier: 'catalog:' version: 11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) @@ -1653,7 +1678,7 @@ importers: version: 2.0.0-alpha.3 oxc-parser: specifier: 'catalog:' - version: 0.123.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + version: 0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) radix3: specifier: 'catalog:' version: 1.1.2 @@ -1668,7 +1693,7 @@ importers: dependencies: '@analogjs/vite-plugin-angular': specifier: catalog:peerVitestAngular - version: 2.4.5(@angular-devkit/build-angular@21.2.7(3964406a4d3b8b07c14eff877b373c9b))(@angular/build@21.2.7(8e65f8e48c9e332d0b9f72f53830b70c)) + version: 2.4.5(@angular-devkit/build-angular@21.2.7(181b35eb2462485c944a6ce64e49407b))(@angular/build@21.2.7(e408ccba00006cab6e3974b844d6f1ab)) '@angular-devkit/architect': specifier: catalog:peerVitestAngular version: 0.2102.7(chokidar@5.0.0) @@ -1677,10 +1702,10 @@ importers: version: 21.2.7(chokidar@5.0.0) oxc-transform: specifier: 'catalog:' - version: 0.123.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + version: 0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) vitest: specifier: catalog:peerVitestAngular - version: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/coverage-v8@4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2))(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) zone.js: specifier: catalog:peerVitestAngular version: 0.16.1 @@ -1864,71 +1889,11 @@ packages: '@angular/build': optional: true - '@angular-devkit/architect@0.2102.4': - resolution: {integrity: sha512-GlmXHICxxGCZgkH8KM5ASkzftxhYygGQ3IKIG//987erh8kDa4m+ku20Dc08xVvv7Wf4WeFjFZULIjokiT43Gg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - hasBin: true - - '@angular-devkit/architect@0.2102.6': - resolution: {integrity: sha512-h4qybKypR7OuwcTHPQI1zRm7abXgmPiV49vI2UeMtVVY/GKzru9gMexcYmWabzEyBY8w6VSfWjV2X+eit2EhDQ==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - hasBin: true - '@angular-devkit/architect@0.2102.7': resolution: {integrity: sha512-4K/5hln9iaPEt3F/NyYqncNLvYpzSjRslEkHl2xIgZwQsIFHEvhnDRBYj2/oatURQhBqO/Yu15z/icVOYLxuTg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true - '@angular-devkit/build-angular@21.2.4': - resolution: {integrity: sha512-cwkv3hI1O8lxrKYUEDGYqIKVjN967kjrBjcTiTQODd9p3zk1NPI8uBPK2zFYdJqmDNR6lBdayH4dNMEUI5v3/Q==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - '@angular/compiler-cli': ^21.0.0 - '@angular/core': ^21.0.0 - '@angular/localize': ^21.0.0 - '@angular/platform-browser': ^21.0.0 - '@angular/platform-server': ^21.0.0 - '@angular/service-worker': ^21.0.0 - '@angular/ssr': ^21.2.4 - '@web/test-runner': ^0.20.0 - browser-sync: ^3.0.2 - jest: ^30.2.0 - jest-environment-jsdom: ^30.2.0 - karma: ^6.3.0 - ng-packagr: ^21.0.0 - protractor: ^7.0.0 - tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0 - typescript: '>=5.9 <6.0' - peerDependenciesMeta: - '@angular/core': - optional: true - '@angular/localize': - optional: true - '@angular/platform-browser': - optional: true - '@angular/platform-server': - optional: true - '@angular/service-worker': - optional: true - '@angular/ssr': - optional: true - '@web/test-runner': - optional: true - browser-sync: - optional: true - jest: - optional: true - jest-environment-jsdom: - optional: true - karma: - optional: true - ng-packagr: - optional: true - protractor: - optional: true - tailwindcss: - optional: true - '@angular-devkit/build-angular@21.2.7': resolution: {integrity: sha512-MeAsrvTq3of5x2r5g3cFhWpcb/goHVC5/7BfE+AiWuwClqsgbVoD/HiSXkQ50g2P+JQJ3Qx/DR2cC01H+k6pjg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -1979,13 +1944,6 @@ packages: tailwindcss: optional: true - '@angular-devkit/build-webpack@0.2102.4': - resolution: {integrity: sha512-LssZSYuqF2b6uf/vLSIHOWjQK/NH4hsW96D5EhphqWyzKJpCH/bi0phJ4/n6dTUAryBPoULmOeiiZOv7RrFaRw==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - webpack: ^5.30.0 - webpack-dev-server: ^5.0.2 - '@angular-devkit/build-webpack@0.2102.7': resolution: {integrity: sha512-EANoPney0B0SsbF5LVZvABDkxrSXw0nly7TmGrrV5UNmSLxhmF29IZ14vVGyy7En/zJHOIlQAP7YI39PdtYxqg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -2002,24 +1960,6 @@ packages: chokidar: optional: true - '@angular-devkit/core@21.2.4': - resolution: {integrity: sha512-U3Mln7x8gRi2GlxlrXefEOHcCgbkRvMll98SD7JYf7FJLXrqoEmuR6w2gsfbN9meYvw9geoicWWkkAmVE/8K+Q==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - chokidar: ^5.0.0 - peerDependenciesMeta: - chokidar: - optional: true - - '@angular-devkit/core@21.2.6': - resolution: {integrity: sha512-u5gPTAY7MC02uACQE39xxiFcm1hslF+ih/f2borMWnhER0JNTpHjLiLRXFkq7or7+VVHU30zfhK4XNAuO4WTIg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - chokidar: ^5.0.0 - peerDependenciesMeta: - chokidar: - optional: true - '@angular-devkit/core@21.2.7': resolution: {integrity: sha512-DONYY5u4IENO2qpd23mODaE4JI2EIohWV1kuJnsU9HIcm5wN714QB2z9WY/s4gLfUiAMIUu/8lpnW/0kOQZAnQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -2033,10 +1973,6 @@ packages: resolution: {integrity: sha512-sVgTntCZCOV7mOpHzj6V14KOAoy4B9Ur9yHNRFZVgL2yD77TYRrJ0qwq+l7Im9fSjMCar6csjboqCvyAEpfV1g==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@angular-devkit/schematics@21.2.4': - resolution: {integrity: sha512-LkmpNrjcbGmm61YzDzli3m7VYv2h/8mLmXPZBtAmjXjpJWgbsls7KOTF3cjln7Pd4eYmF/dXMR0oThENwga5iA==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@angular-devkit/schematics@21.2.7': resolution: {integrity: sha512-LYAjjUI1qM7pR/sd0yYt8OLA6ljOOXjcfzV40I5XQNmhAxq90YYS5xwMcixOmWX+z5zvCYGvPXvJGWjzio6SUg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -2091,52 +2027,6 @@ packages: peerDependencies: '@angular/core': 21.2.8 - '@angular/build@21.2.4': - resolution: {integrity: sha512-H/3qBfITqCipFFntUj961YbjlJsXjFI1Td7KZWF+WbcPVW11AgS2+CouE5aqdt4Gx7QZOM5HiBe+f7Ub1dgxAg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - '@angular/compiler': ^21.0.0 - '@angular/compiler-cli': ^21.0.0 - '@angular/core': ^21.0.0 - '@angular/localize': ^21.0.0 - '@angular/platform-browser': ^21.0.0 - '@angular/platform-server': ^21.0.0 - '@angular/service-worker': ^21.0.0 - '@angular/ssr': ^21.2.4 - karma: ^6.4.0 - less: ^4.2.0 - ng-packagr: ^21.0.0 - postcss: ^8.4.0 - tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0 - tslib: ^2.3.0 - typescript: '>=5.9 <6.0' - vitest: ^4.0.8 - peerDependenciesMeta: - '@angular/core': - optional: true - '@angular/localize': - optional: true - '@angular/platform-browser': - optional: true - '@angular/platform-server': - optional: true - '@angular/service-worker': - optional: true - '@angular/ssr': - optional: true - karma: - optional: true - less: - optional: true - ng-packagr: - optional: true - postcss: - optional: true - tailwindcss: - optional: true - vitest: - optional: true - '@angular/build@21.2.7': resolution: {integrity: sha512-FpSkFqpsJtdN1cROekVYkmeV1QepdP+/d7fyYQEuNmlOlyqXSDh9qJmy4iL9VNbAU0rk+vFCtYM86rO7Pt9cSw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -2183,16 +2073,16 @@ packages: vitest: optional: true - '@angular/cdk@21.2.4': - resolution: {integrity: sha512-Zv+q9Z/wVWTt0ckuO3gnU7PbpCLTr1tKPEsofLGGzDufA5/85aBLn2UiLcjlY6wQ+V3EMqANhGo/8XJgvBEYFA==} + '@angular/cdk@21.2.6': + resolution: {integrity: sha512-1PBzFf+um/VZ1dFF6cT72Zsq+9C/ZWF9m5dP0uHJgo4psX3yMBoZlZu5YomBiAQ/ePSkqCuryv1vrelK+yd3Mw==} peerDependencies: '@angular/common': ^21.0.0 || ^22.0.0 '@angular/core': ^21.0.0 || ^22.0.0 '@angular/platform-browser': ^21.0.0 || ^22.0.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/cli@21.2.4': - resolution: {integrity: sha512-s2hm3Zu+U1or2CZtHHEPsUbpnkBiOsZlF959H2TMgCKWGlUXzxDm8Hi1Ifvk1+cRm6XFi2b7wjuj91XuBoimtw==} + '@angular/cli@21.2.7': + resolution: {integrity: sha512-N/wj8fFRB718efIFYpwnYfy+MecZREZXsUNMTVndFLH6T0jCheb9PVetR6jsyZp6h46USNPOmJYJ/9255lME+Q==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true @@ -2244,10 +2134,10 @@ packages: resolution: {integrity: sha512-Eyvoo3ttFhRAAEmPcLkLfbEtTLfKnAxRAbxNoA9eDXozskkgaDDBUAHd9qOC1A6cnVda5nP4aNeUa+I81Q2maw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - '@angular/material@21.2.4': - resolution: {integrity: sha512-YzkPjgZezdsDeAhSm3zix2h+ohApwaRUMG8ea/75XR1eSkT1n3N7qZaHC8HDkhPYApk8a951RDxsTiiAidnGqg==} + '@angular/material@21.2.6': + resolution: {integrity: sha512-V4hblb5ekgXb5x+UXKRs2yiB0hZUkUJbYwGseMglkCeWQlLM4u6amlsUzP4uOwIWFOkM/ZYl9qz4YGZnvMAyjw==} peerDependencies: - '@angular/cdk': 21.2.4 + '@angular/cdk': 21.2.6 '@angular/common': ^21.0.0 || ^22.0.0 '@angular/core': ^21.0.0 || ^22.0.0 '@angular/forms': ^21.0.0 || ^22.0.0 @@ -2293,8 +2183,8 @@ packages: '@angular/platform-browser': 21.2.8 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ssr@21.2.4': - resolution: {integrity: sha512-KFr8RkgRgagRiQ08cTwgxxl4ervMSVwq6Fbhj5H95NAxLzcZVV4ooMOzdJ8tYQ+fhQn7if5K5Y1TUz8ANBmqSg==} + '@angular/ssr@21.2.7': + resolution: {integrity: sha512-NhrkeD32s3H/jU9yJLqDy2JBNNatFyzqNkwieJw0waEvBRNbxXlcg5+g6rilcg2nHlH5hyzMQUzs7ZwZH9wCqg==} peerDependencies: '@angular/common': ^21.0.0 '@angular/core': ^21.0.0 @@ -3041,10 +2931,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime-corejs3@7.29.2': - resolution: {integrity: sha512-Lc94FOD5+0aXhdb0Tdg3RUtqT6yWbI/BbFWvlaSJ3gAb9Ks+99nHRDKADVqC37er4eCB0fHyWT+y+K3QOvJKbw==} - engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.6': resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} engines: {node: '>=6.9.0'} @@ -3598,12 +3484,12 @@ packages: search-insights: optional: true - '@docusaurus/babel@3.9.2': - resolution: {integrity: sha512-GEANdi/SgER+L7Japs25YiGil/AUDnFFHaCGPBbundxoWtCkA2lmy7/tFmgED4y1htAy6Oi4wkJEQdGssnw9MA==} + '@docusaurus/babel@3.10.0': + resolution: {integrity: sha512-mqCJhCZNZUDg0zgDEaPTM4DnRsisa24HdqTy/qn/MQlbwhTb4WVaZg6ZyX6yIVKqTz8fS1hBMgM+98z+BeJJDg==} engines: {node: '>=20.0'} - '@docusaurus/bundler@3.9.2': - resolution: {integrity: sha512-ZOVi6GYgTcsZcUzjblpzk3wH1Fya2VNpd5jtHoCCFcJlMQ1EYXZetfAnRHLcyiFeBABaI1ltTYbOBtH/gahGVA==} + '@docusaurus/bundler@3.10.0': + resolution: {integrity: sha512-iONUGZGgp+lAkw/cJZH6irONcF4p8+278IsdRlq8lYhxGjkoNUs0w7F4gVXBYSNChq5KG5/JleTSsdJySShxow==} engines: {node: '>=20.0'} peerDependencies: '@docusaurus/faster': '*' @@ -3611,112 +3497,116 @@ packages: '@docusaurus/faster': optional: true - '@docusaurus/core@3.9.2': - resolution: {integrity: sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw==} + '@docusaurus/core@3.10.0': + resolution: {integrity: sha512-mgLdQsO8xppnQZc3LPi+Mf+PkPeyxJeIx11AXAq/14fsaMefInQiMEZUUmrc7J+956G/f7MwE7tn8KZgi3iRcA==} engines: {node: '>=20.0'} hasBin: true peerDependencies: + '@docusaurus/faster': '*' '@mdx-js/react': ^3.0.0 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@docusaurus/faster': + optional: true - '@docusaurus/cssnano-preset@3.9.2': - resolution: {integrity: sha512-8gBKup94aGttRduABsj7bpPFTX7kbwu+xh3K9NMCF5K4bWBqTFYW+REKHF6iBVDHRJ4grZdIPbvkiHd/XNKRMQ==} + '@docusaurus/cssnano-preset@3.10.0': + resolution: {integrity: sha512-qzSshTO1DB3TYW+dPUal5KHM7XPc5YQfzF3Kdb2NDACJUyGbNcFtw3tGkCJlYwhNCRKbZcmwraKUS1i5dcHdGg==} engines: {node: '>=20.0'} - '@docusaurus/faster@3.9.2': - resolution: {integrity: sha512-DEVIwhbrZZ4ir31X+qQNEQqDWkgCJUV6kiPPAd2MGTY8n5/n0c4B8qA5k1ipF2izwH00JEf0h6Daaut71zzkyw==} + '@docusaurus/faster@3.10.0': + resolution: {integrity: sha512-GNPtVH14ISjHfSwnHu3KiFGf86ICmJSQDeSv/QaanpBgiZGOtgZaslnC5q8WiguxM1EVkwcGxPuD8BXF4eggKw==} engines: {node: '>=20.0'} peerDependencies: '@docusaurus/types': '*' - '@docusaurus/logger@3.9.2': - resolution: {integrity: sha512-/SVCc57ByARzGSU60c50rMyQlBuMIJCjcsJlkphxY6B0GV4UH3tcA1994N8fFfbJ9kX3jIBe/xg3XP5qBtGDbA==} + '@docusaurus/logger@3.10.0': + resolution: {integrity: sha512-9jrZzFuBH1LDRlZ7cznAhCLmAZ3HSDqgwdrSSZdGHq9SPUOQgXXu8mnxe2ZRB9NS1PCpMTIOVUqDtZPIhMafZg==} engines: {node: '>=20.0'} - '@docusaurus/mdx-loader@3.9.2': - resolution: {integrity: sha512-wiYoGwF9gdd6rev62xDU8AAM8JuLI/hlwOtCzMmYcspEkzecKrP8J8X+KpYnTlACBUUtXNJpSoCwFWJhLRevzQ==} + '@docusaurus/mdx-loader@3.10.0': + resolution: {integrity: sha512-mQQV97080AH4PYNs087l202NMDqRopZA4mg5W76ZZyTFrmWhJ3mHg+8A+drJVENxw5/Q+wHMHLgsx+9z1nEs0A==} engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/module-type-aliases@3.9.2': - resolution: {integrity: sha512-8qVe2QA9hVLzvnxP46ysuofJUIc/yYQ82tvA/rBTrnpXtCjNSFLxEZfd5U8cYZuJIVlkPxamsIgwd5tGZXfvew==} + '@docusaurus/module-type-aliases@3.10.0': + resolution: {integrity: sha512-/1O0Zg8w3DFrYX/I6Fbss7OJrtZw1QoyjDhegiFNHVi9A9Y0gQ3jUAytVxF6ywpAWpLyLxch8nN8H/V3XfzdJQ==} peerDependencies: react: '*' react-dom: '*' - '@docusaurus/plugin-content-blog@3.9.2': - resolution: {integrity: sha512-3I2HXy3L1QcjLJLGAoTvoBnpOwa6DPUa3Q0dMK19UTY9mhPkKQg/DYhAGTiBUKcTR0f08iw7kLPqOhIgdV3eVQ==} + '@docusaurus/plugin-content-blog@3.10.0': + resolution: {integrity: sha512-RuTz68DhB7CL96QO5UsFbciD7GPYq6QV+YMfF9V0+N4ZgLhJIBgpVAr8GobrKF6NRe5cyWWETU5z5T834piG9g==} engines: {node: '>=20.0'} peerDependencies: '@docusaurus/plugin-content-docs': '*' react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-content-docs@3.9.2': - resolution: {integrity: sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==} + '@docusaurus/plugin-content-docs@3.10.0': + resolution: {integrity: sha512-9BjHhf15ct8Z7TThTC0xRndKDVvMKmVsAGAN7W9FpNRzfMdScOGcXtLmcCWtJGvAezjOJIm6CxOYCy3Io5+RnQ==} engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-content-pages@3.9.2': - resolution: {integrity: sha512-s4849w/p4noXUrGpPUF0BPqIAfdAe76BLaRGAGKZ1gTDNiGxGcpsLcwJ9OTi1/V8A+AzvsmI9pkjie2zjIQZKA==} + '@docusaurus/plugin-content-pages@3.10.0': + resolution: {integrity: sha512-5amX8kEJI+nIGtuLVjYk59Y5utEJ3CHETFOPEE4cooIRLA4xM4iBsA6zFgu4ljcopeYwvBzFEWf5g2I6Yb9SkA==} engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-css-cascade-layers@3.9.2': - resolution: {integrity: sha512-w1s3+Ss+eOQbscGM4cfIFBlVg/QKxyYgj26k5AnakuHkKxH6004ZtuLe5awMBotIYF2bbGDoDhpgQ4r/kcj4rQ==} + '@docusaurus/plugin-css-cascade-layers@3.10.0': + resolution: {integrity: sha512-6q1vtt5FJcg5osgkHeM1euErECNqEZ5Z1j69yiNx2luEBIso+nxCkS9nqj8w+MK5X7rvKEToGhFfOFWncs51pQ==} engines: {node: '>=20.0'} - '@docusaurus/plugin-debug@3.9.2': - resolution: {integrity: sha512-j7a5hWuAFxyQAkilZwhsQ/b3T7FfHZ+0dub6j/GxKNFJp2h9qk/P1Bp7vrGASnvA9KNQBBL1ZXTe7jlh4VdPdA==} + '@docusaurus/plugin-debug@3.10.0': + resolution: {integrity: sha512-XcljKN+G+nmmK69uQA1d9BlYU3ZftG3T3zpK8/7Hf/wrOlV7TA4Ampdrdwkg0jElKdKAoSnPhCO0/U3bQGsVQQ==} engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-google-analytics@3.9.2': - resolution: {integrity: sha512-mAwwQJ1Us9jL/lVjXtErXto4p4/iaLlweC54yDUK1a97WfkC6Z2k5/769JsFgwOwOP+n5mUQGACXOEQ0XDuVUw==} + '@docusaurus/plugin-google-analytics@3.10.0': + resolution: {integrity: sha512-hTEoodatpBZnUat5nFExbuTGA1lhWGy7vZGuTew5Q3QDtGKFpSJLYmZJhdTjvCFwv1+qQ67hgAVlKdJOB8TXow==} engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-google-gtag@3.9.2': - resolution: {integrity: sha512-YJ4lDCphabBtw19ooSlc1MnxtYGpjFV9rEdzjLsUnBCeis2djUyCozZaFhCg6NGEwOn7HDDyMh0yzcdRpnuIvA==} + '@docusaurus/plugin-google-gtag@3.10.0': + resolution: {integrity: sha512-iB/Zzjv/eelJRbdULZqzWCbgMgJ7ht4ONVjXtN3+BI/muil6S87gQ1OJyPwlXD+ELdKkitC7bWv5eJdYOZLhrQ==} engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-google-tag-manager@3.9.2': - resolution: {integrity: sha512-LJtIrkZN/tuHD8NqDAW1Tnw0ekOwRTfobWPsdO15YxcicBo2ykKF0/D6n0vVBfd3srwr9Z6rzrIWYrMzBGrvNw==} + '@docusaurus/plugin-google-tag-manager@3.10.0': + resolution: {integrity: sha512-FEjZxqKgLHa+Wez/EgKxRwvArNCWIScfyEQD95rot7jkxp6nonjI5XIbGfO/iYhM5Qinwe8aIEQHP2KZtpqVuA==} engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-sitemap@3.9.2': - resolution: {integrity: sha512-WLh7ymgDXjG8oPoM/T4/zUP7KcSuFYRZAUTl8vR6VzYkfc18GBM4xLhcT+AKOwun6kBivYKUJf+vlqYJkm+RHw==} + '@docusaurus/plugin-sitemap@3.10.0': + resolution: {integrity: sha512-DVTSLjB97hIjmayGnGcBfognCeI7ZuUKgEnU7Oz81JYqXtVg94mVTthDjq3QHTylYNeCUbkaW8VF0FDLcc8pPw==} engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-svgr@3.9.2': - resolution: {integrity: sha512-n+1DE+5b3Lnf27TgVU5jM1d4x5tUh2oW5LTsBxJX4PsAPV0JGcmI6p3yLYtEY0LRVEIJh+8RsdQmRE66wSV8mw==} + '@docusaurus/plugin-svgr@3.10.0': + resolution: {integrity: sha512-lNljBESaETZqVBMPqkrGchr+UPT1eZzEPLmJhz8I76BxbjqgsUnRvrq6lQJ9sYjgmgX52KB7kkgczqd2yzoswQ==} engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/preset-classic@3.9.2': - resolution: {integrity: sha512-IgyYO2Gvaigi21LuDIe+nvmN/dfGXAiMcV/murFqcpjnZc7jxFAxW+9LEjdPt61uZLxG4ByW/oUmX/DDK9t/8w==} + '@docusaurus/preset-classic@3.10.0': + resolution: {integrity: sha512-kw/Ye02Hc6xP1OdTswy8yxQEHg0fdPpyWAQRxr5b2x3h7LlG2Zgbb5BDFROnXDDMpUxB7YejlocJIE5HIEfpNA==} engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 @@ -3727,51 +3617,51 @@ packages: peerDependencies: react: '*' - '@docusaurus/theme-classic@3.9.2': - resolution: {integrity: sha512-IGUsArG5hhekXd7RDb11v94ycpJpFdJPkLnt10fFQWOVxAtq5/D7hT6lzc2fhyQKaaCE62qVajOMKL7OiAFAIA==} + '@docusaurus/theme-classic@3.10.0': + resolution: {integrity: sha512-9msCAsRdN+UG+RwPwCFb0uKy4tGoPh5YfBozXeGUtIeAgsMdn6f3G/oY861luZ3t8S2ET8S9Y/1GnpJAGWytww==} engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/theme-common@3.9.2': - resolution: {integrity: sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag==} + '@docusaurus/theme-common@3.10.0': + resolution: {integrity: sha512-Dkp1YXKn16ByCJAdIjbDIOpVb4Z66MsVD694/ilX1vAAHaVEMrVsf/NPd9VgreyFx08rJ9GqV1MtzsbTcU73Kg==} engines: {node: '>=20.0'} peerDependencies: '@docusaurus/plugin-content-docs': '*' react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/theme-search-algolia@3.9.2': - resolution: {integrity: sha512-GBDSFNwjnh5/LdkxCKQHkgO2pIMX1447BxYUBG2wBiajS21uj64a+gH/qlbQjDLxmGrbrllBrtJkUHxIsiwRnw==} + '@docusaurus/theme-search-algolia@3.10.0': + resolution: {integrity: sha512-f5FPKI08e3JRG63vR/o4qeuUVHUHzFzM0nnF+AkB67soAZgNsKJRf2qmUZvlQkGwlV+QFkKe4D0ANMh1jToU3g==} engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/theme-translations@3.9.2': - resolution: {integrity: sha512-vIryvpP18ON9T9rjgMRFLr2xJVDpw1rtagEGf8Ccce4CkTrvM/fRB8N2nyWYOW5u3DdjkwKw5fBa+3tbn9P4PA==} + '@docusaurus/theme-translations@3.10.0': + resolution: {integrity: sha512-L9IbFLwTc5+XdgH45iQYufLn0SVZd6BUNelDbKIFlH+E4hhjuj/XHWAFMX/w2K59rfy8wak9McOaei7BSUfRPA==} engines: {node: '>=20.0'} - '@docusaurus/tsconfig@3.9.2': - resolution: {integrity: sha512-j6/Fp4Rlpxsc632cnRnl5HpOWeb6ZKssDj6/XzzAzVGXXfm9Eptx3rxCC+fDzySn9fHTS+CWJjPineCR1bB5WQ==} + '@docusaurus/tsconfig@3.10.0': + resolution: {integrity: sha512-TXdC3WXuPrdQAexLvjUJfnYf3YKEgEqAs5nK0Q88pRBCW7t7oN4ILvWYb3A5Z1wlSXyXGWW/mCUmLEhdWsjnDQ==} - '@docusaurus/types@3.9.2': - resolution: {integrity: sha512-Ux1JUNswg+EfUEmajJjyhIohKceitY/yzjRUpu04WXgvVz+fbhVC0p+R0JhvEu4ytw8zIAys2hrdpQPBHRIa8Q==} + '@docusaurus/types@3.10.0': + resolution: {integrity: sha512-F0dOt3FOoO20rRaFK7whGFQZ3ggyrWEdQc/c8/UiRuzhtg4y1w9FspXH5zpCT07uMnJKBPGh+qNazbNlCQqvSw==} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/utils-common@3.9.2': - resolution: {integrity: sha512-I53UC1QctruA6SWLvbjbhCpAw7+X7PePoe5pYcwTOEXD/PxeP8LnECAhTHHwWCblyUX5bMi4QLRkxvyZ+IT8Aw==} + '@docusaurus/utils-common@3.10.0': + resolution: {integrity: sha512-JyL7sb9QVDgYvudIS81Dv0lsWm7le0vGZSDwsztxWam1SPBqrnkvBy9UYL/amh6pbybkyYTd3CMTkO24oMlCSw==} engines: {node: '>=20.0'} - '@docusaurus/utils-validation@3.9.2': - resolution: {integrity: sha512-l7yk3X5VnNmATbwijJkexdhulNsQaNDwoagiwujXoxFbWLcxHQqNQ+c/IAlzrfMMOfa/8xSBZ7KEKDesE/2J7A==} + '@docusaurus/utils-validation@3.10.0': + resolution: {integrity: sha512-c+6n2+ZPOJtWWc8Bb/EYdpSDfjYEScdCu9fB/SNjOmSCf1IdVnGf2T53o0tsz0gDRtCL90tifTL0JE/oMuP1Mw==} engines: {node: '>=20.0'} - '@docusaurus/utils@3.9.2': - resolution: {integrity: sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ==} + '@docusaurus/utils@3.10.0': + resolution: {integrity: sha512-T3B0WTigsIthe0D4LQa2k+7bJY+c3WS+Wq2JhcznOSpn1lSN64yNtHQXboCj3QnUs1EuAZszQG1SHKu5w5ZrlA==} engines: {node: '>=20.0'} '@egjs/hammerjs@2.0.17': @@ -4861,6 +4751,9 @@ packages: '@module-federation/error-codes@0.21.6': resolution: {integrity: sha512-MLJUCQ05KnoVl8xd6xs9a5g2/8U+eWmVxg7xiBMeR0+7OjdWUbHwcwgVFatRIwSZvFgKHfWEiI7wsU1q1XbTRQ==} + '@module-federation/error-codes@0.22.0': + resolution: {integrity: sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==} + '@module-federation/error-codes@2.3.1': resolution: {integrity: sha512-s3IjT2OYrSBNNmxdTmmrWBpsFfeNszdL6BSqjXLHb1CgXWUYLNXpb05IopnzMhRLcur6MTGuKR0ZSjJbmvQBbg==} @@ -4898,24 +4791,36 @@ packages: '@module-federation/runtime-core@0.21.6': resolution: {integrity: sha512-5Hd1Y5qp5lU/aTiK66lidMlM/4ji2gr3EXAtJdreJzkY+bKcI5+21GRcliZ4RAkICmvdxQU5PHPL71XmNc7Lsw==} + '@module-federation/runtime-core@0.22.0': + resolution: {integrity: sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==} + '@module-federation/runtime-core@2.3.1': resolution: {integrity: sha512-E0WgaCn32AWzD0n6SCH7VQ+kxk46XyX432PQWARgyQzCX/wyLkaT+We3A18RVNUevRT85YHLrrVIhMKJJVHgjA==} '@module-federation/runtime-tools@0.21.6': resolution: {integrity: sha512-fnP+ZOZTFeBGiTAnxve+axGmiYn2D60h86nUISXjXClK3LUY1krUfPgf6MaD4YDJ4i51OGXZWPekeMe16pkd8Q==} + '@module-federation/runtime-tools@0.22.0': + resolution: {integrity: sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==} + '@module-federation/runtime-tools@2.3.1': resolution: {integrity: sha512-JrTKnNxIglnwrycPHUz9vARHLWqdecgFJxhmu8991z5CjktHc5JIelCbQS5Ur2lABjuwBdlyw8pH2xI3EJpbOg==} '@module-federation/runtime@0.21.6': resolution: {integrity: sha512-+caXwaQqwTNh+CQqyb4mZmXq7iEemRDrTZQGD+zyeH454JAYnJ3s/3oDFizdH6245pk+NiqDyOOkHzzFQorKhQ==} + '@module-federation/runtime@0.22.0': + resolution: {integrity: sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==} + '@module-federation/runtime@2.3.1': resolution: {integrity: sha512-NiKelHKzOf1Vz8oqcxC/XRUAW224O6lKj9xD0cfp5Bp343iu6s58RlLvX1ypF+UpCl3jA4JM8npGax/3jjyifw==} '@module-federation/sdk@0.21.6': resolution: {integrity: sha512-x6hARETb8iqHVhEsQBysuWpznNZViUh84qV2yE7AD+g7uIzHKiYdoWqj10posbo5XKf/147qgWDzKZoKoEP2dw==} + '@module-federation/sdk@0.22.0': + resolution: {integrity: sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==} + '@module-federation/sdk@2.3.1': resolution: {integrity: sha512-lgWxFZyLRKDXWRGlV6ROjFJ6MRaJTxs0bBnS6hS9ONfr/0TkeW4JzDbsfzrB8g4p6IgSKB+wQ9XfibJCGBI5OQ==} peerDependencies: @@ -4930,6 +4835,9 @@ packages: '@module-federation/webpack-bundler-runtime@0.21.6': resolution: {integrity: sha512-7zIp3LrcWbhGuFDTUMLJ2FJvcwjlddqhWGxi/MW3ur1a+HaO8v5tF2nl+vElKmbG1DFLU/52l3PElVcWf/YcsQ==} + '@module-federation/webpack-bundler-runtime@0.22.0': + resolution: {integrity: sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==} + '@module-federation/webpack-bundler-runtime@2.3.1': resolution: {integrity: sha512-fnsMncVdBYv7a1gN5ElNK1uA9dmGUgaNqcoNiv9xRtpxFYswchl1kbgxPTliCb8U7quihdWZos7P2lvpYeVRwg==} @@ -5099,14 +5007,6 @@ packages: resolution: {integrity: sha512-yD20EizHJDQxajJ66Vo8RTwLwR2jMNVxufPG8MHd2AScX8jW4z0VPnnJHArq2GYPFTFZRHmiAhDrXr5m8zof6w==} engines: {node: ^18.14.0 || >=20} - '@ngtools/webpack@21.2.4': - resolution: {integrity: sha512-O+OzKssJ6t7Dm9lrfoWpZSLp0Q1+OUeyYT8hXDtLofyyRaGc2C4s4R11cYlMkOV/2C2sdQtcdFVhWPergLGwGw==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - '@angular/compiler-cli': ^21.0.0 - typescript: '>=5.9 <6.0' - webpack: ^5.54.0 - '@ngtools/webpack@21.2.7': resolution: {integrity: sha512-Z4gjCaJbO16VUO8I2QjRNT87uRYxjTKSSImDhzgVgLpV2/stlv/akbLU8dJYa7pK7eIYb/tkNRxGn/AtCiViUQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -5529,184 +5429,184 @@ packages: '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} - '@oxc-angular/binding-darwin-arm64@0.0.22': - resolution: {integrity: sha512-KLojTxMXDiUau/YBQGnfT+qTtZEJUTWv68FAT+FAq09anA5ehiUOq4Vibng+DNjRUVs71cGKN75tWj1UCvsHBQ==} + '@oxc-angular/binding-darwin-arm64@0.0.23': + resolution: {integrity: sha512-eBH8nURyGuUdeLBwfkTk4eGTiHpuZ8RtyttWLtmgVgGYAhFsFlFcuZDWSNX9wASkbDPeCyTfAHLqWr2VwWqeOw==} cpu: [arm64] os: [darwin] - '@oxc-angular/binding-darwin-x64@0.0.22': - resolution: {integrity: sha512-yPfC1A9WiG7p0/zXrYU0inTGlhE2pJIf4+Nhdbh8ZoQzjXIZM5Eo+55i0cxgZdreY/FcJaP1chY/R5m3f/pXJw==} + '@oxc-angular/binding-darwin-x64@0.0.23': + resolution: {integrity: sha512-9HSLmjGxVW6HRf7RBrowFH0zDSoxVAUoPSB1kYq/aB6Egatj4oVFuURuOK1lX8+w1eVV+8uij21agRbo3xUEKA==} cpu: [x64] os: [darwin] - '@oxc-angular/binding-linux-arm64-gnu@0.0.22': - resolution: {integrity: sha512-I2hy2CMir80iIzXlPXtqCD7P5UlmPZbvheM998upIw3OoKJ2sNt6tmlEGOyXH/4O5eNlbD8fEUqDQ3jCwEZmXg==} + '@oxc-angular/binding-linux-arm64-gnu@0.0.23': + resolution: {integrity: sha512-R32vwrEQtwjoXQH7AbQxSC8ytjerBwxQJGmBcwrGFl5+g38eZkViqkU+azNIqHcgQdZtCYVs8i6sHfyf0pTcww==} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-angular/binding-linux-arm64-musl@0.0.22': - resolution: {integrity: sha512-n87i6xLNHReuYkaYfQgxAWfALG+VkV7IZ3q4gWeP/Q5cLFTR8F4BksONbQTPCImgJw2THhC/sXOVrkaXtKjQdA==} + '@oxc-angular/binding-linux-arm64-musl@0.0.23': + resolution: {integrity: sha512-vZwG/853L+FCn7K5vtPt7ItVxt2fBkEOH9LLF26fWnnBZTU1HPhDwkzg/+ufwkIxw2Aj7M9JLKthJnVc9ZYiyA==} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-angular/binding-linux-x64-gnu@0.0.22': - resolution: {integrity: sha512-QNmDBnBc2raMww33iPeRiGnx403vD3vSCxrSvw+SLCSBaXNmVJxALsGTqxm4yIBGZapgmo+lFeJ1u2Heohdr6A==} + '@oxc-angular/binding-linux-x64-gnu@0.0.23': + resolution: {integrity: sha512-TvgyztasIS8br5mjL7eCp44WBHtlJjanNCQPSepEbKnQ8P4TRbzlGytWj4u2Yd4sAsDMCE0FtyG2b7p2r3GdAA==} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-angular/binding-linux-x64-musl@0.0.22': - resolution: {integrity: sha512-qrn5zJob1OoZouKLJNKHj1SzbEYpjmY3ugWGPQHUPqcSna0RpQiZ6LirFFa1PWWQlKprgXX643ckdXKUuxrR7Q==} + '@oxc-angular/binding-linux-x64-musl@0.0.23': + resolution: {integrity: sha512-53vOREyI5zLFKl50zXNJ8QfHJCwEMgAV1HVY0YI+eXRtx9Y7rWuXoieB9/4a90Lo/VpLGYh1NyDUL30saZ5BAg==} cpu: [x64] os: [linux] libc: [musl] - '@oxc-angular/binding-win32-arm64-msvc@0.0.22': - resolution: {integrity: sha512-DKYNf1n/EF6IxY86YMPqey6SpM/CWEbwWzvb+f0isX2aH7nn9+k1H8gckMvcHnVwm2Wzjo7EaWwdIY2qkxJz6A==} + '@oxc-angular/binding-win32-arm64-msvc@0.0.23': + resolution: {integrity: sha512-0WMBL5433MR/kOIpljfjfhqzuYpbXXDgM93N4FcFMZHZ64RfBIftNibQ1NWWvUFErYr39dQ6Oo9sJH3AL382iA==} cpu: [arm64] os: [win32] - '@oxc-angular/binding-win32-x64-msvc@0.0.22': - resolution: {integrity: sha512-9XOjJazAVEtXmzpBoYFipciD1yaq1bQIdeOOnQx5mGrI59HMjjRkY/yjlDqW3piTRHgEIf1Em8uTz4faTS0YzQ==} + '@oxc-angular/binding-win32-x64-msvc@0.0.23': + resolution: {integrity: sha512-EOV/WnBCDVmzG8euhHhLqVOCjGQfCfhU+JXfdalhE5FxbbHoHDlrJh6Nzck8X+9XK88a5ovUhyeEDFMJbbYetg==} cpu: [x64] os: [win32] - '@oxc-angular/vite@0.0.22': - resolution: {integrity: sha512-Sw8OcofXNl8GQwePAUiiGk/nz7SscSkeGxRwpPEUqdzHpeqV4H6njOGg3Hu50U/mxOsEsTPXR12zWw3tJGwsug==} + '@oxc-angular/vite@0.0.23': + resolution: {integrity: sha512-XaJnohMAZZN7yePhwwXxJqBDEHVPQb6li8GEPUFPBXbDR26q7B1f4PwtLJDfYIGEs4kgUwsdyGGTxMqmOYDTyA==} peerDependencies: vite: '>=8.0.0-beta.10' - '@oxc-parser/binding-android-arm-eabi@0.123.0': - resolution: {integrity: sha512-EHQ58z+6DbZWokMOKg5AB1KuwrXVgfbBLuuLFfzdc7bI5A4igvdvjKMhUv1VBV+0FABiUCOjNKUmMF7ugprwbQ==} + '@oxc-parser/binding-android-arm-eabi@0.124.0': + resolution: {integrity: sha512-+R9zCafSL8ovjokdPtorUp3sXrh8zQ2AC2L0ivXNvlLR0WS+5WdPkNVrnENq5UvzagM4Xgl0NPsJKz3Hv9+y8g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-parser/binding-android-arm64@0.123.0': - resolution: {integrity: sha512-BK1E0zqNoHf38nTHjnGZ+olKHSKNHh65pChjY06yhaWYP8X7yNDqhQDA4neMPRqnPBgpN4/OW1oSMrdJgDi2aw==} + '@oxc-parser/binding-android-arm64@0.124.0': + resolution: {integrity: sha512-ULHC/gVZ+nP4pd3kNNQTYaQ/e066BW/KuY5qUsvwkVWwOUQGDg+WpfyVOmQ4xfxoue6cMlkKkJ+ntdzfDXpNlg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-parser/binding-darwin-arm64@0.123.0': - resolution: {integrity: sha512-dkMPbtTbqU+cm+k4YGOBs4zAuq3Xu+wqjbGQvLAuVO7qHhNY4p5LBNudOmOoi0jxS8h1W6Jmlzv8MAKGpK+iDg==} + '@oxc-parser/binding-darwin-arm64@0.124.0': + resolution: {integrity: sha512-fGJ2hw7bnbUYn6UvTjp0m4WJ9zXz3cohgcwcgeo7gUZehpPNpvcVEVeIVHNmHnAuAw/ysf4YJR8DA1E+xCA4Lw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.123.0': - resolution: {integrity: sha512-85pic0rCd59DGdM69jI9xE/Snb2KtrfiU48QigjJXjzxUOenGvH4SAFIjFpO/2ZnI3Kz50D8pht4jKN3t2022Q==} + '@oxc-parser/binding-darwin-x64@0.124.0': + resolution: {integrity: sha512-j0+re9pgps5BH2Tk3fm59Hi3QuLP3C4KhqXi6A+wRHHHJWDFR8mc/KI9mBrfk2JRT+15doGo+zv1eN75/9DuOw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-parser/binding-freebsd-x64@0.123.0': - resolution: {integrity: sha512-mjEiW6z7JtaiHMK/8aJic1lfjkKpzFwK2XFNmm187BFbtDamjGVuKNr2TEyrFEYJyZc217wokR1wrYeZGBQo4Q==} + '@oxc-parser/binding-freebsd-x64@0.124.0': + resolution: {integrity: sha512-0k5mS0npnrhKy72UfF51lpOZ2ESoPWn6gdFw+RdeRWcokraDW1O2kSx3laQ+yk7cCEavQdJSpWCYS/GvBbUCXQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-parser/binding-linux-arm-gnueabihf@0.123.0': - resolution: {integrity: sha512-mYxigPtGt6SZfhNZBIJfuDM92cLo8XUW08WuKxzHvcmWu6xndLqwLp99Vg4uHke1AXicQEHU3Wri2X9bHF0Vlw==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.124.0': + resolution: {integrity: sha512-P/i4eguRWvAUfGdfhQYg1jpwYkyUV6D3gefIH7HhmRl1Ph6P4IqTIEVcyJr1i/3vr1V5OHU4wonH6/ue/Qzvrw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.123.0': - resolution: {integrity: sha512-ttWirDC9eUBn0R4Tzz3aeDaLrx9drPdNiLJ8MXeDBFxd6cwLfTIC27qjsdfGpn942tkVIZY3sjWAnvbwDDjX7g==} + '@oxc-parser/binding-linux-arm-musleabihf@0.124.0': + resolution: {integrity: sha512-/ameqFQH5fFP+66Atr8Ynv/2rYe4utcU7L4MoWS5JtrFLVO78g4qDLavyIlJxa6caSwYOvG/eO3c/DXqY5/6Rw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm64-gnu@0.123.0': - resolution: {integrity: sha512-apAHyoMNRYT+2G98Y14caZmsr5LD9PsWpGI7nXmSwK26LGiQneCU6HvHQ+d+AX+RJ5TTWZtEb2RD7OLqAC0cYQ==} + '@oxc-parser/binding-linux-arm64-gnu@0.124.0': + resolution: {integrity: sha512-gNeyEcXTtfrRCbj2EfxWU85Fs0wIX3p44Y3twnvuMfkWlLrb9M1Z25AYNSKjJM+fdAjeeQCjw0on47zFuBYwQw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-arm64-musl@0.123.0': - resolution: {integrity: sha512-3r99Qa4egjO/iXUBxTlN6Ddt1YkLifG6olzvj8gkoKEK2U/MOW7mQfXRyBmuoMgmZ7O4vk41gO3d21c6VcN3yQ==} + '@oxc-parser/binding-linux-arm64-musl@0.124.0': + resolution: {integrity: sha512-uvG7v4Tz9S8/PVqY0SP0DLHxo4hZGe+Pv2tGVnwcsjKCCUPjplbrFVvDzXq+kOaEoUkiCY0Kt1hlZ6FDJ1LKNQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-ppc64-gnu@0.123.0': - resolution: {integrity: sha512-Hr/Z24kUE4pjJs346g80WDwjyJGrxiw6hExJuOiME/76ZFz68y5L11UzprRkW9FN4HxBB7tLZ/fytczV2fEsiA==} + '@oxc-parser/binding-linux-ppc64-gnu@0.124.0': + resolution: {integrity: sha512-t7KZaaUhfp2au0MRpoENEFqwLKYDdptEry6V7pTAVdPEcFG4P6ii8yeGU9m6p5vb+b8WEKmdpGMNXBEYy7iJdw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-gnu@0.123.0': - resolution: {integrity: sha512-sxjbhs+8WXeuoLnZ2rBmQ96gPdq3SCmz24reIltsKLUt1EDMgdaQsr7RqwBphw3QAImkMtlPQfAWDWwZyo0xDg==} + '@oxc-parser/binding-linux-riscv64-gnu@0.124.0': + resolution: {integrity: sha512-eurGGaxHZiIQ+fBSageS8TAkRqZgdOiBeqNrWAqAPup9hXBTmQ0WcBjwsLElf+3jvDL9NhnX0dOgOqPfsjSjdg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-musl@0.123.0': - resolution: {integrity: sha512-d6xHHhqldA/W+VC7v8uHs24zM69Ad3HnHQ45h+uuBhCsbZx3d0E0wL2K3uJ5mYKTR6UPMFk9VMXcHWwvg1PRZQ==} + '@oxc-parser/binding-linux-riscv64-musl@0.124.0': + resolution: {integrity: sha512-d1V7/ll1i/LhqE/gZy6Wbz6evlk0egh2XKkwMI3epiojtbtUwQSLIER0Y3yDBBocPuWOjJdvmjtEmPTTLXje/w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-s390x-gnu@0.123.0': - resolution: {integrity: sha512-+di9A5wJQlv0VodyhADjJ2rC4geyHY+uhJDl3TFjMgYhhlgLZchi9uHD5mfiUEDWHt1x7/eU2u1ge3LLazZmFw==} + '@oxc-parser/binding-linux-s390x-gnu@0.124.0': + resolution: {integrity: sha512-w1+cBvriUteOpox6ATqCFVkpGL47PFdcfCPGmgUZbd78Fw44U0gQkc+kVGvAOTvGrptMYgwomD1c6OTVvkrpGg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-gnu@0.123.0': - resolution: {integrity: sha512-sh7pw2g/u6LE1TaRRQsV9Kv9+1y+CywaaNwWWP+3bnEPk/L692oTG0hmEviUlawI8v3OGC+AhbjtAD+HXWQAkg==} + '@oxc-parser/binding-linux-x64-gnu@0.124.0': + resolution: {integrity: sha512-RRB1evQiXRtMCsQQiAh9U0H3HzguLpE0ytfStuhRgmOj7tqUCOVxkHsvM9geZjAax6NqVRj7VXx32qjjkZPsBw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-musl@0.123.0': - resolution: {integrity: sha512-S+LoD8PiJ639JwIqK1knIeqAyYkeCbLHtAgfapszKX0yVCaYP+aer8dJxL25de9qcDjvYWVrYCkuDZzHmOl2Xw==} + '@oxc-parser/binding-linux-x64-musl@0.124.0': + resolution: {integrity: sha512-asVYN0qmSHlCU8H9Q47SmeJ/Z5EG4IWCC+QGxkfFboI5qh15aLlJnHmnrV61MwQRPXGnVC/sC3qKhrUyqGxUqw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-parser/binding-openharmony-arm64@0.123.0': - resolution: {integrity: sha512-/65vryK11q1I+k+7ukDlwZOxUFCLYsoZBZPGZHyet5bIP5e3D8mV3uCuvpWZ9Hoe6vUZFw/nAfCrX59MeuJPgw==} + '@oxc-parser/binding-openharmony-arm64@0.124.0': + resolution: {integrity: sha512-nhwuxm6B8pn9lzAzMUfa571L5hCXYwQo8C8cx5aGOuHWCzruR8gPJnRRXGBci+uGaIIQEZDyU/U6HDgrSp/JlQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-parser/binding-wasm32-wasi@0.123.0': - resolution: {integrity: sha512-y4OsMGQiAbZzj2Rq0LEfvhR48rQDvbvqsl/dPdn4tdf+z3H79nZuR+lQ/+KUGjD30vpVGem138sBWHFj9UR+Vg==} + '@oxc-parser/binding-wasm32-wasi@0.124.0': + resolution: {integrity: sha512-LWuq4Dl9tff7n+HjJcqoBjDlVCtruc0shgtdtGM+rTUIE9aFxHA/P+wCYR+aWMjN8m9vNaRME/sKXErmhmeKrA==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-parser/binding-win32-arm64-msvc@0.123.0': - resolution: {integrity: sha512-9lBqI6AXAkjYavkdpizNU3Q51uoVYfp9FJPx19hnCEdPku1jSgzSnvgmCvhCue0GziIvIvIdWgZ41wXQ3EOoBw==} + '@oxc-parser/binding-win32-arm64-msvc@0.124.0': + resolution: {integrity: sha512-aOh3Lf3AeH0dgzT4yBXcArFZ8VhqNXwZ/xlN0GqBtgVaGoHOOqL2YHlcVIgT+ghsXPVR2PTtYgBiQ1CNK7jp5A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-ia32-msvc@0.123.0': - resolution: {integrity: sha512-zJbqBHwSUB7CyvAONy9ewGtQwcQj+ylOhYGETvUPp3KIYx7lolj4Gayof7iA22SU5eMSjO5COL0c8wYhmn9agA==} + '@oxc-parser/binding-win32-ia32-msvc@0.124.0': + resolution: {integrity: sha512-sib5xC0nz/+SCpaETBuHBz4SXS02KuG5HtyOcHsO/SK5ZvLRGhOZx0elDKawjb6adFkD7dQCqpXUS25wY6ELKQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.123.0': - resolution: {integrity: sha512-q7RZvglQvGo3RX5ljtcGSabu2B2c0oDU/6xC3sBMhsV5KRo0PvyxLdordbEN31NTfuZu4Sgl86C76cAURZIHWA==} + '@oxc-parser/binding-win32-x64-msvc@0.124.0': + resolution: {integrity: sha512-UgojtjGUgZgAZQYt7SC6VO65OVdxEkRe2q+2vbHJO//18qw3Hrk6UvHGQKldsQKgbVcIBT/YBrt85YberiYIPQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-project/runtime@0.123.0': - resolution: {integrity: sha512-wRf0z8saz9tHLcK3YeTeBmwISrpy4bBimvKxUmryiIhbt+ZJb0nwwJNL3D8xpeWbNfZlGSlzRBZbfcbApIGZJw==} + '@oxc-project/runtime@0.124.0': + resolution: {integrity: sha512-sSg6n37J3w3mM4odFvRqzQENf6+qxKnvStr/gU0FgRRg1VE/4MqryLd9PJmE0a7K5xlDfbrctBtSagaFH6ij9Q==} engines: {node: ^20.19.0 || >=22.12.0} '@oxc-project/types@0.113.0': @@ -5715,9 +5615,6 @@ packages: '@oxc-project/types@0.122.0': resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} - '@oxc-project/types@0.123.0': - resolution: {integrity: sha512-YtECP/y8Mj1lSHiUWGSRzy/C6teUKlS87dEfuVKT09LgQbUsBW1rNg+MiJ4buGu3yuADV60gbIvo9/HplA56Ew==} - '@oxc-project/types@0.124.0': resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==} @@ -5829,160 +5726,160 @@ packages: cpu: [x64] os: [win32] - '@oxc-transform/binding-android-arm-eabi@0.123.0': - resolution: {integrity: sha512-glB9LSiKsRmhb8yuBcbaCByx+JQ/KbAZe9U5+iUuLuLaRr7llg/saPybaDiiEaz3IcVxnodKgsA4IxUnPV3+fw==} + '@oxc-transform/binding-android-arm-eabi@0.124.0': + resolution: {integrity: sha512-A7r8E94VSRnWlsquGXaW2rmpVcruNOTE4a/7+NCVOtlRUlbmd37bOfv0T47MLIN378uES7yldftCwcVMBG39ig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-transform/binding-android-arm64@0.123.0': - resolution: {integrity: sha512-qge60UoJalkq8ftU9vHyq5Xu+kDtPF8sSSqQavzNWURGFLtXKyuxSl+7ovTurvUAwgVkaHcvEZsXWip71tKlqg==} + '@oxc-transform/binding-android-arm64@0.124.0': + resolution: {integrity: sha512-vfxxGti1ihWIOjgJOhS6HKIDqp7rszhmbTTgi81otUbJZ/1OWAMcKQyBvKb80hZabdvxU+dxzjGXottW2K/LMw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-transform/binding-darwin-arm64@0.123.0': - resolution: {integrity: sha512-uJv6bgXTwVlJvmYmGjv/IeAPUn5MTUeU8Uf+nLEUpPW0QDP0g7ttZWEI+OjY9seHO0DQ5dNi0+wzcTCk+UmoJA==} + '@oxc-transform/binding-darwin-arm64@0.124.0': + resolution: {integrity: sha512-goa0sKt6dymRY9kUCA/EgXDJUQq0dj8Acedn7FkjV77RxYZjykexlAV+amM7FnuD3vGTiG5DfL3j4WKWFGnFKA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-transform/binding-darwin-x64@0.123.0': - resolution: {integrity: sha512-Bkm2zhQ10D9xI/ZyMErQi3GOWouYMR8SqI+yvBggLz/EE1moo0Hpm0qQTJYwpFsi+uO64tAu1asaNKxCmVpaFw==} + '@oxc-transform/binding-darwin-x64@0.124.0': + resolution: {integrity: sha512-fNzAFPbPPZDtoXlVwfXWaqp75bPdsNNqbCTnBSsT8qssQoo3Wy8H0fF1U+ltv/9z/UxkGwKow3X4LUaWiHacfw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-transform/binding-freebsd-x64@0.123.0': - resolution: {integrity: sha512-pEbYQN2OPHL6khErdZ6Q0XI+VriAz1TZglm9euj4qX2a30PobOyzebaHEZMpmiPTS82rB6kPcSjsBbjY4bXVaA==} + '@oxc-transform/binding-freebsd-x64@0.124.0': + resolution: {integrity: sha512-GxMoOttUJBXjTYrpj0S24dpDSuTqUScgNmNHN9ICIh5uN4pTQ/2DI+tp8LX5170fZuvU2dpkZvhJT7hNthqWhA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-transform/binding-linux-arm-gnueabihf@0.123.0': - resolution: {integrity: sha512-oEZS8HsrtHON4ph/a35ILBH4Nra5Y0uP3CsGOc7SUSftEt8GZ+Xr3lXj67ZXsEZiZbsw3cUte23YhUf09nfaFQ==} + '@oxc-transform/binding-linux-arm-gnueabihf@0.124.0': + resolution: {integrity: sha512-Tjhs7VKsFoyZ6+sYLJ4JeQuqxouTMTSdkxPeCPJuQ9TkAlA8Pz8JnlF3V0fxSLkQfz0lYSRvA6J9/RUO5r7+8Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform/binding-linux-arm-musleabihf@0.123.0': - resolution: {integrity: sha512-869HBeT1tXl6GsmxZJTET7Lbx6hW8XoM8pw6PyTQ82GjodFSlk6if4rWifYNrPOsgMw1/q4mwYJcX850eFPJow==} + '@oxc-transform/binding-linux-arm-musleabihf@0.124.0': + resolution: {integrity: sha512-3GFThaQKrokWlz5PxclCwuYmNJpiqJ8pECShmaUJ0ACQlzlvXmXLdWy7ImfygGeqKIWq0N7Ps/+fH4gIrsaVRg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform/binding-linux-arm64-gnu@0.123.0': - resolution: {integrity: sha512-4OUNnatZNNvMwnylsfr+IeaCByBKiXPk4wQFMUf0xS8cUnOdjOtb6qMQ94nWuPA9d+Ywu32qfY+N4Fdaf3sNRA==} + '@oxc-transform/binding-linux-arm64-gnu@0.124.0': + resolution: {integrity: sha512-dY4cbuDbKPEpbxRe85imTO7pRba83z/sAmcYPUtb6ZvOEI4cEY8h0nMI5YRmeZMBF5xXQ1a95fyiDf35f63keQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-arm64-musl@0.123.0': - resolution: {integrity: sha512-C54h8AoUpwzw3+Ge+Vv2YYuuVh7XwVB5Mi/KiwByPPS/WFoJpmkSPvtFeAazdYbo4iKEGLrRI8vt+gEib1lDMw==} + '@oxc-transform/binding-linux-arm64-musl@0.124.0': + resolution: {integrity: sha512-X5jBDOv7df39YNp9rq3oGo9SAWhtChJYxPnwHzm9FdvbQ6NmASxylipWXnKu6M025Dwpg/1bjiBbG9XuYhXBFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-transform/binding-linux-ppc64-gnu@0.123.0': - resolution: {integrity: sha512-X+obOgFjX/61UZ1Wm5ncNZYC43R3bV9eU7DdCAEO6VXubSXcwIjxaf3QrUvBDYPifrdWSy/OerzJbhI9TgHYPg==} + '@oxc-transform/binding-linux-ppc64-gnu@0.124.0': + resolution: {integrity: sha512-e4oc7gBUPnroe+dhTT+mOtXkXcWkSZZojd4xDpMKAhy6hpKUVBotnudoEPIR7HAOXRmktlgx5ab2zSnYR2kydA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-riscv64-gnu@0.123.0': - resolution: {integrity: sha512-EzerdFa2KvEzYHuzFp9W/KZaulI4OIKE8FIC0X21V757ljZKRfskIqtGAFX/CAvoIF3C2zNepDWFZlpcJ5nJ1g==} + '@oxc-transform/binding-linux-riscv64-gnu@0.124.0': + resolution: {integrity: sha512-t+WUSyPoq0kobE+AKVHOHQMdijjA8RxhDwYSVgPHAF5c4mPwkD9EtZj1FyBNtRYgRuPQq8dWHGnNZXyFouNJ5w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-riscv64-musl@0.123.0': - resolution: {integrity: sha512-WFh7tcPYqxo2YQXnIuQ/ZZ4uFHeR06tDEFD8qNl1egRrqTZskHvV/NBelOthfHmkizWiGJx8ZnvN69UrL3q12A==} + '@oxc-transform/binding-linux-riscv64-musl@0.124.0': + resolution: {integrity: sha512-jNApR8gnWbR2zYM+a04jve2xa7qi25zYYb7feTrpV98J+YJaiPVJhzoXHxnKQGKSj7oMt6n6YK1QQVG+LlVpjw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-transform/binding-linux-s390x-gnu@0.123.0': - resolution: {integrity: sha512-A5ahPjG/2Zg5/3RndWRSaKO/9uIirjYuv8OBWa+HBA1Im607dCceSfc9k1PCHt0MdjtsfiyArO+kk2TP5R0Ebg==} + '@oxc-transform/binding-linux-s390x-gnu@0.124.0': + resolution: {integrity: sha512-SxLmO/ycauLKadwP9dvRpt8qRKZKaQER1OnvC6eY8hKXiN0EF+pL5QaPIIje7PV8sieRrrOcrSeKFBv+C6t0Ug==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-x64-gnu@0.123.0': - resolution: {integrity: sha512-9g1rEynmIh0qkJWc/1Zbd1VRFzYkk6KcmwcCoq3hslgGBIJEvrjPlP7cQgAiCaTFCVjfoPYWAy+5xjf9sCNY1g==} + '@oxc-transform/binding-linux-x64-gnu@0.124.0': + resolution: {integrity: sha512-TsPm58U1lq3rzhxegdMiy7ej0M3xKIxm+IHfgOg/n8g95fGT9D0E1sswTRBlAQtkXPnVfuqW8Hxf8t/4fCjqzw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-x64-musl@0.123.0': - resolution: {integrity: sha512-/eoNDuGDfEjNVqmgDNkFlGmoo5MOnRxaO9IhwKyWoXXUn7tzA5C45op7Kv/Njb6BcGr4RN2KH7OjsEAqjMDmuA==} + '@oxc-transform/binding-linux-x64-musl@0.124.0': + resolution: {integrity: sha512-nRg8/cItmAlKZD+jE5YqwDdvZ0GkvJAMavBshm0awhDn5RURWE5317QwDOvR3bZviRInv62C3eYMZdk0O64zPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-transform/binding-openharmony-arm64@0.123.0': - resolution: {integrity: sha512-rGeHHsE/KZ7G/iEtSsQAk4HZ3Wl2v4oMgcOjSvlVJejl+5ttUcKAjxgW2j+c1zFREJVpCHEyspi3fFxJkdJ/Ww==} + '@oxc-transform/binding-openharmony-arm64@0.124.0': + resolution: {integrity: sha512-NBDXwqbaYvjRy0wslzP/2V4L59r930htq4merS3HHBKI994J36zPZF6732bw6CUfUnXObe0qfOWPMmH+8f3ktw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-transform/binding-wasm32-wasi@0.123.0': - resolution: {integrity: sha512-JMFXeeWvFDioW2gP9dgD6LDbPmCMCrXNwDWMAXcKDmZILx0rARt+z79GACKTBSyyKURkYGe3+wJj+oI3JKnvug==} + '@oxc-transform/binding-wasm32-wasi@0.124.0': + resolution: {integrity: sha512-iK+9DYYI/eqEWAMZ40b2ip5OiMv/BSyR0jCc5rLE1PAVUFyFHglxLv8sInZqFnkWpnlvlfTZy71GNDn6fq+xFQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-transform/binding-win32-arm64-msvc@0.123.0': - resolution: {integrity: sha512-hSQ7VokhPAO0NMrsRz+2Zh4fcxx28qFlX78/7jG/+tWZgiB/aEukadf3XPcYQ3ymqoL8SvDN3nQ7bNTHAiZSCg==} + '@oxc-transform/binding-win32-arm64-msvc@0.124.0': + resolution: {integrity: sha512-GffpZFW5mBAIxbFoNrGagNqloFU2gAM+wFEuzGsPu2CmcZqsbKzbf5ydU3sUlEt0kxXqW9IYsZhXsa2fnkzMpw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-transform/binding-win32-ia32-msvc@0.123.0': - resolution: {integrity: sha512-7bIydPGt68qdfPXYLzBHYUia8Wi0dP6g/8zmrXN1HfUugkdt4Kh121fmw4KH+kcIT1BTICDHcXU4bJ6k3QmSgg==} + '@oxc-transform/binding-win32-ia32-msvc@0.124.0': + resolution: {integrity: sha512-S+GHzB7y62H0tZIMRC5NIuB247xb5DYhnha/KcIBCCmcxl8rg9bJOez5Kyfd2yfda2LjqPdrx6GalZmhj2wJgg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-transform/binding-win32-x64-msvc@0.123.0': - resolution: {integrity: sha512-pVmtG6GGI3eZ5J4NP75rR5yA1EuwEq+94kBQipq1rZXsukj6ghNkd3OGgzOA+W/fQL3V9AlnY9BriqCT21eVQw==} + '@oxc-transform/binding-win32-x64-msvc@0.124.0': + resolution: {integrity: sha512-zRQMSYNrqUJfbAKOPhFFqo0aiAA850/ZVyrDIGbbbCaF499OwdK6Odt7TRsy97hgEW1w73gKO4KV6Y/HZV42Zg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxlint-tsgolint/darwin-arm64@0.19.0': - resolution: {integrity: sha512-FVOIp5Njte8Z6PpINz7sL5blqSro0pAL8VAHYQ+K5Xm4cOrPQ6DGIhH14oXnbRjzn8Kl69qjz8TPteyn8EqwsQ==} + '@oxlint-tsgolint/darwin-arm64@0.20.0': + resolution: {integrity: sha512-KKQcIHZHMxqpHUA1VXIbOG6chNCFkUWbQy6M+AFVtPKkA/3xAeJkJ3njoV66bfzwPHRcWQO+kcj5XqtbkjakoA==} cpu: [arm64] os: [darwin] - '@oxlint-tsgolint/darwin-x64@0.19.0': - resolution: {integrity: sha512-GakDTDACePvqOFq3N4oQCl8SyMMa7VBnqV0gDcXPuK50jdWCUqlxM9tgRJarjyIVvmDEJRGYOen+4uBtVwg4Aw==} + '@oxlint-tsgolint/darwin-x64@0.20.0': + resolution: {integrity: sha512-7HeVMuclGfG+NLZi2ybY0T4fMI7/XxO/208rJk+zEIloKkVnlh11Wd241JMGwgNFXn+MLJbOqOfojDb2Dt4L1g==} cpu: [x64] os: [darwin] - '@oxlint-tsgolint/linux-arm64@0.19.0': - resolution: {integrity: sha512-Ya0R7somo+KDhhkPtENJ9Q28Fost+aqA3MPe86pEqgmukHFc/KO65PgShOSbIFjZNptELEQvsWL8gDxYZWhH3w==} + '@oxlint-tsgolint/linux-arm64@0.20.0': + resolution: {integrity: sha512-zxhUwz+WSxE6oWlZLK2z2ps9yC6ebmgoYmjAl0Oa48+GqkZ56NVgo+wb8DURNv6xrggzHStQxqQxe3mK51HZag==} cpu: [arm64] os: [linux] - '@oxlint-tsgolint/linux-x64@0.19.0': - resolution: {integrity: sha512-yFH378jWc1k/oJmpk+TKpWbKvFieJJvsOHxVMSNFc+ukqs44ZSHVt4HFfAhXAt/bzVK2f7EIDTGp8Hm1OjoJ6Q==} + '@oxlint-tsgolint/linux-x64@0.20.0': + resolution: {integrity: sha512-/1l6FnahC9im8PK+Ekkx/V3yetO/PzZnJegE2FXcv/iXEhbeVxP/ouiTYcUQu9shT1FWJCSNti1VJHH+21Y1dg==} cpu: [x64] os: [linux] - '@oxlint-tsgolint/win32-arm64@0.19.0': - resolution: {integrity: sha512-R6NyAtha7OWxh7NGBeFxqDTGAVl1Xj4xLa8Qj39PKbIDqBeVW8BIb+1nEnRp+Mo/VpRoeoFAcqlBsuMcUMd26Q==} + '@oxlint-tsgolint/win32-arm64@0.20.0': + resolution: {integrity: sha512-oPZ5Yz8sVdo7P/5q+i3IKeix31eFZ55JAPa1+RGPoe9PoaYVsdMvR6Jvib6YtrqoJnFPlg3fjEjlEPL8VBKYJA==} cpu: [arm64] os: [win32] - '@oxlint-tsgolint/win32-x64@0.19.0': - resolution: {integrity: sha512-2ePvxcbS5tPOmrQvxR8Kc+IqzdTtlrGeMDv+jjTYfkTFPmh2rF9yxVchi/4WM6js3gt2UauQeMV/tfnZNemENQ==} + '@oxlint-tsgolint/win32-x64@0.20.0': + resolution: {integrity: sha512-4stx8RHj3SP9vQyRF/yZbz5igtPvYMEUR8CUoha4BVNZihi39DpCR8qkU7lpjB5Ga1DRMo2pHaA4bdTOMaY4mw==} cpu: [x64] os: [win32] @@ -6725,57 +6622,113 @@ packages: cpu: [arm64] os: [darwin] + '@rspack/binding-darwin-arm64@1.7.11': + resolution: {integrity: sha512-oduECiZVqbO5zlVw+q7Vy65sJFth99fWPTyucwvLJJtJkPL5n17Uiql2cYP6Ijn0pkqtf1SXgK8WjiKLG5bIig==} + cpu: [arm64] + os: [darwin] + '@rspack/binding-darwin-x64@1.6.8': resolution: {integrity: sha512-ku1XpTEPt6Za11zhpFWhfwrTQogcgi9RJrOUVC4FESiPO9aKyd4hJ+JiPgLY0MZOqsptK6vEAgOip+uDVXrCpg==} cpu: [x64] os: [darwin] + '@rspack/binding-darwin-x64@1.7.11': + resolution: {integrity: sha512-a1+TtTE9ap6RalgFi7FGIgkJP6O4Vy6ctv+9WGJy53E4kuqHR0RygzaiVxCI/GMc/vBT9vY23hyrpWb3d1vtXA==} + cpu: [x64] + os: [darwin] + '@rspack/binding-linux-arm64-gnu@1.6.8': resolution: {integrity: sha512-fvZX6xZPvBT8qipSpvkKMX5M7yd2BSpZNCZXcefw6gA3uC7LI3gu+er0LrDXY1PtPzVuHTyDx+abwWpagV3PiQ==} cpu: [arm64] os: [linux] libc: [glibc] + '@rspack/binding-linux-arm64-gnu@1.7.11': + resolution: {integrity: sha512-P0QrGRPbTWu6RKWfN0bDtbnEps3rXH0MWIMreZABoUrVmNQKtXR6e73J3ub6a+di5s2+K0M2LJ9Bh2/H4UsDUA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@rspack/binding-linux-arm64-musl@1.6.8': resolution: {integrity: sha512-++XMKcMNrt59HcFBLnRaJcn70k3X0GwkAegZBVpel8xYIAgvoXT5+L8P1ExId/yTFxqedaz8DbcxQnNmMozviw==} cpu: [arm64] os: [linux] libc: [musl] + '@rspack/binding-linux-arm64-musl@1.7.11': + resolution: {integrity: sha512-6ky7R43VMjWwmx3Yx7Jl7faLBBMAgMDt+/bN35RgwjiPgsIByz65EwytUVuW9rikB43BGHvA/eqlnjLrUzNBqw==} + cpu: [arm64] + os: [linux] + libc: [musl] + '@rspack/binding-linux-x64-gnu@1.6.8': resolution: {integrity: sha512-tv3BWkTE1TndfX+DsE1rSTg8fBevCxujNZ3MlfZ22Wfy9x1FMXTJlWG8VIOXmaaJ1wUHzv8S7cE2YUUJ2LuiCg==} cpu: [x64] os: [linux] libc: [glibc] + '@rspack/binding-linux-x64-gnu@1.7.11': + resolution: {integrity: sha512-cuOJMfCOvb2Wgsry5enXJ3iT1FGUjdPqtGUBVupQlEG4ntSYsQ2PtF4wIDVasR3wdxC5nQbipOrDiN/u6fYsdQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + '@rspack/binding-linux-x64-musl@1.6.8': resolution: {integrity: sha512-DCGgZ5/in1O3FjHWqXnDsncRy+48cMhfuUAAUyl0yDj1NpsZu9pP+xfGLvGcQTiYrVl7IH9Aojf1eShP/77WGA==} cpu: [x64] os: [linux] libc: [musl] + '@rspack/binding-linux-x64-musl@1.7.11': + resolution: {integrity: sha512-CoK37hva4AmHGh3VCsQXmGr40L36m1/AdnN5LEjUX6kx5rEH7/1nEBN6Ii72pejqDVvk9anEROmPDiPw10tpFg==} + cpu: [x64] + os: [linux] + libc: [musl] + '@rspack/binding-wasm32-wasi@1.6.8': resolution: {integrity: sha512-VUwdhl/lI4m6o1OGCZ9JwtMjTV/yLY5VZTQdEPKb40JMTlmZ5MBlr5xk7ByaXXYHr6I+qnqEm73iMKQvg6iknw==} cpu: [wasm32] + '@rspack/binding-wasm32-wasi@1.7.11': + resolution: {integrity: sha512-OtrmnPUVJMxjNa3eDMfHyPdtlLRmmp/aIm0fQHlAOATbZvlGm12q7rhPW5BXTu1yh+1rQ1/uqvz+SzKEZXuJaQ==} + cpu: [wasm32] + '@rspack/binding-win32-arm64-msvc@1.6.8': resolution: {integrity: sha512-23YX7zlOZlub+nPGDBUzktb4D5D6ETUAluKjXEeHIZ9m7fSlEYBnGL66YE+3t1DHXGd0OqsdwlvrNGcyo6EXDQ==} cpu: [arm64] os: [win32] + '@rspack/binding-win32-arm64-msvc@1.7.11': + resolution: {integrity: sha512-lObFW6e5lCWNgTBNwT//yiEDbsxm9QG4BYUojqeXxothuzJ/L6ibXz6+gLMvbOvLGV3nKgkXmx8GvT9WDKR0mA==} + cpu: [arm64] + os: [win32] + '@rspack/binding-win32-ia32-msvc@1.6.8': resolution: {integrity: sha512-cFgRE3APxrY4AEdooVk2LtipwNNT/9mrnjdC5lVbsIsz+SxvGbZR231bxDJEqP15+RJOaD07FO1sIjINFqXMEg==} cpu: [ia32] os: [win32] + '@rspack/binding-win32-ia32-msvc@1.7.11': + resolution: {integrity: sha512-0pYGnZd8PPqNR68zQ8skamqNAXEA1sUfXuAdYcknIIRq2wsbiwFzIc0Pov1cIfHYab37G7sSIPBiOUdOWF5Ivw==} + cpu: [ia32] + os: [win32] + '@rspack/binding-win32-x64-msvc@1.6.8': resolution: {integrity: sha512-cIuhVsZYd3o3Neo1JSAhJYw6BDvlxaBoqvgwRkG1rs0ExFmEmgYyG7ip9pFKnKNWph/tmW3rDYypmEfjs1is7g==} cpu: [x64] os: [win32] + '@rspack/binding-win32-x64-msvc@1.7.11': + resolution: {integrity: sha512-EeQXayoQk/uBkI3pdoXfQBXNIUrADq56L3s/DFyM2pJeUDrWmhfIw2UFIGkYPTMSCo8F2JcdcGM32FGJrSnU0Q==} + cpu: [x64] + os: [win32] + '@rspack/binding@1.6.8': resolution: {integrity: sha512-lUeL4mbwGo+nqRKqFDCm9vH2jv9FNMVt1X8jqayWRcOCPlj/2UVMEFgqjR7Pp2vlvnTKq//31KbDBJmDZq31RQ==} + '@rspack/binding@1.7.11': + resolution: {integrity: sha512-2MGdy2s2HimsDT444Bp5XnALzNRxuBNc7y0JzyuqKbHBywd4x2NeXyhWXXoxufaCFu5PBc9Qq9jyfjW2Aeh06Q==} + '@rspack/core@1.6.8': resolution: {integrity: sha512-FolcIAH5FW4J2FET+qwjd1kNeFbCkd0VLuIHO0thyolEjaPSxw5qxG67DA7BZGm6PVcoiSgPLks1DL6eZ8c+fA==} engines: {node: '>=18.12.0'} @@ -6785,6 +6738,15 @@ packages: '@swc/helpers': optional: true + '@rspack/core@1.7.11': + resolution: {integrity: sha512-rsD9b+Khmot5DwCMiB3cqTQo53ioPG3M/A7BySu8+0+RS7GCxKm+Z+mtsjtG/vsu4Tn2tcqCdZtA3pgLoJB+ew==} + engines: {node: '>=18.12.0'} + peerDependencies: + '@swc/helpers': '>=0.5.1' + peerDependenciesMeta: + '@swc/helpers': + optional: true + '@rspack/dev-server@1.2.1': resolution: {integrity: sha512-e/ARvskYn2Qdd02qLvc0i6H9BnOmzP0xGHS2XCr7GZ3t2k5uC5ZlLkeN1iEebU0FkAW+6ot89NahFo3nupKuww==} engines: {node: '>= 18.12.0'} @@ -6803,8 +6765,8 @@ packages: webpack-hot-middleware: optional: true - '@schematics/angular@21.2.4': - resolution: {integrity: sha512-1I6KI2NEUg9Or0xhaxxKYaqfrF4yo9f3VcnFjPC3niBdno1PWJ23KwRjOxLtG2zEkqK9PsAMBzBRyJp0kdz8SA==} + '@schematics/angular@21.2.7': + resolution: {integrity: sha512-aqEj3RyBtmH+41HZvrbfrpCo0e+0NzwyQyNSC/wLDShVqoidBtPbEdHU1FZ4+ni41da7rI3F12gUuAHws27kMA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} '@sec-ant/readable-stream@0.4.1': @@ -7009,32 +6971,6 @@ packages: vitest: optional: true - '@storybook/angular@10.3.3': - resolution: {integrity: sha512-y7fP0TFonEHCXXkWqFyhVocHJw168romQfbmXSTai1WOAZYLhM0cZROJt4K9EgnJDqZ+L2YnJiMnnuTmIknguw==} - peerDependencies: - '@angular-devkit/architect': '>=0.1800.0 < 0.2200.0' - '@angular-devkit/build-angular': '>=18.0.0 < 22.0.0' - '@angular-devkit/core': '>=18.0.0 < 22.0.0' - '@angular/animations': '>=18.0.0 < 22.0.0' - '@angular/cli': '>=18.0.0 < 22.0.0' - '@angular/common': '>=18.0.0 < 22.0.0' - '@angular/compiler': '>=18.0.0 < 22.0.0' - '@angular/compiler-cli': '>=18.0.0 < 22.0.0' - '@angular/core': '>=18.0.0 < 22.0.0' - '@angular/platform-browser': '>=18.0.0 < 22.0.0' - '@angular/platform-browser-dynamic': '>=18.0.0 < 22.0.0' - rxjs: ^6.5.3 || ^7.4.0 - storybook: ^10.3.3 - typescript: ^4.9.0 || ^5.0.0 - zone.js: '>=0.14.0' - peerDependenciesMeta: - '@angular/animations': - optional: true - '@angular/cli': - optional: true - zone.js: - optional: true - '@storybook/angular@10.3.5': resolution: {integrity: sha512-Wqhls4MONM8P3ZoHrsK7KuI/Evz2zowpyV3peiqgq1Sir9W1az74EzNXlo1KxY4cM/kI6UDvv6BaZ+cyfqVmFA==} peerDependencies: @@ -7067,15 +7003,6 @@ packages: storybook: ^10.3.5 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@storybook/builder-webpack5@10.3.3': - resolution: {integrity: sha512-A7hop0VXG/06EZ7l2WIuhsrnpiV6NOOcOiVqjYDLplbVelkiiL98LTL+Om87u0n32sAfXWgFk2jIhSc3bbXlsQ==} - peerDependencies: - storybook: ^10.3.3 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@storybook/builder-webpack5@10.3.5': resolution: {integrity: sha512-DYjIpfuwkl8CrDbYWjMcwxrLY3QpcZtDJr4ZcT3hrbZHF5BJ3HnVIv1YM+KF/bJfIUMS2h/YMsRyKVYGthiSzQ==} peerDependencies: @@ -7085,11 +7012,6 @@ packages: typescript: optional: true - '@storybook/core-webpack@10.3.3': - resolution: {integrity: sha512-ESRM2k9m1V0qXaqEM+bvtCjv9+gYVE3PMuoNZMyIYNdGA4Pdc2PvQsUrKQNVByVbEGwjt+h0RE6b20bnBkdYsg==} - peerDependencies: - storybook: ^10.3.3 - '@storybook/core-webpack@10.3.5': resolution: {integrity: sha512-CEtGU2f6+FefIR3v4P1KBJB17UngZDSmib2w36jfVp1pNPIzqdIG2s1NCKAM7vbQHxXVcLpBH31mJqyU+vdypQ==} peerDependencies: @@ -7546,6 +7468,9 @@ packages: '@ts-morph/common@0.28.1': resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==} + '@ts-morph/common@0.29.0': + resolution: {integrity: sha512-35oUmphHbJvQ/+UTwFNme/t2p3FoKiGJ5auTjjpNTop2dyREspirjMy82PLSC1pnDJ8ah1GU98hwpVt64YXQsg==} + '@tufjs/canonical-json@2.0.0': resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -7719,8 +7644,8 @@ packages: '@types/geojson@7946.0.16': resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} - '@types/gtag.js@0.0.12': - resolution: {integrity: sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==} + '@types/gtag.js@0.0.20': + resolution: {integrity: sha512-wwAbk3SA2QeU67unN7zPxjEHmPmlXwZXZvQEpbEUQuMCRGgKyE1m6XDuTUA9b6pCGb/GqJmdfMOY5LuDjJSbbg==} '@types/hammerjs@2.0.46': resolution: {integrity: sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==} @@ -7791,20 +7716,12 @@ packages: '@types/prismjs@1.26.6': resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} - '@types/prop-types@15.7.15': - resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - '@types/qs@6.15.0': resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/react-dom@18.3.7': - resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} - peerDependencies: - '@types/react': ^18.0.0 - '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: @@ -7819,9 +7736,6 @@ packages: '@types/react-router@5.1.20': resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} - '@types/react@18.3.28': - resolution: {integrity: sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==} - '@types/react@19.2.14': resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} @@ -7876,14 +7790,6 @@ packages: '@types/yargs@17.0.35': resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} - '@typescript-eslint/eslint-plugin@8.58.0': - resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.58.0 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/eslint-plugin@8.58.1': resolution: {integrity: sha512-eSkwoemjo76bdXl2MYqtxg51HNwUSkWfODUOQ3PaTLZGh9uIWWFZIjyjaJnex7wXDu+TRx+ATsnSxdN9YWfRTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -7892,13 +7798,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.58.0': - resolution: {integrity: sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.58.1': resolution: {integrity: sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -7906,45 +7805,22 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.58.0': - resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.58.1': resolution: {integrity: sha512-gfQ8fk6cxhtptek+/8ZIqw8YrRW5048Gug8Ts5IYcMLCw18iUgrZAEY/D7s4hkI0FxEfGakKuPK/XUMPzPxi5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.58.0': - resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.58.1': resolution: {integrity: sha512-TPYUEqJK6avLcEjumWsIuTpuYODTTDAtoMdt8ZZa93uWMTX13Nb8L5leSje1NluammvU+oI3QRr5lLXPgihX3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.58.0': - resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/tsconfig-utils@8.58.1': resolution: {integrity: sha512-JAr2hOIct2Q+qk3G+8YFfqkqi7sC86uNryT+2i5HzMa2MPjw4qNFvtjnw1IiA1rP7QhNKVe21mSSLaSjwA1Olw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.58.0': - resolution: {integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.58.1': resolution: {integrity: sha512-HUFxvTJVroT+0rXVJC7eD5zol6ID+Sn5npVPWoFuHGg9Ncq5Q4EYstqR+UOqaNRFXi5TYkpXXkLhoCHe3G0+7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -7952,33 +7828,16 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.58.0': - resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.58.1': resolution: {integrity: sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.58.0': - resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/typescript-estree@8.58.1': resolution: {integrity: sha512-w4w7WR7GHOjqqPnvAYbazq+Y5oS68b9CzasGtnd6jIeOIeKUzYzupGTB2T4LTPSv4d+WPeccbxuneTFHYgAAWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.58.0': - resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.58.1': resolution: {integrity: sha512-Ln8R0tmWC7pTtLOzgJzYTXSCjJ9rDNHAqTaVONF4FEi2qwce8mD9iSOxOpLFFvWp/wBFlew0mjM1L1ihYWfBdQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -7986,51 +7845,47 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.58.0': - resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.58.1': resolution: {integrity: sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260411.1': - resolution: {integrity: sha512-qdSDz0o4l4cEZhAn92ayzf7cKiMLrzSp9Xdk5mfaXpiahvxT39fNj5jiwDnRO+kHkHMMIYYL1nQbslSadargyg==} + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260412.1': + resolution: {integrity: sha512-sSkFG+hjtRWffg6FddF3dEkk7N3TRMEqfiUpixwcWhXgyocMdPw8wutTvQRBxQdgxeL9y01M2SO8A8YPPiEgVg==} cpu: [arm64] os: [darwin] - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260411.1': - resolution: {integrity: sha512-2Nea85rMeBZe2UV6V8vBVJ3mSFHn4XZ+ceXGFpnfsU2nay0l1ncoYw91JA/yPwM5ui3+pxAYwl8PWLCxlZCB3Q==} + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260412.1': + resolution: {integrity: sha512-m2BTeaLkrHEEDg0D9snigddy01qTY+wgx+W+GpXAfx36PPvW4xWuGXNVWfSaB8bqAC9C8NeLnT/C9/G/rJ5v2w==} cpu: [x64] os: [darwin] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260411.1': - resolution: {integrity: sha512-5QRz/eMIb1JtojvB0oeBbIc6ZNqZiiMUSRDsyp1qMJacdrs+1fbQ8MYFft5ceJe94mcolGHnbcozwPg8hf5fDg==} + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260412.1': + resolution: {integrity: sha512-JAdsG6MlVV1hoAUKPy8zxAL7xLeNxz8JgCbLCJVqW8EyH29R9FD4cFTqr7CSIRTNUEDzDTrgnXUyoRtDe1gr+w==} cpu: [arm64] os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20260411.1': - resolution: {integrity: sha512-8/LqqQDp73kvT7aWh3sAFglGaSxtjxHIhEgqZ7XWG7+1aHHJeL1bcmRnk7JyP3BE5SPzs3bQhFC6Cvj6WQwTqQ==} + '@typescript/native-preview-linux-arm@7.0.0-dev.20260412.1': + resolution: {integrity: sha512-wDLekbfsfmKMWORg7CTnEnpKj8oXpU/6AEBrtVN9CEUCiQAe6yH878nZHhJNzWQXHtrtFf3lY49Yplqmdxja3w==} cpu: [arm] os: [linux] - '@typescript/native-preview-linux-x64@7.0.0-dev.20260411.1': - resolution: {integrity: sha512-H5NWP+ot/L+Tn9ds4W/t4Xx/CuxZF4iHDdRx2hCr/O0l8pBBq8C/MBJ/eUgVZXO4lD+8J6eQ7nOlGtJ0SS8Sbg==} + '@typescript/native-preview-linux-x64@7.0.0-dev.20260412.1': + resolution: {integrity: sha512-gYgppiQIqid3jZ7D8THh4k3Q+4bwidrQH6SL9Xgbk1qfP6/jwv8twuPqDOfZ+cK2OD55lQHp15fOh2lMNAC40Q==} cpu: [x64] os: [linux] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260411.1': - resolution: {integrity: sha512-/Zc1rotE/NS72xNc4UjaEKCBanBsQ/0/fS2sYLcN9yd6p6AYFYzmTWfbGy5qvv1ckXOI0dkOolLzK8nYbrJzbA==} + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260412.1': + resolution: {integrity: sha512-TOh7rH5H3jisHJqRXJSjmUGMzcbNBocS/hufhXPQIv+g3pdG5IKZoSnv3SV62I5d12FFDSS5KQon5MQPnOKAHg==} cpu: [arm64] os: [win32] - '@typescript/native-preview-win32-x64@7.0.0-dev.20260411.1': - resolution: {integrity: sha512-PhFL0w2Uz9jKdTtm7uy2PPl3nJiacX24jxzDD0R0eBHOY/49L3V5iD7eyBACPSzyWp0/dD7pPdKSnRbS3nVRng==} + '@typescript/native-preview-win32-x64@7.0.0-dev.20260412.1': + resolution: {integrity: sha512-u+70wL89wspN1wKoX6FVNUATRGCG3BpleByP3H/UqOZvlwuMm8N7Gy8hEbM0U8bDyAuyP/daUfTBVkqXjjv9mA==} cpu: [x64] os: [win32] - '@typescript/native-preview@7.0.0-dev.20260411.1': - resolution: {integrity: sha512-cBk+dPa5x5r9wnh5lz3zSnj7YJM1s/tSCf5owex+OkjJLji3iJu7J9kTH1SvvxA5kmkY76qFYw3vFN9h8W3gBA==} + '@typescript/native-preview@7.0.0-dev.20260412.1': + resolution: {integrity: sha512-tDw3XZt2BkjAlt/MJmnFGmbe9lgKmc5wezmrMoBIEvJcqz+/KVpVBVvjbkZoaiABnJmuG3G3b6IUFrEveTw6UQ==} hasBin: true '@ungap/structured-clone@1.3.0': @@ -8167,22 +8022,22 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@vitest/browser-playwright@4.1.2': - resolution: {integrity: sha512-N0Z2HzMLvMR6k/tWPTS6Q/DaRscrkax/f2f9DIbNQr+Cd1l4W4wTf/I6S983PAMr0tNqqoTL+xNkLh9M5vbkLg==} + '@vitest/browser-playwright@4.1.4': + resolution: {integrity: sha512-q3PchVhZINX23Pv+RERgAtDlp6wzVkID/smOPnZ5YGWpeWUe3jMNYppeVh15j4il3G7JIJty1d1Kicpm0HSMig==} peerDependencies: playwright: '*' - vitest: 4.1.2 + vitest: 4.1.4 - '@vitest/browser@4.1.2': - resolution: {integrity: sha512-CwdIf90LNf1Zitgqy63ciMAzmyb4oIGs8WZ40VGYrWkssQKeEKr32EzO8MKUrDPPcPVHFI9oQ5ni2Hp24NaNRQ==} + '@vitest/browser@4.1.4': + resolution: {integrity: sha512-TrNaY/yVOwxtrxNsDUC/wQ56xSwplpytTeRAqF/197xV/ZddxxulBsxR6TrhVMyniJmp9in8d5u0AcDaNRY30w==} peerDependencies: - vitest: 4.1.2 + vitest: 4.1.4 - '@vitest/coverage-v8@4.1.2': - resolution: {integrity: sha512-sPK//PHO+kAkScb8XITeB1bf7fsk85Km7+rt4eeuRR3VS1/crD47cmV5wicisJmjNdfeokTZwjMk4Mj2d58Mgg==} + '@vitest/coverage-v8@4.1.4': + resolution: {integrity: sha512-x7FptB5oDruxNPDNY2+S8tCh0pcq7ymCe1gTHcsp733jYjrJl8V1gMUlVysuCD9Kz46Xz9t1akkv08dPcYDs1w==} peerDependencies: - '@vitest/browser': 4.1.2 - vitest: 4.1.2 + '@vitest/browser': 4.1.4 + vitest: 4.1.4 peerDependenciesMeta: '@vitest/browser': optional: true @@ -8190,23 +8045,9 @@ packages: '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/expect@4.1.2': - resolution: {integrity: sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==} - '@vitest/expect@4.1.4': resolution: {integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==} - '@vitest/mocker@4.1.2': - resolution: {integrity: sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==} - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - '@vitest/mocker@4.1.4': resolution: {integrity: sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg==} peerDependencies: @@ -8221,44 +8062,29 @@ packages: '@vitest/pretty-format@3.2.4': resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/pretty-format@4.1.2': - resolution: {integrity: sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==} - '@vitest/pretty-format@4.1.4': resolution: {integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==} - '@vitest/runner@4.1.2': - resolution: {integrity: sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==} - '@vitest/runner@4.1.4': resolution: {integrity: sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ==} - '@vitest/snapshot@4.1.2': - resolution: {integrity: sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==} - '@vitest/snapshot@4.1.4': resolution: {integrity: sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw==} '@vitest/spy@3.2.4': resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/spy@4.1.2': - resolution: {integrity: sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==} - '@vitest/spy@4.1.4': resolution: {integrity: sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ==} - '@vitest/ui@4.1.2': - resolution: {integrity: sha512-/irhyeAcKS2u6Zokagf9tqZJ0t8S6kMZq4ZG9BHZv7I+fkRrYfQX4w7geYeC2r6obThz39PDxvXQzZX+qXqGeg==} + '@vitest/ui@4.1.4': + resolution: {integrity: sha512-EgFR7nlj5iTDYZYCvavjFokNYwr3c3ry0sFiCg+N7B233Nwp+NNx7eoF/XvMWDCKY71xXAG3kFkt97ZHBJVL8A==} peerDependencies: - vitest: 4.1.2 + vitest: 4.1.4 '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@vitest/utils@4.1.2': - resolution: {integrity: sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==} - '@vitest/utils@4.1.4': resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==} @@ -8562,8 +8388,8 @@ packages: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true - astro@6.1.1: - resolution: {integrity: sha512-vq8sHpu1JsY1fWAunn+tdKNbVDmLQNiVdyuGsVT2csgITdFGXXVAyEXFWc1DzkMN0ehElPeiHnqItyQOJK+GqA==} + astro@6.1.5: + resolution: {integrity: sha512-AJVw/JlssxUCBFi3Hp4djL8Pt7wUQqStBBawCd8cNGBBM2lBzp/rXGguzt4OcMfW+86fs0hpFwMyopHM2r6d3g==} engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true @@ -9290,6 +9116,10 @@ packages: resolution: {integrity: sha512-X8XDzyvYaA6msMyAM575CUoygY5b44QzLcGRKsK3MFmXcOvQa518dNPLsKYwkYsn72g3EiW+LE0ytd/FlqWmyw==} engines: {node: '>=18'} + copy-text-to-clipboard@3.2.2: + resolution: {integrity: sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==} + engines: {node: '>=12'} + copy-webpack-plugin@11.0.0: resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} engines: {node: '>= 14.15.0'} @@ -9305,9 +9135,6 @@ packages: core-js-compat@3.49.0: resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} - core-js-pure@3.49.0: - resolution: {integrity: sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw==} - core-js@3.49.0: resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==} @@ -10264,11 +10091,11 @@ packages: peerDependencies: eslint: '>=8.40.0' - eslint-plugin-storybook@10.3.3: - resolution: {integrity: sha512-jo8wZvKaJlxxrNvf4hCsROJP3CdlpaLiYewAs5Ww+PJxCrLelIi5XVHWOAgBvvr3H9WDKvUw8xuvqPYqAlpkFg==} + eslint-plugin-storybook@10.3.5: + resolution: {integrity: sha512-rEFkfU3ypF44GpB4tiJ9EFDItueoGvGi3+weLHZax2ON2MB7VIDsxdSUGvIU5tMURg+oWYlpzCyLm4TpDq2deA==} peerDependencies: eslint: '>=8' - storybook: ^10.3.3 + storybook: ^10.3.5 eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} @@ -11724,8 +11551,8 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsdom@29.0.1: - resolution: {integrity: sha512-z6JOK5gRO7aMybVq/y/MlIpKh8JIi68FBKMUtKkK2KH/wMSRlCxQ682d08LB9fYXplyY/UXG8P4XXTScmdjApg==} + jsdom@29.0.2: + resolution: {integrity: sha512-9VnGEBosc/ZpwyOsJBCQ/3I5p7Q5ngOY14a9bf5btenAORmZfDse1ZEheMiWcJ3h81+Fv7HmJFdS0szo/waF2w==} engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} peerDependencies: canvas: ^3.0.0 @@ -12232,8 +12059,8 @@ packages: engines: {node: '>= 20'} hasBin: true - marked@17.0.6: - resolution: {integrity: sha512-gB0gkNafnonOw0obSTEGZTT86IuhILt2Wfx0mWH/1Au83kybTayroZ/V6nS25mN7u8ASy+5fMhgB3XPNrOZdmA==} + marked@18.0.0: + resolution: {integrity: sha512-2e7Qiv/HJSXj8rDEpgTvGKsP8yYtI9xXHKDnrftrmnrJPaFNM7VRb2YCzWaX4BP1iCJ/XPduzDJZMFoqTCcIMA==} engines: {node: '>= 20'} hasBin: true @@ -12715,8 +12542,8 @@ packages: nf3@0.3.16: resolution: {integrity: sha512-Gs0xRPpUm2nDkqbi40NJ9g7qDIcjcJzgExiydnq6LAyqhI2jfno8wG3NKTL+IiJsx799UHOb1CnSd4Wg4SG4Pw==} - ng-packagr@21.2.1: - resolution: {integrity: sha512-rk0aL0wWkC+FTA4wyzJIfjcUgAKMAEB19ULvP0QkAoAkzjS+3SBEf0n3MS6z7gcOW8SRU9rw1BmsouEAXD+SCw==} + ng-packagr@21.2.2: + resolution: {integrity: sha512-VO0y7RU3Ik8E14QdrryVyVbTAyqO2MK9W9GrG4e/4N8+ti+DWiBSQmw0tIhnV67lEjQwCccPA3ZBoIn3B1vJ1Q==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} hasBin: true peerDependencies: @@ -13107,19 +12934,19 @@ packages: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - oxc-parser@0.123.0: - resolution: {integrity: sha512-F6ak0tFc01ZGbl5KxvLDQ2K005Z086mp3ByCQBDhUjqXLkapGUkMuJSsYixncdEpkLlcRDcruHR71LD339ADUA==} + oxc-parser@0.124.0: + resolution: {integrity: sha512-h07SFj/tp2U3cf3+LFX6MmOguQiM9ahwpGs0ZK5CGhgL8p4kk24etrJKsEzhXAvo7mfvoKTZooZ5MLKAPRmJ1g==} engines: {node: ^20.19.0 || >=22.12.0} oxc-resolver@11.19.1: resolution: {integrity: sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg==} - oxc-transform@0.123.0: - resolution: {integrity: sha512-uuuNWbCDv391SEeF2id/TvSAMUKU8U9347cbNcpRkwcv5sobBS6C5kXE0ZLuxVEUlWatr2kfsolrA10zdPogDg==} + oxc-transform@0.124.0: + resolution: {integrity: sha512-uxVsQFZAaMv4cL3ijc1tx0WczUoBJBbwIFbtTf2QOdRww1s12Ib8dGc5Og63Fh4tmHt9ajYu+9BjxCRSL0b9/g==} engines: {node: ^20.19.0 || >=22.12.0} - oxlint-tsgolint@0.19.0: - resolution: {integrity: sha512-pSzUmDjMyjC8iUUZ7fCLo0D1iUaYIfodd/WIQ6Zra11YkjkUQk3BOFoW4I5ec6uZ/0s2FEmxtiZ7hiTXFRp1cg==} + oxlint-tsgolint@0.20.0: + resolution: {integrity: sha512-/Uc9TQyN1l8w9QNvXtVHYtz+SzDJHKpb5X0UnHodl0BVzijUPk0LPlDOHAvogd1UI+iy9ZSF6gQxEqfzUxCULQ==} hasBin: true oxlint@1.59.0: @@ -15219,15 +15046,6 @@ packages: resolution: {integrity: sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==} engines: {node: '>=18'} - storybook@10.3.3: - resolution: {integrity: sha512-tMoRAts9EVqf+mEMPLC6z1DPyHbcPe+CV1MhLN55IKsl0HxNjvVGK44rVPSePbltPE6vIsn4bdRj6CCUt8SJwQ==} - hasBin: true - peerDependencies: - prettier: ^2 || ^3 - peerDependenciesMeta: - prettier: - optional: true - storybook@10.3.5: resolution: {integrity: sha512-uBSZu/GZa9aEIW3QMGvdQPMZWhGxSe4dyRWU8B3/Vd47Gy/XLC7tsBxRr13txmmPOEDHZR94uLuq0H50fvuqBw==} hasBin: true @@ -15666,6 +15484,9 @@ packages: ts-morph@27.0.2: resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==} + ts-morph@28.0.0: + resolution: {integrity: sha512-Wp3tnZ2bzwxyTZMtgWVzXDfm7lB1Drz+y9DmmYH/L702PQhPyVrp3pkou3yIz4qjS14GY9kcpmLiOOMvl8oG1g==} + tsconfck@3.1.6: resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} engines: {node: ^18 || >=20} @@ -16222,46 +16043,6 @@ packages: peerDependencies: vite: '>=5.0.0' - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vite@7.3.2: resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -16353,41 +16134,6 @@ packages: vite: optional: true - vitest@4.1.2: - resolution: {integrity: sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.2 - '@vitest/browser-preview': 4.1.2 - '@vitest/browser-webdriverio': 4.1.2 - '@vitest/ui': 4.1.2 - happy-dom: '*' - jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - vitest@4.1.4: resolution: {integrity: sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -17086,35 +16832,13 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@analogjs/vite-plugin-angular@2.4.5(@angular-devkit/build-angular@21.2.4(3964406a4d3b8b07c14eff877b373c9b))(@angular/build@21.2.7(8e65f8e48c9e332d0b9f72f53830b70c))': - dependencies: - tinyglobby: 0.2.16 - ts-morph: 21.0.1 - optionalDependencies: - '@angular-devkit/build-angular': 21.2.4(3964406a4d3b8b07c14eff877b373c9b) - '@angular/build': 21.2.7(8e65f8e48c9e332d0b9f72f53830b70c) - - '@analogjs/vite-plugin-angular@2.4.5(@angular-devkit/build-angular@21.2.7(3964406a4d3b8b07c14eff877b373c9b))(@angular/build@21.2.7(8e65f8e48c9e332d0b9f72f53830b70c))': + '@analogjs/vite-plugin-angular@2.4.5(@angular-devkit/build-angular@21.2.7(181b35eb2462485c944a6ce64e49407b))(@angular/build@21.2.7(e408ccba00006cab6e3974b844d6f1ab))': dependencies: tinyglobby: 0.2.16 ts-morph: 21.0.1 optionalDependencies: - '@angular-devkit/build-angular': 21.2.7(3964406a4d3b8b07c14eff877b373c9b) - '@angular/build': 21.2.7(8e65f8e48c9e332d0b9f72f53830b70c) - - '@angular-devkit/architect@0.2102.4(chokidar@5.0.0)': - dependencies: - '@angular-devkit/core': 21.2.4(chokidar@5.0.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - chokidar - - '@angular-devkit/architect@0.2102.6(chokidar@5.0.0)': - dependencies: - '@angular-devkit/core': 21.2.6(chokidar@5.0.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - chokidar + '@angular-devkit/build-angular': 21.2.7(181b35eb2462485c944a6ce64e49407b) + '@angular/build': 21.2.7(e408ccba00006cab6e3974b844d6f1ab) '@angular-devkit/architect@0.2102.7(chokidar@5.0.0)': dependencies: @@ -17123,195 +16847,13 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/build-angular@21.2.4(3964406a4d3b8b07c14eff877b373c9b)': - dependencies: - '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2102.4(chokidar@5.0.0) - '@angular-devkit/build-webpack': 0.2102.4(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - '@angular-devkit/core': 21.2.4(chokidar@5.0.0) - '@angular/build': 21.2.4(3c6372062760667afc9a02be67cba827) - '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) - '@babel/core': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) - '@babel/preset-env': 7.29.0(@babel/core@7.29.0) - '@babel/runtime': 7.28.6 - '@discoveryjs/json-ext': 0.6.3 - '@ngtools/webpack': 21.2.4(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - ansi-colors: 4.1.3 - autoprefixer: 10.4.27(postcss@8.5.6) - babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - browserslist: 4.28.2 - copy-webpack-plugin: 14.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - css-loader: 7.1.3(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - esbuild-wasm: 0.27.3 - http-proxy-middleware: 3.0.5 - istanbul-lib-instrument: 6.0.3 - jsonc-parser: 3.3.1 - karma-source-map-support: 1.4.0 - less: 4.4.2 - less-loader: 12.3.1(@rspack/core@1.6.8(@swc/helpers@0.5.21))(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - license-webpack-plugin: 4.0.2(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - loader-utils: 3.3.1 - mini-css-extract-plugin: 2.10.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - open: 11.0.0 - ora: 9.3.0 - picomatch: 4.0.3 - piscina: 5.1.4 - postcss: 8.5.6 - postcss-loader: 8.2.0(@rspack/core@1.6.8(@swc/helpers@0.5.21))(postcss@8.5.6)(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - resolve-url-loader: 5.0.0 - rxjs: 7.8.2 - sass: 1.97.3 - sass-loader: 16.0.7(@rspack/core@1.6.8(@swc/helpers@0.5.21))(sass-embedded@1.99.0)(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - semver: 7.7.4 - source-map-loader: 5.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - source-map-support: 0.5.21 - terser: 5.46.0 - tinyglobby: 0.2.15 - tree-kill: 1.2.2 - tslib: 2.8.1 - typescript: 6.0.2 - webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - webpack-merge: 6.0.1 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - optionalDependencies: - '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) - esbuild: 0.27.3 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) - tailwindcss: 4.2.2 - transitivePeerDependencies: - - '@angular/compiler' - - '@emnapi/core' - - '@emnapi/runtime' - - '@rspack/core' - - '@swc/core' - - '@types/node' - - bufferutil - - chokidar - - debug - - html-webpack-plugin - - jiti - - lightningcss - - node-sass - - sass-embedded - - stylus - - sugarss - - supports-color - - tsx - - uglify-js - - utf-8-validate - - vitest - - webpack-cli - - yaml - - '@angular-devkit/build-angular@21.2.4(58973c4e634acdaeac68b624dc858cb9)': - dependencies: - '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2102.4(chokidar@5.0.0) - '@angular-devkit/build-webpack': 0.2102.4(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - '@angular-devkit/core': 21.2.4(chokidar@5.0.0) - '@angular/build': 21.2.4(6f268c517dc0eb50f51f0c8f7c4d5261) - '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) - '@babel/core': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) - '@babel/preset-env': 7.29.0(@babel/core@7.29.0) - '@babel/runtime': 7.28.6 - '@discoveryjs/json-ext': 0.6.3 - '@ngtools/webpack': 21.2.4(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - ansi-colors: 4.1.3 - autoprefixer: 10.4.27(postcss@8.5.6) - babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - browserslist: 4.28.2 - copy-webpack-plugin: 14.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - css-loader: 7.1.3(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - esbuild-wasm: 0.27.3 - http-proxy-middleware: 3.0.5 - istanbul-lib-instrument: 6.0.3 - jsonc-parser: 3.3.1 - karma-source-map-support: 1.4.0 - less: 4.4.2 - less-loader: 12.3.1(@rspack/core@1.6.8(@swc/helpers@0.5.21))(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - license-webpack-plugin: 4.0.2(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - loader-utils: 3.3.1 - mini-css-extract-plugin: 2.10.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - open: 11.0.0 - ora: 9.3.0 - picomatch: 4.0.3 - piscina: 5.1.4 - postcss: 8.5.6 - postcss-loader: 8.2.0(@rspack/core@1.6.8(@swc/helpers@0.5.21))(postcss@8.5.6)(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - resolve-url-loader: 5.0.0 - rxjs: 7.8.2 - sass: 1.97.3 - sass-loader: 16.0.7(@rspack/core@1.6.8(@swc/helpers@0.5.21))(sass-embedded@1.99.0)(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - semver: 7.7.4 - source-map-loader: 5.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - source-map-support: 0.5.21 - terser: 5.46.0 - tinyglobby: 0.2.15 - tree-kill: 1.2.2 - tslib: 2.8.1 - typescript: 6.0.2 - webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) - webpack-merge: 6.0.1 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - optionalDependencies: - '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) - esbuild: 0.27.3 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) - tailwindcss: 4.2.2 - transitivePeerDependencies: - - '@angular/compiler' - - '@emnapi/core' - - '@emnapi/runtime' - - '@rspack/core' - - '@swc/core' - - '@types/node' - - bufferutil - - chokidar - - debug - - html-webpack-plugin - - jiti - - lightningcss - - node-sass - - sass-embedded - - stylus - - sugarss - - supports-color - - tsx - - uglify-js - - utf-8-validate - - vitest - - webpack-cli - - yaml - - '@angular-devkit/build-angular@21.2.7(34d0cc00c22339a2fe7fff06b757b60c)': + '@angular-devkit/build-angular@21.2.7(181b35eb2462485c944a6ce64e49407b)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) - '@angular-devkit/build-webpack': 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + '@angular-devkit/build-webpack': 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) '@angular-devkit/core': 21.2.7(chokidar@5.0.0) - '@angular/build': 21.2.7(d8bc8ba821c574250fec37dba526a1f9) + '@angular/build': 21.2.7(7f06c3e844373aa80d924af622ab91ba) '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -17323,53 +16865,53 @@ snapshots: '@babel/preset-env': 7.29.0(@babel/core@7.29.0) '@babel/runtime': 7.28.6 '@discoveryjs/json-ext': 0.6.3 - '@ngtools/webpack': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + '@ngtools/webpack': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) ansi-colors: 4.1.3 autoprefixer: 10.4.27(postcss@8.5.6) - babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) browserslist: 4.28.2 - copy-webpack-plugin: 14.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - css-loader: 7.1.3(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + copy-webpack-plugin: 14.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + css-loader: 7.1.3(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) esbuild-wasm: 0.27.3 http-proxy-middleware: 3.0.5 istanbul-lib-instrument: 6.0.3 jsonc-parser: 3.3.1 karma-source-map-support: 1.4.0 less: 4.4.2 - less-loader: 12.3.1(@rspack/core@1.6.8(@swc/helpers@0.5.21))(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - license-webpack-plugin: 4.0.2(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + less-loader: 12.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.21))(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + license-webpack-plugin: 4.0.2(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) loader-utils: 3.3.1 - mini-css-extract-plugin: 2.10.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + mini-css-extract-plugin: 2.10.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) open: 11.0.0 ora: 9.3.0 picomatch: 4.0.4 piscina: 5.1.4 postcss: 8.5.6 - postcss-loader: 8.2.0(@rspack/core@1.6.8(@swc/helpers@0.5.21))(postcss@8.5.6)(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + postcss-loader: 8.2.0(@rspack/core@1.7.11(@swc/helpers@0.5.21))(postcss@8.5.6)(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) resolve-url-loader: 5.0.0 rxjs: 7.8.2 sass: 1.97.3 - sass-loader: 16.0.7(@rspack/core@1.6.8(@swc/helpers@0.5.21))(sass-embedded@1.99.0)(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + sass-loader: 16.0.7(@rspack/core@1.7.11(@swc/helpers@0.5.21))(sass-embedded@1.99.0)(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) semver: 7.7.4 - source-map-loader: 5.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + source-map-loader: 5.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) source-map-support: 0.5.21 terser: 5.46.0 tinyglobby: 0.2.15 tree-kill: 1.2.2 tslib: 2.8.1 typescript: 6.0.2 - webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) webpack-merge: 6.0.1 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) optionalDependencies: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) + '@angular/ssr': 21.2.7(9c898ff27dabd87c2e39c7d23b6394cf) esbuild: 0.27.3 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) + ng-packagr: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) tailwindcss: 4.2.2 transitivePeerDependencies: - '@angular/compiler' @@ -17396,13 +16938,13 @@ snapshots: - webpack-cli - yaml - '@angular-devkit/build-angular@21.2.7(3964406a4d3b8b07c14eff877b373c9b)': + '@angular-devkit/build-angular@21.2.7(6751719947dac3e331bdc3e329959f6e)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) - '@angular-devkit/build-webpack': 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + '@angular-devkit/build-webpack': 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) '@angular-devkit/core': 21.2.7(chokidar@5.0.0) - '@angular/build': 21.2.7(3c6372062760667afc9a02be67cba827) + '@angular/build': 21.2.7(7f06c3e844373aa80d924af622ab91ba) '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -17414,35 +16956,35 @@ snapshots: '@babel/preset-env': 7.29.0(@babel/core@7.29.0) '@babel/runtime': 7.28.6 '@discoveryjs/json-ext': 0.6.3 - '@ngtools/webpack': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + '@ngtools/webpack': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) ansi-colors: 4.1.3 autoprefixer: 10.4.27(postcss@8.5.6) - babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) browserslist: 4.28.2 - copy-webpack-plugin: 14.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - css-loader: 7.1.3(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + copy-webpack-plugin: 14.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + css-loader: 7.1.3(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) esbuild-wasm: 0.27.3 http-proxy-middleware: 3.0.5 istanbul-lib-instrument: 6.0.3 jsonc-parser: 3.3.1 karma-source-map-support: 1.4.0 less: 4.4.2 - less-loader: 12.3.1(@rspack/core@1.6.8(@swc/helpers@0.5.21))(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - license-webpack-plugin: 4.0.2(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + less-loader: 12.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.21))(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + license-webpack-plugin: 4.0.2(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) loader-utils: 3.3.1 - mini-css-extract-plugin: 2.10.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + mini-css-extract-plugin: 2.10.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) open: 11.0.0 ora: 9.3.0 picomatch: 4.0.4 piscina: 5.1.4 postcss: 8.5.6 - postcss-loader: 8.2.0(@rspack/core@1.6.8(@swc/helpers@0.5.21))(postcss@8.5.6)(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + postcss-loader: 8.2.0(@rspack/core@1.7.11(@swc/helpers@0.5.21))(postcss@8.5.6)(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) resolve-url-loader: 5.0.0 rxjs: 7.8.2 sass: 1.97.3 - sass-loader: 16.0.7(@rspack/core@1.6.8(@swc/helpers@0.5.21))(sass-embedded@1.99.0)(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + sass-loader: 16.0.7(@rspack/core@1.7.11(@swc/helpers@0.5.21))(sass-embedded@1.99.0)(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) semver: 7.7.4 - source-map-loader: 5.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + source-map-loader: 5.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) source-map-support: 0.5.21 terser: 5.46.0 tinyglobby: 0.2.15 @@ -17450,17 +16992,17 @@ snapshots: tslib: 2.8.1 typescript: 6.0.2 webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) webpack-merge: 6.0.1 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) optionalDependencies: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) + '@angular/ssr': 21.2.7(9c898ff27dabd87c2e39c7d23b6394cf) esbuild: 0.27.3 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) + ng-packagr: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) tailwindcss: 4.2.2 transitivePeerDependencies: - '@angular/compiler' @@ -17486,15 +17028,14 @@ snapshots: - vitest - webpack-cli - yaml - optional: true - '@angular-devkit/build-angular@21.2.7(58973c4e634acdaeac68b624dc858cb9)': + '@angular-devkit/build-angular@21.2.7(6ab073f1cd1e044d9f0df9f978b48896)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) - '@angular-devkit/build-webpack': 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + '@angular-devkit/build-webpack': 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) '@angular-devkit/core': 21.2.7(chokidar@5.0.0) - '@angular/build': 21.2.7(6f268c517dc0eb50f51f0c8f7c4d5261) + '@angular/build': 21.2.7(7f06c3e844373aa80d924af622ab91ba) '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -17506,12 +17047,12 @@ snapshots: '@babel/preset-env': 7.29.0(@babel/core@7.29.0) '@babel/runtime': 7.28.6 '@discoveryjs/json-ext': 0.6.3 - '@ngtools/webpack': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + '@ngtools/webpack': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) ansi-colors: 4.1.3 autoprefixer: 10.4.27(postcss@8.5.6) - babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) browserslist: 4.28.2 - copy-webpack-plugin: 14.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + copy-webpack-plugin: 14.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) css-loader: 7.1.3(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) esbuild-wasm: 0.27.3 http-proxy-middleware: 3.0.5 @@ -17520,9 +17061,9 @@ snapshots: karma-source-map-support: 1.4.0 less: 4.4.2 less-loader: 12.3.1(@rspack/core@1.6.8(@swc/helpers@0.5.21))(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - license-webpack-plugin: 4.0.2(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + license-webpack-plugin: 4.0.2(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) loader-utils: 3.3.1 - mini-css-extract-plugin: 2.10.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + mini-css-extract-plugin: 2.10.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) open: 11.0.0 ora: 9.3.0 picomatch: 4.0.4 @@ -17534,7 +17075,7 @@ snapshots: sass: 1.97.3 sass-loader: 16.0.7(@rspack/core@1.6.8(@swc/helpers@0.5.21))(sass-embedded@1.99.0)(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) semver: 7.7.4 - source-map-loader: 5.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + source-map-loader: 5.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) source-map-support: 0.5.21 terser: 5.46.0 tinyglobby: 0.2.15 @@ -17542,17 +17083,17 @@ snapshots: tslib: 2.8.1 typescript: 6.0.2 webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) webpack-merge: 6.0.1 webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) optionalDependencies: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) + '@angular/ssr': 21.2.7(9c898ff27dabd87c2e39c7d23b6394cf) esbuild: 0.27.3 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) + ng-packagr: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) tailwindcss: 4.2.2 transitivePeerDependencies: - '@angular/compiler' @@ -17580,21 +17121,12 @@ snapshots: - yaml optional: true - '@angular-devkit/build-webpack@0.2102.4(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3))': - dependencies: - '@angular-devkit/architect': 0.2102.4(chokidar@5.0.0) - rxjs: 7.8.2 - webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) - webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) - transitivePeerDependencies: - - chokidar - - '@angular-devkit/build-webpack@0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3))': + '@angular-devkit/build-webpack@0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7))': dependencies: '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) rxjs: 7.8.2 webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) - webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) transitivePeerDependencies: - chokidar @@ -17609,28 +17141,6 @@ snapshots: optionalDependencies: chokidar: 5.0.0 - '@angular-devkit/core@21.2.4(chokidar@5.0.0)': - dependencies: - ajv: 8.18.0 - ajv-formats: 3.0.1(ajv@8.18.0) - jsonc-parser: 3.3.1 - picomatch: 4.0.3 - rxjs: 7.8.2 - source-map: 0.7.6 - optionalDependencies: - chokidar: 5.0.0 - - '@angular-devkit/core@21.2.6(chokidar@5.0.0)': - dependencies: - ajv: 8.18.0 - ajv-formats: 3.0.1(ajv@8.18.0) - jsonc-parser: 3.3.1 - picomatch: 4.0.4 - rxjs: 7.8.2 - source-map: 0.7.6 - optionalDependencies: - chokidar: 5.0.0 - '@angular-devkit/core@21.2.7(chokidar@5.0.0)': dependencies: ajv: 8.18.0 @@ -17652,16 +17162,6 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/schematics@21.2.4(chokidar@5.0.0)': - dependencies: - '@angular-devkit/core': 21.2.4(chokidar@5.0.0) - jsonc-parser: 3.3.1 - magic-string: 0.30.21 - ora: 9.3.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - chokidar - '@angular-devkit/schematics@21.2.7(chokidar@5.0.0)': dependencies: '@angular-devkit/core': 21.2.7(chokidar@5.0.0) @@ -17672,11 +17172,11 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-eslint/builder@21.3.1(@angular/cli@21.2.4(@types/node@25.6.0)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)': + '@angular-eslint/builder@21.3.1(@angular/cli@21.2.7(@types/node@25.6.0)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) '@angular-devkit/core': 21.2.7(chokidar@5.0.0) - '@angular/cli': 21.2.4(@types/node@25.6.0)(chokidar@5.0.0) + '@angular/cli': 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) eslint: 10.2.0(jiti@2.6.1) typescript: 6.0.2 transitivePeerDependencies: @@ -17705,13 +17205,13 @@ snapshots: ts-api-utils: 2.5.0(typescript@6.0.2) typescript: 6.0.2 - '@angular-eslint/schematics@21.3.1(@angular-eslint/template-parser@21.3.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(@angular/cli@21.2.4(@types/node@25.6.0)(chokidar@5.0.0))(@typescript-eslint/types@8.58.1)(@typescript-eslint/utils@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(chokidar@5.0.0)(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)': + '@angular-eslint/schematics@21.3.1(@angular-eslint/template-parser@21.3.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(@angular/cli@21.2.7(@types/node@25.6.0)(chokidar@5.0.0))(@typescript-eslint/types@8.58.1)(@typescript-eslint/utils@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(chokidar@5.0.0)(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@angular-devkit/core': 21.2.7(chokidar@5.0.0) '@angular-devkit/schematics': 21.2.7(chokidar@5.0.0) '@angular-eslint/eslint-plugin': 21.3.1(@typescript-eslint/utils@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) '@angular-eslint/eslint-plugin-template': 21.3.1(@angular-eslint/template-parser@21.3.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(@typescript-eslint/types@8.58.1)(@typescript-eslint/utils@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - '@angular/cli': 21.2.4(@types/node@25.6.0)(chokidar@5.0.0) + '@angular/cli': 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) ignore: 7.0.5 semver: 7.7.4 strip-json-comments: 3.1.1 @@ -17742,364 +17242,7 @@ snapshots: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 - '@angular/build@21.2.4(3c6372062760667afc9a02be67cba827)': - dependencies: - '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2102.4(chokidar@5.0.0) - '@angular/compiler': 21.2.8 - '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-split-export-declaration': 7.24.7 - '@inquirer/confirm': 5.1.21(@types/node@25.6.0) - '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) - beasties: 0.4.1 - browserslist: 4.28.2 - esbuild: 0.27.3 - https-proxy-agent: 7.0.6 - istanbul-lib-instrument: 6.0.3 - jsonc-parser: 3.3.1 - listr2: 9.0.5 - magic-string: 0.30.21 - mrmime: 2.0.1 - parse5-html-rewriting-stream: 8.0.0 - picomatch: 4.0.3 - piscina: 5.1.4 - rolldown: 1.0.0-rc.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - sass: 1.97.3 - semver: 7.7.4 - source-map-support: 0.5.21 - tinyglobby: 0.2.15 - tslib: 2.8.1 - typescript: 6.0.2 - undici: 7.24.4 - vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) - watchpack: 2.5.1 - optionalDependencies: - '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) - less: 4.4.2 - lmdb: 3.5.1 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) - postcss: 8.5.6 - tailwindcss: 4.2.2 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/coverage-v8@4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2))(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - '@types/node' - - chokidar - - jiti - - lightningcss - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - '@angular/build@21.2.4(6f268c517dc0eb50f51f0c8f7c4d5261)': - dependencies: - '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2102.4(chokidar@5.0.0) - '@angular/compiler': 21.2.8 - '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-split-export-declaration': 7.24.7 - '@inquirer/confirm': 5.1.21(@types/node@25.6.0) - '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) - beasties: 0.4.1 - browserslist: 4.28.2 - esbuild: 0.27.3 - https-proxy-agent: 7.0.6 - istanbul-lib-instrument: 6.0.3 - jsonc-parser: 3.3.1 - listr2: 9.0.5 - magic-string: 0.30.21 - mrmime: 2.0.1 - parse5-html-rewriting-stream: 8.0.0 - picomatch: 4.0.3 - piscina: 5.1.4 - rolldown: 1.0.0-rc.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - sass: 1.97.3 - semver: 7.7.4 - source-map-support: 0.5.21 - tinyglobby: 0.2.15 - tslib: 2.8.1 - typescript: 6.0.2 - undici: 7.24.4 - vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) - watchpack: 2.5.1 - optionalDependencies: - '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) - less: 4.4.2 - lmdb: 3.5.1 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) - postcss: 8.5.6 - tailwindcss: 4.2.2 - vitest: 4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - '@types/node' - - chokidar - - jiti - - lightningcss - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - '@angular/build@21.2.4(d420cc8f9f399e85da6a2b440ffa8d8e)': - dependencies: - '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2102.4(chokidar@5.0.0) - '@angular/compiler': 21.2.8 - '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-split-export-declaration': 7.24.7 - '@inquirer/confirm': 5.1.21(@types/node@25.6.0) - '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) - beasties: 0.4.1 - browserslist: 4.28.2 - esbuild: 0.27.3 - https-proxy-agent: 7.0.6 - istanbul-lib-instrument: 6.0.3 - jsonc-parser: 3.3.1 - listr2: 9.0.5 - magic-string: 0.30.21 - mrmime: 2.0.1 - parse5-html-rewriting-stream: 8.0.0 - picomatch: 4.0.3 - piscina: 5.1.4 - rolldown: 1.0.0-rc.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - sass: 1.97.3 - semver: 7.7.4 - source-map-support: 0.5.21 - tinyglobby: 0.2.15 - tslib: 2.8.1 - typescript: 6.0.2 - undici: 7.24.4 - vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) - watchpack: 2.5.1 - optionalDependencies: - '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) - less: 4.6.4 - lmdb: 3.5.1 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) - postcss: 8.5.9 - tailwindcss: 4.2.2 - vitest: 4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - '@types/node' - - chokidar - - jiti - - lightningcss - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - '@angular/build@21.2.7(3c6372062760667afc9a02be67cba827)': - dependencies: - '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) - '@angular/compiler': 21.2.8 - '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-split-export-declaration': 7.24.7 - '@inquirer/confirm': 5.1.21(@types/node@25.6.0) - '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) - beasties: 0.4.1 - browserslist: 4.28.2 - esbuild: 0.27.3 - https-proxy-agent: 7.0.6 - istanbul-lib-instrument: 6.0.3 - jsonc-parser: 3.3.1 - listr2: 9.0.5 - magic-string: 0.30.21 - mrmime: 2.0.1 - parse5-html-rewriting-stream: 8.0.0 - picomatch: 4.0.4 - piscina: 5.1.4 - rolldown: 1.0.0-rc.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - sass: 1.97.3 - semver: 7.7.4 - source-map-support: 0.5.21 - tinyglobby: 0.2.15 - tslib: 2.8.1 - typescript: 6.0.2 - undici: 7.24.4 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) - watchpack: 2.5.1 - optionalDependencies: - '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) - less: 4.4.2 - lmdb: 3.5.1 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) - postcss: 8.5.6 - tailwindcss: 4.2.2 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/coverage-v8@4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2))(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - '@types/node' - - chokidar - - jiti - - lightningcss - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - optional: true - - '@angular/build@21.2.7(6f268c517dc0eb50f51f0c8f7c4d5261)': - dependencies: - '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) - '@angular/compiler': 21.2.8 - '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-split-export-declaration': 7.24.7 - '@inquirer/confirm': 5.1.21(@types/node@25.6.0) - '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) - beasties: 0.4.1 - browserslist: 4.28.2 - esbuild: 0.27.3 - https-proxy-agent: 7.0.6 - istanbul-lib-instrument: 6.0.3 - jsonc-parser: 3.3.1 - listr2: 9.0.5 - magic-string: 0.30.21 - mrmime: 2.0.1 - parse5-html-rewriting-stream: 8.0.0 - picomatch: 4.0.4 - piscina: 5.1.4 - rolldown: 1.0.0-rc.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - sass: 1.97.3 - semver: 7.7.4 - source-map-support: 0.5.21 - tinyglobby: 0.2.15 - tslib: 2.8.1 - typescript: 6.0.2 - undici: 7.24.4 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) - watchpack: 2.5.1 - optionalDependencies: - '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) - less: 4.4.2 - lmdb: 3.5.1 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) - postcss: 8.5.6 - tailwindcss: 4.2.2 - vitest: 4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - '@types/node' - - chokidar - - jiti - - lightningcss - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - optional: true - - '@angular/build@21.2.7(8e65f8e48c9e332d0b9f72f53830b70c)': - dependencies: - '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) - '@angular/compiler': 21.2.8 - '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-split-export-declaration': 7.24.7 - '@inquirer/confirm': 5.1.21(@types/node@25.6.0) - '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) - beasties: 0.4.1 - browserslist: 4.28.2 - esbuild: 0.27.3 - https-proxy-agent: 7.0.6 - istanbul-lib-instrument: 6.0.3 - jsonc-parser: 3.3.1 - listr2: 9.0.5 - magic-string: 0.30.21 - mrmime: 2.0.1 - parse5-html-rewriting-stream: 8.0.0 - picomatch: 4.0.4 - piscina: 5.1.4 - rolldown: 1.0.0-rc.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - sass: 1.97.3 - semver: 7.7.4 - source-map-support: 0.5.21 - tinyglobby: 0.2.15 - tslib: 2.8.1 - typescript: 6.0.2 - undici: 7.24.4 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) - watchpack: 2.5.1 - optionalDependencies: - '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) - less: 4.6.4 - lmdb: 3.5.1 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) - postcss: 8.5.9 - tailwindcss: 4.2.2 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/coverage-v8@4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2))(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - '@types/node' - - chokidar - - jiti - - lightningcss - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - optional: true - - '@angular/build@21.2.7(96b25aee48d0098251f6172ee94d10d9)': + '@angular/build@21.2.7(478511f8927fcfdfc701bd8769da9049)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) @@ -18136,13 +17279,13 @@ snapshots: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) + '@angular/ssr': 21.2.7(9c898ff27dabd87c2e39c7d23b6394cf) less: 4.4.2 lmdb: 3.5.1 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) + ng-packagr: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) postcss: 8.5.6 tailwindcss: 4.2.2 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/coverage-v8@4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2))(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -18158,67 +17301,7 @@ snapshots: - tsx - yaml - '@angular/build@21.2.7(d420cc8f9f399e85da6a2b440ffa8d8e)': - dependencies: - '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) - '@angular/compiler': 21.2.8 - '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-split-export-declaration': 7.24.7 - '@inquirer/confirm': 5.1.21(@types/node@25.6.0) - '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) - beasties: 0.4.1 - browserslist: 4.28.2 - esbuild: 0.27.3 - https-proxy-agent: 7.0.6 - istanbul-lib-instrument: 6.0.3 - jsonc-parser: 3.3.1 - listr2: 9.0.5 - magic-string: 0.30.21 - mrmime: 2.0.1 - parse5-html-rewriting-stream: 8.0.0 - picomatch: 4.0.4 - piscina: 5.1.4 - rolldown: 1.0.0-rc.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - sass: 1.97.3 - semver: 7.7.4 - source-map-support: 0.5.21 - tinyglobby: 0.2.15 - tslib: 2.8.1 - typescript: 6.0.2 - undici: 7.24.4 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) - watchpack: 2.5.1 - optionalDependencies: - '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) - less: 4.6.4 - lmdb: 3.5.1 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) - postcss: 8.5.9 - tailwindcss: 4.2.2 - vitest: 4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - '@types/node' - - chokidar - - jiti - - lightningcss - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - optional: true - - '@angular/build@21.2.7(d8bc8ba821c574250fec37dba526a1f9)': + '@angular/build@21.2.7(7f06c3e844373aa80d924af622ab91ba)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) @@ -18255,13 +17338,13 @@ snapshots: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) + '@angular/ssr': 21.2.7(9c898ff27dabd87c2e39c7d23b6394cf) less: 4.4.2 lmdb: 3.5.1 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) + ng-packagr: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) postcss: 8.5.6 tailwindcss: 4.2.2 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/coverage-v8@4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2))(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -18277,7 +17360,7 @@ snapshots: - tsx - yaml - '@angular/build@21.2.7(d96f627e1308d93e6fd6257980a11d4d)': + '@angular/build@21.2.7(e408ccba00006cab6e3974b844d6f1ab)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) @@ -18314,13 +17397,13 @@ snapshots: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/ssr': 21.2.4(9c898ff27dabd87c2e39c7d23b6394cf) + '@angular/ssr': 21.2.7(9c898ff27dabd87c2e39c7d23b6394cf) less: 4.6.4 lmdb: 3.5.1 - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) + ng-packagr: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) postcss: 8.5.9 tailwindcss: 4.2.2 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/coverage-v8@4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2))(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -18336,7 +17419,7 @@ snapshots: - tsx - yaml - '@angular/cdk@21.2.4(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/cdk@21.2.6(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: '@angular/common': 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) @@ -18345,15 +17428,15 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/cli@21.2.4(@types/node@25.6.0)(chokidar@5.0.0)': + '@angular/cli@21.2.7(@types/node@25.6.0)(chokidar@5.0.0)': dependencies: - '@angular-devkit/architect': 0.2102.4(chokidar@5.0.0) - '@angular-devkit/core': 21.2.4(chokidar@5.0.0) - '@angular-devkit/schematics': 21.2.4(chokidar@5.0.0) + '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) + '@angular-devkit/core': 21.2.7(chokidar@5.0.0) + '@angular-devkit/schematics': 21.2.7(chokidar@5.0.0) '@inquirer/prompts': 7.10.1(@types/node@25.6.0) '@listr2/prompt-adapter-inquirer': 3.0.5(@inquirer/prompts@7.10.1(@types/node@25.6.0))(@types/node@25.6.0)(listr2@9.0.5) '@modelcontextprotocol/sdk': 1.26.0(zod@4.3.6) - '@schematics/angular': 21.2.4(chokidar@5.0.0) + '@schematics/angular': 21.2.7(chokidar@5.0.0) '@yarnpkg/lockfile': 1.1.0 algoliasearch: 5.48.1 ini: 6.0.0 @@ -18416,9 +17499,9 @@ snapshots: '@angular/language-service@21.2.8': {} - '@angular/material@21.2.4(fbde9ce512ad4d9140426a0e0f8b7baf)': + '@angular/material@21.2.6(0a54f93f8328dbd3883663025155f2ad)': dependencies: - '@angular/cdk': 21.2.4(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + '@angular/cdk': 21.2.6(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/common': 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/forms': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) @@ -18460,7 +17543,7 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ssr@21.2.4(9c898ff27dabd87c2e39c7d23b6394cf)': + '@angular/ssr@21.2.7(9c898ff27dabd87c2e39c7d23b6394cf)': dependencies: '@angular/common': 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) @@ -18526,12 +17609,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@5.0.3(astro@6.1.1(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3))': + '@astrojs/mdx@5.0.3(astro@6.1.5(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3))': dependencies: '@astrojs/markdown-remark': 7.1.0 '@mdx-js/mdx': 3.1.1 acorn: 8.16.0 - astro: 6.1.1(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3) + astro: 6.1.5(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3) es-module-lexer: 2.0.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -18545,12 +17628,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@5.0.3(astro@6.1.1(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@6.0.2)(yaml@2.8.3))': + '@astrojs/mdx@5.0.3(astro@6.1.5(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@6.0.2)(yaml@2.8.3))': dependencies: '@astrojs/markdown-remark': 7.1.0 '@mdx-js/mdx': 3.1.1 acorn: 8.16.0 - astro: 6.1.1(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@6.0.2)(yaml@2.8.3) + astro: 6.1.5(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@6.0.2)(yaml@2.8.3) es-module-lexer: 2.0.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -20069,10 +19152,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/runtime-corejs3@7.29.2': - dependencies: - core-js-pure: 3.49.0 - '@babel/runtime@7.28.6': {} '@babel/runtime@7.29.2': {} @@ -20701,21 +19780,21 @@ snapshots: '@discoveryjs/json-ext@0.6.3': {} - '@docsearch/core@4.6.2(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@docsearch/core@4.6.2(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': optionalDependencies: - '@types/react': 18.3.28 + '@types/react': 19.2.14 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) '@docsearch/css@4.6.2': {} - '@docsearch/react@4.6.2(@algolia/client-search@5.50.1)(@types/react@18.3.28)(algoliasearch@5.50.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)': + '@docsearch/react@4.6.2(@algolia/client-search@5.50.1)(@types/react@19.2.14)(algoliasearch@5.50.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)': dependencies: '@algolia/autocomplete-core': 1.19.2(@algolia/client-search@5.50.1)(algoliasearch@5.50.1)(search-insights@2.17.3) - '@docsearch/core': 4.6.2(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docsearch/core': 4.6.2(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docsearch/css': 4.6.2 optionalDependencies: - '@types/react': 18.3.28 + '@types/react': 19.2.14 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) search-insights: 2.17.3 @@ -20723,7 +19802,7 @@ snapshots: - '@algolia/client-search' - algoliasearch - '@docusaurus/babel@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@docusaurus/babel@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -20733,10 +19812,9 @@ snapshots: '@babel/preset-react': 7.28.5(@babel/core@7.29.0) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) '@babel/runtime': 7.29.2 - '@babel/runtime-corejs3': 7.29.2 '@babel/traverse': 7.29.0 - '@docusaurus/logger': 3.9.2 - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/logger': 3.10.0 + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) babel-plugin-dynamic-import-node: 2.3.3 fs-extra: 11.3.4 tslib: 2.8.1 @@ -20749,18 +19827,18 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/bundler@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': + '@docusaurus/bundler@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': dependencies: '@babel/core': 7.29.0 - '@docusaurus/babel': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/cssnano-preset': 3.9.2 - '@docusaurus/logger': 3.9.2 - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/babel': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/cssnano-preset': 3.10.0 + '@docusaurus/logger': 3.10.0 + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) clean-css: 5.3.3 copy-webpack-plugin: 11.0.0(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) - css-loader: 6.11.0(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + css-loader: 6.11.0(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(esbuild@0.27.7)(lightningcss@1.32.0)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) cssnano: 6.1.2(postcss@8.5.9) file-loader: 6.2.0(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) @@ -20776,7 +19854,7 @@ snapshots: webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) webpackbar: 6.0.1(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) optionalDependencies: - '@docusaurus/faster': 3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7) + '@docusaurus/faster': 3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7) transitivePeerDependencies: - '@parcel/css' - '@rspack/core' @@ -20792,16 +19870,16 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/core@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': + '@docusaurus/core@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': dependencies: - '@docusaurus/babel': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/bundler': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/logger': 3.9.2 - '@docusaurus/mdx-loader': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-common': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@mdx-js/react': 3.1.1(@types/react@18.3.28)(react@19.2.5) + '@docusaurus/babel': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/bundler': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/logger': 3.10.0 + '@docusaurus/mdx-loader': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-common': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-validation': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.5) boxen: 6.2.1 chalk: 4.1.2 chokidar: 3.6.0 @@ -20816,7 +19894,7 @@ snapshots: execa: 5.1.1 fs-extra: 11.3.4 html-tags: 3.3.1 - html-webpack-plugin: 5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + html-webpack-plugin: 5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) leven: 3.1.0 lodash: 4.18.1 open: 8.4.2 @@ -20839,8 +19917,9 @@ snapshots: webpack-bundle-analyzer: 4.10.2 webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) webpack-merge: 6.0.1 + optionalDependencies: + '@docusaurus/faster': 3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7) transitivePeerDependencies: - - '@docusaurus/faster' - '@parcel/css' - '@rspack/core' - '@swc/core' @@ -20856,21 +19935,22 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/cssnano-preset@3.9.2': + '@docusaurus/cssnano-preset@3.10.0': dependencies: cssnano-preset-advanced: 6.1.2(postcss@8.5.9) postcss: 8.5.9 postcss-sort-media-queries: 5.2.0(postcss@8.5.9) tslib: 2.8.1 - '@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7)': + '@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7)': dependencies: - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@rspack/core': 1.6.8(@swc/helpers@0.5.21) + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) '@swc/core': 1.15.24(@swc/helpers@0.5.21) '@swc/html': 1.15.24 browserslist: 4.28.2 lightningcss: 1.32.0 + semver: 7.7.4 swc-loader: 0.2.7(@swc/core@1.15.24(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) tslib: 2.8.1 webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) @@ -20880,16 +19960,16 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/logger@3.9.2': + '@docusaurus/logger@3.10.0': dependencies: chalk: 4.1.2 tslib: 2.8.1 - '@docusaurus/mdx-loader@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@docusaurus/mdx-loader@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@docusaurus/logger': 3.9.2 - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/logger': 3.10.0 + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-validation': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@mdx-js/mdx': 3.1.1 '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 @@ -20920,11 +20000,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@docusaurus/module-type-aliases@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@types/history': 4.7.11 - '@types/react': 18.3.28 + '@types/react': 19.2.14 '@types/react-router-config': 5.0.11 '@types/react-router-dom': 5.3.3 react: 19.2.5 @@ -20938,18 +20018,19 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': - dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/logger': 3.9.2 - '@docusaurus/mdx-loader': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-common': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/plugin-content-blog@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@docusaurus/plugin-content-docs@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': + dependencies: + '@docusaurus/core': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/logger': 3.10.0 + '@docusaurus/mdx-loader': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/plugin-content-docs': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/theme-common': 3.10.0(@docusaurus/plugin-content-docs@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-common': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-validation': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) cheerio: 1.0.0-rc.12 + combine-promises: 1.2.0 feed: 4.2.2 fs-extra: 11.3.4 lodash: 4.18.1 @@ -20979,17 +20060,17 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': - dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/logger': 3.9.2 - '@docusaurus/mdx-loader': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/module-type-aliases': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-common': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/plugin-content-docs@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': + dependencies: + '@docusaurus/core': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/logger': 3.10.0 + '@docusaurus/mdx-loader': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/module-type-aliases': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/theme-common': 3.10.0(@docusaurus/plugin-content-docs@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-common': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-validation': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 fs-extra: 11.3.4 @@ -21019,13 +20100,13 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-pages@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': + '@docusaurus/plugin-content-pages@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/mdx-loader': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/core': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/mdx-loader': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-validation': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) fs-extra: 11.3.4 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) @@ -21049,12 +20130,12 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-css-cascade-layers@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': + '@docusaurus/plugin-css-cascade-layers@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/core': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-validation': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -21076,11 +20157,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-debug@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': + '@docusaurus/plugin-debug@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/core': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) fs-extra: 11.3.4 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) @@ -21104,11 +20185,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-analytics@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': + '@docusaurus/plugin-google-analytics@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/core': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-validation': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: 19.2.5 react-dom: 19.2.5(react@19.2.5) tslib: 2.8.1 @@ -21130,12 +20211,12 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-gtag@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': + '@docusaurus/plugin-google-gtag@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@types/gtag.js': 0.0.12 + '@docusaurus/core': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-validation': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@types/gtag.js': 0.0.20 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) tslib: 2.8.1 @@ -21157,11 +20238,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': + '@docusaurus/plugin-google-tag-manager@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/core': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-validation': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: 19.2.5 react-dom: 19.2.5(react@19.2.5) tslib: 2.8.1 @@ -21183,14 +20264,14 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-sitemap@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': + '@docusaurus/plugin-sitemap@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/logger': 3.9.2 - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-common': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/core': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/logger': 3.10.0 + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-common': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-validation': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) fs-extra: 11.3.4 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) @@ -21214,12 +20295,12 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-svgr@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': + '@docusaurus/plugin-svgr@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/core': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-validation': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@svgr/core': 8.1.0(typescript@6.0.2) '@svgr/webpack': 8.1.0(typescript@6.0.2) react: 19.2.5 @@ -21244,23 +20325,23 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/preset-classic@3.9.2(@algolia/client-search@5.50.1)(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@types/react@18.3.28)(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)(typescript@6.0.2)': - dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/plugin-content-pages': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/plugin-css-cascade-layers': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/plugin-debug': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/plugin-google-analytics': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/plugin-google-gtag': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/plugin-google-tag-manager': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/plugin-sitemap': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/plugin-svgr': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/theme-classic': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@types/react@18.3.28)(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/theme-search-algolia': 3.9.2(@algolia/client-search@5.50.1)(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@types/react@18.3.28)(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)(typescript@6.0.2) - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/preset-classic@3.10.0(@algolia/client-search@5.50.1)(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@types/react@19.2.14)(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)(typescript@6.0.2)': + dependencies: + '@docusaurus/core': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/plugin-content-blog': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@docusaurus/plugin-content-docs@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/plugin-content-docs': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/plugin-content-pages': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/plugin-css-cascade-layers': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/plugin-debug': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/plugin-google-analytics': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/plugin-google-gtag': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/plugin-google-tag-manager': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/plugin-sitemap': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/plugin-svgr': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/theme-classic': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@types/react@19.2.14)(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/theme-common': 3.10.0(@docusaurus/plugin-content-docs@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/theme-search-algolia': 3.10.0(@algolia/client-search@5.50.1)(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@types/react@19.2.14)(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)(typescript@6.0.2) + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: 19.2.5 react-dom: 19.2.5(react@19.2.5) transitivePeerDependencies: @@ -21286,26 +20367,27 @@ snapshots: '@docusaurus/react-loadable@6.0.0(react@19.2.5)': dependencies: - '@types/react': 18.3.28 + '@types/react': 19.2.14 react: 19.2.5 - '@docusaurus/theme-classic@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@types/react@18.3.28)(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': - dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/logger': 3.9.2 - '@docusaurus/mdx-loader': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/module-type-aliases': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/plugin-content-pages': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/theme-translations': 3.9.2 - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-common': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@mdx-js/react': 3.1.1(@types/react@18.3.28)(react@19.2.5) + '@docusaurus/theme-classic@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@types/react@19.2.14)(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)': + dependencies: + '@docusaurus/core': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/logger': 3.10.0 + '@docusaurus/mdx-loader': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/module-type-aliases': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/plugin-content-blog': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@docusaurus/plugin-content-docs@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/plugin-content-docs': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/plugin-content-pages': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/theme-common': 3.10.0(@docusaurus/plugin-content-docs@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/theme-translations': 3.10.0 + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-common': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-validation': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.5) clsx: 2.1.1 + copy-text-to-clipboard: 3.2.2 infima: 0.2.0-alpha.45 lodash: 4.18.1 nprogress: 0.2.0 @@ -21336,15 +20418,15 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-common@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@docusaurus/theme-common@3.10.0(@docusaurus/plugin-content-docs@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@docusaurus/mdx-loader': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/module-type-aliases': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-common': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/mdx-loader': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/module-type-aliases': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/plugin-content-docs': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-common': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@types/history': 4.7.11 - '@types/react': 18.3.28 + '@types/react': 19.2.14 '@types/react-router-config': 5.0.11 clsx: 2.1.1 parse-numeric-range: 1.3.0 @@ -21360,16 +20442,17 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-search-algolia@3.9.2(@algolia/client-search@5.50.1)(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@types/react@18.3.28)(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)(typescript@6.0.2)': + '@docusaurus/theme-search-algolia@3.10.0(@algolia/client-search@5.50.1)(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@types/react@19.2.14)(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)(typescript@6.0.2)': dependencies: - '@docsearch/react': 4.6.2(@algolia/client-search@5.50.1)(@types/react@18.3.28)(algoliasearch@5.50.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3) - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/logger': 3.9.2 - '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5))(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/theme-translations': 3.9.2 - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@algolia/autocomplete-core': 1.19.2(@algolia/client-search@5.50.1)(algoliasearch@5.50.1)(search-insights@2.17.3) + '@docsearch/react': 4.6.2(@algolia/client-search@5.50.1)(@types/react@19.2.14)(algoliasearch@5.50.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3) + '@docusaurus/core': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/logger': 3.10.0 + '@docusaurus/plugin-content-docs': 3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) + '@docusaurus/theme-common': 3.10.0(@docusaurus/plugin-content-docs@3.10.0(@docusaurus/faster@3.10.0(@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@swc/helpers@0.5.21)(esbuild@0.27.7))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/theme-translations': 3.10.0 + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-validation': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) algoliasearch: 5.50.1 algoliasearch-helper: 3.28.1(algoliasearch@5.50.1) clsx: 2.1.1 @@ -21401,19 +20484,19 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-translations@3.9.2': + '@docusaurus/theme-translations@3.10.0': dependencies: fs-extra: 11.3.4 tslib: 2.8.1 - '@docusaurus/tsconfig@3.9.2': {} + '@docusaurus/tsconfig@3.10.0': {} - '@docusaurus/types@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@docusaurus/types@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@mdx-js/mdx': 3.1.1 '@types/history': 4.7.11 '@types/mdast': 4.0.4 - '@types/react': 18.3.28 + '@types/react': 19.2.14 commander: 5.1.0 joi: 17.13.3 react: 19.2.5 @@ -21429,9 +20512,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-common@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@docusaurus/utils-common@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) tslib: 2.8.1 transitivePeerDependencies: - '@swc/core' @@ -21442,11 +20525,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-validation@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@docusaurus/utils-validation@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@docusaurus/logger': 3.9.2 - '@docusaurus/utils': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-common': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/logger': 3.10.0 + '@docusaurus/utils': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-common': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) fs-extra: 11.3.4 joi: 17.13.3 js-yaml: 4.1.1 @@ -21461,11 +20544,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils@3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@docusaurus/utils@3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@docusaurus/logger': 3.9.2 - '@docusaurus/types': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-common': 3.9.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/logger': 3.10.0 + '@docusaurus/types': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/utils-common': 3.10.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) escape-string-regexp: 4.0.0 execa: 5.1.1 file-loader: 6.2.0(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) @@ -22392,12 +21475,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@3.1.1(@types/react@18.3.28)(react@19.2.5)': - dependencies: - '@types/mdx': 2.0.13 - '@types/react': 18.3.28 - react: 19.2.5 - '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5)': dependencies: '@types/mdx': 2.0.13 @@ -22513,8 +21590,39 @@ snapshots: - react-dom - utf-8-validate + '@module-federation/enhanced@2.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.21))(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7))': + dependencies: + '@module-federation/bridge-react-webpack-plugin': 2.3.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/cli': 2.3.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@6.0.2) + '@module-federation/data-prefetch': 2.3.1(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@module-federation/dts-plugin': 2.3.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@6.0.2) + '@module-federation/error-codes': 2.3.1 + '@module-federation/inject-external-runtime-core-plugin': 2.3.1(@module-federation/runtime-tools@2.3.1) + '@module-federation/managers': 2.3.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/manifest': 2.3.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@6.0.2) + '@module-federation/rspack': 2.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.21))(node-fetch@2.7.0(encoding@0.1.13))(typescript@6.0.2) + '@module-federation/runtime-tools': 2.3.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/sdk': 2.3.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/webpack-bundler-runtime': 2.3.1(node-fetch@2.7.0(encoding@0.1.13)) + schema-utils: 4.3.3 + tapable: 2.3.0 + upath: 2.0.1 + optionalDependencies: + typescript: 6.0.2 + webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) + transitivePeerDependencies: + - '@rspack/core' + - bufferutil + - debug + - node-fetch + - react + - react-dom + - utf-8-validate + '@module-federation/error-codes@0.21.6': {} + '@module-federation/error-codes@0.22.0': {} + '@module-federation/error-codes@2.3.1': {} '@module-federation/inject-external-runtime-core-plugin@2.3.1(@module-federation/runtime-tools@2.3.1)': @@ -22564,6 +21672,26 @@ snapshots: - utf-8-validate - vue-tsc + '@module-federation/node@2.7.39(@rspack/core@1.7.11(@swc/helpers@0.5.21))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7))': + dependencies: + '@module-federation/enhanced': 2.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.21))(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + '@module-federation/runtime': 2.3.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/sdk': 2.3.1(node-fetch@2.7.0(encoding@0.1.13)) + encoding: 0.1.13 + node-fetch: 2.7.0(encoding@0.1.13) + tapable: 2.3.0 + optionalDependencies: + webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) + transitivePeerDependencies: + - '@rspack/core' + - bufferutil + - debug + - react + - react-dom + - typescript + - utf-8-validate + - vue-tsc + '@module-federation/rspack@2.3.1(@rspack/core@1.6.8(@swc/helpers@0.5.21))(node-fetch@2.7.0(encoding@0.1.13))(typescript@6.0.2)': dependencies: '@module-federation/bridge-react-webpack-plugin': 2.3.1(node-fetch@2.7.0(encoding@0.1.13)) @@ -22582,11 +21710,34 @@ snapshots: - node-fetch - utf-8-validate + '@module-federation/rspack@2.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.21))(node-fetch@2.7.0(encoding@0.1.13))(typescript@6.0.2)': + dependencies: + '@module-federation/bridge-react-webpack-plugin': 2.3.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/dts-plugin': 2.3.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@6.0.2) + '@module-federation/inject-external-runtime-core-plugin': 2.3.1(@module-federation/runtime-tools@2.3.1) + '@module-federation/managers': 2.3.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/manifest': 2.3.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@6.0.2) + '@module-federation/runtime-tools': 2.3.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/sdk': 2.3.1(node-fetch@2.7.0(encoding@0.1.13)) + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) + optionalDependencies: + typescript: 6.0.2 + transitivePeerDependencies: + - bufferutil + - debug + - node-fetch + - utf-8-validate + '@module-federation/runtime-core@0.21.6': dependencies: '@module-federation/error-codes': 0.21.6 '@module-federation/sdk': 0.21.6 + '@module-federation/runtime-core@0.22.0': + dependencies: + '@module-federation/error-codes': 0.22.0 + '@module-federation/sdk': 0.22.0 + '@module-federation/runtime-core@2.3.1(node-fetch@2.7.0(encoding@0.1.13))': dependencies: '@module-federation/error-codes': 2.3.1 @@ -22599,6 +21750,11 @@ snapshots: '@module-federation/runtime': 0.21.6 '@module-federation/webpack-bundler-runtime': 0.21.6 + '@module-federation/runtime-tools@0.22.0': + dependencies: + '@module-federation/runtime': 0.22.0 + '@module-federation/webpack-bundler-runtime': 0.22.0 + '@module-federation/runtime-tools@2.3.1(node-fetch@2.7.0(encoding@0.1.13))': dependencies: '@module-federation/runtime': 2.3.1(node-fetch@2.7.0(encoding@0.1.13)) @@ -22612,6 +21768,12 @@ snapshots: '@module-federation/runtime-core': 0.21.6 '@module-federation/sdk': 0.21.6 + '@module-federation/runtime@0.22.0': + dependencies: + '@module-federation/error-codes': 0.22.0 + '@module-federation/runtime-core': 0.22.0 + '@module-federation/sdk': 0.22.0 + '@module-federation/runtime@2.3.1(node-fetch@2.7.0(encoding@0.1.13))': dependencies: '@module-federation/error-codes': 2.3.1 @@ -22622,6 +21784,8 @@ snapshots: '@module-federation/sdk@0.21.6': {} + '@module-federation/sdk@0.22.0': {} + '@module-federation/sdk@2.3.1(node-fetch@2.7.0(encoding@0.1.13))': optionalDependencies: node-fetch: 2.7.0(encoding@0.1.13) @@ -22637,6 +21801,11 @@ snapshots: '@module-federation/runtime': 0.21.6 '@module-federation/sdk': 0.21.6 + '@module-federation/webpack-bundler-runtime@0.22.0': + dependencies: + '@module-federation/runtime': 0.22.0 + '@module-federation/sdk': 0.22.0 + '@module-federation/webpack-bundler-runtime@2.3.1(node-fetch@2.7.0(encoding@0.1.13))': dependencies: '@module-federation/error-codes': 2.3.1 @@ -22768,13 +21937,7 @@ snapshots: '@netlify/types@2.6.0': {} - '@ngtools/webpack@21.2.4(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3))': - dependencies: - '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) - typescript: 6.0.2 - webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) - - '@ngtools/webpack@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3))': + '@ngtools/webpack@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7))': dependencies: '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) typescript: 6.0.2 @@ -22852,10 +22015,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@nx/angular@22.6.5(c9fba921d0a0df3dadfac611be078779)': + '@nx/angular@22.6.5(f41ea577200f0ac9bb38e70364e33be3)': dependencies: - '@angular-devkit/core': 21.2.4(chokidar@5.0.0) - '@angular-devkit/schematics': 21.2.4(chokidar@5.0.0) + '@angular-devkit/core': 21.2.7(chokidar@5.0.0) + '@angular-devkit/schematics': 21.2.7(chokidar@5.0.0) '@nx/devkit': 22.6.5(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@nx/eslint': 22.6.5(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@zkochan/js-yaml@0.0.7)(eslint@10.2.0(jiti@2.6.1))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@nx/js': 22.6.5(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) @@ -22865,7 +22028,7 @@ snapshots: '@nx/webpack': 22.6.5(@babel/traverse@7.29.0)(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(lightningcss@1.32.0)(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2) '@nx/workspace': 22.6.5(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)) '@phenomnomnominal/tsquery': 6.1.4(typescript@6.0.2) - '@schematics/angular': 21.2.4(chokidar@5.0.0) + '@schematics/angular': 21.2.7(chokidar@5.0.0) '@typescript-eslint/type-utils': 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) enquirer: 2.3.6 magic-string: 0.30.21 @@ -22876,9 +22039,9 @@ snapshots: tslib: 2.8.1 webpack-merge: 5.10.0 optionalDependencies: - '@angular-devkit/build-angular': 21.2.7(58973c4e634acdaeac68b624dc858cb9) - '@angular/build': 21.2.7(d420cc8f9f399e85da6a2b440ffa8d8e) - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) + '@angular-devkit/build-angular': 21.2.7(6ab073f1cd1e044d9f0df9f978b48896) + '@angular/build': 21.2.7(e408ccba00006cab6e3974b844d6f1ab) + ng-packagr: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) transitivePeerDependencies: - '@babel/traverse' - '@module-federation/enhanced' @@ -22914,20 +22077,20 @@ snapshots: - webpack-cli - webpack-hot-middleware - '@nx/angular@22.7.0-beta.12(511707817f1ccc80b4289f18bce96908)': + '@nx/angular@22.7.0-beta.12(8ebe91e9c9195d5c85ef02c48c9502a4)': dependencies: - '@angular-devkit/core': 21.2.4(chokidar@5.0.0) - '@angular-devkit/schematics': 21.2.4(chokidar@5.0.0) + '@angular-devkit/core': 21.2.7(chokidar@5.0.0) + '@angular-devkit/schematics': 21.2.7(chokidar@5.0.0) '@nx/devkit': 22.7.0-beta.12(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@nx/eslint': 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@zkochan/js-yaml@0.0.7)(eslint@10.2.0(jiti@2.6.1))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@nx/js': 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@nx/module-federation': 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/helpers@0.5.21)(esbuild@0.27.7)(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - '@nx/rspack': 22.7.0-beta.12(6da0787167c2126bb145645b8d02b4b9) + '@nx/rspack': 22.7.0-beta.12(630dfb1ac77d1c55084cce881cc0b9da) '@nx/web': 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) - '@nx/webpack': 22.7.0-beta.12(@babel/traverse@7.29.0)(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(lightningcss@1.32.0)(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2) + '@nx/webpack': 22.7.0-beta.12(@babel/traverse@7.29.0)(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(html-webpack-plugin@5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(lightningcss@1.32.0)(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2) '@nx/workspace': 22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)) '@phenomnomnominal/tsquery': 6.1.4(typescript@6.0.2) - '@schematics/angular': 21.2.4(chokidar@5.0.0) + '@schematics/angular': 21.2.7(chokidar@5.0.0) '@typescript-eslint/type-utils': 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) enquirer: 2.3.6 magic-string: 0.30.21 @@ -22938,9 +22101,9 @@ snapshots: tslib: 2.8.1 webpack-merge: 5.10.0 optionalDependencies: - '@angular-devkit/build-angular': 21.2.4(58973c4e634acdaeac68b624dc858cb9) - '@angular/build': 21.2.4(d420cc8f9f399e85da6a2b440ffa8d8e) - ng-packagr: 21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) + '@angular-devkit/build-angular': 21.2.7(181b35eb2462485c944a6ce64e49407b) + '@angular/build': 21.2.7(e408ccba00006cab6e3974b844d6f1ab) + ng-packagr: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2) transitivePeerDependencies: - '@babel/traverse' - '@module-federation/enhanced' @@ -23031,12 +22194,12 @@ snapshots: tslib: 2.8.1 yargs-parser: 21.1.1 - '@nx/eslint-plugin@22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@typescript-eslint/parser@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)': + '@nx/eslint-plugin@22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)': dependencies: '@nx/devkit': 22.7.0-beta.12(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@nx/js': 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@phenomnomnominal/tsquery': 6.1.4(typescript@6.0.2) - '@typescript-eslint/parser': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/parser': 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) '@typescript-eslint/type-utils': 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) '@typescript-eslint/utils': 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) chalk: 4.1.2 @@ -23431,10 +22594,10 @@ snapshots: - webpack-cli - webpack-hot-middleware - '@nx/rspack@22.7.0-beta.12(6da0787167c2126bb145645b8d02b4b9)': + '@nx/rspack@22.7.0-beta.12(630dfb1ac77d1c55084cce881cc0b9da)': dependencies: - '@module-federation/enhanced': 2.3.1(@rspack/core@1.6.8(@swc/helpers@0.5.21))(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) - '@module-federation/node': 2.7.39(@rspack/core@1.6.8(@swc/helpers@0.5.21))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + '@module-federation/enhanced': 2.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.21))(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + '@module-federation/node': 2.7.39(@rspack/core@1.7.11(@swc/helpers@0.5.21))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) '@nx/devkit': 22.7.0-beta.12(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@nx/js': 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@nx/module-federation': 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/helpers@0.5.21)(esbuild@0.27.7)(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) @@ -23490,7 +22653,7 @@ snapshots: - webpack-cli - webpack-hot-middleware - '@nx/storybook@22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@zkochan/js-yaml@0.0.7)(eslint@10.2.0(jiti@2.6.1))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2)': + '@nx/storybook@22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@zkochan/js-yaml@0.0.7)(eslint@10.2.0(jiti@2.6.1))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2)': dependencies: '@nx/cypress': 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(@zkochan/js-yaml@0.0.7)(eslint@10.2.0(jiti@2.6.1))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2) '@nx/devkit': 22.7.0-beta.12(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) @@ -23498,7 +22661,7 @@ snapshots: '@nx/js': 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@phenomnomnominal/tsquery': 6.1.4(typescript@6.0.2) semver: 7.7.4 - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) tslib: 2.8.1 transitivePeerDependencies: - '@babel/traverse' @@ -23513,11 +22676,11 @@ snapshots: - typescript - verdaccio - '@nx/vite@22.6.5(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2)': + '@nx/vite@22.6.5(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4)': dependencies: '@nx/devkit': 22.6.5(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@nx/js': 22.6.5(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) - '@nx/vitest': 22.6.5(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2) + '@nx/vitest': 22.6.5(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) '@phenomnomnominal/tsquery': 6.1.4(typescript@6.0.2) ajv: 8.18.0 enquirer: 2.3.6 @@ -23526,7 +22689,7 @@ snapshots: tsconfig-paths: 4.2.0 tslib: 2.8.1 vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3) - vitest: 4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -23537,11 +22700,11 @@ snapshots: - typescript - verdaccio - '@nx/vite@22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2)': + '@nx/vite@22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4)': dependencies: '@nx/devkit': 22.7.0-beta.12(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@nx/js': 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) - '@nx/vitest': 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2) + '@nx/vitest': 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) '@phenomnomnominal/tsquery': 6.1.4(typescript@6.0.2) ajv: 8.18.0 enquirer: 2.3.6 @@ -23550,7 +22713,7 @@ snapshots: tsconfig-paths: 4.2.0 tslib: 2.8.1 vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3) - vitest: 4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -23561,7 +22724,7 @@ snapshots: - typescript - verdaccio - '@nx/vitest@22.6.5(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2)': + '@nx/vitest@22.6.5(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4)': dependencies: '@nx/devkit': 22.6.5(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@nx/js': 22.6.5(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) @@ -23570,7 +22733,7 @@ snapshots: tslib: 2.8.1 optionalDependencies: vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3) - vitest: 4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -23581,7 +22744,7 @@ snapshots: - typescript - verdaccio - '@nx/vitest@22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2)': + '@nx/vitest@22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4)': dependencies: '@nx/devkit': 22.7.0-beta.12(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) '@nx/js': 22.7.0-beta.12(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) @@ -23590,7 +22753,7 @@ snapshots: tslib: 2.8.1 optionalDependencies: vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3) - vitest: 4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -23696,7 +22859,7 @@ snapshots: - verdaccio - webpack-cli - '@nx/webpack@22.7.0-beta.12(@babel/traverse@7.29.0)(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(lightningcss@1.32.0)(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)': + '@nx/webpack@22.7.0-beta.12(@babel/traverse@7.29.0)(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(html-webpack-plugin@5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(lightningcss@1.32.0)(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21)))(typescript@6.0.2)': dependencies: '@babel/core': 7.29.0 '@nx/devkit': 22.7.0-beta.12(nx@22.7.0-beta.12(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.24(@swc/helpers@0.5.21))(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.24(@swc/helpers@0.5.21))) @@ -23707,11 +22870,11 @@ snapshots: babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) browserslist: 4.28.2 copy-webpack-plugin: 14.0.0(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) - css-loader: 6.11.0(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + css-loader: 6.11.0(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) css-minimizer-webpack-plugin: 8.0.0(esbuild@0.27.7)(lightningcss@1.32.0)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) fork-ts-checker-webpack-plugin: 9.1.0(typescript@6.0.2)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) less: 4.5.1 - less-loader: 12.3.2(@rspack/core@1.6.8(@swc/helpers@0.5.21))(less@4.5.1)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + less-loader: 12.3.2(@rspack/core@1.7.11(@swc/helpers@0.5.21))(less@4.5.1)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) license-webpack-plugin: 4.0.2(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) loader-utils: 2.0.4 mini-css-extract-plugin: 2.4.7(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) @@ -23719,11 +22882,11 @@ snapshots: picocolors: 1.1.1 postcss: 8.5.9 postcss-import: 14.1.0(postcss@8.5.9) - postcss-loader: 8.2.1(@rspack/core@1.6.8(@swc/helpers@0.5.21))(postcss@8.5.9)(typescript@6.0.2)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + postcss-loader: 8.2.1(@rspack/core@1.7.11(@swc/helpers@0.5.21))(postcss@8.5.9)(typescript@6.0.2)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) rxjs: 7.8.2 sass: 1.99.0 sass-embedded: 1.99.0 - sass-loader: 16.0.7(@rspack/core@1.6.8(@swc/helpers@0.5.21))(sass-embedded@1.99.0)(sass@1.99.0)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + sass-loader: 16.0.7(@rspack/core@1.7.11(@swc/helpers@0.5.21))(sass-embedded@1.99.0)(sass@1.99.0)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) source-map-loader: 5.0.0(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) style-loader: 3.3.4(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) terser-webpack-plugin: 5.4.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) @@ -23733,7 +22896,7 @@ snapshots: webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) webpack-node-externals: 3.0.0 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) transitivePeerDependencies: - '@babel/traverse' - '@parcel/css' @@ -23868,93 +23031,93 @@ snapshots: '@oslojs/encoding@1.1.0': {} - '@oxc-angular/binding-darwin-arm64@0.0.22': + '@oxc-angular/binding-darwin-arm64@0.0.23': optional: true - '@oxc-angular/binding-darwin-x64@0.0.22': + '@oxc-angular/binding-darwin-x64@0.0.23': optional: true - '@oxc-angular/binding-linux-arm64-gnu@0.0.22': + '@oxc-angular/binding-linux-arm64-gnu@0.0.23': optional: true - '@oxc-angular/binding-linux-arm64-musl@0.0.22': + '@oxc-angular/binding-linux-arm64-musl@0.0.23': optional: true - '@oxc-angular/binding-linux-x64-gnu@0.0.22': + '@oxc-angular/binding-linux-x64-gnu@0.0.23': optional: true - '@oxc-angular/binding-linux-x64-musl@0.0.22': + '@oxc-angular/binding-linux-x64-musl@0.0.23': optional: true - '@oxc-angular/binding-win32-arm64-msvc@0.0.22': + '@oxc-angular/binding-win32-arm64-msvc@0.0.23': optional: true - '@oxc-angular/binding-win32-x64-msvc@0.0.22': + '@oxc-angular/binding-win32-x64-msvc@0.0.23': optional: true - '@oxc-angular/vite@0.0.22(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))': + '@oxc-angular/vite@0.0.23(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: obug: 2.1.1 vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3) optionalDependencies: - '@oxc-angular/binding-darwin-arm64': 0.0.22 - '@oxc-angular/binding-darwin-x64': 0.0.22 - '@oxc-angular/binding-linux-arm64-gnu': 0.0.22 - '@oxc-angular/binding-linux-arm64-musl': 0.0.22 - '@oxc-angular/binding-linux-x64-gnu': 0.0.22 - '@oxc-angular/binding-linux-x64-musl': 0.0.22 - '@oxc-angular/binding-win32-arm64-msvc': 0.0.22 - '@oxc-angular/binding-win32-x64-msvc': 0.0.22 + '@oxc-angular/binding-darwin-arm64': 0.0.23 + '@oxc-angular/binding-darwin-x64': 0.0.23 + '@oxc-angular/binding-linux-arm64-gnu': 0.0.23 + '@oxc-angular/binding-linux-arm64-musl': 0.0.23 + '@oxc-angular/binding-linux-x64-gnu': 0.0.23 + '@oxc-angular/binding-linux-x64-musl': 0.0.23 + '@oxc-angular/binding-win32-arm64-msvc': 0.0.23 + '@oxc-angular/binding-win32-x64-msvc': 0.0.23 - '@oxc-parser/binding-android-arm-eabi@0.123.0': + '@oxc-parser/binding-android-arm-eabi@0.124.0': optional: true - '@oxc-parser/binding-android-arm64@0.123.0': + '@oxc-parser/binding-android-arm64@0.124.0': optional: true - '@oxc-parser/binding-darwin-arm64@0.123.0': + '@oxc-parser/binding-darwin-arm64@0.124.0': optional: true - '@oxc-parser/binding-darwin-x64@0.123.0': + '@oxc-parser/binding-darwin-x64@0.124.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.123.0': + '@oxc-parser/binding-freebsd-x64@0.124.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.123.0': + '@oxc-parser/binding-linux-arm-gnueabihf@0.124.0': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.123.0': + '@oxc-parser/binding-linux-arm-musleabihf@0.124.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.123.0': + '@oxc-parser/binding-linux-arm64-gnu@0.124.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.123.0': + '@oxc-parser/binding-linux-arm64-musl@0.124.0': optional: true - '@oxc-parser/binding-linux-ppc64-gnu@0.123.0': + '@oxc-parser/binding-linux-ppc64-gnu@0.124.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.123.0': + '@oxc-parser/binding-linux-riscv64-gnu@0.124.0': optional: true - '@oxc-parser/binding-linux-riscv64-musl@0.123.0': + '@oxc-parser/binding-linux-riscv64-musl@0.124.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.123.0': + '@oxc-parser/binding-linux-s390x-gnu@0.124.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.123.0': + '@oxc-parser/binding-linux-x64-gnu@0.124.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.123.0': + '@oxc-parser/binding-linux-x64-musl@0.124.0': optional: true - '@oxc-parser/binding-openharmony-arm64@0.123.0': + '@oxc-parser/binding-openharmony-arm64@0.124.0': optional: true - '@oxc-parser/binding-wasm32-wasi@0.123.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@oxc-parser/binding-wasm32-wasi@0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: '@napi-rs/wasm-runtime': 1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) transitivePeerDependencies: @@ -23962,23 +23125,21 @@ snapshots: - '@emnapi/runtime' optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.123.0': + '@oxc-parser/binding-win32-arm64-msvc@0.124.0': optional: true - '@oxc-parser/binding-win32-ia32-msvc@0.123.0': + '@oxc-parser/binding-win32-ia32-msvc@0.124.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.123.0': + '@oxc-parser/binding-win32-x64-msvc@0.124.0': optional: true - '@oxc-project/runtime@0.123.0': {} + '@oxc-project/runtime@0.124.0': {} '@oxc-project/types@0.113.0': {} '@oxc-project/types@0.122.0': {} - '@oxc-project/types@0.123.0': {} - '@oxc-project/types@0.124.0': {} '@oxc-resolver/binding-android-arm-eabi@11.19.1': @@ -24046,55 +23207,55 @@ snapshots: '@oxc-resolver/binding-win32-x64-msvc@11.19.1': optional: true - '@oxc-transform/binding-android-arm-eabi@0.123.0': + '@oxc-transform/binding-android-arm-eabi@0.124.0': optional: true - '@oxc-transform/binding-android-arm64@0.123.0': + '@oxc-transform/binding-android-arm64@0.124.0': optional: true - '@oxc-transform/binding-darwin-arm64@0.123.0': + '@oxc-transform/binding-darwin-arm64@0.124.0': optional: true - '@oxc-transform/binding-darwin-x64@0.123.0': + '@oxc-transform/binding-darwin-x64@0.124.0': optional: true - '@oxc-transform/binding-freebsd-x64@0.123.0': + '@oxc-transform/binding-freebsd-x64@0.124.0': optional: true - '@oxc-transform/binding-linux-arm-gnueabihf@0.123.0': + '@oxc-transform/binding-linux-arm-gnueabihf@0.124.0': optional: true - '@oxc-transform/binding-linux-arm-musleabihf@0.123.0': + '@oxc-transform/binding-linux-arm-musleabihf@0.124.0': optional: true - '@oxc-transform/binding-linux-arm64-gnu@0.123.0': + '@oxc-transform/binding-linux-arm64-gnu@0.124.0': optional: true - '@oxc-transform/binding-linux-arm64-musl@0.123.0': + '@oxc-transform/binding-linux-arm64-musl@0.124.0': optional: true - '@oxc-transform/binding-linux-ppc64-gnu@0.123.0': + '@oxc-transform/binding-linux-ppc64-gnu@0.124.0': optional: true - '@oxc-transform/binding-linux-riscv64-gnu@0.123.0': + '@oxc-transform/binding-linux-riscv64-gnu@0.124.0': optional: true - '@oxc-transform/binding-linux-riscv64-musl@0.123.0': + '@oxc-transform/binding-linux-riscv64-musl@0.124.0': optional: true - '@oxc-transform/binding-linux-s390x-gnu@0.123.0': + '@oxc-transform/binding-linux-s390x-gnu@0.124.0': optional: true - '@oxc-transform/binding-linux-x64-gnu@0.123.0': + '@oxc-transform/binding-linux-x64-gnu@0.124.0': optional: true - '@oxc-transform/binding-linux-x64-musl@0.123.0': + '@oxc-transform/binding-linux-x64-musl@0.124.0': optional: true - '@oxc-transform/binding-openharmony-arm64@0.123.0': + '@oxc-transform/binding-openharmony-arm64@0.124.0': optional: true - '@oxc-transform/binding-wasm32-wasi@0.123.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@oxc-transform/binding-wasm32-wasi@0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: '@napi-rs/wasm-runtime': 1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) transitivePeerDependencies: @@ -24102,31 +23263,31 @@ snapshots: - '@emnapi/runtime' optional: true - '@oxc-transform/binding-win32-arm64-msvc@0.123.0': + '@oxc-transform/binding-win32-arm64-msvc@0.124.0': optional: true - '@oxc-transform/binding-win32-ia32-msvc@0.123.0': + '@oxc-transform/binding-win32-ia32-msvc@0.124.0': optional: true - '@oxc-transform/binding-win32-x64-msvc@0.123.0': + '@oxc-transform/binding-win32-x64-msvc@0.124.0': optional: true - '@oxlint-tsgolint/darwin-arm64@0.19.0': + '@oxlint-tsgolint/darwin-arm64@0.20.0': optional: true - '@oxlint-tsgolint/darwin-x64@0.19.0': + '@oxlint-tsgolint/darwin-x64@0.20.0': optional: true - '@oxlint-tsgolint/linux-arm64@0.19.0': + '@oxlint-tsgolint/linux-arm64@0.20.0': optional: true - '@oxlint-tsgolint/linux-x64@0.19.0': + '@oxlint-tsgolint/linux-x64@0.20.0': optional: true - '@oxlint-tsgolint/win32-arm64@0.19.0': + '@oxlint-tsgolint/win32-arm64@0.20.0': optional: true - '@oxlint-tsgolint/win32-x64@0.19.0': + '@oxlint-tsgolint/win32-x64@0.20.0': optional: true '@oxlint/binding-android-arm-eabi@1.59.0': @@ -24628,35 +23789,67 @@ snapshots: '@rspack/binding-darwin-arm64@1.6.8': optional: true + '@rspack/binding-darwin-arm64@1.7.11': + optional: true + '@rspack/binding-darwin-x64@1.6.8': optional: true + '@rspack/binding-darwin-x64@1.7.11': + optional: true + '@rspack/binding-linux-arm64-gnu@1.6.8': optional: true + '@rspack/binding-linux-arm64-gnu@1.7.11': + optional: true + '@rspack/binding-linux-arm64-musl@1.6.8': optional: true + '@rspack/binding-linux-arm64-musl@1.7.11': + optional: true + '@rspack/binding-linux-x64-gnu@1.6.8': optional: true + '@rspack/binding-linux-x64-gnu@1.7.11': + optional: true + '@rspack/binding-linux-x64-musl@1.6.8': optional: true + '@rspack/binding-linux-x64-musl@1.7.11': + optional: true + '@rspack/binding-wasm32-wasi@1.6.8': dependencies: '@napi-rs/wasm-runtime': 1.0.7 optional: true + '@rspack/binding-wasm32-wasi@1.7.11': + dependencies: + '@napi-rs/wasm-runtime': 1.0.7 + optional: true + '@rspack/binding-win32-arm64-msvc@1.6.8': optional: true + '@rspack/binding-win32-arm64-msvc@1.7.11': + optional: true + '@rspack/binding-win32-ia32-msvc@1.6.8': optional: true + '@rspack/binding-win32-ia32-msvc@1.7.11': + optional: true + '@rspack/binding-win32-x64-msvc@1.6.8': optional: true + '@rspack/binding-win32-x64-msvc@1.7.11': + optional: true + '@rspack/binding@1.6.8': optionalDependencies: '@rspack/binding-darwin-arm64': 1.6.8 @@ -24670,6 +23863,19 @@ snapshots: '@rspack/binding-win32-ia32-msvc': 1.6.8 '@rspack/binding-win32-x64-msvc': 1.6.8 + '@rspack/binding@1.7.11': + optionalDependencies: + '@rspack/binding-darwin-arm64': 1.7.11 + '@rspack/binding-darwin-x64': 1.7.11 + '@rspack/binding-linux-arm64-gnu': 1.7.11 + '@rspack/binding-linux-arm64-musl': 1.7.11 + '@rspack/binding-linux-x64-gnu': 1.7.11 + '@rspack/binding-linux-x64-musl': 1.7.11 + '@rspack/binding-wasm32-wasi': 1.7.11 + '@rspack/binding-win32-arm64-msvc': 1.7.11 + '@rspack/binding-win32-ia32-msvc': 1.7.11 + '@rspack/binding-win32-x64-msvc': 1.7.11 + '@rspack/core@1.6.8(@swc/helpers@0.5.21)': dependencies: '@module-federation/runtime-tools': 0.21.6 @@ -24678,6 +23884,14 @@ snapshots: optionalDependencies: '@swc/helpers': 0.5.21 + '@rspack/core@1.7.11(@swc/helpers@0.5.21)': + dependencies: + '@module-federation/runtime-tools': 0.22.0 + '@rspack/binding': 1.7.11 + '@rspack/lite-tapable': 1.1.0 + optionalDependencies: + '@swc/helpers': 0.5.21 + '@rspack/dev-server@1.2.1(@rspack/core@1.6.8(@swc/helpers@0.5.21))(tslib@2.8.1)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7))': dependencies: '@rspack/core': 1.6.8(@swc/helpers@0.5.21) @@ -24726,10 +23940,10 @@ snapshots: optionalDependencies: webpack-hot-middleware: 2.26.1 - '@schematics/angular@21.2.4(chokidar@5.0.0)': + '@schematics/angular@21.2.7(chokidar@5.0.0)': dependencies: - '@angular-devkit/core': 21.2.4(chokidar@5.0.0) - '@angular-devkit/schematics': 21.2.4(chokidar@5.0.0) + '@angular-devkit/core': 21.2.7(chokidar@5.0.0) + '@angular-devkit/schematics': 21.2.7(chokidar@5.0.0) jsonc-parser: 3.3.1 transitivePeerDependencies: - chokidar @@ -24975,15 +24189,15 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@storybook/addon-docs@10.3.5(@types/react@19.2.14)(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7))': + '@storybook/addon-docs@10.3.5(@types/react@19.2.14)(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7))': dependencies: '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.5) - '@storybook/csf-plugin': 10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + '@storybook/csf-plugin': 10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) '@storybook/icons': 2.0.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@storybook/react-dom-shim': 10.3.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)) + '@storybook/react-dom-shim': 10.3.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)) react: 19.2.5 react-dom: 19.2.5(react@19.2.5) - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' @@ -24992,70 +24206,39 @@ snapshots: - vite - webpack - '@storybook/addon-links@10.3.5(react@19.2.5)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))': + '@storybook/addon-links@10.3.5(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))': dependencies: '@storybook/global': 5.0.0 - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) optionalDependencies: react: 19.2.5 - '@storybook/addon-vitest@10.3.5(@vitest/browser-playwright@4.1.2)(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(@vitest/runner@4.1.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vitest@4.1.2)': + '@storybook/addon-vitest@10.3.5(@vitest/browser-playwright@4.1.4)(@vitest/browser@4.1.4)(@vitest/runner@4.1.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vitest@4.1.4)': dependencies: '@storybook/global': 5.0.0 '@storybook/icons': 2.0.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) optionalDependencies: - '@vitest/browser': 4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2) - '@vitest/browser-playwright': 4.1.2(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2) + '@vitest/browser': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) + '@vitest/browser-playwright': 4.1.4(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) '@vitest/runner': 4.1.4 - vitest: 4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) transitivePeerDependencies: - react - react-dom - '@storybook/angular@10.3.3(997df74c02245c6578b235f702d52bf0)': - dependencies: - '@angular-devkit/architect': 0.2102.6(chokidar@5.0.0) - '@angular-devkit/build-angular': 21.2.4(58973c4e634acdaeac68b624dc858cb9) - '@angular-devkit/core': 21.2.4(chokidar@5.0.0) - '@angular/common': 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/compiler': 21.2.8 - '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) - '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-browser-dynamic': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))) - '@storybook/builder-webpack5': 10.3.3(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2) - '@storybook/global': 5.0.0 - rxjs: 7.8.2 - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - telejson: 8.0.0 - ts-dedent: 2.2.0 - tsconfig-paths-webpack-plugin: 4.2.0 - typescript: 6.0.2 - webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) - optionalDependencies: - '@angular/animations': 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/cli': 21.2.4(@types/node@25.6.0)(chokidar@5.0.0) - zone.js: 0.16.1 - transitivePeerDependencies: - - '@rspack/core' - - '@swc/core' - - esbuild - - uglify-js - - webpack-cli - - '@storybook/angular@10.3.5(3a78019390f1229089d9b40c9648e520)': + '@storybook/angular@10.3.5(0705d093f0757a9b48b20cfb74007f8e)': dependencies: - '@angular-devkit/architect': 0.2102.6(chokidar@5.0.0) - '@angular-devkit/build-angular': 21.2.4(3964406a4d3b8b07c14eff877b373c9b) - '@angular-devkit/core': 21.2.4(chokidar@5.0.0) + '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) + '@angular-devkit/build-angular': 21.2.7(181b35eb2462485c944a6ce64e49407b) + '@angular-devkit/core': 21.2.7(chokidar@5.0.0) '@angular/common': 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/compiler': 21.2.8 '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-browser-dynamic': 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))) - '@storybook/builder-webpack5': 10.3.5(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2) + '@storybook/builder-webpack5': 10.3.5(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2) '@storybook/global': 5.0.0 rxjs: 7.8.2 storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -25066,7 +24249,7 @@ snapshots: webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) optionalDependencies: '@angular/animations': 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/cli': 21.2.4(@types/node@25.6.0)(chokidar@5.0.0) + '@angular/cli': 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) zone.js: 0.16.1 transitivePeerDependencies: - '@rspack/core' @@ -25075,17 +24258,6 @@ snapshots: - uglify-js - webpack-cli - '@storybook/builder-vite@10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7))': - dependencies: - '@storybook/csf-plugin': 10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - ts-dedent: 2.2.0 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3) - transitivePeerDependencies: - - esbuild - - rollup - - webpack - '@storybook/builder-vite@10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7))': dependencies: '@storybook/csf-plugin': 10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) @@ -25097,42 +24269,15 @@ snapshots: - rollup - webpack - '@storybook/builder-webpack5@10.3.3(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2)': - dependencies: - '@storybook/core-webpack': 10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)) - case-sensitive-paths-webpack-plugin: 2.4.0 - cjs-module-lexer: 1.4.3 - css-loader: 7.1.4(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) - es-module-lexer: 1.7.0 - fork-ts-checker-webpack-plugin: 9.1.0(typescript@6.0.2)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) - html-webpack-plugin: 5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) - magic-string: 0.30.21 - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - style-loader: 4.0.0(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) - terser-webpack-plugin: 5.4.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) - ts-dedent: 2.2.0 - webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) - webpack-dev-middleware: 6.1.3(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) - webpack-hot-middleware: 2.26.1 - webpack-virtual-modules: 0.6.2 - optionalDependencies: - typescript: 6.0.2 - transitivePeerDependencies: - - '@rspack/core' - - '@swc/core' - - esbuild - - uglify-js - - webpack-cli - - '@storybook/builder-webpack5@10.3.5(@rspack/core@1.6.8(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2)': + '@storybook/builder-webpack5@10.3.5(@rspack/core@1.7.11(@swc/helpers@0.5.21))(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2)': dependencies: '@storybook/core-webpack': 10.3.5(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)) case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.3 - css-loader: 7.1.4(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + css-loader: 7.1.4(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) es-module-lexer: 1.7.0 fork-ts-checker-webpack-plugin: 9.1.0(typescript@6.0.2)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) - html-webpack-plugin: 5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + html-webpack-plugin: 5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) magic-string: 0.30.21 storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) style-loader: 4.0.0(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) @@ -25151,26 +24296,11 @@ snapshots: - uglify-js - webpack-cli - '@storybook/core-webpack@10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))': - dependencies: - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - ts-dedent: 2.2.0 - '@storybook/core-webpack@10.3.5(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))': dependencies: storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) ts-dedent: 2.2.0 - '@storybook/csf-plugin@10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7))': - dependencies: - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - unplugin: 2.3.11 - optionalDependencies: - esbuild: 0.27.7 - rollup: 4.60.1 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3) - webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) - '@storybook/csf-plugin@10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7))': dependencies: storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -25188,11 +24318,11 @@ snapshots: react: 19.2.5 react-dom: 19.2.5(react@19.2.5) - '@storybook/react-dom-shim@10.3.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))': + '@storybook/react-dom-shim@10.3.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))': dependencies: react: 19.2.5 react-dom: 19.2.5(react@19.2.5) - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.0)': dependencies: @@ -25570,6 +24700,12 @@ snapshots: path-browserify: 1.0.1 tinyglobby: 0.2.16 + '@ts-morph/common@0.29.0': + dependencies: + minimatch: 10.2.5 + path-browserify: 1.0.1 + tinyglobby: 0.2.16 + '@tufjs/canonical-json@2.0.0': {} '@tufjs/models@4.1.0': @@ -25798,7 +24934,7 @@ snapshots: '@types/geojson@7946.0.16': {} - '@types/gtag.js@0.0.12': {} + '@types/gtag.js@0.0.20': {} '@types/hammerjs@2.0.46': {} @@ -25862,16 +24998,10 @@ snapshots: '@types/prismjs@1.26.6': {} - '@types/prop-types@15.7.15': {} - '@types/qs@6.15.0': {} '@types/range-parser@1.2.7': {} - '@types/react-dom@18.3.7(@types/react@18.3.28)': - dependencies: - '@types/react': 18.3.28 - '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: '@types/react': 19.2.14 @@ -25879,24 +25009,19 @@ snapshots: '@types/react-router-config@5.0.11': dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.28 + '@types/react': 19.2.14 '@types/react-router': 5.1.20 '@types/react-router-dom@5.3.3': dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.28 + '@types/react': 19.2.14 '@types/react-router': 5.1.20 '@types/react-router@5.1.20': dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.28 - - '@types/react@18.3.28': - dependencies: - '@types/prop-types': 15.7.15 - csstype: 3.2.3 + '@types/react': 19.2.14 '@types/react@19.2.14': dependencies: @@ -25956,22 +25081,6 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/type-utils': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/utils': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/visitor-keys': 8.58.0 - eslint: 10.2.0(jiti@2.6.1) - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -25988,18 +25097,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)': - dependencies: - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) - '@typescript-eslint/visitor-keys': 8.58.0 - debug: 4.4.3 - eslint: 10.2.0(jiti@2.6.1) - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@typescript-eslint/scope-manager': 8.58.1 @@ -26012,15 +25109,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.58.0(typescript@6.0.2)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.58.1(typescript@6.0.2) - '@typescript-eslint/types': 8.58.1 - debug: 4.4.3 - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/project-service@8.58.1(typescript@6.0.2)': dependencies: '@typescript-eslint/tsconfig-utils': 8.58.1(typescript@6.0.2) @@ -26030,36 +25118,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.58.0': - dependencies: - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/visitor-keys': 8.58.0 - '@typescript-eslint/scope-manager@8.58.1': dependencies: '@typescript-eslint/types': 8.58.1 '@typescript-eslint/visitor-keys': 8.58.1 - '@typescript-eslint/tsconfig-utils@8.58.0(typescript@6.0.2)': - dependencies: - typescript: 6.0.2 - '@typescript-eslint/tsconfig-utils@8.58.1(typescript@6.0.2)': dependencies: typescript: 6.0.2 - '@typescript-eslint/type-utils@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)': - dependencies: - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) - '@typescript-eslint/utils': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - debug: 4.4.3 - eslint: 10.2.0(jiti@2.6.1) - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/type-utils@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@typescript-eslint/types': 8.58.1 @@ -26072,25 +25139,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.58.0': {} - '@typescript-eslint/types@8.58.1': {} - '@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2)': - dependencies: - '@typescript-eslint/project-service': 8.58.0(typescript@6.0.2) - '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@6.0.2) - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/visitor-keys': 8.58.0 - debug: 4.4.3 - minimatch: 10.2.5 - semver: 7.7.4 - tinyglobby: 0.2.16 - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.58.1(typescript@6.0.2)': dependencies: '@typescript-eslint/project-service': 8.58.1(typescript@6.0.2) @@ -26106,17 +25156,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) - eslint: 10.2.0(jiti@2.6.1) - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) @@ -26128,46 +25167,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.58.0': - dependencies: - '@typescript-eslint/types': 8.58.0 - eslint-visitor-keys: 5.0.1 - '@typescript-eslint/visitor-keys@8.58.1': dependencies: '@typescript-eslint/types': 8.58.1 eslint-visitor-keys: 5.0.1 - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260411.1': + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260412.1': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260411.1': + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260412.1': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260411.1': + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260412.1': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260411.1': + '@typescript/native-preview-linux-arm@7.0.0-dev.20260412.1': optional: true - '@typescript/native-preview-linux-x64@7.0.0-dev.20260411.1': + '@typescript/native-preview-linux-x64@7.0.0-dev.20260412.1': optional: true - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260411.1': + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260412.1': optional: true - '@typescript/native-preview-win32-x64@7.0.0-dev.20260411.1': + '@typescript/native-preview-win32-x64@7.0.0-dev.20260412.1': optional: true - '@typescript/native-preview@7.0.0-dev.20260411.1': + '@typescript/native-preview@7.0.0-dev.20260412.1': optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260411.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260411.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260411.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260411.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260411.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260411.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260411.1 + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260412.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260412.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260412.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260412.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260412.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260412.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260412.1 '@ungap/structured-clone@1.3.0': {} @@ -26257,14 +25291,6 @@ snapshots: transitivePeerDependencies: - typescript - '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))': - dependencies: - vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) - - '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))': - dependencies: - vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) - '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))': dependencies: vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) @@ -26289,40 +25315,104 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/browser-playwright@4.1.2(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2)': + '@vitest/browser-playwright@4.1.4(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4)': dependencies: - '@vitest/browser': 4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2) - '@vitest/mocker': 4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + '@vitest/browser': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) + '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) playwright: 1.59.1 tinyrainbow: 3.1.0 - vitest: 4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite + optional: true - '@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2)': + '@vitest/browser-playwright@4.1.4(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4)': + dependencies: + '@vitest/browser': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) + '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + playwright: 1.59.1 + tinyrainbow: 3.1.0 + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + optional: true + + '@vitest/browser-playwright@4.1.4(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4)': + dependencies: + '@vitest/browser': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) + '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + playwright: 1.59.1 + tinyrainbow: 3.1.0 + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/browser@4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) - '@vitest/utils': 4.1.2 + '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + '@vitest/utils': 4.1.4 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) ws: 8.20.0 transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite + optional: true - '@vitest/coverage-v8@4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2)': + '@vitest/browser@4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4)': + dependencies: + '@blazediff/core': 1.9.1 + '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + '@vitest/utils': 4.1.4 + magic-string: 0.30.21 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.1.0 + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + ws: 8.20.0 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + optional: true + + '@vitest/browser@4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4)': + dependencies: + '@blazediff/core': 1.9.1 + '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + '@vitest/utils': 4.1.4 + magic-string: 0.30.21 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.1.0 + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + ws: 8.20.0 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/coverage-v8@4.1.4(@vitest/browser@4.1.4)(vitest@4.1.4)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.2 + '@vitest/utils': 4.1.4 ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -26331,9 +25421,9 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) optionalDependencies: - '@vitest/browser': 4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2) + '@vitest/browser': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) '@vitest/expect@3.2.4': dependencies: @@ -26343,15 +25433,6 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/expect@4.1.2': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@vitest/spy': 4.1.2 - '@vitest/utils': 4.1.2 - chai: 6.2.2 - tinyrainbow: 3.1.0 - '@vitest/expect@4.1.4': dependencies: '@standard-schema/spec': 1.1.0 @@ -26361,14 +25442,6 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))': - dependencies: - '@vitest/spy': 4.1.2 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3) - '@vitest/mocker@4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.4 @@ -26385,7 +25458,6 @@ snapshots: magic-string: 0.30.21 optionalDependencies: vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) - optional: true '@vitest/mocker@4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: @@ -26399,31 +25471,15 @@ snapshots: dependencies: tinyrainbow: 2.0.0 - '@vitest/pretty-format@4.1.2': - dependencies: - tinyrainbow: 3.1.0 - '@vitest/pretty-format@4.1.4': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.2': - dependencies: - '@vitest/utils': 4.1.2 - pathe: 2.0.3 - '@vitest/runner@4.1.4': dependencies: '@vitest/utils': 4.1.4 pathe: 2.0.3 - '@vitest/snapshot@4.1.2': - dependencies: - '@vitest/pretty-format': 4.1.2 - '@vitest/utils': 4.1.2 - magic-string: 0.30.21 - pathe: 2.0.3 - '@vitest/snapshot@4.1.4': dependencies: '@vitest/pretty-format': 4.1.4 @@ -26435,20 +25491,18 @@ snapshots: dependencies: tinyspy: 4.0.4 - '@vitest/spy@4.1.2': {} - '@vitest/spy@4.1.4': {} - '@vitest/ui@4.1.2(vitest@4.1.2)': + '@vitest/ui@4.1.4(vitest@4.1.4)': dependencies: - '@vitest/utils': 4.1.2 + '@vitest/utils': 4.1.4 fflate: 0.8.2 flatted: 3.4.2 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vitest: 4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) '@vitest/utils@3.2.4': dependencies: @@ -26456,12 +25510,6 @@ snapshots: loupe: 3.2.1 tinyrainbow: 2.0.0 - '@vitest/utils@4.1.2': - dependencies: - '@vitest/pretty-format': 4.1.2 - convert-source-map: 2.0.0 - tinyrainbow: 3.1.0 - '@vitest/utils@4.1.4': dependencies: '@vitest/pretty-format': 4.1.4 @@ -26706,16 +25754,16 @@ snapshots: transitivePeerDependencies: - encoding - angular-eslint@21.3.1(@angular/cli@21.2.4(@types/node@25.6.0)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@10.2.0(jiti@2.6.1))(typescript-eslint@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(typescript@6.0.2): + angular-eslint@21.3.1(@angular/cli@21.2.7(@types/node@25.6.0)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@10.2.0(jiti@2.6.1))(typescript-eslint@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(typescript@6.0.2): dependencies: '@angular-devkit/core': 21.2.7(chokidar@5.0.0) '@angular-devkit/schematics': 21.2.7(chokidar@5.0.0) - '@angular-eslint/builder': 21.3.1(@angular/cli@21.2.4(@types/node@25.6.0)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + '@angular-eslint/builder': 21.3.1(@angular/cli@21.2.7(@types/node@25.6.0)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) '@angular-eslint/eslint-plugin': 21.3.1(@typescript-eslint/utils@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) '@angular-eslint/eslint-plugin-template': 21.3.1(@angular-eslint/template-parser@21.3.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(@typescript-eslint/types@8.58.1)(@typescript-eslint/utils@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - '@angular-eslint/schematics': 21.3.1(@angular-eslint/template-parser@21.3.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(@angular/cli@21.2.4(@types/node@25.6.0)(chokidar@5.0.0))(@typescript-eslint/types@8.58.1)(@typescript-eslint/utils@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(chokidar@5.0.0)(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + '@angular-eslint/schematics': 21.3.1(@angular-eslint/template-parser@21.3.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(@angular/cli@21.2.7(@types/node@25.6.0)(chokidar@5.0.0))(@typescript-eslint/types@8.58.1)(@typescript-eslint/utils@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(chokidar@5.0.0)(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) '@angular-eslint/template-parser': 21.3.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - '@angular/cli': 21.2.4(@types/node@25.6.0)(chokidar@5.0.0) + '@angular/cli': 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) '@typescript-eslint/types': 8.58.1 '@typescript-eslint/utils': 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.2.0(jiti@2.6.1) @@ -26822,7 +25870,7 @@ snapshots: astring@1.9.0: {} - astro@6.1.1(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3): + astro@6.1.5(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3): dependencies: '@astrojs/compiler': 3.0.1 '@astrojs/internal-helpers': 0.8.0 @@ -26840,7 +25888,6 @@ snapshots: cookie: 1.1.1 devalue: 5.7.1 diff: 8.0.4 - dlv: 1.1.3 dset: 3.1.4 es-module-lexer: 2.0.0 esbuild: 0.27.7 @@ -26916,7 +25963,7 @@ snapshots: - uploadthing - yaml - astro@6.1.1(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@6.0.2)(yaml@2.8.3): + astro@6.1.5(@types/node@25.6.0)(db0@0.3.4)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(typescript@6.0.2)(yaml@2.8.3): dependencies: '@astrojs/compiler': 3.0.1 '@astrojs/internal-helpers': 0.8.0 @@ -26934,7 +25981,6 @@ snapshots: cookie: 1.1.1 devalue: 5.7.1 diff: 8.0.4 - dlv: 1.1.3 dset: 3.1.4 es-module-lexer: 2.0.0 esbuild: 0.27.7 @@ -27065,7 +26111,7 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)): + babel-loader@10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: '@babel/core': 7.29.0 find-up: 5.0.0 @@ -27847,6 +26893,8 @@ snapshots: graceful-fs: 4.2.11 p-event: 6.0.1 + copy-text-to-clipboard@3.2.2: {} + copy-webpack-plugin@11.0.0(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: fast-glob: 3.3.3 @@ -27857,7 +26905,7 @@ snapshots: serialize-javascript: 6.0.2 webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) - copy-webpack-plugin@14.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)): + copy-webpack-plugin@14.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: glob-parent: 6.0.2 normalize-path: 3.0.0 @@ -27879,8 +26927,6 @@ snapshots: dependencies: browserslist: 4.28.2 - core-js-pure@3.49.0: {} - core-js@3.49.0: {} core-util-is@1.0.3: {} @@ -28008,6 +27054,20 @@ snapshots: '@rspack/core': 1.6.8(@swc/helpers@0.5.21) webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) + css-loader@6.11.0(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): + dependencies: + icss-utils: 5.1.0(postcss@8.5.9) + postcss: 8.5.9 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.9) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.9) + postcss-modules-scope: 3.2.1(postcss@8.5.9) + postcss-modules-values: 4.0.0(postcss@8.5.9) + postcss-value-parser: 4.2.0 + semver: 7.7.4 + optionalDependencies: + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) + webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) + css-loader@7.1.3(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)): dependencies: icss-utils: 5.1.0(postcss@8.5.9) @@ -28021,8 +27081,9 @@ snapshots: optionalDependencies: '@rspack/core': 1.6.8(@swc/helpers@0.5.21) webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) + optional: true - css-loader@7.1.4(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): + css-loader@7.1.3(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: icss-utils: 5.1.0(postcss@8.5.9) postcss: 8.5.9 @@ -28033,7 +27094,21 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - '@rspack/core': 1.6.8(@swc/helpers@0.5.21) + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) + webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) + + css-loader@7.1.4(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): + dependencies: + icss-utils: 5.1.0(postcss@8.5.9) + postcss: 8.5.9 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.9) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.9) + postcss-modules-scope: 3.2.1(postcss@8.5.9) + postcss-modules-values: 4.0.0(postcss@8.5.9) + postcss-value-parser: 4.2.0 + semver: 7.7.4 + optionalDependencies: + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(esbuild@0.27.7)(lightningcss@1.32.0)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): @@ -28852,21 +27927,21 @@ snapshots: dependencies: eslint: 10.2.0(jiti@2.6.1) - eslint-plugin-oxlint@1.59.0(oxlint@1.59.0(oxlint-tsgolint@0.19.0)): + eslint-plugin-oxlint@1.59.0(oxlint@1.59.0(oxlint-tsgolint@0.20.0)): dependencies: jsonc-parser: 3.3.1 - oxlint: 1.59.0(oxlint-tsgolint@0.19.0) + oxlint: 1.59.0(oxlint-tsgolint@0.20.0) eslint-plugin-playwright@2.10.1(eslint@10.2.0(jiti@2.6.1)): dependencies: eslint: 10.2.0(jiti@2.6.1) globals: 17.4.0 - eslint-plugin-storybook@10.3.3(eslint@10.2.0(jiti@2.6.1))(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2): + eslint-plugin-storybook@10.3.5(eslint@10.2.0(jiti@2.6.1))(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2): dependencies: '@typescript-eslint/utils': 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.2.0(jiti@2.6.1) - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) transitivePeerDependencies: - supports-color - typescript @@ -29964,7 +29039,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)): + html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -29973,10 +29048,10 @@ snapshots: tapable: 2.3.2 optionalDependencies: '@rspack/core': 1.6.8(@swc/helpers@0.5.21) - webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) + webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) optional: true - html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): + html-webpack-plugin@5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -29984,7 +29059,19 @@ snapshots: pretty-error: 4.0.0 tapable: 2.3.2 optionalDependencies: - '@rspack/core': 1.6.8(@swc/helpers@0.5.21) + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) + webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) + optional: true + + html-webpack-plugin@5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.18.1 + pretty-error: 4.0.0 + tapable: 2.3.2 + optionalDependencies: + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) htmlparser2@10.1.0: @@ -30763,7 +29850,7 @@ snapshots: dependencies: argparse: 2.0.1 - jsdom@29.0.1: + jsdom@29.0.2: dependencies: '@asamuzakjp/css-color': 5.1.10 '@asamuzakjp/dom-selector': 7.0.9 @@ -30898,6 +29985,14 @@ snapshots: optionalDependencies: '@rspack/core': 1.6.8(@swc/helpers@0.5.21) webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) + optional: true + + less-loader@12.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.21))(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): + dependencies: + less: 4.4.2 + optionalDependencies: + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) + webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) less-loader@12.3.2(@rspack/core@1.6.8(@swc/helpers@0.5.21))(less@4.5.1)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: @@ -30913,6 +30008,13 @@ snapshots: '@rspack/core': 1.6.8(@swc/helpers@0.5.21) webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) + less-loader@12.3.2(@rspack/core@1.7.11(@swc/helpers@0.5.21))(less@4.5.1)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): + dependencies: + less: 4.5.1 + optionalDependencies: + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) + webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) + less@4.4.2: dependencies: copy-anything: 2.0.6 @@ -30961,7 +30063,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - license-webpack-plugin@4.0.2(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)): + license-webpack-plugin@4.0.2(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: webpack-sources: 3.3.4 optionalDependencies: @@ -31250,22 +30352,22 @@ snapshots: markdown-table@3.0.4: {} - marked-gfm-heading-id@4.1.4(marked@17.0.6): + marked-gfm-heading-id@4.1.4(marked@18.0.0): dependencies: github-slugger: 2.0.0 - marked: 17.0.6 + marked: 18.0.0 - marked-highlight@2.2.4(marked@17.0.6): + marked-highlight@2.2.4(marked@18.0.0): dependencies: - marked: 17.0.6 + marked: 18.0.0 - marked-mangle@1.1.13(marked@17.0.6): + marked-mangle@1.1.13(marked@18.0.0): dependencies: - marked: 17.0.6 + marked: 18.0.0 - marked-shiki@1.2.1(marked@17.0.6)(shiki@4.0.2): + marked-shiki@1.2.1(marked@18.0.0)(shiki@4.0.2): dependencies: - marked: 17.0.6 + marked: 18.0.0 shiki: 4.0.2 marked-terminal@7.3.0(marked@15.0.12): @@ -31283,7 +30385,7 @@ snapshots: marked@16.4.2: {} - marked@17.0.6: {} + marked@18.0.0: {} marked@7.0.3: {} @@ -31892,7 +30994,7 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.10.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)): + mini-css-extract-plugin@2.10.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: schema-utils: 4.3.3 tapable: 2.3.2 @@ -32051,7 +31153,7 @@ snapshots: nf3@0.3.16: {} - ng-packagr@21.2.1(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2): + ng-packagr@21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(tailwindcss@4.2.2)(tslib@2.8.1)(typescript@6.0.2): dependencies: '@ampproject/remapping': 2.3.0 '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) @@ -32630,30 +31732,30 @@ snapshots: os-tmpdir@1.0.2: {} - oxc-parser@0.123.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + oxc-parser@0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): dependencies: - '@oxc-project/types': 0.123.0 + '@oxc-project/types': 0.124.0 optionalDependencies: - '@oxc-parser/binding-android-arm-eabi': 0.123.0 - '@oxc-parser/binding-android-arm64': 0.123.0 - '@oxc-parser/binding-darwin-arm64': 0.123.0 - '@oxc-parser/binding-darwin-x64': 0.123.0 - '@oxc-parser/binding-freebsd-x64': 0.123.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.123.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.123.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.123.0 - '@oxc-parser/binding-linux-arm64-musl': 0.123.0 - '@oxc-parser/binding-linux-ppc64-gnu': 0.123.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.123.0 - '@oxc-parser/binding-linux-riscv64-musl': 0.123.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.123.0 - '@oxc-parser/binding-linux-x64-gnu': 0.123.0 - '@oxc-parser/binding-linux-x64-musl': 0.123.0 - '@oxc-parser/binding-openharmony-arm64': 0.123.0 - '@oxc-parser/binding-wasm32-wasi': 0.123.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - '@oxc-parser/binding-win32-arm64-msvc': 0.123.0 - '@oxc-parser/binding-win32-ia32-msvc': 0.123.0 - '@oxc-parser/binding-win32-x64-msvc': 0.123.0 + '@oxc-parser/binding-android-arm-eabi': 0.124.0 + '@oxc-parser/binding-android-arm64': 0.124.0 + '@oxc-parser/binding-darwin-arm64': 0.124.0 + '@oxc-parser/binding-darwin-x64': 0.124.0 + '@oxc-parser/binding-freebsd-x64': 0.124.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.124.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.124.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.124.0 + '@oxc-parser/binding-linux-arm64-musl': 0.124.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.124.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.124.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.124.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.124.0 + '@oxc-parser/binding-linux-x64-gnu': 0.124.0 + '@oxc-parser/binding-linux-x64-musl': 0.124.0 + '@oxc-parser/binding-openharmony-arm64': 0.124.0 + '@oxc-parser/binding-wasm32-wasi': 0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@oxc-parser/binding-win32-arm64-msvc': 0.124.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.124.0 + '@oxc-parser/binding-win32-x64-msvc': 0.124.0 transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -32684,42 +31786,42 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' - oxc-transform@0.123.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + oxc-transform@0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): optionalDependencies: - '@oxc-transform/binding-android-arm-eabi': 0.123.0 - '@oxc-transform/binding-android-arm64': 0.123.0 - '@oxc-transform/binding-darwin-arm64': 0.123.0 - '@oxc-transform/binding-darwin-x64': 0.123.0 - '@oxc-transform/binding-freebsd-x64': 0.123.0 - '@oxc-transform/binding-linux-arm-gnueabihf': 0.123.0 - '@oxc-transform/binding-linux-arm-musleabihf': 0.123.0 - '@oxc-transform/binding-linux-arm64-gnu': 0.123.0 - '@oxc-transform/binding-linux-arm64-musl': 0.123.0 - '@oxc-transform/binding-linux-ppc64-gnu': 0.123.0 - '@oxc-transform/binding-linux-riscv64-gnu': 0.123.0 - '@oxc-transform/binding-linux-riscv64-musl': 0.123.0 - '@oxc-transform/binding-linux-s390x-gnu': 0.123.0 - '@oxc-transform/binding-linux-x64-gnu': 0.123.0 - '@oxc-transform/binding-linux-x64-musl': 0.123.0 - '@oxc-transform/binding-openharmony-arm64': 0.123.0 - '@oxc-transform/binding-wasm32-wasi': 0.123.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - '@oxc-transform/binding-win32-arm64-msvc': 0.123.0 - '@oxc-transform/binding-win32-ia32-msvc': 0.123.0 - '@oxc-transform/binding-win32-x64-msvc': 0.123.0 + '@oxc-transform/binding-android-arm-eabi': 0.124.0 + '@oxc-transform/binding-android-arm64': 0.124.0 + '@oxc-transform/binding-darwin-arm64': 0.124.0 + '@oxc-transform/binding-darwin-x64': 0.124.0 + '@oxc-transform/binding-freebsd-x64': 0.124.0 + '@oxc-transform/binding-linux-arm-gnueabihf': 0.124.0 + '@oxc-transform/binding-linux-arm-musleabihf': 0.124.0 + '@oxc-transform/binding-linux-arm64-gnu': 0.124.0 + '@oxc-transform/binding-linux-arm64-musl': 0.124.0 + '@oxc-transform/binding-linux-ppc64-gnu': 0.124.0 + '@oxc-transform/binding-linux-riscv64-gnu': 0.124.0 + '@oxc-transform/binding-linux-riscv64-musl': 0.124.0 + '@oxc-transform/binding-linux-s390x-gnu': 0.124.0 + '@oxc-transform/binding-linux-x64-gnu': 0.124.0 + '@oxc-transform/binding-linux-x64-musl': 0.124.0 + '@oxc-transform/binding-openharmony-arm64': 0.124.0 + '@oxc-transform/binding-wasm32-wasi': 0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@oxc-transform/binding-win32-arm64-msvc': 0.124.0 + '@oxc-transform/binding-win32-ia32-msvc': 0.124.0 + '@oxc-transform/binding-win32-x64-msvc': 0.124.0 transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' - oxlint-tsgolint@0.19.0: + oxlint-tsgolint@0.20.0: optionalDependencies: - '@oxlint-tsgolint/darwin-arm64': 0.19.0 - '@oxlint-tsgolint/darwin-x64': 0.19.0 - '@oxlint-tsgolint/linux-arm64': 0.19.0 - '@oxlint-tsgolint/linux-x64': 0.19.0 - '@oxlint-tsgolint/win32-arm64': 0.19.0 - '@oxlint-tsgolint/win32-x64': 0.19.0 - - oxlint@1.59.0(oxlint-tsgolint@0.19.0): + '@oxlint-tsgolint/darwin-arm64': 0.20.0 + '@oxlint-tsgolint/darwin-x64': 0.20.0 + '@oxlint-tsgolint/linux-arm64': 0.20.0 + '@oxlint-tsgolint/linux-x64': 0.20.0 + '@oxlint-tsgolint/win32-arm64': 0.20.0 + '@oxlint-tsgolint/win32-x64': 0.20.0 + + oxlint@1.59.0(oxlint-tsgolint@0.20.0): optionalDependencies: '@oxlint/binding-android-arm-eabi': 1.59.0 '@oxlint/binding-android-arm64': 1.59.0 @@ -32740,7 +31842,7 @@ snapshots: '@oxlint/binding-win32-arm64-msvc': 1.59.0 '@oxlint/binding-win32-ia32-msvc': 1.59.0 '@oxlint/binding-win32-x64-msvc': 1.59.0 - oxlint-tsgolint: 0.19.0 + oxlint-tsgolint: 0.20.0 p-cancelable@3.0.0: {} @@ -33315,6 +32417,19 @@ snapshots: webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) transitivePeerDependencies: - typescript + optional: true + + postcss-loader@8.2.0(@rspack/core@1.7.11(@swc/helpers@0.5.21))(postcss@8.5.6)(typescript@6.0.2)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): + dependencies: + cosmiconfig: 9.0.1(typescript@6.0.2) + jiti: 2.6.1 + postcss: 8.5.6 + semver: 7.7.4 + optionalDependencies: + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) + webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) + transitivePeerDependencies: + - typescript postcss-loader@8.2.1(@rspack/core@1.6.8(@swc/helpers@0.5.21))(postcss@8.5.9)(typescript@6.0.2)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: @@ -33328,6 +32443,18 @@ snapshots: transitivePeerDependencies: - typescript + postcss-loader@8.2.1(@rspack/core@1.7.11(@swc/helpers@0.5.21))(postcss@8.5.9)(typescript@6.0.2)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): + dependencies: + cosmiconfig: 9.0.1(typescript@6.0.2) + jiti: 2.6.1 + postcss: 8.5.9 + semver: 7.7.4 + optionalDependencies: + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) + webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) + transitivePeerDependencies: + - typescript + postcss-logical@8.1.0(postcss@8.5.9): dependencies: postcss: 8.5.9 @@ -34311,7 +33438,7 @@ snapshots: robust-predicates@3.0.3: {} - rolldown-plugin-dts@0.23.2(@typescript/native-preview@7.0.0-dev.20260411.1)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(typescript@6.0.2): + rolldown-plugin-dts@0.23.2(@typescript/native-preview@7.0.0-dev.20260412.1)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(typescript@6.0.2): dependencies: '@babel/generator': 8.0.0-rc.3 '@babel/helper-validator-identifier': 8.0.0-rc.3 @@ -34325,12 +33452,12 @@ snapshots: picomatch: 4.0.4 rolldown: 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) optionalDependencies: - '@typescript/native-preview': 7.0.0-dev.20260411.1 + '@typescript/native-preview': 7.0.0-dev.20260412.1 typescript: 6.0.2 transitivePeerDependencies: - oxc-resolver - rolldown-plugin-dts@0.23.2(@typescript/native-preview@7.0.0-dev.20260411.1)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(rolldown@1.0.0-rc.15)(typescript@6.0.2): + rolldown-plugin-dts@0.23.2(@typescript/native-preview@7.0.0-dev.20260412.1)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(rolldown@1.0.0-rc.15)(typescript@6.0.2): dependencies: '@babel/generator': 8.0.0-rc.3 '@babel/helper-validator-identifier': 8.0.0-rc.3 @@ -34344,7 +33471,7 @@ snapshots: picomatch: 4.0.4 rolldown: 1.0.0-rc.15 optionalDependencies: - '@typescript/native-preview': 7.0.0-dev.20260411.1 + '@typescript/native-preview': 7.0.0-dev.20260412.1 typescript: 6.0.2 transitivePeerDependencies: - oxc-resolver @@ -34617,6 +33744,7 @@ snapshots: sass: 1.97.3 sass-embedded: 1.99.0 webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) + optional: true sass-loader@16.0.7(@rspack/core@1.6.8(@swc/helpers@0.5.21))(sass-embedded@1.99.0)(sass@1.99.0)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: @@ -34627,6 +33755,24 @@ snapshots: sass-embedded: 1.99.0 webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) + sass-loader@16.0.7(@rspack/core@1.7.11(@swc/helpers@0.5.21))(sass-embedded@1.99.0)(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): + dependencies: + neo-async: 2.6.2 + optionalDependencies: + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) + sass: 1.97.3 + sass-embedded: 1.99.0 + webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) + + sass-loader@16.0.7(@rspack/core@1.7.11(@swc/helpers@0.5.21))(sass-embedded@1.99.0)(sass@1.99.0)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): + dependencies: + neo-async: 2.6.2 + optionalDependencies: + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) + sass: 1.99.0 + sass-embedded: 1.99.0 + webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) + sass@1.97.3: dependencies: chokidar: 4.0.3 @@ -35059,7 +34205,7 @@ snapshots: source-map-js@1.2.1: {} - source-map-loader@5.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)): + source-map-loader@5.0.0(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 @@ -35185,29 +34331,6 @@ snapshots: stdin-discarder@0.3.1: {} - storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): - dependencies: - '@storybook/global': 5.0.0 - '@storybook/icons': 2.0.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@testing-library/jest-dom': 6.9.1 - '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) - '@vitest/expect': 3.2.4 - '@vitest/spy': 3.2.4 - esbuild: 0.27.7 - open: 10.2.0 - recast: 0.23.11 - semver: 7.7.4 - use-sync-external-store: 1.6.0(react@19.2.5) - ws: 8.20.0 - optionalDependencies: - prettier: 3.8.2 - transitivePeerDependencies: - - '@testing-library/dom' - - bufferutil - - react - - react-dom - - utf-8-validate - storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: '@storybook/global': 5.0.0 @@ -35468,17 +34591,6 @@ snapshots: '@swc/core': 1.15.24(@swc/helpers@0.5.21) esbuild: 0.27.3 - terser-webpack-plugin@5.4.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)): - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - jest-worker: 27.5.1 - schema-utils: 4.3.3 - terser: 5.46.0 - webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) - optionalDependencies: - '@swc/core': 1.15.24(@swc/helpers@0.5.21) - esbuild: 0.27.7 - terser-webpack-plugin@5.4.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -35655,6 +34767,11 @@ snapshots: '@ts-morph/common': 0.28.1 code-block-writer: 13.0.3 + ts-morph@28.0.0: + dependencies: + '@ts-morph/common': 0.29.0 + code-block-writer: 13.0.3 + tsconfck@3.1.6(typescript@5.9.3): optionalDependencies: typescript: 5.9.3 @@ -35676,7 +34793,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tsdown@0.21.7(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@typescript/native-preview@7.0.0-dev.20260411.1)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(synckit@0.11.12)(typescript@6.0.2): + tsdown@0.21.7(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@typescript/native-preview@7.0.0-dev.20260412.1)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(synckit@0.11.12)(typescript@6.0.2): dependencies: ansis: 4.2.0 cac: 7.0.0 @@ -35687,7 +34804,7 @@ snapshots: obug: 2.1.1 picomatch: 4.0.4 rolldown: 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - rolldown-plugin-dts: 0.23.2(@typescript/native-preview@7.0.0-dev.20260411.1)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(typescript@6.0.2) + rolldown-plugin-dts: 0.23.2(@typescript/native-preview@7.0.0-dev.20260412.1)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(typescript@6.0.2) semver: 7.7.4 tinyexec: 1.1.1 tinyglobby: 0.2.16 @@ -36119,44 +35236,6 @@ snapshots: - supports-color - typescript - vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3): - dependencies: - esbuild: 0.27.7 - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - postcss: 8.5.9 - rollup: 4.60.1 - tinyglobby: 0.2.16 - optionalDependencies: - '@types/node': 25.6.0 - fsevents: 2.3.3 - jiti: 2.6.1 - less: 4.4.2 - lightningcss: 1.32.0 - sass: 1.97.3 - sass-embedded: 1.99.0 - terser: 5.46.0 - yaml: 2.8.3 - - vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): - dependencies: - esbuild: 0.27.7 - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - postcss: 8.5.9 - rollup: 4.60.1 - tinyglobby: 0.2.16 - optionalDependencies: - '@types/node': 25.6.0 - fsevents: 2.3.3 - jiti: 2.6.1 - less: 4.6.4 - lightningcss: 1.32.0 - sass: 1.97.3 - sass-embedded: 1.99.0 - terser: 5.46.1 - yaml: 2.8.3 - vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3): dependencies: esbuild: 0.27.7 @@ -36296,38 +35375,7 @@ snapshots: optionalDependencies: vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3) - vitest@4.1.2(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)): - dependencies: - '@vitest/expect': 4.1.2 - '@vitest/mocker': 4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) - '@vitest/pretty-format': 4.1.2 - '@vitest/runner': 4.1.2 - '@vitest/snapshot': 4.1.2 - '@vitest/spy': 4.1.2 - '@vitest/utils': 4.1.2 - es-module-lexer: 2.0.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.4 - std-env: 4.0.0 - tinybench: 2.9.0 - tinyexec: 1.1.1 - tinyglobby: 0.2.16 - tinyrainbow: 3.1.0 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 25.6.0 - '@vitest/browser-playwright': 4.1.2(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2) - '@vitest/ui': 4.1.2(vitest@4.1.2) - happy-dom: 20.8.9 - jsdom: 29.0.1 - transitivePeerDependencies: - - msw - - vitest@4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/coverage-v8@4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2))(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)): + vitest@4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.4 '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) @@ -36351,16 +35399,16 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.6.0 - '@vitest/browser-playwright': 4.1.2(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2) - '@vitest/coverage-v8': 4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2) - '@vitest/ui': 4.1.2(vitest@4.1.2) + '@vitest/browser-playwright': 4.1.4(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) + '@vitest/coverage-v8': 4.1.4(@vitest/browser@4.1.4)(vitest@4.1.4) + '@vitest/ui': 4.1.4(vitest@4.1.4) happy-dom: 20.8.9 - jsdom: 29.0.1 + jsdom: 29.0.2 transitivePeerDependencies: - msw optional: true - vitest@4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/coverage-v8@4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2))(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)): + vitest@4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.4 '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) @@ -36384,16 +35432,15 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.6.0 - '@vitest/browser-playwright': 4.1.2(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2) - '@vitest/coverage-v8': 4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2) - '@vitest/ui': 4.1.2(vitest@4.1.2) + '@vitest/browser-playwright': 4.1.4(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) + '@vitest/coverage-v8': 4.1.4(@vitest/browser@4.1.4)(vitest@4.1.4) + '@vitest/ui': 4.1.4(vitest@4.1.4) happy-dom: 20.8.9 - jsdom: 29.0.1 + jsdom: 29.0.2 transitivePeerDependencies: - msw - optional: true - vitest@4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.2)(@vitest/coverage-v8@4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2))(@vitest/ui@4.1.2)(happy-dom@20.8.9)(jsdom@29.0.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)): + vitest@4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(happy-dom@20.8.9)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.4 '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3)) @@ -36417,11 +35464,11 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.6.0 - '@vitest/browser-playwright': 4.1.2(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2) - '@vitest/coverage-v8': 4.1.2(@vitest/browser@4.1.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.2))(vitest@4.1.2) - '@vitest/ui': 4.1.2(vitest@4.1.2) + '@vitest/browser-playwright': 4.1.4(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(yaml@2.8.3))(vitest@4.1.4) + '@vitest/coverage-v8': 4.1.4(@vitest/browser@4.1.4)(vitest@4.1.4) + '@vitest/ui': 4.1.4(vitest@4.1.4) happy-dom: 20.8.9 - jsdom: 29.0.1 + jsdom: 29.0.2 transitivePeerDependencies: - msw @@ -36514,7 +35561,7 @@ snapshots: optionalDependencies: webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) - webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)): + webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: colorette: 2.0.20 memfs: 4.57.1(tslib@2.8.1) @@ -36540,7 +35587,7 @@ snapshots: transitivePeerDependencies: - tslib - webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)): + webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -36568,7 +35615,7 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) ws: 8.20.0 optionalDependencies: webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) @@ -36640,19 +35687,13 @@ snapshots: webpack-sources@3.3.4: {} - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)): - dependencies: - typed-assert: 1.0.9 - webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) - optionalDependencies: - html-webpack-plugin: 5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)): dependencies: typed-assert: 1.0.9 webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) optionalDependencies: html-webpack-plugin: 5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + optional: true webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): dependencies: @@ -36661,6 +35702,27 @@ snapshots: optionalDependencies: html-webpack-plugin: 5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): + dependencies: + typed-assert: 1.0.9 + webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) + optionalDependencies: + html-webpack-plugin: 5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)): + dependencies: + typed-assert: 1.0.9 + webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3) + optionalDependencies: + html-webpack-plugin: 5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)): + dependencies: + typed-assert: 1.0.9 + webpack: 5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7) + optionalDependencies: + html-webpack-plugin: 5.6.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)) + webpack-virtual-modules@0.6.2: {} webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3): @@ -36695,38 +35757,6 @@ snapshots: - esbuild - uglify-js - webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7): - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.2 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.20.1 - es-module-lexer: 2.0.0 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.1 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 4.3.3 - tapable: 2.3.2 - terser-webpack-plugin: 5.4.0(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7)(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.3)) - watchpack: 2.5.1 - webpack-sources: 3.3.4 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - webpack@5.106.1(@swc/core@1.15.24(@swc/helpers@0.5.21))(esbuild@0.27.7): dependencies: '@types/eslint-scope': 3.7.7 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index fac3e217d..e048bfa20 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -20,17 +20,17 @@ packages: catalog: '@angular/animations': 21.2.8 - '@angular/cdk': 21.2.4 + '@angular/cdk': 21.2.6 '@angular/common': 21.2.8 '@angular/compiler': 21.2.8 '@angular/core': 21.2.8 '@angular/forms': 21.2.8 - '@angular/material': 21.2.4 + '@angular/material': 21.2.6 '@angular/platform-browser': 21.2.8 '@angular/platform-browser-dynamic': 21.2.8 '@angular/platform-server': 21.2.8 '@angular/router': 21.2.8 - '@angular/ssr': 21.2.4 + '@angular/ssr': 21.2.7 '@astrojs/mdx': ^5.0.3 '@astrojs/markdown-component': ^1.0.5 '@astrojs/react': ^5.0.2 @@ -46,8 +46,8 @@ catalog: '@nx/vite': 22.7.0-beta.12 '@nx/vitest': 22.7.0-beta.12 '@nx/web': 22.7.0-beta.12 - '@oxc-angular/vite': ^0.0.22 - '@oxc-project/runtime': ^0.123.0 + '@oxc-angular/vite': ^0.0.23 + '@oxc-project/runtime': ^0.124.0 '@playwright/test': ^1.58.2 '@swc-node/register': ~1.11.1 '@swc/core': ~1.15.5 @@ -63,18 +63,18 @@ catalog: '@types/react': ^19.2.14 '@types/react-dom': ^19.2.3 '@types/semver': ^7.7.1 - '@vitest/browser-playwright': 4.1.2 - '@vitest/coverage-v8': 4.1.2 - '@vitest/ui': 4.1.2 - '@angular-devkit/architect': 0.2102.6 - '@angular-devkit/build-angular': 21.2.4 - '@angular-devkit/core': 21.2.4 - '@angular-devkit/schematics': 21.2.4 + '@vitest/browser-playwright': 4.1.4 + '@vitest/coverage-v8': 4.1.4 + '@vitest/ui': 4.1.4 + '@angular-devkit/architect': 0.2102.7 + '@angular-devkit/build-angular': 21.2.7 + '@angular-devkit/core': 21.2.7 + '@angular-devkit/schematics': 21.2.7 '@angular-eslint/eslint-plugin': 21.3.1 '@angular-eslint/eslint-plugin-template': 21.3.1 '@angular-eslint/template-parser': 21.3.1 - '@angular/build': 21.2.4 - '@angular/cli': 21.2.4 + '@angular/build': 21.2.7 + '@angular/cli': 21.2.7 '@angular/compiler-cli': 21.2.8 '@angular/language-service': 21.2.8 '@commitlint/cli': ^20.5.0 @@ -83,23 +83,23 @@ catalog: '@eslint/eslintrc': ^3.3.5 '@eslint/js': ^10.0.1 '@netlify/functions': ^5.1.5 - '@schematics/angular': 21.2.4 + '@schematics/angular': 21.2.7 '@semantic-release/changelog': ^6.0.3 '@semantic-release/exec': ^7.1.0 '@semantic-release/git': ^10.0.1 '@storybook/addon-docs': ^10.3.3 '@storybook/addon-links': ^10.3.3 '@storybook/addon-vitest': ^10.3.3 - '@storybook/angular': 10.3.3 - '@typescript-eslint/eslint-plugin': 8.58.0 - '@typescript-eslint/parser': 8.58.0 - '@typescript-eslint/type-utils': 8.58.0 + '@storybook/angular': 10.3.5 + '@typescript-eslint/eslint-plugin': 8.58.1 + '@typescript-eslint/parser': 8.58.1 + '@typescript-eslint/type-utils': 8.58.1 '@typescript-eslint/utils': ^8.57.2 ajv: ^8.18.0 ajv-formats: ^3.0.1 all-contributors-cli: ^6.26.1 angular-eslint: ^21.2.0 - astro: 6.1.1 + astro: 6.1.5 conventional-changelog: ^7.2.0 cpy-cli: ^7.0.0 defu: ^6.1.4 @@ -109,7 +109,7 @@ catalog: eslint-config-prettier: 10.1.8 eslint-plugin-oxlint: ^1.57.0 eslint-plugin-playwright: ^2.10.1 - eslint-plugin-storybook: 10.3.3 + eslint-plugin-storybook: 10.3.5 front-matter: ^4.0.2 es-toolkit: ^1.45.1 execa: ^9.6.1 @@ -119,13 +119,13 @@ catalog: fs-extra: ^11.3.4 happy-dom: ^20.8.9 jiti: 2.6.1 - jsdom: 29.0.1 + jsdom: 29.0.2 jsonc-eslint-parser: ^3.1.0 jsonc-parser: 3.3.1 kolorist: ^1.8.0 less: 4.6.4 lint-staged: ^16.4.0 - marked: ^17.0.5 + marked: ^18.0.0 marked-gfm-heading-id: ^4.1.3 marked-highlight: ^2.2.3 marked-mangle: ^1.1.12 @@ -133,16 +133,16 @@ catalog: md4x: ^0.0.25 mermaid: ^11.13.0 minimist: ^1.2.8 - ng-packagr: 21.2.1 + ng-packagr: 21.2.2 nitro: 3.0.260311-beta nx: 22.7.0-beta.12 obug: ^2.1.1 ofetch: 2.0.0-alpha.3 - oxc-parser: ^0.123.0 - oxc-transform: ^0.123.0 + oxc-parser: ^0.124.0 + oxc-transform: ^0.124.0 oxc-resolver: ^11.19.1 oxlint: ^1.57.0 - oxlint-tsgolint: ^0.19.0 + oxlint-tsgolint: ^0.20.0 playwright: ^1.58.2 postcss: ^8.5.8 prettier: ^3.8.1 @@ -168,12 +168,12 @@ catalog: shiki: ^1.29.2 || ^4.0.2 sharp: ^0.34.5 start-server-and-test: ^3.0.0 - storybook: 10.3.3 + storybook: 10.3.5 tslib: ^2.3.0 tinyglobby: ^0.2.15 tailwindcss: ^4.2.2 ts-dedent: ^2.2.0 - ts-morph: ^27.0.2 + ts-morph: ^28.0.0 tsdown: ^0.21.5 typescript: 6.0.2 typescript-eslint: ^8.57.2 @@ -184,13 +184,22 @@ catalog: vite-plugin-inspect: 12.0.0-beta.1 vite-tsconfig-paths: ^7.0.0-alpha.1 vitefu: ^1.1.2 - vitest: 4.1.2 + vitest: 4.1.4 xhr2: ^0.2.1 xmlbuilder2: ^4.0.3 zod: ^4.3.6 zone.js: ^0.16.1 catalogs: + docsApp: + '@docusaurus/core': 3.10.0 + '@docusaurus/faster': 3.10.0 + '@docusaurus/module-type-aliases': 3.10.0 + '@docusaurus/preset-classic': 3.10.0 + '@docusaurus/tsconfig': 3.10.0 + '@docusaurus/types': 3.10.0 + clsx: ^2.1.1 + prism-react-renderer: ^2.4.1 peerCompat: '@angular/common': ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 '@angular/core': ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 @@ -219,7 +228,7 @@ catalogs: tslib: ^2.4.0 peerStorybook10: '@storybook/angular': ^10.0.0 - '@storybook/builder-vite': ^10.3.3 + '@storybook/builder-vite': ^10.3.5 storybook: ^10.0.0 peerVitestAngular: '@analogjs/vite-plugin-angular': '*' From 70263dbd0173309c64a1a7744a9121fa02a08b73 Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Mon, 13 Apr 2026 07:24:34 -0400 Subject: [PATCH 05/22] chore: update debugging documentation with additional package overrides for local and GitHub paths --- apps/docs-app/docs/guides/debugging.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/apps/docs-app/docs/guides/debugging.md b/apps/docs-app/docs/guides/debugging.md index 6a7cb3cb6..41318f4fb 100644 --- a/apps/docs-app/docs/guides/debugging.md +++ b/apps/docs-app/docs/guides/debugging.md @@ -138,8 +138,11 @@ packages: - 'libs/**' overrides: + '@analogjs/astro-angular': file:/Volumes/Development/analog/packages/astro-angular/dist + '@analogjs/content': file:/Volumes/Development/analog/packages/content/dist '@analogjs/platform': file:/Volumes/Development/analog/packages/platform/dist '@analogjs/router': file:/Volumes/Development/analog/packages/router/dist + '@analogjs/storybook-angular': file:/Volumes/Development/analog/packages/storybook-angular/dist '@analogjs/vite-plugin-angular': file:/Volumes/Development/analog/packages/vite-plugin-angular/dist '@analogjs/vite-plugin-nitro': file:/Volumes/Development/analog/packages/vite-plugin-nitro/dist '@analogjs/vitest-angular': file:/Volumes/Development/analog/packages/vitest-angular/dist @@ -153,8 +156,11 @@ Root `package.json` "@analogjs/platform": "file:/Volumes/Development/analog/packages/platform/dist" }, "overrides": { + "@analogjs/astro-angular": "file:/Volumes/Development/analog/packages/astro-angular/dist", + "@analogjs/content": "file:/Volumes/Development/analog/packages/content/dist", "@analogjs/platform": "file:/Volumes/Development/analog/packages/platform/dist", "@analogjs/router": "file:/Volumes/Development/analog/packages/router/dist", + "@analogjs/storybook-angular": "file:/Volumes/Development/analog/packages/storybook-angular/dist", "@analogjs/vite-plugin-angular": "file:/Volumes/Development/analog/packages/vite-plugin-angular/dist", "@analogjs/vite-plugin-nitro": "file:/Volumes/Development/analog/packages/vite-plugin-nitro/dist", "@analogjs/vitest-angular": "file:/Volumes/Development/analog/packages/vitest-angular/dist" @@ -163,14 +169,14 @@ Root `package.json` ``` :::important -Keep the overrides in both places. If you only pin `@analogjs/platform`, pnpm will still resolve transitive packages like `@analogjs/vite-plugin-angular` and `@analogjs/vite-plugin-nitro` from npm instead of your local checkout. +Keep the overrides in both places. If you only pin one Analog package, pnpm will still resolve the rest of the packages in this list from npm instead of your local checkout. ::: :::note pnpm currently does not allow `file:` entries in `catalog`, so local checkout wiring needs direct `file:` overrides instead of `catalog:` indirection. ::: -If your app also uses other published Analog packages such as `@analogjs/content` or `@analogjs/storybook-angular`, pin those the same way. +The examples above include the full set of published Analog workspace packages that are typically consumed from an app workspace. If you're also testing the `create-analog` CLI itself, point it at `dist/packages/create-analog` separately. ### GitHub branch example @@ -180,8 +186,11 @@ If you want the same pattern from a GitHub branch instead of a local path, pnpm ```yaml catalog: + '@analogjs/astro-angular': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/astro-angular/dist + '@analogjs/content': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/content/dist '@analogjs/platform': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/platform/dist '@analogjs/router': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/router/dist + '@analogjs/storybook-angular': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/storybook-angular/dist '@analogjs/vite-plugin-angular': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/vite-plugin-angular/dist '@analogjs/vite-plugin-nitro': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/vite-plugin-nitro/dist '@analogjs/vitest-angular': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/vitest-angular/dist @@ -195,8 +204,11 @@ Root `package.json` "@analogjs/platform": "catalog:" }, "overrides": { + "@analogjs/astro-angular": "$@analogjs/astro-angular", + "@analogjs/content": "$@analogjs/content", "@analogjs/platform": "$@analogjs/platform", "@analogjs/router": "$@analogjs/router", + "@analogjs/storybook-angular": "$@analogjs/storybook-angular", "@analogjs/vite-plugin-angular": "$@analogjs/vite-plugin-angular", "@analogjs/vite-plugin-nitro": "$@analogjs/vite-plugin-nitro", "@analogjs/vitest-angular": "$@analogjs/vitest-angular" From efcb7f281e5c226665729971a5116ea26c29a831 Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Mon, 13 Apr 2026 07:40:42 -0400 Subject: [PATCH 06/22] chore: update debugging documentation to clarify usage of catalog and file overrides for Analog packages --- apps/docs-app/docs/guides/debugging.md | 56 ++++++-------------------- 1 file changed, 12 insertions(+), 44 deletions(-) diff --git a/apps/docs-app/docs/guides/debugging.md b/apps/docs-app/docs/guides/debugging.md index 41318f4fb..0d8985dfa 100644 --- a/apps/docs-app/docs/guides/debugging.md +++ b/apps/docs-app/docs/guides/debugging.md @@ -137,6 +137,16 @@ packages: - 'apps/*' - 'libs/**' +catalog: + '@analogjs/astro-angular': file:/Volumes/Development/analog/packages/astro-angular/dist + '@analogjs/content': file:/Volumes/Development/analog/packages/content/dist + '@analogjs/platform': file:/Volumes/Development/analog/packages/platform/dist + '@analogjs/router': file:/Volumes/Development/analog/packages/router/dist + '@analogjs/storybook-angular': file:/Volumes/Development/analog/packages/storybook-angular/dist + '@analogjs/vite-plugin-angular': file:/Volumes/Development/analog/packages/vite-plugin-angular/dist + '@analogjs/vite-plugin-nitro': file:/Volumes/Development/analog/packages/vite-plugin-nitro/dist + '@analogjs/vitest-angular': file:/Volumes/Development/analog/packages/vitest-angular/dist + overrides: '@analogjs/astro-angular': file:/Volumes/Development/analog/packages/astro-angular/dist '@analogjs/content': file:/Volumes/Development/analog/packages/content/dist @@ -153,7 +163,7 @@ Root `package.json` ```json { "dependencies": { - "@analogjs/platform": "file:/Volumes/Development/analog/packages/platform/dist" + "@analogjs/platform": "catalog:" }, "overrides": { "@analogjs/astro-angular": "file:/Volumes/Development/analog/packages/astro-angular/dist", @@ -173,53 +183,11 @@ Keep the overrides in both places. If you only pin one Analog package, pnpm will ::: :::note -pnpm currently does not allow `file:` entries in `catalog`, so local checkout wiring needs direct `file:` overrides instead of `catalog:` indirection. +Keep your normal dependency entries on `catalog:` in `package.json`. pnpm picks those up from `pnpm-workspace.yaml`. The explicit `file:` specs are still duplicated in `overrides` so transitive Analog packages stay pinned to the same local checkout. ::: The examples above include the full set of published Analog workspace packages that are typically consumed from an app workspace. If you're also testing the `create-analog` CLI itself, point it at `dist/packages/create-analog` separately. -### GitHub branch example - -If you want the same pattern from a GitHub branch instead of a local path, pnpm supports Git subdirectory specs via `#branch&path:...`. - -`pnpm-workspace.yaml` - -```yaml -catalog: - '@analogjs/astro-angular': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/astro-angular/dist - '@analogjs/content': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/content/dist - '@analogjs/platform': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/platform/dist - '@analogjs/router': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/router/dist - '@analogjs/storybook-angular': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/storybook-angular/dist - '@analogjs/vite-plugin-angular': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/vite-plugin-angular/dist - '@analogjs/vite-plugin-nitro': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/vite-plugin-nitro/dist - '@analogjs/vitest-angular': github:benpsnyder/analog#feat/support-snyder-internal&path:packages/vitest-angular/dist -``` - -Root `package.json` - -```json -{ - "dependencies": { - "@analogjs/platform": "catalog:" - }, - "overrides": { - "@analogjs/astro-angular": "$@analogjs/astro-angular", - "@analogjs/content": "$@analogjs/content", - "@analogjs/platform": "$@analogjs/platform", - "@analogjs/router": "$@analogjs/router", - "@analogjs/storybook-angular": "$@analogjs/storybook-angular", - "@analogjs/vite-plugin-angular": "$@analogjs/vite-plugin-angular", - "@analogjs/vite-plugin-nitro": "$@analogjs/vite-plugin-nitro", - "@analogjs/vitest-angular": "$@analogjs/vitest-angular" - } -} -``` - -:::caution -For Analog, the GitHub form only works when the branch exposes release-ready `dist/package.json` files at those paths. Pointing pnpm at `path:packages/platform` or any other raw source package path will fail because those manifests still contain unresolved `catalog:` and `workspace:*` specifiers. -::: - ## Configuration Reference | Form | Scopes | When | From e76e35a406cc0acbd7e4b3c78a888f29a9eb2498 Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 10:07:55 -0400 Subject: [PATCH 07/22] docs: enhance documentation on duplicate analog() registrations and SSR handling in Angular and Nitro plugins --- .../src/lib/angular-vite-plugin.ts | 28 +++++++++++++-- .../vite-plugin-nitro/src/lib/build-ssr.ts | 21 ++++++++++++ .../src/lib/vite-plugin-nitro.ts | 34 +++++++++++++++++++ 3 files changed, 81 insertions(+), 2 deletions(-) diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts index ed53b3746..d3cab0595 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -641,11 +641,35 @@ export function angular(options?: PluginOptions): Plugin[] { ); } - // Duplicate analog() registrations cause orphaned style maps + /** + * Duplicate analog() registrations are a real bug for the non-SSR/client + * build because each plugin instance creates its own component-style state. + * + * That state includes the style maps/registries used to: + * - track transformed component styles + * - map owner components back to stylesheet requests + * - coordinate Tailwind/@reference processing and style reload behavior + * + * If two plugin instances are active for the same client build, one + * instance can record stylesheet metadata while the other services the + * request. The result is "missing" component CSS even though compilation + * appeared to succeed. + * + * SSR is different. Analog's Nitro/SSR build path reuses the already + * resolved plugin graph and then runs an additional `build.ssr === true` + * pass for the server bundle. In that flow Vite can expose multiple + * `@analogjs/vite-plugin-angular` entries in `config.plugins`, but that is + * not the same failure mode as a duplicated client build. The server build + * does not rely on the client-side style maps that this guard is protecting. + * + * Because of that, we only throw for duplicate registrations on non-SSR + * builds. Throwing during SSR would be a false positive that breaks valid + * Analog SSR/Nitro builds. + */ const analogInstances = resolvedPlugins.filter( (p) => p.name === '@analogjs/vite-plugin-angular', ); - if (analogInstances.length > 1) { + if (analogInstances.length > 1 && !config.build?.ssr) { throw new Error( `${PREFIX} analog() is registered ${analogInstances.length} times. ` + `Each instance creates separate style maps, causing component ` + diff --git a/packages/vite-plugin-nitro/src/lib/build-ssr.ts b/packages/vite-plugin-nitro/src/lib/build-ssr.ts index 73b3f13fe..adc7fdee4 100644 --- a/packages/vite-plugin-nitro/src/lib/build-ssr.ts +++ b/packages/vite-plugin-nitro/src/lib/build-ssr.ts @@ -31,6 +31,27 @@ export async function buildSSRApp( const sourceRoot = options?.sourceRoot ?? 'src'; const rootDir = relative(workspaceRoot, config.root || '.') || '.'; const bundleOptionsKey = getBundleOptionsKey(); + + /** + * SSR is built as a second pass from the already prepared Analog/Vite config. + * + * That means we intentionally start from the same base config used for the + * client build and then merge only the SSR-specific overrides (entry, outDir, + * `build.ssr`, etc). + * + * A side effect of this design is that the resolved SSR config can expose the + * same high-level Analog plugin chain more than once when Vite/Nitro replays + * shared plugins for the server environment. In particular, + * `@analogjs/vite-plugin-angular` may appear twice in `config.plugins` during + * SSR resolution: + * - once from the normal Analog platform plugin expansion + * - once from the reused/shared plugin graph for the SSR pass + * + * That does NOT imply the client build has two competing style registries. + * The client-side duplicate-registration guard in `vite-plugin-angular` + * therefore explicitly ignores `build.ssr === true` to avoid treating this + * valid SSR orchestration detail as a style-map bug. + */ const ssrBuildConfig = mergeConfig(config, { build: { ssr: true, diff --git a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts index 6691d5d7a..0047c9e50 100644 --- a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts +++ b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts @@ -1061,6 +1061,27 @@ export function nitro(options?: Options, nitroOptions?: NitroConfig): Plugin[] { }, }, builder: { + /** + * Reuse the already resolved Analog/Vite plugin graph across the + * client and SSR environments. + * + * This keeps both builds behaviorally aligned: route generation, + * content discovery, Angular transforms, Tailwind integration, and + * other Analog-specific config stay consistent between the browser + * bundle and the server bundle. + * + * The tradeoff is that the SSR environment can observe repeated + * plugin entries when Vite materializes the environment-specific + * build. Most notably, `@analogjs/vite-plugin-angular` can appear + * twice in the SSR resolved plugin list even though the app only + * configured `analog(...)` once. + * + * That duplicated name during SSR is an artifact of the shared + * plugin graph, not evidence of a broken client build. The + * duplicate-registration check in `vite-plugin-angular` therefore + * throws only for non-SSR builds, where duplicate Angular plugin + * instances would actually split the component style registries. + */ sharedPlugins: true, buildApp: async (builder) => { environmentBuild = true; @@ -1117,6 +1138,19 @@ export function nitro(options?: Options, nitroOptions?: NitroConfig): Plugin[] { ssrEnabled: options?.ssr, prerenderRoutes: nitroConfig.prerender?.routes, }); + + /** + * This launches the SSR environment as a second build from the + * shared plugin graph above. When debugging an apparent + * duplicate `@analogjs/vite-plugin-angular` registration, this + * is the handoff to inspect: the SSR builder replays the shared + * plugins for the server pass and may therefore expose multiple + * Angular-plugin entries in the SSR resolved config. + * + * That is expected for this orchestration path and should not + * be treated the same as a duplicated client build, where two + * Angular plugin instances would maintain separate style maps. + */ await builder.build(builder.environments['ssr']); debugSsr('builder.buildApp completed SSR build', { ssrOutputPath: From 229b9e4e44da979a19dbb64dd5f01f6a3b477cfb Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 10:24:48 -0400 Subject: [PATCH 08/22] chore: update comments for clarity in Angular and Nitro plugins, and align Angular runtime/compiler patch set --- packages/platform/src/lib/tailwind-preprocessor.ts | 2 ++ .../src/lib/angular-vite-plugin-live-reload.spec.ts | 2 ++ .../src/lib/angular-vite-plugin-transform.spec.ts | 2 ++ packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts | 5 +++++ packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts | 2 ++ packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts | 5 +++++ pnpm-workspace.yaml | 2 ++ 7 files changed, 20 insertions(+) diff --git a/packages/platform/src/lib/tailwind-preprocessor.ts b/packages/platform/src/lib/tailwind-preprocessor.ts index fced81742..747480b85 100644 --- a/packages/platform/src/lib/tailwind-preprocessor.ts +++ b/packages/platform/src/lib/tailwind-preprocessor.ts @@ -18,6 +18,8 @@ interface CssTailwindDirectiveState { hasTailwindImportDirective: boolean; } +// Comment text should not count as a real Tailwind directive. Strip it before +// matching so prose like "/* add @reference here */" cannot disable injection. function stripCssBlockComments(code: string): string { return code.replace(CSS_BLOCK_COMMENT_REGEX, (comment) => comment.replace(/[^\n\r]/g, ' '), diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts index ef1ae87fc..1910b4437 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts @@ -373,6 +373,8 @@ describe('angular hmr style preprocessing', () => { workspaceRoot: tempWorkspaceRoot, }); + // The wrapper tsconfig is the value of this feature: Angular sees the + // extra include roots without us mutating the user's checked-in config. const [generatedTsconfigPath] = initialize.mock.calls[0] as [string]; expect(normalize(generatedTsconfigPath)).not.toBe( normalize(join(tempWorkspaceRoot, 'tsconfig.base.json')), diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts index 86a243848..30fb4d7d5 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts @@ -156,6 +156,8 @@ describe('legacy Angular transform', () => { id, ); + // `undefined` is the safe opt-out signal here: Vite or another plugin can + // keep handling the file instead of Analog inventing a transform result. expect(result).toBeUndefined(); }); }); diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts index 17b134aa3..765daf52f 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -310,6 +310,8 @@ interface CssTailwindDirectiveState { hasTailwindImportDirective: boolean; } +// Match real CSS directives, not comment text, so the Angular plugin and the +// shared style preprocessor make the same Tailwind decisions. function stripCssBlockComments(code: string): string { return code.replace(CSS_BLOCK_COMMENT_REGEX, (comment) => comment.replace(/[^\n\r]/g, ' '), @@ -2289,6 +2291,9 @@ export function angular(options?: PluginOptions): Plugin[] { resolvedTsConfigPath: string, config: ResolvedConfig, ): string { + // Angular's Compilation API accepts one tsconfig path. When Analog adds + // extra roots via `include`, emit a tiny wrapper config instead of asking + // users to manually duplicate those roots in their checked-in tsconfig. const includedFiles = ensureIncludeCache(); if (includedFiles.length === 0) { return resolvedTsConfigPath; diff --git a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts index 217470515..4537a6fa9 100644 --- a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts +++ b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts @@ -94,6 +94,8 @@ describe('nitro', () => { }); const mutatedHook = { handler: vi.fn(), order: 'post' }; + // Mutate the original object after config capture. Nitro should keep + // building from its snapshot, not from this live user-owned reference. userConfig.build!.outDir = 'mutated-client'; (userConfig.plugins![0] as Record)['configResolved'] = mutatedHook; diff --git a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts index ec341fb5d..3b54e7dbd 100644 --- a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts +++ b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts @@ -34,6 +34,9 @@ import { import { getBundleOptionsKey, isRolldown } from './utils/rolldown.js'; import { debugNitro, debugSsr } from './utils/debug.js'; +// Nitro reuses the captured Vite config across client and SSR passes. Snapshot +// the caller's objects up front so later user mutations do not leak into the +// build orchestration for either environment. type ObjectHook = { handler: T; [key: string]: unknown }; function isObjectHook(value: unknown): value is ObjectHook { @@ -54,6 +57,8 @@ function cloneObjectHook(hook: T): T { function cloneUserPlugin(plugin: T): T { if (!plugin || typeof plugin !== 'object') return plugin; const pluginRecord = plugin as Record; + // Preserve the original prototype because some plugins hang metadata or + // behavior off the instance instead of plain object fields. const clone = Object.assign( Object.create(Object.getPrototypeOf(plugin)), pluginRecord, diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 2b4293334..bb4caf9ed 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -19,6 +19,8 @@ packages: - 'tests/*' catalog: + # Keep the Angular runtime/compiler patch set aligned so compiler-cli, + # language-service, and the framework runtime all resolve the same release. '@angular/animations': 21.2.8 '@angular/cdk': 21.2.6 '@angular/common': 21.2.8 From 3155d19112ea6ef94d993a821acfb3a0d5c3cf32 Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 10:44:05 -0400 Subject: [PATCH 09/22] feat: enhance configuration handling and improve test stability by cloning user config and environments --- apps/docs-app/docs/guides/debugging.md | 4 + .../angular-vite-plugin-live-reload.spec.ts | 31 ++++++- .../lib/angular-vite-plugin-transform.spec.ts | 7 ++ .../src/lib/angular-vite-plugin.spec.ts | 66 ++++++++++----- .../src/lib/vite-plugin-nitro.spec.ts | 52 +++++++++--- .../src/lib/vite-plugin-nitro.ts | 81 ++++++++++++++++++- 6 files changed, 206 insertions(+), 35 deletions(-) diff --git a/apps/docs-app/docs/guides/debugging.md b/apps/docs-app/docs/guides/debugging.md index 0d8985dfa..ca299ba53 100644 --- a/apps/docs-app/docs/guides/debugging.md +++ b/apps/docs-app/docs/guides/debugging.md @@ -234,6 +234,10 @@ The examples above include the full set of published Analog workspace packages t | `analog:nitro:ssr` | Server-side rendering | | `analog:nitro:prerender` | Prerendering | +:::note +When debugging SSR builds that reuse shared plugins, seeing repeated `@analogjs/vite-plugin-angular` entries in the resolved SSR plugin list can be expected. That SSR duplication is not the same as registering `analog()` twice in the client build. +::: + ## Using with `@analogjs/vite-plugin-angular` standalone The `debug` option is also available when using the Angular plugin directly: diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts index 1910b4437..54b97c64b 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts @@ -1,4 +1,5 @@ import { + existsSync, mkdtempSync, mkdirSync, readFileSync, @@ -11,9 +12,9 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; const preprocessCSSMock = vi.fn(); const createAngularCompilationMock = vi.fn(); -const workspaceRoot = '/workspace/analog'; const originalNodeEnv = process.env['NODE_ENV']; const originalVitestEnv = process.env['VITEST']; +const temporaryWorkspaceRoots = new Set(); // Cache the real module exports once so vi.doMock factories can be // synchronous. Async factories inside vi.doMock can race with @@ -44,13 +45,35 @@ async function setupLiveReloadPlugin(options: { process.env['NODE_ENV'] = 'development'; delete process.env['VITEST']; - const resolvedWorkspaceRoot = options.workspaceRoot ?? workspaceRoot; + const resolvedWorkspaceRoot = + options.workspaceRoot ?? + mkdtempSync(join(tmpdir(), 'analog-live-reload-workspace-')); + if (!options.workspaceRoot) { + temporaryWorkspaceRoots.add(resolvedWorkspaceRoot); + } const resolvedTsconfig = options.tsconfig ?? `${resolvedWorkspaceRoot}/tsconfig.base.json`; const resolvedCacheDir = join( resolvedWorkspaceRoot, 'node_modules/.vite/live-reload-spec', ); + mkdirSync(resolvedWorkspaceRoot, { recursive: true }); + if (!options.tsconfig && !existsSync(resolvedTsconfig)) { + writeFileSync( + resolvedTsconfig, + JSON.stringify( + { + compilerOptions: { + module: 'esnext', + moduleResolution: 'bundler', + target: 'es2022', + }, + }, + null, + 2, + ), + ); + } cachedViteActual ??= await vi.importActual('vite'); cachedDevkitActual ??= @@ -149,6 +172,10 @@ describe('angular hmr style preprocessing', () => { vi.doUnmock('vite'); vi.doUnmock('./utils/devkit.js'); vi.doUnmock('node:fs'); + for (const workspaceRoot of temporaryWorkspaceRoots) { + rmSync(workspaceRoot, { recursive: true, force: true }); + } + temporaryWorkspaceRoots.clear(); if (originalNodeEnv === undefined) { delete process.env['NODE_ENV']; diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts index 30fb4d7d5..729bf395d 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts @@ -64,6 +64,12 @@ async function setupLegacyTransformPlugin() { mergeTransformers: vi.fn(() => ({})), })); + vi.doMock('./analog-compiler-plugin.js', () => ({ + analogCompilerPlugin: vi.fn(() => ({ + name: 'mock-analog-compiler-plugin', + })), + })); + vi.doMock('./utils/devkit.js', () => ({ JavaScriptTransformer: class { close = vi.fn(); @@ -122,6 +128,7 @@ describe('legacy Angular transform', () => { vi.doUnmock('@angular/compiler-cli'); vi.doUnmock('./compiler-plugin.js'); vi.doUnmock('./host.js'); + vi.doUnmock('./analog-compiler-plugin.js'); vi.doUnmock('./utils/devkit.js'); for (const workspaceRoot of temporaryWorkspaceRoots) { rmSync(workspaceRoot, { recursive: true, force: true }); diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts index b6e34c0d2..f4bf29cb0 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts @@ -1,4 +1,13 @@ -import { afterEach, beforeEach, describe, it, expect, vi } from 'vitest'; +import { + afterAll, + afterEach, + beforeAll, + beforeEach, + describe, + it, + expect, + vi, +} from 'vitest'; import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'; import * as realFs from 'node:fs'; import { tmpdir } from 'node:os'; @@ -46,25 +55,33 @@ describe('angularVitePlugin', () => { }); it('prebundles rxjs and tslib in optimizeDeps', async () => { - const plugin = angular().find( - (p) => p.name === '@analogjs/vite-plugin-angular', - ) as Plugin; - const configHook = - typeof plugin.config === 'function' - ? plugin.config - : (plugin.config as any)?.handler; + const tempRoot = mkdtempSync(join(tmpdir(), 'analog-optimize-deps-')); + const tsconfigPath = join(tempRoot, 'tsconfig.spec.json'); + writeFileSync(tsconfigPath, '{\n "compilerOptions": {}\n}\n', 'utf-8'); - const config = await configHook?.call( - {} as any, - { resolve: {} }, - { command: 'serve', mode: 'development' }, - ); + try { + const plugin = angular({ tsconfig: tsconfigPath }).find( + (p) => p.name === '@analogjs/vite-plugin-angular', + ) as Plugin; + const configHook = + typeof plugin.config === 'function' + ? plugin.config + : (plugin.config as any)?.handler; - expect(config?.optimizeDeps?.include).toEqual([ - 'rxjs/operators', - 'rxjs', - 'tslib', - ]); + const config = await configHook?.call( + {} as any, + { resolve: {} }, + { command: 'serve', mode: 'development' }, + ); + + expect(config?.optimizeDeps?.include).toEqual([ + 'rxjs/operators', + 'rxjs', + 'tslib', + ]); + } finally { + rmSync(tempRoot, { recursive: true, force: true }); + } }); }); @@ -1369,7 +1386,18 @@ describe('template class binding guard plugin', () => { // ============================================================================= describe('tailwind-reference plugin', () => { - const ROOT_CSS = '/project/src/styles/tailwind.css'; + let rootCssDir = ''; + let ROOT_CSS = ''; + + beforeAll(() => { + rootCssDir = mkdtempSync(join(tmpdir(), 'analog-tailwind-root-')); + ROOT_CSS = join(rootCssDir, 'tailwind.css'); + writeFileSync(ROOT_CSS, '@import "tailwindcss" prefix(sa);\n', 'utf-8'); + }); + + afterAll(() => { + rmSync(rootCssDir, { recursive: true, force: true }); + }); /** * Helper: extract the tailwind-reference sub-plugin from the array diff --git a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts index 4537a6fa9..2c82de429 100644 --- a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts +++ b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts @@ -10,6 +10,9 @@ vi.mock('nitro/builder', () => ({ createNitro: vi.fn(), })); +vi.mock('./build-server'); +vi.mock('./build-sitemap'); + vi.mock('./build-ssr', async (importOriginal) => { const actual = await importOriginal(); return { @@ -39,9 +42,6 @@ function writeBuiltClientIndexHtml( } describe('nitro', () => { - vi.mock('./build-server'); - vi.mock('./build-sitemap'); - afterEach(() => { vi.restoreAllMocks(); vi.unstubAllEnvs(); @@ -57,6 +57,8 @@ describe('nitro', () => { const workspaceRoot = mkdtempSync(join(tmpdir(), 'analog-nitro-config-')); const originalBuildOutDir = 'custom-client'; + const originalAlias = { '@app/root': '/virtual/original-entry.ts' }; + const originalClientEnvironmentOutDir = 'env-client-output'; const pluginPrototype = { marker: 'user-plugin-prototype' }; const originalHook = { handler: vi.fn(), order: 'pre' }; const userPlugin = Object.assign(Object.create(pluginPrototype), { @@ -66,7 +68,17 @@ describe('nitro', () => { const userConfig: vite.UserConfig = { root: workspaceRoot, build: { outDir: originalBuildOutDir }, + environments: { + client: { + build: { + outDir: originalClientEnvironmentOutDir, + }, + }, + } as vite.UserConfig['environments'], plugins: [userPlugin], + resolve: { + alias: originalAlias, + }, }; const ssrBuildDir = resolve(workspaceRoot, 'dist', 'ssr'); @@ -97,8 +109,19 @@ describe('nitro', () => { // Mutate the original object after config capture. Nitro should keep // building from its snapshot, not from this live user-owned reference. userConfig.build!.outDir = 'mutated-client'; + userConfig.resolve!.alias = { + '@app/root': '/virtual/mutated-entry.ts', + }; + ( + userConfig.environments!['client'] as { build?: { outDir?: string } } + ).build = { + outDir: 'mutated-env-client-output', + }; (userConfig.plugins![0] as Record)['configResolved'] = mutatedHook; + userConfig.plugins!.push({ + name: 'mutated-plugin', + } as vite.Plugin); await (plugin[1].closeBundle as any)(); @@ -111,8 +134,16 @@ describe('nitro', () => { const capturedPlugin = capturedConfig?.plugins?.[0] as | Record | undefined; + const capturedClientEnvironment = capturedConfig?.environments?.[ + 'client' + ] as { build?: { outDir?: string } } | undefined; expect(capturedConfig?.build?.outDir).toBe(originalBuildOutDir); + expect(capturedConfig?.resolve?.alias).toEqual(originalAlias); + expect(capturedClientEnvironment?.build?.outDir).toBe( + originalClientEnvironmentOutDir, + ); + expect(capturedConfig?.plugins).toHaveLength(1); expect(capturedPlugin).toBeDefined(); expect(Object.getPrototypeOf(capturedPlugin!)).toBe(pluginPrototype); expect(capturedPlugin?.['configResolved']).toEqual(originalHook); @@ -790,8 +821,7 @@ describe('nitro', () => { describe.skip('preset output', () => { it('should use the analog output paths when preset is not vercel', async () => { // Arrange - vi.mock('process'); - process.cwd = vi.fn().mockReturnValue('/custom-root-directory'); + vi.spyOn(process, 'cwd').mockReturnValue('/custom-root-directory'); const { buildServerImportSpy } = await mockBuildFunctions(); const plugin = nitro({}, {}); @@ -813,8 +843,7 @@ describe('nitro', () => { it('should use the workspace root option when it is set', async () => { // Arrange - vi.mock('process'); - process.cwd = vi.fn().mockReturnValue('/some-other-root-directory'); + vi.spyOn(process, 'cwd').mockReturnValue('/some-other-root-directory'); const { buildServerImportSpy } = await mockBuildFunctions(); const plugin = nitro({ workspaceRoot: '/custom-root-directory' }, {}); @@ -837,8 +866,7 @@ describe('nitro', () => { it('should use the .vercel output paths when preset is vercel', async () => { // Arrange - vi.mock('process'); - process.cwd = vi.fn().mockReturnValue('/custom-root-directory'); + vi.spyOn(process, 'cwd').mockReturnValue('/custom-root-directory'); const { buildServerImportSpy } = await mockBuildFunctions(); const plugin = nitro({}, { preset: 'vercel' }); @@ -867,8 +895,7 @@ describe('nitro', () => { it('should use the .vercel output paths without runtime config when preset is vercel', async () => { // Arrange - vi.mock('process'); - process.cwd = vi.fn().mockReturnValue('/custom-root-directory'); + vi.spyOn(process, 'cwd').mockReturnValue('/custom-root-directory'); const { buildServerImportSpy } = await mockBuildFunctions(); const plugin = nitro({}, { preset: 'vercel' }); @@ -892,8 +919,7 @@ describe('nitro', () => { it('should use the .vercel output paths when preset is VERCEL environment variable is set', async () => { // Arrange vi.stubEnv('VERCEL', '1'); - vi.mock('process'); - process.cwd = vi.fn().mockReturnValue('/custom-root-directory'); + vi.spyOn(process, 'cwd').mockReturnValue('/custom-root-directory'); const { buildServerImportSpy } = await mockBuildFunctions(); const plugin = nitro({}, {}); diff --git a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts index 3b54e7dbd..a3ed7c5b0 100644 --- a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts +++ b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts @@ -37,12 +37,28 @@ import { debugNitro, debugSsr } from './utils/debug.js'; // Nitro reuses the captured Vite config across client and SSR passes. Snapshot // the caller's objects up front so later user mutations do not leak into the // build orchestration for either environment. +// +// Pitfall if we keep a live reference: +// - `build.outDir` can change after capture, sending the client sub-build to a +// different directory than the one Nitro later probes for `index.html`. +// - a plugin can replace `{ handler, order }` with a new wrapper object, which +// changes hook ordering for Nitro even though Nitro already "captured" config. +// - `resolve.alias` can be rewritten between the client and SSR passes, causing +// the two environments to build against different module graphs. type ObjectHook = { handler: T; [key: string]: unknown }; function isObjectHook(value: unknown): value is ObjectHook { return !!value && typeof value === 'object' && 'handler' in value; } +// Vite allows hook wrappers like `{ handler, order }`. Clone the mutable +// wrapper object so later writes to metadata do not leak into Nitro's stored +// config, but keep the original handler function because that is the behavior. +// +// Scenario: a caller swaps `{ handler, order: 'pre' }` for a fresh +// `{ handler, order: 'post' }` object after Nitro's `config()` hook ran. Nitro +// should keep the captured ordering metadata instead of silently retargeting +// when the outer wrapper object changes. function cloneObjectHook(hook: T): T { if (!isObjectHook(hook)) { return hook; @@ -71,14 +87,68 @@ function cloneUserPlugin(plugin: T): T { return clone as T; } +function cloneEnvironmentEntries( + environments: UserConfig['environments'], +): UserConfig['environments'] { + if (!environments || typeof environments !== 'object') { + return environments; + } + + // Vite stores per-environment overrides in nested records. Snapshot the + // branches Nitro later inspects so a late write like + // `environments.client.build.outDir = ...` does not redirect follow-up + // diagnostics or asset lookups away from the client build Nitro already + // started coordinating. + return Object.fromEntries( + Object.entries(environments).map(([name, environment]) => { + if (!environment || typeof environment !== 'object') { + return [name, environment]; + } + + const environmentRecord = environment as Record; + return [ + name, + { + ...environmentRecord, + build: + environmentRecord['build'] && + typeof environmentRecord['build'] === 'object' + ? { ...(environmentRecord['build'] as Record) } + : environmentRecord['build'], + }, + ]; + }), + ) as UserConfig['environments']; +} + +// This is intentionally selective rather than a deep clone of the whole Vite +// config. Nitro only needs a stable snapshot of the mutable branches it keeps +// reading after the `config()` hook returns: plugin entries, build/server/test +// options, and resolve aliases. +// +// Pitfalls we are isolating here: +// - a later write to `config.build.outDir` can desynchronize where the client +// build writes files vs where Nitro tries to read them back. +// - plugin array edits after capture can add/remove behavior from one sub-build +// but not the other, which makes client and SSR resolution diverge. +// - alias rewrites after capture can make the SSR environment import different +// files than the client environment even though Nitro is orchestrating one app. +// - environment-specific build overrides can drift after capture, which makes +// diagnostics and any environment-aware follow-up logic observe the wrong +// client/SSR shape. +// +// We do not deep-clone functions or plugin instances because Nitro still needs +// the original executable behavior and plugin shape; the problem is mutable +// container objects, not function identity. function cloneUserConfig(userConfig: UserConfig): UserConfig { - const { resolve, build, server, plugins } = userConfig; + const { environments, resolve, build, server, plugins } = userConfig; const test = (userConfig as UserConfig & { test?: Record }) .test; return { ...userConfig, plugins: plugins?.map(cloneUserPlugin), build: build && { ...build }, + environments: cloneEnvironmentEntries(environments), server: server && { ...server }, test: test && { ...test }, resolve: resolve && { @@ -603,6 +673,15 @@ export function nitro(options?: Options, nitroOptions?: NitroConfig): Plugin[] { isServe = command === 'serve'; isBuild = command === 'build'; ssrBuild = userConfig.build?.ssr === true; + // Store a stable view of the incoming Vite config before later config + // hooks or environment-specific setup can mutate the caller-owned + // object. + // + // Concrete failure mode: Nitro captures `userConfig`, then another + // hook rewrites `build.outDir` or replaces a plugin hook wrapper. If + // we keep the live object, `closeBundle()` and the SSR handoff can end + // up reading a different config than the one the client pass started + // with. config = cloneUserConfig(userConfig); isTest = isTest ? isTest : mode === 'test'; rollupExternalEntries.length = 0; From e0b491b014660311c3da5da8869962b1afc95c8f Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 10:47:50 -0400 Subject: [PATCH 10/22] chore: refine comments and enhance test stability in Angular and Nitro plugins by clarifying HMR behavior and config handling --- .../angular-vite-plugin-live-reload.spec.ts | 13 +- .../lib/angular-vite-plugin-transform.spec.ts | 3 + .../src/lib/angular-vite-plugin.spec.ts | 4 + .../src/lib/angular-vite-plugin.ts | 111 +++++++++--------- .../src/lib/vite-plugin-nitro.spec.ts | 6 +- .../src/lib/vite-plugin-nitro.ts | 45 +++---- tools/scripts/release-artifacts-config.mts | 2 +- 7 files changed, 99 insertions(+), 85 deletions(-) diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts index 54b97c64b..9f653477e 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts @@ -16,10 +16,13 @@ const originalNodeEnv = process.env['NODE_ENV']; const originalVitestEnv = process.env['VITEST']; const temporaryWorkspaceRoots = new Set(); -// Cache the real module exports once so vi.doMock factories can be -// synchronous. Async factories inside vi.doMock can race with -// vi.resetModules in CI, causing the real createAngularCompilation to -// leak through and spawn piscina workers that fail on the missing tsconfig. +// Cache the real module exports once so vi.doMock factories stay synchronous +// after vi.resetModules(). +// +// Value: this keeps the spec focused on the HMR stylesheet path. +// Guards against: async mock-factory races in CI that leak the real +// createAngularCompilation implementation, spawn worker threads, and fail on +// placeholder fixture tsconfig paths. let cachedViteActual: typeof import('vite'); let cachedDevkitActual: typeof import('./utils/devkit.js'); @@ -59,6 +62,8 @@ async function setupLiveReloadPlugin(options: { ); mkdirSync(resolvedWorkspaceRoot, { recursive: true }); if (!options.tsconfig && !existsSync(resolvedTsconfig)) { + // Use a real temporary tsconfig so the test exercises style HMR behavior + // without unrelated "tsconfig not found" warnings from the plugin setup. writeFileSync( resolvedTsconfig, JSON.stringify( diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts index 729bf395d..852b04ce6 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts @@ -64,6 +64,9 @@ async function setupLegacyTransformPlugin() { mergeTransformers: vi.fn(() => ({})), })); + // Keep this spec scoped to the "Angular emitted nothing" guard. Pulling in + // the real Analog compiler plugin would exercise the emitter stack instead + // of the opt-out behavior this regression test is protecting. vi.doMock('./analog-compiler-plugin.js', () => ({ analogCompilerPlugin: vi.fn(() => ({ name: 'mock-analog-compiler-plugin', diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts index f4bf29cb0..325ee70c1 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts @@ -57,6 +57,8 @@ describe('angularVitePlugin', () => { it('prebundles rxjs and tslib in optimizeDeps', async () => { const tempRoot = mkdtempSync(join(tmpdir(), 'analog-optimize-deps-')); const tsconfigPath = join(tempRoot, 'tsconfig.spec.json'); + // Use a real tsconfig path so this test stays about optimizeDeps output, + // not about the plugin warning on a deliberately missing config file. writeFileSync(tsconfigPath, '{\n "compilerOptions": {}\n}\n', 'utf-8'); try { @@ -1392,6 +1394,8 @@ describe('tailwind-reference plugin', () => { beforeAll(() => { rootCssDir = mkdtempSync(join(tmpdir(), 'analog-tailwind-root-')); ROOT_CSS = join(rootCssDir, 'tailwind.css'); + // Use an actual Tailwind root file so the assertions stay focused on + // @reference injection behavior instead of missing-file warnings. writeFileSync(ROOT_CSS, '@import "tailwindcss" prefix(sa);\n', 'utf-8'); }); diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts index 765daf52f..3306b02c8 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -1240,18 +1240,20 @@ export function angular(options?: PluginOptions): Plugin[] { const { encapsulation } = getComponentStyleSheetMeta( isDirect.id, ); - // Angular component styles are served through two live module + // Angular exposes one component stylesheet through two module // shapes: // 1. a `?direct&ngcomp=...` CSS module that Vite can patch with // a normal `css-update` // 2. a `?ngcomp=...` JS wrapper module that embeds `__vite__css` // for Angular's runtime consumption // - // If we only patch the direct CSS module, the browser can keep - // running a stale wrapper whose embedded CSS no longer matches - // the source file. We therefore invalidate any wrapper modules - // that map back to the same source stylesheet before sending - // the CSS update. + // Value: invalidate the browser-visible wrapper before patching + // the direct CSS module so Angular re-evaluates the same live + // wrapper it is actually using. + // + // Guards against: a successful-looking CSS HMR event that + // leaves the UI stale because the wrapper still holds the + // pre-edit CSS string. const wrapperModules = await findComponentStylesheetWrapperModules( ctx.server, @@ -1282,11 +1284,11 @@ export function angular(options?: PluginOptions): Plugin[] { stylesheetDiagnosis, ); - // The stylesheet registry may already hold the fresh served CSS - // while Vite still has a stale transform result cached for the - // direct `?direct&ngcomp=...` module id. Invalidate the direct - // module up front so subsequent wrapper generation and explicit - // fetches cannot keep serving the pre-edit CSS payload. + // Drop Vite's cached direct-module transform before wrapper + // lookup and patching continue. + // + // Value: later fetches and wrapper regeneration see the just + // edited stylesheet instead of the last served transform result. ctx.server.moduleGraph.invalidateModule(isDirect); debugHmrV('component stylesheet direct module invalidated', { file: ctx.file, @@ -1296,9 +1298,10 @@ export function angular(options?: PluginOptions): Plugin[] { 'Ensure Vite drops stale direct CSS transform results before wrapper or fallback handling continues.', }); - // Track if the component uses ShadowDOM encapsulation - // Shadow DOM components currently require a full reload. - // Vite's CSS hot replacement does not support shadow root searching. + // CSS-only HMR is safe only when the browser-visible wrapper is + // known and the component is not using Shadow DOM. Vite's CSS + // patching does not search shadow roots, so Shadow DOM still + // falls back to reload for correctness. const trackedWrapperRequestIds = stylesheetDiagnosis.trackedRequestIds.filter((id) => id.includes('?ngcomp='), @@ -1314,12 +1317,11 @@ export function angular(options?: PluginOptions): Plugin[] { ); // A live wrapper ModuleNode is ideal because we can // invalidate it directly, but it is not strictly required. - // When the browser has already loaded the wrapper URL and the - // registry knows that wrapper request id, a normal CSS patch - // against the direct stylesheet is still the most accurate - // update path available. Falling back to full reload in that - // state is needlessly pessimistic and causes the exact UX - // regression we are trying to eliminate. + // + // Value: keep CSS-only HMR working when the browser has + // already loaded the wrapper URL and the registry can still + // prove that wrapper identity, even if this HMR pass did not + // surface a live ModuleNode for it. debugHmrV('sending css-update for component stylesheet', { file: ctx.file, path: isDirect.url, @@ -1361,12 +1363,12 @@ export function angular(options?: PluginOptions): Plugin[] { ); } - // A direct CSS patch without the browser-visible `?ngcomp=...` - // wrapper module is not trustworthy. Angular consumes the - // wrapper JS module, which embeds `__vite__css` for runtime - // style application. When that wrapper is missing from the live - // module graph, prefer correctness over a partial update and - // force a reload so the component re-evaluates with fresh CSS. + // If the browser-visible `?ngcomp=...` wrapper cannot be + // trusted, prefer correctness over a partial patch and reload. + // + // Guards against: logging a "successful" CSS update while + // Angular keeps running stale wrapper JS that still embeds the + // old stylesheet contents. debugHmrV('component stylesheet hmr fallback: full reload', { file: ctx.file, encapsulation, @@ -1428,15 +1430,15 @@ export function angular(options?: PluginOptions): Plugin[] { derivedUpdates, }); // Keep owner recompilation and metadata derivation as - // diagnostics only. For externalized component styles, a - // component-update message is not a safe substitute for a - // missing `?ngcomp=...` wrapper module because Angular can + // diagnostics only. + // + // Value: the fallback log can still point at the affected + // components. + // + // Guards against: treating a component-update as a safe + // substitute for a missing wrapper module. Angular can // re-render the component without forcing the browser to - // re-evaluate the live stylesheet wrapper. That exact shape - // produced false-positive "successful HMR" logs while the UI - // stayed visually stale. If the wrapper is absent, prefer a - // hard reload after gathering the owner evidence needed to - // explain why the fallback was necessary. + // refresh the wrapper CSS, which leaves the UI visually stale. if (derivedUpdates.length > 0) { debugHmrV( 'component stylesheet owner fallback derived updates', @@ -1833,30 +1835,22 @@ export function angular(options?: PluginOptions): Plugin[] { } } - // Detect whether the code contains an Angular @Component decorator. + // Detect whether the source still contains a raw Angular + // `@Component` decorator. // - // IMPORTANT — useAngularCompilationAPI behavior: - // When `useAngularCompilationAPI: true`, the Angular Compilation API - // compiles TypeScript BEFORE this Vite transform hook fires. By the - // time `code` reaches here, @Component decorators have been compiled - // away into ɵɵdefineComponent() calls, so `hasComponent` is always - // false for actual component files. + // With `useAngularCompilationAPI`, Angular compiles TypeScript before + // this Vite hook runs, so real component files reach this point with + // `ɵɵdefineComponent()` output instead of `@Component(...)`. In that + // mode, `hasComponent === false` is expected. // - // This is expected and NOT a bug. The Angular Compilation API handles - // template and style resolution through its own internal pipeline: - // - Templates: resolved during compilation, not via templateUrls - // - Styles: externalized and served via the resolveId/load hooks - // (confirmed by `analog:angular:styles resolveId: mapped external - // stylesheet` debug messages) + // Value: this comment explains why the transform hook intentionally + // stops using decorator detection as a signal for Compilation API + // builds. // - // The only consequence of hasComponent=false is that external template - // and style files are not registered via addWatchFile(), which means - // HMR for external HTML/CSS edits may trigger a full reload instead of - // a targeted hot replacement. The Angular Compilation API's own - // invalidation mechanism handles recompilation regardless. - // - // For the legacy (non-API) compilation path, hasComponent works as - // expected because the transform hook sees raw TypeScript source. + // Effect: external template/style files are no longer registered via + // `addWatchFile()` on this path, so those edits may fall back to full + // reload more often. Angular's own invalidation still handles + // recompilation correctly. const hasComponent = code.includes('@Component'); debugCompilerV('transform', { id, @@ -2292,8 +2286,11 @@ export function angular(options?: PluginOptions): Plugin[] { config: ResolvedConfig, ): string { // Angular's Compilation API accepts one tsconfig path. When Analog adds - // extra roots via `include`, emit a tiny wrapper config instead of asking - // users to manually duplicate those roots in their checked-in tsconfig. + // extra roots via `include`, emit a tiny wrapper config that extends the + // user's tsconfig and enumerates the merged root set. + // + // Value: include-based workspace expansion works with the Compilation API + // without asking users to edit or duplicate their checked-in tsconfig. const includedFiles = ensureIncludeCache(); if (includedFiles.length === 0) { return resolvedTsConfigPath; diff --git a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts index 2c82de429..e49bbe12e 100644 --- a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts +++ b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.spec.ts @@ -106,8 +106,10 @@ describe('nitro', () => { }); const mutatedHook = { handler: vi.fn(), order: 'post' }; - // Mutate the original object after config capture. Nitro should keep - // building from its snapshot, not from this live user-owned reference. + // Simulate later config hooks mutating the user-owned object after + // Nitro's `config()` hook. The assertions below prove Nitro keeps + // building from the captured snapshot instead of drifting with those + // later edits. userConfig.build!.outDir = 'mutated-client'; userConfig.resolve!.alias = { '@app/root': '/virtual/mutated-entry.ts', diff --git a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts index a3ed7c5b0..0c0d45857 100644 --- a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts +++ b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts @@ -34,11 +34,10 @@ import { import { getBundleOptionsKey, isRolldown } from './utils/rolldown.js'; import { debugNitro, debugSsr } from './utils/debug.js'; -// Nitro reuses the captured Vite config across client and SSR passes. Snapshot -// the caller's objects up front so later user mutations do not leak into the -// build orchestration for either environment. +// Snapshot the caller-owned Vite config once so the client build, SSR handoff, +// and closeBundle all read the same view of the app. // -// Pitfall if we keep a live reference: +// Guards against: // - `build.outDir` can change after capture, sending the client sub-build to a // different directory than the one Nitro later probes for `index.html`. // - a plugin can replace `{ handler, order }` with a new wrapper object, which @@ -51,11 +50,11 @@ function isObjectHook(value: unknown): value is ObjectHook { return !!value && typeof value === 'object' && 'handler' in value; } -// Vite allows hook wrappers like `{ handler, order }`. Clone the mutable -// wrapper object so later writes to metadata do not leak into Nitro's stored -// config, but keep the original handler function because that is the behavior. +// Freeze hook-wrapper metadata without changing the executable handler. +// Value: Nitro keeps the same hook ordering and flags it captured at config() +// time, while still invoking the original plugin behavior. // -// Scenario: a caller swaps `{ handler, order: 'pre' }` for a fresh +// Guards against: a caller swapping `{ handler, order: 'pre' }` for a fresh // `{ handler, order: 'post' }` object after Nitro's `config()` hook ran. Nitro // should keep the captured ordering metadata instead of silently retargeting // when the outer wrapper object changes. @@ -94,8 +93,11 @@ function cloneEnvironmentEntries( return environments; } - // Vite stores per-environment overrides in nested records. Snapshot the - // branches Nitro later inspects so a late write like + // Snapshot the per-environment overrides Nitro reads later. + // Value: environment-specific output paths and diagnostics stay aligned with + // the build Nitro already started coordinating. + // + // Guards against: a late write like // `environments.client.build.outDir = ...` does not redirect follow-up // diagnostics or asset lookups away from the client build Nitro already // started coordinating. @@ -121,12 +123,14 @@ function cloneEnvironmentEntries( ) as UserConfig['environments']; } -// This is intentionally selective rather than a deep clone of the whole Vite -// config. Nitro only needs a stable snapshot of the mutable branches it keeps -// reading after the `config()` hook returns: plugin entries, build/server/test -// options, and resolve aliases. +// Take a selective snapshot of the mutable config branches Nitro re-reads +// after `config()` returns: plugin entries, build/server/test options, resolve +// aliases, and environment overrides. +// +// Value: Nitro can coordinate multiple build phases from one stable config +// view without breaking plugin identity or executable behavior. // -// Pitfalls we are isolating here: +// Guards against: // - a later write to `config.build.outDir` can desynchronize where the client // build writes files vs where Nitro tries to read them back. // - plugin array edits after capture can add/remove behavior from one sub-build @@ -138,8 +142,8 @@ function cloneEnvironmentEntries( // client/SSR shape. // // We do not deep-clone functions or plugin instances because Nitro still needs -// the original executable behavior and plugin shape; the problem is mutable -// container objects, not function identity. +// the original executable behavior and plugin shape. The problem here is +// mutable container objects, not function identity. function cloneUserConfig(userConfig: UserConfig): UserConfig { const { environments, resolve, build, server, plugins } = userConfig; const test = (userConfig as UserConfig & { test?: Record }) @@ -673,11 +677,10 @@ export function nitro(options?: Options, nitroOptions?: NitroConfig): Plugin[] { isServe = command === 'serve'; isBuild = command === 'build'; ssrBuild = userConfig.build?.ssr === true; - // Store a stable view of the incoming Vite config before later config - // hooks or environment-specific setup can mutate the caller-owned - // object. + // Capture the incoming config at the `config()` boundary so every later + // Nitro phase reads the same settings the build started with. // - // Concrete failure mode: Nitro captures `userConfig`, then another + // Guards against: Nitro capturing `userConfig`, then another // hook rewrites `build.outDir` or replaces a plugin hook wrapper. If // we keep the live object, `closeBundle()` and the SSR handoff can end // up reading a different config than the one the client pass started diff --git a/tools/scripts/release-artifacts-config.mts b/tools/scripts/release-artifacts-config.mts index db114be23..a223d9322 100644 --- a/tools/scripts/release-artifacts-config.mts +++ b/tools/scripts/release-artifacts-config.mts @@ -9,7 +9,7 @@ export const releaseArtifacts: ReleaseArtifact[] = [ projectName: 'angular-compiler', packageName: '@analogjs/angular-compiler', publishDir: 'packages/angular-compiler/dist', - }, + }, { projectName: 'astro-angular', packageName: '@analogjs/astro-angular', From 71b31a99f49723f512d1611eae436403243d20f4 Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 10:55:18 -0400 Subject: [PATCH 11/22] feat: improve handling of CSS comments and references, ensuring quoted comments do not interfere with directive detection --- .../src/lib/tailwind-preprocessor.spec.ts | 33 ++++++- .../platform/src/lib/tailwind-preprocessor.ts | 93 ++++++++++++++++--- .../angular-vite-plugin-live-reload.spec.ts | 22 ++++- .../src/lib/angular-vite-plugin.spec.ts | 24 +++++ .../src/lib/angular-vite-plugin.ts | 79 ++++++++++++++-- 5 files changed, 229 insertions(+), 22 deletions(-) diff --git a/packages/platform/src/lib/tailwind-preprocessor.spec.ts b/packages/platform/src/lib/tailwind-preprocessor.spec.ts index 287dfd387..5cf633083 100644 --- a/packages/platform/src/lib/tailwind-preprocessor.spec.ts +++ b/packages/platform/src/lib/tailwind-preprocessor.spec.ts @@ -57,10 +57,41 @@ describe('tailwindPreprocessor', () => { '/project/src/app/demo.component.css', ), ).toThrowError( - /contains the text "@reference" but does not contain a real @reference directive/, + /Add a real @reference "\.\.\/styles\/tailwind\.css"; directive/, ); }); + it('does not treat quoted comment markers as real CSS comments', () => { + vi.mocked(readFileSync).mockReturnValue( + '@import "tailwindcss" prefix(sa);', + ); + const preprocess = tailwindPreprocessor({ + tailwindRootCss: '/project/src/styles/tailwind.css', + }); + const code = + '.demo::before { content: "/* @reference */"; }\n.demo { @apply sa:text-red-500; }'; + + expect(preprocess(code, '/project/src/app/demo.component.css')).toBe( + `@reference "../styles/tailwind.css";\n${code}`, + ); + }); + + it('prefixes same-directory reference hints with ./', () => { + vi.mocked(readFileSync).mockReturnValue( + '@import "tailwindcss" prefix(sa);', + ); + const preprocess = tailwindPreprocessor({ + tailwindRootCss: '/project/src/styles/tailwind.css', + }); + + expect(() => + preprocess( + '/* keep this comment away from @reference injection */\n.demo { @apply sa:text-red-500; }', + '/project/src/styles/demo.component.css', + ), + ).toThrowError(/Add a real @reference "\.\/tailwind\.css"; directive/); + }); + it('skips injection when no Tailwind prefix is configured', () => { vi.mocked(readFileSync).mockReturnValue('@import "tailwindcss";'); const preprocess = tailwindPreprocessor({ diff --git a/packages/platform/src/lib/tailwind-preprocessor.ts b/packages/platform/src/lib/tailwind-preprocessor.ts index 747480b85..1ca559d03 100644 --- a/packages/platform/src/lib/tailwind-preprocessor.ts +++ b/packages/platform/src/lib/tailwind-preprocessor.ts @@ -6,7 +6,6 @@ import { debugTailwind } from './utils/debug.js'; export type TailwindPreprocessorMode = 'auto' | 'disabled' | { prefix: string }; const PLATFORM_TAILWIND_PREFIX = '[@analogjs/platform]'; -const CSS_BLOCK_COMMENT_REGEX = /\/\*[\s\S]*?\*\//g; const CSS_REFERENCE_DIRECTIVE_REGEX = /(^|[;}\n\r])\s*@reference\b/m; const CSS_TAILWIND_IMPORT_REGEX = /(^|[;}\n\r])\s*@import\s+["']tailwindcss["']/m; @@ -18,28 +17,98 @@ interface CssTailwindDirectiveState { hasTailwindImportDirective: boolean; } -// Comment text should not count as a real Tailwind directive. Strip it before -// matching so prose like "/* add @reference here */" cannot disable injection. +// Mask real block comments and string bodies before directive detection. This +// keeps prose like `/* add @reference here */` from disabling injection while +// also preventing quoted CSS content from masquerading as a directive. function stripCssBlockComments(code: string): string { - return code.replace(CSS_BLOCK_COMMENT_REGEX, (comment) => - comment.replace(/[^\n\r]/g, ' '), - ); + let result = ''; + let quote: '"' | "'" | '`' | null = null; + + for (let index = 0; index < code.length; index++) { + const character = code[index]; + const nextCharacter = code[index + 1]; + + if (quote) { + if (character === '\\' && nextCharacter) { + result += ' '; + result += + nextCharacter === '\n' || nextCharacter === '\r' + ? nextCharacter + : ' '; + index++; + continue; + } + if (character === quote) { + quote = null; + result += character; + continue; + } + result += character === '\n' || character === '\r' ? character : ' '; + continue; + } + + if (character === '"' || character === "'" || character === '`') { + quote = character; + result += character; + continue; + } + + if (character === '/' && nextCharacter === '*') { + result += ' '; + index += 2; + + while (index < code.length) { + const commentCharacter = code[index]; + const commentNextCharacter = code[index + 1]; + + if (commentCharacter === '*' && commentNextCharacter === '/') { + result += ' '; + index++; + break; + } + + result += + commentCharacter === '\n' || commentCharacter === '\r' + ? commentCharacter + : ' '; + index++; + } + continue; + } + + result += character; + } + + return result; } function inspectCssTailwindDirectives(code: string): CssTailwindDirectiveState { const commentlessCode = stripCssBlockComments(code); + const hasReferenceText = code.includes('@reference'); return { commentlessCode, hasReferenceDirective: CSS_REFERENCE_DIRECTIVE_REGEX.test(commentlessCode), - hasReferenceText: code.includes('@reference'), + hasReferenceText: + hasReferenceText && !commentlessCode.includes('@reference'), hasTailwindImportDirective: CSS_TAILWIND_IMPORT_REGEX.test(commentlessCode), }; } -function throwTailwindReferenceTextError( +function toReferenceSpecifier( filename: string, tailwindRootCss: string, +): string { + const fromDir = path.posix.dirname(filename.replace(/\\/g, '/')); + const toFile = tailwindRootCss.replace(/\\/g, '/'); + const relativePath = path.posix.relative(fromDir, toFile); + + return relativePath.startsWith('.') ? relativePath : `./${relativePath}`; +} + +function throwTailwindReferenceTextError( + filename: string, + referenceSpecifier: string, ): never { throw new Error( `${PLATFORM_TAILWIND_PREFIX} Tailwind @reference auto-injection was ` + @@ -50,7 +119,7 @@ function throwTailwindReferenceTextError( `"/* ... @reference ... */".\n\n` + `Fix one of:\n` + ` - Reword the comment so it does not contain "@reference"\n` + - ` - Add a real @reference "${tailwindRootCss}"; directive\n`, + ` - Add a real @reference "${referenceSpecifier}"; directive\n`, ); } @@ -127,13 +196,11 @@ export function tailwindPreprocessor( return code; } + const refPath = toReferenceSpecifier(filename, tailwindRootCss); if (directiveState.hasReferenceText) { - throwTailwindReferenceTextError(filename, tailwindRootCss); + throwTailwindReferenceTextError(filename, refPath); } - const refPath = path - .relative(path.dirname(filename), tailwindRootCss) - .replace(/\\/g, '/'); debugTailwind('injected @reference', { filename, refPath }); return `@reference "${refPath}";\n${code}`; diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts index 9f653477e..345c8e0be 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts @@ -393,6 +393,19 @@ describe('angular hmr style preprocessing', () => { target: 'es2022', }, files: ['./src/app/app.component.ts'], + references: [{ path: './libs/shared/feature/tsconfig.lib.json' }], + }, + null, + 2, + ), + ); + writeFileSync( + join(tempWorkspaceRoot, 'libs/shared/feature/tsconfig.lib.json'), + JSON.stringify( + { + compilerOptions: { + composite: true, + }, }, null, 2, @@ -414,7 +427,11 @@ describe('angular hmr style preprocessing', () => { const generatedConfig = JSON.parse( readFileSync(generatedTsconfigPath, 'utf-8'), - ) as { extends: string; files: string[] }; + ) as { + extends: string; + files: string[]; + references?: Array<{ path: string }>; + }; expect(generatedConfig.extends).toBe( normalize(join(tempWorkspaceRoot, 'tsconfig.base.json')), @@ -430,6 +447,9 @@ describe('angular hmr style preprocessing', () => { ), ]), ); + expect(generatedConfig.references).toEqual([ + { path: './libs/shared/feature/tsconfig.lib.json' }, + ]); } finally { rmSync(tempWorkspaceRoot, { force: true, recursive: true }); } diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts index 325ee70c1..a551c496e 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts @@ -1537,6 +1537,18 @@ describe('tailwind-reference plugin', () => { ); }); + it('does not treat quoted comment markers as a collision', () => { + const css = + '.demo::before { content: "/* @reference */"; }\n.demo { @apply sa:flex; }'; + const result = callTransform( + plugin, + css, + '/project/src/app/demo.component.css', + ); + + expect(result).toBe(`@reference "${ROOT_CSS}";\n${css}`); + }); + it('skips CSS that imports tailwindcss directly (double quotes)', () => { const css = '@import "tailwindcss" prefix(sa);\n.demo { @apply sa:flex; }'; @@ -1634,6 +1646,18 @@ describe('tailwind-reference plugin', () => { /contains the text "@reference" but does not contain a real @reference directive/, ); }); + + it('does not treat quoted comment markers as a collision', () => { + const preprocessor = buildStylePreprocessor({ + tailwindCss: { rootStylesheet: ROOT_CSS, prefixes: ['sa:'] }, + }); + const css = + '.demo::before { content: "/* @reference */"; }\n.demo { @apply sa:flex; }'; + + expect(preprocessor?.(css, '/project/src/app/demo.component.css')).toBe( + `@reference "${ROOT_CSS}";\n${css}`, + ); + }); }); }); diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts index 3306b02c8..8a397bd28 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -298,7 +298,6 @@ export function normalizeIncludeGlob( const classNames = new Map(); const ANGULAR_TAILWIND_PREFIX = '[@analogjs/vite-plugin-angular]'; -const CSS_BLOCK_COMMENT_REGEX = /\/\*[\s\S]*?\*\//g; const CSS_REFERENCE_DIRECTIVE_REGEX = /(^|[;}\n\r])\s*@reference\b/m; const CSS_TAILWIND_IMPORT_REGEX = /(^|[;}\n\r])\s*@import\s+["']tailwindcss["']/m; @@ -310,21 +309,80 @@ interface CssTailwindDirectiveState { hasTailwindImportDirective: boolean; } -// Match real CSS directives, not comment text, so the Angular plugin and the -// shared style preprocessor make the same Tailwind decisions. +// Match real CSS directives, not prose inside block comments or quoted CSS +// content. This keeps Tailwind collision detection aligned with the platform +// preprocessor instead of letting strings masquerade as directives. function stripCssBlockComments(code: string): string { - return code.replace(CSS_BLOCK_COMMENT_REGEX, (comment) => - comment.replace(/[^\n\r]/g, ' '), - ); + let result = ''; + let quote: '"' | "'" | '`' | null = null; + + for (let index = 0; index < code.length; index++) { + const character = code[index]; + const nextCharacter = code[index + 1]; + + if (quote) { + if (character === '\\' && nextCharacter) { + result += ' '; + result += + nextCharacter === '\n' || nextCharacter === '\r' + ? nextCharacter + : ' '; + index++; + continue; + } + if (character === quote) { + quote = null; + result += character; + continue; + } + result += character === '\n' || character === '\r' ? character : ' '; + continue; + } + + if (character === '"' || character === "'" || character === '`') { + quote = character; + result += character; + continue; + } + + if (character === '/' && nextCharacter === '*') { + result += ' '; + index += 2; + + while (index < code.length) { + const commentCharacter = code[index]; + const commentNextCharacter = code[index + 1]; + + if (commentCharacter === '*' && commentNextCharacter === '/') { + result += ' '; + index++; + break; + } + + result += + commentCharacter === '\n' || commentCharacter === '\r' + ? commentCharacter + : ' '; + index++; + } + continue; + } + + result += character; + } + + return result; } function inspectCssTailwindDirectives(code: string): CssTailwindDirectiveState { const commentlessCode = stripCssBlockComments(code); + const hasReferenceText = code.includes('@reference'); return { commentlessCode, hasReferenceDirective: CSS_REFERENCE_DIRECTIVE_REGEX.test(commentlessCode), - hasReferenceText: code.includes('@reference'), + hasReferenceText: + hasReferenceText && !commentlessCode.includes('@reference'), hasTailwindImportDirective: CSS_TAILWIND_IMPORT_REGEX.test(commentlessCode), }; } @@ -2313,9 +2371,16 @@ export function angular(options?: PluginOptions): Plugin[] { 'analog-angular', 'compilation-api', ); + // TypeScript does not inherit top-level `references` through `extends`, so + // carry them forward explicitly when Analog emits a wrapper tsconfig. + const rawTsconfig = (ts.readConfigFile( + resolvedTsConfigPath, + ts.sys.readFile, + ).config ?? {}) as { references?: unknown[] }; const wrapperPayload = { extends: normalizePath(resolvedTsConfigPath), files: [...mergedRootNames].sort(), + ...(rawTsconfig.references ? { references: rawTsconfig.references } : {}), }; const wrapperHash = createHash('sha1') .update(JSON.stringify(wrapperPayload)) From 69af0950d016fcbb6d83781ec915a3249cd0e13f Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 10:56:33 -0400 Subject: [PATCH 12/22] feat: add function to detect @reference text in comments and refine CSS comment handling for directive detection --- .../platform/src/lib/tailwind-preprocessor.ts | 67 +++++++++++++++---- .../src/lib/angular-vite-plugin.spec.ts | 6 +- .../src/lib/angular-vite-plugin.ts | 67 +++++++++++++++---- 3 files changed, 109 insertions(+), 31 deletions(-) diff --git a/packages/platform/src/lib/tailwind-preprocessor.ts b/packages/platform/src/lib/tailwind-preprocessor.ts index 1ca559d03..6de9b96d5 100644 --- a/packages/platform/src/lib/tailwind-preprocessor.ts +++ b/packages/platform/src/lib/tailwind-preprocessor.ts @@ -17,9 +17,9 @@ interface CssTailwindDirectiveState { hasTailwindImportDirective: boolean; } -// Mask real block comments and string bodies before directive detection. This -// keeps prose like `/* add @reference here */` from disabling injection while -// also preventing quoted CSS content from masquerading as a directive. +// Mask real block comments while preserving quoted CSS content. This keeps +// prose like `/* add @reference here */` from disabling injection without +// mistaking `/* ... */` sequences inside strings for real comments. function stripCssBlockComments(code: string): string { let result = ''; let quote: '"' | "'" | '`' | null = null; @@ -30,20 +30,15 @@ function stripCssBlockComments(code: string): string { if (quote) { if (character === '\\' && nextCharacter) { - result += ' '; - result += - nextCharacter === '\n' || nextCharacter === '\r' - ? nextCharacter - : ' '; + result += character; + result += nextCharacter; index++; continue; } if (character === quote) { quote = null; - result += character; - continue; } - result += character === '\n' || character === '\r' ? character : ' '; + result += character; continue; } @@ -82,15 +77,59 @@ function stripCssBlockComments(code: string): string { return result; } +function hasReferenceTextInComments(code: string): boolean { + let quote: '"' | "'" | '`' | null = null; + + for (let index = 0; index < code.length; index++) { + const character = code[index]; + const nextCharacter = code[index + 1]; + + if (quote) { + if (character === '\\' && nextCharacter) { + index++; + continue; + } + if (character === quote) { + quote = null; + } + continue; + } + + if (character === '"' || character === "'" || character === '`') { + quote = character; + continue; + } + + if (character === '/' && nextCharacter === '*') { + const commentStart = index + 2; + index += 2; + + while (index < code.length) { + const commentCharacter = code[index]; + const commentNextCharacter = code[index + 1]; + + if (commentCharacter === '*' && commentNextCharacter === '/') { + break; + } + index++; + } + + if (code.slice(commentStart, index).includes('@reference')) { + return true; + } + } + } + + return false; +} + function inspectCssTailwindDirectives(code: string): CssTailwindDirectiveState { const commentlessCode = stripCssBlockComments(code); - const hasReferenceText = code.includes('@reference'); return { commentlessCode, hasReferenceDirective: CSS_REFERENCE_DIRECTIVE_REGEX.test(commentlessCode), - hasReferenceText: - hasReferenceText && !commentlessCode.includes('@reference'), + hasReferenceText: hasReferenceTextInComments(code), hasTailwindImportDirective: CSS_TAILWIND_IMPORT_REGEX.test(commentlessCode), }; } diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts index a551c496e..710385a09 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts @@ -1654,9 +1654,9 @@ describe('tailwind-reference plugin', () => { const css = '.demo::before { content: "/* @reference */"; }\n.demo { @apply sa:flex; }'; - expect(preprocessor?.(css, '/project/src/app/demo.component.css')).toBe( - `@reference "${ROOT_CSS}";\n${css}`, - ); + expect( + preprocessor?.(css, '/project/src/app/demo.component.css')?.code, + ).toBe(`@reference "${ROOT_CSS}";\n${css}`); }); }); }); diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts index 8a397bd28..03d07bc51 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -309,9 +309,9 @@ interface CssTailwindDirectiveState { hasTailwindImportDirective: boolean; } -// Match real CSS directives, not prose inside block comments or quoted CSS -// content. This keeps Tailwind collision detection aligned with the platform -// preprocessor instead of letting strings masquerade as directives. +// Match real CSS directives, not prose inside block comments. The scanner keeps +// quoted CSS content intact so `/* ... */` sequences inside strings do not get +// mistaken for real comments. function stripCssBlockComments(code: string): string { let result = ''; let quote: '"' | "'" | '`' | null = null; @@ -322,20 +322,15 @@ function stripCssBlockComments(code: string): string { if (quote) { if (character === '\\' && nextCharacter) { - result += ' '; - result += - nextCharacter === '\n' || nextCharacter === '\r' - ? nextCharacter - : ' '; + result += character; + result += nextCharacter; index++; continue; } if (character === quote) { quote = null; - result += character; - continue; } - result += character === '\n' || character === '\r' ? character : ' '; + result += character; continue; } @@ -374,15 +369,59 @@ function stripCssBlockComments(code: string): string { return result; } +function hasReferenceTextInComments(code: string): boolean { + let quote: '"' | "'" | '`' | null = null; + + for (let index = 0; index < code.length; index++) { + const character = code[index]; + const nextCharacter = code[index + 1]; + + if (quote) { + if (character === '\\' && nextCharacter) { + index++; + continue; + } + if (character === quote) { + quote = null; + } + continue; + } + + if (character === '"' || character === "'" || character === '`') { + quote = character; + continue; + } + + if (character === '/' && nextCharacter === '*') { + const commentStart = index + 2; + index += 2; + + while (index < code.length) { + const commentCharacter = code[index]; + const commentNextCharacter = code[index + 1]; + + if (commentCharacter === '*' && commentNextCharacter === '/') { + break; + } + index++; + } + + if (code.slice(commentStart, index).includes('@reference')) { + return true; + } + } + } + + return false; +} + function inspectCssTailwindDirectives(code: string): CssTailwindDirectiveState { const commentlessCode = stripCssBlockComments(code); - const hasReferenceText = code.includes('@reference'); return { commentlessCode, hasReferenceDirective: CSS_REFERENCE_DIRECTIVE_REGEX.test(commentlessCode), - hasReferenceText: - hasReferenceText && !commentlessCode.includes('@reference'), + hasReferenceText: hasReferenceTextInComments(code), hasTailwindImportDirective: CSS_TAILWIND_IMPORT_REGEX.test(commentlessCode), }; } From ac4a4cabf08cfd8a591a997fb0058dc3469f045b Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 11:06:55 -0400 Subject: [PATCH 13/22] feat: refactor CSS directive handling by extracting utility functions for Tailwind reference detection and improving test case timeout --- .../lib/angular-vite-plugin-transform.spec.ts | 2 +- .../src/lib/angular-vite-plugin.ts | 150 +----------------- .../src/lib/utils/tailwind-reference.ts | 147 +++++++++++++++++ 3 files changed, 152 insertions(+), 147 deletions(-) create mode 100644 packages/vite-plugin-angular/src/lib/utils/tailwind-reference.ts diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts index 852b04ce6..669efdd4b 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-transform.spec.ts @@ -169,5 +169,5 @@ describe('legacy Angular transform', () => { // `undefined` is the safe opt-out signal here: Vite or another plugin can // keep handling the file instead of Analog inventing a transform result. expect(result).toBeUndefined(); - }); + }, 15_000); }); diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts index 03d07bc51..59ecb93a1 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -90,6 +90,10 @@ import { type TsConfigResolutionContext, } from './utils/plugin-config.js'; import { getJsTransformConfigKey, isRolldown } from './utils/rolldown.js'; +import { + inspectCssTailwindDirectives, + throwTailwindReferenceTextError, +} from './utils/tailwind-reference.js'; import { toVirtualRawId, toVirtualStyleId, @@ -297,152 +301,6 @@ export function normalizeIncludeGlob( } const classNames = new Map(); -const ANGULAR_TAILWIND_PREFIX = '[@analogjs/vite-plugin-angular]'; -const CSS_REFERENCE_DIRECTIVE_REGEX = /(^|[;}\n\r])\s*@reference\b/m; -const CSS_TAILWIND_IMPORT_REGEX = - /(^|[;}\n\r])\s*@import\s+["']tailwindcss["']/m; - -interface CssTailwindDirectiveState { - commentlessCode: string; - hasReferenceDirective: boolean; - hasReferenceText: boolean; - hasTailwindImportDirective: boolean; -} - -// Match real CSS directives, not prose inside block comments. The scanner keeps -// quoted CSS content intact so `/* ... */` sequences inside strings do not get -// mistaken for real comments. -function stripCssBlockComments(code: string): string { - let result = ''; - let quote: '"' | "'" | '`' | null = null; - - for (let index = 0; index < code.length; index++) { - const character = code[index]; - const nextCharacter = code[index + 1]; - - if (quote) { - if (character === '\\' && nextCharacter) { - result += character; - result += nextCharacter; - index++; - continue; - } - if (character === quote) { - quote = null; - } - result += character; - continue; - } - - if (character === '"' || character === "'" || character === '`') { - quote = character; - result += character; - continue; - } - - if (character === '/' && nextCharacter === '*') { - result += ' '; - index += 2; - - while (index < code.length) { - const commentCharacter = code[index]; - const commentNextCharacter = code[index + 1]; - - if (commentCharacter === '*' && commentNextCharacter === '/') { - result += ' '; - index++; - break; - } - - result += - commentCharacter === '\n' || commentCharacter === '\r' - ? commentCharacter - : ' '; - index++; - } - continue; - } - - result += character; - } - - return result; -} - -function hasReferenceTextInComments(code: string): boolean { - let quote: '"' | "'" | '`' | null = null; - - for (let index = 0; index < code.length; index++) { - const character = code[index]; - const nextCharacter = code[index + 1]; - - if (quote) { - if (character === '\\' && nextCharacter) { - index++; - continue; - } - if (character === quote) { - quote = null; - } - continue; - } - - if (character === '"' || character === "'" || character === '`') { - quote = character; - continue; - } - - if (character === '/' && nextCharacter === '*') { - const commentStart = index + 2; - index += 2; - - while (index < code.length) { - const commentCharacter = code[index]; - const commentNextCharacter = code[index + 1]; - - if (commentCharacter === '*' && commentNextCharacter === '/') { - break; - } - index++; - } - - if (code.slice(commentStart, index).includes('@reference')) { - return true; - } - } - } - - return false; -} - -function inspectCssTailwindDirectives(code: string): CssTailwindDirectiveState { - const commentlessCode = stripCssBlockComments(code); - - return { - commentlessCode, - hasReferenceDirective: CSS_REFERENCE_DIRECTIVE_REGEX.test(commentlessCode), - hasReferenceText: hasReferenceTextInComments(code), - hasTailwindImportDirective: CSS_TAILWIND_IMPORT_REGEX.test(commentlessCode), - }; -} - -function throwTailwindReferenceTextError( - filename: string, - rootStylesheet: string, -): never { - throw new Error( - `${ANGULAR_TAILWIND_PREFIX} Tailwind @reference auto-injection was ` + - `blocked for "${filename}" because the stylesheet contains the ` + - `text "@reference" but does not contain a real @reference ` + - `directive.\n\n` + - `This is usually caused by a CSS comment such as ` + - `"/* ... @reference ... */".\n\n` + - `Fix one of:\n` + - ` - Reword the comment so it does not contain "@reference"\n` + - ` - Add a real @reference "${rootStylesheet}"; directive\n`, - ); -} - export function evictDeletedFileMetadata( file: string, { diff --git a/packages/vite-plugin-angular/src/lib/utils/tailwind-reference.ts b/packages/vite-plugin-angular/src/lib/utils/tailwind-reference.ts new file mode 100644 index 000000000..187b5c99a --- /dev/null +++ b/packages/vite-plugin-angular/src/lib/utils/tailwind-reference.ts @@ -0,0 +1,147 @@ +const ANGULAR_TAILWIND_PREFIX = '[@analogjs/vite-plugin-angular]'; +const CSS_REFERENCE_DIRECTIVE_REGEX = /(^|[;}\n\r])\s*@reference\b/m; +const CSS_TAILWIND_IMPORT_REGEX = + /(^|[;}\n\r])\s*@import\s+["']tailwindcss["']/m; + +export interface CssTailwindDirectiveState { + commentlessCode: string; + hasReferenceDirective: boolean; + hasReferenceText: boolean; + hasTailwindImportDirective: boolean; +} + +// Match real CSS directives, not prose inside block comments. The scanner keeps +// quoted CSS content intact so `/* ... */` sequences inside strings do not get +// mistaken for real comments. +function stripCssBlockComments(code: string): string { + let result = ''; + let quote: '"' | "'" | '`' | null = null; + + for (let index = 0; index < code.length; index++) { + const character = code[index]; + const nextCharacter = code[index + 1]; + + if (quote) { + if (character === '\\' && nextCharacter) { + result += character; + result += nextCharacter; + index++; + continue; + } + if (character === quote) { + quote = null; + } + result += character; + continue; + } + + if (character === '"' || character === "'" || character === '`') { + quote = character; + result += character; + continue; + } + + if (character === '/' && nextCharacter === '*') { + result += ' '; + index += 2; + + while (index < code.length) { + const commentCharacter = code[index]; + const commentNextCharacter = code[index + 1]; + + if (commentCharacter === '*' && commentNextCharacter === '/') { + result += ' '; + index++; + break; + } + + result += + commentCharacter === '\n' || commentCharacter === '\r' + ? commentCharacter + : ' '; + index++; + } + continue; + } + + result += character; + } + + return result; +} + +function hasReferenceTextInComments(code: string): boolean { + let quote: '"' | "'" | '`' | null = null; + + for (let index = 0; index < code.length; index++) { + const character = code[index]; + const nextCharacter = code[index + 1]; + + if (quote) { + if (character === '\\' && nextCharacter) { + index++; + continue; + } + if (character === quote) { + quote = null; + } + continue; + } + + if (character === '"' || character === "'" || character === '`') { + quote = character; + continue; + } + + if (character === '/' && nextCharacter === '*') { + const commentStart = index + 2; + index += 2; + + while (index < code.length) { + const commentCharacter = code[index]; + const commentNextCharacter = code[index + 1]; + + if (commentCharacter === '*' && commentNextCharacter === '/') { + break; + } + index++; + } + + if (code.slice(commentStart, index).includes('@reference')) { + return true; + } + } + } + + return false; +} + +export function inspectCssTailwindDirectives( + code: string, +): CssTailwindDirectiveState { + const commentlessCode = stripCssBlockComments(code); + + return { + commentlessCode, + hasReferenceDirective: CSS_REFERENCE_DIRECTIVE_REGEX.test(commentlessCode), + hasReferenceText: hasReferenceTextInComments(code), + hasTailwindImportDirective: CSS_TAILWIND_IMPORT_REGEX.test(commentlessCode), + }; +} + +export function throwTailwindReferenceTextError( + filename: string, + rootStylesheet: string, +): never { + throw new Error( + `${ANGULAR_TAILWIND_PREFIX} Tailwind @reference auto-injection was ` + + `blocked for "${filename}" because the stylesheet contains the ` + + `text "@reference" but does not contain a real @reference ` + + `directive.\n\n` + + `This is usually caused by a CSS comment such as ` + + `"/* ... @reference ... */".\n\n` + + `Fix one of:\n` + + ` - Reword the comment so it does not contain "@reference"\n` + + ` - Add a real @reference "${rootStylesheet}"; directive\n`, + ); +} From ac2dd070b715d63063e8035e60bd0e66ce68bb97 Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 11:10:36 -0400 Subject: [PATCH 14/22] feat: implement TailwindReferenceError handling in JIT plugin and augmentHostWithResources, enhancing error management in CSS processing --- .../src/lib/angular-jit-plugin.spec.ts | 55 +++++++++++++++++++ .../src/lib/angular-jit-plugin.ts | 4 ++ .../src/lib/angular-vite-plugin.ts | 4 ++ .../vite-plugin-angular/src/lib/host.spec.ts | 22 ++++++++ packages/vite-plugin-angular/src/lib/host.ts | 4 ++ .../src/lib/utils/tailwind-reference.ts | 12 +++- 6 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 packages/vite-plugin-angular/src/lib/angular-jit-plugin.spec.ts diff --git a/packages/vite-plugin-angular/src/lib/angular-jit-plugin.spec.ts b/packages/vite-plugin-angular/src/lib/angular-jit-plugin.spec.ts new file mode 100644 index 000000000..dda50bb62 --- /dev/null +++ b/packages/vite-plugin-angular/src/lib/angular-jit-plugin.spec.ts @@ -0,0 +1,55 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +vi.mock('vite', async () => { + const actual = await vi.importActual('vite'); + return { + ...actual, + preprocessCSS: vi.fn(), + }; +}); + +import { preprocessCSS } from 'vite'; +import { jitPlugin } from './angular-jit-plugin.js'; +import { TailwindReferenceError } from './utils/tailwind-reference.js'; + +describe('jitPlugin', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it('rethrows TailwindReferenceError from preprocessCSS', async () => { + vi.mocked(preprocessCSS).mockRejectedValue( + new TailwindReferenceError('comment-masked @reference'), + ); + + const plugin = jitPlugin({ inlineStylesExtension: 'css' }); + plugin.configResolved?.({} as any); + + const encoded = encodeURIComponent( + Buffer.from('.demo { color: red; }').toString('base64'), + ); + + await expect( + plugin.load?.(`virtual:angular:jit:style:inline;${encoded}`), + ).rejects.toThrow('comment-masked @reference'); + }); + + it('soft-fails ordinary preprocessCSS errors', async () => { + const warn = vi.spyOn(console, 'warn').mockImplementation(() => {}); + vi.mocked(preprocessCSS).mockRejectedValue(new Error('boom')); + + const plugin = jitPlugin({ inlineStylesExtension: 'css' }); + plugin.configResolved?.({} as any); + + const encoded = encodeURIComponent( + Buffer.from('.demo { color: red; }').toString('base64'), + ); + + await expect( + plugin.load?.(`virtual:angular:jit:style:inline;${encoded}`), + ).resolves.toContain('export default'); + expect(warn).toHaveBeenCalled(); + + warn.mockRestore(); + }); +}); diff --git a/packages/vite-plugin-angular/src/lib/angular-jit-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-jit-plugin.ts index 2fe3c30da..0de843050 100644 --- a/packages/vite-plugin-angular/src/lib/angular-jit-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-jit-plugin.ts @@ -1,6 +1,7 @@ import { createHash } from 'node:crypto'; import { Plugin, ResolvedConfig, preprocessCSS } from 'vite'; import { debugStyles } from './utils/debug.js'; +import { isTailwindReferenceError } from './utils/tailwind-reference.js'; export function jitPlugin({ inlineStylesExtension, @@ -45,6 +46,9 @@ export function jitPlugin({ ); styles = compiled?.code; } catch (e) { + if (isTailwindReferenceError(e)) { + throw e; + } const errorMessage = e instanceof Error ? e.message : String(e); debugStyles('jit css compilation error', { styleIdHash, diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts index 59ecb93a1..984b3be57 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -92,6 +92,7 @@ import { import { getJsTransformConfigKey, isRolldown } from './utils/rolldown.js'; import { inspectCssTailwindDirectives, + isTailwindReferenceError, throwTailwindReferenceTextError, } from './utils/tailwind-reference.js'; import { @@ -2461,6 +2462,9 @@ export function angular(options?: PluginOptions): Plugin[] { resolvedConfig, ); } catch (e) { + if (isTailwindReferenceError(e)) { + throw e; + } debugStyles('preprocessCSS error', { filename, resourceFile: resourceFile ?? '(inline)', diff --git a/packages/vite-plugin-angular/src/lib/host.spec.ts b/packages/vite-plugin-angular/src/lib/host.spec.ts index 595f80ba0..f3db97d9a 100644 --- a/packages/vite-plugin-angular/src/lib/host.spec.ts +++ b/packages/vite-plugin-angular/src/lib/host.spec.ts @@ -3,6 +3,7 @@ import { describe, expect, it, vi } from 'vitest'; import type * as ts from 'typescript'; import { augmentHostWithResources } from './host.js'; import { AnalogStylesheetRegistry } from './stylesheet-registry.js'; +import { TailwindReferenceError } from './utils/tailwind-reference.js'; describe('augmentHostWithResources', () => { it('preprocesses external stylesheets before Vite transforms them', async () => { @@ -194,4 +195,25 @@ describe('augmentHostWithResources', () => { }), ).resolves.toBeNull(); }); + + it('rethrows TailwindReferenceError from eager stylesheet transforms', async () => { + const host = { readFile: vi.fn() } as unknown as ts.CompilerHost; + const transform = vi + .fn() + .mockRejectedValue( + new TailwindReferenceError('comment-masked @reference'), + ); + + augmentHostWithResources(host, transform as any, { + inlineStylesExtension: 'css', + }); + + await expect( + (host as any).transformResource('.demo { color: red; }', { + type: 'style', + resourceFile: '/project/src/app/demo.component.css', + containingFile: '/project/src/app/demo.component.ts', + }), + ).rejects.toThrow('comment-masked @reference'); + }); }); diff --git a/packages/vite-plugin-angular/src/lib/host.ts b/packages/vite-plugin-angular/src/lib/host.ts index a2d3caa05..7efde87f8 100644 --- a/packages/vite-plugin-angular/src/lib/host.ts +++ b/packages/vite-plugin-angular/src/lib/host.ts @@ -16,6 +16,7 @@ import { } from './stylesheet-registry.js'; import { debugStyles } from './utils/debug.js'; import type { SourceFileCache } from './utils/source-file-cache.js'; +import { isTailwindReferenceError } from './utils/tailwind-reference.js'; export function augmentHostWithResources( host: ts.CompilerHost, @@ -121,6 +122,9 @@ export function augmentHostWithResources( `${filename}?direct`, ); } catch (e) { + if (isTailwindReferenceError(e)) { + throw e; + } debugStyles('NgtscProgram: stylesheet transform error', { filename, resourceFile: context.resourceFile ?? '(inline)', diff --git a/packages/vite-plugin-angular/src/lib/utils/tailwind-reference.ts b/packages/vite-plugin-angular/src/lib/utils/tailwind-reference.ts index 187b5c99a..49c6e71fb 100644 --- a/packages/vite-plugin-angular/src/lib/utils/tailwind-reference.ts +++ b/packages/vite-plugin-angular/src/lib/utils/tailwind-reference.ts @@ -10,6 +10,10 @@ export interface CssTailwindDirectiveState { hasTailwindImportDirective: boolean; } +export class TailwindReferenceError extends Error { + readonly name = 'TailwindReferenceError'; +} + // Match real CSS directives, not prose inside block comments. The scanner keeps // quoted CSS content intact so `/* ... */` sequences inside strings do not get // mistaken for real comments. @@ -133,7 +137,7 @@ export function throwTailwindReferenceTextError( filename: string, rootStylesheet: string, ): never { - throw new Error( + throw new TailwindReferenceError( `${ANGULAR_TAILWIND_PREFIX} Tailwind @reference auto-injection was ` + `blocked for "${filename}" because the stylesheet contains the ` + `text "@reference" but does not contain a real @reference ` + @@ -145,3 +149,9 @@ export function throwTailwindReferenceTextError( ` - Add a real @reference "${rootStylesheet}"; directive\n`, ); } + +export function isTailwindReferenceError( + error: unknown, +): error is TailwindReferenceError { + return error instanceof TailwindReferenceError; +} From 00a43bd575bc2d26005b18bd2fde492d01120e7f Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 11:15:48 -0400 Subject: [PATCH 15/22] fix: update console warning implementation in JIT plugin tests to return message for better error visibility --- .../vite-plugin-angular/src/lib/angular-jit-plugin.spec.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/vite-plugin-angular/src/lib/angular-jit-plugin.spec.ts b/packages/vite-plugin-angular/src/lib/angular-jit-plugin.spec.ts index dda50bb62..d3dd7f462 100644 --- a/packages/vite-plugin-angular/src/lib/angular-jit-plugin.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-jit-plugin.spec.ts @@ -35,7 +35,9 @@ describe('jitPlugin', () => { }); it('soft-fails ordinary preprocessCSS errors', async () => { - const warn = vi.spyOn(console, 'warn').mockImplementation(() => {}); + const warn = vi + .spyOn(console, 'warn') + .mockImplementation((message?: unknown) => message); vi.mocked(preprocessCSS).mockRejectedValue(new Error('boom')); const plugin = jitPlugin({ inlineStylesExtension: 'css' }); From 49e660b523b4dafa8c2a7dc94518a490b3c539d1 Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 21:21:14 -0400 Subject: [PATCH 16/22] feat: add support for selectorless compilation in Angular plugin, enhancing experimental options and test coverage --- packages/platform/src/lib/options.ts | 13 + .../platform/src/lib/platform-plugin.spec.ts | 16 + packages/platform/src/lib/platform-plugin.ts | 5 + .../angular-vite-plugin-live-reload.spec.ts | 199 +++ .../src/lib/angular-vite-plugin.ts | 1164 ++++++++++++----- .../src/lib/utils/debug.ts | 6 + 6 files changed, 1055 insertions(+), 348 deletions(-) diff --git a/packages/platform/src/lib/options.ts b/packages/platform/src/lib/options.ts index e780e33e4..9f4b795f5 100644 --- a/packages/platform/src/lib/options.ts +++ b/packages/platform/src/lib/options.ts @@ -201,6 +201,19 @@ export interface Options { */ useAngularCompilationAPI?: boolean; + /** + * Forward Angular selectorless compilation support into + * `@analogjs/vite-plugin-angular`. + * + * Also accepted at `vite.experimental.enableSelectorless` for backwards + * compatibility. + * + * Has no effect when `vite` is set to `false`. + */ + enableSelectorless?: PluginOptions['experimental'] extends object + ? NonNullable['enableSelectorless'] + : boolean; + /** * Enable typed route table generation for type-safe navigation. * diff --git a/packages/platform/src/lib/platform-plugin.spec.ts b/packages/platform/src/lib/platform-plugin.spec.ts index 6791294ee..acff59173 100644 --- a/packages/platform/src/lib/platform-plugin.spec.ts +++ b/packages/platform/src/lib/platform-plugin.spec.ts @@ -141,6 +141,22 @@ describe('platformPlugin', () => { ); }); + it('forwards experimental.enableSelectorless to the Angular vite plugin', () => { + platformPlugin({ + experimental: { + enableSelectorless: false, + }, + }); + + expect(angularSpy).toHaveBeenCalledWith( + expect.objectContaining({ + experimental: expect.objectContaining({ + enableSelectorless: false, + }), + }), + ); + }); + it('does not force semantic type checking onto the dev hot path by default', () => { platformPlugin(); diff --git a/packages/platform/src/lib/platform-plugin.ts b/packages/platform/src/lib/platform-plugin.ts index a5312d550..c3fa2b32d 100644 --- a/packages/platform/src/lib/platform-plugin.ts +++ b/packages/platform/src/lib/platform-plugin.ts @@ -57,8 +57,12 @@ export function platformPlugin(opts: Options = {}): Plugin[] { const useAngularCompilationAPI = platformOptions.experimental?.useAngularCompilationAPI ?? viteOptions?.experimental?.useAngularCompilationAPI; + const enableSelectorless = + platformOptions.experimental?.enableSelectorless ?? + viteOptions?.experimental?.enableSelectorless; debugPlatform('experimental options resolved', { useAngularCompilationAPI: !!useAngularCompilationAPI, + enableSelectorless, typedRouter: platformOptions.experimental?.typedRouter, stylePipeline: !!platformOptions.experimental?.stylePipeline, }); @@ -128,6 +132,7 @@ export function platformPlugin(opts: Options = {}): Plugin[] { experimental: { ...(viteOptions?.experimental ?? {}), useAngularCompilationAPI, + enableSelectorless, }, }), )), diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts index 345c8e0be..f233f85c9 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts @@ -28,6 +28,9 @@ let cachedDevkitActual: typeof import('./utils/devkit.js'); async function setupLiveReloadPlugin(options: { include?: string[]; + experimental?: { + enableSelectorless?: boolean; + }; stylePreprocessor?: ( code: string, filename: string, @@ -134,6 +137,7 @@ async function setupLiveReloadPlugin(options: { workspaceRoot: resolvedWorkspaceRoot, experimental: { useAngularCompilationAPI: true, + enableSelectorless: options.experimental?.enableSelectorless, }, }).find((entry) => entry.name === '@analogjs/vite-plugin-angular') as any; @@ -266,6 +270,90 @@ describe('angular hmr style preprocessing', () => { }, ); + it( + 'allows selectorless compilation to be disabled explicitly', + { timeout: 15_000 }, + async () => { + const { initialize } = await setupLiveReloadPlugin({ + experimental: { + enableSelectorless: false, + }, + }); + + const initializeCall = initialize.mock.calls[0]; + expect(initializeCall).toBeTruthy(); + + const mutateTsCompilerOptions = initializeCall?.[2] as + | ((options: Record) => Record) + | undefined; + + expect(mutateTsCompilerOptions).toBeTypeOf('function'); + + const mutated = mutateTsCompilerOptions?.({}); + + expect(mutated?._enableSelectorless).toBeUndefined(); + }, + ); + + it( + 'defaults selectorless compilation off when the app has no file-based pages', + { timeout: 15_000 }, + async () => { + const { initialize } = await setupLiveReloadPlugin({}); + + const initializeCall = initialize.mock.calls[0]; + expect(initializeCall).toBeTruthy(); + + const mutateTsCompilerOptions = initializeCall?.[2] as + | ((options: Record) => Record) + | undefined; + + expect(mutateTsCompilerOptions).toBeTypeOf('function'); + + const mutated = mutateTsCompilerOptions?.({}); + + expect(mutated?._enableSelectorless).toBeUndefined(); + }, + ); + + it( + 'defaults selectorless compilation on when the app has file-based pages', + { timeout: 15_000 }, + async () => { + const workspaceRoot = mkdtempSync( + join(tmpdir(), 'analog-live-reload-selectorless-pages-'), + ); + temporaryWorkspaceRoots.add(workspaceRoot); + mkdirSync(join(workspaceRoot, 'src/app/pages'), { recursive: true }); + writeFileSync( + join(workspaceRoot, 'src/app/pages/home.page.ts'), + ` + import { Component } from '@angular/core'; + + @Component({ + template: '

Home

', + }) + export default class HomePageComponent {} + `, + ); + + const { initialize } = await setupLiveReloadPlugin({ workspaceRoot }); + + const initializeCall = initialize.mock.calls[0]; + expect(initializeCall).toBeTruthy(); + + const mutateTsCompilerOptions = initializeCall?.[2] as + | ((options: Record) => Record) + | undefined; + + expect(mutateTsCompilerOptions).toBeTypeOf('function'); + + const mutated = mutateTsCompilerOptions?.({}); + + expect(mutated?._enableSelectorless).toBe(true); + }, + ); + it('prepends content via stylePreprocessor through the HMR stylesheet path', async () => { const prepender = (code: string, _filename: string) => `@reference "../styles/tailwind.css";\n${code}`; @@ -455,4 +543,115 @@ describe('angular hmr style preprocessing', () => { } }, ); + + it( + 'wraps the compilation API tsconfig when project references and tsconfig paths add source roots', + { timeout: 15_000 }, + async () => { + const tempWorkspaceRoot = mkdtempSync( + join(tmpdir(), 'analog-compilation-api-refs-paths-'), + ); + const normalize = (value: string) => value.replaceAll('\\', '/'); + + try { + mkdirSync(join(tempWorkspaceRoot, 'src/app'), { recursive: true }); + mkdirSync(join(tempWorkspaceRoot, 'libs/shared/feature/src'), { + recursive: true, + }); + mkdirSync(join(tempWorkspaceRoot, 'libs/shared/extra/src'), { + recursive: true, + }); + + writeFileSync( + join(tempWorkspaceRoot, 'src/app/app.component.ts'), + 'export const app = true;\n', + ); + writeFileSync( + join( + tempWorkspaceRoot, + 'libs/shared/feature/src/feature.component.ts', + ), + 'export const feature = true;\n', + ); + writeFileSync( + join(tempWorkspaceRoot, 'libs/shared/extra/src/index.ts'), + 'export const extra = true;\n', + ); + writeFileSync( + join(tempWorkspaceRoot, 'libs/shared/feature/tsconfig.lib.json'), + JSON.stringify( + { + compilerOptions: { + composite: true, + }, + include: ['src/**/*.ts'], + }, + null, + 2, + ), + ); + writeFileSync( + join(tempWorkspaceRoot, 'tsconfig.base.json'), + JSON.stringify( + { + compilerOptions: { + baseUrl: '.', + module: 'esnext', + moduleResolution: 'bundler', + paths: { + '@shared/extra': ['libs/shared/extra/src/index.ts'], + }, + target: 'es2022', + }, + files: ['./src/app/app.component.ts'], + references: [{ path: './libs/shared/feature/tsconfig.lib.json' }], + }, + null, + 2, + ), + ); + + const { initialize } = await setupLiveReloadPlugin({ + tsconfig: join(tempWorkspaceRoot, 'tsconfig.base.json'), + workspaceRoot: tempWorkspaceRoot, + }); + + const [generatedTsconfigPath] = initialize.mock.calls[0] as [string]; + expect(normalize(generatedTsconfigPath)).not.toBe( + normalize(join(tempWorkspaceRoot, 'tsconfig.base.json')), + ); + + const generatedConfig = JSON.parse( + readFileSync(generatedTsconfigPath, 'utf-8'), + ) as { + extends: string; + files: string[]; + references?: Array<{ path: string }>; + }; + + expect(generatedConfig.extends).toBe( + normalize(join(tempWorkspaceRoot, 'tsconfig.base.json')), + ); + expect(generatedConfig.files).toEqual( + expect.arrayContaining([ + normalize(join(tempWorkspaceRoot, 'src/app/app.component.ts')), + normalize( + join( + tempWorkspaceRoot, + 'libs/shared/feature/src/feature.component.ts', + ), + ), + normalize( + join(tempWorkspaceRoot, 'libs/shared/extra/src/index.ts'), + ), + ]), + ); + expect(generatedConfig.references).toEqual([ + { path: './libs/shared/feature/tsconfig.lib.json' }, + ]); + } finally { + rmSync(tempWorkspaceRoot, { force: true, recursive: true }); + } + }, + ); }); diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts index 984b3be57..cbae6c11c 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -75,6 +75,8 @@ import { debugCompilationApi, debugCompiler, debugCompilerV, + debugEmit, + debugEmitV, debugHmr, debugHmrV, debugStyles, @@ -175,6 +177,14 @@ export interface PluginOptions { experimental?: { useAngularCompilationAPI?: boolean; useAnalogCompiler?: boolean; + /** + * Controls Angular's experimental selectorless compilation mode. + * + * Defaults to `true` on Angular 20+ to preserve Analog page support. + * Set to `false` for applications that do not use selectorless pages and + * need to avoid Angular selectorless template-analysis regressions. + */ + enableSelectorless?: boolean; /** * Compilation output mode for the Analog compiler. * - `'full'` (default): Emit final Ivy definitions for application builds. @@ -301,6 +311,48 @@ export function normalizeIncludeGlob( return normalizePath(resolve(normalizedWorkspaceRoot, normalizedGlob)); } +function isSelectorlessRouteFile(file: string): boolean { + const normalized = normalizePath(file); + return ( + normalized.endsWith('.page.ts') || + normalized.includes('/src/app/routes/') || + normalized.includes('/app/routes/') + ); +} + +function detectSelectorlessRouteUsage( + root: string, + workspaceRoot: string, + includeGlobs: string[], +): { enabled: boolean; routeFileCount: number } { + const normalizedRoot = normalizePath(resolve(root)); + const normalizedWorkspaceRoot = normalizePath(resolve(workspaceRoot)); + const appRouteGlobs = [ + `${normalizedRoot}/src/app/pages/**/*.page.ts`, + `${normalizedRoot}/src/app/routes/**/*.ts`, + `${normalizedRoot}/app/routes/**/*.ts`, + ]; + const routeLikeIncludeGlobs = includeGlobs + .map((glob) => normalizeIncludeGlob(normalizedWorkspaceRoot, glob)) + .filter( + (glob) => + glob.includes('.page.') || + glob.includes('/pages/') || + glob.includes('/app/routes/') || + glob.includes('/src/app/routes/'), + ); + const routeFiles = globSync([...appRouteGlobs, ...routeLikeIncludeGlobs], { + absolute: true, + dot: true, + onlyFiles: true, + }).filter(isSelectorlessRouteFile); + + return { + enabled: routeFiles.length > 0, + routeFileCount: routeFiles.length, + }; +} + const classNames = new Map(); export function evictDeletedFileMetadata( file: string, @@ -442,6 +494,7 @@ export function buildStylePreprocessor( export function angular(options?: PluginOptions): Plugin[] { applyDebugOption(options?.debug, options?.workspaceRoot); + const explicitEnableSelectorless = options?.experimental?.enableSelectorless; /** * Normalize plugin options so defaults @@ -468,6 +521,7 @@ export function angular(options?: PluginOptions): Plugin[] { fileReplacements: options?.fileReplacements ?? [], useAngularCompilationAPI: options?.experimental?.useAngularCompilationAPI ?? false, + enableSelectorless: explicitEnableSelectorless, hasTailwindCss: !!options?.tailwindCss, tailwindCss: options?.tailwindCss, stylePreprocessor: buildStylePreprocessor(options), @@ -484,6 +538,7 @@ export function angular(options?: PluginOptions): Plugin[] { string, { options: ts.CompilerOptions; rootNames: string[] } >(); + const tsconfigGraphRootCache = new Map(); let cachedHost: ts.CompilerHost | undefined; let cachedHostKey: string | undefined; let includeCache: string[] = []; @@ -494,6 +549,7 @@ export function angular(options?: PluginOptions): Plugin[] { // `readConfiguration` caches the root file list, so hot-added pages can be // missing from Angular's compilation program until we clear this state. tsconfigOptionsCache.clear(); + tsconfigGraphRootCache.clear(); cachedHost = undefined; cachedHostKey = undefined; } @@ -800,9 +856,45 @@ export function angular(options?: PluginOptions): Plugin[] { const templateUrlsResolver = new TemplateUrlsResolver(); let outputFile: ((file: string) => void) | undefined; const outputFiles = new Map(); + const normalizeEmitterLookupId = (file: string) => + normalizePath(file.replace(/^\/@fs\//, '/')); + const getTraceMatchTokens = () => + (process.env['SAPPS_ANALOG_TRACE_MATCH'] ?? '') + .split(',') + .map((token) => token.trim()) + .filter((token) => token.length > 0); + const shouldTraceTargetFile = (file: string) => { + const normalizedFile = normalizeEmitterLookupId(file); + return getTraceMatchTokens().some((token) => + normalizedFile.includes(token), + ); + }; + const describeEmitMarkers = (content: string) => ({ + contentLength: content.length, + hasCmp: content.includes('ɵcmp'), + hasFac: content.includes('ɵfac'), + hasProv: content.includes('ɵprov'), + hasDecorate: content.includes('__decorate'), + hasMetadata: content.includes('__metadata'), + }); + const fileEmitter = (file: string) => { - outputFile?.(file); - return outputFiles.get(normalizePath(file)); + const normalizedFile = normalizeEmitterLookupId(file); + const hadCachedEmit = outputFiles.has(normalizedFile); + outputFile?.(normalizedFile); + const emittedResult = outputFiles.get(normalizedFile); + debugEmitV('fileEmitter lookup', { + requestFile: file, + normalizedFile, + hadCachedEmit, + hasOutputFileHook: !!outputFile, + emitted: !!emittedResult, + knownOutputCount: outputFiles.size, + contentLength: emittedResult?.content?.length ?? 0, + errorCount: emittedResult?.errors?.length ?? 0, + warningCount: emittedResult?.warnings?.length ?? 0, + }); + return emittedResult; }; let initialCompilation = false; const declarationFiles: DeclarationFile[] = []; @@ -966,6 +1058,28 @@ export function angular(options?: PluginOptions): Plugin[] { configResolved(config) { resolvedConfig = config; + if (typeof pluginOptions.enableSelectorless === 'undefined') { + const selectorlessRouteUsage = detectSelectorlessRouteUsage( + config.root, + pluginOptions.workspaceRoot, + pluginOptions.include, + ); + pluginOptions.enableSelectorless = + angularFullVersion >= 200000 && selectorlessRouteUsage.enabled; + debugCompilationApi('selectorless default resolved', { + angularVersion: angularFullVersion, + root: config.root, + routeFileCount: selectorlessRouteUsage.routeFileCount, + selectorlessEnabled: pluginOptions.enableSelectorless, + }); + } else { + debugCompilationApi('selectorless resolved from explicit option', { + angularVersion: angularFullVersion, + root: config.root, + selectorlessEnabled: pluginOptions.enableSelectorless, + }); + } + if (pluginOptions.hasTailwindCss) { validateTailwindConfig(config, watchMode); } @@ -1835,25 +1949,63 @@ export function angular(options?: PluginOptions): Plugin[] { pendingCompilation = null; } - const typescriptResult = fileEmitter(id); + let typescriptResult = fileEmitter(id); if (!typescriptResult) { - debugCompilerV('transform skip (file not emitted by Angular)', { - id, - }); - // File not in the Angular program — skip and let other plugins // or Vite's built-in transform handle it. Warn if it looks like // an Angular file that should have been compiled. const isAngular = !id.includes('@ng/component') && /(Component|Directive|Pipe|Injectable|NgModule)\(/.test(code); - if (isAngular) { + debugCompilerV('transform skip (file not emitted by Angular)', { + id, + }); + debugEmit('transform emit miss', { + id, + normalizedId: normalizeEmitterLookupId(id), + knownOutputCount: outputFiles.size, + hasOutputFileHook: !!outputFile, + isAngular, + }); + + const shouldRetryEmitMiss = + isAngular && + pluginOptions.useAngularCompilationAPI && + watchMode && + process.env['SAPPS_ANALOG_RETRY_EMIT_MISS'] === 'true'; + + if (shouldRetryEmitMiss) { + debugEmit('retrying transform emit miss', { + id, + normalizedId: normalizeEmitterLookupId(id), + }); + await performCompilation(resolvedConfig, [id]); + pendingCompilation = null; + typescriptResult = fileEmitter(id); + debugEmit('retry transform emit miss result', { + id, + normalizedId: normalizeEmitterLookupId(id), + retried: !!typescriptResult, + knownOutputCount: outputFiles.size, + }); + } + + if (typescriptResult) { + debugEmit('transform emit recovered after retry', { + id, + normalizedId: normalizeEmitterLookupId(id), + contentLength: typescriptResult.content?.length ?? 0, + }); + } else if (isAngular) { this.warn( `[@analogjs/vite-plugin-angular]: "${id}" contains Angular decorators but is not in the TypeScript program. ` + `Ensure it is included in your tsconfig.`, ); } - return; + + if (!typescriptResult) { + return; + } } if ( @@ -1868,6 +2020,22 @@ export function angular(options?: PluginOptions): Plugin[] { } let data = typescriptResult.content ?? ''; + if (shouldTraceTargetFile(id)) { + debugEmit('transform target output', { + id, + normalizedId: normalizeEmitterLookupId(id), + ...describeEmitMarkers(data), + errorCount: typescriptResult.errors?.length ?? 0, + warningCount: typescriptResult.warnings?.length ?? 0, + }); + } + debugEmitV('transform emit hit', { + id, + normalizedId: normalizeEmitterLookupId(id), + contentLength: data.length, + errorCount: typescriptResult.errors?.length ?? 0, + warningCount: typescriptResult.warnings?.length ?? 0, + }); if (jit && data.includes('angular:jit:')) { data = data.replace( @@ -2174,15 +2342,29 @@ export function angular(options?: PluginOptions): Plugin[] { ); // Discover TypeScript files using tinyglobby - return globSync(globs, { + const files = globSync(globs, { dot: true, absolute: true, }); + + debugEmit('include discovery', { + patternCount: globs.length, + fileCount: files.length, + }); + debugEmitV('include discovery files', { + globs, + files: files.map((file) => normalizePath(file)), + }); + + return files; } function ensureIncludeCache(): string[] { if (pluginOptions.include.length > 0 && includeCache.length === 0) { includeCache = findIncludes(); + debugEmit('include cache populated', { + fileCount: includeCache.length, + }); } return includeCache; @@ -2204,58 +2386,263 @@ export function angular(options?: PluginOptions): Plugin[] { ].join('|'); } + function readAngularTsconfigConfiguration( + resolvedTsConfigPath: string, + config: ResolvedConfig, + ) { + const isProd = config.mode === 'production'; + return compilerCli.readConfiguration(resolvedTsConfigPath, { + suppressOutputPathCheck: true, + outDir: undefined, + sourceMap: false, + inlineSourceMap: !isProd, + inlineSources: !isProd, + declaration: false, + declarationMap: false, + allowEmptyCodegenFiles: false, + annotationsAs: 'decorators', + enableResourceInlining: false, + noEmitOnError: false, + mapRoot: undefined, + sourceRoot: undefined, + supportTestBed: false, + supportJitMode: false, + }); + } + function getCachedTsconfigOptions( resolvedTsConfigPath: string, config: ResolvedConfig, ): { options: ts.CompilerOptions; rootNames: string[] } { - const isProd = config.mode === 'production'; const tsconfigKey = getTsconfigCacheKey(resolvedTsConfigPath, config); let cached = tsconfigOptionsCache.get(tsconfigKey); if (!cached) { - const read = compilerCli.readConfiguration(resolvedTsConfigPath, { - suppressOutputPathCheck: true, - outDir: undefined, - sourceMap: false, - inlineSourceMap: !isProd, - inlineSources: !isProd, - declaration: false, - declarationMap: false, - allowEmptyCodegenFiles: false, - annotationsAs: 'decorators', - enableResourceInlining: false, - noEmitOnError: false, - mapRoot: undefined, - sourceRoot: undefined, - supportTestBed: false, - supportJitMode: false, - }); + const read = readAngularTsconfigConfiguration( + resolvedTsConfigPath, + config, + ); cached = { options: read.options, rootNames: read.rootNames }; tsconfigOptionsCache.set(tsconfigKey, cached); + debugEmit('tsconfig root names loaded', { + resolvedTsConfigPath, + rootNameCount: read.rootNames.length, + }); + debugEmitV('tsconfig root names', { + resolvedTsConfigPath, + rootNames: read.rootNames.map((file) => normalizePath(file)), + }); } return cached; } + function resolveReferenceTsconfigPath( + referencePath: string, + ownerTsconfigPath: string, + ): string | undefined { + const ownerDir = dirname(ownerTsconfigPath); + const resolvedReference = normalizePath( + isAbsolute(referencePath) + ? referencePath + : resolve(ownerDir, referencePath), + ); + + if (existsSync(resolvedReference)) { + try { + if (statSync(resolvedReference).isDirectory()) { + const nestedTsconfig = join(resolvedReference, 'tsconfig.json'); + return existsSync(nestedTsconfig) + ? normalizePath(nestedTsconfig) + : undefined; + } + } catch { + return undefined; + } + + return resolvedReference; + } + + if (!resolvedReference.endsWith('.json')) { + const asJson = `${resolvedReference}.json`; + if (existsSync(asJson)) { + return normalizePath(asJson); + } + + const nestedTsconfig = join(resolvedReference, 'tsconfig.json'); + if (existsSync(nestedTsconfig)) { + return normalizePath(nestedTsconfig); + } + } + + return undefined; + } + + function collectTsconfigPathRoots( + resolvedTsConfigPath: string, + options: ts.CompilerOptions, + rawTsconfig: { + compilerOptions?: { + baseUrl?: unknown; + paths?: Record; + }; + }, + ): string[] { + const tsPaths = rawTsconfig.compilerOptions?.paths ?? options.paths; + if (!tsPaths) { + return []; + } + + const tsconfigDir = dirname(resolvedTsConfigPath); + const configuredBaseUrl = + typeof options.baseUrl === 'string' + ? options.baseUrl + : typeof rawTsconfig.compilerOptions?.baseUrl === 'string' + ? rawTsconfig.compilerOptions.baseUrl + : undefined; + const resolvedBaseUrl = configuredBaseUrl + ? isAbsolute(configuredBaseUrl) + ? configuredBaseUrl + : resolve(tsconfigDir, configuredBaseUrl) + : tsconfigDir; + const discoveredRoots = new Set(); + + for (const targets of Object.values(tsPaths)) { + for (const target of targets) { + const resolvedTarget = normalizePath( + isAbsolute(target) ? target : resolve(resolvedBaseUrl, target), + ); + + if (target.includes('*')) { + for (const match of globSync(resolvedTarget, { + dot: true, + absolute: true, + })) { + discoveredRoots.add(normalizePath(match)); + } + continue; + } + + if (existsSync(resolvedTarget)) { + discoveredRoots.add(resolvedTarget); + } + } + } + + return [...discoveredRoots]; + } + + function collectExpandedTsconfigRoots( + resolvedTsConfigPath: string, + config: ResolvedConfig, + visited = new Set(), + ): string[] { + const normalizedTsConfigPath = normalizePath(resolvedTsConfigPath); + if (visited.has(normalizedTsConfigPath)) { + return []; + } + + const tsconfigKey = `${getTsconfigCacheKey(normalizedTsConfigPath, config)}|graph`; + const cached = tsconfigGraphRootCache.get(tsconfigKey); + if (cached) { + return cached; + } + + visited.add(normalizedTsConfigPath); + + const read = readAngularTsconfigConfiguration( + normalizedTsConfigPath, + config, + ); + const rawTsconfig = (ts.readConfigFile( + normalizedTsConfigPath, + ts.sys.readFile, + ).config ?? {}) as { + compilerOptions?: { + baseUrl?: unknown; + paths?: Record; + }; + references?: Array<{ path?: unknown }>; + }; + + const expandedRoots = new Set( + read.rootNames.map((file) => normalizePath(file)), + ); + const pathRoots = collectTsconfigPathRoots( + normalizedTsConfigPath, + read.options, + rawTsconfig, + ); + for (const pathRoot of pathRoots) { + expandedRoots.add(pathRoot); + } + + const referenceConfigs = (rawTsconfig.references ?? []) + .flatMap((reference) => + typeof reference.path === 'string' + ? [ + resolveReferenceTsconfigPath( + reference.path, + normalizedTsConfigPath, + ), + ] + : [], + ) + .filter((reference): reference is string => !!reference); + + for (const referenceConfig of referenceConfigs) { + for (const referenceRoot of collectExpandedTsconfigRoots( + referenceConfig, + config, + visited, + )) { + expandedRoots.add(referenceRoot); + } + } + + const expandedRootList = [...expandedRoots]; + tsconfigGraphRootCache.set(tsconfigKey, expandedRootList); + debugEmit('expanded tsconfig graph roots', { + resolvedTsConfigPath: normalizedTsConfigPath, + directRootNameCount: read.rootNames.length, + pathRootCount: pathRoots.length, + referenceConfigCount: referenceConfigs.length, + expandedRootCount: expandedRootList.length, + }); + debugEmitV('expanded tsconfig graph root files', { + resolvedTsConfigPath: normalizedTsConfigPath, + pathRoots, + referenceConfigs, + rootNames: expandedRootList, + }); + + return expandedRootList; + } + function resolveCompilationApiTsConfigPath( resolvedTsConfigPath: string, config: ResolvedConfig, ): string { - // Angular's Compilation API accepts one tsconfig path. When Analog adds - // extra roots via `include`, emit a tiny wrapper config that extends the - // user's tsconfig and enumerates the merged root set. + // Angular's Compilation API accepts one tsconfig path. When Analog needs + // extra roots beyond the app tsconfig's direct rootNames, emit a tiny + // wrapper config that extends the user's tsconfig and enumerates the + // merged root set. // - // Value: include-based workspace expansion works with the Compilation API - // without asking users to edit or duplicate their checked-in tsconfig. + // Value: workspace sources discovered through Analog `include`, tsconfig + // `references`, and explicit `compilerOptions.paths` entry points all land + // in Angular's program without asking users to hand-maintain a duplicate + // debug tsconfig. const includedFiles = ensureIncludeCache(); - if (includedFiles.length === 0) { - return resolvedTsConfigPath; - } - const cached = getCachedTsconfigOptions(resolvedTsConfigPath, config); - const mergedRootNames = union(cached.rootNames, includedFiles).map((file) => - normalizePath(file), + const expandedGraphRoots = collectExpandedTsconfigRoots( + resolvedTsConfigPath, + config, ); + const mergedRootNames = union( + cached.rootNames, + expandedGraphRoots, + includedFiles, + ).map((file) => normalizePath(file)); if (mergedRootNames.length === cached.rootNames.length) { return resolvedTsConfigPath; @@ -2304,6 +2691,19 @@ export function angular(options?: PluginOptions): Plugin[] { includeCount: includedFiles.length, rootNameCount: mergedRootNames.length, }); + debugEmit('wrapper tsconfig root merge', { + originalTsconfig: resolvedTsConfigPath, + wrapperTsconfig: wrapperPath, + baseRootNameCount: cached.rootNames.length, + expandedGraphRootCount: expandedGraphRoots.length, + includeCount: includedFiles.length, + mergedRootNameCount: mergedRootNames.length, + referenceCount: rawTsconfig.references?.length ?? 0, + }); + debugEmitV('wrapper tsconfig root names', { + wrapperTsconfig: wrapperPath, + rootNames: mergedRootNames, + }); return wrapperPath; } @@ -2339,10 +2739,17 @@ export function angular(options?: PluginOptions): Plugin[] { config: ResolvedConfig, ids?: string[], ) { - // Reuse the existing instance so Angular can diff against prior state. - angularCompilation ??= await ( - createAngularCompilation as typeof createAngularCompilationType - )(!!pluginOptions.jit, false); + const forceFreshSerialCompilation = + process.env['SAPPS_ANALOG_FRESH_SERIAL'] === 'true'; + const compilation = forceFreshSerialCompilation + ? await (createAngularCompilation as typeof createAngularCompilationType)( + !!pluginOptions.jit, + false, + false, + ) + : (angularCompilation ??= await ( + createAngularCompilation as typeof createAngularCompilationType + )(!!pluginOptions.jit, false)); const modifiedFiles = ids?.length ? new Set(ids.map((file) => normalizePath(file))) : undefined; @@ -2351,11 +2758,11 @@ export function angular(options?: PluginOptions): Plugin[] { } // Notify Angular of modified files before re-initialization so it can // scope its incremental analysis. - if (modifiedFiles?.size && angularCompilation.update) { + if (modifiedFiles?.size && compilation.update) { debugCompilationApi('incremental update', { files: [...modifiedFiles], }); - await angularCompilation.update(modifiedFiles); + await compilation.update(modifiedFiles); } const resolvedTsConfigPath = resolveTsConfigPath(); @@ -2363,352 +2770,404 @@ export function angular(options?: PluginOptions): Plugin[] { resolvedTsConfigPath, config, ); - const compilationResult = await angularCompilation.initialize( + debugEmit('compilation initialize', { + resolvedTsConfigPath, compilationApiTsConfigPath, - { - // Convert Analog's browser-style `{ replace, with }` entries into the - // `Record` shape that Angular's AngularHostOptions - // expects. SSR-only replacements (`{ replace, ssr }`) are intentionally - // excluded — they stay on the Vite runtime side. - fileReplacements: toAngularCompilationFileReplacements( - pluginOptions.fileReplacements, - pluginOptions.workspaceRoot, - ), - modifiedFiles, - async transformStylesheet( - data, - containingFile, - resourceFile, - order, - className, - ) { - const filename = - resourceFile ?? - containingFile.replace( - '.ts', - `.${pluginOptions.inlineStylesExtension}`, - ); - - const preprocessed = preprocessStylesheetResult( + modifiedFileCount: modifiedFiles?.size ?? 0, + }); + try { + const compilationResult = await compilation.initialize( + compilationApiTsConfigPath, + { + // Convert Analog's browser-style `{ replace, with }` entries into the + // `Record` shape that Angular's AngularHostOptions + // expects. SSR-only replacements (`{ replace, ssr }`) are intentionally + // excluded — they stay on the Vite runtime side. + fileReplacements: toAngularCompilationFileReplacements( + pluginOptions.fileReplacements, + pluginOptions.workspaceRoot, + ), + modifiedFiles, + async transformStylesheet( data, - filename, - pluginOptions.stylePreprocessor, - { - filename, - containingFile, - resourceFile, - className, - order, - inline: !resourceFile, - }, - ); - - // Populate classNames during initial compilation so HMR for - // HTML template changes can find the parent TS module. - if (shouldEnableHmr() && className && containingFile) { - classNames.set(normalizePath(containingFile), className as string); - } + containingFile, + resourceFile, + order, + className, + ) { + const filename = + resourceFile ?? + containingFile.replace( + '.ts', + `.${pluginOptions.inlineStylesExtension}`, + ); - if (shouldExternalizeStyles()) { - // Store preprocessed CSS so Vite's serve-time pipeline handles - // PostCSS / Tailwind processing when the load hook returns it. - const stylesheetId = registerStylesheetContent( - stylesheetRegistry!, + const preprocessed = preprocessStylesheetResult( + data, + filename, + pluginOptions.stylePreprocessor, { - code: preprocessed.code, - dependencies: normalizeStylesheetDependencies( - preprocessed.dependencies, - ), - diagnostics: preprocessed.diagnostics, - tags: preprocessed.tags, + filename, containingFile, - className: className as string | undefined, + resourceFile, + className, order, - inlineStylesExtension: pluginOptions.inlineStylesExtension, - resourceFile: resourceFile ?? undefined, + inline: !resourceFile, }, ); - debugStyles('stylesheet deferred to Vite pipeline', { - stylesheetId, - resourceFile: resourceFile ?? '(inline)', - }); - debugStylesV('stylesheet deferred content snapshot', { - stylesheetId, - filename, - resourceFile: resourceFile ?? '(inline)', - dependencies: preprocessed.dependencies, - diagnostics: preprocessed.diagnostics, - tags: preprocessed.tags, - ...describeStylesheetContent(preprocessed.code), - }); + // Populate classNames during initial compilation so HMR for + // HTML template changes can find the parent TS module. + if (shouldEnableHmr() && className && containingFile) { + classNames.set( + normalizePath(containingFile), + className as string, + ); + } - return stylesheetId; - } + if (shouldExternalizeStyles()) { + // Store preprocessed CSS so Vite's serve-time pipeline handles + // PostCSS / Tailwind processing when the load hook returns it. + const stylesheetId = registerStylesheetContent( + stylesheetRegistry!, + { + code: preprocessed.code, + dependencies: normalizeStylesheetDependencies( + preprocessed.dependencies, + ), + diagnostics: preprocessed.diagnostics, + tags: preprocessed.tags, + containingFile, + className: className as string | undefined, + order, + inlineStylesExtension: pluginOptions.inlineStylesExtension, + resourceFile: resourceFile ?? undefined, + }, + ); - // Non-externalized: CSS is returned directly to the Angular compiler - // and never re-enters Vite's pipeline, so run preprocessCSS() eagerly. - debugStyles('stylesheet processed inline via preprocessCSS', { - filename, - resourceFile: resourceFile ?? '(inline)', - dataLength: preprocessed.code.length, - }); - let stylesheetResult; + debugStyles('stylesheet deferred to Vite pipeline', { + stylesheetId, + resourceFile: resourceFile ?? '(inline)', + }); + debugStylesV('stylesheet deferred content snapshot', { + stylesheetId, + filename, + resourceFile: resourceFile ?? '(inline)', + dependencies: preprocessed.dependencies, + diagnostics: preprocessed.diagnostics, + tags: preprocessed.tags, + ...describeStylesheetContent(preprocessed.code), + }); - try { - stylesheetResult = await preprocessCSS( - preprocessed.code, - `${filename}?direct`, - resolvedConfig, - ); - } catch (e) { - if (isTailwindReferenceError(e)) { - throw e; + return stylesheetId; } - debugStyles('preprocessCSS error', { + + // Non-externalized: CSS is returned directly to the Angular compiler + // and never re-enters Vite's pipeline, so run preprocessCSS() eagerly. + debugStyles('stylesheet processed inline via preprocessCSS', { filename, resourceFile: resourceFile ?? '(inline)', - error: String(e), + dataLength: preprocessed.code.length, }); - } + let stylesheetResult; - return stylesheetResult?.code || ''; - }, - processWebWorker(workerFile, containingFile) { - return ''; + try { + stylesheetResult = await preprocessCSS( + preprocessed.code, + `${filename}?direct`, + resolvedConfig, + ); + } catch (e) { + if (isTailwindReferenceError(e)) { + throw e; + } + debugStyles('preprocessCSS error', { + filename, + resourceFile: resourceFile ?? '(inline)', + error: String(e), + }); + } + + return stylesheetResult?.code || ''; + }, + processWebWorker(workerFile, containingFile) { + return ''; + }, }, - }, - (tsCompilerOptions) => { - if (shouldExternalizeStyles()) { - tsCompilerOptions['externalRuntimeStyles'] = true; - } + (tsCompilerOptions) => { + if (shouldExternalizeStyles()) { + tsCompilerOptions['externalRuntimeStyles'] = true; + } - if (shouldEnableHmr()) { - tsCompilerOptions['_enableHmr'] = true; - // Workaround for https://github.com/angular/angular/issues/59310 - tsCompilerOptions['supportTestBed'] = true; - } + if (shouldEnableHmr()) { + tsCompilerOptions['_enableHmr'] = true; + // Workaround for https://github.com/angular/angular/issues/59310 + tsCompilerOptions['supportTestBed'] = true; + } - debugCompiler('tsCompilerOptions (compilation API)', { - hmr: pluginOptions.hmr, - hasTailwindCss: pluginOptions.hasTailwindCss, - watchMode, - shouldExternalize: shouldExternalizeStyles(), - externalRuntimeStyles: !!tsCompilerOptions['externalRuntimeStyles'], - hmrEnabled: !!tsCompilerOptions['_enableHmr'], - }); + debugCompiler('tsCompilerOptions (compilation API)', { + hmr: pluginOptions.hmr, + hasTailwindCss: pluginOptions.hasTailwindCss, + watchMode, + shouldExternalize: shouldExternalizeStyles(), + externalRuntimeStyles: !!tsCompilerOptions['externalRuntimeStyles'], + hmrEnabled: !!tsCompilerOptions['_enableHmr'], + selectorlessEnabled: pluginOptions.enableSelectorless, + }); - if (tsCompilerOptions.compilationMode === 'partial') { - // These options can't be false in partial mode - tsCompilerOptions['supportTestBed'] = true; - tsCompilerOptions['supportJitMode'] = true; - } + if (tsCompilerOptions.compilationMode === 'partial') { + // These options can't be false in partial mode + tsCompilerOptions['supportTestBed'] = true; + tsCompilerOptions['supportJitMode'] = true; + } - if (angularFullVersion >= 200000) { - tsCompilerOptions['_enableSelectorless'] = true; - } + if (pluginOptions.enableSelectorless) { + tsCompilerOptions['_enableSelectorless'] = true; + } - if (!isTest && config.build?.lib) { - tsCompilerOptions['declaration'] = true; - tsCompilerOptions['declarationMap'] = watchMode; - tsCompilerOptions['inlineSources'] = true; - } + if (!isTest && config.build?.lib) { + tsCompilerOptions['declaration'] = true; + tsCompilerOptions['declarationMap'] = watchMode; + tsCompilerOptions['inlineSources'] = true; + } - if (isTest) { - // Allow `TestBed.overrideXXX()` APIs. - tsCompilerOptions['supportTestBed'] = true; - } + if (isTest) { + // Allow `TestBed.overrideXXX()` APIs. + tsCompilerOptions['supportTestBed'] = true; + } - return tsCompilerOptions; - }, - ); + return tsCompilerOptions; + }, + ); - // ------------------------------------------------------------------- - // Preprocess external stylesheets for Tailwind CSS @reference - // - // Angular's Compilation API with externalRuntimeStyles does NOT call - // transformStylesheet for external styleUrls (files referenced via - // `styleUrls: ['./foo.component.css']`). Angular's angular-host.js - // asserts this explicitly: - // - // assert(!resourceFile || !hostOptions.externalStylesheets?.has(resourceFile), - // 'External runtime stylesheets should not be transformed') - // - // Only inline styles (`styles: [...]`) go through transformStylesheet, - // which is where buildStylePreprocessor injects `@reference` for - // Tailwind CSS. External component CSS files are instead reported in - // compilationResult.externalStylesheets as Map. - // - // Without intervention, the resolveId hook maps Angular's hash to the - // raw file path, the load hook reads the raw file from disk, and - // @tailwindcss/vite processes CSS without @reference — causing: - // - // "Cannot apply utility class 'sa:grid' because the 'sa' - // variant does not exist" - // - // Fix: for each external stylesheet, read the file from disk, run the - // style preprocessor (which injects @reference), and store the result - // in the stylesheet registry under Angular's hash. The resolveId hook - // then finds it on the first lookup, the load hook serves the - // @reference-injected version, and @tailwindcss/vite compiles correctly. - // ------------------------------------------------------------------- - debugStyles('external stylesheets from compilation API', { - count: compilationResult.externalStylesheets?.size ?? 0, - hasPreprocessor: !!pluginOptions.stylePreprocessor, - hasInlineMap: !!stylesheetRegistry, - }); - const preprocessStats = { total: 0, injected: 0, skipped: 0, errors: 0 }; - compilationResult.externalStylesheets?.forEach((value, key) => { - preprocessStats.total++; - const angularHash = `${value}.css`; - stylesheetRegistry?.registerExternalRequest(angularHash, key); - - // Read the raw CSS file from disk, run the style preprocessor - // (which injects @reference for Tailwind), and store the result - // in the stylesheet registry under Angular's hash. This way - // resolveId finds the preprocessed version on the first lookup - // and the load hook serves CSS that @tailwindcss/vite can compile. + // ------------------------------------------------------------------- + // Preprocess external stylesheets for Tailwind CSS @reference // - // After preprocessing, resolve relative @import paths to absolute - // paths. When @tailwindcss/vite processes the CSS, the virtual - // hash-based module ID has no meaningful directory, so relative - // imports like `@import './submenu/submenu.component.css'` would - // fail to resolve from `/`. Converting to absolute paths ensures - // Tailwind's enhanced-resolve can find the imported files. - if ( - stylesheetRegistry && - pluginOptions.stylePreprocessor && - existsSync(key) - ) { - try { - const rawCss = readFileSync(key, 'utf-8'); - const preprocessed = preprocessStylesheetResult( - rawCss, - key, - pluginOptions.stylePreprocessor, - ); - debugStylesV('external stylesheet raw snapshot', { - angularHash, - resolvedPath: key, - mtimeMs: safeStatMtimeMs(key), - ...describeStylesheetContent(rawCss), - }); - const servedCss = rewriteRelativeCssImports(preprocessed.code, key); - stylesheetRegistry.registerServedStylesheet( - { - publicId: angularHash, - sourcePath: key, - originalCode: rawCss, - normalizedCode: servedCss, - dependencies: normalizeStylesheetDependencies( - preprocessed.dependencies, - ), - diagnostics: preprocessed.diagnostics, - tags: preprocessed.tags, - }, - [key, normalizePath(key), basename(key), key.replace(/^\//, '')], - ); - - if (servedCss && servedCss !== rawCss) { - preprocessStats.injected++; - debugStylesV( - 'preprocessed external stylesheet for Tailwind @reference', - { - angularHash, - resolvedPath: key, - mtimeMs: safeStatMtimeMs(key), - raw: describeStylesheetContent(rawCss), - served: describeStylesheetContent(servedCss), - dependencies: preprocessed.dependencies, - diagnostics: preprocessed.diagnostics, - tags: preprocessed.tags, - }, + // Angular's Compilation API with externalRuntimeStyles does NOT call + // transformStylesheet for external styleUrls (files referenced via + // `styleUrls: ['./foo.component.css']`). Angular's angular-host.js + // asserts this explicitly: + // + // assert(!resourceFile || !hostOptions.externalStylesheets?.has(resourceFile), + // 'External runtime stylesheets should not be transformed') + // + // Only inline styles (`styles: [...]`) go through transformStylesheet, + // which is where buildStylePreprocessor injects `@reference` for + // Tailwind CSS. External component CSS files are instead reported in + // compilationResult.externalStylesheets as Map. + // + // Without intervention, the resolveId hook maps Angular's hash to the + // raw file path, the load hook reads the raw file from disk, and + // @tailwindcss/vite processes CSS without @reference — causing: + // + // "Cannot apply utility class 'sa:grid' because the 'sa' + // variant does not exist" + // + // Fix: for each external stylesheet, read the file from disk, run the + // style preprocessor (which injects @reference), and store the result + // in the stylesheet registry under Angular's hash. The resolveId hook + // then finds it on the first lookup, the load hook serves the + // @reference-injected version, and @tailwindcss/vite compiles correctly. + // ------------------------------------------------------------------- + debugStyles('external stylesheets from compilation API', { + count: compilationResult.externalStylesheets?.size ?? 0, + hasPreprocessor: !!pluginOptions.stylePreprocessor, + hasInlineMap: !!stylesheetRegistry, + }); + const preprocessStats = { total: 0, injected: 0, skipped: 0, errors: 0 }; + compilationResult.externalStylesheets?.forEach((value, key) => { + preprocessStats.total++; + const angularHash = `${value}.css`; + stylesheetRegistry?.registerExternalRequest(angularHash, key); + + // Read the raw CSS file from disk, run the style preprocessor + // (which injects @reference for Tailwind), and store the result + // in the stylesheet registry under Angular's hash. This way + // resolveId finds the preprocessed version on the first lookup + // and the load hook serves CSS that @tailwindcss/vite can compile. + // + // After preprocessing, resolve relative @import paths to absolute + // paths. When @tailwindcss/vite processes the CSS, the virtual + // hash-based module ID has no meaningful directory, so relative + // imports like `@import './submenu/submenu.component.css'` would + // fail to resolve from `/`. Converting to absolute paths ensures + // Tailwind's enhanced-resolve can find the imported files. + if ( + stylesheetRegistry && + pluginOptions.stylePreprocessor && + existsSync(key) + ) { + try { + const rawCss = readFileSync(key, 'utf-8'); + const preprocessed = preprocessStylesheetResult( + rawCss, + key, + pluginOptions.stylePreprocessor, ); - } else { - preprocessStats.skipped++; - debugStylesV('external stylesheet unchanged after preprocessing', { + debugStylesV('external stylesheet raw snapshot', { angularHash, resolvedPath: key, mtimeMs: safeStatMtimeMs(key), - raw: describeStylesheetContent(rawCss), - served: describeStylesheetContent(servedCss), - dependencies: preprocessed.dependencies, - diagnostics: preprocessed.diagnostics, - tags: preprocessed.tags, - hint: 'Registry mapping is still registered so Angular component stylesheet HMR can track and refresh this file even when preprocessing makes no textual changes.', + ...describeStylesheetContent(rawCss), }); + const servedCss = rewriteRelativeCssImports(preprocessed.code, key); + stylesheetRegistry.registerServedStylesheet( + { + publicId: angularHash, + sourcePath: key, + originalCode: rawCss, + normalizedCode: servedCss, + dependencies: normalizeStylesheetDependencies( + preprocessed.dependencies, + ), + diagnostics: preprocessed.diagnostics, + tags: preprocessed.tags, + }, + [key, normalizePath(key), basename(key), key.replace(/^\//, '')], + ); + + if (servedCss && servedCss !== rawCss) { + preprocessStats.injected++; + debugStylesV( + 'preprocessed external stylesheet for Tailwind @reference', + { + angularHash, + resolvedPath: key, + mtimeMs: safeStatMtimeMs(key), + raw: describeStylesheetContent(rawCss), + served: describeStylesheetContent(servedCss), + dependencies: preprocessed.dependencies, + diagnostics: preprocessed.diagnostics, + tags: preprocessed.tags, + }, + ); + } else { + preprocessStats.skipped++; + debugStylesV( + 'external stylesheet unchanged after preprocessing', + { + angularHash, + resolvedPath: key, + mtimeMs: safeStatMtimeMs(key), + raw: describeStylesheetContent(rawCss), + served: describeStylesheetContent(servedCss), + dependencies: preprocessed.dependencies, + diagnostics: preprocessed.diagnostics, + tags: preprocessed.tags, + hint: 'Registry mapping is still registered so Angular component stylesheet HMR can track and refresh this file even when preprocessing makes no textual changes.', + }, + ); + } + } catch (e) { + preprocessStats.errors++; + console.warn( + `[@analogjs/vite-plugin-angular] failed to preprocess external stylesheet: ${key}: ${e}`, + ); + // Non-fatal: fall through to the external source mapping which + // serves the raw file. @tailwindcss/vite will still process + // it but without @reference (Tailwind prefix utilities won't + // resolve). } - } catch (e) { - preprocessStats.errors++; - console.warn( - `[@analogjs/vite-plugin-angular] failed to preprocess external stylesheet: ${key}: ${e}`, - ); - // Non-fatal: fall through to the external source mapping which - // serves the raw file. @tailwindcss/vite will still process - // it but without @reference (Tailwind prefix utilities won't - // resolve). + } else { + preprocessStats.skipped++; + debugStylesV('external stylesheet preprocessing skipped', { + filename: angularHash, + resolvedPath: key, + reason: !stylesheetRegistry + ? 'no stylesheetRegistry' + : !pluginOptions.stylePreprocessor + ? 'no stylePreprocessor' + : 'file not found on disk', + }); } - } else { - preprocessStats.skipped++; - debugStylesV('external stylesheet preprocessing skipped', { + + debugStylesV('external stylesheet registered for resolveId mapping', { filename: angularHash, resolvedPath: key, - reason: !stylesheetRegistry - ? 'no stylesheetRegistry' - : !pluginOptions.stylePreprocessor - ? 'no stylePreprocessor' - : 'file not found on disk', }); - } - - debugStylesV('external stylesheet registered for resolveId mapping', { - filename: angularHash, - resolvedPath: key, }); - }); - debugStyles('external stylesheet preprocessing complete', preprocessStats); + debugStyles( + 'external stylesheet preprocessing complete', + preprocessStats, + ); - const diagnostics = await angularCompilation.diagnoseFiles( - pluginOptions.disableTypeChecking - ? DiagnosticModes.All & ~DiagnosticModes.Semantic - : DiagnosticModes.All, - ); + const diagnostics = await compilation.diagnoseFiles( + pluginOptions.disableTypeChecking + ? DiagnosticModes.All & ~DiagnosticModes.Semantic + : DiagnosticModes.All, + ); - const errors = diagnostics.errors?.length ? diagnostics.errors : []; - const warnings = diagnostics.warnings?.length ? diagnostics.warnings : []; - // Angular encodes template updates as `encodedFilePath@ClassName` keys. - // `mapTemplateUpdatesToFiles` decodes them back to absolute file paths so - // we can attach HMR metadata to the correct `EmitFileResult` below. - const templateUpdates = mapTemplateUpdatesToFiles( - compilationResult.templateUpdates, - ); - if (templateUpdates.size > 0) { - debugHmr('compilation API template updates', { - count: templateUpdates.size, - files: [...templateUpdates.keys()], + const errors = diagnostics.errors?.length ? diagnostics.errors : []; + const warnings = diagnostics.warnings?.length ? diagnostics.warnings : []; + debugEmit('compilation diagnostics', { + errorCount: errors.length, + warningCount: warnings.length, }); - } - - for (const file of await angularCompilation.emitAffectedFiles()) { - const normalizedFilename = normalizePath(file.filename); - const templateUpdate = templateUpdates.get(normalizedFilename); - - if (templateUpdate) { - classNames.set(normalizedFilename, templateUpdate.className); + // Angular encodes template updates as `encodedFilePath@ClassName` keys. + // `mapTemplateUpdatesToFiles` decodes them back to absolute file paths so + // we can attach HMR metadata to the correct `EmitFileResult` below. + const templateUpdates = mapTemplateUpdatesToFiles( + compilationResult.templateUpdates, + ); + if (templateUpdates.size > 0) { + debugHmr('compilation API template updates', { + count: templateUpdates.size, + files: [...templateUpdates.keys()], + }); } - // Surface Angular's HMR payloads into Analog's existing live-reload - // flow via the `hmrUpdateCode` / `hmrEligible` fields. - outputFiles.set(normalizedFilename, { - content: file.contents, - dependencies: [], - errors: errors.map((error: { text?: string }) => error.text || ''), - warnings: warnings.map( - (warning: { text?: string }) => warning.text || '', - ), - hmrUpdateCode: templateUpdate?.code, - hmrEligible: !!templateUpdate?.code, + const affectedFiles = await compilation.emitAffectedFiles(); + debugEmit('emitAffectedFiles summary', { + count: affectedFiles.length, + templateUpdateCount: templateUpdates.size, + knownOutputCountBefore: outputFiles.size, }); + debugEmitV('emitAffectedFiles files', { + files: affectedFiles.map((file) => normalizePath(file.filename)), + }); + + for (const file of affectedFiles) { + const normalizedFilename = normalizePath(file.filename); + const templateUpdate = templateUpdates.get(normalizedFilename); + + if (templateUpdate) { + classNames.set(normalizedFilename, templateUpdate.className); + } + + // Surface Angular's HMR payloads into Analog's existing live-reload + // flow via the `hmrUpdateCode` / `hmrEligible` fields. + outputFiles.set(normalizedFilename, { + content: file.contents, + dependencies: [], + errors: errors.map((error: { text?: string }) => error.text || ''), + warnings: warnings.map( + (warning: { text?: string }) => warning.text || '', + ), + hmrUpdateCode: templateUpdate?.code, + hmrEligible: !!templateUpdate?.code, + }); + if (shouldTraceTargetFile(normalizedFilename)) { + debugEmit('registered compilation API target output', { + filename: normalizedFilename, + ...describeEmitMarkers(file.contents), + hasTemplateUpdate: !!templateUpdate, + errorCount: errors.length, + warningCount: warnings.length, + }); + } + debugEmitV('registered compilation API output', { + filename: normalizedFilename, + contentLength: file.contents.length, + hasTemplateUpdate: !!templateUpdate, + errorCount: errors.length, + warningCount: warnings.length, + knownOutputCount: outputFiles.size, + }); + } + } finally { + if (forceFreshSerialCompilation) { + await compilation.close?.(); + } } } @@ -2773,6 +3232,7 @@ export function angular(options?: PluginOptions): Plugin[] { shouldExternalize: shouldExternalizeStyles(), externalRuntimeStyles: !!tsCompilerOptions['externalRuntimeStyles'], hmrEnabled: !!tsCompilerOptions['_enableHmr'], + selectorlessEnabled: pluginOptions.enableSelectorless, }); if (tsCompilerOptions['compilationMode'] === 'partial') { @@ -2781,7 +3241,7 @@ export function angular(options?: PluginOptions): Plugin[] { tsCompilerOptions['supportJitMode'] = true; } - if (angularFullVersion >= 200000) { + if (pluginOptions.enableSelectorless) { tsCompilerOptions['_enableSelectorless'] = true; } @@ -2961,6 +3421,14 @@ export function angular(options?: PluginOptions): Plugin[] { hmrUpdateCode: metadata.hmrUpdateCode, hmrEligible: metadata.hmrEligible, }); + debugEmitV('registered ngtsc output', { + filename, + contentLength: content.length, + errorCount: metadata.errors?.length ?? 0, + warningCount: metadata.warnings?.length ?? 0, + hmrEligible: !!metadata.hmrEligible, + knownOutputCount: outputFiles.size, + }); }; const writeOutputFile = (id: string) => { diff --git a/packages/vite-plugin-angular/src/lib/utils/debug.ts b/packages/vite-plugin-angular/src/lib/utils/debug.ts index cb939fe45..d0e6d89a6 100644 --- a/packages/vite-plugin-angular/src/lib/utils/debug.ts +++ b/packages/vite-plugin-angular/src/lib/utils/debug.ts @@ -9,6 +9,7 @@ export const debugCompiler = createDebug('analog:angular:compiler'); export const debugCompilationApi = createDebug( 'analog:angular:compilation-api', ); +export const debugEmit = createDebug('analog:angular:emit'); export const debugStylePipeline = createDebug('analog:angular:style-pipeline'); // Verbose — per-file detail, enable with :v suffix or parent:* @@ -16,6 +17,7 @@ export const debugTailwindV = createDebug('analog:angular:tailwind:v'); export const debugHmrV = createDebug('analog:angular:hmr:v'); export const debugStylesV = createDebug('analog:angular:styles:v'); export const debugCompilerV = createDebug('analog:angular:compiler:v'); +export const debugEmitV = createDebug('analog:angular:emit:v'); const angularDebugInstances = [ debugTailwind, @@ -23,11 +25,13 @@ const angularDebugInstances = [ debugStyles, debugCompiler, debugCompilationApi, + debugEmit, debugStylePipeline, debugTailwindV, debugHmrV, debugStylesV, debugCompilerV, + debugEmitV, ]; export type DebugScope = @@ -39,6 +43,8 @@ export type DebugScope = | 'analog:angular:compiler' | 'analog:angular:compiler:v' | 'analog:angular:compilation-api' + | 'analog:angular:emit' + | 'analog:angular:emit:v' | 'analog:angular:style-pipeline' | 'analog:angular:tailwind' | 'analog:angular:tailwind:v' From cb5feabd2a4f1a65683933bde426e66b3359ecdf Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 22:06:24 -0400 Subject: [PATCH 17/22] feat(vite-plugin-angular): enhance live reload plugin with Windows path handling and emit affected files support --- .../angular-vite-plugin-live-reload.spec.ts | 47 ++++++++++++++++++- .../src/lib/angular-vite-plugin.ts | 18 +++++-- 2 files changed, 59 insertions(+), 6 deletions(-) diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts index 1e57a0149..7d0cbce6c 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts @@ -27,6 +27,10 @@ let cachedViteActual: typeof import('vite'); let cachedDevkitActual: typeof import('./utils/devkit.js'); async function setupLiveReloadPlugin(options: { + emitAffectedFiles?: Array<{ + contents: string; + filename: string; + }>; include?: string[]; experimental?: { enableSelectorless?: boolean; @@ -105,7 +109,9 @@ async function setupLiveReloadPlugin(options: { initialize, update: vi.fn(), diagnoseFiles: vi.fn().mockResolvedValue({ errors: [], warnings: [] }), - emitAffectedFiles: vi.fn().mockResolvedValue([]), + emitAffectedFiles: vi + .fn() + .mockResolvedValue(options.emitAffectedFiles ?? []), }); let transformStylesheet: @@ -654,4 +660,43 @@ describe('angular hmr style preprocessing', () => { } }, ); + + it( + 'resolves Angular emit output for Windows /@fs/ transform ids', + { timeout: 15_000 }, + async () => { + const windowsComponentId = 'C:/project/src/app/demo.component.ts'; + const emittedCode = 'export const demo = true;\n'; + const { plugin } = await setupLiveReloadPlugin({ + emitAffectedFiles: [ + { + filename: windowsComponentId, + contents: emittedCode, + }, + ], + }); + + const transformed = await plugin.transform.handler.call( + { + addWatchFile: vi.fn(), + error: vi.fn(), + warn: vi.fn(), + }, + ` + import { Component } from '@angular/core'; + + @Component({ + template: '

Demo

', + }) + export class DemoComponent {} + `, + `/@fs/${windowsComponentId}`, + ); + + expect(transformed).toEqual({ + code: emittedCode, + map: null, + }); + }, + ); }); diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts index 26cc68464..9577189af 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -865,8 +865,19 @@ export function angular(options?: PluginOptions): Plugin[] { const templateUrlsResolver = new TemplateUrlsResolver(); let outputFile: ((file: string) => void) | undefined; const outputFiles = new Map(); - const normalizeEmitterLookupId = (file: string) => - normalizePath(file.replace(/^\/@fs\//, '/')); + const normalizeEmitterLookupId = (file: string) => { + const normalizedFile = normalizePath(file); + + if (!normalizedFile.startsWith('/@fs/')) { + return normalizedFile; + } + + const fsPath = normalizedFile + .slice('/@fs'.length) + .replace(/^\/([A-Za-z]:\/)/, '$1'); + + return normalizePath(fsPath); + }; const describeEmitMarkers = (content: string) => ({ contentLength: content.length, hasCmp: content.includes('ɵcmp'), @@ -1958,9 +1969,6 @@ export function angular(options?: PluginOptions): Plugin[] { const isAngular = !id.includes('@ng/component') && /(Component|Directive|Pipe|Injectable|NgModule)\(/.test(code); - debugCompilerV('transform skip (file not emitted by Angular)', { - id, - }); debugEmit('transform emit miss', { id, normalizedId: normalizeEmitterLookupId(id), From 638d30eae850e508a8ce38a8d56c5cbdb6ea3a22 Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 22:12:21 -0400 Subject: [PATCH 18/22] feat(vite-plugin-angular): improve selectorless compilation handling and test coverage - Enhanced documentation for the selectorless compilation option in the Angular plugin. - Added tests to ensure top-level selectorless configuration takes precedence over legacy settings. - Updated logic to maintain consistency between top-level and legacy experimental configurations. - Improved handling of selectorless support detection in the live reload plugin. --- packages/platform/src/lib/options.ts | 7 +++++ .../platform/src/lib/platform-plugin.spec.ts | 21 ++++++++++++++ packages/platform/src/lib/platform-plugin.ts | 4 +++ .../angular-vite-plugin-live-reload.spec.ts | 20 +++++++++++++ .../src/lib/angular-vite-plugin.ts | 28 +++++++++++++++++-- 5 files changed, 78 insertions(+), 2 deletions(-) diff --git a/packages/platform/src/lib/options.ts b/packages/platform/src/lib/options.ts index 7aa5eebe1..26b5e1397 100644 --- a/packages/platform/src/lib/options.ts +++ b/packages/platform/src/lib/options.ts @@ -204,6 +204,13 @@ export interface Options { * Forward Angular selectorless compilation support into * `@analogjs/vite-plugin-angular`. * + * This toggles Angular's compiler-wide selectorless mode. Analog may + * otherwise infer a default from file-based pages or route entry points, + * including additional page roots discovered from libraries. That auto + * mode remains the default for backwards compatibility with existing + * selectorless route components, so set this explicitly when you need to + * pin the behavior. + * * Also accepted at `vite.experimental.enableSelectorless` for backwards * compatibility. * diff --git a/packages/platform/src/lib/platform-plugin.spec.ts b/packages/platform/src/lib/platform-plugin.spec.ts index acff59173..f364cd8e8 100644 --- a/packages/platform/src/lib/platform-plugin.spec.ts +++ b/packages/platform/src/lib/platform-plugin.spec.ts @@ -157,6 +157,27 @@ describe('platformPlugin', () => { ); }); + it('prefers top-level selectorless config over legacy vite.experimental config', () => { + platformPlugin({ + experimental: { + enableSelectorless: false, + }, + vite: { + experimental: { + enableSelectorless: true, + }, + }, + }); + + expect(angularSpy).toHaveBeenCalledWith( + expect.objectContaining({ + experimental: expect.objectContaining({ + enableSelectorless: false, + }), + }), + ); + }); + it('does not force semantic type checking onto the dev hot path by default', () => { platformPlugin(); diff --git a/packages/platform/src/lib/platform-plugin.ts b/packages/platform/src/lib/platform-plugin.ts index 36924a58c..735726755 100644 --- a/packages/platform/src/lib/platform-plugin.ts +++ b/packages/platform/src/lib/platform-plugin.ts @@ -59,6 +59,10 @@ export function platformPlugin(opts: Options = {}): Plugin[] { ); } + // Keep the top-level Analog experimental surface and the legacy + // `vite.experimental` compatibility surface in lockstep. Missing one of + // these compiler flags here makes app config appear correct while the + // lower-level Angular plugin still sees a different value. const useAngularCompilationAPI = platformOptions.experimental?.useAngularCompilationAPI ?? viteExperimental?.useAngularCompilationAPI; diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts index 7d0cbce6c..5524a0067 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts @@ -280,7 +280,25 @@ describe('angular hmr style preprocessing', () => { 'allows selectorless compilation to be disabled explicitly', { timeout: 15_000 }, async () => { + const workspaceRoot = mkdtempSync( + join(tmpdir(), 'analog-live-reload-selectorless-explicit-off-'), + ); + temporaryWorkspaceRoots.add(workspaceRoot); + mkdirSync(join(workspaceRoot, 'src/app/pages'), { recursive: true }); + writeFileSync( + join(workspaceRoot, 'src/app/pages/home.page.ts'), + ` + import { Component } from '@angular/core'; + + @Component({ + template: '

Home

', + }) + export default class HomePageComponent {} + `, + ); + const { initialize } = await setupLiveReloadPlugin({ + workspaceRoot, experimental: { enableSelectorless: false, }, @@ -297,6 +315,8 @@ describe('angular hmr style preprocessing', () => { const mutated = mutateTsCompilerOptions?.({}); + // Explicit app config must win even when the route heuristic would have + // enabled selectorless by default. expect(mutated?._enableSelectorless).toBeUndefined(); }, ); diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts index 9577189af..04f2253de 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -182,8 +182,13 @@ export interface PluginOptions { * * Defaults to `true` only when Angular 20+ applications use file-based * pages or route entry points that rely on selectorless compilation. - * Set to `false` to force selectorless support off even when routes are - * detected. + * That auto mode is preserved for backwards compatibility with existing + * Analog route files that intentionally omit `selector`. + * Angular treats this as a compiler-wide mode, so once enabled it applies + * to the whole program, including workspace libraries pulled in through + * `include` globs or tsconfig references. + * Set this explicitly to pin behavior when route discovery would otherwise + * auto-enable selectorless for a larger app graph than intended. */ enableSelectorless?: boolean; /** @@ -321,6 +326,14 @@ function isSelectorlessRouteFile(file: string): boolean { ); } +/** + * Infer selectorless support from route/page entry points. + * + * This heuristic is intentionally broad because file-based routing commonly + * relies on selectorless components. The resulting Angular compiler flag is + * program-wide, not route-scoped, so a matching route-like include can affect + * every file in the current Angular program. + */ function detectSelectorlessRouteUsage( root: string, workspaceRoot: string, @@ -1068,6 +1081,12 @@ export function angular(options?: PluginOptions): Plugin[] { resolvedConfig = config; if (typeof pluginOptions.enableSelectorless === 'undefined') { + // Preserve the explicit option as the authoritative value. The route + // scan is only a default because Angular applies selectorless to the + // whole program once the compiler option is enabled. We still keep + // the heuristic default for compatibility with checked-in Analog apps + // and tests that use selectorless route components without an + // explicit flag. const selectorlessRouteUsage = detectSelectorlessRouteUsage( config.root, pluginOptions.workspaceRoot, @@ -2881,6 +2900,9 @@ export function angular(options?: PluginOptions): Plugin[] { } if (pluginOptions.enableSelectorless) { + // Angular reads selectorless as a compiler-wide mode rather than a + // per-route transform, so keep this mutation in sync with every + // compilation path that feeds Angular compiler options. tsCompilerOptions['_enableSelectorless'] = true; } @@ -3181,6 +3203,8 @@ export function angular(options?: PluginOptions): Plugin[] { } if (pluginOptions.enableSelectorless) { + // Keep the legacy NgtscProgram path aligned with the Compilation API + // path above. Selectorless is still compiler-wide here. tsCompilerOptions['_enableSelectorless'] = true; } From c824525089ea3e9a03066bf8678a60906c302d13 Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 22:28:16 -0400 Subject: [PATCH 19/22] refactor: narrow compilation API PR scope --- packages/platform/src/lib/options.ts | 20 ---- .../platform/src/lib/platform-plugin.spec.ts | 37 ------ packages/platform/src/lib/platform-plugin.ts | 9 -- .../angular-vite-plugin-live-reload.spec.ts | 108 ------------------ .../src/lib/angular-vite-plugin.ts | 108 ------------------ 5 files changed, 282 deletions(-) diff --git a/packages/platform/src/lib/options.ts b/packages/platform/src/lib/options.ts index 26b5e1397..a02697ce3 100644 --- a/packages/platform/src/lib/options.ts +++ b/packages/platform/src/lib/options.ts @@ -200,26 +200,6 @@ export interface Options { */ useAngularCompilationAPI?: boolean; - /** - * Forward Angular selectorless compilation support into - * `@analogjs/vite-plugin-angular`. - * - * This toggles Angular's compiler-wide selectorless mode. Analog may - * otherwise infer a default from file-based pages or route entry points, - * including additional page roots discovered from libraries. That auto - * mode remains the default for backwards compatibility with existing - * selectorless route components, so set this explicitly when you need to - * pin the behavior. - * - * Also accepted at `vite.experimental.enableSelectorless` for backwards - * compatibility. - * - * Has no effect when `vite` is set to `false`. - */ - enableSelectorless?: PluginOptions['experimental'] extends object - ? NonNullable['enableSelectorless'] - : boolean; - /** * Enable typed route table generation for type-safe navigation. * diff --git a/packages/platform/src/lib/platform-plugin.spec.ts b/packages/platform/src/lib/platform-plugin.spec.ts index f364cd8e8..6791294ee 100644 --- a/packages/platform/src/lib/platform-plugin.spec.ts +++ b/packages/platform/src/lib/platform-plugin.spec.ts @@ -141,43 +141,6 @@ describe('platformPlugin', () => { ); }); - it('forwards experimental.enableSelectorless to the Angular vite plugin', () => { - platformPlugin({ - experimental: { - enableSelectorless: false, - }, - }); - - expect(angularSpy).toHaveBeenCalledWith( - expect.objectContaining({ - experimental: expect.objectContaining({ - enableSelectorless: false, - }), - }), - ); - }); - - it('prefers top-level selectorless config over legacy vite.experimental config', () => { - platformPlugin({ - experimental: { - enableSelectorless: false, - }, - vite: { - experimental: { - enableSelectorless: true, - }, - }, - }); - - expect(angularSpy).toHaveBeenCalledWith( - expect.objectContaining({ - experimental: expect.objectContaining({ - enableSelectorless: false, - }), - }), - ); - }); - it('does not force semantic type checking onto the dev hot path by default', () => { platformPlugin(); diff --git a/packages/platform/src/lib/platform-plugin.ts b/packages/platform/src/lib/platform-plugin.ts index 735726755..054373596 100644 --- a/packages/platform/src/lib/platform-plugin.ts +++ b/packages/platform/src/lib/platform-plugin.ts @@ -59,19 +59,11 @@ export function platformPlugin(opts: Options = {}): Plugin[] { ); } - // Keep the top-level Analog experimental surface and the legacy - // `vite.experimental` compatibility surface in lockstep. Missing one of - // these compiler flags here makes app config appear correct while the - // lower-level Angular plugin still sees a different value. const useAngularCompilationAPI = platformOptions.experimental?.useAngularCompilationAPI ?? viteExperimental?.useAngularCompilationAPI; - const enableSelectorless = - platformOptions.experimental?.enableSelectorless ?? - viteExperimental?.enableSelectorless; debugPlatform('experimental options resolved', { useAngularCompilationAPI: !!useAngularCompilationAPI, - enableSelectorless, typedRouter: platformOptions.experimental?.typedRouter, stylePipeline: !!platformOptions.experimental?.stylePipeline, }); @@ -140,7 +132,6 @@ export function platformPlugin(opts: Options = {}): Plugin[] { experimental: { ...(viteExperimental ?? {}), useAngularCompilationAPI, - enableSelectorless, }, }), )), diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts index 5524a0067..324b0606f 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts @@ -32,9 +32,6 @@ async function setupLiveReloadPlugin(options: { filename: string; }>; include?: string[]; - experimental?: { - enableSelectorless?: boolean; - }; stylePreprocessor?: ( code: string, filename: string, @@ -143,7 +140,6 @@ async function setupLiveReloadPlugin(options: { workspaceRoot: resolvedWorkspaceRoot, experimental: { useAngularCompilationAPI: true, - enableSelectorless: options.experimental?.enableSelectorless, }, }).find((entry) => entry.name === '@analogjs/vite-plugin-angular') as any; @@ -276,110 +272,6 @@ describe('angular hmr style preprocessing', () => { }, ); - it( - 'allows selectorless compilation to be disabled explicitly', - { timeout: 15_000 }, - async () => { - const workspaceRoot = mkdtempSync( - join(tmpdir(), 'analog-live-reload-selectorless-explicit-off-'), - ); - temporaryWorkspaceRoots.add(workspaceRoot); - mkdirSync(join(workspaceRoot, 'src/app/pages'), { recursive: true }); - writeFileSync( - join(workspaceRoot, 'src/app/pages/home.page.ts'), - ` - import { Component } from '@angular/core'; - - @Component({ - template: '

Home

', - }) - export default class HomePageComponent {} - `, - ); - - const { initialize } = await setupLiveReloadPlugin({ - workspaceRoot, - experimental: { - enableSelectorless: false, - }, - }); - - const initializeCall = initialize.mock.calls[0]; - expect(initializeCall).toBeTruthy(); - - const mutateTsCompilerOptions = initializeCall?.[2] as - | ((options: Record) => Record) - | undefined; - - expect(mutateTsCompilerOptions).toBeTypeOf('function'); - - const mutated = mutateTsCompilerOptions?.({}); - - // Explicit app config must win even when the route heuristic would have - // enabled selectorless by default. - expect(mutated?._enableSelectorless).toBeUndefined(); - }, - ); - - it( - 'defaults selectorless compilation off when the app has no file-based pages', - { timeout: 15_000 }, - async () => { - const { initialize } = await setupLiveReloadPlugin({}); - - const initializeCall = initialize.mock.calls[0]; - expect(initializeCall).toBeTruthy(); - - const mutateTsCompilerOptions = initializeCall?.[2] as - | ((options: Record) => Record) - | undefined; - - expect(mutateTsCompilerOptions).toBeTypeOf('function'); - - const mutated = mutateTsCompilerOptions?.({}); - - expect(mutated?._enableSelectorless).toBeUndefined(); - }, - ); - - it( - 'defaults selectorless compilation on when the app has file-based pages', - { timeout: 15_000 }, - async () => { - const workspaceRoot = mkdtempSync( - join(tmpdir(), 'analog-live-reload-selectorless-pages-'), - ); - temporaryWorkspaceRoots.add(workspaceRoot); - mkdirSync(join(workspaceRoot, 'src/app/pages'), { recursive: true }); - writeFileSync( - join(workspaceRoot, 'src/app/pages/home.page.ts'), - ` - import { Component } from '@angular/core'; - - @Component({ - template: '

Home

', - }) - export default class HomePageComponent {} - `, - ); - - const { initialize } = await setupLiveReloadPlugin({ workspaceRoot }); - - const initializeCall = initialize.mock.calls[0]; - expect(initializeCall).toBeTruthy(); - - const mutateTsCompilerOptions = initializeCall?.[2] as - | ((options: Record) => Record) - | undefined; - - expect(mutateTsCompilerOptions).toBeTypeOf('function'); - - const mutated = mutateTsCompilerOptions?.({}); - - expect(mutated?._enableSelectorless).toBe(true); - }, - ); - it('prepends content via stylePreprocessor through the HMR stylesheet path', async () => { const prepender = (code: string, _filename: string) => `@reference "../styles/tailwind.css";\n${code}`; diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts index 04f2253de..284d2bef4 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -177,20 +177,6 @@ export interface PluginOptions { experimental?: { useAngularCompilationAPI?: boolean; useAnalogCompiler?: boolean; - /** - * Controls Angular's experimental selectorless compilation mode. - * - * Defaults to `true` only when Angular 20+ applications use file-based - * pages or route entry points that rely on selectorless compilation. - * That auto mode is preserved for backwards compatibility with existing - * Analog route files that intentionally omit `selector`. - * Angular treats this as a compiler-wide mode, so once enabled it applies - * to the whole program, including workspace libraries pulled in through - * `include` globs or tsconfig references. - * Set this explicitly to pin behavior when route discovery would otherwise - * auto-enable selectorless for a larger app graph than intended. - */ - enableSelectorless?: boolean; /** * Compilation output mode for the Analog compiler. * - `'full'` (default): Emit final Ivy definitions for application builds. @@ -317,55 +303,6 @@ export function normalizeIncludeGlob( return normalizePath(resolve(normalizedWorkspaceRoot, normalizedGlob)); } -function isSelectorlessRouteFile(file: string): boolean { - const normalized = normalizePath(file); - return ( - normalized.endsWith('.page.ts') || - normalized.includes('/src/app/routes/') || - normalized.includes('/app/routes/') - ); -} - -/** - * Infer selectorless support from route/page entry points. - * - * This heuristic is intentionally broad because file-based routing commonly - * relies on selectorless components. The resulting Angular compiler flag is - * program-wide, not route-scoped, so a matching route-like include can affect - * every file in the current Angular program. - */ -function detectSelectorlessRouteUsage( - root: string, - workspaceRoot: string, - includeGlobs: string[], -): { enabled: boolean; routeFileCount: number } { - const normalizedRoot = normalizePath(resolve(root)); - const normalizedWorkspaceRoot = normalizePath(resolve(workspaceRoot)); - const appRouteGlobs = [ - `${normalizedRoot}/src/app/pages/**/*.page.ts`, - `${normalizedRoot}/src/app/routes/**/*.ts`, - `${normalizedRoot}/app/routes/**/*.ts`, - ]; - const routeLikeIncludeGlobs = includeGlobs - .map((glob) => normalizeIncludeGlob(normalizedWorkspaceRoot, glob)) - .filter( - (glob) => - glob.includes('.page.') || - glob.includes('/pages/') || - glob.includes('/app/routes/') || - glob.includes('/src/app/routes/'), - ); - const routeFiles = globSync([...appRouteGlobs, ...routeLikeIncludeGlobs], { - absolute: true, - dot: true, - onlyFiles: true, - }).filter(isSelectorlessRouteFile); - - return { - enabled: routeFiles.length > 0, - routeFileCount: routeFiles.length, - }; -} const classNames = new Map(); export function evictDeletedFileMetadata( file: string, @@ -508,7 +445,6 @@ export function buildStylePreprocessor( export function angular(options?: PluginOptions): Plugin[] { applyDebugOption(options?.debug, options?.workspaceRoot); const liveReload = options?.liveReload ?? true; - const explicitEnableSelectorless = options?.experimental?.enableSelectorless; /** * Normalize plugin options so defaults @@ -535,7 +471,6 @@ export function angular(options?: PluginOptions): Plugin[] { fileReplacements: options?.fileReplacements ?? [], useAngularCompilationAPI: options?.experimental?.useAngularCompilationAPI ?? false, - enableSelectorless: explicitEnableSelectorless, hasTailwindCss: !!options?.tailwindCss, tailwindCss: options?.tailwindCss, stylePreprocessor: buildStylePreprocessor(options), @@ -1080,34 +1015,6 @@ export function angular(options?: PluginOptions): Plugin[] { configResolved(config) { resolvedConfig = config; - if (typeof pluginOptions.enableSelectorless === 'undefined') { - // Preserve the explicit option as the authoritative value. The route - // scan is only a default because Angular applies selectorless to the - // whole program once the compiler option is enabled. We still keep - // the heuristic default for compatibility with checked-in Analog apps - // and tests that use selectorless route components without an - // explicit flag. - const selectorlessRouteUsage = detectSelectorlessRouteUsage( - config.root, - pluginOptions.workspaceRoot, - pluginOptions.include, - ); - pluginOptions.enableSelectorless = - angularFullVersion >= 200000 && selectorlessRouteUsage.enabled; - debugCompilationApi('selectorless default resolved', { - angularVersion: angularFullVersion, - root: config.root, - routeFileCount: selectorlessRouteUsage.routeFileCount, - selectorlessEnabled: pluginOptions.enableSelectorless, - }); - } else { - debugCompilationApi('selectorless resolved from explicit option', { - angularVersion: angularFullVersion, - root: config.root, - selectorlessEnabled: pluginOptions.enableSelectorless, - }); - } - if (pluginOptions.hasTailwindCss) { validateTailwindConfig(config, watchMode); } @@ -2890,7 +2797,6 @@ export function angular(options?: PluginOptions): Plugin[] { shouldExternalize: shouldExternalizeStyles(), externalRuntimeStyles: !!tsCompilerOptions['externalRuntimeStyles'], hmrEnabled: !!tsCompilerOptions['_enableHmr'], - selectorlessEnabled: pluginOptions.enableSelectorless, }); if (tsCompilerOptions.compilationMode === 'partial') { @@ -2899,13 +2805,6 @@ export function angular(options?: PluginOptions): Plugin[] { tsCompilerOptions['supportJitMode'] = true; } - if (pluginOptions.enableSelectorless) { - // Angular reads selectorless as a compiler-wide mode rather than a - // per-route transform, so keep this mutation in sync with every - // compilation path that feeds Angular compiler options. - tsCompilerOptions['_enableSelectorless'] = true; - } - if (!isTest && config.build?.lib) { tsCompilerOptions['declaration'] = true; tsCompilerOptions['declarationMap'] = watchMode; @@ -3193,7 +3092,6 @@ export function angular(options?: PluginOptions): Plugin[] { shouldExternalize: shouldExternalizeStyles(), externalRuntimeStyles: !!tsCompilerOptions['externalRuntimeStyles'], hmrEnabled: !!tsCompilerOptions['_enableHmr'], - selectorlessEnabled: pluginOptions.enableSelectorless, }); if (tsCompilerOptions['compilationMode'] === 'partial') { @@ -3202,12 +3100,6 @@ export function angular(options?: PluginOptions): Plugin[] { tsCompilerOptions['supportJitMode'] = true; } - if (pluginOptions.enableSelectorless) { - // Keep the legacy NgtscProgram path aligned with the Compilation API - // path above. Selectorless is still compiler-wide here. - tsCompilerOptions['_enableSelectorless'] = true; - } - if (!isTest && config.build?.lib) { tsCompilerOptions['declaration'] = true; tsCompilerOptions['declarationMap'] = watchMode; From 8241741262d6f9bd03b4600bf65e1728b08bba5c Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 22:29:01 -0400 Subject: [PATCH 20/22] docs: expand maintainer debugging workflow --- docs/debugging.md | 100 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 85 insertions(+), 15 deletions(-) diff --git a/docs/debugging.md b/docs/debugging.md index 439fbbf88..2c1cc2911 100644 --- a/docs/debugging.md +++ b/docs/debugging.md @@ -29,8 +29,8 @@ When debugging package changes in this monorepo, prefer the project-level Nx tar # Focus on Angular plugin HMR/style behavior DEBUG=analog:angular:hmr,analog:angular:styles pnpm nx test vite-plugin-angular -# Focus on platform routing output -DEBUG=analog:platform:routes pnpm nx build platform +# Focus on Compilation API inclusion, emit registration, and transform misses +DEBUG=analog:angular:compilation-api,analog:angular:compiler,analog:angular:emit pnpm nx test vite-plugin-angular # Focus on the style-pipeline integration seam in a served app DEBUG=analog:platform:style-pipeline,analog:angular:style-pipeline pnpm nx serve your-app @@ -47,6 +47,16 @@ first so each `dist` folder contains its generated `package.json`. The source package manifests still contain `catalog:` and `workspace:*` references that are only rewritten during Analog's release-style build pipeline. +Prefer `link:` for active local debugging. + +- `link:` keeps the consumer wired to the live built `dist` directories through + symlinks. +- `file:` can stage a snapshot into the consumer's `.pnpm` store. If you later + rebuild Analog without changing the version or specifier, pnpm may decide the + consumer install is already current and keep serving stale package contents. +- If you must use `file:`, always verify the active installed package contents, + not just the Analog source tree or `dist`. + ### Local checkout example `pnpm-workspace.yaml` @@ -57,11 +67,11 @@ packages: - 'libs/**' overrides: - '@analogjs/platform': file:/path/to/analog/packages/platform/dist - '@analogjs/router': file:/path/to/analog/packages/router/dist - '@analogjs/vite-plugin-angular': file:/path/to/analog/packages/vite-plugin-angular/dist - '@analogjs/vite-plugin-nitro': file:/path/to/analog/packages/vite-plugin-nitro/dist - '@analogjs/vitest-angular': file:/path/to/analog/packages/vitest-angular/dist + '@analogjs/platform': link:/path/to/analog/packages/platform/dist + '@analogjs/router': link:/path/to/analog/packages/router/dist + '@analogjs/vite-plugin-angular': link:/path/to/analog/packages/vite-plugin-angular/dist + '@analogjs/vite-plugin-nitro': link:/path/to/analog/packages/vite-plugin-nitro/dist + '@analogjs/vitest-angular': link:/path/to/analog/packages/vitest-angular/dist ``` Root `package.json` @@ -69,14 +79,14 @@ Root `package.json` ```json { "dependencies": { - "@analogjs/platform": "file:/path/to/analog/packages/platform/dist" + "@analogjs/platform": "link:/path/to/analog/packages/platform/dist" }, "overrides": { - "@analogjs/platform": "file:/path/to/analog/packages/platform/dist", - "@analogjs/router": "file:/path/to/analog/packages/router/dist", - "@analogjs/vite-plugin-angular": "file:/path/to/analog/packages/vite-plugin-angular/dist", - "@analogjs/vite-plugin-nitro": "file:/path/to/analog/packages/vite-plugin-nitro/dist", - "@analogjs/vitest-angular": "file:/path/to/analog/packages/vitest-angular/dist" + "@analogjs/platform": "link:/path/to/analog/packages/platform/dist", + "@analogjs/router": "link:/path/to/analog/packages/router/dist", + "@analogjs/vite-plugin-angular": "link:/path/to/analog/packages/vite-plugin-angular/dist", + "@analogjs/vite-plugin-nitro": "link:/path/to/analog/packages/vite-plugin-nitro/dist", + "@analogjs/vitest-angular": "link:/path/to/analog/packages/vitest-angular/dist" } } ``` @@ -88,13 +98,52 @@ can still resolve transitive packages like `@analogjs/vite-plugin-angular` and ::: :::note -pnpm currently does not allow `file:` entries in `catalog`, so local checkout -wiring needs direct `file:` overrides instead of `catalog:` indirection. +If the consumer workspace uses pnpm `catalog` entries, switch both the catalog +entries and the consumer overrides together. Mixed states are a common source of +confusing resolution behavior. ::: If your app also uses other published Analog packages such as `@analogjs/content` or `@analogjs/storybook-angular`, pin those the same way. +### Consumer validation checklist + +After rebuilding Analog and refreshing the consumer install: + +```bash +# Confirm the active install points at your local dist output +readlink node_modules/@analogjs/vite-plugin-angular + +# Confirm the dev server is actually listening +curl -k -I https://localhost:4200/ + +# Confirm the shell HTML and stylesheet entry are present +lightpanda fetch \ + --insecure-disable-tls-host-verification \ + --wait-until done \ + --wait-ms 12000 \ + --dump html \ + https://localhost:4200/ | sed -n '1,80p' +``` + +What to trust: + +- `curl` is the fastest readiness check. +- `Lightpanda` is useful for reachability, shell HTML, and asset-presence smoke + tests. +- Treat the consumer dev server logs as the source of truth for Angular + compilation failures such as: + - `contains Angular decorators but is not in the TypeScript program` + - missing Angular emit output + - JIT fallback for `@Injectable()` / `@Component()` + +What not to over-trust: + +- `Lightpanda` can surface browser-client or HMR-transport behavior that does + not necessarily mean Analog failed to compile the app correctly. +- A successful Analog rebuild does not prove the consumer is executing the new + package code unless the consumer install is verified. + ### GitHub branch example If you want the same pattern from a GitHub branch instead of a local path, pnpm @@ -136,6 +185,27 @@ those manifests still contain unresolved `catalog:` and `workspace:*` specifiers. ::: +## Useful Angular Debug Scopes + +Start with the smallest scope set that answers the question: + +```bash +DEBUG=analog:angular:compilation-api,analog:angular:compiler pnpm nx serve your-app +DEBUG=analog:angular:emit pnpm nx serve your-app +DEBUG=analog:angular:emit:v pnpm nx serve your-app +``` + +Recommended interpretation: + +- `analog:angular:compilation-api` + - wrapper tsconfig generation, initialization, high-level compilation flow +- `analog:angular:compiler` + - compiler-option mutations and transform-path decisions +- `analog:angular:emit` + - root-name expansion, emit registration, transform misses/hits +- `analog:angular:emit:v` + - per-file root lists, output registration, and normalized emitter lookups + ## Notes - Use the repo root unless you have a specific reason to run inside a package subdirectory. From 6bad91e887d112728f5fc18114e8778228ad2e53 Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 22:53:29 -0400 Subject: [PATCH 21/22] docs: update debugging guide with techniques and improved descriptions --- apps/docs-app/docs/guides/debugging.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/docs-app/docs/guides/debugging.md b/apps/docs-app/docs/guides/debugging.md index 9f1cf1267..a45cf314b 100644 --- a/apps/docs-app/docs/guides/debugging.md +++ b/apps/docs-app/docs/guides/debugging.md @@ -1,8 +1,10 @@ --- +title: Debugging Techniques +description: Enable Analog debug logging, choose the right scopes, and debug local or GitHub-based Analog builds from another pnpm workspace. sidebar_position: 4 --- -# Debugging +# Debugging Techniques Analog includes structured debug logging powered by [obug](https://www.npmjs.com/package/obug). You can enable debug output through the `debug` option in your Vite config or via the `DEBUG` environment variable. From 8f9322096f3d3ad0f4832ba387dfc6f998993286 Mon Sep 17 00:00:00 2001 From: Ben Snyder Date: Tue, 14 Apr 2026 22:56:17 -0400 Subject: [PATCH 22/22] feat(vite-plugin-angular): enhance live reload tests with additional directory and wildcard support - Added new directories and files to the live reload test setup for improved coverage. - Updated path mappings to include newly created directories and wildcard patterns. - Enhanced assertions to ensure proper exclusion of certain paths in generated configurations. --- .../angular-vite-plugin-live-reload.spec.ts | 34 +++++++++++++++++++ .../src/lib/angular-vite-plugin.ts | 24 +++++++++---- 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts index 324b0606f..280880990 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin-live-reload.spec.ts @@ -479,6 +479,12 @@ describe('angular hmr style preprocessing', () => { mkdirSync(join(tempWorkspaceRoot, 'libs/shared/extra/src'), { recursive: true, }); + mkdirSync(join(tempWorkspaceRoot, 'libs/shared/directory/src'), { + recursive: true, + }); + mkdirSync(join(tempWorkspaceRoot, 'libs/shared/wildcard/src/nested'), { + recursive: true, + }); writeFileSync( join(tempWorkspaceRoot, 'src/app/app.component.ts'), @@ -495,6 +501,17 @@ describe('angular hmr style preprocessing', () => { join(tempWorkspaceRoot, 'libs/shared/extra/src/index.ts'), 'export const extra = true;\n', ); + writeFileSync( + join(tempWorkspaceRoot, 'libs/shared/directory/src/directory.ts'), + 'export const directory = true;\n', + ); + writeFileSync( + join( + tempWorkspaceRoot, + 'libs/shared/wildcard/src/nested/wildcard.ts', + ), + 'export const wildcard = true;\n', + ); writeFileSync( join(tempWorkspaceRoot, 'libs/shared/feature/tsconfig.lib.json'), JSON.stringify( @@ -517,7 +534,9 @@ describe('angular hmr style preprocessing', () => { module: 'esnext', moduleResolution: 'bundler', paths: { + '@shared/directory': ['libs/shared/directory/src'], '@shared/extra': ['libs/shared/extra/src/index.ts'], + '@shared/wildcard/*': ['libs/shared/wildcard/src/**/*'], }, target: 'es2022', }, @@ -562,8 +581,23 @@ describe('angular hmr style preprocessing', () => { normalize( join(tempWorkspaceRoot, 'libs/shared/extra/src/index.ts'), ), + normalize( + join(tempWorkspaceRoot, 'libs/shared/directory/src/directory.ts'), + ), + normalize( + join( + tempWorkspaceRoot, + 'libs/shared/wildcard/src/nested/wildcard.ts', + ), + ), ]), ); + expect(generatedConfig.files).not.toContain( + normalize(join(tempWorkspaceRoot, 'libs/shared/directory/src')), + ); + expect(generatedConfig.files).not.toContain( + normalize(join(tempWorkspaceRoot, 'libs/shared/wildcard/src/nested')), + ); expect(generatedConfig.references).toEqual([ { path: './libs/shared/feature/tsconfig.lib.json' }, ]); diff --git a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts index 284d2bef4..2ac52c3ec 100644 --- a/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts +++ b/packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -2402,6 +2402,15 @@ export function angular(options?: PluginOptions): Plugin[] { : resolve(tsconfigDir, configuredBaseUrl) : tsconfigDir; const discoveredRoots = new Set(); + const addDiscoveredFiles = (pattern: string) => { + for (const match of globSync(pattern, { + dot: true, + absolute: true, + onlyFiles: true, + })) { + discoveredRoots.add(normalizePath(match)); + } + }; for (const targets of Object.values(tsPaths)) { for (const target of targets) { @@ -2410,17 +2419,18 @@ export function angular(options?: PluginOptions): Plugin[] { ); if (target.includes('*')) { - for (const match of globSync(resolvedTarget, { - dot: true, - absolute: true, - })) { - discoveredRoots.add(normalizePath(match)); - } + addDiscoveredFiles(resolvedTarget); continue; } if (existsSync(resolvedTarget)) { - discoveredRoots.add(resolvedTarget); + if (statSync(resolvedTarget).isDirectory()) { + addDiscoveredFiles( + normalizePath(join(resolvedTarget, '**/*.{ts,tsx,js,jsx}')), + ); + } else { + discoveredRoots.add(normalizePath(resolvedTarget)); + } } } }