Refactor login component, update app routing, and add color theme styles

This commit is contained in:
Christian Werner 2025-10-17 20:12:07 +02:00
parent 723c5f55b8
commit d0fd155ea3
29 changed files with 451 additions and 105 deletions

View File

@ -17,7 +17,9 @@
"@angular/forms": "^19.1.0", "@angular/forms": "^19.1.0",
"@angular/platform-browser": "^19.1.0", "@angular/platform-browser": "^19.1.0",
"@angular/platform-browser-dynamic": "^19.1.0", "@angular/platform-browser-dynamic": "^19.1.0",
"@angular/platform-server": "^19.1.0",
"@angular/router": "^19.1.0", "@angular/router": "^19.1.0",
"@angular/ssr": "^19.2.14",
"rxjs": "~7.8.0", "rxjs": "~7.8.0",
"tslib": "^2.3.0", "tslib": "^2.3.0",
"zone.js": "~0.15.0" "zone.js": "~0.15.0"
@ -27,6 +29,7 @@
"@angular/cli": "^19.1.7", "@angular/cli": "^19.1.7",
"@angular/compiler-cli": "^19.1.0", "@angular/compiler-cli": "^19.1.0",
"@types/jasmine": "~5.1.0", "@types/jasmine": "~5.1.0",
"@types/node": "^18.18.0",
"jasmine-core": "~5.5.0", "jasmine-core": "~5.5.0",
"karma": "~6.4.0", "karma": "~6.4.0",
"karma-chrome-launcher": "~3.2.0", "karma-chrome-launcher": "~3.2.0",
@ -35,4 +38,4 @@
"karma-jasmine-html-reporter": "~2.1.0", "karma-jasmine-html-reporter": "~2.1.0",
"typescript": "~5.7.2" "typescript": "~5.7.2"
} }
} }

View File

