From 4a2a9eba306cef3e3cb83b2e58810560469036fa Mon Sep 17 00:00:00 2001 From: Gal Podlipnik Date: Sat, 7 Jun 2025 02:25:53 +0200 Subject: [PATCH] containers page wip --- frontend/libs/shared/navbar/README.md | 7 + frontend/libs/shared/navbar/eslint.config.mjs | 34 + frontend/libs/shared/navbar/jest.config.ts | 21 + frontend/libs/shared/navbar/project.json | 20 + frontend/libs/shared/navbar/src/index.ts | 2 + .../navbar/src/lib/navbar-shell.component.ts | 13 + .../shared/navbar/src/lib/navbar.component.ts | 37 ++ frontend/libs/shared/navbar/src/test-setup.ts | 6 + frontend/libs/shared/navbar/tsconfig.json | 28 + frontend/libs/shared/navbar/tsconfig.lib.json | 17 + .../libs/shared/navbar/tsconfig.spec.json | 16 + frontend/libs/shared/stats-ws/src/index.ts | 2 +- .../src/lib/{containers.ts => ws.service.ts} | 0 frontend/libs/web/containers/README.md | 7 + .../libs/web/containers/eslint.config.mjs | 34 + frontend/libs/web/containers/jest.config.ts | 21 + frontend/libs/web/containers/project.json | 20 + frontend/libs/web/containers/src/index.ts | 1 + .../src/lib/containers-shell.component.ts | 30 + .../src/lib/containers.component.ts | 174 +++++ .../libs/web/containers/src/test-setup.ts | 6 + frontend/libs/web/containers/tsconfig.json | 28 + .../libs/web/containers/tsconfig.lib.json | 17 + .../libs/web/containers/tsconfig.spec.json | 16 + frontend/package-lock.json | 609 +++++++++--------- frontend/package.json | 16 +- frontend/src/app/app.component.ts | 75 +-- frontend/src/app/app.routes.ts | 12 +- frontend/src/styles.scss | 23 +- frontend/tsconfig.base.json | 6 +- 30 files changed, 914 insertions(+), 384 deletions(-) create mode 100644 frontend/libs/shared/navbar/README.md create mode 100644 frontend/libs/shared/navbar/eslint.config.mjs create mode 100644 frontend/libs/shared/navbar/jest.config.ts create mode 100644 frontend/libs/shared/navbar/project.json create mode 100644 frontend/libs/shared/navbar/src/index.ts create mode 100644 frontend/libs/shared/navbar/src/lib/navbar-shell.component.ts create mode 100644 frontend/libs/shared/navbar/src/lib/navbar.component.ts create mode 100644 frontend/libs/shared/navbar/src/test-setup.ts create mode 100644 frontend/libs/shared/navbar/tsconfig.json create mode 100644 frontend/libs/shared/navbar/tsconfig.lib.json create mode 100644 frontend/libs/shared/navbar/tsconfig.spec.json rename frontend/libs/shared/stats-ws/src/lib/{containers.ts => ws.service.ts} (100%) create mode 100644 frontend/libs/web/containers/README.md create mode 100644 frontend/libs/web/containers/eslint.config.mjs create mode 100644 frontend/libs/web/containers/jest.config.ts create mode 100644 frontend/libs/web/containers/project.json create mode 100644 frontend/libs/web/containers/src/index.ts create mode 100644 frontend/libs/web/containers/src/lib/containers-shell.component.ts create mode 100644 frontend/libs/web/containers/src/lib/containers.component.ts create mode 100644 frontend/libs/web/containers/src/test-setup.ts create mode 100644 frontend/libs/web/containers/tsconfig.json create mode 100644 frontend/libs/web/containers/tsconfig.lib.json create mode 100644 frontend/libs/web/containers/tsconfig.spec.json diff --git a/frontend/libs/shared/navbar/README.md b/frontend/libs/shared/navbar/README.md new file mode 100644 index 0000000..6ed134e --- /dev/null +++ b/frontend/libs/shared/navbar/README.md @@ -0,0 +1,7 @@ +# navbar + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test navbar` to execute the unit tests. diff --git a/frontend/libs/shared/navbar/eslint.config.mjs b/frontend/libs/shared/navbar/eslint.config.mjs new file mode 100644 index 0000000..e920498 --- /dev/null +++ b/frontend/libs/shared/navbar/eslint.config.mjs @@ -0,0 +1,34 @@ +import nx from '@nx/eslint-plugin'; +import baseConfig from '../../../eslint.base.config.mjs'; + +export default [ + ...baseConfig, + ...nx.configs['flat/angular'], + ...nx.configs['flat/angular-template'], + { + files: ['**/*.ts'], + rules: { + '@angular-eslint/directive-selector': [ + 'error', + { + type: 'attribute', + prefix: 'lib', + style: 'camelCase', + }, + ], + '@angular-eslint/component-selector': [ + 'error', + { + type: 'element', + prefix: 'lib', + style: 'kebab-case', + }, + ], + }, + }, + { + files: ['**/*.html'], + // Override or add rules here + rules: {}, + }, +]; diff --git a/frontend/libs/shared/navbar/jest.config.ts b/frontend/libs/shared/navbar/jest.config.ts new file mode 100644 index 0000000..f364738 --- /dev/null +++ b/frontend/libs/shared/navbar/jest.config.ts @@ -0,0 +1,21 @@ +export default { + displayName: 'navbar', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + coverageDirectory: '../../../coverage/libs/shared/navbar', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/frontend/libs/shared/navbar/project.json b/frontend/libs/shared/navbar/project.json new file mode 100644 index 0000000..9306855 --- /dev/null +++ b/frontend/libs/shared/navbar/project.json @@ -0,0 +1,20 @@ +{ + "name": "navbar", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/shared/navbar/src", + "prefix": "lib", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "libs/shared/navbar/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint" + } + } +} diff --git a/frontend/libs/shared/navbar/src/index.ts b/frontend/libs/shared/navbar/src/index.ts new file mode 100644 index 0000000..2c37e26 --- /dev/null +++ b/frontend/libs/shared/navbar/src/index.ts @@ -0,0 +1,2 @@ +export * from './lib/navbar-shell.component'; +export * from './lib/navbar.component'; diff --git a/frontend/libs/shared/navbar/src/lib/navbar-shell.component.ts b/frontend/libs/shared/navbar/src/lib/navbar-shell.component.ts new file mode 100644 index 0000000..d38bc05 --- /dev/null +++ b/frontend/libs/shared/navbar/src/lib/navbar-shell.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { NavbarComponent } from './navbar.component'; + +@Component({ + selector: 'frontend-navbar-shell', + imports: [NavbarComponent], + template: ` + + + `, +}) +export class NavbarShellComponent {} + diff --git a/frontend/libs/shared/navbar/src/lib/navbar.component.ts b/frontend/libs/shared/navbar/src/lib/navbar.component.ts new file mode 100644 index 0000000..a1dc6d0 --- /dev/null +++ b/frontend/libs/shared/navbar/src/lib/navbar.component.ts @@ -0,0 +1,37 @@ +import { Component, inject } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIcon } from '@angular/material/icon'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { ThemeToggleService } from '@frontend/shared/theme-toggle'; + +@Component({ + selector: 'frontend-navbar', + imports: [MatToolbarModule, MatIcon, MatButtonModule], + template: ` + + view_carousel + Docker Containers + + + + `, + styles: [ + ` + .spacer { + flex: 1 1 auto; + } + `, + ], +}) +export class NavbarComponent { + private readonly themeToggleService = inject(ThemeToggleService); + + protected isDarkTheme = this.themeToggleService.isDark; + + switchTheme() { + this.themeToggleService.toggleTheme(); + } +} + diff --git a/frontend/libs/shared/navbar/src/test-setup.ts b/frontend/libs/shared/navbar/src/test-setup.ts new file mode 100644 index 0000000..bc3333b --- /dev/null +++ b/frontend/libs/shared/navbar/src/test-setup.ts @@ -0,0 +1,6 @@ +import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; + +setupZoneTestEnv({ + errorOnUnknownElements: true, + errorOnUnknownProperties: true, +}); diff --git a/frontend/libs/shared/navbar/tsconfig.json b/frontend/libs/shared/navbar/tsconfig.json new file mode 100644 index 0000000..f460bb2 --- /dev/null +++ b/frontend/libs/shared/navbar/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "es2022", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "extends": "../../../tsconfig.base.json", + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/frontend/libs/shared/navbar/tsconfig.lib.json b/frontend/libs/shared/navbar/tsconfig.lib.json new file mode 100644 index 0000000..a28f762 --- /dev/null +++ b/frontend/libs/shared/navbar/tsconfig.lib.json @@ -0,0 +1,17 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": [ + "src/**/*.spec.ts", + "src/test-setup.ts", + "jest.config.ts", + "src/**/*.test.ts" + ], + "include": ["src/**/*.ts"] +} diff --git a/frontend/libs/shared/navbar/tsconfig.spec.json b/frontend/libs/shared/navbar/tsconfig.spec.json new file mode 100644 index 0000000..fb72535 --- /dev/null +++ b/frontend/libs/shared/navbar/tsconfig.spec.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "target": "es2016", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/frontend/libs/shared/stats-ws/src/index.ts b/frontend/libs/shared/stats-ws/src/index.ts index aa0587e..6a77c9d 100644 --- a/frontend/libs/shared/stats-ws/src/index.ts +++ b/frontend/libs/shared/stats-ws/src/index.ts @@ -1,2 +1,2 @@ -export * from './lib/containers'; export * from './lib/types'; +export * from './lib/ws.service'; diff --git a/frontend/libs/shared/stats-ws/src/lib/containers.ts b/frontend/libs/shared/stats-ws/src/lib/ws.service.ts similarity index 100% rename from frontend/libs/shared/stats-ws/src/lib/containers.ts rename to frontend/libs/shared/stats-ws/src/lib/ws.service.ts diff --git a/frontend/libs/web/containers/README.md b/frontend/libs/web/containers/README.md new file mode 100644 index 0000000..b5cb295 --- /dev/null +++ b/frontend/libs/web/containers/README.md @@ -0,0 +1,7 @@ +# containers + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test containers` to execute the unit tests. diff --git a/frontend/libs/web/containers/eslint.config.mjs b/frontend/libs/web/containers/eslint.config.mjs new file mode 100644 index 0000000..e920498 --- /dev/null +++ b/frontend/libs/web/containers/eslint.config.mjs @@ -0,0 +1,34 @@ +import nx from '@nx/eslint-plugin'; +import baseConfig from '../../../eslint.base.config.mjs'; + +export default [ + ...baseConfig, + ...nx.configs['flat/angular'], + ...nx.configs['flat/angular-template'], + { + files: ['**/*.ts'], + rules: { + '@angular-eslint/directive-selector': [ + 'error', + { + type: 'attribute', + prefix: 'lib', + style: 'camelCase', + }, + ], + '@angular-eslint/component-selector': [ + 'error', + { + type: 'element', + prefix: 'lib', + style: 'kebab-case', + }, + ], + }, + }, + { + files: ['**/*.html'], + // Override or add rules here + rules: {}, + }, +]; diff --git a/frontend/libs/web/containers/jest.config.ts b/frontend/libs/web/containers/jest.config.ts new file mode 100644 index 0000000..a01ee2f --- /dev/null +++ b/frontend/libs/web/containers/jest.config.ts @@ -0,0 +1,21 @@ +export default { + displayName: 'containers', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + coverageDirectory: '../../../coverage/libs/web/containers', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/frontend/libs/web/containers/project.json b/frontend/libs/web/containers/project.json new file mode 100644 index 0000000..34d81fc --- /dev/null +++ b/frontend/libs/web/containers/project.json @@ -0,0 +1,20 @@ +{ + "name": "containers", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/web/containers/src", + "prefix": "lib", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "libs/web/containers/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint" + } + } +} diff --git a/frontend/libs/web/containers/src/index.ts b/frontend/libs/web/containers/src/index.ts new file mode 100644 index 0000000..3c15c90 --- /dev/null +++ b/frontend/libs/web/containers/src/index.ts @@ -0,0 +1 @@ +export * from './lib/containers-shell.component'; diff --git a/frontend/libs/web/containers/src/lib/containers-shell.component.ts b/frontend/libs/web/containers/src/lib/containers-shell.component.ts new file mode 100644 index 0000000..f253342 --- /dev/null +++ b/frontend/libs/web/containers/src/lib/containers-shell.component.ts @@ -0,0 +1,30 @@ +import { Component } from '@angular/core'; +import { MatIconModule } from '@angular/material/icon'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { ContainersComponent } from './containers.component'; + +@Component({ + selector: 'frontend-containers-shell', + imports: [ContainersComponent, MatToolbarModule, MatIconModule], + template: ` +
+

