diff --git a/webui/package-lock.json b/webui/package-lock.json
index 2160fe8d2..6f52047a3 100644
--- a/webui/package-lock.json
+++ b/webui/package-lock.json
@@ -8,16 +8,16 @@
       "name": "webui",
       "version": "1.0.0",
       "dependencies": {
-        "@angular/animations": "^18.2.2",
-        "@angular/cdk": "^18.2.2",
-        "@angular/common": "^18.2.2",
-        "@angular/compiler": "^18.2.2",
-        "@angular/core": "^18.2.2",
-        "@angular/forms": "^18.2.2",
-        "@angular/material": "^18.2.2",
-        "@angular/platform-browser": "^18.2.2",
-        "@angular/platform-browser-dynamic": "^18.2.2",
-        "@angular/router": "^18.2.2",
+        "@angular/animations": "^18.2.3",
+        "@angular/cdk": "^18.2.3",
+        "@angular/common": "^18.2.3",
+        "@angular/compiler": "^18.2.3",
+        "@angular/core": "^18.2.3",
+        "@angular/forms": "^18.2.3",
+        "@angular/material": "^18.2.3",
+        "@angular/platform-browser": "^18.2.3",
+        "@angular/platform-browser-dynamic": "^18.2.3",
+        "@angular/router": "^18.2.3",
         "bootstrap": "^5.3.3",
         "marked": "^12.0.2",
         "ngx-markdown": "^18",
@@ -27,9 +27,9 @@
         "zone.js": "~0.14.10"
       },
       "devDependencies": {
-        "@angular-devkit/build-angular": "^18.2.2",
-        "@angular/cli": "^18.2.2",
-        "@angular/compiler-cli": "^18.2.2",
+        "@angular-devkit/build-angular": "^18.2.3",
+        "@angular/cli": "^18.2.3",
+        "@angular/compiler-cli": "^18.2.3",
         "@types/jasmine": "~5.1.4",
         "@types/node": "^22.5.2",
         "jasmine-core": "~5.2.0",
@@ -55,12 +55,12 @@
       }
     },
     "node_modules/@angular-devkit/architect": {
-      "version": "0.1802.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.2.tgz",
-      "integrity": "sha512-LPRl9jhcf0NgshaL6RoUy1uL/cAyNt7oxctoZ9EHUu8eh5E9W/jZGhVowjOLpirwqYhmEzKJJIeS49Ssqs3RQg==",
+      "version": "0.1802.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.3.tgz",
+      "integrity": "sha512-WQ2AmkUKy1bqrDlNfozW8+VT2Tv/Fdmu4GIXps3ytZANyAKiIvTzmmql2cRCXXraa9FNMjLWNvz+qolDxWVdYQ==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/core": "18.2.2",
+        "@angular-devkit/core": "18.2.3",
         "rxjs": "7.8.1"
       },
       "engines": {
@@ -70,16 +70,16 @@
       }
     },
     "node_modules/@angular-devkit/build-angular": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.2.tgz",
-      "integrity": "sha512-7HEnTN2T1jnjuItXKcApOsoYGgfou4+POju3ZbwIQukDZ3B2COskvQkVTxqPNrQ0ZjT2mxZYoVlmGW9M+7N25g==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.3.tgz",
+      "integrity": "sha512-uUQba0SIskKORHcPayt7LpqPRKD//48EW92SgGHEArn2KklM+FSYBOA9OtrJeZ/UAcoJpdLDtvyY4+S7oFzomg==",
       "dev": true,
       "dependencies": {
         "@ampproject/remapping": "2.3.0",
-        "@angular-devkit/architect": "0.1802.2",
-        "@angular-devkit/build-webpack": "0.1802.2",
-        "@angular-devkit/core": "18.2.2",
-        "@angular/build": "18.2.2",
+        "@angular-devkit/architect": "0.1802.3",
+        "@angular-devkit/build-webpack": "0.1802.3",
+        "@angular-devkit/core": "18.2.3",
+        "@angular/build": "18.2.3",
         "@babel/core": "7.25.2",
         "@babel/generator": "7.25.0",
         "@babel/helper-annotate-as-pure": "7.24.7",
@@ -90,7 +90,7 @@
         "@babel/preset-env": "7.25.3",
         "@babel/runtime": "7.25.0",
         "@discoveryjs/json-ext": "0.6.1",
-        "@ngtools/webpack": "18.2.2",
+        "@ngtools/webpack": "18.2.3",
         "@vitejs/plugin-basic-ssl": "1.1.0",
         "ansi-colors": "4.1.3",
         "autoprefixer": "10.4.20",
@@ -133,7 +133,7 @@
         "vite": "5.4.0",
         "watchpack": "2.4.1",
         "webpack": "5.94.0",
-        "webpack-dev-middleware": "7.3.0",
+        "webpack-dev-middleware": "7.4.2",
         "webpack-dev-server": "5.0.4",
         "webpack-merge": "6.0.1",
         "webpack-subresource-integrity": "5.1.0"
@@ -249,12 +249,12 @@
       "dev": true
     },
     "node_modules/@angular-devkit/build-webpack": {
-      "version": "0.1802.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.2.tgz",
-      "integrity": "sha512-Pj+YmKh0nJOKl6QAsqYh3SqfuVJrFqjyp5WrG9BgfsMD9GCMD+5teMHNYJlp+vG/C8e7VdZp4rqOon8K9Xn4Mw==",
+      "version": "0.1802.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.3.tgz",
+      "integrity": "sha512-/Nixv9uAg6v/OPoZa0PB0zi+iezzBkgLrnrJnestny5B536l9WRtsw97RjeQDu+x2BClQsxNe8NL2A7EvjVD6w==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/architect": "0.1802.2",
+        "@angular-devkit/architect": "0.1802.3",
         "rxjs": "7.8.1"
       },
       "engines": {
@@ -268,9 +268,9 @@
       }
     },
     "node_modules/@angular-devkit/core": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.2.tgz",