@ -29,9 +29,15 @@ importers:
'@angular/platform-browser-dynamic': '@angular/platform-browser-dynamic':
specifier: ^19.1.0 specifier: ^19.1.0
version: 19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.14)(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))) version: 19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.14)(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))
'@angular/platform-server':
specifier: ^19.1.0
version: 19.2.15(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.14)(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
'@angular/router': '@angular/router':
specifier: ^19.1.0 specifier: ^19.1.0
version: 19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) version: 19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
'@angular/ssr':
specifier: ^19.2.14
version: 19.2.18(fa7767f49f86fa85c067e27d35b0c201)
rxjs: rxjs:
specifier: ~7.8.0 specifier: ~7.8.0
version: 7.8.2 version: 7.8.2
@ -44,16 +50,19 @@ importers:
devDependencies: devDependencies:
'@angular-devkit/build-angular': '@angular-devkit/build-angular':
specifier: ^19.1.7 specifier: ^19.1.7
version: 19.2.14(@angular/compiler-cli@19.2.14(@angular/compiler@19.2.14)(typescript@5.7.3))(@angular/compiler@19.2.14)(@types/node@22.15.30)(chokidar@4.0.3)(jiti@1.21.7)(karma@6.4.4)(typescript@5.7.3)(vite@6.2.7(@types/node@22.15.30)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)) version: 19.2.14(@angular/compiler-cli@19.2.14(@angular/compiler@19.2.14)(typescript@5.7.3))(@angular/compiler@19.2.14)(@angular/platform-server@19.2.15(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.14)(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2))(@angular/ssr@19.2.18(fa7767f49f86fa85c067e27d35b0c201))(@types/node@18.19.130)(chokidar@4.0.3)(jiti@1.21.7)(karma@6.4.4)(typescript@5.7.3)(vite@6.2.7(@types/node@18.19.130)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0))
'@angular/cli': '@angular/cli':
specifier: ^19.1.7 specifier: ^19.1.7
version: 19.2.14(@types/node@22.15.30)(chokidar@4.0.3) version: 19.2.14(@types/node@18.19.130)(chokidar@4.0.3)
'@angular/compiler-cli': '@angular/compiler-cli':
specifier: ^19.1.0 specifier: ^19.1.0
version: 19.2.14(@angular/compiler@19.2.14)(typescript@5.7.3) version: 19.2.14(@angular/compiler@19.2.14)(typescript@5.7.3)
'@types/jasmine': '@types/jasmine':
specifier: ~5.1.0 specifier: ~5.1.0
version: 5.1.8 version: 5.1.8
'@types/node':
specifier: ^18.18.0
version: 18.19.130
jasmine-core: jasmine-core:
specifier: ~5.5.0 specifier: ~5.5.0
version: 5.5.0 version: 5.5.0
@ -253,6 +262,16 @@ packages:
'@angular/animations': '@angular/animations':
optional: true optional: true
'@angular/platform-server@19.2.15':
resolution: {integrity: sha512-VKuEmzFylYLnFjjFTctnbckgYdXEyt3wU0AwT3uuLrSU/3EgfHlqd33ONuYaIxSRES81GaLcV9cc9uiZYT2QMg==}
engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
peerDependencies:
'@angular/common': 19.2.15
'@angular/compiler': 19.2.15
'@angular/core': 19.2.15
'@angular/platform-browser': 19.2.15
rxjs: ^6.5.3 || ^7.4.0
'@angular/router@19.2.14': '@angular/router@19.2.14':
resolution: {integrity: sha512-cBTWY9Jx7YhbmDYDb7Hqz4Q7UNIMlKTkdKToJd2pbhIXyoS+kHVQrySmyca+jgvYMjWnIjsAEa3dpje12D4mFw==} resolution: {integrity: sha512-cBTWY9Jx7YhbmDYDb7Hqz4Q7UNIMlKTkdKToJd2pbhIXyoS+kHVQrySmyca+jgvYMjWnIjsAEa3dpje12D4mFw==}
engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
@ -262,6 +281,17 @@ packages:
'@angular/platform-browser': 19.2.14 '@angular/platform-browser': 19.2.14
rxjs: ^6.5.3 || ^7.4.0 rxjs: ^6.5.3 || ^7.4.0
'@angular/ssr@19.2.18':
resolution: {integrity: sha512-3mcTMFpksELKSAAsOZ0XLvrSsbvZMRJ0+mkgOdw6VsKCvnmWn2jkjQGBJwuUmeIYSfmM0PwEyhrXiZA7cdGPjQ==}
peerDependencies:
'@angular/common': ^19.0.0 || ^19.2.0-next.0
'@angular/core': ^19.0.0 || ^19.2.0-next.0
'@angular/platform-server': ^19.0.0 || ^19.2.0-next.0
'@angular/router': ^19.0.0 || ^19.2.0-next.0
peerDependenciesMeta:
'@angular/platform-server':
optional: true
'@babel/code-frame@7.27.1': '@babel/code-frame@7.27.1':
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
@ -1626,8 +1656,8 @@ packages:
'@types/node-forge@1.3.11': '@types/node-forge@1.3.11':
resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
'@types/node@22.15.30': '@types/node@18.19.130':
resolution: {integrity: sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==} resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==}
'@types/qs@6.14.0': '@types/qs@6.14.0':
resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
@ -3938,8 +3968,8 @@ packages:
resolution: {integrity: sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==} resolution: {integrity: sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==}
hasBin: true hasBin: true
undici-types@6.21.0: undici-types@5.26.5:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
unicode-canonical-property-names-ecmascript@2.0.1: unicode-canonical-property-names-ecmascript@2.0.1:
resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
@ -4184,6 +4214,10 @@ packages:
utf-8-validate: utf-8-validate:
optional: true optional: true
xhr2@0.2.1:
resolution: {integrity: sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==}
engines: {node: '>= 6'}
y18n@5.0.8: y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -4239,13 +4273,13 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- chokidar - chokidar
'@angular-devkit/build-angular@19.2.14(@angular/compiler-cli@19.2.14(@angular/compiler@19.2.14)(typescript@5.7.3))(@angular/compiler@19.2.14)(@types/node@22.15.30)(chokidar@4.0.3)(jiti@1.21.7)(karma@6.4.4)(typescript@5.7.3)(vite@6.2.7(@types/node@22.15.30)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0))': '@angular-devkit/build-angular@19.2.14(@angular/compiler-cli@19.2.14(@angular/compiler@19.2.14)(typescript@5.7.3))(@angular/compiler@19.2.14)(@angular/platform-server@19.2.15(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.14)(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2))(@angular/ssr@19.2.18(fa7767f49f86fa85c067e27d35b0c201))(@types/node@18.19.130)(chokidar@4.0.3)(jiti@1.21.7)(karma@6.4.4)(typescript@5.7.3)(vite@6.2.7(@types/node@18.19.130)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0))':
dependencies: dependencies:
'@ampproject/remapping': 2.3.0 '@ampproject/remapping': 2.3.0
'@angular-devkit/architect': 0.1902.14(chokidar@4.0.3) '@angular-devkit/architect': 0.1902.14(chokidar@4.0.3)
'@angular-devkit/build-webpack': 0.1902.14(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0))(webpack@5.98.0(esbuild@0.25.4)) '@angular-devkit/build-webpack': 0.1902.14(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0))(webpack@5.98.0(esbuild@0.25.4))
'@angular-devkit/core': 19.2.14(chokidar@4.0.3) '@angular-devkit/core': 19.2.14(chokidar@4.0.3)
'@angular/build': 19.2.14(@angular/compiler-cli@19.2.14(@angular/compiler@19.2.14)(typescript@5.7.3))(@angular/compiler@19.2.14)(@types/node@22.15.30)(chokidar@4.0.3)(jiti@1.21.7)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(typescript@5.7.3) '@angular/build': 19.2.14(@angular/compiler-cli@19.2.14(@angular/compiler@19.2.14)(typescript@5.7.3))(@angular/compiler@19.2.14)(@angular/platform-server@19.2.15(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.14)(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2))(@angular/ssr@19.2.18(fa7767f49f86fa85c067e27d35b0c201))(@types/node@18.19.130)(chokidar@4.0.3)(jiti@1.21.7)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(typescript@5.7.3)
'@angular/compiler-cli': 19.2.14(@angular/compiler@19.2.14)(typescript@5.7.3) '@angular/compiler-cli': 19.2.14(@angular/compiler@19.2.14)(typescript@5.7.3)
'@babel/core': 7.26.10 '@babel/core': 7.26.10
'@babel/generator': 7.26.10 '@babel/generator': 7.26.10
@ -4258,7 +4292,7 @@ snapshots:
'@babel/runtime': 7.26.10 '@babel/runtime': 7.26.10
'@discoveryjs/json-ext': 0.6.3 '@discoveryjs/json-ext': 0.6.3
'@ngtools/webpack': 19.2.14(@angular/compiler-cli@19.2.14(@angular/compiler@19.2.14)(typescript@5.7.3))(typescript@5.7.3)(webpack@5.98.0(esbuild@0.25.4)) '@ngtools/webpack': 19.2.14(@angular/compiler-cli@19.2.14(@angular/compiler@19.2.14)(typescript@5.7.3))(typescript@5.7.3)(webpack@5.98.0(esbuild@0.25.4))
'@vitejs/plugin-basic-ssl': 1.2.0(vite@6.2.7(@types/node@22.15.30)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)) '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.2.7(@types/node@18.19.130)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0))
ansi-colors: 4.1.3 ansi-colors: 4.1.3
autoprefixer: 10.4.20(postcss@8.5.2) autoprefixer: 10.4.20(postcss@8.5.2)
babel-loader: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.25.4)) babel-loader: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.25.4))
@ -4299,6 +4333,8 @@ snapshots:
webpack-merge: 6.0.1 webpack-merge: 6.0.1
webpack-subresource-integrity: 5.1.0(webpack@5.98.0(esbuild@0.25.4)) webpack-subresource-integrity: 5.1.0(webpack@5.98.0(esbuild@0.25.4))
optionalDependencies: optionalDependencies:
'@angular/platform-server': 19.2.15(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.14)(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
'@angular/ssr': 19.2.18(fa7767f49f86fa85c067e27d35b0c201)
esbuild: 0.25.4 esbuild: 0.25.4
karma: 6.4.4 karma: 6.4.4
transitivePeerDependencies: transitivePeerDependencies:
@ -4360,7 +4396,7 @@ snapshots:
'@angular/core': 19.2.14(rxjs@7.8.2)(zone.js@0.15.1) '@angular/core': 19.2.14(rxjs@7.8.2)(zone.js@0.15.1)
tslib: 2.8.1 tslib: 2.8.1
'@angular/build@19.2.14(@angular/compiler-cli@19.2.14(@angular/compiler@19.2.14)(typescript@5.7.3))(@angular/compiler@19.2.14)(@types/node@22.15.30)(chokidar@4.0.3)(jiti@1.21.7)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(typescript@5.7.3)': '@angular/build@19.2.14(@angular/compiler-cli@19.2.14(@angular/compiler@19.2.14)(typescript@5.7.3))(@angular/compiler@19.2.14)(@angular/platform-server@19.2.15(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.14)(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2))(@angular/ssr@19.2.18(fa7767f49f86fa85c067e27d35b0c201))(@types/node@18.19.130)(chokidar@4.0.3)(jiti@1.21.7)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(typescript@5.7.3)':
dependencies: dependencies:
'@ampproject/remapping': 2.3.0 '@ampproject/remapping': 2.3.0
'@angular-devkit/architect': 0.1902.14(chokidar@4.0.3) '@angular-devkit/architect': 0.1902.14(chokidar@4.0.3)
@ -4370,8 +4406,8 @@ snapshots:
'@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-annotate-as-pure': 7.25.9
'@babel/helper-split-export-declaration': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7
'@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10)
'@inquirer/confirm': 5.1.6(@types/node@22.15.30) '@inquirer/confirm': 5.1.6(@types/node@18.19.130)
'@vitejs/plugin-basic-ssl': 1.2.0(vite@6.2.7(@types/node@22.15.30)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)) '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.2.7(@types/node@18.19.130)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0))
beasties: 0.3.2 beasties: 0.3.2
browserslist: 4.25.0 browserslist: 4.25.0
esbuild: 0.25.4 esbuild: 0.25.4
@ -4389,9 +4425,11 @@ snapshots:
semver: 7.7.1 semver: 7.7.1
source-map-support: 0.5.21 source-map-support: 0.5.21
typescript: 5.7.3 typescript: 5.7.3
vite: 6.2.7(@types/node@22.15.30)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0) vite: 6.2.7(@types/node@18.19.130)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)
watchpack: 2.4.2 watchpack: 2.4.2
optionalDependencies: optionalDependencies:
'@angular/platform-server': 19.2.15(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.14)(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
'@angular/ssr': 19.2.18(fa7767f49f86fa85c067e27d35b0c201)
karma: 6.4.4 karma: 6.4.4
less: 4.2.2 less: 4.2.2
lmdb: 3.2.6 lmdb: 3.2.6
@ -4409,13 +4447,13 @@ snapshots:
- tsx - tsx
- yaml - yaml
'@angular/cli@19.2.14(@types/node@22.15.30)(chokidar@4.0.3)': '@angular/cli@19.2.14(@types/node@18.19.130)(chokidar@4.0.3)':
dependencies: dependencies:
'@angular-devkit/architect': 0.1902.14(chokidar@4.0.3) '@angular-devkit/architect': 0.1902.14(chokidar@4.0.3)
'@angular-devkit/core': 19.2.14(chokidar@4.0.3) '@angular-devkit/core': 19.2.14(chokidar@4.0.3)
'@angular-devkit/schematics': 19.2.14(chokidar@4.0.3) '@angular-devkit/schematics': 19.2.14(chokidar@4.0.3)
'@inquirer/prompts': 7.3.2(@types/node@22.15.30) '@inquirer/prompts': 7.3.2(@types/node@18.19.130)
'@listr2/prompt-adapter-inquirer': 2.0.18(@inquirer/prompts@7.3.2(@types/node@22.15.30)) '@listr2/prompt-adapter-inquirer': 2.0.18(@inquirer/prompts@7.3.2(@types/node@18.19.130))
'@schematics/angular': 19.2.14(chokidar@4.0.3) '@schematics/angular': 19.2.14(chokidar@4.0.3)
'@yarnpkg/lockfile': 1.1.0 '@yarnpkg/lockfile': 1.1.0
ini: 5.0.0 ini: 5.0.0
@ -4488,6 +4526,16 @@ snapshots:
optionalDependencies: optionalDependencies:
'@angular/animations': 19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)) '@angular/animations': 19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))
'@angular/platform-server@19.2.15(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.14)(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)':
dependencies:
'@angular/common': 19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
'@angular/compiler': 19.2.14
'@angular/core': 19.2.14(rxjs@7.8.2)(zone.js@0.15.1)
'@angular/platform-browser': 19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))
rxjs: 7.8.2
tslib: 2.8.1
xhr2: 0.2.1
'@angular/router@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)': '@angular/router@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)':
dependencies: dependencies:
'@angular/common': 19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) '@angular/common': 19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
@ -4496,6 +4544,15 @@ snapshots:
rxjs: 7.8.2 rxjs: 7.8.2
tslib: 2.8.1 tslib: 2.8.1
'@angular/ssr@19.2.18(fa7767f49f86fa85c067e27d35b0c201)':
dependencies:
'@angular/common': 19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
'@angular/core': 19.2.14(rxjs@7.8.2)(zone.js@0.15.1)
'@angular/router': 19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
tslib: 2.8.1
optionalDependencies:
'@angular/platform-server': 19.2.15(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.14)(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.14(@angular/animations@19.2.14(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.14(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.14(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
'@babel/code-frame@7.27.1': '@babel/code-frame@7.27.1':
dependencies: dependencies:
'@babel/helper-validator-identifier': 7.27.1 '@babel/helper-validator-identifier': 7.27.1
@ -5305,34 +5362,34 @@ snapshots:
'@esbuild/win32-x64@0.25.4': '@esbuild/win32-x64@0.25.4':
optional: true optional: true
'@inquirer/checkbox@4.1.8(@types/node@22.15.30)': '@inquirer/checkbox@4.1.8(@types/node@18.19.130)':
dependencies: dependencies:
'@inquirer/core': 10.1.13(@types/node@22.15.30) '@inquirer/core': 10.1.13(@types/node@18.19.130)
'@inquirer/figures': 1.0.12 '@inquirer/figures': 1.0.12
'@inquirer/type': 3.0.7(@types/node@22.15.30) '@inquirer/type': 3.0.7(@types/node@18.19.130)
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
yoctocolors-cjs: 2.1.2 yoctocolors-cjs: 2.1.2
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@inquirer/confirm@5.1.12(@types/node@22.15.30)': '@inquirer/confirm@5.1.12(@types/node@18.19.130)':
dependencies: dependencies:
'@inquirer/core': 10.1.13(@types/node@22.15.30) '@inquirer/core': 10.1.13(@types/node@18.19.130)
'@inquirer/type': 3.0.7(@types/node@22.15.30) '@inquirer/type': 3.0.7(@types/node@18.19.130)
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@inquirer/confirm@5.1.6(@types/node@22.15.30)': '@inquirer/confirm@5.1.6(@types/node@18.19.130)':
dependencies: dependencies:
'@inquirer/core': 10.1.13(@types/node@22.15.30) '@inquirer/core': 10.1.13(@types/node@18.19.130)
'@inquirer/type': 3.0.7(@types/node@22.15.30) '@inquirer/type': 3.0.7(@types/node@18.19.130)
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@inquirer/core@10.1.13(@types/node@22.15.30)': '@inquirer/core@10.1.13(@types/node@18.19.130)':
dependencies: dependencies:
'@inquirer/figures': 1.0.12 '@inquirer/figures': 1.0.12
'@inquirer/type': 3.0.7(@types/node@22.15.30) '@inquirer/type': 3.0.7(@types/node@18.19.130)
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
cli-width: 4.1.0 cli-width: 4.1.0
mute-stream: 2.0.0 mute-stream: 2.0.0
@ -5340,97 +5397,97 @@ snapshots:
wrap-ansi: 6.2.0 wrap-ansi: 6.2.0
yoctocolors-cjs: 2.1.2 yoctocolors-cjs: 2.1.2
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@inquirer/editor@4.2.13(@types/node@22.15.30)': '@inquirer/editor@4.2.13(@types/node@18.19.130)':
dependencies: dependencies:
'@inquirer/core': 10.1.13(@types/node@22.15.30) '@inquirer/core': 10.1.13(@types/node@18.19.130)
'@inquirer/type': 3.0.7(@types/node@22.15.30) '@inquirer/type': 3.0.7(@types/node@18.19.130)
external-editor: 3.1.0 external-editor: 3.1.0
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@inquirer/expand@4.0.15(@types/node@22.15.30)': '@inquirer/expand@4.0.15(@types/node@18.19.130)':
dependencies: dependencies:
'@inquirer/core': 10.1.13(@types/node@22.15.30) '@inquirer/core': 10.1.13(@types/node@18.19.130)
'@inquirer/type': 3.0.7(@types/node@22.15.30) '@inquirer/type': 3.0.7(@types/node@18.19.130)
yoctocolors-cjs: 2.1.2 yoctocolors-cjs: 2.1.2
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@inquirer/figures@1.0.12': {} '@inquirer/figures@1.0.12': {}
'@inquirer/input@4.1.12(@types/node@22.15.30)': '@inquirer/input@4.1.12(@types/node@18.19.130)':
dependencies: dependencies:
'@inquirer/core': 10.1.13(@types/node@22.15.30) '@inquirer/core': 10.1.13(@types/node@18.19.130)
'@inquirer/type': 3.0.7(@types/node@22.15.30) '@inquirer/type': 3.0.7(@types/node@18.19.130)
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@inquirer/number@3.0.15(@types/node@22.15.30)': '@inquirer/number@3.0.15(@types/node@18.19.130)':
dependencies: dependencies:
'@inquirer/core': 10.1.13(@types/node@22.15.30) '@inquirer/core': 10.1.13(@types/node@18.19.130)
'@inquirer/type': 3.0.7(@types/node@22.15.30) '@inquirer/type': 3.0.7(@types/node@18.19.130)
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@inquirer/password@4.0.15(@types/node@22.15.30)': '@inquirer/password@4.0.15(@types/node@18.19.130)':
dependencies: dependencies:
'@inquirer/core': 10.1.13(@types/node@22.15.30) '@inquirer/core': 10.1.13(@types/node@18.19.130)
'@inquirer/type': 3.0.7(@types/node@22.15.30) '@inquirer/type': 3.0.7(@types/node@18.19.130)
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@inquirer/prompts@7.3.2(@types/node@22.15.30)': '@inquirer/prompts@7.3.2(@types/node@18.19.130)':
dependencies: dependencies:
'@inquirer/checkbox': 4.1.8(@types/node@22.15.30) '@inquirer/checkbox': 4.1.8(@types/node@18.19.130)
'@inquirer/confirm': 5.1.12(@types/node@22.15.30) '@inquirer/confirm': 5.1.12(@types/node@18.19.130)
'@inquirer/editor': 4.2.13(@types/node@22.15.30) '@inquirer/editor': 4.2.13(@types/node@18.19.130)
'@inquirer/expand': 4.0.15(@types/node@22.15.30) '@inquirer/expand': 4.0.15(@types/node@18.19.130)
'@inquirer/input': 4.1.12(@types/node@22.15.30) '@inquirer/input': 4.1.12(@types/node@18.19.130)
'@inquirer/number': 3.0.15(@types/node@22.15.30) '@inquirer/number': 3.0.15(@types/node@18.19.130)
'@inquirer/password': 4.0.15(@types/node@22.15.30) '@inquirer/password': 4.0.15(@types/node@18.19.130)
'@inquirer/rawlist': 4.1.3(@types/node@22.15.30) '@inquirer/rawlist': 4.1.3(@types/node@18.19.130)
'@inquirer/search': 3.0.15(@types/node@22.15.30) '@inquirer/search': 3.0.15(@types/node@18.19.130)
'@inquirer/select': 4.2.3(@types/node@22.15.30) '@inquirer/select': 4.2.3(@types/node@18.19.130)
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@inquirer/rawlist@4.1.3(@types/node@22.15.30)': '@inquirer/rawlist@4.1.3(@types/node@18.19.130)':
dependencies: dependencies:
'@inquirer/core': 10.1.13(@types/node@22.15.30) '@inquirer/core': 10.1.13(@types/node@18.19.130)
'@inquirer/type': 3.0.7(@types/node@22.15.30) '@inquirer/type': 3.0.7(@types/node@18.19.130)
yoctocolors-cjs: 2.1.2 yoctocolors-cjs: 2.1.2
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@inquirer/search@3.0.15(@types/node@22.15.30)': '@inquirer/search@3.0.15(@types/node@18.19.130)':
dependencies: dependencies:
'@inquirer/core': 10.1.13(@types/node@22.15.30) '@inquirer/core': 10.1.13(@types/node@18.19.130)
'@inquirer/figures': 1.0.12 '@inquirer/figures': 1.0.12
'@inquirer/type': 3.0.7(@types/node@22.15.30) '@inquirer/type': 3.0.7(@types/node@18.19.130)
yoctocolors-cjs: 2.1.2 yoctocolors-cjs: 2.1.2
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@inquirer/select@4.2.3(@types/node@22.15.30)': '@inquirer/select@4.2.3(@types/node@18.19.130)':
dependencies: dependencies:
'@inquirer/core': 10.1.13(@types/node@22.15.30) '@inquirer/core': 10.1.13(@types/node@18.19.130)
'@inquirer/figures': 1.0.12 '@inquirer/figures': 1.0.12
'@inquirer/type': 3.0.7(@types/node@22.15.30) '@inquirer/type': 3.0.7(@types/node@18.19.130)
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
yoctocolors-cjs: 2.1.2 yoctocolors-cjs: 2.1.2
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@inquirer/type@1.5.5': '@inquirer/type@1.5.5':
dependencies: dependencies:
mute-stream: 1.0.0 mute-stream: 1.0.0
'@inquirer/type@3.0.7(@types/node@22.15.30)': '@inquirer/type@3.0.7(@types/node@18.19.130)':
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@isaacs/cliui@8.0.2': '@isaacs/cliui@8.0.2':
dependencies: dependencies:
@ -5487,9 +5544,9 @@ snapshots:
'@leichtgewicht/ip-codec@2.0.5': {} '@leichtgewicht/ip-codec@2.0.5': {}
'@listr2/prompt-adapter-inquirer@2.0.18(@inquirer/prompts@7.3.2(@types/node@22.15.30))': '@listr2/prompt-adapter-inquirer@2.0.18(@inquirer/prompts@7.3.2(@types/node@18.19.130))':
dependencies: dependencies:
'@inquirer/prompts': 7.3.2(@types/node@22.15.30) '@inquirer/prompts': 7.3.2(@types/node@18.19.130)
'@inquirer/type': 1.5.5 '@inquirer/type': 1.5.5
'@lmdb/lmdb-darwin-arm64@3.2.6': '@lmdb/lmdb-darwin-arm64@3.2.6':
@ -5848,24 +5905,24 @@ snapshots:
'@types/body-parser@1.19.6': '@types/body-parser@1.19.6':
dependencies: dependencies:
'@types/connect': 3.4.38 '@types/connect': 3.4.38
'@types/node': 22.15.30 '@types/node': 18.19.130
'@types/bonjour@3.5.13': '@types/bonjour@3.5.13':
dependencies: dependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@types/connect-history-api-fallback@1.5.4': '@types/connect-history-api-fallback@1.5.4':
dependencies: dependencies:
'@types/express-serve-static-core': 5.0.6 '@types/express-serve-static-core': 5.0.6
'@types/node': 22.15.30 '@types/node': 18.19.130
'@types/connect@3.4.38': '@types/connect@3.4.38':
dependencies: dependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@types/cors@2.8.19': '@types/cors@2.8.19':
dependencies: dependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@types/eslint-scope@3.7.7': '@types/eslint-scope@3.7.7':
dependencies: dependencies:
@ -5883,14 +5940,14 @@ snapshots:
'@types/express-serve-static-core@4.19.6': '@types/express-serve-static-core@4.19.6':
dependencies: dependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@types/qs': 6.14.0 '@types/qs': 6.14.0
'@types/range-parser': 1.2.7 '@types/range-parser': 1.2.7
'@types/send': 0.17.5 '@types/send': 0.17.5
'@types/express-serve-static-core@5.0.6': '@types/express-serve-static-core@5.0.6':
dependencies: dependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@types/qs': 6.14.0 '@types/qs': 6.14.0
'@types/range-parser': 1.2.7 '@types/range-parser': 1.2.7
'@types/send': 0.17.5 '@types/send': 0.17.5
@ -5906,7 +5963,7 @@ snapshots:
'@types/http-proxy@1.17.16': '@types/http-proxy@1.17.16':
dependencies: dependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@types/jasmine@5.1.8': {} '@types/jasmine@5.1.8': {}
@ -5916,11 +5973,11 @@ snapshots:
'@types/node-forge@1.3.11': '@types/node-forge@1.3.11':
dependencies: dependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@types/node@22.15.30': '@types/node@18.19.130':
dependencies: dependencies:
undici-types: 6.21.0 undici-types: 5.26.5
'@types/qs@6.14.0': {} '@types/qs@6.14.0': {}
@ -5931,7 +5988,7 @@ snapshots:
'@types/send@0.17.5': '@types/send@0.17.5':
dependencies: dependencies:
'@types/mime': 1.3.5 '@types/mime': 1.3.5
'@types/node': 22.15.30 '@types/node': 18.19.130
'@types/serve-index@1.9.4': '@types/serve-index@1.9.4':
dependencies: dependencies:
@ -5940,20 +5997,20 @@ snapshots:
'@types/serve-static@1.15.8': '@types/serve-static@1.15.8':
dependencies: dependencies:
'@types/http-errors': 2.0.5 '@types/http-errors': 2.0.5
'@types/node': 22.15.30 '@types/node': 18.19.130
'@types/send': 0.17.5 '@types/send': 0.17.5
'@types/sockjs@0.3.36': '@types/sockjs@0.3.36':
dependencies: dependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@types/ws@8.18.1': '@types/ws@8.18.1':
dependencies: dependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
'@vitejs/plugin-basic-ssl@1.2.0(vite@6.2.7(@types/node@22.15.30)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0))': '@vitejs/plugin-basic-ssl@1.2.0(vite@6.2.7(@types/node@18.19.130)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0))':
dependencies: dependencies:
vite: 6.2.7(@types/node@22.15.30)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0) vite: 6.2.7(@types/node@18.19.130)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)
'@webassemblyjs/ast@1.14.1': '@webassemblyjs/ast@1.14.1':
dependencies: dependencies:
@ -6556,7 +6613,7 @@ snapshots:
engine.io@6.6.4: engine.io@6.6.4:
dependencies: dependencies:
'@types/cors': 2.8.19 '@types/cors': 2.8.19
'@types/node': 22.15.30 '@types/node': 18.19.130
accepts: 1.3.8 accepts: 1.3.8
base64id: 2.0.0 base64id: 2.0.0
cookie: 0.7.2 cookie: 0.7.2
@ -7158,7 +7215,7 @@ snapshots:
jest-worker@27.5.1: jest-worker@27.5.1:
dependencies: dependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
merge-stream: 2.0.0 merge-stream: 2.0.0
supports-color: 8.1.1 supports-color: 8.1.1
@ -8433,7 +8490,7 @@ snapshots:
ua-parser-js@0.7.40: {} ua-parser-js@0.7.40: {}
undici-types@6.21.0: {} undici-types@5.26.5: {}
unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-canonical-property-names-ecmascript@2.0.1: {}
@ -8481,13 +8538,13 @@ snapshots:
vary@1.1.2: {} vary@1.1.2: {}
vite@6.2.7(@types/node@22.15.30)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0): vite@6.2.7(@types/node@18.19.130)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0):
dependencies: dependencies:
esbuild: 0.25.4 esbuild: 0.25.4
postcss: 8.5.4 postcss: 8.5.4
rollup: 4.34.8 rollup: 4.34.8
optionalDependencies: optionalDependencies:
'@types/node': 22.15.30 '@types/node': 18.19.130
fsevents: 2.3.3 fsevents: 2.3.3
jiti: 1.21.7 jiti: 1.21.7
less: 4.2.2 less: 4.2.2
@ -8660,6 +8717,8 @@ snapshots:
ws@8.18.2: {} ws@8.18.2: {}
xhr2@0.2.1: {}
y18n@5.0.8: {} y18n@5.0.8: {}
yallist@3.1.1: {} yallist@3.1.1: {}

View File

@ -1,2 +1 @@
<img src="/full_logo.svg" alt="logo">
<router-outlet/> <router-outlet/>

View File

@ -4,6 +4,7 @@ import { provideRouter } from '@angular/router';
import { routes } from './app.routes'; import { routes } from './app.routes';
import {GandalfClientBaseAPI} from './clients/gandalf/gandalf-client'; import {GandalfClientBaseAPI} from './clients/gandalf/gandalf-client';
import {provideHttpClient} from '@angular/common/http'; import {provideHttpClient} from '@angular/common/http';
import { provideClientHydration, withEventReplay } from '@angular/platform-browser';
export const appConfig: ApplicationConfig = { export const appConfig: ApplicationConfig = {
providers: [ providers: [
@ -13,6 +14,6 @@ export const appConfig: ApplicationConfig = {
{ {
provide: GandalfClientBaseAPI, provide: GandalfClientBaseAPI,
useValue: 'http://localhost:5055' useValue: 'http://localhost:5055'
} }, provideClientHydration(withEventReplay())
] ]
}; };

View File

@ -2,6 +2,7 @@ import {Routes} from '@angular/router';
import {LoginComponent} from './components/login/login.component'; import {LoginComponent} from './components/login/login.component';
import {HomeComponent} from './components/home/home.component'; import {HomeComponent} from './components/home/home.component';
import {authGuard} from './guards/auth.guard'; import {authGuard} from './guards/auth.guard';
import {ShellComponent} from './components/shell/shell.component';
export const routes: Routes = [ export const routes: Routes = [
{ {
@ -11,6 +12,7 @@ export const routes: Routes = [
}, },
{ {
path: '', path: '',
component: ShellComponent,
children: [ children: [
{ {
title: 'Home', title: 'Home',

View File

@ -0,0 +1 @@
<p>home works!</p>

View File

@ -0,0 +1,12 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-home',
imports: [],
templateUrl: './home.component.html',
styleUrl: './home.component.scss',
standalone: true,
})
export class HomeComponent {
}

View File

@ -19,7 +19,7 @@ export class LoginComponent {
private router = inject(Router); private router = inject(Router);
protected loginFormGroup = new FormGroup({ protected loginFormGroup = new FormGroup({
usernameOrEmail: new FormControl('housemasterr'), usernameOrEmail: new FormControl('housemaster'),
password: new FormControl('kR0pNCspBKx8lOzAIch5'), password: new FormControl('kR0pNCspBKx8lOzAIch5'),
keep: new FormControl(false), keep: new FormControl(false),
}); });

View File

@ -0,0 +1 @@
<ng-content></ng-content>

View File

@ -0,0 +1,15 @@
:host {
display: flex;
flex-direction: row;
gap: 1rem;
padding: 1rem;
align-items: center;
background-color: var(--bg-color);
color: var(--text-color);
border-radius: 0.5rem;
margin: 1rem;
}

View File

@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { PanelComponent } from './panel.component';
describe('PanelComponent', () => {
let component: PanelComponent;
let fixture: ComponentFixture<PanelComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [PanelComponent]
})
.compileComponents();
fixture = TestBed.createComponent(PanelComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,11 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-panel',
imports: [],
templateUrl: './panel.component.html',
styleUrl: './panel.component.scss'
})
export class PanelComponent {
}

View File

@ -0,0 +1 @@
<p>nav-profile works!</p>

View File

@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { NavProfileComponent } from './nav-profile.component';
describe('NavProfileComponent', () => {
let component: NavProfileComponent;
let fixture: ComponentFixture<NavProfileComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [NavProfileComponent]
})
.compileComponents();
fixture = TestBed.createComponent(NavProfileComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,12 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-nav-profile',
imports: [],
templateUrl: './nav-profile.component.html',
styleUrl: './nav-profile.component.scss',
standalone: true,
})
export class NavProfileComponent {
}

View File

@ -0,0 +1,4 @@
<app-panel class="shell-nav-bar primary-50">
<img class="logo" src="/full_logo.svg" alt="logo">
<app-nav-profile></app-nav-profile>
</app-panel>

View File

@ -0,0 +1,9 @@
.shell-nav-bar {
.logo {
height: 3rem;
}
app-nav-profile {
margin-left: auto;
}
}

View File

@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ShellComponent } from './shell.component';
describe('ShellComponent', () => {
let component: ShellComponent;
let fixture: ComponentFixture<ShellComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [ShellComponent]
})
.compileComponents();
fixture = TestBed.createComponent(ShellComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,19 @@
import { Component } from '@angular/core';
import {NavProfileComponent} from './nav-profile/nav-profile.component';
import {RouterOutlet} from '@angular/router';
import {PanelComponent} from '../panel/panel.component';
@Component({
selector: 'app-shell',
imports: [
NavProfileComponent,
RouterOutlet,
PanelComponent
],
templateUrl: './shell.component.html',
styleUrl: './shell.component.scss',
standalone: true,
})
export class ShellComponent {
}

View File

@ -0,0 +1,17 @@
import { TestBed } from '@angular/core/testing';
import { CanActivateFn } from '@angular/router';
import { authGuard } from './auth.guard';
describe('authGuard', () => {
const executeGuard: CanActivateFn = (...guardParameters) =>
TestBed.runInInjectionContext(() => authGuard(...guardParameters));
beforeEach(() => {
TestBed.configureTestingModule({});
});
it('should be created', () => {
expect(executeGuard).toBeTruthy();
});
});

View File

@ -0,0 +1,15 @@
import {CanActivateFn, MaybeAsync, Router, UrlTree} from '@angular/router';
import {inject} from '@angular/core';
import {AuthService} from '../clients/gandalf/mithrandir/auth.service';
import { map } from 'rxjs';
export const authGuard: CanActivateFn = (route, state): MaybeAsync<boolean | UrlTree> => {
const authService = inject(AuthService);
const router = inject(Router);
return authService.check$().pipe(map(can => {
if (!can) {
return router.parseUrl('/login');
}
return can;
}))
};

View File

@ -0,0 +1,69 @@
@use 'sass:color';
$primary-color: hsl(160, 100%, 50%);
$secondary-color: hsl(270, 100%, 50%);
$info-color: hsl(180, 60%, 50%);
$success-color: hsl(110, 60%, 50%);
$warn-color: hsl(50, 70%, 50%);
$danger-color: hsl(10, 80%, 50%);
@mixin set-color-shades($name, $color, $step: 10) {
@for $i from 1 through (100/$step)-1 {
--#{$name}-#{$i * $step}: hsl(#{color.hue($color)}, #{color.saturation($color)}, #{$i * $step}%);
}
}
@mixin set-neutral-colors($step: 10) {
@for $i from 0 through 100/$step {
--neutral-#{$i * $step}: hsl(0, 0%, #{$i * $step}%);
}
}
@mixin set-common-colors() {
--primary-color: #{$primary-color};
--secondary-color: #{$secondary-color};
--info-color: #{$info-color};
--success-color: #{$success-color};
--warn-color: #{$warn-color};
--danger-color: #{$danger-color};
}
@mixin set-color-classes($name, $color, $step: 10, $padded: false) {
$from: if($padded, 0, 1);
$to: if($padded, 100/$step, (100/$step)-1);
@for $i from $from through $to {
.#{$name}-#{$i * $step} {
--bg-color: hsl(#{color.hue($color)}, #{color.saturation($color)}, #{$i * $step}%);
--text-color: var(--neutral-10);
}
}
}
:root {
@include set-neutral-colors();
@include set-common-colors();
@include set-color-shades("primary", $primary-color, 10);
@include set-color-shades("secondary", $secondary-color, 10);
--bg-color: var(--neutral-90);
--text-color: var(--neutral-10);
}
@media (prefers-color-scheme: dark) {
:root {
--bg-color: var(--neutral-10);
--text-color: var(--neutral-90);
}
}
@include set-color-classes("primary", $primary-color, 10, true);
@include set-color-classes("secondary", $secondary-color, 10);

View File

@ -1,4 +1,5 @@
/* You can add global styles to this file, and also import other style files */ /* You can add global styles to this file, and also import other style files */
@use "color-theme";
html, input { html, input {
font-size: 18px; font-size: 18px;
@ -11,6 +12,8 @@ html, input {
body { body {
margin: 0; margin: 0;
background-color: var(--bg-color);
color: var(--text-color);
} }
#path1 { fill: black; } #path1 { fill: black; }

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AgentMigrationStateService">
<option name="migrationStatus" value="COMPLETED" />
</component>
</project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AskMigrationStateService">
<option name="migrationStatus" value="COMPLETED" />
</component>
</project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Ask2AgentMigrationStateService">
<option name="migrationStatus" value="COMPLETED" />
</component>
</project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EditMigrationStateService">
<option name="migrationStatus" value="COMPLETED" />
</component>
</project>