View and manage your Docker containers here.

+ +
+ `, + styles: [ + ` + .content { + padding: 24px; + flex: 1; + } + .description { + color: var(--sys-on-surface-variant); + margin-bottom: 24px; + font-size: 16px; + } + `, + ], +}) +export class ContainersComponentShell {} + diff --git a/frontend/libs/web/containers/src/lib/containers.component.ts b/frontend/libs/web/containers/src/lib/containers.component.ts new file mode 100644 index 0000000..af00381 --- /dev/null +++ b/frontend/libs/web/containers/src/lib/containers.component.ts @@ -0,0 +1,174 @@ +import { NgClass } from '@angular/common'; +import { Component, inject, OnInit } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; +import { MatChipsModule } from '@angular/material/chips'; +import { MatIconModule } from '@angular/material/icon'; +import { StatsWsService } from '@frontend/shared/stats-ws'; + +@Component({ + selector: 'frontend-containers', + imports: [ + MatCardModule, + MatIconModule, + MatChipsModule, + MatButtonModule, + NgClass, + ], + template: ` +
+ @for (container of containers(); track container.id) { + + + + {{ getStateIcon(container.state) }} + + {{ container.name }} + {{ container.image }} + + +
+ ID: + {{ container.id.substring(0, 12) }} +
+
+ Status: + + {{ container.status }} + +
+
+ + + + +
+ } +
+ `, + styles: [ + ` + .content-container { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); + gap: 16px; + margin-top: 16px; + } + + .container-card { + transition: + transform 0.2s, + box-shadow 0.2s; + } + + .container-card:hover { + transform: translateY(-4px); + box-shadow: 0 6px 10px rgba(0, 0, 0, 0.1); + } + + .info-row { + display: flex; + margin-bottom: 8px; + align-items: center; + } + + .label { + font-weight: 500; + color: var(--sys-on-surface-variant); + width: 70px; + } + + .value { + font-family: monospace; + font-size: 14px; + } + + .state-running { + color: #4caf50; + } + + .state-exited, + .state-stopped { + color: #f44336; + } + + .state-created, + .state-paused { + color: #ff9800; + } + + .status-chip-running { + background-color: rgba(76, 175, 80, 0.15) !important; + color: #4caf50 !important; + } + + .status-chip-exited, + .status-chip-stopped { + background-color: rgba(244, 67, 54, 0.15) !important; + color: #f44336 !important; + } + + .status-chip-created, + .status-chip-paused { + background-color: rgba(255, 152, 0, 0.15) !important; + color: #ff9800 !important; + } + + mat-card-actions { + padding: 8px 16px 16px; + display: flex; + justify-content: flex-end; + } + `, + ], +}) +export class ContainersComponent implements OnInit { + private readonly service = inject(StatsWsService); + protected containers = this.service.containers; + + ngOnInit() { + this.service.initContainers(); + } + + getStateIcon(state: string): string { + switch (state) { + case 'running': + return 'play_circle'; + case 'exited': + return 'stop_circle'; + case 'created': + return 'fiber_new'; + case 'paused': + return 'pause_circle'; + default: + return 'help_circle'; + } + } + + getStateClass(state: string): string { + return `state-${state.toLowerCase()}`; + } + + getStatusClass(status: string): string { + if (status.includes('Up')) return 'status-chip-running'; + if (status.includes('Exited')) return 'status-chip-exited'; + if (status.includes('Created')) return 'status-chip-created'; + if (status.includes('Paused')) return 'status-chip-paused'; + return ''; + } +} + diff --git a/frontend/libs/web/containers/src/test-setup.ts b/frontend/libs/web/containers/src/test-setup.ts new file mode 100644 index 0000000..bc3333b --- /dev/null +++ b/frontend/libs/web/containers/src/test-setup.ts @@ -0,0 +1,6 @@ +import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; + +setupZoneTestEnv({ + errorOnUnknownElements: true, + errorOnUnknownProperties: true, +}); diff --git a/frontend/libs/web/containers/tsconfig.json b/frontend/libs/web/containers/tsconfig.json new file mode 100644 index 0000000..f460bb2 --- /dev/null +++ b/frontend/libs/web/containers/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "es2022", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "extends": "../../../tsconfig.base.json", + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/frontend/libs/web/containers/tsconfig.lib.json b/frontend/libs/web/containers/tsconfig.lib.json new file mode 100644 index 0000000..a28f762 --- /dev/null +++ b/frontend/libs/web/containers/tsconfig.lib.json @@ -0,0 +1,17 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": [ + "src/**/*.spec.ts", + "src/test-setup.ts", + "jest.config.ts", + "src/**/*.test.ts" + ], + "include": ["src/**/*.ts"] +} diff --git a/frontend/libs/web/containers/tsconfig.spec.json b/frontend/libs/web/containers/tsconfig.spec.json new file mode 100644 index 0000000..fb72535 --- /dev/null +++ b/frontend/libs/web/containers/tsconfig.spec.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "target": "es2016", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f6ed458..7c7dae3 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -32,13 +32,13 @@ "@angular/compiler-cli": "20.0.0", "@angular/language-service": "20.0.0", "@eslint/js": "9.28.0", - "@nx/angular": "21.1.2", - "@nx/eslint": "21.1.2", - "@nx/eslint-plugin": "21.1.2", - "@nx/jest": "21.1.2", - "@nx/js": "21.1.2", - "@nx/web": "21.1.2", - "@nx/workspace": "21.1.2", + "@nx/angular": "21.1.3", + "@nx/eslint": "21.1.3", + "@nx/eslint-plugin": "21.1.3", + "@nx/jest": "21.1.3", + "@nx/js": "21.1.3", + "@nx/web": "21.1.3", + "@nx/workspace": "21.1.3", "@schematics/angular": "20.0.0", "@swc-node/register": "1.10.10", "@swc/core": "1.11.29", @@ -52,7 +52,7 @@ "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "jest-preset-angular": "14.6.0", - "nx": "21.1.2", + "nx": "21.1.3", "prettier": "3.5.3", "ts-jest": "29.3.4", "ts-node": "10.9.2", @@ -4879,9 +4879,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.4.tgz", - "integrity": "sha512-t3yaEOuGu9NlIZ+hIeGbBjFtZT7j2cb2tg0fuaJKeGotchRjjLfrBA9Kwf8quhpP1EUuxModQg04q/mBwyg8uA==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", "dev": true, "license": "MIT", "engines": { @@ -4944,9 +4944,9 @@ "license": "MIT" }, "node_modules/@bufbuild/protobuf": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.5.1.tgz", - "integrity": "sha512-lut4UTvKL8tqtend0UDu7R79/n9jA7Jtxf77RNPbxtmWqfWI4qQ9bTjf7KCS4vfqLmpQbuHr1ciqJumAgJODdw==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.5.2.tgz", + "integrity": "sha512-foZ7qr0IsUBjzWIq+SuBLfdQCpJ1j8cTuNNT4owngTHoN5KsJb8L9t65fzz7SCeSWzescoOil/0ldqiL041ABg==", "dev": true, "license": "(Apache-2.0 AND BSD-3-Clause)" }, @@ -7133,15 +7133,15 @@ } }, "node_modules/@module-federation/cli": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/cli/-/cli-0.14.3.tgz", - "integrity": "sha512-BRR1d+piUSKW5OAuU+ej/zS3pMS4ismea9XHD/DWGJXW/Am7h1pFxRNYAZ8iflLJQ46oqjS/j1ECc5WJmbHlxw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/cli/-/cli-0.15.0.tgz", + "integrity": "sha512-ZFQ7TA7vwSro4n21/+9cGxVkeRU9IcXcQGs1GIToz/JFvomTHbGN33iplR3GNMhuMNyXQ/wxe2gWkEmIBCzW2w==", "dev": true, "license": "MIT", "dependencies": { "@modern-js/node-bundle-require": "2.67.6", - "@module-federation/dts-plugin": "0.14.3", - "@module-federation/sdk": "0.14.3", + "@module-federation/dts-plugin": "0.15.0", + "@module-federation/sdk": "0.15.0", "chalk": "3.0.0", "commander": "11.1.0" }, @@ -7153,16 +7153,16 @@ } }, "node_modules/@module-federation/cli/node_modules/@module-federation/dts-plugin": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.14.3.tgz", - "integrity": "sha512-QiE4wcra6dNo36028cX//QfX0uKF6UeoQoaVIIu06imF4KjCNQD3bE91D6H3DlVVD/UjnIDeUSt9AoGesLzbSA==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.15.0.tgz", + "integrity": "sha512-UztaFAhpCpsy+EUOP1BiqlYpRdD4h2TUITphCmThO1grOCqU7dYYwGjWNy37NtJeykRRznH3FU0+iGBG3Oiw6w==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.14.3", - "@module-federation/managers": "0.14.3", - "@module-federation/sdk": "0.14.3", - "@module-federation/third-party-dts-extractor": "0.14.3", + "@module-federation/error-codes": "0.15.0", + "@module-federation/managers": "0.15.0", + "@module-federation/sdk": "0.15.0", + "@module-federation/third-party-dts-extractor": "0.15.0", "adm-zip": "^0.5.10", "ansi-colors": "^4.1.3", "axios": "^1.8.2", @@ -7187,35 +7187,35 @@ } }, "node_modules/@module-federation/cli/node_modules/@module-federation/error-codes": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.14.3.tgz", - "integrity": "sha512-sBJ3XKU9g5Up31jFeXPFsD8AgORV7TLO/cCSMuRewSfgYbG/3vSKLJmfHrO6+PvjZSb9VyV2UaF02ojktW65vw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.15.0.tgz", + "integrity": "sha512-CFJSF+XKwTcy0PFZ2l/fSUpR4z247+Uwzp1sXVkdIfJ/ATsnqf0Q01f51qqSEA6MYdQi6FKos9FIcu3dCpQNdg==", "dev": true, "license": "MIT" }, "node_modules/@module-federation/cli/node_modules/@module-federation/managers": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.14.3.tgz", - "integrity": "sha512-uQiLRUvy2yiWm7Xa75y8/He3swW0l2hn8Ef09mvSXhjewwFQMPClQAmZa1UCgNk1F7s/dXDtL9E8vlnX/aZdOQ==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.15.0.tgz", + "integrity": "sha512-YMIiFRgMHtuMcLBgOYyfkFpwU9vo6l0VjOZE5Wdr33DltQBUgp9Lo8+2AkyZ4TTkelqjvUWSNKKYV3MV4GL7gw==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/sdk": "0.14.3", + "@module-federation/sdk": "0.15.0", "find-pkg": "2.0.0", "fs-extra": "9.1.0" } }, "node_modules/@module-federation/cli/node_modules/@module-federation/sdk": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.14.3.tgz", - "integrity": "sha512-THJZMfbXpqjQOLblCQ8jjcBFFXsGRJwUWE9l/Q4SmuCSKMgAwie7yLT0qSGrHmyBYrsUjAuy+xNB4nfKP0pnGw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.15.0.tgz", + "integrity": "sha512-PWiYbGcJrKUD6JZiEPihrXhV3bgXdll4bV7rU+opV7tHaun+Z0CdcawjZ82Xnpb8MCPGmqHwa1MPFeUs66zksw==", "dev": true, "license": "MIT" }, "node_modules/@module-federation/cli/node_modules/@module-federation/third-party-dts-extractor": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.14.3.tgz", - "integrity": "sha512-XAbUoN5hP9iSnrKGikDIy8CloWCKHRIpe+DWOlq8u7uXoRpAPs/a5K7uegxB27dZUNxSFEfqDeHrpQORNnDqPg==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.15.0.tgz", + "integrity": "sha512-rML74G1NB9wtHubXP+ZTMI5HZkYypN/E93w8Zkwr6rc/k1eoZZza2lghw2znCNeu3lDlhvI9i4iaVsJQrX4oQA==", "dev": true, "license": "MIT", "dependencies": { @@ -7489,15 +7489,15 @@ } }, "node_modules/@module-federation/node": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/@module-federation/node/-/node-2.7.6.tgz", - "integrity": "sha512-QZlUvOOKrwMMDA9CULIi/wrwlnssDi2WDctat3oszxsoziPSpwwbsfm9tGPasw2FvMCvZDO0kCMWSmvuIIeEKg==", + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/@module-federation/node/-/node-2.7.7.tgz", + "integrity": "sha512-8NaByOBkbTkv25k2iBgaEFvjzLPAQKjlFBtR1JYdMXMyeouzzsDi9G7S0Hblc5td8ZKe7PDP/+KA3+uS35jMcQ==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/enhanced": "0.14.3", - "@module-federation/runtime": "0.14.3", - "@module-federation/sdk": "0.14.3", + "@module-federation/enhanced": "0.15.0", + "@module-federation/runtime": "0.15.0", + "@module-federation/sdk": "0.15.0", "btoa": "1.2.1", "encoding": "^0.1.13", "node-fetch": "2.7.0" @@ -7520,26 +7520,26 @@ } }, "node_modules/@module-federation/node/node_modules/@module-federation/bridge-react-webpack-plugin": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.14.3.tgz", - "integrity": "sha512-lRkAeNpRdsOFIYx+SSEzsWUZbr2RdfcLA0UbadBaWV3FgeoSd0mef9IO9+KlY1y05anvwOS17VlsX0DeCbvMXg==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.15.0.tgz", + "integrity": "sha512-bbinV0gC82x0JGrT6kNV1tQHi4UBxqY79mZJKWVbGpSMPM+nifC9y/nQCYhZZajT7D/5zIHNkP0BKrQmPA7ArA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/sdk": "0.14.3", + "@module-federation/sdk": "0.15.0", "@types/semver": "7.5.8", "semver": "7.6.3" } }, "node_modules/@module-federation/node/node_modules/@module-federation/data-prefetch": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-0.14.3.tgz", - "integrity": "sha512-jGSeo4e32PxTIqPxxwb11oqBXLzygx7fsbV0RXHhy0W1IXDzFObYbHCN95ohxAEh25Hn5jinxBCFn/ltEzQUlA==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-0.15.0.tgz", + "integrity": "sha512-ivAnthD4SbBoT3590qLzCyKELGyfa7nj8BEjWjb6BNrP5Eu8sHX3Q2wHf76QsYfuwErtjaMU87N7dTe2ELZPVg==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.14.3", - "@module-federation/sdk": "0.14.3", + "@module-federation/runtime": "0.15.0", + "@module-federation/sdk": "0.15.0", "fs-extra": "9.1.0" }, "peerDependencies": { @@ -7548,16 +7548,16 @@ } }, "node_modules/@module-federation/node/node_modules/@module-federation/dts-plugin": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.14.3.tgz", - "integrity": "sha512-QiE4wcra6dNo36028cX//QfX0uKF6UeoQoaVIIu06imF4KjCNQD3bE91D6H3DlVVD/UjnIDeUSt9AoGesLzbSA==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.15.0.tgz", + "integrity": "sha512-UztaFAhpCpsy+EUOP1BiqlYpRdD4h2TUITphCmThO1grOCqU7dYYwGjWNy37NtJeykRRznH3FU0+iGBG3Oiw6w==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.14.3", - "@module-federation/managers": "0.14.3", - "@module-federation/sdk": "0.14.3", - "@module-federation/third-party-dts-extractor": "0.14.3", + "@module-federation/error-codes": "0.15.0", + "@module-federation/managers": "0.15.0", + "@module-federation/sdk": "0.15.0", + "@module-federation/third-party-dts-extractor": "0.15.0", "adm-zip": "^0.5.10", "ansi-colors": "^4.1.3", "axios": "^1.8.2", @@ -7582,23 +7582,23 @@ } }, "node_modules/@module-federation/node/node_modules/@module-federation/enhanced": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.14.3.tgz", - "integrity": "sha512-9R15Sm+hCn9yNtOTEwN1cHppC/sMb/LfoTcA94jLMB6lcyYz+uNzc5JliyrMawU1/guOQiBZkUVL/thB8DHURw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.15.0.tgz", + "integrity": "sha512-YzGcjdggtR+VrNdIgT1nvhT+V6I+LnrdsLV3YfOB0iVkOe4+YFbDLZJK16CuYRSm/HTR38LVbziE/6tWcibKYw==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/bridge-react-webpack-plugin": "0.14.3", - "@module-federation/cli": "0.14.3", - "@module-federation/data-prefetch": "0.14.3", - "@module-federation/dts-plugin": "0.14.3", - "@module-federation/error-codes": "0.14.3", - "@module-federation/inject-external-runtime-core-plugin": "0.14.3", - "@module-federation/managers": "0.14.3", - "@module-federation/manifest": "0.14.3", - "@module-federation/rspack": "0.14.3", - "@module-federation/runtime-tools": "0.14.3", - "@module-federation/sdk": "0.14.3", + "@module-federation/bridge-react-webpack-plugin": "0.15.0", + "@module-federation/cli": "0.15.0", + "@module-federation/data-prefetch": "0.15.0", + "@module-federation/dts-plugin": "0.15.0", + "@module-federation/error-codes": "0.15.0", + "@module-federation/inject-external-runtime-core-plugin": "0.15.0", + "@module-federation/managers": "0.15.0", + "@module-federation/manifest": "0.15.0", + "@module-federation/rspack": "0.15.0", + "@module-federation/runtime-tools": "0.15.0", + "@module-federation/sdk": "0.15.0", "btoa": "^1.2.1", "schema-utils": "^4.3.0", "upath": "2.0.1" @@ -7624,62 +7624,62 @@ } }, "node_modules/@module-federation/node/node_modules/@module-federation/error-codes": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.14.3.tgz", - "integrity": "sha512-sBJ3XKU9g5Up31jFeXPFsD8AgORV7TLO/cCSMuRewSfgYbG/3vSKLJmfHrO6+PvjZSb9VyV2UaF02ojktW65vw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.15.0.tgz", + "integrity": "sha512-CFJSF+XKwTcy0PFZ2l/fSUpR4z247+Uwzp1sXVkdIfJ/ATsnqf0Q01f51qqSEA6MYdQi6FKos9FIcu3dCpQNdg==", "dev": true, "license": "MIT" }, "node_modules/@module-federation/node/node_modules/@module-federation/inject-external-runtime-core-plugin": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.14.3.tgz", - "integrity": "sha512-OurBx/gDkRPKl9pidefG4EtJeSk8izaj3ZVN/sGGMOXLFeWLK2i0ZSUM/5ogPLj9NPdQC8tTlPalEUsRQ38DoA==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.15.0.tgz", + "integrity": "sha512-D6+FO2oj2Gr6QpfWv3i9RI9VJM2IFCMiFQKg5zOpKw1qdrPRWb35fiXAXGjw9RrVgrZz0Z1b9OP4zC9hfbpnQQ==", "dev": true, "license": "MIT", "peerDependencies": { - "@module-federation/runtime-tools": "0.14.3" + "@module-federation/runtime-tools": "0.15.0" } }, "node_modules/@module-federation/node/node_modules/@module-federation/managers": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.14.3.tgz", - "integrity": "sha512-uQiLRUvy2yiWm7Xa75y8/He3swW0l2hn8Ef09mvSXhjewwFQMPClQAmZa1UCgNk1F7s/dXDtL9E8vlnX/aZdOQ==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.15.0.tgz", + "integrity": "sha512-YMIiFRgMHtuMcLBgOYyfkFpwU9vo6l0VjOZE5Wdr33DltQBUgp9Lo8+2AkyZ4TTkelqjvUWSNKKYV3MV4GL7gw==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/sdk": "0.14.3", + "@module-federation/sdk": "0.15.0", "find-pkg": "2.0.0", "fs-extra": "9.1.0" } }, "node_modules/@module-federation/node/node_modules/@module-federation/manifest": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-0.14.3.tgz", - "integrity": "sha512-GsD4PK7JTDOX8g2NyGhsoejhfyP88h6wCaxW4zAq6X91CE9Yu1R/Ec6QHhp9jfXdQlgkoXz1nQRlkbiU7RNTDA==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-0.15.0.tgz", + "integrity": "sha512-x+UVFkdoKiNZhpUO8H/9jlM3nmC5bIApZvbC2TQuNva+ElCPotdhEO8jduiVkBnc2lr8D9qnFm8U5Kx/aFnGlA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/dts-plugin": "0.14.3", - "@module-federation/managers": "0.14.3", - "@module-federation/sdk": "0.14.3", + "@module-federation/dts-plugin": "0.15.0", + "@module-federation/managers": "0.15.0", + "@module-federation/sdk": "0.15.0", "chalk": "3.0.0", "find-pkg": "2.0.0" } }, "node_modules/@module-federation/node/node_modules/@module-federation/rspack": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.14.3.tgz", - "integrity": "sha512-s02E7n9CnR+IMraYwGqfSU2uScENPU+TUd45YteMKxcKOIqNRALtGMn/YT24bbnj+wZ/jhvzr7Rbcx9AkaxKhA==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.15.0.tgz", + "integrity": "sha512-nRz0JHcoTz+M5A+wXCG3981lmPeEm91EZe4q5GVfbVhvlAf/Ctd26qSz4lXuyUA1Ar5afBTxKvqWy7xh4wcg2A==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/bridge-react-webpack-plugin": "0.14.3", - "@module-federation/dts-plugin": "0.14.3", - "@module-federation/inject-external-runtime-core-plugin": "0.14.3", - "@module-federation/managers": "0.14.3", - "@module-federation/manifest": "0.14.3", - "@module-federation/runtime-tools": "0.14.3", - "@module-federation/sdk": "0.14.3", + "@module-federation/bridge-react-webpack-plugin": "0.15.0", + "@module-federation/dts-plugin": "0.15.0", + "@module-federation/inject-external-runtime-core-plugin": "0.15.0", + "@module-federation/managers": "0.15.0", + "@module-federation/manifest": "0.15.0", + "@module-federation/runtime-tools": "0.15.0", + "@module-federation/sdk": "0.15.0", "btoa": "1.2.1" }, "peerDependencies": { @@ -7697,50 +7697,50 @@ } }, "node_modules/@module-federation/node/node_modules/@module-federation/runtime": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.14.3.tgz", - "integrity": "sha512-7ZHpa3teUDVhraYdxQGkfGHzPbjna4LtwbpudgzAxSLLFxLDNanaxCuSeIgSM9c+8sVUNC9kvzUgJEZB0krPJw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.15.0.tgz", + "integrity": "sha512-dTPsCNum9Bhu3yPOcrPYq0YnM9eCMMMNB1wuiqf1+sFbQlNApF0vfZxooqz3ln0/MpgE0jerVvFsLVGfqvC9Ug==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.14.3", - "@module-federation/runtime-core": "0.14.3", - "@module-federation/sdk": "0.14.3" + "@module-federation/error-codes": "0.15.0", + "@module-federation/runtime-core": "0.15.0", + "@module-federation/sdk": "0.15.0" } }, "node_modules/@module-federation/node/node_modules/@module-federation/runtime-core": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.14.3.tgz", - "integrity": "sha512-xMFQXflLVW/AJTWb4soAFP+LB4XuhE7ryiLIX8oTyUoBBgV6U2OPghnFljPjeXbud72O08NYlQ1qsHw1kN/V8Q==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.15.0.tgz", + "integrity": "sha512-RYzI61fRDrhyhaEOXH3AgIGlHiot0wPFXu7F43cr+ZnTi+VlSYWLdlZ4NBuT9uV6JSmH54/c+tEZm5SXgKR2sQ==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.14.3", - "@module-federation/sdk": "0.14.3" + "@module-federation/error-codes": "0.15.0", + "@module-federation/sdk": "0.15.0" } }, "node_modules/@module-federation/node/node_modules/@module-federation/runtime-tools": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.14.3.tgz", - "integrity": "sha512-QBETX7iMYXdSa3JtqFlYU+YkpymxETZqyIIRiqg0gW+XGpH3jgU68yjrme2NBJp7URQi/CFZG8KWtfClk0Pjgw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.15.0.tgz", + "integrity": "sha512-kzFn3ObUeBp5vaEtN1WMxhTYBuYEErxugu1RzFUERD21X3BZ+b4cWwdFJuBDlsmVjctIg/QSOoZoPXRKAO0foA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.14.3", - "@module-federation/webpack-bundler-runtime": "0.14.3" + "@module-federation/runtime": "0.15.0", + "@module-federation/webpack-bundler-runtime": "0.15.0" } }, "node_modules/@module-federation/node/node_modules/@module-federation/sdk": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.14.3.tgz", - "integrity": "sha512-THJZMfbXpqjQOLblCQ8jjcBFFXsGRJwUWE9l/Q4SmuCSKMgAwie7yLT0qSGrHmyBYrsUjAuy+xNB4nfKP0pnGw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.15.0.tgz", + "integrity": "sha512-PWiYbGcJrKUD6JZiEPihrXhV3bgXdll4bV7rU+opV7tHaun+Z0CdcawjZ82Xnpb8MCPGmqHwa1MPFeUs66zksw==", "dev": true, "license": "MIT" }, "node_modules/@module-federation/node/node_modules/@module-federation/third-party-dts-extractor": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.14.3.tgz", - "integrity": "sha512-XAbUoN5hP9iSnrKGikDIy8CloWCKHRIpe+DWOlq8u7uXoRpAPs/a5K7uegxB27dZUNxSFEfqDeHrpQORNnDqPg==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.15.0.tgz", + "integrity": "sha512-rML74G1NB9wtHubXP+ZTMI5HZkYypN/E93w8Zkwr6rc/k1eoZZza2lghw2znCNeu3lDlhvI9i4iaVsJQrX4oQA==", "dev": true, "license": "MIT", "dependencies": { @@ -7750,14 +7750,14 @@ } }, "node_modules/@module-federation/node/node_modules/@module-federation/webpack-bundler-runtime": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.14.3.tgz", - "integrity": "sha512-hIyJFu34P7bY2NeMIUHAS/mYUHEY71VTAsN0A0AqEJFSVPszheopu9VdXq0VDLrP9KQfuXT8SDxeYeJXyj0mgA==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.15.0.tgz", + "integrity": "sha512-i+3wu2Ljh2TmuUpsnjwZVupOVqV50jP0ndA8PSP4gwMKlgdGeaZ4VH5KkHAXGr2eiYUxYLMrJXz1+eILJqeGDg==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.14.3", - "@module-federation/sdk": "0.14.3" + "@module-federation/runtime": "0.15.0", + "@module-federation/sdk": "0.15.0" } }, "node_modules/@module-federation/node/node_modules/chalk": { @@ -8718,20 +8718,20 @@ } }, "node_modules/@nx/angular": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-21.1.2.tgz", - "integrity": "sha512-xkHatgZaSBSJ3G+pRbQ025sPtf+brtsqQGLk3YxoICf6S/pYLUIOZwnPn3pVqDQCM4ObOPdA2IMTQnKLClD9aw==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-21.1.3.tgz", + "integrity": "sha512-/VB9PCGm7BFrIOnBxnYDQhb9qNXo/uVa1i4YljOVTbY5w5oCYe50kTZZTinOiN1IrIt19/jPxv+OUrU4YgprKw==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "21.1.2", - "@nx/eslint": "21.1.2", - "@nx/js": "21.1.2", - "@nx/module-federation": "21.1.2", - "@nx/rspack": "21.1.2", - "@nx/web": "21.1.2", - "@nx/webpack": "21.1.2", - "@nx/workspace": "21.1.2", + "@nx/devkit": "21.1.3", + "@nx/eslint": "21.1.3", + "@nx/js": "21.1.3", + "@nx/module-federation": "21.1.3", + "@nx/rspack": "21.1.3", + "@nx/web": "21.1.3", + "@nx/webpack": "21.1.3", + "@nx/workspace": "21.1.3", "@phenomnomnominal/tsquery": "~5.0.1", "@typescript-eslint/type-utils": "^8.0.0", "enquirer": "~2.3.6", @@ -8752,9 +8752,9 @@ } }, "node_modules/@nx/devkit": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-21.1.2.tgz", - "integrity": "sha512-1dgjwSsNDdp/VXydZnSfzfVwySEB3C9yjzeIw6+3+nRvZfH16a7ggZE7MF5sJTq4d+01hAgIDz3KyvGa6Jf73g==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-21.1.3.tgz", + "integrity": "sha512-NSNXdn+PaNoPcxAKIhnZUbOA91Jzgk68paZEiABzAhkvfmrE5jM6VDMT6sJZ8lHWocrf6QFnzAOon1R4MoBeZw==", "dev": true, "license": "MIT", "dependencies": { @@ -8768,18 +8768,18 @@ "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": "21.1.2" + "nx": "21.1.3" } }, "node_modules/@nx/eslint": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-21.1.2.tgz", - "integrity": "sha512-Mp8u0RlkhxYtZ47d2ou6t8XIpRy7N/n23OzikqMro4Wt/DK1irGyShSoNIqdGdwalAE5MG1OFXspttXB+y/wOQ==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-21.1.3.tgz", + "integrity": "sha512-g4Os1AfTjS+51a6+X+5ZgY/J7TGIKdc1byORreaSnLXtN9BU6r4WKzGkT5TAAXS+UXXmSih7QAJhKPur2IHddQ==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "21.1.2", - "@nx/js": "21.1.2", + "@nx/devkit": "21.1.3", + "@nx/js": "21.1.3", "semver": "^7.5.3", "tslib": "^2.3.0", "typescript": "~5.7.2" @@ -8795,14 +8795,14 @@ } }, "node_modules/@nx/eslint-plugin": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-21.1.2.tgz", - "integrity": "sha512-kwhwe6e8dZ0pf5CYPq4OBck15NEJrfuivCEGRTIDZWu3WDYJIw7OvhfyCdGuoZLeHGoCVRjIU6xV5hOzkD9RSw==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-21.1.3.tgz", + "integrity": "sha512-xmh3bsK7yVQiEm0O5C3cD/J1P++iWQbEUl5rnysNxgHLh6gxkIh+4GLyRS8/05gbd6+JD1WKuzn77/wGq1gohw==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "21.1.2", - "@nx/js": "21.1.2", + "@nx/devkit": "21.1.3", + "@nx/js": "21.1.3", "@typescript-eslint/type-utils": "^8.0.0", "@typescript-eslint/utils": "^8.0.0", "chalk": "^4.1.0", @@ -8850,16 +8850,16 @@ } }, "node_modules/@nx/jest": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-21.1.2.tgz", - "integrity": "sha512-y4VZita9LFb6XajulRIwjMcqHU6/f73C4SNSH6IM5BYmkN68ovICmzTGvoaL7wGTaYrA4Moh/WoKwEwQWKxRPQ==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-21.1.3.tgz", + "integrity": "sha512-Wn3dqxvJ+O3OYiJ/h0Mmr4huc3JS+nZquUMAm19aJS8y6QVWRzGQGPxEJQ5jzoe407VMIKjiQ4LPhoV/xrNwbA==", "dev": true, "license": "MIT", "dependencies": { "@jest/reporters": "^29.4.1", "@jest/test-result": "^29.4.1", - "@nx/devkit": "21.1.2", - "@nx/js": "21.1.2", + "@nx/devkit": "21.1.3", + "@nx/js": "21.1.3", "@phenomnomnominal/tsquery": "~5.0.1", "identity-obj-proxy": "3.0.0", "jest-config": "^29.4.1", @@ -8874,9 +8874,9 @@ } }, "node_modules/@nx/js": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/js/-/js-21.1.2.tgz", - "integrity": "sha512-ZF6Zf4Ys+RBvH0GoQHio94C/0N07Px/trAvseMuQ8PKc0tSkXycu/EBc1uAZQvgJThR5o3diAKtIQug77pPYMQ==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/js/-/js-21.1.3.tgz", + "integrity": "sha512-pwn1tgWX8sxh+VKZRZl9VkabXkEyeELFCgkWS/on2Y1J6W2dMBcmyGuZAeLef2GkUNaR79VMWIqvPaK0JLyf4g==", "dev": true, "license": "MIT", "dependencies": { @@ -8887,8 +8887,8 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.22.5", "@babel/runtime": "^7.22.6", - "@nx/devkit": "21.1.2", - "@nx/workspace": "21.1.2", + "@nx/devkit": "21.1.3", + "@nx/workspace": "21.1.3", "@zkochan/js-yaml": "0.0.7", "babel-plugin-const-enum": "^1.0.1", "babel-plugin-macros": "^3.1.0", @@ -8927,18 +8927,18 @@ "license": "MIT" }, "node_modules/@nx/module-federation": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/module-federation/-/module-federation-21.1.2.tgz", - "integrity": "sha512-19aodN8uh3fEI2ifXYDXTV4hpQMk5Ko3UAFW+x0dQwlzSUIObt2mBMHL0PIkFXlT1fyz/rH+tkx67/DAAUxVZw==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/module-federation/-/module-federation-21.1.3.tgz", + "integrity": "sha512-NmKs9hWQwA+vDtImHfkOQOti06CDSbRRGAJ5gfnHN7yGXQWZn9cVHupTgxj9XHyJ8JzzXGHgSKxkqryydszLGw==", "dev": true, "license": "MIT", "dependencies": { "@module-federation/enhanced": "^0.9.0", "@module-federation/node": "^2.6.26", "@module-federation/sdk": "^0.9.0", - "@nx/devkit": "21.1.2", - "@nx/js": "21.1.2", - "@nx/web": "21.1.2", + "@nx/devkit": "21.1.3", + "@nx/js": "21.1.3", + "@nx/web": "21.1.3", "@rspack/core": "^1.3.8", "express": "^4.21.2", "http-proxy-middleware": "^3.0.3", @@ -8948,9 +8948,9 @@ } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-21.1.2.tgz", - "integrity": "sha512-9dO32jd+h7SrvQafJph6b7Bsmp2IotTE0w7dAGb4MGBQni3JWCXaxlMMpWUZXWW1pM5uIkFJO5AASW4UOI7w2w==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-21.1.3.tgz", + "integrity": "sha512-gbBKQrw9ecjXHVs7Kwaht5Dip//NBCgmnkf3GGoA40ad3zyvHDe+MBWMxueRToUVW/mDPh8b5lvLbmFApiY6sQ==", "cpu": [ "arm64" ], @@ -8962,9 +8962,9 @@ ] }, "node_modules/@nx/nx-darwin-x64": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-21.1.2.tgz", - "integrity": "sha512-5sf+4PRVg9pDVgD53NE1hoPz4lC8Ni34UovQsOrZgDvwU5mqPbIhTzVYRDH86i/086AcCvjT5tEt7rEcuRwlKw==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-21.1.3.tgz", + "integrity": "sha512-yGDWqxwNty1BJcuvZlwGGravAhg8eIRMEIp2omfIxeyfZEVA4b7egwMCqczwU2Li/StNjTtzrUe1HPWgcCVAuQ==", "cpu": [ "x64" ], @@ -8976,9 +8976,9 @@ ] }, "node_modules/@nx/nx-freebsd-x64": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-21.1.2.tgz", - "integrity": "sha512-E5HR44fimXlQuAgn/tP9esmvxbzt/92AIl0PBT6L3Juh/xYiXKWhda63H4+UNT8AcLRxVXwfZrGPuGCDs+7y/Q==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-21.1.3.tgz", + "integrity": "sha512-vpZPfSQgNIQ0vmnQA26DlJKZog20ISdS14ir234mvCaJJFdlgWGcpyEOSCU3Vg+32Z/VsSx7kIkBwRhfEZ73Ag==", "cpu": [ "x64" ], @@ -8990,9 +8990,9 @@ ] }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-21.1.2.tgz", - "integrity": "sha512-V4n6DE+r12gwJHFjZs+e2GmWYZdhpgA2DYWbsYWRYb1XQCNUg4vPzt+YFzWZ+K2o91k93EBnlLfrag7CqxUslw==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-21.1.3.tgz", + "integrity": "sha512-R2GzEyHvyree2m7w+e/MOZjUY/l99HbW4E/jJl5BBXRGEAnGTIx9fOxSDiOW5QK6U0oZb2YO2b565t+IC+7rBQ==", "cpu": [ "arm" ], @@ -9004,9 +9004,9 @@ ] }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-21.1.2.tgz", - "integrity": "sha512-NFhsp27O+mS3r7PWLmJgyZy42WQ72c2pTQSpYfhaBbZPTI5DqBHdANa0sEPmV+ON24qkl5CZKvsmhzjsNmyW6A==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-21.1.3.tgz", + "integrity": "sha512-TlFT0G5gO6ujdkT7KUmvS2bwurvpV3olQwchqW1rQwuZ1eEQ1GVDuyzg49UG7lgESYruFn2HRhBf4V+iaD8WIw==", "cpu": [ "arm64" ], @@ -9018,9 +9018,9 @@ ] }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-21.1.2.tgz", - "integrity": "sha512-BgS9npARwcnw+hoaRsbas6vdBAJRBAj5qSeL57LO8Dva+e/6PYqoNyVJ0BgJ98xPXDpzM/NnpeRsndQGpLyhDw==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-21.1.3.tgz", + "integrity": "sha512-YkdzrZ7p2Y0YpteRyT9lPKhfuz2t5rNFQ87x9WHK2/cFD6H6M42Fg2JldCPIVj2chN9liH+s5ougW5oPQpZyKw==", "cpu": [ "arm64" ], @@ -9032,9 +9032,9 @@ ] }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-21.1.2.tgz", - "integrity": "sha512-tjBINbymQgxnIlNK/m6B0P5eiGRSHSYPNkFdh3+sra80AP/ymHGLRxxZy702Ga2xg8RVr9zEvuXYHI+QBa1YmA==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-21.1.3.tgz", + "integrity": "sha512-nnHxhakNCr4jR1y13g0yS/UOmn5aXkJ+ZA1R6jFQxIwLv3Ocy05i0ZvU7rPOtflluDberxEop8xzoiuEZXDa/w==", "cpu": [ "x64" ], @@ -9046,9 +9046,9 @@ ] }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-21.1.2.tgz", - "integrity": "sha512-+0V0YAOWMh1wvpQZuayQ7y+sj2MhE3l7z0JMD9SX/4xv9zLOWGv+EiUmN/fGoU/mwsSkH2wTCo6G6quKF1E8jQ==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-21.1.3.tgz", + "integrity": "sha512-poPt/LnFbq54CA3PZ1af8wcdQ4VsWRuA9w1Q1/G1BhCfDUAVIOZ0mhH1NzFpPwCxgVZ1TbNCZWhV2qjVRwQtlw==", "cpu": [ "x64" ], @@ -9060,9 +9060,9 @@ ] }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-21.1.2.tgz", - "integrity": "sha512-E+ECMQIMJ6R47BMW5YpDyOhTqczvFaL8k24umRkcvlRh3SraczyxBVPkYHDukDp7tCeIszc5EvdWc83C3W8U4w==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-21.1.3.tgz", + "integrity": "sha512-gBSVMRkXRqxTKgj/dabAD1EaptROy64fEtlU1llPz/RtcJcVhIlDczBF/y2WSD6A72cSv6zF/F1n3NrekNSfBA==", "cpu": [ "arm64" ], @@ -9074,9 +9074,9 @@ ] }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-21.1.2.tgz", - "integrity": "sha512-J9rNTBOS7Ld6CybU/cou1Fg52AHSYsiwpZISM2RNM0XIoVSDk3Jsvh4OJgS2rvV0Sp/cgDg3ieOMAreekH+TKw==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-21.1.3.tgz", + "integrity": "sha512-k3/1b2dLQjnWzrg2UqHDLCoaqEBx2SRgujjYCACRJ12vmYH2gTyFX2UPXikVbbpaTJNeXv8eaCzyCKhuvPK1sQ==", "cpu": [ "x64" ], @@ -9088,16 +9088,16 @@ ] }, "node_modules/@nx/rspack": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/rspack/-/rspack-21.1.2.tgz", - "integrity": "sha512-CJBD4e/TXrZyKesAZ7Su8wHuRnBo07ZRpYXgUTEBILeOFiSvnU2630cq47CuyjFFPpWTJ78VOOPnA27G46sHcg==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/rspack/-/rspack-21.1.3.tgz", + "integrity": "sha512-bt/SegqsfL9DFK9iGgK/zcWx86mJQCOAHNhtQ2TkzXSZMbgzu1onGgJteAuoKbilr2+Qx0i2e+T0bluJ4yJNoQ==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "21.1.2", - "@nx/js": "21.1.2", - "@nx/module-federation": "21.1.2", - "@nx/web": "21.1.2", + "@nx/devkit": "21.1.3", + "@nx/js": "21.1.3", + "@nx/module-federation": "21.1.3", + "@nx/web": "21.1.3", "@phenomnomnominal/tsquery": "~5.0.1", "@rspack/core": "^1.3.8", "@rspack/dev-server": "^1.1.1", @@ -9132,14 +9132,14 @@ } }, "node_modules/@nx/web": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/web/-/web-21.1.2.tgz", - "integrity": "sha512-ONw3bEO6rc9DqM9Jnt6Rc5xkSBMzruWA2KvHVlU4qaoUs1VKbnmJ28dM72lFMn8wbOOeq+RG7GC2nBpifBPLHw==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/web/-/web-21.1.3.tgz", + "integrity": "sha512-9UV3uacxJ6oMYPfXbPDq1jadM6nPMs13QhSEpjQLAxNDi4ay0zTOobbHZG6LYnf69dAFEIppoayiS42Kuk6L3Q==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "21.1.2", - "@nx/js": "21.1.2", + "@nx/devkit": "21.1.3", + "@nx/js": "21.1.3", "detect-port": "^1.5.1", "http-server": "^14.1.0", "picocolors": "^1.1.0", @@ -9147,15 +9147,15 @@ } }, "node_modules/@nx/webpack": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-21.1.2.tgz", - "integrity": "sha512-MtTXjxT8HB47uaMi4Hw6VGnyycQ5gm7Trazk4Fq7mr4ReIrP0vp1BGnNgho2d1dFONY0eA6MeBf9j/5jOI+MBA==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-21.1.3.tgz", + "integrity": "sha512-xrWio5Bg0bXrDsWiE54Y2XrajaLhIQBuKWUvkTb6rdn6n7yWC3pSdfAdMZ6MUtmJr6HMSBc8bFSb44IYXSMJ9Q==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.23.2", - "@nx/devkit": "21.1.2", - "@nx/js": "21.1.2", + "@nx/devkit": "21.1.3", + "@nx/js": "21.1.3", "@phenomnomnominal/tsquery": "~5.0.1", "ajv": "^8.12.0", "autoprefixer": "^10.4.9", @@ -9302,17 +9302,17 @@ } }, "node_modules/@nx/workspace": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-21.1.2.tgz", - "integrity": "sha512-I4e/X/GN0Vx3FDZv/7bFYmXfOPmcMI3cDO/rg+TqudsuxVM7tJ7+8jtwdpU4I2IEpI6oU9FZ7Fu9R2uNqL5rrQ==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-21.1.3.tgz", + "integrity": "sha512-SAObZmW1cx0hRddC2PCFWJBHpzdjsTGNArJta8iyzfrbP9KAxQd8jjDBZvXLpXU6YMOw0fLwm8YAD2E1xvIoyw==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "21.1.2", + "@nx/devkit": "21.1.3", "@zkochan/js-yaml": "0.0.7", "chalk": "^4.1.0", "enquirer": "~2.3.6", - "nx": "21.1.2", + "nx": "21.1.3", "picomatch": "4.0.2", "tslib": "^2.3.0", "yargs-parser": "21.1.1" @@ -10131,27 +10131,27 @@ ] }, "node_modules/@rspack/binding": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.3.13.tgz", - "integrity": "sha512-BdM6tfLCP7/0H5uGc+okG6AYsU9JEnR5bRHq4YuGaS4tb+N5ct0czm0LprGMZ7zRAnIql/zoLn/bHlheNxZw3g==", + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.3.15.tgz", + "integrity": "sha512-utNPuJglLO5lW9XbwIqjB7+2ilMo6JkuVLTVdnNVKU94FW7asn9F/qV+d+MgjUVqU1QPCGm0NuGO9xhbgeJ7pg==", "dev": true, "license": "MIT", "optionalDependencies": { - "@rspack/binding-darwin-arm64": "1.3.13", - "@rspack/binding-darwin-x64": "1.3.13", - "@rspack/binding-linux-arm64-gnu": "1.3.13", - "@rspack/binding-linux-arm64-musl": "1.3.13", - "@rspack/binding-linux-x64-gnu": "1.3.13", - "@rspack/binding-linux-x64-musl": "1.3.13", - "@rspack/binding-win32-arm64-msvc": "1.3.13", - "@rspack/binding-win32-ia32-msvc": "1.3.13", - "@rspack/binding-win32-x64-msvc": "1.3.13" + "@rspack/binding-darwin-arm64": "1.3.15", + "@rspack/binding-darwin-x64": "1.3.15", + "@rspack/binding-linux-arm64-gnu": "1.3.15", + "@rspack/binding-linux-arm64-musl": "1.3.15", + "@rspack/binding-linux-x64-gnu": "1.3.15", + "@rspack/binding-linux-x64-musl": "1.3.15", + "@rspack/binding-win32-arm64-msvc": "1.3.15", + "@rspack/binding-win32-ia32-msvc": "1.3.15", + "@rspack/binding-win32-x64-msvc": "1.3.15" } }, "node_modules/@rspack/binding-darwin-arm64": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.3.13.tgz", - "integrity": "sha512-1c+KC+TFaKRWu+SO4cJZ5oHKOFuDhTIitbSIG9boJpDRoZmJxHDmFyTTxVI2r2QUjxJaDdUlSFepybhhJ3UiPg==", + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.3.15.tgz", + "integrity": "sha512-f+DnVRENRdVe+ufpZeqTtWAUDSTnP48jVo7x9KWsXf8XyJHUi+eHKEPrFoy1HvL1/k5yJ3HVnFBh1Hb9cNIwSg==", "cpu": [ "arm64" ], @@ -10163,9 +10163,9 @@ ] }, "node_modules/@rspack/binding-darwin-x64": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.3.13.tgz", - "integrity": "sha512-YBF+XjoGSjhJ5o/xOaCBd39BntMudMeup11j2Dz+rrTH+wG6TvH017HYIgDMT3UBVv66eNsQpzA0ZW5raJ0lbA==", + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.3.15.tgz", + "integrity": "sha512-TfUvEIBqYUT2OK01BYXb2MNcZeZIhAnJy/5aj0qV0uy4KlvwW63HYcKWa1sFd4Ac7bnGShDkanvP3YEuHOFOyg==", "cpu": [ "x64" ], @@ -10177,9 +10177,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.3.13.tgz", - "integrity": "sha512-II71Ez7Z0/5ZpcK+kCgvXFKK0AysS9La8LNQbqf2wmzxDJi5H8eVUiwkM5BabICxzOWYtTGJLZ89QbCYaFbqCg==", + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.3.15.tgz", + "integrity": "sha512-D/YjYk9snKvYm1Elotq8/GsEipB4ZJWVv/V8cZ+ohhFNOPzygENi6JfyI06TryBTQiN0/JDZqt/S9RaWBWnMqw==", "cpu": [ "arm64" ], @@ -10191,9 +10191,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.3.13.tgz", - "integrity": "sha512-JFFhqglKVjlWcmmVwdS80Kw6v35yY9xlQJup09mL8gMtiiFiT36wTyTujz15Iv+2+S/Dv0Z+UeUJ99KRbQxgcQ==", + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.3.15.tgz", + "integrity": "sha512-lJbBsPMOiR0hYPCSM42yp7QiZjfo0ALtX7ws2wURpsQp3BMfRVAmXU3Ixpo2XCRtG1zj8crHaCmAWOJTS0smsA==", "cpu": [ "arm64" ], @@ -10205,9 +10205,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.3.13.tgz", - "integrity": "sha512-ogm4rt+PMQHkMg/0mA9VTjfGE3c+YaHZQT8KrFgTsoj2YCW9WO2J/RjdMc6STG4Y10BWO9Ar2azLxxHrKb+8UQ==", + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.3.15.tgz", + "integrity": "sha512-qGB8ucHklrzNg6lsAS36VrBsCbOw0acgpQNqTE5cuHWrp1Pu3GFTRiFEogenxEmzoRbohMZt0Ev5grivrcgKBQ==", "cpu": [ "x64" ], @@ -10219,9 +10219,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-musl": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.3.13.tgz", - "integrity": "sha512-8icDyXhg1iMKhQ3X2FTgAGQTQqnli9FyqHCuRIBauxy1V4W478Mp9Y+V+ErVUY1YxbZEUrkt3a59hssjGeDEeg==", + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.3.15.tgz", + "integrity": "sha512-qRn6e40fLQP+N2rQD8GAj/h4DakeTIho32VxTIaHRVuzw68ZD7VmKkwn55ssN370ejmey35ZdoNFNE12RBrMZA==", "cpu": [ "x64" ], @@ -10233,9 +10233,9 @@ ] }, "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.3.13.tgz", - "integrity": "sha512-y5XxwxDW4DrPKy+8P6t7I7IbA7B/iXjLoaS0jP/EwjSHWf/EnZzq9MgWqdop1km8Mwx6s1zcj+0qs73jL2N98w==", + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.3.15.tgz", + "integrity": "sha512-7uJ7dWhO1nWXJiCss6Rslz8hoAxAhFpwpbWja3eHgRb7O4NPHg6MWw63AQSI2aFVakreenfu9yXQqYfpVWJ2dA==", "cpu": [ "arm64" ], @@ -10247,9 +10247,9 @@ ] }, "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.3.13.tgz", - "integrity": "sha512-n24sznsZe3lC8ok6MgsT1nG4lVx3SQ/lZ0g23i2BGMRN8/p+kaC2eoPaHe/4m9Liz/W4Z5LhZCCvg4DQMEzeLA==", + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.3.15.tgz", + "integrity": "sha512-UsaWTYCjDiSCB0A0qETgZk4QvhwfG8gCrO4SJvA+QSEWOmgSai1YV70prFtLLIiyT9mDt1eU3tPWl1UWPRU/EQ==", "cpu": [ "ia32" ], @@ -10261,9 +10261,9 @@ ] }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.3.13.tgz", - "integrity": "sha512-CLyTNo0OrOD7xFKusFciKKG+8CXPowjPz+tcdkkrKYqGzAPzOcszblikITJhMbc7DLMzdTRSZUTkKLRydYH9sw==", + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.3.15.tgz", + "integrity": "sha512-ZnDIc9Es8EF94MirPDN+hOMt7tkb8nMEbRJFKLMmNd0ElNPgsql+1cY5SqyGRH1hsKB87KfSUQlhFiKZvzbfIg==", "cpu": [ "x64" ], @@ -10275,14 +10275,14 @@ ] }, "node_modules/@rspack/core": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.3.13.tgz", - "integrity": "sha512-j9jsNzKeEN14yraqX4jAFrM/nMfX5YEPgEMPlp4g5NAu3siaBa8gDF5brbdNq6TDXnTHK1MwwjaMdKA+3YeBKQ==", + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.3.15.tgz", + "integrity": "sha512-QuElIC8jXSKWAp0LSx18pmbhA7NiA5HGoVYesmai90UVxz98tud0KpMxTVCg+0lrLrnKZfCWN9kwjCxM5pGnrA==", "dev": true, "license": "MIT", "dependencies": { "@module-federation/runtime-tools": "0.14.3", - "@rspack/binding": "1.3.13", + "@rspack/binding": "1.3.15", "@rspack/lite-tapable": "1.0.1" }, "engines": { @@ -10357,16 +10357,16 @@ } }, "node_modules/@rspack/dev-server": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@rspack/dev-server/-/dev-server-1.1.2.tgz", - "integrity": "sha512-YNzXxWn6DV3X9yeJZ9bqX77wuhm2ko3sGavilBGi1MWuNihhWfhh9dlbipudPyoiwLl0lbioxA/hevosr+ajLg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rspack/dev-server/-/dev-server-1.1.3.tgz", + "integrity": "sha512-jWPeyiZiGpbLYGhwHvwxhaa4rsr8CQvsWkWslqeMLb2uXwmyy3UWjUR1q+AhAPnf0gs3lZoFZ1hjBQVecHKUvg==", "dev": true, "license": "MIT", "dependencies": { "chokidar": "^3.6.0", - "http-proxy-middleware": "^2.0.7", + "http-proxy-middleware": "^2.0.9", "p-retry": "^6.2.0", - "webpack-dev-server": "5.2.0", + "webpack-dev-server": "5.2.2", "ws": "^8.18.0" }, "engines": { @@ -10511,15 +10511,16 @@ } }, "node_modules/@rspack/dev-server/node_modules/webpack-dev-server": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.0.tgz", - "integrity": "sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", "dev": true, "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.21", "@types/serve-index": "^1.9.4", "@types/serve-static": "^1.15.5", "@types/sockjs": "^0.3.36", @@ -10532,7 +10533,7 @@ "connect-history-api-fallback": "^2.0.0", "express": "^4.21.2", "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.7", + "http-proxy-middleware": "^2.0.9", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", "open": "^10.0.3", @@ -13884,16 +13885,6 @@ "node": ">=10" } }, - "node_modules/cosmiconfig/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -20920,9 +20911,9 @@ "license": "MIT" }, "node_modules/nx": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-21.1.2.tgz", - "integrity": "sha512-oczAEOOkQHElxCXs2g2jXDRabDRsmub/h5SAgqAUDSJ2CRnYGVVlgZX7l+o+A9kSqfONyLy5FlJ1pSWlvPuG4w==", + "version": "21.1.3", + "resolved": "https://registry.npmjs.org/nx/-/nx-21.1.3.tgz", + "integrity": "sha512-GZ7+Bve4xOVIk/hb9nN16fVqVq5PNNyFom1SCQbEGhGkyABJF8kA4JImCKhZpZyg1CtZeUrkPHK4xNO+rw9G5w==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -20968,16 +20959,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "21.1.2", - "@nx/nx-darwin-x64": "21.1.2", - "@nx/nx-freebsd-x64": "21.1.2", - "@nx/nx-linux-arm-gnueabihf": "21.1.2", - "@nx/nx-linux-arm64-gnu": "21.1.2", - "@nx/nx-linux-arm64-musl": "21.1.2", - "@nx/nx-linux-x64-gnu": "21.1.2", - "@nx/nx-linux-x64-musl": "21.1.2", - "@nx/nx-win32-arm64-msvc": "21.1.2", - "@nx/nx-win32-x64-msvc": "21.1.2" + "@nx/nx-darwin-arm64": "21.1.3", + "@nx/nx-darwin-x64": "21.1.3", + "@nx/nx-freebsd-x64": "21.1.3", + "@nx/nx-linux-arm-gnueabihf": "21.1.3", + "@nx/nx-linux-arm64-gnu": "21.1.3", + "@nx/nx-linux-arm64-musl": "21.1.3", + "@nx/nx-linux-x64-gnu": "21.1.3", + "@nx/nx-linux-x64-musl": "21.1.3", + "@nx/nx-win32-arm64-msvc": "21.1.3", + "@nx/nx-win32-x64-msvc": "21.1.3" }, "peerDependencies": { "@swc-node/register": "^1.8.0", @@ -20999,6 +20990,19 @@ "dev": true, "license": "MIT" }, + "node_modules/nx/node_modules/yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -26758,16 +26762,13 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", - "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, "engines": { - "node": ">= 14.6" + "node": ">= 6" } }, "node_modules/yargs": { diff --git a/frontend/package.json b/frontend/package.json index 73cc5f8..1439ca1 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -32,13 +32,13 @@ "@angular/compiler-cli": "20.0.0", "@angular/language-service": "20.0.0", "@eslint/js": "9.28.0", - "@nx/angular": "21.1.2", - "@nx/eslint": "21.1.2", - "@nx/eslint-plugin": "21.1.2", - "@nx/jest": "21.1.2", - "@nx/js": "21.1.2", - "@nx/web": "21.1.2", - "@nx/workspace": "21.1.2", + "@nx/angular": "21.1.3", + "@nx/eslint": "21.1.3", + "@nx/eslint-plugin": "21.1.3", + "@nx/jest": "21.1.3", + "@nx/js": "21.1.3", + "@nx/web": "21.1.3", + "@nx/workspace": "21.1.3", "@schematics/angular": "20.0.0", "@swc-node/register": "1.10.10", "@swc/core": "1.11.29", @@ -52,7 +52,7 @@ "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "jest-preset-angular": "14.6.0", - "nx": "21.1.2", + "nx": "21.1.3", "prettier": "3.5.3", "ts-jest": "29.3.4", "ts-node": "10.9.2", diff --git a/frontend/src/app/app.component.ts b/frontend/src/app/app.component.ts index d3d6939..68550ed 100644 --- a/frontend/src/app/app.component.ts +++ b/frontend/src/app/app.component.ts @@ -1,74 +1,15 @@ -import { CommonModule } from '@angular/common'; -import { Component, OnInit, inject } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCardModule } from '@angular/material/card'; -import { MatIconModule } from '@angular/material/icon'; -import { MatToolbarModule } from '@angular/material/toolbar'; -import { RouterModule } from '@angular/router'; -import { StatsWsService } from '@frontend/shared/stats-ws'; -import { ThemeToggleService } from '@frontend/shared/theme-toggle'; +import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; +import { NavbarShellComponent } from '@frontend/shared/navbar'; @Component({ standalone: true, - imports: [ - RouterModule, - MatButtonModule, - MatCardModule, - MatIconModule, - MatToolbarModule, - CommonModule, - ], + imports: [NavbarShellComponent, RouterOutlet], selector: 'app-root', template: ` - - Docker Containers - - - - -
- @for (container of containers(); track container.id) { - - - {{ container.name }} - - -

ID: {{ container.id }}

-

Image: {{ container.image }}

-

Status: {{ container.status }}

-

State: {{ container.state }}

-
-
- } -
- + + + `, - styles: [ - ` - .spacer { - flex: 1 1 auto; - } - .content-container { - padding: 16px; - } - `, - ], }) -export class AppComponent implements OnInit { - private readonly service = inject(StatsWsService); - private readonly themeToggleService = inject(ThemeToggleService); - protected containers = this.service.containers; - - // Add this to check current theme for the template - protected isDarkTheme = () => this.themeToggleService.isDark(); - - switchTheme() { - this.themeToggleService.toggleTheme(); - } - - ngOnInit() { - this.service.initContainers(); - } -} +export class AppComponent {} diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts index 8762dfe..a9f8b45 100644 --- a/frontend/src/app/app.routes.ts +++ b/frontend/src/app/app.routes.ts @@ -1,3 +1,13 @@ import { Route } from '@angular/router'; -export const appRoutes: Route[] = []; +export const appRoutes: Route[] = [ + { + path: 'containers', + loadComponent: () => + import('@frontend/web/container').then((m) => m.ContainersComponentShell), + }, + { + path: '**', + redirectTo: 'containers', + }, +]; diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index b7aed53..ddfe114 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -1,16 +1,35 @@ +@import url('https://fonts.googleapis.com/icon?family=Material+Icons'); + html, body { height: 100%; max-width: 100vw; - overflow-x: hidden; } body { margin: 0; font-family: Roboto, 'Helvetica Neue', sans-serif; background-color: #fafafa; - transition: background-color 0.3s ease; + color: rgba(0, 0, 0, 0.87); + transition: + background-color 0.3s ease, + color 0.3s ease; } body.dark-theme { background-color: #303030; + color: rgba(255, 255, 255, 0.87); +} + +// Add this for the mat-card styling +.container { + margin-bottom: 16px; + transition: + background-color 0.3s ease, + color 0.3s ease; +} + +// Ensure mat-card content changes color appropriately +body.dark-theme .mat-mdc-card { + --mdc-elevated-card-container-color: #424242; + color: rgba(255, 255, 255, 0.87); } diff --git a/frontend/tsconfig.base.json b/frontend/tsconfig.base.json index 33d2fb9..0e43e1c 100644 --- a/frontend/tsconfig.base.json +++ b/frontend/tsconfig.base.json @@ -16,8 +16,12 @@ "baseUrl": ".", "paths": { "@frontend/shared/environment": ["libs/shared/environment/src/index.ts"], + "@frontend/shared/navbar": ["libs/shared/navbar/src/index.ts"], "@frontend/shared/stats-ws": ["libs/shared/stats-ws/src/index.ts"], - "@frontend/shared/theme-toggle": ["libs/shared/theme-toggle/src/index.ts"] + "@frontend/shared/theme-toggle": [ + "libs/shared/theme-toggle/src/index.ts" + ], + "@frontend/web/container": ["libs/web/containers/src/index.ts"] } }, "exclude": ["node_modules", "tmp"]