-      "integrity": "sha512-Zz0tGptI/QQnUBDdp+1G5wGwQWMjpfe2oO+UohkrDVgFS71yVj4VDnOy51kMTxBvzw+36evTgthPpmzqPIfxBw==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.3.tgz",
+      "integrity": "sha512-vbFs+ofNK9OWeMIcFarFjegXVklhtSdLTEFKZ9trDVr8alTJdjI9AiYa6OOUTDAyq0hqYxV26xlCisWAPe7s5w==",
       "dev": true,
       "dependencies": {
         "ajv": "8.17.1",
@@ -324,12 +324,12 @@
       }
     },
     "node_modules/@angular-devkit/schematics": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.2.tgz",
-      "integrity": "sha512-PU6+3nX+gQ3gofR7BGwXuvNUNeeV2raURaZjlPfGpBqjyTBxukMV71QsTTWptAZT4WibCWkTFp6X1gvsOGbjMg==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.3.tgz",
+      "integrity": "sha512-N3tRAzBW2yWQhebvc1Ha18XTMSXOQTfr8HNjx7Fasx0Fg1tNyGR612MJNZw6je/PqyItKeUHOhztvFMfCQjRyg==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/core": "18.2.2",
+        "@angular-devkit/core": "18.2.3",
         "jsonc-parser": "3.3.1",
         "magic-string": "0.30.11",
         "ora": "5.4.1",
@@ -342,9 +342,9 @@
       }
     },
     "node_modules/@angular/animations": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.2.tgz",
-      "integrity": "sha512-jh/dGrY77HGm54HdTiQsxmvoRfFeJgHeWAK2+nWCPoc4b7OHcWxy/04cYffs0/27ThmABmppP7ERAyZ0f60uow==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.3.tgz",
+      "integrity": "sha512-rIATopHr83lYR0X05buHeHssq9CGw0I0YPIQcpUTGnlqIpJcQVCf7jCFn4KGZrE9V55hFY3MD4S28njlwCToQQ==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -352,17 +352,17 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/core": "18.2.2"
+        "@angular/core": "18.2.3"
       }
     },
     "node_modules/@angular/build": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.2.tgz",
-      "integrity": "sha512-okaDdTMXnDhvnnnih6rPQnexL6htfEAPr19bB1Ci9d31gEjVuKZCjlcw2sPZ6BUyilwC9nZlCI5vbH1Ljf6mzA==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.3.tgz",
+      "integrity": "sha512-USrD2Zvcb1te2dnqhH7JZ5XeJDg/t7fjUHR4f93vvMrnrncwCjLoHbHpz01HCHfcIVRgsYUdAmAi1iG7vpak7w==",
       "dev": true,
       "dependencies": {
         "@ampproject/remapping": "2.3.0",
-        "@angular-devkit/architect": "0.1802.2",
+        "@angular-devkit/architect": "0.1802.3",
         "@babel/core": "7.25.2",
         "@babel/helper-annotate-as-pure": "7.24.7",
         "@babel/helper-split-export-declaration": "7.24.7",
@@ -453,9 +453,9 @@
       }
     },
     "node_modules/@angular/cdk": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.2.tgz",
-      "integrity": "sha512-+u7ZcMA24WO03vDzlBJJWq+okZLFDeW9JrtHzrdiT09FDt4sdUp+7PddXaZcRHIXjJL+CaCLQ6slaqPNEufqgg==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.3.tgz",
+      "integrity": "sha512-lUcpYTxPZuntJ1FK7V2ugapCGMIhT6TUDjIGgXfS9AxGSSKgwr8HNs6Ze9pcjYC44UhP40sYAZuiaFwmE60A2A==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -469,17 +469,17 @@
       }
     },
     "node_modules/@angular/cli": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.2.tgz",
-      "integrity": "sha512-HVVaMxnbID0q+V3KE+JqzGbPHcBUFo1RKhBZ/jxY7USZNzgtyYbRc0IYqPWNdr99UT5QefTJrjVazJo1nqQZvQ==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.3.tgz",
+      "integrity": "sha512-40258vuliH6+p8QSByZe5EcIXSj0iR3PNF6yuusClR/ByToHOnmuPw7WC+AYr0ooozmqlim/EjQe4/037OUB3w==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/architect": "0.1802.2",
-        "@angular-devkit/core": "18.2.2",
-        "@angular-devkit/schematics": "18.2.2",
+        "@angular-devkit/architect": "0.1802.3",
+        "@angular-devkit/core": "18.2.3",
+        "@angular-devkit/schematics": "18.2.3",
         "@inquirer/prompts": "5.3.8",
         "@listr2/prompt-adapter-inquirer": "2.0.15",
-        "@schematics/angular": "18.2.2",
+        "@schematics/angular": "18.2.3",
         "@yarnpkg/lockfile": "1.1.0",
         "ini": "4.1.3",
         "jsonc-parser": "3.3.1",
@@ -502,9 +502,9 @@
       }
     },
     "node_modules/@angular/common": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.2.tgz",
-      "integrity": "sha512-AQe4xnnNNch/sXRnV82C8FmhijxPATKfPGojC2qbAG2o6VkWKgt5Lbj0O8WxvSIOS5Syedv+O2kLY/JMGWHNtw==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.3.tgz",
+      "integrity": "sha512-NFL4yXXImSCH7i1xnHykUjHa9vl9827fGiwSV2mnf7LjSUsyDzFD8/54dNuYN9OY8AUD+PnK0YdNro6cczVyIA==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -512,14 +512,14 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/core": "18.2.2",
+        "@angular/core": "18.2.3",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
     "node_modules/@angular/compiler": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.2.tgz",
-      "integrity": "sha512-gmVNCXZiv/CIk2eKRLnH19N9VsPuE2s3Oxm0MNi003zk1cLy7D4YEm4fSrjKXtPY8MMpRXiu5f63W94hLwWEVw==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.3.tgz",
+      "integrity": "sha512-Il3ljs0j1GaYoqYFdShjUP1ryck5xTOaA8uQuRgqwU0FOwEDfugSAM3Qf7nJx/sgxTM0Lm/Nrdv2u6i1gZWeuQ==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -527,7 +527,7 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/core": "18.2.2"
+        "@angular/core": "18.2.3"
       },
       "peerDependenciesMeta": {
         "@angular/core": {
@@ -536,9 +536,9 @@
       }
     },
     "node_modules/@angular/compiler-cli": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.2.tgz",
-      "integrity": "sha512-fF7lDrTA12YGqVjF4LyMi4hm58cv9G6CWmzSlvun0nMYCwrbRNnakZsj19dOfiIqqu4MwHaF4w3PTmUSxkMuiw==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.3.tgz",
+      "integrity": "sha512-BcmqYKnkcJTkGjuPztClZNQve7tdI290J5F3iZBx6c7/vaw8EU8EGZtpWYZpgiVn5S6jhcKyc1dLF9ggO9vftg==",
       "dev": true,
       "dependencies": {
         "@babel/core": "7.25.2",
@@ -559,14 +559,14 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/compiler": "18.2.2",
+        "@angular/compiler": "18.2.3",
         "typescript": ">=5.4 <5.6"
       }
     },
     "node_modules/@angular/core": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.2.tgz",
-      "integrity": "sha512-Rx6XajL0Ydj9hXUSPDvL2Q/kMzWtbiE3VxZFJnkE+fLQiWvr0GncB+NTb/nQ6QlPQ0ly60DvuI3KLcGDuFtGVA==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.3.tgz",
+      "integrity": "sha512-VGhMJxj7d0rYpqVfQrcGRB7EE/BCziotft/I/YPl6bOMPSAvMukG7DXQuJdYpNrr62ks78mlzHlZX/cdmB9Prw==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -579,9 +579,9 @@
       }
     },
     "node_modules/@angular/forms": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.2.tgz",
-      "integrity": "sha512-K8cv0w6o7+ocQfUrdSA3XaKrYfa1+2TlmtyxPHjEd2mCu2R+Yqo5RqJ3P8keFewJ1+bSLhz6xnn6mumwl0RnUQ==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.3.tgz",
+      "integrity": "sha512-+OBaAH0e8hue9eyLnbgpxg1/X9fps6bwXECfJ0nL5BDPU5itZ428YJbEnj5bTx0hEbqfTRiV4LgexdI+D9eOpw==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -589,22 +589,22 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/common": "18.2.2",
-        "@angular/core": "18.2.2",
-        "@angular/platform-browser": "18.2.2",
+        "@angular/common": "18.2.3",
+        "@angular/core": "18.2.3",
+        "@angular/platform-browser": "18.2.3",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
     "node_modules/@angular/material": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.2.2.tgz",
-      "integrity": "sha512-c+EQo1GEvM2w3qasgV/BGxB0bpJeSGs2WcMVTXCYVMcqEk8nwpALwfZiCAYl8JoKoiC5k993zz19xP2Eu14qkQ==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.2.3.tgz",
+      "integrity": "sha512-JFfvXaMHMhskncaxxus4sDvie9VYdMkfYgfinkLXpZlPFyn1IzjDw0c1BcrcsuD7UxQVZ/v5tucCgq1FQfGRpA==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
       "peerDependencies": {
         "@angular/animations": "^18.0.0 || ^19.0.0",
-        "@angular/cdk": "18.2.2",
+        "@angular/cdk": "18.2.3",
         "@angular/common": "^18.0.0 || ^19.0.0",
         "@angular/core": "^18.0.0 || ^19.0.0",
         "@angular/forms": "^18.0.0 || ^19.0.0",
@@ -613,9 +613,9 @@
       }
     },
     "node_modules/@angular/platform-browser": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.2.tgz",
-      "integrity": "sha512-Bfvl8elCFxyJ9vlwamr4X5sVMcp/tSwBal2coyl0WR+/PH2PAAtf+/WMYxIN90yZmPiJx6RZWUSJRlHOFiFp3A==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.3.tgz",
+      "integrity": "sha512-M2ob4zN7tAcL2mx7U6KnZNqNFPFl9MlPBE0FrjQjIzAjU0wSYPIJXmaPu9aMUp9niyo+He5iX98I+URi2Yc99g==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -623,9 +623,9 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/animations": "18.2.2",
-        "@angular/common": "18.2.2",
-        "@angular/core": "18.2.2"
+        "@angular/animations": "18.2.3",
+        "@angular/common": "18.2.3",
+        "@angular/core": "18.2.3"
       },
       "peerDependenciesMeta": {
         "@angular/animations": {
@@ -634,9 +634,9 @@
       }
     },
     "node_modules/@angular/platform-browser-dynamic": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.2.tgz",
-      "integrity": "sha512-UM/+1nY4iIj1v4lxAmV3XRHPAh/4qfNKScCLq8tJGot64rPCbtCl0Rl8rFFGqxAFvTErVDaJycUgWNZSfVl/hw==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.3.tgz",
+      "integrity": "sha512-nWi9ZxN4KpbJkttIckFO1PCoW0+gb/18xFO+JWyLBAtcbsudj/Mv0P/fdOaSfQdLkPhZfORr3ZcfiTkhmuGyEg==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -644,16 +644,16 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/common": "18.2.2",
-        "@angular/compiler": "18.2.2",
-        "@angular/core": "18.2.2",
-        "@angular/platform-browser": "18.2.2"
+        "@angular/common": "18.2.3",
+        "@angular/compiler": "18.2.3",
+        "@angular/core": "18.2.3",
+        "@angular/platform-browser": "18.2.3"
       }
     },
     "node_modules/@angular/router": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.2.tgz",
-      "integrity": "sha512-tBHwuNtZNjzYAoVdveTI1ke/ZnQjKhc7gqDk9HCH2JUpdQhGbTvCKwDM51ktJpPMPcZlA263lQyy7VIyvdtK0A==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.3.tgz",
+      "integrity": "sha512-fvD9eSDIiIbeYoUokoWkXzu7/ZaxlzKPUHFqX1JuKuH5ciQDeT/d7lp4mj31Bxammhohzi3+z12THJYsCkj/iQ==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -661,9 +661,9 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/common": "18.2.2",
-        "@angular/core": "18.2.2",
-        "@angular/platform-browser": "18.2.2",
+        "@angular/common": "18.2.3",
+        "@angular/core": "18.2.3",
+        "@angular/platform-browser": "18.2.3",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
@@ -3486,9 +3486,9 @@
       ]
     },
     "node_modules/@ngtools/webpack": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.2.tgz",
-      "integrity": "sha512-YhADmc+lVjLt3kze07A+yLry2yzcghdclu+7D3EDfa6fG2Pk33HK3MY2I0Z0BO+Ivoq7cV7yxm+naR+Od0Y5ng==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.3.tgz",
+      "integrity": "sha512-DDuBHcu23qckt43SexBJaPEIeMc/HKaFOidILZM9D4gU4C9VroMActdR218dvQ802QfL0S46t5Ykz8ENprIfjA==",
       "dev": true,
       "engines": {
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
@@ -3969,13 +3969,13 @@
       ]
     },
     "node_modules/@schematics/angular": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.2.tgz",
-      "integrity": "sha512-0uPA1kQ38RnbNrzMlveX/QAqQIDu2INl5IYd3EUbJZRfYSp1VVyOSyuIBJ+1iUl5Y5VUa2uylaVZXhFdKWprXw==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.3.tgz",
+      "integrity": "sha512-whSON70z9HYb4WboVXmPFE/RLKJJQLWNzNcUyi8OSDZkQbJnYgPp0///n738m26Y/XeJDv11q1gESy+Zl2AdUw==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/core": "18.2.2",
-        "@angular-devkit/schematics": "18.2.2",
+        "@angular-devkit/core": "18.2.3",
+        "@angular-devkit/schematics": "18.2.3",
         "jsonc-parser": "3.3.1"
       },
       "engines": {
@@ -9043,9 +9043,9 @@
       }
     },
     "node_modules/launch-editor": {
-      "version": "2.8.1",
-      "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz",
-      "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==",
+      "version": "2.9.1",
+      "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz",
+      "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==",
       "dev": true,
       "dependencies": {
         "picocolors": "^1.0.0",
@@ -14378,9 +14378,9 @@
       }
     },
     "node_modules/webpack-dev-middleware": {
-      "version": "7.3.0",
-      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.3.0.tgz",
-      "integrity": "sha512-xD2qnNew+F6KwOGZR7kWdbIou/ud7cVqLEXeK1q0nHcNsX/u7ul/fSdlOTX4ntSL5FNFy7ZJJXbf0piF591JYw==",
+      "version": "7.4.2",
+      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz",
+      "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==",
       "dev": true,
       "dependencies": {
         "colorette": "^2.0.10",
@@ -14838,26 +14838,26 @@
       }
     },
     "@angular-devkit/architect": {
-      "version": "0.1802.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.2.tgz",
-      "integrity": "sha512-LPRl9jhcf0NgshaL6RoUy1uL/cAyNt7oxctoZ9EHUu8eh5E9W/jZGhVowjOLpirwqYhmEzKJJIeS49Ssqs3RQg==",
+      "version": "0.1802.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.3.tgz",
+      "integrity": "sha512-WQ2AmkUKy1bqrDlNfozW8+VT2Tv/Fdmu4GIXps3ytZANyAKiIvTzmmql2cRCXXraa9FNMjLWNvz+qolDxWVdYQ==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "18.2.2",
+        "@angular-devkit/core": "18.2.3",
         "rxjs": "7.8.1"
       }
     },
     "@angular-devkit/build-angular": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.2.tgz",
-      "integrity": "sha512-7HEnTN2T1jnjuItXKcApOsoYGgfou4+POju3ZbwIQukDZ3B2COskvQkVTxqPNrQ0ZjT2mxZYoVlmGW9M+7N25g==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.3.tgz",
+      "integrity": "sha512-uUQba0SIskKORHcPayt7LpqPRKD//48EW92SgGHEArn2KklM+FSYBOA9OtrJeZ/UAcoJpdLDtvyY4+S7oFzomg==",
       "dev": true,
       "requires": {
         "@ampproject/remapping": "2.3.0",
-        "@angular-devkit/architect": "0.1802.2",
-        "@angular-devkit/build-webpack": "0.1802.2",
-        "@angular-devkit/core": "18.2.2",
-        "@angular/build": "18.2.2",
+        "@angular-devkit/architect": "0.1802.3",
+        "@angular-devkit/build-webpack": "0.1802.3",
+        "@angular-devkit/core": "18.2.3",
+        "@angular/build": "18.2.3",
         "@babel/core": "7.25.2",
         "@babel/generator": "7.25.0",
         "@babel/helper-annotate-as-pure": "7.24.7",
@@ -14868,7 +14868,7 @@
         "@babel/preset-env": "7.25.3",
         "@babel/runtime": "7.25.0",
         "@discoveryjs/json-ext": "0.6.1",
-        "@ngtools/webpack": "18.2.2",
+        "@ngtools/webpack": "18.2.3",
         "@vitejs/plugin-basic-ssl": "1.1.0",
         "ansi-colors": "4.1.3",
         "autoprefixer": "10.4.20",
@@ -14912,7 +14912,7 @@
         "vite": "5.4.0",
         "watchpack": "2.4.1",
         "webpack": "5.94.0",
-        "webpack-dev-middleware": "7.3.0",
+        "webpack-dev-middleware": "7.4.2",
         "webpack-dev-server": "5.0.4",
         "webpack-merge": "6.0.1",
         "webpack-subresource-integrity": "5.1.0"
@@ -14957,19 +14957,19 @@
       }
     },
     "@angular-devkit/build-webpack": {
-      "version": "0.1802.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.2.tgz",
-      "integrity": "sha512-Pj+YmKh0nJOKl6QAsqYh3SqfuVJrFqjyp5WrG9BgfsMD9GCMD+5teMHNYJlp+vG/C8e7VdZp4rqOon8K9Xn4Mw==",
+      "version": "0.1802.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.3.tgz",
+      "integrity": "sha512-/Nixv9uAg6v/OPoZa0PB0zi+iezzBkgLrnrJnestny5B536l9WRtsw97RjeQDu+x2BClQsxNe8NL2A7EvjVD6w==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.1802.2",
+        "@angular-devkit/architect": "0.1802.3",
         "rxjs": "7.8.1"
       }
     },
     "@angular-devkit/core": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.2.tgz",
-      "integrity": "sha512-Zz0tGptI/QQnUBDdp+1G5wGwQWMjpfe2oO+UohkrDVgFS71yVj4VDnOy51kMTxBvzw+36evTgthPpmzqPIfxBw==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.3.tgz",
+      "integrity": "sha512-vbFs+ofNK9OWeMIcFarFjegXVklhtSdLTEFKZ9trDVr8alTJdjI9AiYa6OOUTDAyq0hqYxV26xlCisWAPe7s5w==",
       "dev": true,
       "requires": {
         "ajv": "8.17.1",
@@ -14998,12 +14998,12 @@
       }
     },
     "@angular-devkit/schematics": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.2.tgz",
-      "integrity": "sha512-PU6+3nX+gQ3gofR7BGwXuvNUNeeV2raURaZjlPfGpBqjyTBxukMV71QsTTWptAZT4WibCWkTFp6X1gvsOGbjMg==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.3.tgz",
+      "integrity": "sha512-N3tRAzBW2yWQhebvc1Ha18XTMSXOQTfr8HNjx7Fasx0Fg1tNyGR612MJNZw6je/PqyItKeUHOhztvFMfCQjRyg==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "18.2.2",
+        "@angular-devkit/core": "18.2.3",
         "jsonc-parser": "3.3.1",
         "magic-string": "0.30.11",
         "ora": "5.4.1",
@@ -15011,21 +15011,21 @@
       }
     },
     "@angular/animations": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.2.tgz",
-      "integrity": "sha512-jh/dGrY77HGm54HdTiQsxmvoRfFeJgHeWAK2+nWCPoc4b7OHcWxy/04cYffs0/27ThmABmppP7ERAyZ0f60uow==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.3.tgz",
+      "integrity": "sha512-rIATopHr83lYR0X05buHeHssq9CGw0I0YPIQcpUTGnlqIpJcQVCf7jCFn4KGZrE9V55hFY3MD4S28njlwCToQQ==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/build": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.2.tgz",
-      "integrity": "sha512-okaDdTMXnDhvnnnih6rPQnexL6htfEAPr19bB1Ci9d31gEjVuKZCjlcw2sPZ6BUyilwC9nZlCI5vbH1Ljf6mzA==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.3.tgz",
+      "integrity": "sha512-USrD2Zvcb1te2dnqhH7JZ5XeJDg/t7fjUHR4f93vvMrnrncwCjLoHbHpz01HCHfcIVRgsYUdAmAi1iG7vpak7w==",
       "dev": true,
       "requires": {
         "@ampproject/remapping": "2.3.0",
-        "@angular-devkit/architect": "0.1802.2",
+        "@angular-devkit/architect": "0.1802.3",
         "@babel/core": "7.25.2",
         "@babel/helper-annotate-as-pure": "7.24.7",
         "@babel/helper-split-export-declaration": "7.24.7",
@@ -15071,26 +15071,26 @@
       }
     },
     "@angular/cdk": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.2.tgz",
-      "integrity": "sha512-+u7ZcMA24WO03vDzlBJJWq+okZLFDeW9JrtHzrdiT09FDt4sdUp+7PddXaZcRHIXjJL+CaCLQ6slaqPNEufqgg==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.3.tgz",
+      "integrity": "sha512-lUcpYTxPZuntJ1FK7V2ugapCGMIhT6TUDjIGgXfS9AxGSSKgwr8HNs6Ze9pcjYC44UhP40sYAZuiaFwmE60A2A==",
       "requires": {
         "parse5": "^7.1.2",
         "tslib": "^2.3.0"
       }
     },
     "@angular/cli": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.2.tgz",
-      "integrity": "sha512-HVVaMxnbID0q+V3KE+JqzGbPHcBUFo1RKhBZ/jxY7USZNzgtyYbRc0IYqPWNdr99UT5QefTJrjVazJo1nqQZvQ==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.3.tgz",
+      "integrity": "sha512-40258vuliH6+p8QSByZe5EcIXSj0iR3PNF6yuusClR/ByToHOnmuPw7WC+AYr0ooozmqlim/EjQe4/037OUB3w==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.1802.2",
-        "@angular-devkit/core": "18.2.2",
-        "@angular-devkit/schematics": "18.2.2",
+        "@angular-devkit/architect": "0.1802.3",
+        "@angular-devkit/core": "18.2.3",
+        "@angular-devkit/schematics": "18.2.3",
         "@inquirer/prompts": "5.3.8",
         "@listr2/prompt-adapter-inquirer": "2.0.15",
-        "@schematics/angular": "18.2.2",
+        "@schematics/angular": "18.2.3",
         "@yarnpkg/lockfile": "1.1.0",
         "ini": "4.1.3",
         "jsonc-parser": "3.3.1",
@@ -15105,25 +15105,25 @@
       }
     },
     "@angular/common": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.2.tgz",
-      "integrity": "sha512-AQe4xnnNNch/sXRnV82C8FmhijxPATKfPGojC2qbAG2o6VkWKgt5Lbj0O8WxvSIOS5Syedv+O2kLY/JMGWHNtw==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.3.tgz",
+      "integrity": "sha512-NFL4yXXImSCH7i1xnHykUjHa9vl9827fGiwSV2mnf7LjSUsyDzFD8/54dNuYN9OY8AUD+PnK0YdNro6cczVyIA==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/compiler": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.2.tgz",
-      "integrity": "sha512-gmVNCXZiv/CIk2eKRLnH19N9VsPuE2s3Oxm0MNi003zk1cLy7D4YEm4fSrjKXtPY8MMpRXiu5f63W94hLwWEVw==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.3.tgz",
+      "integrity": "sha512-Il3ljs0j1GaYoqYFdShjUP1ryck5xTOaA8uQuRgqwU0FOwEDfugSAM3Qf7nJx/sgxTM0Lm/Nrdv2u6i1gZWeuQ==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/compiler-cli": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.2.tgz",
-      "integrity": "sha512-fF7lDrTA12YGqVjF4LyMi4hm58cv9G6CWmzSlvun0nMYCwrbRNnakZsj19dOfiIqqu4MwHaF4w3PTmUSxkMuiw==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.3.tgz",
+      "integrity": "sha512-BcmqYKnkcJTkGjuPztClZNQve7tdI290J5F3iZBx6c7/vaw8EU8EGZtpWYZpgiVn5S6jhcKyc1dLF9ggO9vftg==",
       "dev": true,
       "requires": {
         "@babel/core": "7.25.2",
@@ -15137,49 +15137,49 @@
       }
     },
     "@angular/core": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.2.tgz",
-      "integrity": "sha512-Rx6XajL0Ydj9hXUSPDvL2Q/kMzWtbiE3VxZFJnkE+fLQiWvr0GncB+NTb/nQ6QlPQ0ly60DvuI3KLcGDuFtGVA==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.3.tgz",
+      "integrity": "sha512-VGhMJxj7d0rYpqVfQrcGRB7EE/BCziotft/I/YPl6bOMPSAvMukG7DXQuJdYpNrr62ks78mlzHlZX/cdmB9Prw==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/forms": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.2.tgz",
-      "integrity": "sha512-K8cv0w6o7+ocQfUrdSA3XaKrYfa1+2TlmtyxPHjEd2mCu2R+Yqo5RqJ3P8keFewJ1+bSLhz6xnn6mumwl0RnUQ==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.3.tgz",
+      "integrity": "sha512-+OBaAH0e8hue9eyLnbgpxg1/X9fps6bwXECfJ0nL5BDPU5itZ428YJbEnj5bTx0hEbqfTRiV4LgexdI+D9eOpw==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/material": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.2.2.tgz",
-      "integrity": "sha512-c+EQo1GEvM2w3qasgV/BGxB0bpJeSGs2WcMVTXCYVMcqEk8nwpALwfZiCAYl8JoKoiC5k993zz19xP2Eu14qkQ==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.2.3.tgz",
+      "integrity": "sha512-JFfvXaMHMhskncaxxus4sDvie9VYdMkfYgfinkLXpZlPFyn1IzjDw0c1BcrcsuD7UxQVZ/v5tucCgq1FQfGRpA==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/platform-browser": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.2.tgz",
-      "integrity": "sha512-Bfvl8elCFxyJ9vlwamr4X5sVMcp/tSwBal2coyl0WR+/PH2PAAtf+/WMYxIN90yZmPiJx6RZWUSJRlHOFiFp3A==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.3.tgz",
+      "integrity": "sha512-M2ob4zN7tAcL2mx7U6KnZNqNFPFl9MlPBE0FrjQjIzAjU0wSYPIJXmaPu9aMUp9niyo+He5iX98I+URi2Yc99g==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/platform-browser-dynamic": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.2.tgz",
-      "integrity": "sha512-UM/+1nY4iIj1v4lxAmV3XRHPAh/4qfNKScCLq8tJGot64rPCbtCl0Rl8rFFGqxAFvTErVDaJycUgWNZSfVl/hw==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.3.tgz",
+      "integrity": "sha512-nWi9ZxN4KpbJkttIckFO1PCoW0+gb/18xFO+JWyLBAtcbsudj/Mv0P/fdOaSfQdLkPhZfORr3ZcfiTkhmuGyEg==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/router": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.2.tgz",
-      "integrity": "sha512-tBHwuNtZNjzYAoVdveTI1ke/ZnQjKhc7gqDk9HCH2JUpdQhGbTvCKwDM51ktJpPMPcZlA263lQyy7VIyvdtK0A==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.3.tgz",
+      "integrity": "sha512-fvD9eSDIiIbeYoUokoWkXzu7/ZaxlzKPUHFqX1JuKuH5ciQDeT/d7lp4mj31Bxammhohzi3+z12THJYsCkj/iQ==",
       "requires": {
         "tslib": "^2.3.0"
       }
@@ -17037,9 +17037,9 @@
       "optional": true
     },
     "@ngtools/webpack": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.2.tgz",
-      "integrity": "sha512-YhADmc+lVjLt3kze07A+yLry2yzcghdclu+7D3EDfa6fG2Pk33HK3MY2I0Z0BO+Ivoq7cV7yxm+naR+Od0Y5ng==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.3.tgz",
+      "integrity": "sha512-DDuBHcu23qckt43SexBJaPEIeMc/HKaFOidILZM9D4gU4C9VroMActdR218dvQ802QfL0S46t5Ykz8ENprIfjA==",
       "dev": true,
       "requires": {}
     },
@@ -17349,13 +17349,13 @@
       "optional": true
     },
     "@schematics/angular": {
-      "version": "18.2.2",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.2.tgz",
-      "integrity": "sha512-0uPA1kQ38RnbNrzMlveX/QAqQIDu2INl5IYd3EUbJZRfYSp1VVyOSyuIBJ+1iUl5Y5VUa2uylaVZXhFdKWprXw==",
+      "version": "18.2.3",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.3.tgz",
+      "integrity": "sha512-whSON70z9HYb4WboVXmPFE/RLKJJQLWNzNcUyi8OSDZkQbJnYgPp0///n738m26Y/XeJDv11q1gESy+Zl2AdUw==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "18.2.2",
-        "@angular-devkit/schematics": "18.2.2",
+        "@angular-devkit/core": "18.2.3",
+        "@angular-devkit/schematics": "18.2.3",
         "jsonc-parser": "3.3.1"
       }
     },
@@ -21236,9 +21236,9 @@
       "optional": true
     },
     "launch-editor": {
-      "version": "2.8.1",
-      "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz",
-      "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==",
+      "version": "2.9.1",
+      "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz",
+      "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==",
       "dev": true,
       "requires": {
         "picocolors": "^1.0.0",
@@ -24918,9 +24918,9 @@
       }
     },
     "webpack-dev-middleware": {
-      "version": "7.3.0",
-      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.3.0.tgz",
-      "integrity": "sha512-xD2qnNew+F6KwOGZR7kWdbIou/ud7cVqLEXeK1q0nHcNsX/u7ul/fSdlOTX4ntSL5FNFy7ZJJXbf0piF591JYw==",
+      "version": "7.4.2",
+      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz",
+      "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==",
       "dev": true,
       "requires": {
         "colorette": "^2.0.10",
diff --git a/webui/package.json b/webui/package.json
index c67a97293..fe1ede748 100644
--- a/webui/package.json
+++ b/webui/package.json
@@ -10,16 +10,16 @@
   },
   "private": true,
   "dependencies": {
-    "@angular/animations": "^18.2.2",
-    "@angular/cdk": "^18.2.2",
-    "@angular/common": "^18.2.2",
-    "@angular/compiler": "^18.2.2",
-    "@angular/core": "^18.2.2",
-    "@angular/forms": "^18.2.2",
-    "@angular/material": "^18.2.2",
-    "@angular/platform-browser": "^18.2.2",
-    "@angular/platform-browser-dynamic": "^18.2.2",
-    "@angular/router": "^18.2.2",
+    "@angular/animations": "^18.2.3",
+    "@angular/cdk": "^18.2.3",
+    "@angular/common": "^18.2.3",
+    "@angular/compiler": "^18.2.3",
+    "@angular/core": "^18.2.3",
+    "@angular/forms": "^18.2.3",
+    "@angular/material": "^18.2.3",
+    "@angular/platform-browser": "^18.2.3",
+    "@angular/platform-browser-dynamic": "^18.2.3",
+    "@angular/router": "^18.2.3",
     "bootstrap": "^5.3.3",
     "marked": "^12.0.2",
     "ngx-markdown": "^18",
@@ -29,9 +29,9 @@
     "zone.js": "~0.14.10"
   },
   "devDependencies": {
-    "@angular-devkit/build-angular": "^18.2.2",
-    "@angular/cli": "^18.2.2",
-    "@angular/compiler-cli": "^18.2.2",
+    "@angular-devkit/build-angular": "^18.2.3",
+    "@angular/cli": "^18.2.3",
+    "@angular/compiler-cli": "^18.2.3",
     "@types/jasmine": "~5.1.4",
     "@types/node": "^22.5.2",
     "jasmine-core": "~5.2.0",