From 682509a226e5e7c16742f359b0f8ddc95e1b15e1 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 10:21:29 -0700
Subject: [PATCH 01/27] ng update angular

---
 package-lock.json                             | 8837 ++++++++++-------
 package.json                                  |   34 +-
 projects/nshmp-apps/src/app/app.component.ts  |    1 -
 .../src/app/dashboard/app.component.ts        |    1 -
 .../components/about/about.component.ts       |    1 -
 .../app/designmaps/dashboard/app.component.ts |    1 -
 .../src/app/designmaps/rtgm/app.component.ts  |    1 -
 .../rtgm/components/about/about.component.ts  |    1 -
 .../building-code-control.component.ts        |    1 -
 .../components/content/content.component.ts   |    1 -
 .../control-panel-hazard.component.ts         |    1 -
 .../control-panel-input.component.ts          |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../rtgm/components/data/data.component.ts    |    1 -
 .../parameter-summary.component.ts            |    1 -
 .../plot-settings-panel.component.ts          |    1 -
 .../rtgm/components/plots/plots.component.ts  |    1 -
 .../risk-targets/risk-targets.component.ts    |    1 -
 .../rtgm-summary/rtgm-summary.component.ts    |    1 -
 .../src/app/dev/dashboard/app.component.ts    |    1 -
 .../app/dev/gmm/dashboard/app.component.ts    |    1 -
 .../gmm/hanging-wall-effects/app.component.ts |    1 -
 .../components/about/about.component.ts       |    1 -
 .../components/content/content.component.ts   |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../fault-control/fault-control.component.ts  |    1 -
 .../parameter-summary.component.ts            |    1 -
 .../plot-settings-panel.component.ts          |    1 -
 .../components/plots/plots.component.ts       |    1 -
 .../app/dev/hazard/dashboard/app.component.ts |    1 -
 .../hazard/dynamic-compare/app.component.ts   |    1 -
 .../components/about/about.component.ts       |    1 -
 .../components/content/content.component.ts   |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../hazard-data/hazard-data.component.ts      |    1 -
 .../parameter-summary.component.ts            |    1 -
 .../plot-settings-panel.component.ts          |    1 -
 .../components/plots/plots.component.ts       |    1 -
 .../spectra-data/spectra-data.component.ts    |    1 -
 .../table-data-panel.component.ts             |    1 -
 .../app/dev/math/dashboard/app.component.ts   |    1 -
 .../math/exceedance-explorer/app.component.ts |    1 -
 .../components/about/about.component.ts       |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../plot-settings-panel.component.ts          |    1 -
 .../components/plot/plot.component.ts         |    1 -
 .../src/app/error-pages/404/404.component.ts  |    1 -
 .../src/app/error-pages/410/410.component.ts  |    1 -
 .../src/app/error-pages/500/500.component.ts  |    1 -
 .../src/app/gmm/dashboard/app.component.ts    |    1 -
 .../src/app/gmm/distance/app.component.ts     |    1 -
 .../components/about/about.component.ts       |    1 -
 .../components/content/content.component.ts   |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../parameter-summary.component.ts            |    1 -
 .../plot-settings-panel.component.ts          |    1 -
 .../components/plots/plots.component.ts       |    1 -
 .../src/app/gmm/magnitude/app.component.ts    |    1 -
 .../components/about/about.component.ts       |    1 -
 .../components/content/content.component.ts   |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../event-parameters.component.ts             |    1 -
 .../parameter-summary.component.ts            |    1 -
 .../path-parameters.component.ts              |    1 -
 .../plot-settings-panel.component.ts          |    1 -
 .../components/plots/plots.component.ts       |    1 -
 .../site-parameters.component.ts              |    1 -
 .../source-parameters.component.ts            |    1 -
 .../src/app/gmm/spectra/app.component.ts      |    1 -
 .../components/about/about.component.ts       |    1 -
 .../components/content/content.component.ts   |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../event-parameters.component.ts             |    1 -
 .../parameter-summary.component.ts            |    1 -
 .../path-parameters.component.ts              |    1 -
 .../plot-settings-panel.component.ts          |    1 -
 .../components/plots/plots.component.ts       |    1 -
 .../site-parameters.component.ts              |    1 -
 .../source-parameters.component.ts            |    1 -
 .../src/app/hazard/dashboard/app.component.ts |    1 -
 .../src/app/hazard/disagg/app.component.ts    |    1 -
 .../components/about/about.component.ts       |    1 -
 .../components/content/content.component.ts   |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../disagg-contributors.component.ts          |    1 -
 .../disagg-data/disagg-data.component.ts      |    1 -
 .../disagg-summary.component.ts               |    1 -
 .../geo-disagg/geo-disagg.component.ts        |    1 -
 .../parameter-summary.component.ts            |    1 -
 .../components/plots/plots.component.ts       |    1 -
 .../src/app/hazard/dynamic/app.component.ts   |    1 -
 .../components/about/about.component.ts       |    1 -
 .../components/content/content.component.ts   |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../parameter-summary.component.ts            |    1 -
 .../plot-settings-panel.component.ts          |    1 -
 .../components/plots/plots.component.ts       |    1 -
 .../src/app/hazard/static/app.component.ts    |    1 -
 .../components/about/about.component.ts       |    1 -
 .../components/content/content.component.ts   |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../curve-data/curve-data.component.ts        |    1 -
 .../parameter-summary.component.ts            |    1 -
 .../plot-settings-panel.component.ts          |    1 -
 .../components/plots/plots.component.ts       |    1 -
 .../spectrum-data/spectrum-data.component.ts  |    1 -
 .../aws/check-haz-jobs/app.component.ts       |    1 -
 .../components/about/about.component.ts       |    1 -
 .../components/content/content.component.ts   |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../snack-bar/snack-bar.component.ts          |    1 -
 .../internal/aws/dashboard/app.component.ts   |    1 -
 .../aws/haz-job-history/app.component.ts      |    1 -
 .../components/about/about.component.ts       |    1 -
 .../components/content/content.component.ts   |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../aws/submit-haz-jobs/app.component.ts      |    1 -
 .../components/about/about.component.ts       |    1 -
 .../components/config/config.component.ts     |    1 -
 .../components/content/content.component.ts   |    1 -
 .../components/form/form.component.ts         |    1 -
 .../components/history/history.component.ts   |    1 -
 .../job-submitted/job-submitted.component.ts  |    1 -
 .../aws/terminate-haz-jobs/app.component.ts   |    1 -
 .../components/about/about.component.ts       |    1 -
 .../components/content/content.component.ts   |    1 -
 .../app/internal/dashboard/app.component.ts   |    1 -
 .../src/app/ncm/dashboard/app.component.ts    |    1 -
 .../ncm/geophysical-profiles/app.component.ts |    1 -
 .../components/about/about.component.ts       |    1 -
 .../components/content/content.component.ts   |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../components/data/data.component.ts         |    1 -
 .../parameter-summary.component.ts            |    1 -
 .../plot-settings-panel.component.ts          |    1 -
 .../components/plots/plots.component.ts       |    1 -
 .../src/app/services/app.component.ts         |    1 -
 .../components/about/about.component.ts       |    1 -
 .../components/content/content.component.ts   |    1 -
 .../src/app/source/dashboard/app.component.ts |    1 -
 .../src/app/source/mfd/app.component.ts       |    1 -
 .../mfd/components/about/about.component.ts   |    1 -
 .../components/content/content.component.ts   |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../mfd/components/data/data.component.ts     |    1 -
 .../logic-tree/logic-tree.component.ts        |    1 -
 .../parameter-summary.component.ts            |    1 -
 .../plot-settings-panel.component.ts          |    1 -
 .../mfd/components/plots/plots.component.ts   |    1 -
 .../app/source/model-maps/app.component.ts    |    1 -
 .../components/about/about.component.ts       |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../info-popup/info-popup.component.ts        |    1 -
 .../components/map/map.component.ts           |    1 -
 .../plot-settings-panel.component.ts          |    1 -
 .../src/app/source/rates/app.component.ts     |    1 -
 .../rates/components/about/about.component.ts |    1 -
 .../components/content/content.component.ts   |    1 -
 .../control-panel/control-panel.component.ts  |    1 -
 .../parameter-summary.component.ts            |    1 -
 .../plot-settings-panel.component.ts          |    1 -
 .../rates/components/plots/plots.component.ts |    1 -
 162 files changed, 5125 insertions(+), 3906 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 33425496f..fcf3918d4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,16 +8,16 @@
       "name": "nshmp-apps",
       "version": "0.9.0",
       "dependencies": {
-        "@angular/animations": "18.2.11",
+        "@angular/animations": "19.0.4",
         "@angular/cdk": "^18.2.12",
-        "@angular/common": "18.2.11",
-        "@angular/compiler": "18.2.11",
-        "@angular/core": "18.2.11",
-        "@angular/forms": "18.2.11",
+        "@angular/common": "19.0.4",
+        "@angular/compiler": "19.0.4",
+        "@angular/core": "19.0.4",
+        "@angular/forms": "19.0.4",
         "@angular/material": "^18.2.12",
-        "@angular/platform-browser": "18.2.11",
-        "@angular/platform-browser-dynamic": "18.2.11",
-        "@angular/router": "18.2.11",
+        "@angular/platform-browser": "19.0.4",
+        "@angular/platform-browser-dynamic": "19.0.4",
+        "@angular/router": "19.0.4",
         "@asymmetrik/ngx-leaflet": "^18.0.1",
         "@compodoc/compodoc": "^1.1.26",
         "@ghsc/disagg-d3": "^0.13.0",
@@ -36,21 +36,21 @@
         "tslib": "^2.8.1",
         "uswds": "^2.14.0",
         "yaml": "^2.6.0",
-        "zone.js": "^0.14.10"
+        "zone.js": "^0.15.0"
       },
       "devDependencies": {
-        "@angular-devkit/architect": "0.1802.11",
-        "@angular-devkit/build-angular": "18.2.11",
-        "@angular-devkit/core": "18.2.11",
-        "@angular-devkit/schematics": "18.2.11",
+        "@angular-devkit/architect": "0.1900.5",
+        "@angular-devkit/build-angular": "19.0.5",
+        "@angular-devkit/core": "19.0.5",
+        "@angular-devkit/schematics": "19.0.5",
         "@angular-eslint/builder": "18.1.0",
         "@angular-eslint/eslint-plugin": "18.1.0",
         "@angular-eslint/eslint-plugin-template": "18.1.0",
         "@angular-eslint/schematics": "18.1.0",
         "@angular-eslint/template-parser": "18.1.0",
-        "@angular/cli": "18.2.11",
-        "@angular/compiler-cli": "18.2.11",
-        "@angular/language-service": "18.2.11",
+        "@angular/cli": "19.0.5",
+        "@angular/compiler-cli": "19.0.4",
+        "@angular/language-service": "19.0.4",
         "@cypress/schematic": "^2.5.2",
         "@cypress/webpack-preprocessor": "^6.0.2",
         "@nx/cypress": "^19.2.2",
@@ -85,7 +85,7 @@
         "jest-fail-on-console": "^3.3.1",
         "jest-junit": "^16.0.0",
         "jest-preset-angular": "^14.2.4",
-        "ng-packagr": "^18.2.1",
+        "ng-packagr": "^19.0.1",
         "prettier": "^3.3.3",
         "pretty-quick": "^4.0.0",
         "ts-jest": "^29.2.5",
@@ -117,13 +117,13 @@
       }
     },
     "node_modules/@angular-devkit/architect": {
-      "version": "0.1802.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.11.tgz",
-      "integrity": "sha512-p+XIc/j51aI83ExNdeZwvkm1F4wkuKMGUUoj0MVUUi5E6NoiMlXYm6uU8+HbRvPBzGy5+3KOiGp3Fks0UmDSAA==",
+      "version": "0.1900.5",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1900.5.tgz",
+      "integrity": "sha512-JxgoIxwGw3QNj6e70d04g5yJ8ZK0g/my22UK0TlRJRbYcfFQr8pL7u3wq77iNlgeHMDwBskZEf4TEZOVSbm7mw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/core": "18.2.11",
+        "@angular-devkit/core": "19.0.5",
         "rxjs": "7.8.1"
       },
       "engines": {
@@ -133,40 +133,38 @@
       }
     },
     "node_modules/@angular-devkit/build-angular": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.11.tgz",
-      "integrity": "sha512-09Ln3NAdlMw/wMLgnwYU5VgWV5TPBEHolZUIvE9D8b6SFWBCowk3B3RWeAMgg7Peuf9SKwqQHBz2b1C7RTP/8g==",
+      "version": "19.0.5",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.0.5.tgz",
+      "integrity": "sha512-Z8GcTBsDGKPIKWtLoRVuss/oGytRaVXZSsXzfCapWjggwuN0B2b26Ms0kfU0kIWRfEzz38wKwug/1l86Q9HqNA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "2.3.0",
-        "@angular-devkit/architect": "0.1802.11",
-        "@angular-devkit/build-webpack": "0.1802.11",
-        "@angular-devkit/core": "18.2.11",
-        "@angular/build": "18.2.11",
-        "@babel/core": "7.25.2",
-        "@babel/generator": "7.25.0",
-        "@babel/helper-annotate-as-pure": "7.24.7",
+        "@angular-devkit/architect": "0.1900.5",
+        "@angular-devkit/build-webpack": "0.1900.5",
+        "@angular-devkit/core": "19.0.5",
+        "@angular/build": "19.0.5",
+        "@babel/core": "7.26.0",
+        "@babel/generator": "7.26.2",
+        "@babel/helper-annotate-as-pure": "7.25.9",
         "@babel/helper-split-export-declaration": "7.24.7",
-        "@babel/plugin-transform-async-generator-functions": "7.25.0",
-        "@babel/plugin-transform-async-to-generator": "7.24.7",
-        "@babel/plugin-transform-runtime": "7.24.7",
-        "@babel/preset-env": "7.25.3",
-        "@babel/runtime": "7.25.0",
-        "@discoveryjs/json-ext": "0.6.1",
-        "@ngtools/webpack": "18.2.11",
+        "@babel/plugin-transform-async-generator-functions": "7.25.9",
+        "@babel/plugin-transform-async-to-generator": "7.25.9",
+        "@babel/plugin-transform-runtime": "7.25.9",
+        "@babel/preset-env": "7.26.0",
+        "@babel/runtime": "7.26.0",
+        "@discoveryjs/json-ext": "0.6.3",
+        "@ngtools/webpack": "19.0.5",
         "@vitejs/plugin-basic-ssl": "1.1.0",
         "ansi-colors": "4.1.3",
         "autoprefixer": "10.4.20",
-        "babel-loader": "9.1.3",
+        "babel-loader": "9.2.1",
         "browserslist": "^4.21.5",
         "copy-webpack-plugin": "12.0.2",
-        "critters": "0.0.24",
         "css-loader": "7.1.2",
-        "esbuild-wasm": "0.23.0",
+        "esbuild-wasm": "0.24.0",
         "fast-glob": "3.3.2",
         "http-proxy-middleware": "3.0.3",
-        "https-proxy-agent": "7.0.5",
         "istanbul-lib-instrument": "6.0.3",
         "jsonc-parser": "3.3.1",
         "karma-source-map-support": "1.4.0",
@@ -174,31 +172,26 @@
         "less-loader": "12.2.0",
         "license-webpack-plugin": "4.0.2",
         "loader-utils": "3.3.1",
-        "magic-string": "0.30.11",
-        "mini-css-extract-plugin": "2.9.0",
-        "mrmime": "2.0.0",
+        "mini-css-extract-plugin": "2.9.2",
         "open": "10.1.0",
         "ora": "5.4.1",
-        "parse5-html-rewriting-stream": "7.0.0",
         "picomatch": "4.0.2",
-        "piscina": "4.6.1",
-        "postcss": "8.4.41",
+        "piscina": "4.7.0",
+        "postcss": "8.4.49",
         "postcss-loader": "8.1.1",
         "resolve-url-loader": "5.0.0",
         "rxjs": "7.8.1",
-        "sass": "1.77.6",
-        "sass-loader": "16.0.0",
+        "sass": "1.80.7",
+        "sass-loader": "16.0.3",
         "semver": "7.6.3",
         "source-map-loader": "5.0.0",
         "source-map-support": "0.5.21",
-        "terser": "5.31.6",
+        "terser": "5.36.0",
         "tree-kill": "1.2.2",
-        "tslib": "2.6.3",
-        "vite": "5.4.6",
-        "watchpack": "2.4.1",
-        "webpack": "5.94.0",
+        "tslib": "2.8.1",
+        "webpack": "5.96.1",
         "webpack-dev-middleware": "7.4.2",
-        "webpack-dev-server": "5.0.4",
+        "webpack-dev-server": "5.1.0",
         "webpack-merge": "6.0.1",
         "webpack-subresource-integrity": "5.1.0"
       },
@@ -208,22 +201,23 @@
         "yarn": ">= 1.13.0"
       },
       "optionalDependencies": {
-        "esbuild": "0.23.0"
+        "esbuild": "0.24.0"
       },
       "peerDependencies": {
-        "@angular/compiler-cli": "^18.0.0",
-        "@angular/localize": "^18.0.0",
-        "@angular/platform-server": "^18.0.0",
-        "@angular/service-worker": "^18.0.0",
-        "@web/test-runner": "^0.18.0",
+        "@angular/compiler-cli": "^19.0.0",
+        "@angular/localize": "^19.0.0",
+        "@angular/platform-server": "^19.0.0",
+        "@angular/service-worker": "^19.0.0",
+        "@angular/ssr": "^19.0.5",
+        "@web/test-runner": "^0.19.0",
         "browser-sync": "^3.0.2",
         "jest": "^29.5.0",
         "jest-environment-jsdom": "^29.5.0",
         "karma": "^6.3.0",
-        "ng-packagr": "^18.0.0",
+        "ng-packagr": "^19.0.0",
         "protractor": "^7.0.0",
         "tailwindcss": "^2.0.0 || ^3.0.0",
-        "typescript": ">=5.4 <5.6"
+        "typescript": ">=5.5 <5.7"
       },
       "peerDependenciesMeta": {
         "@angular/localize": {
@@ -235,6 +229,9 @@
         "@angular/service-worker": {
           "optional": true
         },
+        "@angular/ssr": {
+          "optional": true
+        },
         "@web/test-runner": {
           "optional": true
         },
@@ -261,336 +258,463 @@
         }
       }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
-      "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/aix-ppc64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz",
+      "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==",
+      "cpu": [
+        "ppc64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.0",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-module-transforms": "^7.25.2",
-        "@babel/helpers": "^7.25.0",
-        "@babel/parser": "^7.25.0",
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.2",
-        "@babel/types": "^7.25.2",
-        "convert-source-map": "^2.0.0",
-        "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.2",
-        "json5": "^2.2.3",
-        "semver": "^6.3.1"
-      },
+      "optional": true,
+      "os": [
+        "aix"
+      ],
       "engines": {
-        "node": ">=6.9.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/babel"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-arm": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz",
+      "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==",
+      "cpu": [
+        "arm"
+      ],
       "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/@babel/preset-env": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz",
-      "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz",
+      "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@babel/compat-data": "^7.25.2",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-validator-option": "^7.24.8",
-        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3",
-        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0",
-        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0",
-        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
-        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0",
-        "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/plugin-syntax-class-properties": "^7.12.13",
-        "@babel/plugin-syntax-class-static-block": "^7.14.5",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
-        "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
-        "@babel/plugin-syntax-import-assertions": "^7.24.7",
-        "@babel/plugin-syntax-import-attributes": "^7.24.7",
-        "@babel/plugin-syntax-import-meta": "^7.10.4",
-        "@babel/plugin-syntax-json-strings": "^7.8.3",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
-        "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
-        "@babel/plugin-syntax-top-level-await": "^7.14.5",
-        "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
-        "@babel/plugin-transform-arrow-functions": "^7.24.7",
-        "@babel/plugin-transform-async-generator-functions": "^7.25.0",
-        "@babel/plugin-transform-async-to-generator": "^7.24.7",
-        "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
-        "@babel/plugin-transform-block-scoping": "^7.25.0",
-        "@babel/plugin-transform-class-properties": "^7.24.7",
-        "@babel/plugin-transform-class-static-block": "^7.24.7",
-        "@babel/plugin-transform-classes": "^7.25.0",
-        "@babel/plugin-transform-computed-properties": "^7.24.7",
-        "@babel/plugin-transform-destructuring": "^7.24.8",
-        "@babel/plugin-transform-dotall-regex": "^7.24.7",
-        "@babel/plugin-transform-duplicate-keys": "^7.24.7",
-        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0",
-        "@babel/plugin-transform-dynamic-import": "^7.24.7",
-        "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
-        "@babel/plugin-transform-export-namespace-from": "^7.24.7",
-        "@babel/plugin-transform-for-of": "^7.24.7",
-        "@babel/plugin-transform-function-name": "^7.25.1",
-        "@babel/plugin-transform-json-strings": "^7.24.7",
-        "@babel/plugin-transform-literals": "^7.25.2",
-        "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
-        "@babel/plugin-transform-member-expression-literals": "^7.24.7",
-        "@babel/plugin-transform-modules-amd": "^7.24.7",
-        "@babel/plugin-transform-modules-commonjs": "^7.24.8",
-        "@babel/plugin-transform-modules-systemjs": "^7.25.0",
-        "@babel/plugin-transform-modules-umd": "^7.24.7",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
-        "@babel/plugin-transform-new-target": "^7.24.7",
-        "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
-        "@babel/plugin-transform-numeric-separator": "^7.24.7",
-        "@babel/plugin-transform-object-rest-spread": "^7.24.7",
-        "@babel/plugin-transform-object-super": "^7.24.7",
-        "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
-        "@babel/plugin-transform-optional-chaining": "^7.24.8",
-        "@babel/plugin-transform-parameters": "^7.24.7",
-        "@babel/plugin-transform-private-methods": "^7.24.7",
-        "@babel/plugin-transform-private-property-in-object": "^7.24.7",
-        "@babel/plugin-transform-property-literals": "^7.24.7",
-        "@babel/plugin-transform-regenerator": "^7.24.7",
-        "@babel/plugin-transform-reserved-words": "^7.24.7",
-        "@babel/plugin-transform-shorthand-properties": "^7.24.7",
-        "@babel/plugin-transform-spread": "^7.24.7",
-        "@babel/plugin-transform-sticky-regex": "^7.24.7",
-        "@babel/plugin-transform-template-literals": "^7.24.7",
-        "@babel/plugin-transform-typeof-symbol": "^7.24.8",
-        "@babel/plugin-transform-unicode-escapes": "^7.24.7",
-        "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
-        "@babel/plugin-transform-unicode-regex": "^7.24.7",
-        "@babel/plugin-transform-unicode-sets-regex": "^7.24.7",
-        "@babel/preset-modules": "0.1.6-no-external-plugins",
-        "babel-plugin-polyfill-corejs2": "^0.4.10",
-        "babel-plugin-polyfill-corejs3": "^0.10.4",
-        "babel-plugin-polyfill-regenerator": "^0.6.1",
-        "core-js-compat": "^3.37.1",
-        "semver": "^6.3.1"
-      },
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/@babel/preset-env/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz",
+      "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/darwin-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz",
+      "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/ajv-keywords": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
-      "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/darwin-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz",
+      "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "peerDependencies": {
-        "ajv": "^6.9.1"
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/babel-loader": {
-      "version": "9.1.3",
-      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
-      "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz",
+      "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "find-cache-dir": "^4.0.0",
-        "schema-utils": "^4.0.0"
-      },
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
       "engines": {
-        "node": ">= 14.15.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.12.0",
-        "webpack": ">=5"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/convert-source-map": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
-      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/freebsd-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz",
+      "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/eslint-scope": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-arm": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz",
+      "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==",
+      "cpu": [
+        "arm"
+      ],
       "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^4.1.1"
-      },
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=8.0.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz",
+      "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
-      "license": "BSD-2-Clause",
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=4.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/events": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
-      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-ia32": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz",
+      "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==",
+      "cpu": [
+        "ia32"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=0.8.x"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/json-parse-even-better-errors": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
-      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-loong64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz",
+      "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==",
+      "cpu": [
+        "loong64"
+      ],
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-mips64el": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz",
+      "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==",
+      "cpu": [
+        "mips64el"
+      ],
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/tslib": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
-      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-ppc64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz",
+      "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==",
+      "cpu": [
+        "ppc64"
+      ],
       "dev": true,
-      "license": "0BSD"
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/webpack": {
-      "version": "5.94.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
-      "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-riscv64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz",
+      "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==",
+      "cpu": [
+        "riscv64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@types/estree": "^1.0.5",
-        "@webassemblyjs/ast": "^1.12.1",
-        "@webassemblyjs/wasm-edit": "^1.12.1",
-        "@webassemblyjs/wasm-parser": "^1.12.1",
-        "acorn": "^8.7.1",
-        "acorn-import-attributes": "^1.9.5",
-        "browserslist": "^4.21.10",
-        "chrome-trace-event": "^1.0.2",
-        "enhanced-resolve": "^5.17.1",
-        "es-module-lexer": "^1.2.1",
-        "eslint-scope": "5.1.1",
-        "events": "^3.2.0",
-        "glob-to-regexp": "^0.4.1",
-        "graceful-fs": "^4.2.11",
-        "json-parse-even-better-errors": "^2.3.1",
-        "loader-runner": "^4.2.0",
-        "mime-types": "^2.1.27",
-        "neo-async": "^2.6.2",
-        "schema-utils": "^3.2.0",
-        "tapable": "^2.1.1",
-        "terser-webpack-plugin": "^5.3.10",
-        "watchpack": "^2.4.1",
-        "webpack-sources": "^3.2.3"
-      },
-      "bin": {
-        "webpack": "bin/webpack.js"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependenciesMeta": {
-        "webpack-cli": {
-          "optional": true
-        }
+        "node": ">=18"
       }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/webpack/node_modules/schema-utils": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
-      "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-s390x": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz",
+      "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==",
+      "cpu": [
+        "s390x"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@types/json-schema": "^7.0.8",
-        "ajv": "^6.12.5",
-        "ajv-keywords": "^3.5.2"
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz",
+      "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/netbsd-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz",
+      "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/openbsd-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz",
+      "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/openbsd-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz",
+      "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/sunos-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz",
+      "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz",
+      "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-ia32": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz",
+      "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz",
+      "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@angular-devkit/build-angular/node_modules/esbuild": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz",
+      "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "bin": {
+        "esbuild": "bin/esbuild"
       },
       "engines": {
-        "node": ">= 10.13.0"
+        "node": ">=18"
       },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.24.0",
+        "@esbuild/android-arm": "0.24.0",
+        "@esbuild/android-arm64": "0.24.0",
+        "@esbuild/android-x64": "0.24.0",
+        "@esbuild/darwin-arm64": "0.24.0",
+        "@esbuild/darwin-x64": "0.24.0",
+        "@esbuild/freebsd-arm64": "0.24.0",
+        "@esbuild/freebsd-x64": "0.24.0",
+        "@esbuild/linux-arm": "0.24.0",
+        "@esbuild/linux-arm64": "0.24.0",
+        "@esbuild/linux-ia32": "0.24.0",
+        "@esbuild/linux-loong64": "0.24.0",
+        "@esbuild/linux-mips64el": "0.24.0",
+        "@esbuild/linux-ppc64": "0.24.0",
+        "@esbuild/linux-riscv64": "0.24.0",
+        "@esbuild/linux-s390x": "0.24.0",
+        "@esbuild/linux-x64": "0.24.0",
+        "@esbuild/netbsd-x64": "0.24.0",
+        "@esbuild/openbsd-arm64": "0.24.0",
+        "@esbuild/openbsd-x64": "0.24.0",
+        "@esbuild/sunos-x64": "0.24.0",
+        "@esbuild/win32-arm64": "0.24.0",
+        "@esbuild/win32-ia32": "0.24.0",
+        "@esbuild/win32-x64": "0.24.0"
       }
     },
     "node_modules/@angular-devkit/build-webpack": {
-      "version": "0.1802.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.11.tgz",
-      "integrity": "sha512-G76rNsyn1iQk7qjyr+K4rnDzfalmEswmwXQorypSDGaHYzIDY1SZXMoP4225WMq5fJNBOJrk82FA0PSfnPE+zQ==",
+      "version": "0.1900.5",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1900.5.tgz",
+      "integrity": "sha512-SWrXxVS0u9RXq3bz1+rKfH79nYiqPL9qdJt4lAhTo5O+Uc+qEHLctLvkOYCJHqezLblJG2nGBhHTB0EBmi8pLg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/architect": "0.1802.11",
+        "@angular-devkit/architect": "0.1900.5",
         "rxjs": "7.8.1"
       },
       "engines": {
@@ -604,9 +728,9 @@
       }
     },
     "node_modules/@angular-devkit/core": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.11.tgz",
-      "integrity": "sha512-H9P1shRGigORWJHUY2BRa2YurT+DVminrhuaYHsbhXBRsPmgB2Dx/30YLTnC1s5XmR9QIRUCsg/d3kyT1wd5Zg==",
+      "version": "19.0.5",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.0.5.tgz",
+      "integrity": "sha512-njBblpYHmlDI+Jtbub9NEm9RH+SBIFmmsgL9uJB8GxQVSo2qo4+f69nTkijRNN8WNKsSkYoRR9+JSl9QXWbyEA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -623,7 +747,7 @@
         "yarn": ">= 1.13.0"
       },
       "peerDependencies": {
-        "chokidar": "^3.5.2"
+        "chokidar": "^4.0.0"
       },
       "peerDependenciesMeta": {
         "chokidar": {
@@ -632,15 +756,15 @@
       }
     },
     "node_modules/@angular-devkit/schematics": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.11.tgz",
-      "integrity": "sha512-efRK3FotTFp4KD5u42jWfXpHUALXB9kJNsWiB4wEImKFH6CN+vjBspJQuLqk2oeBFh/7D2qRMc5P+2tZHM5hdw==",
+      "version": "19.0.5",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.0.5.tgz",
+      "integrity": "sha512-dhLVBVb0ECfcIP59azoD/5lJMSMU//bo1LEbuE0VrFA9orVxQhgilNuZeVXBr5sOll1PFjxs/fqyX8sAH9xQYw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/core": "18.2.11",
+        "@angular-devkit/core": "19.0.5",
         "jsonc-parser": "3.3.1",
-        "magic-string": "0.30.11",
+        "magic-string": "0.30.12",
         "ora": "5.4.1",
         "rxjs": "7.8.1"
       },
@@ -650,6 +774,16 @@
         "yarn": ">= 1.13.0"
       }
     },
+    "node_modules/@angular-devkit/schematics/node_modules/magic-string": {
+      "version": "0.30.12",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz",
+      "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0"
+      }
+    },
     "node_modules/@angular-eslint/builder": {
       "version": "18.1.0",
       "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-18.1.0.tgz",
@@ -770,9 +904,9 @@
       }
     },
     "node_modules/@angular/animations": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.11.tgz",
-      "integrity": "sha512-ghgXa2VhtyJJnTMuH2NYxCMsveQbZno44AZGygPqrcW8UQMQe9GulFaTXCH5s6/so2CLy2ZviIwSZQRgK0ZlDw==",
+      "version": "19.0.4",
+      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.0.4.tgz",
+      "integrity": "sha512-iGuOMlVhLBmGCSJ5azqwLdsBIFlWXtB+CffeoJjKXGjR2YRxP1aylNccB5UqE7G/XjNNLjJfLkm+nQUAWGLMNg==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -781,56 +915,61 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/core": "18.2.11"
+        "@angular/core": "19.0.4"
       }
     },
     "node_modules/@angular/build": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.11.tgz",
-      "integrity": "sha512-AgirvSCmqUKiDE3C0rl3JA68OkOqQWDKUvjqRHXCkhxldLVOVoeIl87+jBYK/v9gcmk+K+ju+5wbGEfu1FjhiQ==",
+      "version": "19.0.5",
+      "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.0.5.tgz",
+      "integrity": "sha512-/4msIXebFfDWcsyYGDzcxrhn1G1bWVTVbLYqkDXDVYFTqWRpBA8UtQ6eLM8FrJqrHw9e/1cxkqBNsR0tkDJ9FQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "2.3.0",
-        "@angular-devkit/architect": "0.1802.11",
-        "@babel/core": "7.25.2",
-        "@babel/helper-annotate-as-pure": "7.24.7",
+        "@angular-devkit/architect": "0.1900.5",
+        "@babel/core": "7.26.0",
+        "@babel/helper-annotate-as-pure": "7.25.9",
         "@babel/helper-split-export-declaration": "7.24.7",
-        "@babel/plugin-syntax-import-attributes": "7.24.7",
-        "@inquirer/confirm": "3.1.22",
+        "@babel/plugin-syntax-import-attributes": "7.26.0",
+        "@inquirer/confirm": "5.0.2",
         "@vitejs/plugin-basic-ssl": "1.1.0",
+        "beasties": "0.1.0",
         "browserslist": "^4.23.0",
-        "critters": "0.0.24",
-        "esbuild": "0.23.0",
+        "esbuild": "0.24.0",
         "fast-glob": "3.3.2",
         "https-proxy-agent": "7.0.5",
-        "listr2": "8.2.4",
-        "lmdb": "3.0.13",
-        "magic-string": "0.30.11",
+        "istanbul-lib-instrument": "6.0.3",
+        "listr2": "8.2.5",
+        "magic-string": "0.30.12",
         "mrmime": "2.0.0",
         "parse5-html-rewriting-stream": "7.0.0",
         "picomatch": "4.0.2",
-        "piscina": "4.6.1",
-        "rollup": "4.22.4",
-        "sass": "1.77.6",
+        "piscina": "4.7.0",
+        "rollup": "4.26.0",
+        "sass": "1.80.7",
         "semver": "7.6.3",
-        "vite": "5.4.6",
-        "watchpack": "2.4.1"
+        "vite": "5.4.11",
+        "watchpack": "2.4.2"
       },
       "engines": {
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
         "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
         "yarn": ">= 1.13.0"
       },
+      "optionalDependencies": {
+        "lmdb": "3.1.5"
+      },
       "peerDependencies": {
-        "@angular/compiler-cli": "^18.0.0",
-        "@angular/localize": "^18.0.0",
-        "@angular/platform-server": "^18.0.0",
-        "@angular/service-worker": "^18.0.0",
+        "@angular/compiler": "^19.0.0",
+        "@angular/compiler-cli": "^19.0.0",
+        "@angular/localize": "^19.0.0",
+        "@angular/platform-server": "^19.0.0",
+        "@angular/service-worker": "^19.0.0",
+        "@angular/ssr": "^19.0.5",
         "less": "^4.2.0",
         "postcss": "^8.4.0",
         "tailwindcss": "^2.0.0 || ^3.0.0",
-        "typescript": ">=5.4 <5.6"
+        "typescript": ">=5.5 <5.7"
       },
       "peerDependenciesMeta": {
         "@angular/localize": {
@@ -842,6 +981,9 @@
         "@angular/service-worker": {
           "optional": true
         },
+        "@angular/ssr": {
+          "optional": true
+        },
         "less": {
           "optional": true
         },
@@ -853,875 +995,877 @@
         }
       }
     },
-    "node_modules/@angular/build/node_modules/@babel/core": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
-      "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+    "node_modules/@angular/build/node_modules/@esbuild/aix-ppc64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz",
+      "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==",
+      "cpu": [
+        "ppc64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.0",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-module-transforms": "^7.25.2",
-        "@babel/helpers": "^7.25.0",
-        "@babel/parser": "^7.25.0",
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.2",
-        "@babel/types": "^7.25.2",
-        "convert-source-map": "^2.0.0",
-        "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.2",
-        "json5": "^2.2.3",
-        "semver": "^6.3.1"
-      },
+      "optional": true,
+      "os": [
+        "aix"
+      ],
       "engines": {
-        "node": ">=6.9.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/babel"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/build/node_modules/@babel/core/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+    "node_modules/@angular/build/node_modules/@esbuild/android-arm": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz",
+      "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==",
+      "cpu": [
+        "arm"
+      ],
       "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/build/node_modules/convert-source-map": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
-      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+    "node_modules/@angular/build/node_modules/@esbuild/android-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz",
+      "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@angular/cdk": {
-      "version": "18.2.12",
-      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.12.tgz",
-      "integrity": "sha512-FOklA6KatPtb0yO0doRhBI/UVY23A8ZhOSws5VuZTQl/6r/jXEXGV9n5JQj4rm8t/6IrReO55hdyw9XfHfZFjQ==",
       "license": "MIT",
-      "dependencies": {
-        "tslib": "^2.3.0"
-      },
-      "optionalDependencies": {
-        "parse5": "^7.1.2"
-      },
-      "peerDependencies": {
-        "@angular/common": "^18.0.0 || ^19.0.0",
-        "@angular/core": "^18.0.0 || ^19.0.0",
-        "rxjs": "^6.5.3 || ^7.4.0"
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/cli": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.11.tgz",
-      "integrity": "sha512-0JI1xjOLRemBPjdT/yVlabxc3Zkjqa/lhvVxxVC1XhKoW7yGxIGwNrQ4pka4CcQtCuktO6KPMmTGIu8YgC3cpw==",
+    "node_modules/@angular/build/node_modules/@esbuild/android-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz",
+      "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@angular-devkit/architect": "0.1802.11",
-        "@angular-devkit/core": "18.2.11",
-        "@angular-devkit/schematics": "18.2.11",
-        "@inquirer/prompts": "5.3.8",
-        "@listr2/prompt-adapter-inquirer": "2.0.15",
-        "@schematics/angular": "18.2.11",
-        "@yarnpkg/lockfile": "1.1.0",
-        "ini": "4.1.3",
-        "jsonc-parser": "3.3.1",
-        "listr2": "8.2.4",
-        "npm-package-arg": "11.0.3",
-        "npm-pick-manifest": "9.1.0",
-        "pacote": "18.0.6",
-        "resolve": "1.22.8",
-        "semver": "7.6.3",
-        "symbol-observable": "4.0.0",
-        "yargs": "17.7.2"
-      },
-      "bin": {
-        "ng": "bin/ng.js"
-      },
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
-        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
-        "yarn": ">= 1.13.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/common": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.11.tgz",
-      "integrity": "sha512-bamJeISl2zUlvjPYebQWazUjhjXU9nrot42cQJng94SkvNENT9LTWfPYgc+Bd972Kg+31jG4H41rgFNs7zySmw==",
+    "node_modules/@angular/build/node_modules/@esbuild/darwin-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz",
+      "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "tslib": "^2.3.0"
-      },
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
-      },
-      "peerDependencies": {
-        "@angular/core": "18.2.11",
-        "rxjs": "^6.5.3 || ^7.4.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/compiler": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.11.tgz",
-      "integrity": "sha512-PSVL1YXUhTzkgJNYXiWk9eAZxNV6laQJRGdj9++C1q9m2S9/GlehZGzkt5GtC5rlUweJucCNvBC1+2D5FAt9vA==",
+    "node_modules/@angular/build/node_modules/@esbuild/darwin-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz",
+      "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "tslib": "^2.3.0"
-      },
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
-      },
-      "peerDependencies": {
-        "@angular/core": "18.2.11"
-      },
-      "peerDependenciesMeta": {
-        "@angular/core": {
-          "optional": true
-        }
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/compiler-cli": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.11.tgz",
-      "integrity": "sha512-YJlAOiXZUYP6/RK9isu5AOucmNZhFB9lpY/beMzkkWgDku+va8szm4BZbLJFz176IUteyLWF3IP4aE7P9OBlXw==",
+    "node_modules/@angular/build/node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz",
+      "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@babel/core": "7.25.2",
-        "@jridgewell/sourcemap-codec": "^1.4.14",
-        "chokidar": "^4.0.0",
-        "convert-source-map": "^1.5.1",
-        "reflect-metadata": "^0.2.0",
-        "semver": "^7.0.0",
-        "tslib": "^2.3.0",
-        "yargs": "^17.2.1"
-      },
-      "bin": {
-        "ng-xi18n": "bundles/src/bin/ng_xi18n.js",
-        "ngc": "bundles/src/bin/ngc.js",
-        "ngcc": "bundles/ngcc/index.js"
-      },
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
       "engines": {
-        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
-      },
-      "peerDependencies": {
-        "@angular/compiler": "18.2.11",
-        "typescript": ">=5.4 <5.6"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/compiler-cli/node_modules/@babel/core": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
-      "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+    "node_modules/@angular/build/node_modules/@esbuild/freebsd-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz",
+      "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.0",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-module-transforms": "^7.25.2",
-        "@babel/helpers": "^7.25.0",
-        "@babel/parser": "^7.25.0",
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.2",
-        "@babel/types": "^7.25.2",
-        "convert-source-map": "^2.0.0",
-        "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.2",
-        "json5": "^2.2.3",
-        "semver": "^6.3.1"
-      },
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
       "engines": {
-        "node": ">=6.9.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/babel"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
-      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+    "node_modules/@angular/build/node_modules/@esbuild/linux-arm": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz",
+      "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==",
+      "cpu": [
+        "arm"
+      ],
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
     },
-    "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+    "node_modules/@angular/build/node_modules/@esbuild/linux-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz",
+      "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/compiler-cli/node_modules/chokidar": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz",
-      "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==",
+    "node_modules/@angular/build/node_modules/@esbuild/linux-ia32": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz",
+      "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==",
+      "cpu": [
+        "ia32"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "readdirp": "^4.0.1"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 14.16.0"
-      },
-      "funding": {
-        "url": "https://paulmillr.com/funding/"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/compiler-cli/node_modules/readdirp": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
-      "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
+    "node_modules/@angular/build/node_modules/@esbuild/linux-loong64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz",
+      "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==",
+      "cpu": [
+        "loong64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 14.16.0"
-      },
-      "funding": {
-        "type": "individual",
-        "url": "https://paulmillr.com/funding/"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/core": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.11.tgz",
-      "integrity": "sha512-/AGAFyZN8KR+kW5FUFCCBCj3qHyDDum7G0lJe5otrT9AqF6+g7PjF8yLha/6wPkJG7ri5xGLhini1sEivVeq/g==",
+    "node_modules/@angular/build/node_modules/@esbuild/linux-mips64el": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz",
+      "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==",
+      "cpu": [
+        "mips64el"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "tslib": "^2.3.0"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
-      },
-      "peerDependencies": {
-        "rxjs": "^6.5.3 || ^7.4.0",
-        "zone.js": "~0.14.10"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/forms": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.11.tgz",
-      "integrity": "sha512-QjxayOxDTqsTJGBzfWd3nms1LZIXj2f1+wIPxxUNXyNS5ZaM7hBWkz2BTFYeewlD/HdNj0alNVCYK3M8ElLWYw==",
+    "node_modules/@angular/build/node_modules/@esbuild/linux-ppc64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz",
+      "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "tslib": "^2.3.0"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
-      },
-      "peerDependencies": {
-        "@angular/common": "18.2.11",
-        "@angular/core": "18.2.11",
-        "@angular/platform-browser": "18.2.11",
-        "rxjs": "^6.5.3 || ^7.4.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/language-service": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-18.2.11.tgz",
-      "integrity": "sha512-kI36Wfvw3E01Xox/H535/rrSTiDfzQeXATFR5i5vqc94XWUdQG67e4X6ybnqFUrezXoLPTULHp+5Di896YFPzw==",
+    "node_modules/@angular/build/node_modules/@esbuild/linux-riscv64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz",
+      "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==",
+      "cpu": [
+        "riscv64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/material": {
-      "version": "18.2.12",
-      "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.2.12.tgz",
-      "integrity": "sha512-5q8Os6i3D1e3qN+RqP95UgIR+Kx3goncSSYDeT6yPNrdrcqcWdyDPXGK6UsZqTTx/CJee/I7ZxgVVK1YDoVASQ==",
+    "node_modules/@angular/build/node_modules/@esbuild/linux-s390x": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz",
+      "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "tslib": "^2.3.0"
-      },
-      "peerDependencies": {
-        "@angular/animations": "^18.0.0 || ^19.0.0",
-        "@angular/cdk": "18.2.12",
-        "@angular/common": "^18.0.0 || ^19.0.0",
-        "@angular/core": "^18.0.0 || ^19.0.0",
-        "@angular/forms": "^18.0.0 || ^19.0.0",
-        "@angular/platform-browser": "^18.0.0 || ^19.0.0",
-        "rxjs": "^6.5.3 || ^7.4.0"
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/platform-browser": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.11.tgz",
-      "integrity": "sha512-bzcP0QdPT/ncTxOx0t7901z5m0wDmkraTo/es4g8reV6VK9Ptv0QDuD8aDvrHh7sLCX5VgwDF9ohc6S2TpYUCA==",
+    "node_modules/@angular/build/node_modules/@esbuild/linux-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz",
+      "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "tslib": "^2.3.0"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
-      },
-      "peerDependencies": {
-        "@angular/animations": "18.2.11",
-        "@angular/common": "18.2.11",
-        "@angular/core": "18.2.11"
-      },
-      "peerDependenciesMeta": {
-        "@angular/animations": {
-          "optional": true
-        }
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/platform-browser-dynamic": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.11.tgz",
-      "integrity": "sha512-a30U4ZdTZSvL17xWwOq6xh9ToCDP2K7/j1HTJFREObbuAtZTa/6IVgBUM6oOMNQ43kHkT6Mr9Emkgf9iGtWwfw==",
+    "node_modules/@angular/build/node_modules/@esbuild/netbsd-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz",
+      "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "tslib": "^2.3.0"
-      },
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
       "engines": {
-        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
-      },
-      "peerDependencies": {
-        "@angular/common": "18.2.11",
-        "@angular/compiler": "18.2.11",
-        "@angular/core": "18.2.11",
-        "@angular/platform-browser": "18.2.11"
+        "node": ">=18"
       }
     },
-    "node_modules/@angular/router": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.11.tgz",
-      "integrity": "sha512-xh4+t4pNBWxeH1a6GIoEGVSRZO4NDKK8q6b+AzB5GBgKsYgOz2lc74RXIPA//pK3aHrS9qD4sJLlodwgE/1+bA==",
+    "node_modules/@angular/build/node_modules/@esbuild/openbsd-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz",
+      "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "tslib": "^2.3.0"
-      },
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
       "engines": {
-        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
-      },
-      "peerDependencies": {
-        "@angular/common": "18.2.11",
-        "@angular/core": "18.2.11",
-        "@angular/platform-browser": "18.2.11",
-        "rxjs": "^6.5.3 || ^7.4.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@asymmetrik/ngx-leaflet": {
-      "version": "18.0.1",
-      "resolved": "https://registry.npmjs.org/@asymmetrik/ngx-leaflet/-/ngx-leaflet-18.0.1.tgz",
-      "integrity": "sha512-x1KFH+qUCB4H6GWJik0r+8k10/WZXgWcqq2Iu7GpcpESxBFan+bHtiWJt6urqvMOroObEWfMKmVND83CB7AjlQ==",
+    "node_modules/@angular/build/node_modules/@esbuild/openbsd-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz",
+      "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "tslib": "^2.3.0"
-      },
-      "peerDependencies": {
-        "@angular/common": "18",
-        "@angular/core": "18",
-        "leaflet": "1"
-      }
-    },
-    "node_modules/@aws-cdk/asset-awscli-v1": {
-      "version": "2.2.211",
-      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.211.tgz",
-      "integrity": "sha512-56G1FYTiKyec3bEfEI/5UcU0XPnaGUlaDDH7OYClyvqss0HlnmoSulHK2gwai2PGAD1Nk+scPrdfH/MVAkSKuw==",
-      "license": "Apache-2.0"
-    },
-    "node_modules/@aws-cdk/asset-kubectl-v20": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.3.tgz",
-      "integrity": "sha512-cDG1w3ieM6eOT9mTefRuTypk95+oyD7P5X/wRltwmYxU7nZc3+076YEVS6vrjDKr3ADYbfn0lDKpfB1FBtO9CQ==",
-      "license": "Apache-2.0"
-    },
-    "node_modules/@aws-cdk/asset-node-proxy-agent-v6": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz",
-      "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==",
-      "license": "Apache-2.0"
-    },
-    "node_modules/@aws-cdk/cloud-assembly-schema": {
-      "version": "38.0.1",
-      "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-38.0.1.tgz",
-      "integrity": "sha512-KvPe+NMWAulfNVwY7jenFhzhuLhLqJ/OPy5jx7wUstbjnYnjRVLpUHPU3yCjXFE0J8cuJVdx95BJ4rOs66Pi9w==",
-      "bundleDependencies": [
-        "jsonschema",
-        "semver"
+      "optional": true,
+      "os": [
+        "openbsd"
       ],
-      "license": "Apache-2.0",
-      "dependencies": {
-        "jsonschema": "^1.4.1",
-        "semver": "^7.6.3"
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": {
-      "version": "1.4.1",
-      "inBundle": true,
+    "node_modules/@angular/build/node_modules/@esbuild/sunos-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz",
+      "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
       "engines": {
-        "node": "*"
+        "node": ">=18"
       }
     },
-    "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": {
-      "version": "7.6.3",
-      "inBundle": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
-      },
+    "node_modules/@angular/build/node_modules/@esbuild/win32-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz",
+      "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">=10"
+        "node": ">=18"
       }
     },
-    "node_modules/@babel/code-frame": {
-      "version": "7.26.2",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
-      "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
+    "node_modules/@angular/build/node_modules/@esbuild/win32-ia32": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz",
+      "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.25.9",
-        "js-tokens": "^4.0.0",
-        "picocolors": "^1.0.0"
-      },
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">=6.9.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@babel/compat-data": {
-      "version": "7.26.2",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz",
-      "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==",
+    "node_modules/@angular/build/node_modules/@esbuild/win32-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz",
+      "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">=6.9.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@babel/core": {
-      "version": "7.26.0",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz",
-      "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==",
+    "node_modules/@angular/build/node_modules/esbuild": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz",
+      "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==",
+      "dev": true,
+      "hasInstallScript": true,
       "license": "MIT",
-      "dependencies": {
-        "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.26.0",
-        "@babel/generator": "^7.26.0",
-        "@babel/helper-compilation-targets": "^7.25.9",
-        "@babel/helper-module-transforms": "^7.26.0",
-        "@babel/helpers": "^7.26.0",
-        "@babel/parser": "^7.26.0",
-        "@babel/template": "^7.25.9",
-        "@babel/traverse": "^7.25.9",
-        "@babel/types": "^7.26.0",
-        "convert-source-map": "^2.0.0",
-        "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.2",
-        "json5": "^2.2.3",
-        "semver": "^6.3.1"
+      "bin": {
+        "esbuild": "bin/esbuild"
       },
       "engines": {
-        "node": ">=6.9.0"
+        "node": ">=18"
       },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/babel"
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.24.0",
+        "@esbuild/android-arm": "0.24.0",
+        "@esbuild/android-arm64": "0.24.0",
+        "@esbuild/android-x64": "0.24.0",
+        "@esbuild/darwin-arm64": "0.24.0",
+        "@esbuild/darwin-x64": "0.24.0",
+        "@esbuild/freebsd-arm64": "0.24.0",
+        "@esbuild/freebsd-x64": "0.24.0",
+        "@esbuild/linux-arm": "0.24.0",
+        "@esbuild/linux-arm64": "0.24.0",
+        "@esbuild/linux-ia32": "0.24.0",
+        "@esbuild/linux-loong64": "0.24.0",
+        "@esbuild/linux-mips64el": "0.24.0",
+        "@esbuild/linux-ppc64": "0.24.0",
+        "@esbuild/linux-riscv64": "0.24.0",
+        "@esbuild/linux-s390x": "0.24.0",
+        "@esbuild/linux-x64": "0.24.0",
+        "@esbuild/netbsd-x64": "0.24.0",
+        "@esbuild/openbsd-arm64": "0.24.0",
+        "@esbuild/openbsd-x64": "0.24.0",
+        "@esbuild/sunos-x64": "0.24.0",
+        "@esbuild/win32-arm64": "0.24.0",
+        "@esbuild/win32-ia32": "0.24.0",
+        "@esbuild/win32-x64": "0.24.0"
+      }
+    },
+    "node_modules/@angular/build/node_modules/magic-string": {
+      "version": "0.30.12",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz",
+      "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0"
       }
     },
-    "node_modules/@babel/core/node_modules/@babel/generator": {
-      "version": "7.26.2",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz",
-      "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==",
+    "node_modules/@angular/cdk": {
+      "version": "18.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.12.tgz",
+      "integrity": "sha512-FOklA6KatPtb0yO0doRhBI/UVY23A8ZhOSws5VuZTQl/6r/jXEXGV9n5JQj4rm8t/6IrReO55hdyw9XfHfZFjQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.26.2",
-        "@babel/types": "^7.26.0",
-        "@jridgewell/gen-mapping": "^0.3.5",
-        "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^3.0.2"
+        "tslib": "^2.3.0"
       },
-      "engines": {
-        "node": ">=6.9.0"
+      "optionalDependencies": {
+        "parse5": "^7.1.2"
+      },
+      "peerDependencies": {
+        "@angular/common": "^18.0.0 || ^19.0.0",
+        "@angular/core": "^18.0.0 || ^19.0.0",
+        "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
-    "node_modules/@babel/core/node_modules/convert-source-map": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
-      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
-      "license": "MIT"
-    },
-    "node_modules/@babel/core/node_modules/jsesc": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
-      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+    "node_modules/@angular/cli": {
+      "version": "19.0.5",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.0.5.tgz",
+      "integrity": "sha512-AalLr1EbgJqBbzk+5ZtXwg6wCwLlRLd+CRrZZcC6QSee69mfsU9jEP2KFlMAecajOCqAGK3H4ZRiTZNeQ3y5AA==",
+      "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "@angular-devkit/architect": "0.1900.5",
+        "@angular-devkit/core": "19.0.5",
+        "@angular-devkit/schematics": "19.0.5",
+        "@inquirer/prompts": "7.1.0",
+        "@listr2/prompt-adapter-inquirer": "2.0.18",
+        "@schematics/angular": "19.0.5",
+        "@yarnpkg/lockfile": "1.1.0",
+        "ini": "5.0.0",
+        "jsonc-parser": "3.3.1",
+        "listr2": "8.2.5",
+        "npm-package-arg": "12.0.0",
+        "npm-pick-manifest": "10.0.0",
+        "pacote": "20.0.0",
+        "resolve": "1.22.8",
+        "semver": "7.6.3",
+        "symbol-observable": "4.0.0",
+        "yargs": "17.7.2"
+      },
       "bin": {
-        "jsesc": "bin/jsesc"
+        "ng": "bin/ng.js"
       },
       "engines": {
-        "node": ">=6"
+        "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
       }
     },
-    "node_modules/@babel/core/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+    "node_modules/@angular/cli/node_modules/ini": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz",
+      "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==",
+      "dev": true,
       "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
+      "engines": {
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
-    "node_modules/@babel/generator": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
-      "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
-      "dev": true,
+    "node_modules/@angular/common": {
+      "version": "19.0.4",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-19.0.4.tgz",
+      "integrity": "sha512-SBWraO5NVZa/QJPrVbk3IsUmZQDriYBvqYuZFJaI/UTbhcAedNRsLDbKHtOYrHHx6K1saPXSQCufWgFo30lEqw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.0",
-        "@jridgewell/gen-mapping": "^0.3.5",
-        "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^2.5.1"
+        "tslib": "^2.3.0"
       },
       "engines": {
-        "node": ">=6.9.0"
+        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
+      },
+      "peerDependencies": {
+        "@angular/core": "19.0.4",
+        "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
-    "node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
-      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
-      "dev": true,
+    "node_modules/@angular/compiler": {
+      "version": "19.0.4",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.0.4.tgz",
+      "integrity": "sha512-DWeP7lnR8L8W/jtmO9oWEGC9JcFE+GCLrsHm8cJN1a4jf9JA1OB8UsPdqxS/JHJJ8GWk5U1ivpTzxKBpXx6ShA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "tslib": "^2.3.0"
       },
       "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz",
-      "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/traverse": "^7.25.9",
-        "@babel/types": "^7.25.9"
+        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
-      "engines": {
-        "node": ">=6.9.0"
+      "peerDependencies": {
+        "@angular/core": "19.0.4"
+      },
+      "peerDependenciesMeta": {
+        "@angular/core": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
-      "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
+    "node_modules/@angular/compiler-cli": {
+      "version": "19.0.4",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.0.4.tgz",
+      "integrity": "sha512-D26HwIYNuvo39Jnimv3VguBpMZkpGf1zAS3ZE9atfk1AQOew7KSFnqbSm1IRHiTj99cqnBE068q1zZnXg+3mEA==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.9",
-        "@babel/helper-validator-option": "^7.25.9",
-        "browserslist": "^4.24.0",
-        "lru-cache": "^5.1.1",
-        "semver": "^6.3.1"
+        "@babel/core": "7.26.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14",
+        "chokidar": "^4.0.0",
+        "convert-source-map": "^1.5.1",
+        "reflect-metadata": "^0.2.0",
+        "semver": "^7.0.0",
+        "tslib": "^2.3.0",
+        "yargs": "^17.2.1"
       },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "license": "ISC",
       "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz",
-      "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.25.9",
-        "@babel/helper-member-expression-to-functions": "^7.25.9",
-        "@babel/helper-optimise-call-expression": "^7.25.9",
-        "@babel/helper-replace-supers": "^7.25.9",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
-        "@babel/traverse": "^7.25.9",
-        "semver": "^6.3.1"
+        "ng-xi18n": "bundles/src/bin/ng_xi18n.js",
+        "ngc": "bundles/src/bin/ngc.js",
+        "ngcc": "bundles/ngcc/index.js"
       },
       "engines": {
-        "node": ">=6.9.0"
+        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@babel/core": "^7.0.0"
+        "@angular/compiler": "19.0.4",
+        "typescript": ">=5.5 <5.7"
       }
     },
-    "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
-      "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
+    "node_modules/@angular/core": {
+      "version": "19.0.4",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-19.0.4.tgz",
+      "integrity": "sha512-eoLixL8+03HpMIrmbL9lX+PAEw/fJSGshUH99IN9ZgCDEWeAlORg3U5RQEEh59ovelGfTn/sNaYhWsLVoBUIYQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.9"
+        "tslib": "^2.3.0"
       },
       "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
+        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
+      },
+      "peerDependencies": {
+        "rxjs": "^6.5.3 || ^7.4.0",
+        "zone.js": "~0.15.0"
       }
     },
-    "node_modules/@babel/helper-create-regexp-features-plugin": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz",
-      "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==",
+    "node_modules/@angular/forms": {
+      "version": "19.0.4",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.0.4.tgz",
+      "integrity": "sha512-smBCOjqCOMjHxRwwmImo58esSatGRsIxEaPytMezWWXqcD9pCZFzHskXA7218cJBRO8T9wuAf5AJFSqD4Yg72A==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.25.9",
-        "regexpu-core": "^6.1.1",
-        "semver": "^6.3.1"
+        "tslib": "^2.3.0"
       },
       "engines": {
-        "node": ">=6.9.0"
+        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@babel/core": "^7.0.0"
+        "@angular/common": "19.0.4",
+        "@angular/core": "19.0.4",
+        "@angular/platform-browser": "19.0.4",
+        "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
-    "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
-      "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
+    "node_modules/@angular/language-service": {
+      "version": "19.0.4",
+      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-19.0.4.tgz",
+      "integrity": "sha512-Mf4TwJ09fReFFVzvfwSWUVOO66wS7IpzG5Eg+s46+v3VMWT8c7Tayp+wRLD6bvj58g8MJJeIerrFCP8bDhGKiw==",
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@babel/types": "^7.25.9"
-      },
       "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
+        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       }
     },
-    "node_modules/@babel/helper-define-polyfill-provider": {
-      "version": "0.6.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz",
-      "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==",
+    "node_modules/@angular/material": {
+      "version": "18.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.2.12.tgz",
+      "integrity": "sha512-5q8Os6i3D1e3qN+RqP95UgIR+Kx3goncSSYDeT6yPNrdrcqcWdyDPXGK6UsZqTTx/CJee/I7ZxgVVK1YDoVASQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.22.6",
-        "@babel/helper-plugin-utils": "^7.22.5",
-        "debug": "^4.1.1",
-        "lodash.debounce": "^4.0.8",
-        "resolve": "^1.14.2"
+        "tslib": "^2.3.0"
       },
       "peerDependencies": {
-        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+        "@angular/animations": "^18.0.0 || ^19.0.0",
+        "@angular/cdk": "18.2.12",
+        "@angular/common": "^18.0.0 || ^19.0.0",
+        "@angular/core": "^18.0.0 || ^19.0.0",
+        "@angular/forms": "^18.0.0 || ^19.0.0",
+        "@angular/platform-browser": "^18.0.0 || ^19.0.0",
+        "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
-    "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
-      "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
+    "node_modules/@angular/platform-browser": {
+      "version": "19.0.4",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.0.4.tgz",
+      "integrity": "sha512-/PRr7kLVVqNFqAkw+SK8RwqE479qCcUyuw6GOHtGabt3ZfQKSbx+pTioVrZFEy5pTBMslCPV5q3I+wGRG7/nyg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.25.9",
-        "@babel/types": "^7.25.9"
+        "tslib": "^2.3.0"
       },
       "engines": {
-        "node": ">=6.9.0"
+        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
+      },
+      "peerDependencies": {
+        "@angular/animations": "19.0.4",
+        "@angular/common": "19.0.4",
+        "@angular/core": "19.0.4"
+      },
+      "peerDependenciesMeta": {
+        "@angular/animations": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@babel/helper-module-imports": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
-      "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
+    "node_modules/@angular/platform-browser-dynamic": {
+      "version": "19.0.4",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.0.4.tgz",
+      "integrity": "sha512-tO1WeGN7nORU/377t0VClyPin7JtURqld6+zuYlDWjr/wKHDS1OM7rwbOYFMxHmutWGjANwG6BP8gWXgGsHJeg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.25.9",
-        "@babel/types": "^7.25.9"
+        "tslib": "^2.3.0"
       },
       "engines": {
-        "node": ">=6.9.0"
+        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
+      },
+      "peerDependencies": {
+        "@angular/common": "19.0.4",
+        "@angular/compiler": "19.0.4",
+        "@angular/core": "19.0.4",
+        "@angular/platform-browser": "19.0.4"
       }
     },
-    "node_modules/@babel/helper-module-transforms": {
-      "version": "7.26.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
-      "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
+    "node_modules/@angular/router": {
+      "version": "19.0.4",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-19.0.4.tgz",
+      "integrity": "sha512-GYab1nDwlSLGKr5kAOButbL2/ht7gsTmMKKZsiQTuPgi6YX6N/t5wLP5H0TbHm+hxV/NVRXcoMQUa8TjpeKN2A==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.25.9",
-        "@babel/helper-validator-identifier": "^7.25.9",
-        "@babel/traverse": "^7.25.9"
+        "tslib": "^2.3.0"
       },
       "engines": {
-        "node": ">=6.9.0"
+        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@babel/core": "^7.0.0"
+        "@angular/common": "19.0.4",
+        "@angular/core": "19.0.4",
+        "@angular/platform-browser": "19.0.4",
+        "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
-    "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
-      "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
+    "node_modules/@asymmetrik/ngx-leaflet": {
+      "version": "18.0.1",
+      "resolved": "https://registry.npmjs.org/@asymmetrik/ngx-leaflet/-/ngx-leaflet-18.0.1.tgz",
+      "integrity": "sha512-x1KFH+qUCB4H6GWJik0r+8k10/WZXgWcqq2Iu7GpcpESxBFan+bHtiWJt6urqvMOroObEWfMKmVND83CB7AjlQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.9"
+        "tslib": "^2.3.0"
       },
-      "engines": {
-        "node": ">=6.9.0"
+      "peerDependencies": {
+        "@angular/common": "18",
+        "@angular/core": "18",
+        "leaflet": "1"
       }
     },
-    "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
-      "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.9.0"
-      }
+    "node_modules/@aws-cdk/asset-awscli-v1": {
+      "version": "2.2.211",
+      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.211.tgz",
+      "integrity": "sha512-56G1FYTiKyec3bEfEI/5UcU0XPnaGUlaDDH7OYClyvqss0HlnmoSulHK2gwai2PGAD1Nk+scPrdfH/MVAkSKuw==",
+      "license": "Apache-2.0"
     },
-    "node_modules/@babel/helper-remap-async-to-generator": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz",
-      "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==",
-      "license": "MIT",
+    "node_modules/@aws-cdk/asset-kubectl-v20": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.3.tgz",
+      "integrity": "sha512-cDG1w3ieM6eOT9mTefRuTypk95+oyD7P5X/wRltwmYxU7nZc3+076YEVS6vrjDKr3ADYbfn0lDKpfB1FBtO9CQ==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/@aws-cdk/asset-node-proxy-agent-v6": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz",
+      "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/@aws-cdk/cloud-assembly-schema": {
+      "version": "38.0.1",
+      "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-38.0.1.tgz",
+      "integrity": "sha512-KvPe+NMWAulfNVwY7jenFhzhuLhLqJ/OPy5jx7wUstbjnYnjRVLpUHPU3yCjXFE0J8cuJVdx95BJ4rOs66Pi9w==",
+      "bundleDependencies": [
+        "jsonschema",
+        "semver"
+      ],
+      "license": "Apache-2.0",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.25.9",
-        "@babel/helper-wrap-function": "^7.25.9",
-        "@babel/traverse": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
+        "jsonschema": "^1.4.1",
+        "semver": "^7.6.3"
       }
     },
-    "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
-      "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
+    "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": {
+      "version": "1.4.1",
+      "inBundle": true,
       "license": "MIT",
-      "dependencies": {
-        "@babel/types": "^7.25.9"
-      },
       "engines": {
-        "node": ">=6.9.0"
+        "node": "*"
       }
     },
-    "node_modules/@babel/helper-replace-supers": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz",
-      "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-member-expression-to-functions": "^7.25.9",
-        "@babel/helper-optimise-call-expression": "^7.25.9",
-        "@babel/traverse": "^7.25.9"
+    "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": {
+      "version": "7.6.3",
+      "inBundle": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
       },
       "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
+        "node": ">=10"
       }
     },
-    "node_modules/@babel/helper-simple-access": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz",
-      "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==",
+    "node_modules/@babel/code-frame": {
+      "version": "7.26.2",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+      "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.25.9",
-        "@babel/types": "^7.25.9"
+        "@babel/helper-validator-identifier": "^7.25.9",
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.0.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
-      "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
+    "node_modules/@babel/compat-data": {
+      "version": "7.26.2",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz",
+      "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==",
       "license": "MIT",
-      "dependencies": {
-        "@babel/traverse": "^7.25.9",
-        "@babel/types": "^7.25.9"
-      },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/helper-split-export-declaration": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
-      "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
-      "dev": true,
+    "node_modules/@babel/core": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz",
+      "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@ampproject/remapping": "^2.2.0",
+        "@babel/code-frame": "^7.26.0",
+        "@babel/generator": "^7.26.0",
+        "@babel/helper-compilation-targets": "^7.25.9",
+        "@babel/helper-module-transforms": "^7.26.0",
+        "@babel/helpers": "^7.26.0",
+        "@babel/parser": "^7.26.0",
+        "@babel/template": "^7.25.9",
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.26.0",
+        "convert-source-map": "^2.0.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.3",
+        "semver": "^6.3.1"
       },
       "engines": {
         "node": ">=6.9.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/babel"
       }
     },
-    "node_modules/@babel/helper-string-parser": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
-      "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.9.0"
+    "node_modules/@babel/core/node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+      "license": "MIT"
+    },
+    "node_modules/@babel/core/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
       }
     },
-    "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
-      "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+    "node_modules/@babel/generator": {
+      "version": "7.26.2",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz",
+      "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==",
       "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.26.2",
+        "@babel/types": "^7.26.0",
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25",
+        "jsesc": "^3.0.2"
+      },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/helper-validator-option": {
+    "node_modules/@babel/helper-annotate-as-pure": {
       "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
-      "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
+      "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
       "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.9"
+      },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/helper-wrap-function": {
+    "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
       "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz",
-      "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz",
+      "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.9",
         "@babel/traverse": "^7.25.9",
         "@babel/types": "^7.25.9"
       },
@@ -1729,42 +1873,44 @@
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/helpers": {
-      "version": "7.26.0",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz",
-      "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
+    "node_modules/@babel/helper-compilation-targets": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
+      "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.9",
-        "@babel/types": "^7.26.0"
+        "@babel/compat-data": "^7.25.9",
+        "@babel/helper-validator-option": "^7.25.9",
+        "browserslist": "^4.24.0",
+        "lru-cache": "^5.1.1",
+        "semver": "^6.3.1"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/parser": {
-      "version": "7.26.2",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz",
-      "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/types": "^7.26.0"
-      },
+    "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "license": "ISC",
       "bin": {
-        "parser": "bin/babel-parser.js"
-      },
-      "engines": {
-        "node": ">=6.0.0"
+        "semver": "bin/semver.js"
       }
     },
-    "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+    "node_modules/@babel/helper-create-class-features-plugin": {
       "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz",
-      "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz",
+      "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.25.9",
-        "@babel/traverse": "^7.25.9"
+        "@babel/helper-annotate-as-pure": "^7.25.9",
+        "@babel/helper-member-expression-to-functions": "^7.25.9",
+        "@babel/helper-optimise-call-expression": "^7.25.9",
+        "@babel/helper-replace-supers": "^7.25.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+        "@babel/traverse": "^7.25.9",
+        "semver": "^6.3.1"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1773,13 +1919,24 @@
         "@babel/core": "^7.0.0"
       }
     },
-    "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
+    "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/@babel/helper-create-regexp-features-plugin": {
       "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz",
-      "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz",
+      "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.25.9"
+        "@babel/helper-annotate-as-pure": "^7.25.9",
+        "regexpu-core": "^6.1.1",
+        "semver": "^6.3.1"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1788,45 +1945,65 @@
         "@babel/core": "^7.0.0"
       }
     },
-    "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+    "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/@babel/helper-define-polyfill-provider": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz",
+      "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-compilation-targets": "^7.22.6",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "debug": "^4.1.1",
+        "lodash.debounce": "^4.0.8",
+        "resolve": "^1.14.2"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/@babel/helper-member-expression-to-functions": {
       "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz",
-      "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
+      "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.25.9"
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
       }
     },
-    "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+    "node_modules/@babel/helper-module-imports": {
       "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz",
-      "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
+      "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.25.9",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
-        "@babel/plugin-transform-optional-chaining": "^7.25.9"
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.13.0"
       }
     },
-    "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz",
-      "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==",
+    "node_modules/@babel/helper-module-transforms": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
+      "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-module-imports": "^7.25.9",
+        "@babel/helper-validator-identifier": "^7.25.9",
         "@babel/traverse": "^7.25.9"
       },
       "engines": {
@@ -1836,7 +2013,249 @@
         "@babel/core": "^7.0.0"
       }
     },
-    "node_modules/@babel/plugin-proposal-decorators": {
+    "node_modules/@babel/helper-optimise-call-expression": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
+      "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-plugin-utils": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
+      "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-remap-async-to-generator": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz",
+      "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.25.9",
+        "@babel/helper-wrap-function": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-replace-supers": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz",
+      "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-member-expression-to-functions": "^7.25.9",
+        "@babel/helper-optimise-call-expression": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-simple-access": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz",
+      "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
+      "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-split-export-declaration": {
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
+      "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.24.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+      "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+      "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-option": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
+      "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-wrap-function": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz",
+      "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/template": "^7.25.9",
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helpers": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz",
+      "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/template": "^7.25.9",
+        "@babel/types": "^7.26.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.26.2",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz",
+      "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.26.0"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz",
+      "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz",
+      "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz",
+      "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz",
+      "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+        "@babel/plugin-transform-optional-chaining": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.13.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz",
+      "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-proposal-decorators": {
       "version": "7.25.9",
       "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz",
       "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==",
@@ -1937,36 +2356,25 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-syntax-dynamic-import": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
-      "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
-      "dev": true,
+    "node_modules/@babel/plugin-syntax-import-assertions": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz",
+      "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       },
       "peerDependencies": {
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-syntax-export-namespace-from": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
-      "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.3"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-import-assertions": {
+    "node_modules/@babel/plugin-syntax-import-attributes": {
       "version": "7.26.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz",
-      "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz",
+      "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==",
       "license": "MIT",
       "dependencies": {
         "@babel/helper-plugin-utils": "^7.25.9"
@@ -1978,22 +2386,6 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz",
-      "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
     "node_modules/@babel/plugin-syntax-import-meta": {
       "version": "7.10.4",
       "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
@@ -2194,16 +2586,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-generator-functions": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz",
-      "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==",
-      "dev": true,
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz",
+      "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-remap-async-to-generator": "^7.25.0",
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-remap-async-to-generator": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2213,15 +2603,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-to-generator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz",
-      "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==",
-      "dev": true,
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz",
+      "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-remap-async-to-generator": "^7.24.7"
+        "@babel/helper-module-imports": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-remap-async-to-generator": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2312,18 +2701,6 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
-      "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/types": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/plugin-transform-computed-properties": {
       "version": "7.25.9",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz",
@@ -2782,18 +3159,6 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-transform-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
-      "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/types": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/plugin-transform-property-literals": {
       "version": "7.25.9",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz",
@@ -2858,16 +3223,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-runtime": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz",
-      "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz",
+      "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-module-imports": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
-        "babel-plugin-polyfill-corejs3": "^0.10.1",
+        "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
         "semver": "^6.3.1"
       },
@@ -2984,19 +3349,6 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
-      "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/types": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/plugin-transform-unicode-escapes": {
       "version": "7.25.9",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz",
@@ -3144,58 +3496,6 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/preset-env/node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.26.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz",
-      "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/preset-env/node_modules/@babel/plugin-transform-async-generator-functions": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz",
-      "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.25.9",
-        "@babel/helper-remap-async-to-generator": "^7.25.9",
-        "@babel/traverse": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/preset-env/node_modules/@babel/plugin-transform-async-to-generator": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz",
-      "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-module-imports": "^7.25.9",
-        "@babel/helper-plugin-utils": "^7.25.9",
-        "@babel/helper-remap-async-to-generator": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
     "node_modules/@babel/preset-env/node_modules/semver": {
       "version": "6.3.1",
       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -3241,9 +3541,9 @@
       }
     },
     "node_modules/@babel/runtime": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz",
-      "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==",
+      "version": "7.26.0",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
+      "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
       "license": "MIT",
       "dependencies": {
         "regenerator-runtime": "^0.14.0"
@@ -3284,34 +3584,6 @@
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/traverse/node_modules/@babel/generator": {
-      "version": "7.26.2",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz",
-      "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/parser": "^7.26.2",
-        "@babel/types": "^7.26.0",
-        "@jridgewell/gen-mapping": "^0.3.5",
-        "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/traverse/node_modules/jsesc": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
-      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
-      "license": "MIT",
-      "bin": {
-        "jsesc": "bin/jsesc"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/@babel/types": {
       "version": "7.26.0",
       "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
@@ -3553,71 +3825,6 @@
         "semver": "bin/semver.js"
       }
     },
-    "node_modules/@compodoc/compodoc/node_modules/@babel/generator": {
-      "version": "7.26.2",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz",
-      "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/parser": "^7.26.2",
-        "@babel/types": "^7.26.0",
-        "@jridgewell/gen-mapping": "^0.3.5",
-        "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@compodoc/compodoc/node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.26.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz",
-      "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@compodoc/compodoc/node_modules/@babel/plugin-transform-async-generator-functions": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz",
-      "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.25.9",
-        "@babel/helper-remap-async-to-generator": "^7.25.9",
-        "@babel/traverse": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@compodoc/compodoc/node_modules/@babel/plugin-transform-async-to-generator": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz",
-      "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-module-imports": "^7.25.9",
-        "@babel/helper-plugin-utils": "^7.25.9",
-        "@babel/helper-remap-async-to-generator": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
     "node_modules/@compodoc/compodoc/node_modules/@babel/plugin-transform-private-methods": {
       "version": "7.25.7",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz",
@@ -3725,21 +3932,6 @@
         "semver": "bin/semver.js"
       }
     },
-    "node_modules/@compodoc/compodoc/node_modules/chokidar": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz",
-      "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==",
-      "license": "MIT",
-      "dependencies": {
-        "readdirp": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 14.16.0"
-      },
-      "funding": {
-        "url": "https://paulmillr.com/funding/"
-      }
-    },
     "node_modules/@compodoc/compodoc/node_modules/convert-source-map": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
@@ -3760,31 +3952,6 @@
         "node": ">= 6"
       }
     },
-    "node_modules/@compodoc/compodoc/node_modules/jsesc": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
-      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
-      "license": "MIT",
-      "bin": {
-        "jsesc": "bin/jsesc"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/@compodoc/compodoc/node_modules/readdirp": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
-      "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 14.16.0"
-      },
-      "funding": {
-        "type": "individual",
-        "url": "https://paulmillr.com/funding/"
-      }
-    },
     "node_modules/@compodoc/live-server": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz",
@@ -3813,8 +3980,32 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/@compodoc/live-server/node_modules/define-lazy-prop": {
-      "version": "2.0.0",
+    "node_modules/@compodoc/live-server/node_modules/chokidar": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "license": "MIT",
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/@compodoc/live-server/node_modules/define-lazy-prop": {
+      "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
       "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
       "license": "MIT",
@@ -3822,6 +4013,18 @@
         "node": ">=8"
       }
     },
+    "node_modules/@compodoc/live-server/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "node_modules/@compodoc/live-server/node_modules/is-docker": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
@@ -3866,6 +4069,30 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/@compodoc/live-server/node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/@compodoc/live-server/node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "license": "MIT",
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
     "node_modules/@compodoc/ngd-core": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz",
@@ -4034,9 +4261,9 @@
       }
     },
     "node_modules/@discoveryjs/json-ext": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.1.tgz",
-      "integrity": "sha512-boghen8F0Q8D+0/Q1/1r6DUEieUJ8w2a1gIknExMSHBsJFOr2+0KUfHiVYBvucPwl3+RU5PFBK833FjFCh3BhA==",
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz",
+      "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -4735,51 +4962,54 @@
       "license": "BSD-3-Clause"
     },
     "node_modules/@inquirer/checkbox": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.5.0.tgz",
-      "integrity": "sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==",
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.0.3.tgz",
+      "integrity": "sha512-CEt9B4e8zFOGtc/LYeQx5m8nfqQeG/4oNNv0PUvXGG0mys+wR/WbJ3B4KfSQ4Fcr3AQfpiuFOi3fVvmPfvNbxw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.1.0",
-        "@inquirer/figures": "^1.0.5",
-        "@inquirer/type": "^1.5.3",
+        "@inquirer/core": "^10.1.1",
+        "@inquirer/figures": "^1.0.8",
+        "@inquirer/type": "^3.0.1",
         "ansi-escapes": "^4.3.2",
         "yoctocolors-cjs": "^2.1.2"
       },
       "engines": {
         "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
       }
     },
     "node_modules/@inquirer/confirm": {
-      "version": "3.1.22",
-      "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz",
-      "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==",
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.0.2.tgz",
+      "integrity": "sha512-KJLUHOaKnNCYzwVbryj3TNBxyZIrr56fR5N45v6K9IPrbT6B7DcudBMfylkV1A8PUdJE15mybkEQyp2/ZUpxUA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.0.10",
-        "@inquirer/type": "^1.5.2"
+        "@inquirer/core": "^10.1.0",
+        "@inquirer/type": "^3.0.1"
       },
       "engines": {
         "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
       }
     },
     "node_modules/@inquirer/core": {
-      "version": "9.2.1",
-      "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz",
-      "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==",
+      "version": "10.1.1",
+      "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.1.tgz",
+      "integrity": "sha512-rmZVXy9iZvO3ZStEe/ayuuwIJ23LSF13aPMlLMTQARX6lGUBDHGV8UB5i9MRrfy0+mZwt5/9bdy8llszSD3NQA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/figures": "^1.0.6",
-        "@inquirer/type": "^2.0.0",
-        "@types/mute-stream": "^0.0.4",
-        "@types/node": "^22.5.5",
-        "@types/wrap-ansi": "^3.0.0",
+        "@inquirer/figures": "^1.0.8",
+        "@inquirer/type": "^3.0.1",
         "ansi-escapes": "^4.3.2",
         "cli-width": "^4.1.0",
-        "mute-stream": "^1.0.0",
+        "mute-stream": "^2.0.0",
         "signal-exit": "^4.1.0",
         "strip-ansi": "^6.0.1",
         "wrap-ansi": "^6.2.0",
@@ -4789,57 +5019,40 @@
         "node": ">=18"
       }
     },
-    "node_modules/@inquirer/core/node_modules/@inquirer/type": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz",
-      "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "mute-stream": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@inquirer/core/node_modules/@types/node": {
-      "version": "22.9.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz",
-      "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "undici-types": "~6.19.8"
-      }
-    },
     "node_modules/@inquirer/editor": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.2.0.tgz",
-      "integrity": "sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.0.tgz",
+      "integrity": "sha512-Z3LeGsD3WlItDqLxTPciZDbGtm0wrz7iJGS/uUxSiQxef33ZrBq7LhsXg30P7xrWz1kZX4iGzxxj5SKZmJ8W+w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.1.0",
-        "@inquirer/type": "^1.5.3",
+        "@inquirer/core": "^10.1.1",
+        "@inquirer/type": "^3.0.1",
         "external-editor": "^3.1.0"
       },
       "engines": {
         "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
       }
     },
     "node_modules/@inquirer/expand": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.3.0.tgz",
-      "integrity": "sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==",
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.3.tgz",
+      "integrity": "sha512-MDszqW4HYBpVMmAoy/FA9laLrgo899UAga0itEjsYrBthKieDZNc0e16gdn7N3cQ0DSf/6zsTBZMuDYDQU4ktg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.1.0",
-        "@inquirer/type": "^1.5.3",
+        "@inquirer/core": "^10.1.1",
+        "@inquirer/type": "^3.0.1",
         "yoctocolors-cjs": "^2.1.2"
       },
       "engines": {
         "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
       }
     },
     "node_modules/@inquirer/figures": {
@@ -4853,129 +5066,150 @@
       }
     },
     "node_modules/@inquirer/input": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz",
-      "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.0.tgz",
+      "integrity": "sha512-16B8A9hY741yGXzd8UJ9R8su/fuuyO2e+idd7oVLYjP23wKJ6ILRIIHcnXe8/6AoYgwRS2zp4PNsW/u/iZ24yg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.1.0",
-        "@inquirer/type": "^1.5.3"
+        "@inquirer/core": "^10.1.1",
+        "@inquirer/type": "^3.0.1"
       },
       "engines": {
         "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
       }
     },
     "node_modules/@inquirer/number": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-1.1.0.tgz",
-      "integrity": "sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.3.tgz",
+      "integrity": "sha512-HA/W4YV+5deKCehIutfGBzNxWH1nhvUC67O4fC9ufSijn72yrYnRmzvC61dwFvlXIG1fQaYWi+cqNE9PaB9n6Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.1.0",
-        "@inquirer/type": "^1.5.3"
+        "@inquirer/core": "^10.1.1",
+        "@inquirer/type": "^3.0.1"
       },
       "engines": {
         "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
       }
     },
     "node_modules/@inquirer/password": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.2.0.tgz",
-      "integrity": "sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==",
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.3.tgz",
+      "integrity": "sha512-3qWjk6hS0iabG9xx0U1plwQLDBc/HA/hWzLFFatADpR6XfE62LqPr9GpFXBkLU0KQUaIXZ996bNG+2yUvocH8w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.1.0",
-        "@inquirer/type": "^1.5.3",
+        "@inquirer/core": "^10.1.1",
+        "@inquirer/type": "^3.0.1",
         "ansi-escapes": "^4.3.2"
       },
       "engines": {
         "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
       }
     },
     "node_modules/@inquirer/prompts": {
-      "version": "5.3.8",
-      "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.3.8.tgz",
-      "integrity": "sha512-b2BudQY/Si4Y2a0PdZZL6BeJtl8llgeZa7U2j47aaJSCeAl1e4UI7y8a9bSkO3o/ZbZrgT5muy/34JbsjfIWxA==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.1.0.tgz",
+      "integrity": "sha512-5U/XiVRH2pp1X6gpNAjWOglMf38/Ys522ncEHIKT1voRUvSj/DQnR22OVxHnwu5S+rCFaUiPQ57JOtMFQayqYA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/checkbox": "^2.4.7",
-        "@inquirer/confirm": "^3.1.22",
-        "@inquirer/editor": "^2.1.22",
-        "@inquirer/expand": "^2.1.22",
-        "@inquirer/input": "^2.2.9",
-        "@inquirer/number": "^1.0.10",
-        "@inquirer/password": "^2.1.22",
-        "@inquirer/rawlist": "^2.2.4",
-        "@inquirer/search": "^1.0.7",
-        "@inquirer/select": "^2.4.7"
+        "@inquirer/checkbox": "^4.0.2",
+        "@inquirer/confirm": "^5.0.2",
+        "@inquirer/editor": "^4.1.0",
+        "@inquirer/expand": "^4.0.2",
+        "@inquirer/input": "^4.0.2",
+        "@inquirer/number": "^3.0.2",
+        "@inquirer/password": "^4.0.2",
+        "@inquirer/rawlist": "^4.0.2",
+        "@inquirer/search": "^3.0.2",
+        "@inquirer/select": "^4.0.2"
       },
       "engines": {
         "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
       }
     },
     "node_modules/@inquirer/rawlist": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.3.0.tgz",
-      "integrity": "sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==",
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.3.tgz",
+      "integrity": "sha512-5MhinSzfmOiZlRoPezfbJdfVCZikZs38ja3IOoWe7H1dxL0l3Z2jAUgbBldeyhhOkELdGvPlBfQaNbeLslib1w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.1.0",
-        "@inquirer/type": "^1.5.3",
+        "@inquirer/core": "^10.1.1",
+        "@inquirer/type": "^3.0.1",
         "yoctocolors-cjs": "^2.1.2"
       },
       "engines": {
         "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
       }
     },
     "node_modules/@inquirer/search": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-1.1.0.tgz",
-      "integrity": "sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.3.tgz",
+      "integrity": "sha512-mQTCbdNolTGvGGVCJSI6afDwiSGTV+fMLPEIMDJgIV6L/s3+RYRpxt6t0DYnqMQmemnZ/Zq0vTIRwoHT1RgcTg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.1.0",
-        "@inquirer/figures": "^1.0.5",
-        "@inquirer/type": "^1.5.3",
+        "@inquirer/core": "^10.1.1",
+        "@inquirer/figures": "^1.0.8",
+        "@inquirer/type": "^3.0.1",
         "yoctocolors-cjs": "^2.1.2"
       },
       "engines": {
         "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
       }
     },
     "node_modules/@inquirer/select": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz",
-      "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==",
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.0.3.tgz",
+      "integrity": "sha512-OZfKDtDE8+J54JYAFTUGZwvKNfC7W/gFCjDkcsO7HnTH/wljsZo9y/FJquOxMy++DY0+9l9o/MOZ8s5s1j5wmw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.1.0",
-        "@inquirer/figures": "^1.0.5",
-        "@inquirer/type": "^1.5.3",
+        "@inquirer/core": "^10.1.1",
+        "@inquirer/figures": "^1.0.8",
+        "@inquirer/type": "^3.0.1",
         "ansi-escapes": "^4.3.2",
         "yoctocolors-cjs": "^2.1.2"
       },
       "engines": {
         "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
       }
     },
     "node_modules/@inquirer/type": {
-      "version": "1.5.5",
-      "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz",
-      "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.1.tgz",
+      "integrity": "sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "mute-stream": "^1.0.0"
-      },
       "engines": {
         "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
       }
     },
     "node_modules/@isaacs/cliui": {
@@ -5074,6 +5308,19 @@
         "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
       }
     },
+    "node_modules/@isaacs/fs-minipass": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
+      "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^7.0.4"
+      },
+      "engines": {
+        "node": ">=18.0.0"
+      }
+    },
     "node_modules/@istanbuljs/load-nyc-config": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -5635,9 +5882,9 @@
       }
     },
     "node_modules/@jsonjoy.com/json-pack": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz",
-      "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.1.tgz",
+      "integrity": "sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
@@ -5682,25 +5929,48 @@
       "license": "MIT"
     },
     "node_modules/@listr2/prompt-adapter-inquirer": {
-      "version": "2.0.15",
-      "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.15.tgz",
-      "integrity": "sha512-MZrGem/Ujjd4cPTLYDfCZK2iKKeiO/8OX13S6jqxldLs0Prf2aGqVlJ77nMBqMv7fzqgXEgjrNHLXcKR8l9lOg==",
+      "version": "2.0.18",
+      "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.18.tgz",
+      "integrity": "sha512-0hz44rAcrphyXcA8IS7EJ2SCoaBZD2u5goE8S/e+q/DL+dOGpqpcLidVOFeLG3VgML62SXmfRLAhWt0zL1oW4Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/type": "^1.5.1"
+        "@inquirer/type": "^1.5.5"
       },
       "engines": {
         "node": ">=18.0.0"
       },
       "peerDependencies": {
-        "@inquirer/prompts": ">= 3 < 6"
+        "@inquirer/prompts": ">= 3 < 8"
+      }
+    },
+    "node_modules/@listr2/prompt-adapter-inquirer/node_modules/@inquirer/type": {
+      "version": "1.5.5",
+      "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz",
+      "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mute-stream": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@listr2/prompt-adapter-inquirer/node_modules/mute-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz",
+      "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
     "node_modules/@lmdb/lmdb-darwin-arm64": {
-      "version": "3.0.13",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.13.tgz",
-      "integrity": "sha512-uiKPB0Fv6WEEOZjruu9a6wnW/8jrjzlZbxXscMB8kuCJ1k6kHpcBnuvaAWcqhbI7rqX5GKziwWEdD+wi2gNLfA==",
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.1.5.tgz",
+      "integrity": "sha512-ue5PSOzHMCIYrfvPP/MRS6hsKKLzqqhcdAvJCO8uFlDdj598EhgnacuOTuqA6uBK5rgiZXfDWyb7DVZSiBKxBA==",
       "cpu": [
         "arm64"
       ],
@@ -5712,9 +5982,9 @@
       ]
     },
     "node_modules/@lmdb/lmdb-darwin-x64": {
-      "version": "3.0.13",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.13.tgz",
-      "integrity": "sha512-bEVIIfK5mSQoG1R19qA+fJOvCB+0wVGGnXHT3smchBVahYBdlPn2OsZZKzlHWfb1E+PhLBmYfqB5zQXFP7hJig==",
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.1.5.tgz",
+      "integrity": "sha512-CGhsb0R5vE6mMNCoSfxHFD8QTvBHM51gs4DBeigTYHWnYv2V5YpJkC4rMo5qAAFifuUcc0+a8a3SIU0c9NrfNw==",
       "cpu": [
         "x64"
       ],
@@ -5726,9 +5996,9 @@
       ]
     },
     "node_modules/@lmdb/lmdb-linux-arm": {
-      "version": "3.0.13",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.13.tgz",
-      "integrity": "sha512-Yml1KlMzOnXj/tnW7yX8U78iAzTk39aILYvCPbqeewAq1kSzl+w59k/fiVkTBfvDi/oW/5YRxL+Fq+Y1Fr1r2Q==",
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.1.5.tgz",
+      "integrity": "sha512-3WeW328DN+xB5PZdhSWmqE+t3+44xWXEbqQ+caWJEZfOFdLp9yklBZEbVqVdqzznkoaXJYxTCp996KD6HmANeg==",
       "cpu": [
         "arm"
       ],
@@ -5740,9 +6010,9 @@
       ]
     },
     "node_modules/@lmdb/lmdb-linux-arm64": {
-      "version": "3.0.13",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.13.tgz",
-      "integrity": "sha512-afbVrsMgZ9dUTNUchFpj5VkmJRxvht/u335jUJ7o23YTbNbnpmXif3VKQGCtnjSh+CZaqm6N3CPG8KO3zwyZ1Q==",
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.1.5.tgz",
+      "integrity": "sha512-LAjaoOcBHGj6fiYB8ureiqPoph4eygbXu4vcOF+hsxiY74n8ilA7rJMmGUT0K0JOB5lmRQHSmor3mytRjS4qeQ==",
       "cpu": [
         "arm64"
       ],
@@ -5754,9 +6024,9 @@
       ]
     },
     "node_modules/@lmdb/lmdb-linux-x64": {
-      "version": "3.0.13",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.13.tgz",
-      "integrity": "sha512-vOtxu0xC0SLdQ2WRXg8Qgd8T32ak4SPqk5zjItRszrJk2BdeXqfGxBJbP7o4aOvSPSmSSv46Lr1EP4HXU8v7Kg==",
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.1.5.tgz",
+      "integrity": "sha512-k/IklElP70qdCXOQixclSl2GPLFiopynGoKX1FqDd1/H0E3Fo1oPwjY2rEVu+0nS3AOw1sryStdXk8CW3cVIsw==",
       "cpu": [
         "x64"
       ],
@@ -5768,9 +6038,9 @@
       ]
     },
     "node_modules/@lmdb/lmdb-win32-x64": {
-      "version": "3.0.13",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.13.tgz",
-      "integrity": "sha512-UCrMJQY/gJnOl3XgbWRZZUvGGBuKy6i0YNSptgMzHBjs+QYDYR1Mt/RLTOPy4fzzves65O1EDmlL//OzEqoLlA==",
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.1.5.tgz",
+      "integrity": "sha512-KYar6W8nraZfSJspcK7Kp7hdj238X/FNauYbZyrqPBrtsXI1hvI4/KcRcRGP50aQoV7fkKDyJERlrQGMGTZUsA==",
       "cpu": [
         "x64"
       ],
@@ -5981,77 +6251,382 @@
         "win32"
       ]
     },
-    "node_modules/@napi-rs/wasm-runtime": {
-      "version": "0.2.4",
-      "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz",
-      "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==",
+    "node_modules/@napi-rs/nice": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.1.tgz",
+      "integrity": "sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@emnapi/core": "^1.1.0",
-        "@emnapi/runtime": "^1.1.0",
-        "@tybys/wasm-util": "^0.9.0"
-      }
-    },
-    "node_modules/@ngtools/webpack": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.11.tgz",
-      "integrity": "sha512-iTdUGJ5O7yMm1DyCzyoMDMxBJ68emUSSXPWbQzEEdcqmtifRebn+VAq4vHN8OmtGM1mtuKeLEsbiZP8ywrw7Ug==",
+      "optional": true,
+      "engines": {
+        "node": ">= 10"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/Brooooooklyn"
+      },
+      "optionalDependencies": {
+        "@napi-rs/nice-android-arm-eabi": "1.0.1",
+        "@napi-rs/nice-android-arm64": "1.0.1",
+        "@napi-rs/nice-darwin-arm64": "1.0.1",
+        "@napi-rs/nice-darwin-x64": "1.0.1",
+        "@napi-rs/nice-freebsd-x64": "1.0.1",
+        "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1",
+        "@napi-rs/nice-linux-arm64-gnu": "1.0.1",
+        "@napi-rs/nice-linux-arm64-musl": "1.0.1",
+        "@napi-rs/nice-linux-ppc64-gnu": "1.0.1",
+        "@napi-rs/nice-linux-riscv64-gnu": "1.0.1",
+        "@napi-rs/nice-linux-s390x-gnu": "1.0.1",
+        "@napi-rs/nice-linux-x64-gnu": "1.0.1",
+        "@napi-rs/nice-linux-x64-musl": "1.0.1",
+        "@napi-rs/nice-win32-arm64-msvc": "1.0.1",
+        "@napi-rs/nice-win32-ia32-msvc": "1.0.1",
+        "@napi-rs/nice-win32-x64-msvc": "1.0.1"
+      }
+    },
+    "node_modules/@napi-rs/nice-android-arm-eabi": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz",
+      "integrity": "sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==",
+      "cpu": [
+        "arm"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
-        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
-        "yarn": ">= 1.13.0"
-      },
-      "peerDependencies": {
-        "@angular/compiler-cli": "^18.0.0",
-        "typescript": ">=5.4 <5.6",
-        "webpack": "^5.54.0"
+        "node": ">= 10"
       }
     },
-    "node_modules/@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+    "node_modules/@napi-rs/nice-android-arm64": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz",
+      "integrity": "sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      },
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": ">= 8"
+        "node": ">= 10"
       }
     },
-    "node_modules/@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+    "node_modules/@napi-rs/nice-darwin-arm64": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz",
+      "integrity": "sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": ">= 8"
+        "node": ">= 10"
       }
     },
-    "node_modules/@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+    "node_modules/@napi-rs/nice-darwin-x64": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz",
+      "integrity": "sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
-      },
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": ">= 8"
+        "node": ">= 10"
       }
     },
-    "node_modules/@npmcli/agent": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz",
-      "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==",
+    "node_modules/@napi-rs/nice-freebsd-x64": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz",
+      "integrity": "sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "ISC",
-      "dependencies": {
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@napi-rs/nice-linux-arm-gnueabihf": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz",
+      "integrity": "sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@napi-rs/nice-linux-arm64-gnu": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.1.tgz",
+      "integrity": "sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@napi-rs/nice-linux-arm64-musl": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.1.tgz",
+      "integrity": "sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@napi-rs/nice-linux-ppc64-gnu": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz",
+      "integrity": "sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@napi-rs/nice-linux-riscv64-gnu": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz",
+      "integrity": "sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@napi-rs/nice-linux-s390x-gnu": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz",
+      "integrity": "sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@napi-rs/nice-linux-x64-gnu": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz",
+      "integrity": "sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@napi-rs/nice-linux-x64-musl": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz",
+      "integrity": "sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@napi-rs/nice-win32-arm64-msvc": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz",
+      "integrity": "sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@napi-rs/nice-win32-ia32-msvc": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz",
+      "integrity": "sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@napi-rs/nice-win32-x64-msvc": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz",
+      "integrity": "sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@napi-rs/wasm-runtime": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz",
+      "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@emnapi/core": "^1.1.0",
+        "@emnapi/runtime": "^1.1.0",
+        "@tybys/wasm-util": "^0.9.0"
+      }
+    },
+    "node_modules/@ngtools/webpack": {
+      "version": "19.0.5",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.0.5.tgz",
+      "integrity": "sha512-T8BJQHbGySRkR4JYLcH3YIscbRJI/GNWidNHL5GzRG+3i8Z6XmR0KLTIEoZGaCLpTGR8hcCG5Lfj/uF5pa4Yww==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
+      },
+      "peerDependencies": {
+        "@angular/compiler-cli": "^19.0.0",
+        "typescript": ">=5.5 <5.7",
+        "webpack": "^5.54.0"
+      }
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@npmcli/agent": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz",
+      "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
         "agent-base": "^7.1.0",
         "http-proxy-agent": "^7.0.0",
         "https-proxy-agent": "^7.0.1",
@@ -6059,7 +6634,7 @@
         "socks-proxy-agent": "^8.0.3"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@npmcli/agent/node_modules/http-proxy-agent": {
@@ -6084,37 +6659,47 @@
       "license": "ISC"
     },
     "node_modules/@npmcli/fs": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz",
-      "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz",
+      "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
         "semver": "^7.3.5"
       },
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@npmcli/git": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz",
-      "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.1.tgz",
+      "integrity": "sha512-BBWMMxeQzalmKadyimwb2/VVQyJB01PH0HhVSNLHNBDZN/M/h/02P6f8fxedIiFhpMj11SO9Ep5tKTBE7zL2nw==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "@npmcli/promise-spawn": "^7.0.0",
-        "ini": "^4.1.3",
+        "@npmcli/promise-spawn": "^8.0.0",
+        "ini": "^5.0.0",
         "lru-cache": "^10.0.1",
-        "npm-pick-manifest": "^9.0.0",
-        "proc-log": "^4.0.0",
+        "npm-pick-manifest": "^10.0.0",
+        "proc-log": "^5.0.0",
         "promise-inflight": "^1.0.1",
         "promise-retry": "^2.0.1",
         "semver": "^7.3.5",
-        "which": "^4.0.0"
+        "which": "^5.0.0"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
+      }
+    },
+    "node_modules/@npmcli/git/node_modules/ini": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz",
+      "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@npmcli/git/node_modules/isexe": {
@@ -6135,9 +6720,9 @@
       "license": "ISC"
     },
     "node_modules/@npmcli/git/node_modules/which": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
-      "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz",
+      "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -6147,53 +6732,53 @@
         "node-which": "bin/which.js"
       },
       "engines": {
-        "node": "^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@npmcli/installed-package-contents": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz",
-      "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz",
+      "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "npm-bundled": "^3.0.0",
-        "npm-normalize-package-bin": "^3.0.0"
+        "npm-bundled": "^4.0.0",
+        "npm-normalize-package-bin": "^4.0.0"
       },
       "bin": {
         "installed-package-contents": "bin/index.js"
       },
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@npmcli/node-gyp": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz",
-      "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz",
+      "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==",
       "dev": true,
       "license": "ISC",
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@npmcli/package-json": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz",
-      "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.1.0.tgz",
+      "integrity": "sha512-t6G+6ZInT4X+tqj2i+wlLIeCKnKOTuz9/VFYDtj+TGTur5q7sp/OYrQA19LdBbWfXDOi0Y4jtedV6xtB8zQ9ug==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "@npmcli/git": "^5.0.0",
+        "@npmcli/git": "^6.0.0",
         "glob": "^10.2.2",
-        "hosted-git-info": "^7.0.0",
-        "json-parse-even-better-errors": "^3.0.0",
-        "normalize-package-data": "^6.0.0",
-        "proc-log": "^4.0.0",
+        "hosted-git-info": "^8.0.0",
+        "json-parse-even-better-errors": "^4.0.0",
+        "normalize-package-data": "^7.0.0",
+        "proc-log": "^5.0.0",
         "semver": "^7.5.3"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@npmcli/package-json/node_modules/glob": {
@@ -6218,16 +6803,16 @@
       }
     },
     "node_modules/@npmcli/package-json/node_modules/hosted-git-info": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
-      "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.2.tgz",
+      "integrity": "sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
         "lru-cache": "^10.0.1"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@npmcli/package-json/node_modules/jackspeak": {
@@ -6270,18 +6855,18 @@
       }
     },
     "node_modules/@npmcli/package-json/node_modules/normalize-package-data": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
-      "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-7.0.0.tgz",
+      "integrity": "sha512-k6U0gKRIuNCTkwHGZqblCfLfBRh+w1vI6tBo+IeJwq2M8FUiOqhX7GH+GArQGScA7azd1WfyRCvxoXDO3hQDIA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "hosted-git-info": "^7.0.0",
+        "hosted-git-info": "^8.0.0",
         "semver": "^7.3.5",
         "validate-npm-package-license": "^3.0.4"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@npmcli/package-json/node_modules/path-scurry": {
@@ -6302,16 +6887,16 @@
       }
     },
     "node_modules/@npmcli/promise-spawn": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz",
-      "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==",
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz",
+      "integrity": "sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "which": "^4.0.0"
+        "which": "^5.0.0"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@npmcli/promise-spawn/node_modules/isexe": {
@@ -6325,9 +6910,9 @@
       }
     },
     "node_modules/@npmcli/promise-spawn/node_modules/which": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
-      "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz",
+      "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -6337,35 +6922,35 @@
         "node-which": "bin/which.js"
       },
       "engines": {
-        "node": "^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@npmcli/redact": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz",
-      "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.0.0.tgz",
+      "integrity": "sha512-/1uFzjVcfzqrgCeGW7+SZ4hv0qLWmKXVzFahZGJ6QuJBj6Myt9s17+JL86i76NV9YSnJRcGXJYQbAU0rn1YTCQ==",
       "dev": true,
       "license": "ISC",
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@npmcli/run-script": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz",
-      "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==",
+      "version": "9.0.2",
+      "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.0.2.tgz",
+      "integrity": "sha512-cJXiUlycdizQwvqE1iaAb4VRUM3RX09/8q46zjvy+ct9GhfZRWd7jXYVc1tn/CfRlGPVkX/u4sstRlepsm7hfw==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "@npmcli/node-gyp": "^3.0.0",
-        "@npmcli/package-json": "^5.0.0",
-        "@npmcli/promise-spawn": "^7.0.0",
-        "node-gyp": "^10.0.0",
-        "proc-log": "^4.0.0",
-        "which": "^4.0.0"
+        "@npmcli/node-gyp": "^4.0.0",
+        "@npmcli/package-json": "^6.0.0",
+        "@npmcli/promise-spawn": "^8.0.0",
+        "node-gyp": "^11.0.0",
+        "proc-log": "^5.0.0",
+        "which": "^5.0.0"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@npmcli/run-script/node_modules/isexe": {
@@ -6379,9 +6964,9 @@
       }
     },
     "node_modules/@npmcli/run-script/node_modules/which": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
-      "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz",
+      "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -6391,7 +6976,7 @@
         "node-which": "bin/which.js"
       },
       "engines": {
-        "node": "^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@nrwl/cypress": {
@@ -6945,329 +7530,257 @@
         "yargs-parser": "21.1.1"
       }
     },
-    "node_modules/@phenomnomnominal/tsquery": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz",
-      "integrity": "sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA==",
+    "node_modules/@parcel/watcher": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz",
+      "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==",
       "dev": true,
+      "hasInstallScript": true,
       "license": "MIT",
+      "optional": true,
       "dependencies": {
-        "esquery": "^1.4.0"
+        "detect-libc": "^1.0.3",
+        "is-glob": "^4.0.3",
+        "micromatch": "^4.0.5",
+        "node-addon-api": "^7.0.0"
       },
-      "peerDependencies": {
-        "typescript": "^3 || ^4 || ^5"
-      }
-    },
-    "node_modules/@pkgjs/parseargs": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
-      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      },
+      "optionalDependencies": {
+        "@parcel/watcher-android-arm64": "2.5.0",
+        "@parcel/watcher-darwin-arm64": "2.5.0",
+        "@parcel/watcher-darwin-x64": "2.5.0",
+        "@parcel/watcher-freebsd-x64": "2.5.0",
+        "@parcel/watcher-linux-arm-glibc": "2.5.0",
+        "@parcel/watcher-linux-arm-musl": "2.5.0",
+        "@parcel/watcher-linux-arm64-glibc": "2.5.0",
+        "@parcel/watcher-linux-arm64-musl": "2.5.0",
+        "@parcel/watcher-linux-x64-glibc": "2.5.0",
+        "@parcel/watcher-linux-x64-musl": "2.5.0",
+        "@parcel/watcher-win32-arm64": "2.5.0",
+        "@parcel/watcher-win32-ia32": "2.5.0",
+        "@parcel/watcher-win32-x64": "2.5.0"
+      }
+    },
+    "node_modules/@parcel/watcher-android-arm64": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz",
+      "integrity": "sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
       "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": ">=14"
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/@pkgr/core": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
-      "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
+    "node_modules/@parcel/watcher-darwin-arm64": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz",
+      "integrity": "sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+        "node": ">= 10.0.0"
       },
       "funding": {
-        "url": "https://opencollective.com/unts"
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/@plotly/d3": {
-      "version": "3.8.2",
-      "resolved": "https://registry.npmjs.org/@plotly/d3/-/d3-3.8.2.tgz",
-      "integrity": "sha512-wvsNmh1GYjyJfyEBPKJLTMzgf2c2bEbSIL50lmqVUi+o1NHaLPi1Lb4v7VxXXJn043BhNyrxUrWI85Q+zmjOVA==",
-      "license": "BSD-3-Clause"
-    },
-    "node_modules/@plotly/d3-sankey": {
-      "version": "0.7.2",
-      "resolved": "https://registry.npmjs.org/@plotly/d3-sankey/-/d3-sankey-0.7.2.tgz",
-      "integrity": "sha512-2jdVos1N3mMp3QW0k2q1ph7Gd6j5PY1YihBrwpkFnKqO+cqtZq3AdEYUeSGXMeLsBDQYiqTVcihYfk8vr5tqhw==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-array": "1",
-        "d3-collection": "1",
-        "d3-shape": "^1.2.0"
+    "node_modules/@parcel/watcher-darwin-x64": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz",
+      "integrity": "sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/@plotly/d3-sankey-circular": {
-      "version": "0.33.1",
-      "resolved": "https://registry.npmjs.org/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz",
-      "integrity": "sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ==",
+    "node_modules/@parcel/watcher-freebsd-x64": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz",
+      "integrity": "sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "d3-array": "^1.2.1",
-        "d3-collection": "^1.0.4",
-        "d3-shape": "^1.2.0",
-        "elementary-circuits-directed-graph": "^1.0.4"
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/@plotly/d3-sankey-circular/node_modules/d3-array": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
-      "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
-      "license": "BSD-3-Clause"
-    },
-    "node_modules/@plotly/d3-sankey-circular/node_modules/d3-path": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
-      "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==",
-      "license": "BSD-3-Clause"
-    },
-    "node_modules/@plotly/d3-sankey-circular/node_modules/d3-shape": {
-      "version": "1.3.7",
-      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
-      "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-path": "1"
+    "node_modules/@parcel/watcher-linux-arm-glibc": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz",
+      "integrity": "sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/@plotly/d3-sankey/node_modules/d3-array": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
-      "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
-      "license": "BSD-3-Clause"
-    },
-    "node_modules/@plotly/d3-sankey/node_modules/d3-path": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
-      "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==",
-      "license": "BSD-3-Clause"
-    },
-    "node_modules/@plotly/d3-sankey/node_modules/d3-shape": {
-      "version": "1.3.7",
-      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
-      "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-path": "1"
+    "node_modules/@parcel/watcher-linux-arm-musl": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz",
+      "integrity": "sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/@plotly/mapbox-gl": {
-      "version": "1.13.4",
-      "resolved": "https://registry.npmjs.org/@plotly/mapbox-gl/-/mapbox-gl-1.13.4.tgz",
-      "integrity": "sha512-sR3/Pe5LqT/fhYgp4rT4aSFf1rTsxMbGiH6Hojc7PH36ny5Bn17iVFUjpzycafETURuFbLZUfjODO8LvSI+5zQ==",
-      "license": "SEE LICENSE IN LICENSE.txt",
-      "dependencies": {
-        "@mapbox/geojson-rewind": "^0.5.2",
-        "@mapbox/geojson-types": "^1.0.2",
-        "@mapbox/jsonlint-lines-primitives": "^2.0.2",
-        "@mapbox/mapbox-gl-supported": "^1.5.0",
-        "@mapbox/point-geometry": "^0.1.0",
-        "@mapbox/tiny-sdf": "^1.1.1",
-        "@mapbox/unitbezier": "^0.0.0",
-        "@mapbox/vector-tile": "^1.3.1",
-        "@mapbox/whoots-js": "^3.1.0",
-        "csscolorparser": "~1.0.3",
-        "earcut": "^2.2.2",
-        "geojson-vt": "^3.2.1",
-        "gl-matrix": "^3.2.1",
-        "grid-index": "^1.1.0",
-        "murmurhash-js": "^1.0.0",
-        "pbf": "^3.2.1",
-        "potpack": "^1.0.1",
-        "quickselect": "^2.0.0",
-        "rw": "^1.3.3",
-        "supercluster": "^7.1.0",
-        "tinyqueue": "^2.0.3",
-        "vt-pbf": "^3.1.1"
-      },
+    "node_modules/@parcel/watcher-linux-arm64-glibc": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz",
+      "integrity": "sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=6.4.0"
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/@plotly/point-cluster": {
-      "version": "3.1.9",
-      "resolved": "https://registry.npmjs.org/@plotly/point-cluster/-/point-cluster-3.1.9.tgz",
-      "integrity": "sha512-MwaI6g9scKf68Orpr1pHZ597pYx9uP8UEFXLPbsCmuw3a84obwz6pnMXGc90VhgDNeNiLEdlmuK7CPo+5PIxXw==",
+    "node_modules/@parcel/watcher-linux-arm64-musl": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz",
+      "integrity": "sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "array-bounds": "^1.0.1",
-        "binary-search-bounds": "^2.0.4",
-        "clamp": "^1.0.1",
-        "defined": "^1.0.0",
-        "dtype": "^2.0.0",
-        "flatten-vertex-data": "^1.0.2",
-        "is-obj": "^1.0.1",
-        "math-log2": "^1.0.1",
-        "parse-rect": "^1.2.0",
-        "pick-by-alias": "^1.2.0"
-      }
-    },
-    "node_modules/@polka/url": {
-      "version": "1.0.0-next.28",
-      "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz",
-      "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@rollup/plugin-json": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz",
-      "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@rollup/pluginutils": "^5.1.0"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      },
-      "peerDependencies": {
-        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
-      },
-      "peerDependenciesMeta": {
-        "rollup": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@rollup/plugin-node-resolve": {
-      "version": "15.3.0",
-      "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.0.tgz",
-      "integrity": "sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@rollup/pluginutils": "^5.0.1",
-        "@types/resolve": "1.20.2",
-        "deepmerge": "^4.2.2",
-        "is-module": "^1.0.0",
-        "resolve": "^1.22.1"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      },
-      "peerDependencies": {
-        "rollup": "^2.78.0||^3.0.0||^4.0.0"
-      },
-      "peerDependenciesMeta": {
-        "rollup": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@rollup/pluginutils": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz",
-      "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/estree": "^1.0.0",
-        "estree-walker": "^2.0.2",
-        "picomatch": "^4.0.2"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=14.0.0"
-      },
-      "peerDependencies": {
-        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+        "node": ">= 10.0.0"
       },
-      "peerDependenciesMeta": {
-        "rollup": {
-          "optional": true
-        }
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz",
-      "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz",
-      "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==",
+    "node_modules/@parcel/watcher-linux-x64-glibc": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz",
+      "integrity": "sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==",
       "cpu": [
-        "arm64"
+        "x64"
       ],
       "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz",
-      "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==",
-      "cpu": [
-        "arm64"
+        "linux"
       ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
     },
-    "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz",
-      "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==",
+    "node_modules/@parcel/watcher-linux-x64-musl": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz",
+      "integrity": "sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==",
       "cpu": [
         "x64"
       ],
       "dev": true,
       "license": "MIT",
       "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz",
-      "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
       "os": [
         "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz",
-      "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==",
-      "cpu": [
-        "arm"
       ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
     },
-    "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz",
-      "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==",
+    "node_modules/@parcel/watcher-win32-arm64": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz",
+      "integrity": "sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==",
       "cpu": [
         "arm64"
       ],
@@ -7275,293 +7788,700 @@
       "license": "MIT",
       "optional": true,
       "os": [
-        "linux"
-      ]
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
     },
-    "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz",
-      "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==",
+    "node_modules/@parcel/watcher-win32-ia32": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz",
+      "integrity": "sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==",
       "cpu": [
-        "arm64"
+        "ia32"
       ],
       "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
-        "linux"
-      ]
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
     },
-    "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz",
-      "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==",
+    "node_modules/@parcel/watcher-win32-x64": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz",
+      "integrity": "sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==",
       "cpu": [
-        "ppc64"
+        "x64"
       ],
       "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz",
-      "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==",
-      "cpu": [
-        "riscv64"
+        "win32"
       ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher/node_modules/detect-libc": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+      "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
       "dev": true,
-      "license": "MIT",
+      "license": "Apache-2.0",
       "optional": true,
-      "os": [
-        "linux"
-      ]
+      "bin": {
+        "detect-libc": "bin/detect-libc.js"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
     },
-    "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz",
-      "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==",
-      "cpu": [
-        "s390x"
-      ],
+    "node_modules/@parcel/watcher/node_modules/node-addon-api": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+      "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "optional": true
     },
-    "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz",
-      "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@phenomnomnominal/tsquery": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz",
+      "integrity": "sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "dependencies": {
+        "esquery": "^1.4.0"
+      },
+      "peerDependencies": {
+        "typescript": "^3 || ^4 || ^5"
+      }
     },
-    "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz",
-      "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@pkgjs/parseargs": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
       "dev": true,
       "license": "MIT",
       "optional": true,
-      "os": [
-        "linux"
-      ]
+      "engines": {
+        "node": ">=14"
+      }
     },
-    "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz",
-      "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@pkgr/core": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
+      "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz",
-      "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz",
-      "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/wasm-node": {
-      "version": "4.25.0",
-      "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.25.0.tgz",
-      "integrity": "sha512-Brhz6gK/43E9lpMkbcfg06hRHctpMkbmy1JzOU2JWub3teujTNqou1xWTQgt9CRu15WGTt78t7p7rNxGIBZv+g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/estree": "1.0.6"
-      },
-      "bin": {
-        "rollup": "dist/bin/rollup"
-      },
       "engines": {
-        "node": ">=18.0.0",
-        "npm": ">=8.0.0"
+        "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
       },
-      "optionalDependencies": {
-        "fsevents": "~2.3.2"
+      "funding": {
+        "url": "https://opencollective.com/unts"
       }
     },
-    "node_modules/@rtsao/scc": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
-      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
-      "dev": true,
-      "license": "MIT"
+    "node_modules/@plotly/d3": {
+      "version": "3.8.2",
+      "resolved": "https://registry.npmjs.org/@plotly/d3/-/d3-3.8.2.tgz",
+      "integrity": "sha512-wvsNmh1GYjyJfyEBPKJLTMzgf2c2bEbSIL50lmqVUi+o1NHaLPi1Lb4v7VxXXJn043BhNyrxUrWI85Q+zmjOVA==",
+      "license": "BSD-3-Clause"
     },
-    "node_modules/@schematics/angular": {
-      "version": "18.2.11",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.11.tgz",
-      "integrity": "sha512-jT54mc9+hPOwie9bji/g2krVuK1kkNh2PNFGwfgCg3Ofmt3hcyOBai1DKuot5uLTX4VCCbvfwiVR/hJniQl2SA==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@plotly/d3-sankey": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/@plotly/d3-sankey/-/d3-sankey-0.7.2.tgz",
+      "integrity": "sha512-2jdVos1N3mMp3QW0k2q1ph7Gd6j5PY1YihBrwpkFnKqO+cqtZq3AdEYUeSGXMeLsBDQYiqTVcihYfk8vr5tqhw==",
+      "license": "BSD-3-Clause",
       "dependencies": {
-        "@angular-devkit/core": "18.2.11",
-        "@angular-devkit/schematics": "18.2.11",
-        "jsonc-parser": "3.3.1"
-      },
-      "engines": {
-        "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
-        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
-        "yarn": ">= 1.13.0"
+        "d3-array": "1",
+        "d3-collection": "1",
+        "d3-shape": "^1.2.0"
       }
     },
-    "node_modules/@sigstore/bundle": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz",
-      "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==",
-      "dev": true,
-      "license": "Apache-2.0",
+    "node_modules/@plotly/d3-sankey-circular": {
+      "version": "0.33.1",
+      "resolved": "https://registry.npmjs.org/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz",
+      "integrity": "sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ==",
+      "license": "MIT",
       "dependencies": {
-        "@sigstore/protobuf-specs": "^0.3.2"
-      },
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "d3-array": "^1.2.1",
+        "d3-collection": "^1.0.4",
+        "d3-shape": "^1.2.0",
+        "elementary-circuits-directed-graph": "^1.0.4"
       }
     },
-    "node_modules/@sigstore/core": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz",
-      "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
+    "node_modules/@plotly/d3-sankey-circular/node_modules/d3-array": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
+      "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
+      "license": "BSD-3-Clause"
     },
-    "node_modules/@sigstore/protobuf-specs": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz",
-      "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+    "node_modules/@plotly/d3-sankey-circular/node_modules/d3-path": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+      "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@plotly/d3-sankey-circular/node_modules/d3-shape": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+      "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "d3-path": "1"
       }
     },
-    "node_modules/@sigstore/sign": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz",
-      "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==",
-      "dev": true,
-      "license": "Apache-2.0",
+    "node_modules/@plotly/d3-sankey/node_modules/d3-array": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
+      "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@plotly/d3-sankey/node_modules/d3-path": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+      "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@plotly/d3-sankey/node_modules/d3-shape": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+      "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+      "license": "BSD-3-Clause",
       "dependencies": {
-        "@sigstore/bundle": "^2.3.2",
-        "@sigstore/core": "^1.0.0",
-        "@sigstore/protobuf-specs": "^0.3.2",
-        "make-fetch-happen": "^13.0.1",
-        "proc-log": "^4.2.0",
-        "promise-retry": "^2.0.1"
-      },
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "d3-path": "1"
       }
     },
-    "node_modules/@sigstore/tuf": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz",
-      "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==",
-      "dev": true,
-      "license": "Apache-2.0",
+    "node_modules/@plotly/mapbox-gl": {
+      "version": "1.13.4",
+      "resolved": "https://registry.npmjs.org/@plotly/mapbox-gl/-/mapbox-gl-1.13.4.tgz",
+      "integrity": "sha512-sR3/Pe5LqT/fhYgp4rT4aSFf1rTsxMbGiH6Hojc7PH36ny5Bn17iVFUjpzycafETURuFbLZUfjODO8LvSI+5zQ==",
+      "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
-        "@sigstore/protobuf-specs": "^0.3.2",
-        "tuf-js": "^2.2.1"
+        "@mapbox/geojson-rewind": "^0.5.2",
+        "@mapbox/geojson-types": "^1.0.2",
+        "@mapbox/jsonlint-lines-primitives": "^2.0.2",
+        "@mapbox/mapbox-gl-supported": "^1.5.0",
+        "@mapbox/point-geometry": "^0.1.0",
+        "@mapbox/tiny-sdf": "^1.1.1",
+        "@mapbox/unitbezier": "^0.0.0",
+        "@mapbox/vector-tile": "^1.3.1",
+        "@mapbox/whoots-js": "^3.1.0",
+        "csscolorparser": "~1.0.3",
+        "earcut": "^2.2.2",
+        "geojson-vt": "^3.2.1",
+        "gl-matrix": "^3.2.1",
+        "grid-index": "^1.1.0",
+        "murmurhash-js": "^1.0.0",
+        "pbf": "^3.2.1",
+        "potpack": "^1.0.1",
+        "quickselect": "^2.0.0",
+        "rw": "^1.3.3",
+        "supercluster": "^7.1.0",
+        "tinyqueue": "^2.0.3",
+        "vt-pbf": "^3.1.1"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": ">=6.4.0"
       }
     },
-    "node_modules/@sigstore/verify": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz",
-      "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==",
-      "dev": true,
-      "license": "Apache-2.0",
+    "node_modules/@plotly/point-cluster": {
+      "version": "3.1.9",
+      "resolved": "https://registry.npmjs.org/@plotly/point-cluster/-/point-cluster-3.1.9.tgz",
+      "integrity": "sha512-MwaI6g9scKf68Orpr1pHZ597pYx9uP8UEFXLPbsCmuw3a84obwz6pnMXGc90VhgDNeNiLEdlmuK7CPo+5PIxXw==",
+      "license": "MIT",
       "dependencies": {
-        "@sigstore/bundle": "^2.3.2",
-        "@sigstore/core": "^1.1.0",
-        "@sigstore/protobuf-specs": "^0.3.2"
-      },
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "array-bounds": "^1.0.1",
+        "binary-search-bounds": "^2.0.4",
+        "clamp": "^1.0.1",
+        "defined": "^1.0.0",
+        "dtype": "^2.0.0",
+        "flatten-vertex-data": "^1.0.2",
+        "is-obj": "^1.0.1",
+        "math-log2": "^1.0.1",
+        "parse-rect": "^1.2.0",
+        "pick-by-alias": "^1.2.0"
       }
     },
-    "node_modules/@sinclair/typebox": {
-      "version": "0.27.8",
-      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
-      "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+    "node_modules/@polka/url": {
+      "version": "1.0.0-next.28",
+      "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz",
+      "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==",
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/@sindresorhus/merge-streams": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
-      "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
+    "node_modules/@rollup/plugin-json": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz",
+      "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "@rollup/pluginutils": "^5.1.0"
+      },
       "engines": {
-        "node": ">=18"
+        "node": ">=14.0.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "peerDependencies": {
+        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@sinonjs/commons": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
-      "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
+    "node_modules/@rollup/pluginutils": {
+      "version": "5.1.4",
+      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz",
+      "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==",
       "dev": true,
-      "license": "BSD-3-Clause",
+      "license": "MIT",
       "dependencies": {
-        "type-detect": "4.0.8"
+        "@types/estree": "^1.0.0",
+        "estree-walker": "^2.0.2",
+        "picomatch": "^4.0.2"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@sinonjs/fake-timers": {
-      "version": "10.3.0",
-      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
-      "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
+    "node_modules/@rollup/rollup-android-arm-eabi": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.26.0.tgz",
+      "integrity": "sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@rollup/rollup-android-arm64": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.26.0.tgz",
+      "integrity": "sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@rollup/rollup-darwin-arm64": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.26.0.tgz",
+      "integrity": "sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@rollup/rollup-darwin-x64": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.26.0.tgz",
+      "integrity": "sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@rollup/rollup-freebsd-arm64": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.26.0.tgz",
+      "integrity": "sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-freebsd-x64": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.26.0.tgz",
+      "integrity": "sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.26.0.tgz",
+      "integrity": "sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.26.0.tgz",
+      "integrity": "sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm64-gnu": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.26.0.tgz",
+      "integrity": "sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm64-musl": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.26.0.tgz",
+      "integrity": "sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.26.0.tgz",
+      "integrity": "sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.26.0.tgz",
+      "integrity": "sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-s390x-gnu": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.26.0.tgz",
+      "integrity": "sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-gnu": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.26.0.tgz",
+      "integrity": "sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-musl": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.26.0.tgz",
+      "integrity": "sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-arm64-msvc": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.26.0.tgz",
+      "integrity": "sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-ia32-msvc": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.26.0.tgz",
+      "integrity": "sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-x64-msvc": {
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.26.0.tgz",
+      "integrity": "sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/wasm-node": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.28.1.tgz",
+      "integrity": "sha512-t4ckEC09V3wbe0r6T4fGjq85lEbvGcGxn7QYYgjHyKNzZaQU5kFqr4FsavXYHRiVNYq8m+dRhdGjpfcC9UzzPg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "1.0.6"
+      },
+      "bin": {
+        "rollup": "dist/bin/rollup"
+      },
+      "engines": {
+        "node": ">=18.0.0",
+        "npm": ">=8.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/@rtsao/scc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@schematics/angular": {
+      "version": "19.0.5",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.0.5.tgz",
+      "integrity": "sha512-4nBJZF8HvSdj/RoyIixAfOuKEQaEBsEBtohIow8iHX1wcLax558d70O/ZM6EOh2FQxmEaxUe1x4KwBQIha8RxA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@angular-devkit/core": "19.0.5",
+        "@angular-devkit/schematics": "19.0.5",
+        "jsonc-parser": "3.3.1"
+      },
+      "engines": {
+        "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
+      }
+    },
+    "node_modules/@sigstore/bundle": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.0.0.tgz",
+      "integrity": "sha512-XDUYX56iMPAn/cdgh/DTJxz5RWmqKV4pwvUAEKEWJl+HzKdCd/24wUa9JYNMlDSCb7SUHAdtksxYX779Nne/Zg==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@sigstore/protobuf-specs": "^0.3.2"
+      },
+      "engines": {
+        "node": "^18.17.0 || >=20.5.0"
+      }
+    },
+    "node_modules/@sigstore/core": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz",
+      "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.17.0 || >=20.5.0"
+      }
+    },
+    "node_modules/@sigstore/protobuf-specs": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz",
+      "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^16.14.0 || >=18.0.0"
+      }
+    },
+    "node_modules/@sigstore/sign": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.0.0.tgz",
+      "integrity": "sha512-UjhDMQOkyDoktpXoc5YPJpJK6IooF2gayAr5LvXI4EL7O0vd58okgfRcxuaH+YTdhvb5aa1Q9f+WJ0c2sVuYIw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@sigstore/bundle": "^3.0.0",
+        "@sigstore/core": "^2.0.0",
+        "@sigstore/protobuf-specs": "^0.3.2",
+        "make-fetch-happen": "^14.0.1",
+        "proc-log": "^5.0.0",
+        "promise-retry": "^2.0.1"
+      },
+      "engines": {
+        "node": "^18.17.0 || >=20.5.0"
+      }
+    },
+    "node_modules/@sigstore/tuf": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.0.0.tgz",
+      "integrity": "sha512-9Xxy/8U5OFJu7s+OsHzI96IX/OzjF/zj0BSSaWhgJgTqtlBhQIV2xdrQI5qxLD7+CWWDepadnXAxzaZ3u9cvRw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@sigstore/protobuf-specs": "^0.3.2",
+        "tuf-js": "^3.0.1"
+      },
+      "engines": {
+        "node": "^18.17.0 || >=20.5.0"
+      }
+    },
+    "node_modules/@sigstore/verify": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.0.0.tgz",
+      "integrity": "sha512-Ggtq2GsJuxFNUvQzLoXqRwS4ceRfLAJnrIHUDrzAD0GgnOhwujJkKkxM/s5Bako07c3WtAs/sZo5PJq7VHjeDg==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@sigstore/bundle": "^3.0.0",
+        "@sigstore/core": "^2.0.0",
+        "@sigstore/protobuf-specs": "^0.3.2"
+      },
+      "engines": {
+        "node": "^18.17.0 || >=20.5.0"
+      }
+    },
+    "node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+      "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@sindresorhus/merge-streams": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+      "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@sinonjs/commons": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+      "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "type-detect": "4.0.8"
+      }
+    },
+    "node_modules/@sinonjs/fake-timers": {
+      "version": "10.3.0",
+      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
+      "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
       "dev": true,
       "license": "BSD-3-Clause",
       "dependencies": {
@@ -7663,17 +8583,17 @@
       }
     },
     "node_modules/@tufjs/models": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz",
-      "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz",
+      "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@tufjs/canonical-json": "2.0.0",
-        "minimatch": "^9.0.4"
+        "minimatch": "^9.0.5"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/@tufjs/models/node_modules/minimatch": {
@@ -7910,7 +8830,6 @@
       "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
       "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@types/estree": "*",
         "@types/json-schema": "*"
@@ -7921,7 +8840,6 @@
       "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
       "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@types/eslint": "*",
         "@types/estree": "*"
@@ -7947,9 +8865,9 @@
       }
     },
     "node_modules/@types/express-serve-static-core": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz",
-      "integrity": "sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==",
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz",
+      "integrity": "sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8124,16 +9042,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/@types/mute-stream": {
-      "version": "0.0.4",
-      "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz",
-      "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
     "node_modules/@types/node": {
       "version": "20.17.6",
       "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
@@ -8193,13 +9101,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/@types/resolve": {
-      "version": "1.20.2",
-      "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
-      "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/@types/retry": {
       "version": "0.12.2",
       "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz",
@@ -8322,13 +9223,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/@types/wrap-ansi": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz",
-      "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/@types/ws": {
       "version": "8.5.13",
       "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz",
@@ -9184,16 +10078,6 @@
         "acorn-walk": "^8.0.2"
       }
     },
-    "node_modules/acorn-import-attributes": {
-      "version": "1.9.5",
-      "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
-      "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
-      "dev": true,
-      "license": "MIT",
-      "peerDependencies": {
-        "acorn": "^8"
-      }
-    },
     "node_modules/acorn-jsx": {
       "version": "5.3.2",
       "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -9257,14 +10141,11 @@
       }
     },
     "node_modules/agent-base": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
-      "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+      "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "debug": "^4.3.4"
-      },
       "engines": {
         "node": ">= 14"
       }
@@ -10257,7 +11138,6 @@
       "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==",
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "find-cache-dir": "^4.0.0",
         "schema-utils": "^4.0.0"
@@ -10561,6 +11441,43 @@
       "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==",
       "license": "MIT"
     },
+    "node_modules/beasties": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.1.0.tgz",
+      "integrity": "sha512-+Ssscd2gVG24qRNC+E2g88D+xsQW4xwakWtKAiGEQ3Pw54/FGdyo9RrfxhGhEv6ilFVbB7r3Lgx+QnAxnSpECw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "css-select": "^5.1.0",
+        "css-what": "^6.1.0",
+        "dom-serializer": "^2.0.0",
+        "domhandler": "^5.0.3",
+        "htmlparser2": "^9.0.0",
+        "picocolors": "^1.1.1",
+        "postcss": "^8.4.47",
+        "postcss-media-query-parser": "^0.2.3"
+      }
+    },
+    "node_modules/beasties/node_modules/htmlparser2": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz",
+      "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==",
+      "dev": true,
+      "funding": [
+        "https://github.com/fb55/htmlparser2?sponsor=1",
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fb55"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.3",
+        "domutils": "^3.1.0",
+        "entities": "^4.5.0"
+      }
+    },
     "node_modules/big.js": {
       "version": "5.2.2",
       "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
@@ -10719,9 +11636,9 @@
       }
     },
     "node_modules/bonjour-service": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz",
-      "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==",
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz",
+      "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -10890,13 +11807,13 @@
       }
     },
     "node_modules/cacache": {
-      "version": "18.0.4",
-      "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz",
-      "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==",
+      "version": "19.0.1",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz",
+      "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "@npmcli/fs": "^3.1.0",
+        "@npmcli/fs": "^4.0.0",
         "fs-minipass": "^3.0.0",
         "glob": "^10.2.2",
         "lru-cache": "^10.0.1",
@@ -10904,13 +11821,23 @@
         "minipass-collect": "^2.0.1",
         "minipass-flush": "^1.0.5",
         "minipass-pipeline": "^1.2.4",
-        "p-map": "^4.0.0",
-        "ssri": "^10.0.0",
-        "tar": "^6.1.11",
-        "unique-filename": "^3.0.0"
+        "p-map": "^7.0.2",
+        "ssri": "^12.0.0",
+        "tar": "^7.4.3",
+        "unique-filename": "^4.0.0"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
+      }
+    },
+    "node_modules/cacache/node_modules/chownr": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
+      "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "engines": {
+        "node": ">=18"
       }
     },
     "node_modules/cacache/node_modules/glob": {
@@ -10973,6 +11900,35 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/cacache/node_modules/mkdirp": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
+      "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "mkdirp": "dist/cjs/src/bin.js"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/cacache/node_modules/p-map": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz",
+      "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/cacache/node_modules/path-scurry": {
       "version": "1.11.1",
       "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
@@ -10990,6 +11946,34 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/cacache/node_modules/tar": {
+      "version": "7.4.3",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz",
+      "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "@isaacs/fs-minipass": "^4.0.0",
+        "chownr": "^3.0.0",
+        "minipass": "^7.1.2",
+        "minizlib": "^3.0.1",
+        "mkdirp": "^3.0.1",
+        "yallist": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/cacache/node_modules/yallist": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
+      "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/cachedir": {
       "version": "2.4.0",
       "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz",
@@ -11198,39 +12182,18 @@
       }
     },
     "node_modules/chokidar": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
-      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz",
+      "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==",
       "license": "MIT",
       "dependencies": {
-        "anymatch": "~3.1.2",
-        "braces": "~3.0.2",
-        "glob-parent": "~5.1.2",
-        "is-binary-path": "~2.1.0",
-        "is-glob": "~4.0.1",
-        "normalize-path": "~3.0.0",
-        "readdirp": "~3.6.0"
+        "readdirp": "^4.0.1"
       },
       "engines": {
-        "node": ">= 8.10.0"
+        "node": ">= 14.16.0"
       },
       "funding": {
         "url": "https://paulmillr.com/funding/"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.2"
-      }
-    },
-    "node_modules/chokidar/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "license": "ISC",
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
       }
     },
     "node_modules/chownr": {
@@ -11741,6 +12704,16 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/compression/node_modules/negotiator": {
+      "version": "0.6.4",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
+      "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -12064,23 +13037,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/critters": {
-      "version": "0.0.24",
-      "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz",
-      "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==",
-      "deprecated": "Ownership of Critters has moved to the Nuxt team, who will be maintaining the project going forward. If you'd like to keep using Critters, please switch to the actively-maintained fork at https://github.com/danielroe/beasties",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "chalk": "^4.1.0",
-        "css-select": "^5.1.0",
-        "dom-serializer": "^2.0.0",
-        "domhandler": "^5.0.2",
-        "htmlparser2": "^8.0.2",
-        "postcss": "^8.4.23",
-        "postcss-media-query-parser": "^0.2.3"
-      }
-    },
     "node_modules/cross-spawn": {
       "version": "7.0.5",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz",
@@ -13236,81 +14192,14 @@
       "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz",
       "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
       "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/default-gateway": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
-      "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "execa": "^5.0.0"
-      },
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/default-gateway/node_modules/execa": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
-      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "cross-spawn": "^7.0.3",
-        "get-stream": "^6.0.0",
-        "human-signals": "^2.1.0",
-        "is-stream": "^2.0.0",
-        "merge-stream": "^2.0.0",
-        "npm-run-path": "^4.0.1",
-        "onetime": "^5.1.2",
-        "signal-exit": "^3.0.3",
-        "strip-final-newline": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sindresorhus/execa?sponsor=1"
-      }
-    },
-    "node_modules/default-gateway/node_modules/get-stream": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
-      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/default-gateway/node_modules/human-signals": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
-      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
-      "dev": true,
-      "license": "Apache-2.0",
+      "license": "MIT",
       "engines": {
-        "node": ">=10.17.0"
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/default-gateway/node_modules/signal-exit": {
-      "version": "3.0.7",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-      "dev": true,
-      "license": "ISC"
-    },
     "node_modules/defaults": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
@@ -13449,6 +14338,7 @@
       "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
       "dev": true,
       "license": "Apache-2.0",
+      "optional": true,
       "engines": {
         "node": ">=8"
       }
@@ -14212,6 +15102,7 @@
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
+      "optional": true,
       "bin": {
         "esbuild": "bin/esbuild"
       },
@@ -14246,9 +15137,9 @@
       }
     },
     "node_modules/esbuild-wasm": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.23.0.tgz",
-      "integrity": "sha512-6jP8UmWy6R6TUUV8bMuC3ZyZ6lZKI56x0tkxyCIqWwRRJ/DgeQKneh/Oid5EoGoPFLrGNkz47ZEtWAYuiY/u9g==",
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.24.0.tgz",
+      "integrity": "sha512-xhNn5tL1AhkPg4ft59yXT6FkwKXiPSYyz1IeinJHUJpjvOHOIPvdmFQc0pGdjxlKSbzZc2mNmtVOWAR1EF/JAg==",
       "dev": true,
       "license": "MIT",
       "bin": {
@@ -15190,9 +16081,9 @@
       "license": "Apache-2.0"
     },
     "node_modules/express": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
-      "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
+      "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -15215,7 +16106,7 @@
         "methods": "~1.1.2",
         "on-finished": "2.4.1",
         "parseurl": "~1.3.3",
-        "path-to-regexp": "0.1.10",
+        "path-to-regexp": "0.1.12",
         "proxy-addr": "~2.0.7",
         "qs": "6.13.0",
         "range-parser": "~1.2.1",
@@ -15230,6 +16121,10 @@
       },
       "engines": {
         "node": ">= 0.10.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/express"
       }
     },
     "node_modules/express/node_modules/debug": {
@@ -17853,16 +18748,16 @@
       }
     },
     "node_modules/ignore-walk": {
-      "version": "6.0.5",
-      "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz",
-      "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz",
+      "integrity": "sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
         "minimatch": "^9.0.0"
       },
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/image-size": {
@@ -17880,9 +18775,9 @@
       }
     },
     "node_modules/immutable": {
-      "version": "4.3.7",
-      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
-      "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz",
+      "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==",
       "dev": true,
       "license": "MIT"
     },
@@ -18457,13 +19352,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/is-lambda": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
-      "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/is-map": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
@@ -18482,13 +19370,6 @@
       "integrity": "sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew==",
       "license": "MIT"
     },
-    "node_modules/is-module": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
-      "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/is-negative-zero": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
@@ -20052,16 +20933,15 @@
       }
     },
     "node_modules/jsesc": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
-      "dev": true,
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+      "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
       "license": "MIT",
       "bin": {
         "jsesc": "bin/jsesc"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=6"
       }
     },
     "node_modules/json-buffer": {
@@ -20072,13 +20952,13 @@
       "license": "MIT"
     },
     "node_modules/json-parse-even-better-errors": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
-      "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz",
+      "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/json-schema": {
@@ -20398,55 +21278,293 @@
       "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz",
       "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==",
       "dev": true,
-      "license": "ISC",
+      "license": "ISC",
+      "dependencies": {
+        "webpack-sources": "^3.0.0"
+      },
+      "peerDependenciesMeta": {
+        "webpack": {
+          "optional": true
+        },
+        "webpack-sources": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/lil-gui": {
+      "version": "0.17.0",
+      "resolved": "https://registry.npmjs.org/lil-gui/-/lil-gui-0.17.0.tgz",
+      "integrity": "sha512-MVBHmgY+uEbmJNApAaPbtvNh1RCAeMnKym82SBjtp5rODTYKWtM+MXHCifLe2H2Ti1HuBGBtK/5SyG4ShQ3pUQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lines-and-columns": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz",
+      "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
+    "node_modules/listr2": {
+      "version": "8.2.5",
+      "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz",
+      "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cli-truncate": "^4.0.0",
+        "colorette": "^2.0.20",
+        "eventemitter3": "^5.0.1",
+        "log-update": "^6.1.0",
+        "rfdc": "^1.4.1",
+        "wrap-ansi": "^9.0.0"
+      },
+      "engines": {
+        "node": ">=18.0.0"
+      }
+    },
+    "node_modules/listr2/node_modules/ansi-regex": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
+    },
+    "node_modules/listr2/node_modules/ansi-styles": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/listr2/node_modules/emoji-regex": {
+      "version": "10.4.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
+      "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/listr2/node_modules/eventemitter3": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+      "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/listr2/node_modules/string-width": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+      "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^10.3.0",
+        "get-east-asian-width": "^1.0.0",
+        "strip-ansi": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/listr2/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
+    "node_modules/listr2/node_modules/wrap-ansi": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
+      "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^6.2.1",
+        "string-width": "^7.0.0",
+        "strip-ansi": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/lmdb": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.1.5.tgz",
+      "integrity": "sha512-46Mch5Drq+A93Ss3gtbg+Xuvf5BOgIuvhKDWoGa3HcPHI6BL2NCOkRdSx1D4VfzwrxhnsjbyIVsLRlQHu6URvw==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "msgpackr": "^1.11.2",
+        "node-addon-api": "^6.1.0",
+        "node-gyp-build-optional-packages": "5.2.2",
+        "ordered-binary": "^1.5.3",
+        "weak-lru-cache": "^1.2.2"
+      },
+      "bin": {
+        "download-lmdb-prebuilds": "bin/download-prebuilds.js"
+      },
+      "optionalDependencies": {
+        "@lmdb/lmdb-darwin-arm64": "3.1.5",
+        "@lmdb/lmdb-darwin-x64": "3.1.5",
+        "@lmdb/lmdb-linux-arm": "3.1.5",
+        "@lmdb/lmdb-linux-arm64": "3.1.5",
+        "@lmdb/lmdb-linux-x64": "3.1.5",
+        "@lmdb/lmdb-win32-x64": "3.1.5"
+      }
+    },
+    "node_modules/loader-runner": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+      "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.11.5"
+      }
+    },
+    "node_modules/loader-utils": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz",
+      "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 12.13.0"
+      }
+    },
+    "node_modules/locate-path": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-locate": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "license": "MIT"
+    },
+    "node_modules/lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+      "license": "MIT"
+    },
+    "node_modules/lodash.memoize": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+      "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lodash.merge": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+      "license": "MIT"
+    },
+    "node_modules/lodash.once": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+      "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/log-symbols": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+      "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+      "license": "MIT",
       "dependencies": {
-        "webpack-sources": "^3.0.0"
+        "chalk": "^4.1.0",
+        "is-unicode-supported": "^0.1.0"
       },
-      "peerDependenciesMeta": {
-        "webpack": {
-          "optional": true
-        },
-        "webpack-sources": {
-          "optional": true
-        }
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/lil-gui": {
-      "version": "0.17.0",
-      "resolved": "https://registry.npmjs.org/lil-gui/-/lil-gui-0.17.0.tgz",
-      "integrity": "sha512-MVBHmgY+uEbmJNApAaPbtvNh1RCAeMnKym82SBjtp5rODTYKWtM+MXHCifLe2H2Ti1HuBGBtK/5SyG4ShQ3pUQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/lines-and-columns": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz",
-      "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==",
+    "node_modules/log-update": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz",
+      "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "ansi-escapes": "^7.0.0",
+        "cli-cursor": "^5.0.0",
+        "slice-ansi": "^7.1.0",
+        "strip-ansi": "^7.1.0",
+        "wrap-ansi": "^9.0.0"
+      },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/listr2": {
-      "version": "8.2.4",
-      "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz",
-      "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==",
+    "node_modules/log-update/node_modules/ansi-escapes": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz",
+      "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "cli-truncate": "^4.0.0",
-        "colorette": "^2.0.20",
-        "eventemitter3": "^5.0.1",
-        "log-update": "^6.1.0",
-        "rfdc": "^1.4.1",
-        "wrap-ansi": "^9.0.0"
+        "environment": "^1.0.0"
       },
       "engines": {
-        "node": ">=18.0.0"
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/listr2/node_modules/ansi-regex": {
+    "node_modules/log-update/node_modules/ansi-regex": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
       "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
@@ -20459,7 +21577,7 @@
         "url": "https://github.com/chalk/ansi-regex?sponsor=1"
       }
     },
-    "node_modules/listr2/node_modules/ansi-styles": {
+    "node_modules/log-update/node_modules/ansi-styles": {
       "version": "6.2.1",
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
       "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
@@ -20472,21 +21590,96 @@
         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/listr2/node_modules/emoji-regex": {
+    "node_modules/log-update/node_modules/cli-cursor": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
+      "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "restore-cursor": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/log-update/node_modules/emoji-regex": {
       "version": "10.4.0",
       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
       "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/listr2/node_modules/eventemitter3": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
-      "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+    "node_modules/log-update/node_modules/is-fullwidth-code-point": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz",
+      "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "dependencies": {
+        "get-east-asian-width": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "node_modules/listr2/node_modules/string-width": {
+    "node_modules/log-update/node_modules/onetime": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
+      "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mimic-function": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/log-update/node_modules/restore-cursor": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
+      "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "onetime": "^7.0.0",
+        "signal-exit": "^4.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/log-update/node_modules/slice-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz",
+      "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^6.2.1",
+        "is-fullwidth-code-point": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+      }
+    },
+    "node_modules/log-update/node_modules/string-width": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
       "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
@@ -20504,7 +21697,7 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/listr2/node_modules/strip-ansi": {
+    "node_modules/log-update/node_modules/strip-ansi": {
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
       "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
@@ -20520,7 +21713,7 @@
         "url": "https://github.com/chalk/strip-ansi?sponsor=1"
       }
     },
-    "node_modules/listr2/node_modules/wrap-ansi": {
+    "node_modules/log-update/node_modules/wrap-ansi": {
       "version": "9.0.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
       "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
@@ -20532,1423 +21725,1590 @@
         "strip-ansi": "^7.1.0"
       },
       "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/loglevel": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz",
+      "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6.0"
+      },
+      "funding": {
+        "type": "tidelift",
+        "url": "https://tidelift.com/funding/github/npm/loglevel"
+      }
+    },
+    "node_modules/loglevel-plugin-prefix": {
+      "version": "0.8.4",
+      "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz",
+      "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==",
+      "license": "MIT"
+    },
+    "node_modules/lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "node_modules/lunr": {
+      "version": "2.3.9",
+      "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
+      "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
+      "license": "MIT"
+    },
+    "node_modules/macos-release": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz",
+      "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.30.11",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
+      "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0"
+      }
+    },
+    "node_modules/make-dir": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+      "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "semver": "^7.5.3"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/make-error": {
+      "version": "1.3.6",
+      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+      "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/make-fetch-happen": {
+      "version": "14.0.3",
+      "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz",
+      "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "@npmcli/agent": "^3.0.0",
+        "cacache": "^19.0.1",
+        "http-cache-semantics": "^4.1.1",
+        "minipass": "^7.0.2",
+        "minipass-fetch": "^4.0.0",
+        "minipass-flush": "^1.0.5",
+        "minipass-pipeline": "^1.2.4",
+        "negotiator": "^1.0.0",
+        "proc-log": "^5.0.0",
+        "promise-retry": "^2.0.1",
+        "ssri": "^12.0.0"
+      },
+      "engines": {
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
-    "node_modules/lmdb": {
-      "version": "3.0.13",
-      "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.0.13.tgz",
-      "integrity": "sha512-UGe+BbaSUQtAMZobTb4nHvFMrmvuAQKSeaqAX2meTEQjfsbpl5sxdHD8T72OnwD4GU9uwNhYXIVe4QGs8N9Zyw==",
+    "node_modules/makeerror": {
+      "version": "1.0.12",
+      "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+      "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
       "dev": true,
-      "hasInstallScript": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "tmpl": "1.0.5"
+      }
+    },
+    "node_modules/map-limit": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz",
+      "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==",
       "license": "MIT",
       "dependencies": {
-        "msgpackr": "^1.10.2",
-        "node-addon-api": "^6.1.0",
-        "node-gyp-build-optional-packages": "5.2.2",
-        "ordered-binary": "^1.4.1",
-        "weak-lru-cache": "^1.2.2"
-      },
-      "bin": {
-        "download-lmdb-prebuilds": "bin/download-prebuilds.js"
-      },
-      "optionalDependencies": {
-        "@lmdb/lmdb-darwin-arm64": "3.0.13",
-        "@lmdb/lmdb-darwin-x64": "3.0.13",
-        "@lmdb/lmdb-linux-arm": "3.0.13",
-        "@lmdb/lmdb-linux-arm64": "3.0.13",
-        "@lmdb/lmdb-linux-x64": "3.0.13",
-        "@lmdb/lmdb-win32-x64": "3.0.13"
+        "once": "~1.3.0"
       }
     },
-    "node_modules/loader-runner": {
+    "node_modules/map-limit/node_modules/once": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+      "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==",
+      "license": "ISC",
+      "dependencies": {
+        "wrappy": "1"
+      }
+    },
+    "node_modules/map-obj": {
       "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
-      "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+      "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+      "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=6.11.5"
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/loader-utils": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz",
-      "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/map-stream": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz",
+      "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==",
+      "license": "MIT"
+    },
+    "node_modules/mapbox-gl": {
+      "version": "1.13.3",
+      "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.13.3.tgz",
+      "integrity": "sha512-p8lJFEiqmEQlyv+DQxFAOG/XPWN0Wp7j/Psq93Zywz7qt9CcUKFYDBOoOEKzqe6gudHVJY8/Bhqw6VDpX2lSBg==",
+      "license": "SEE LICENSE IN LICENSE.txt",
+      "peer": true,
+      "dependencies": {
+        "@mapbox/geojson-rewind": "^0.5.2",
+        "@mapbox/geojson-types": "^1.0.2",
+        "@mapbox/jsonlint-lines-primitives": "^2.0.2",
+        "@mapbox/mapbox-gl-supported": "^1.5.0",
+        "@mapbox/point-geometry": "^0.1.0",
+        "@mapbox/tiny-sdf": "^1.1.1",
+        "@mapbox/unitbezier": "^0.0.0",
+        "@mapbox/vector-tile": "^1.3.1",
+        "@mapbox/whoots-js": "^3.1.0",
+        "csscolorparser": "~1.0.3",
+        "earcut": "^2.2.2",
+        "geojson-vt": "^3.2.1",
+        "gl-matrix": "^3.2.1",
+        "grid-index": "^1.1.0",
+        "murmurhash-js": "^1.0.0",
+        "pbf": "^3.2.1",
+        "potpack": "^1.0.1",
+        "quickselect": "^2.0.0",
+        "rw": "^1.3.3",
+        "supercluster": "^7.1.0",
+        "tinyqueue": "^2.0.3",
+        "vt-pbf": "^3.1.1"
+      },
       "engines": {
-        "node": ">= 12.13.0"
+        "node": ">=6.4.0"
       }
     },
-    "node_modules/locate-path": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
-      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/maplibre-gl": {
+      "version": "4.7.1",
+      "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.1.tgz",
+      "integrity": "sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA==",
+      "license": "BSD-3-Clause",
       "dependencies": {
-        "p-locate": "^5.0.0"
+        "@mapbox/geojson-rewind": "^0.5.2",
+        "@mapbox/jsonlint-lines-primitives": "^2.0.2",
+        "@mapbox/point-geometry": "^0.1.0",
+        "@mapbox/tiny-sdf": "^2.0.6",
+        "@mapbox/unitbezier": "^0.0.1",
+        "@mapbox/vector-tile": "^1.3.1",
+        "@mapbox/whoots-js": "^3.1.0",
+        "@maplibre/maplibre-gl-style-spec": "^20.3.1",
+        "@types/geojson": "^7946.0.14",
+        "@types/geojson-vt": "3.2.5",
+        "@types/mapbox__point-geometry": "^0.1.4",
+        "@types/mapbox__vector-tile": "^1.3.4",
+        "@types/pbf": "^3.0.5",
+        "@types/supercluster": "^7.1.3",
+        "earcut": "^3.0.0",
+        "geojson-vt": "^4.0.2",
+        "gl-matrix": "^3.4.3",
+        "global-prefix": "^4.0.0",
+        "kdbush": "^4.0.2",
+        "murmurhash-js": "^1.0.0",
+        "pbf": "^3.3.0",
+        "potpack": "^2.0.0",
+        "quickselect": "^3.0.0",
+        "supercluster": "^8.0.1",
+        "tinyqueue": "^3.0.0",
+        "vt-pbf": "^3.1.3"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=16.14.0",
+        "npm": ">=8.1.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1"
       }
     },
-    "node_modules/lodash": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
-      "license": "MIT"
+    "node_modules/maplibre-gl/node_modules/@mapbox/tiny-sdf": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz",
+      "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==",
+      "license": "BSD-2-Clause"
     },
-    "node_modules/lodash.debounce": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
-      "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
-      "license": "MIT"
+    "node_modules/maplibre-gl/node_modules/@mapbox/unitbezier": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz",
+      "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==",
+      "license": "BSD-2-Clause"
     },
-    "node_modules/lodash.memoize": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
-      "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
-      "dev": true,
-      "license": "MIT"
+    "node_modules/maplibre-gl/node_modules/earcut": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.0.tgz",
+      "integrity": "sha512-41Fs7Q/PLq1SDbqjsgcY7GA42T0jvaCNGXgGtsNdvg+Yv8eIu06bxv4/PoREkZ9nMDNwnUSG9OFB9+yv8eKhDg==",
+      "license": "ISC"
     },
-    "node_modules/lodash.merge": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "license": "MIT"
+    "node_modules/maplibre-gl/node_modules/geojson-vt": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz",
+      "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==",
+      "license": "ISC"
     },
-    "node_modules/lodash.once": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
-      "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
-      "dev": true,
-      "license": "MIT"
+    "node_modules/maplibre-gl/node_modules/potpack": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz",
+      "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==",
+      "license": "ISC"
     },
-    "node_modules/log-symbols": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
-      "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
-      "license": "MIT",
+    "node_modules/maplibre-gl/node_modules/quickselect": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz",
+      "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==",
+      "license": "ISC"
+    },
+    "node_modules/maplibre-gl/node_modules/supercluster": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz",
+      "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==",
+      "license": "ISC",
       "dependencies": {
-        "chalk": "^4.1.0",
-        "is-unicode-supported": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "kdbush": "^4.0.2"
       }
     },
-    "node_modules/log-update": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz",
-      "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==",
-      "dev": true,
+    "node_modules/maplibre-gl/node_modules/tinyqueue": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz",
+      "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==",
+      "license": "ISC"
+    },
+    "node_modules/marked": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/marked/-/marked-7.0.3.tgz",
+      "integrity": "sha512-ev2uM40p0zQ/GbvqotfKcSWEa59fJwluGZj5dcaUOwDRrB1F3dncdXy8NWUApk4fi8atU3kTBOwjyjZ0ud0dxw==",
       "license": "MIT",
-      "dependencies": {
-        "ansi-escapes": "^7.0.0",
-        "cli-cursor": "^5.0.0",
-        "slice-ansi": "^7.1.0",
-        "strip-ansi": "^7.1.0",
-        "wrap-ansi": "^9.0.0"
+      "bin": {
+        "marked": "bin/marked.js"
       },
       "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">= 16"
+      }
+    },
+    "node_modules/matches-selector": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/matches-selector/-/matches-selector-1.2.0.tgz",
+      "integrity": "sha512-c4vLwYWyl+Ji+U43eU/G5FwxWd4ZH0ePUsFs5y0uwD9HUEFBXUQ1zUUan+78IpRD+y4pUfG0nAzNM292K7ItvA==",
+      "license": "MIT"
+    },
+    "node_modules/math-log2": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz",
+      "integrity": "sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/log-update/node_modules/ansi-escapes": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz",
-      "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==",
+    "node_modules/md5": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
+      "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
       "dev": true,
-      "license": "MIT",
+      "license": "BSD-3-Clause",
       "dependencies": {
-        "environment": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "charenc": "0.0.2",
+        "crypt": "0.0.2",
+        "is-buffer": "~1.1.6"
       }
     },
-    "node_modules/log-update/node_modules/ansi-regex": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
-      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+    "node_modules/media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+        "node": ">= 0.6"
       }
     },
-    "node_modules/log-update/node_modules/ansi-styles": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
-      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+    "node_modules/memfs": {
+      "version": "4.15.0",
+      "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.15.0.tgz",
+      "integrity": "sha512-q9MmZXd2rRWHS6GU3WEm3HyiXZyyoA1DqdOhEq0lxPBmKb5S7IAOwX0RgUCwJfqjelDCySa5h8ujOy24LqsWcw==",
       "dev": true,
-      "license": "MIT",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@jsonjoy.com/json-pack": "^1.0.3",
+        "@jsonjoy.com/util": "^1.3.0",
+        "tree-dump": "^1.0.1",
+        "tslib": "^2.0.0"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">= 4.0.0"
       },
       "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+        "type": "github",
+        "url": "https://github.com/sponsors/streamich"
       }
     },
-    "node_modules/log-update/node_modules/cli-cursor": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
-      "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
+    "node_modules/meow": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
+      "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "restore-cursor": "^5.0.0"
+        "@types/minimist": "^1.2.0",
+        "camelcase-keys": "^6.2.2",
+        "decamelize": "^1.2.0",
+        "decamelize-keys": "^1.1.0",
+        "hard-rejection": "^2.1.0",
+        "minimist-options": "4.1.0",
+        "normalize-package-data": "^3.0.0",
+        "read-pkg-up": "^7.0.1",
+        "redent": "^3.0.0",
+        "trim-newlines": "^3.0.0",
+        "type-fest": "^0.18.0",
+        "yargs-parser": "^20.2.3"
       },
       "engines": {
-        "node": ">=18"
+        "node": ">=10"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/log-update/node_modules/emoji-regex": {
-      "version": "10.4.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
-      "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/log-update/node_modules/is-fullwidth-code-point": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz",
-      "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==",
+    "node_modules/meow/node_modules/type-fest": {
+      "version": "0.18.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+      "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "get-east-asian-width": "^1.0.0"
-      },
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
-        "node": ">=18"
+        "node": ">=10"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/log-update/node_modules/onetime": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
-      "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
+    "node_modules/meow/node_modules/yargs-parser": {
+      "version": "20.2.9",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "mimic-function": "^5.0.0"
-      },
+      "license": "ISC",
       "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=10"
       }
     },
-    "node_modules/log-update/node_modules/restore-cursor": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
-      "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
+    "node_modules/merge-descriptors": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+      "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "onetime": "^7.0.0",
-        "signal-exit": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/log-update/node_modules/slice-ansi": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz",
-      "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==",
-      "dev": true,
+    "node_modules/merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+      "license": "MIT"
+    },
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
       "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^6.2.1",
-        "is-fullwidth-code-point": "^5.0.0"
-      },
       "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+        "node": ">= 8"
       }
     },
-    "node_modules/log-update/node_modules/string-width": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
-      "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+    "node_modules/methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^10.3.0",
-        "get-east-asian-width": "^1.0.0",
-        "strip-ansi": "^7.1.0"
-      },
       "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">= 0.6"
       }
     },
-    "node_modules/log-update/node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
-      "dev": true,
+    "node_modules/micromatch": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
       "license": "MIT",
       "dependencies": {
-        "ansi-regex": "^6.0.1"
+        "braces": "^3.0.3",
+        "picomatch": "^2.3.1"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/micromatch/node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
       },
       "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+        "url": "https://github.com/sponsors/jonschlinkert"
       }
     },
-    "node_modules/log-update/node_modules/wrap-ansi": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
-      "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
+    "node_modules/mime": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+      "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^6.2.1",
-        "string-width": "^7.0.0",
-        "strip-ansi": "^7.1.0"
+      "bin": {
+        "mime": "cli.js"
       },
       "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+        "node": ">=4.0.0"
       }
     },
-    "node_modules/loglevel": {
-      "version": "1.9.2",
-      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz",
-      "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==",
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
       "license": "MIT",
       "engines": {
-        "node": ">= 0.6.0"
-      },
-      "funding": {
-        "type": "tidelift",
-        "url": "https://tidelift.com/funding/github/npm/loglevel"
+        "node": ">= 0.6"
       }
     },
-    "node_modules/loglevel-plugin-prefix": {
-      "version": "0.8.4",
-      "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz",
-      "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==",
-      "license": "MIT"
-    },
-    "node_modules/lru-cache": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
-      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
-      "license": "ISC",
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "license": "MIT",
       "dependencies": {
-        "yallist": "^3.0.2"
-      }
-    },
-    "node_modules/lunr": {
-      "version": "2.3.9",
-      "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
-      "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
-      "license": "MIT"
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
-    "node_modules/macos-release": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz",
-      "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==",
+    "node_modules/mimic-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
       "license": "MIT",
       "engines": {
         "node": ">=6"
+      }
+    },
+    "node_modules/mimic-function": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
+      "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/magic-string": {
-      "version": "0.30.11",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
-      "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
+    "node_modules/min-indent": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+      "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@jridgewell/sourcemap-codec": "^1.5.0"
+      "engines": {
+        "node": ">=4"
       }
     },
-    "node_modules/make-dir": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
-      "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+    "node_modules/mini-css-extract-plugin": {
+      "version": "2.9.2",
+      "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz",
+      "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "semver": "^7.5.3"
+        "schema-utils": "^4.0.0",
+        "tapable": "^2.2.1"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">= 12.13.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.0.0"
       }
     },
-    "node_modules/make-error": {
-      "version": "1.3.6",
-      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
-      "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+    "node_modules/minimalistic-assert": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
       "dev": true,
       "license": "ISC"
     },
-    "node_modules/make-fetch-happen": {
-      "version": "13.0.1",
-      "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz",
-      "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==",
+    "node_modules/minimatch": {
+      "version": "9.0.3",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+      "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "@npmcli/agent": "^2.0.0",
-        "cacache": "^18.0.0",
-        "http-cache-semantics": "^4.1.1",
-        "is-lambda": "^1.0.1",
-        "minipass": "^7.0.2",
-        "minipass-fetch": "^3.0.0",
-        "minipass-flush": "^1.0.5",
-        "minipass-pipeline": "^1.2.4",
-        "negotiator": "^0.6.3",
-        "proc-log": "^4.2.0",
-        "promise-retry": "^2.0.1",
-        "ssri": "^10.0.0"
+        "brace-expansion": "^2.0.1"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
-    },
-    "node_modules/makeerror": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
-      "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "tmpl": "1.0.5"
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/map-limit": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz",
-      "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==",
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
       "license": "MIT",
-      "dependencies": {
-        "once": "~1.3.0"
-      }
-    },
-    "node_modules/map-limit/node_modules/once": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
-      "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==",
-      "license": "ISC",
-      "dependencies": {
-        "wrappy": "1"
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/map-obj": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
-      "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+    "node_modules/minimist-options": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+      "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/map-stream": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz",
-      "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==",
-      "license": "MIT"
-    },
-    "node_modules/mapbox-gl": {
-      "version": "1.13.3",
-      "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.13.3.tgz",
-      "integrity": "sha512-p8lJFEiqmEQlyv+DQxFAOG/XPWN0Wp7j/Psq93Zywz7qt9CcUKFYDBOoOEKzqe6gudHVJY8/Bhqw6VDpX2lSBg==",
-      "license": "SEE LICENSE IN LICENSE.txt",
-      "peer": true,
-      "dependencies": {
-        "@mapbox/geojson-rewind": "^0.5.2",
-        "@mapbox/geojson-types": "^1.0.2",
-        "@mapbox/jsonlint-lines-primitives": "^2.0.2",
-        "@mapbox/mapbox-gl-supported": "^1.5.0",
-        "@mapbox/point-geometry": "^0.1.0",
-        "@mapbox/tiny-sdf": "^1.1.1",
-        "@mapbox/unitbezier": "^0.0.0",
-        "@mapbox/vector-tile": "^1.3.1",
-        "@mapbox/whoots-js": "^3.1.0",
-        "csscolorparser": "~1.0.3",
-        "earcut": "^2.2.2",
-        "geojson-vt": "^3.2.1",
-        "gl-matrix": "^3.2.1",
-        "grid-index": "^1.1.0",
-        "murmurhash-js": "^1.0.0",
-        "pbf": "^3.2.1",
-        "potpack": "^1.0.1",
-        "quickselect": "^2.0.0",
-        "rw": "^1.3.3",
-        "supercluster": "^7.1.0",
-        "tinyqueue": "^2.0.3",
-        "vt-pbf": "^3.1.1"
-      },
-      "engines": {
-        "node": ">=6.4.0"
-      }
-    },
-    "node_modules/maplibre-gl": {
-      "version": "4.7.1",
-      "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.1.tgz",
-      "integrity": "sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA==",
-      "license": "BSD-3-Clause",
       "dependencies": {
-        "@mapbox/geojson-rewind": "^0.5.2",
-        "@mapbox/jsonlint-lines-primitives": "^2.0.2",
-        "@mapbox/point-geometry": "^0.1.0",
-        "@mapbox/tiny-sdf": "^2.0.6",
-        "@mapbox/unitbezier": "^0.0.1",
-        "@mapbox/vector-tile": "^1.3.1",
-        "@mapbox/whoots-js": "^3.1.0",
-        "@maplibre/maplibre-gl-style-spec": "^20.3.1",
-        "@types/geojson": "^7946.0.14",
-        "@types/geojson-vt": "3.2.5",
-        "@types/mapbox__point-geometry": "^0.1.4",
-        "@types/mapbox__vector-tile": "^1.3.4",
-        "@types/pbf": "^3.0.5",
-        "@types/supercluster": "^7.1.3",
-        "earcut": "^3.0.0",
-        "geojson-vt": "^4.0.2",
-        "gl-matrix": "^3.4.3",
-        "global-prefix": "^4.0.0",
-        "kdbush": "^4.0.2",
-        "murmurhash-js": "^1.0.0",
-        "pbf": "^3.3.0",
-        "potpack": "^2.0.0",
-        "quickselect": "^3.0.0",
-        "supercluster": "^8.0.1",
-        "tinyqueue": "^3.0.0",
-        "vt-pbf": "^3.1.3"
+        "arrify": "^1.0.1",
+        "is-plain-obj": "^1.1.0",
+        "kind-of": "^6.0.3"
       },
       "engines": {
-        "node": ">=16.14.0",
-        "npm": ">=8.1.0"
-      },
-      "funding": {
-        "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1"
+        "node": ">= 6"
       }
     },
-    "node_modules/maplibre-gl/node_modules/@mapbox/tiny-sdf": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz",
-      "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==",
-      "license": "BSD-2-Clause"
-    },
-    "node_modules/maplibre-gl/node_modules/@mapbox/unitbezier": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz",
-      "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==",
-      "license": "BSD-2-Clause"
-    },
-    "node_modules/maplibre-gl/node_modules/earcut": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.0.tgz",
-      "integrity": "sha512-41Fs7Q/PLq1SDbqjsgcY7GA42T0jvaCNGXgGtsNdvg+Yv8eIu06bxv4/PoREkZ9nMDNwnUSG9OFB9+yv8eKhDg==",
-      "license": "ISC"
-    },
-    "node_modules/maplibre-gl/node_modules/geojson-vt": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz",
-      "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==",
-      "license": "ISC"
-    },
-    "node_modules/maplibre-gl/node_modules/potpack": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz",
-      "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==",
-      "license": "ISC"
-    },
-    "node_modules/maplibre-gl/node_modules/quickselect": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz",
-      "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==",
-      "license": "ISC"
-    },
-    "node_modules/maplibre-gl/node_modules/supercluster": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz",
-      "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==",
+    "node_modules/minipass": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+      "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
       "license": "ISC",
-      "dependencies": {
-        "kdbush": "^4.0.2"
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
       }
     },
-    "node_modules/maplibre-gl/node_modules/tinyqueue": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz",
-      "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==",
-      "license": "ISC"
-    },
-    "node_modules/marked": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/marked/-/marked-7.0.3.tgz",
-      "integrity": "sha512-ev2uM40p0zQ/GbvqotfKcSWEa59fJwluGZj5dcaUOwDRrB1F3dncdXy8NWUApk4fi8atU3kTBOwjyjZ0ud0dxw==",
-      "license": "MIT",
-      "bin": {
-        "marked": "bin/marked.js"
+    "node_modules/minipass-collect": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz",
+      "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^7.0.3"
       },
       "engines": {
-        "node": ">= 16"
+        "node": ">=16 || 14 >=14.17"
       }
     },
-    "node_modules/matches-selector": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/matches-selector/-/matches-selector-1.2.0.tgz",
-      "integrity": "sha512-c4vLwYWyl+Ji+U43eU/G5FwxWd4ZH0ePUsFs5y0uwD9HUEFBXUQ1zUUan+78IpRD+y4pUfG0nAzNM292K7ItvA==",
-      "license": "MIT"
-    },
-    "node_modules/math-log2": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz",
-      "integrity": "sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==",
+    "node_modules/minipass-fetch": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.0.tgz",
+      "integrity": "sha512-2v6aXUXwLP1Epd/gc32HAMIWoczx+fZwEPRHm/VwtrJzRGwR1qGZXEYV3Zp8ZjjbwaZhMrM6uHV4KVkk+XCc2w==",
+      "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "minipass": "^7.0.3",
+        "minipass-sized": "^1.0.3",
+        "minizlib": "^3.0.1"
+      },
       "engines": {
-        "node": ">=0.10.0"
+        "node": "^18.17.0 || >=20.5.0"
+      },
+      "optionalDependencies": {
+        "encoding": "^0.1.13"
       }
     },
-    "node_modules/md5": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
-      "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
+    "node_modules/minipass-flush": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+      "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
       "dev": true,
-      "license": "BSD-3-Clause",
+      "license": "ISC",
       "dependencies": {
-        "charenc": "0.0.2",
-        "crypt": "0.0.2",
-        "is-buffer": "~1.1.6"
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "node_modules/media-typer": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
-      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+    "node_modules/minipass-flush/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
       "engines": {
-        "node": ">= 0.6"
+        "node": ">=8"
       }
     },
-    "node_modules/memfs": {
-      "version": "4.14.0",
-      "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.0.tgz",
-      "integrity": "sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==",
+    "node_modules/minipass-flush/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "ISC"
+    },
+    "node_modules/minipass-pipeline": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+      "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+      "dev": true,
+      "license": "ISC",
       "dependencies": {
-        "@jsonjoy.com/json-pack": "^1.0.3",
-        "@jsonjoy.com/util": "^1.3.0",
-        "tree-dump": "^1.0.1",
-        "tslib": "^2.0.0"
+        "minipass": "^3.0.0"
       },
       "engines": {
-        "node": ">= 4.0.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/streamich"
+        "node": ">=8"
       }
     },
-    "node_modules/meow": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
-      "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+    "node_modules/minipass-pipeline/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "@types/minimist": "^1.2.0",
-        "camelcase-keys": "^6.2.2",
-        "decamelize": "^1.2.0",
-        "decamelize-keys": "^1.1.0",
-        "hard-rejection": "^2.1.0",
-        "minimist-options": "4.1.0",
-        "normalize-package-data": "^3.0.0",
-        "read-pkg-up": "^7.0.1",
-        "redent": "^3.0.0",
-        "trim-newlines": "^3.0.0",
-        "type-fest": "^0.18.0",
-        "yargs-parser": "^20.2.3"
+        "yallist": "^4.0.0"
       },
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=8"
       }
     },
-    "node_modules/meow/node_modules/type-fest": {
-      "version": "0.18.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
-      "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+    "node_modules/minipass-pipeline/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
       "dev": true,
-      "license": "(MIT OR CC0-1.0)",
-      "engines": {
-        "node": ">=10"
+      "license": "ISC"
+    },
+    "node_modules/minipass-sized": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+      "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^3.0.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "engines": {
+        "node": ">=8"
       }
     },
-    "node_modules/meow/node_modules/yargs-parser": {
-      "version": "20.2.9",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
-      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+    "node_modules/minipass-sized/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
       "dev": true,
       "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
       "engines": {
-        "node": ">=10"
+        "node": ">=8"
       }
     },
-    "node_modules/merge-descriptors": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
-      "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+    "node_modules/minipass-sized/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/minizlib": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz",
+      "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==",
       "dev": true,
       "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "dependencies": {
+        "minipass": "^7.0.4",
+        "rimraf": "^5.0.5"
+      },
+      "engines": {
+        "node": ">= 18"
       }
     },
-    "node_modules/merge-stream": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-      "license": "MIT"
+    "node_modules/minizlib/node_modules/glob": {
+      "version": "10.4.5",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^3.1.2",
+        "minimatch": "^9.0.4",
+        "minipass": "^7.1.2",
+        "package-json-from-dist": "^1.0.0",
+        "path-scurry": "^1.11.1"
+      },
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
     },
-    "node_modules/merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 8"
+    "node_modules/minizlib/node_modules/jackspeak": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "@isaacs/cliui": "^8.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      },
+      "optionalDependencies": {
+        "@pkgjs/parseargs": "^0.11.0"
       }
     },
-    "node_modules/methods": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
-      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+    "node_modules/minizlib/node_modules/lru-cache": {
+      "version": "10.4.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC"
+    },
+    "node_modules/minizlib/node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
       "engines": {
-        "node": ">= 0.6"
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/micromatch": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
-      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
-      "license": "MIT",
+    "node_modules/minizlib/node_modules/path-scurry": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
       "dependencies": {
-        "braces": "^3.0.3",
-        "picomatch": "^2.3.1"
+        "lru-cache": "^10.2.0",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
       },
       "engines": {
-        "node": ">=8.6"
+        "node": ">=16 || 14 >=14.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/micromatch/node_modules/picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=8.6"
+    "node_modules/minizlib/node_modules/rimraf": {
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
+      "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "glob": "^10.3.7"
+      },
+      "bin": {
+        "rimraf": "dist/esm/bin.mjs"
       },
       "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/mime": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
-      "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
+    "node_modules/mkdirp": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
       "dev": true,
       "license": "MIT",
       "bin": {
-        "mime": "cli.js"
+        "mkdirp": "bin/cmd.js"
       },
       "engines": {
-        "node": ">=4.0.0"
+        "node": ">=10"
       }
     },
-    "node_modules/mime-db": {
-      "version": "1.52.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+    "node_modules/moment": {
+      "version": "2.30.1",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
+      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
       "license": "MIT",
       "engines": {
-        "node": ">= 0.6"
+        "node": "*"
       }
     },
-    "node_modules/mime-types": {
-      "version": "2.1.35",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
-      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+    "node_modules/morgan": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
+      "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
       "license": "MIT",
       "dependencies": {
-        "mime-db": "1.52.0"
+        "basic-auth": "~2.0.1",
+        "debug": "2.6.9",
+        "depd": "~2.0.0",
+        "on-finished": "~2.3.0",
+        "on-headers": "~1.0.2"
       },
       "engines": {
-        "node": ">= 0.6"
+        "node": ">= 0.8.0"
       }
     },
-    "node_modules/mimic-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+    "node_modules/morgan/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
       "license": "MIT",
-      "engines": {
-        "node": ">=6"
+      "dependencies": {
+        "ms": "2.0.0"
       }
     },
-    "node_modules/mimic-function": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
-      "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
-      "dev": true,
+    "node_modules/morgan/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "license": "MIT"
+    },
+    "node_modules/mouse-change": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/mouse-change/-/mouse-change-1.4.0.tgz",
+      "integrity": "sha512-vpN0s+zLL2ykyyUDh+fayu9Xkor5v/zRD9jhSqjRS1cJTGS0+oakVZzNm5n19JvvEj0you+MXlYTpNxUDQUjkQ==",
       "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "dependencies": {
+        "mouse-event": "^1.0.0"
       }
     },
-    "node_modules/min-indent": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
-      "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+    "node_modules/mouse-event": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/mouse-event/-/mouse-event-1.0.5.tgz",
+      "integrity": "sha512-ItUxtL2IkeSKSp9cyaX2JLUuKk2uMoxBg4bbOWVd29+CskYJR9BGsUqtXenNzKbnDshvupjUewDIYVrOB6NmGw==",
+      "license": "MIT"
+    },
+    "node_modules/mouse-event-offset": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz",
+      "integrity": "sha512-s9sqOs5B1Ykox3Xo8b3Ss2IQju4UwlW6LSR+Q5FXWpprJ5fzMLefIIItr3PH8RwzfGy6gxs/4GAmiNuZScE25w==",
+      "license": "MIT"
+    },
+    "node_modules/mouse-wheel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/mouse-wheel/-/mouse-wheel-1.2.0.tgz",
+      "integrity": "sha512-+OfYBiUOCTWcTECES49neZwL5AoGkXE+lFjIvzwNCnYRlso+EnfvovcBxGoyQ0yQt806eSPjS675K0EwWknXmw==",
+      "license": "MIT",
+      "dependencies": {
+        "right-now": "^1.0.0",
+        "signum": "^1.0.0",
+        "to-px": "^1.0.1"
+      }
+    },
+    "node_modules/mri": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+      "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
       "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">=4"
       }
     },
-    "node_modules/mini-css-extract-plugin": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz",
-      "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==",
+    "node_modules/mrmime": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz",
+      "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "schema-utils": "^4.0.0",
-        "tapable": "^2.2.1"
-      },
       "engines": {
-        "node": ">= 12.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependencies": {
-        "webpack": "^5.0.0"
+        "node": ">=10"
       }
     },
-    "node_modules/minimalistic-assert": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
-      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
-      "dev": true,
-      "license": "ISC"
+    "node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "license": "MIT"
     },
-    "node_modules/minimatch": {
-      "version": "9.0.3",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
-      "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+    "node_modules/msgpackr": {
+      "version": "1.11.2",
+      "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.2.tgz",
+      "integrity": "sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==",
       "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/minimist": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
-      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
       "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "optional": true,
+      "optionalDependencies": {
+        "msgpackr-extract": "^3.0.2"
       }
     },
-    "node_modules/minimist-options": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
-      "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+    "node_modules/msgpackr-extract": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz",
+      "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==",
       "dev": true,
+      "hasInstallScript": true,
       "license": "MIT",
+      "optional": true,
       "dependencies": {
-        "arrify": "^1.0.1",
-        "is-plain-obj": "^1.1.0",
-        "kind-of": "^6.0.3"
+        "node-gyp-build-optional-packages": "5.2.2"
       },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/minipass": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
-      "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
-      "license": "ISC",
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      }
-    },
-    "node_modules/minipass-collect": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz",
-      "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "minipass": "^7.0.3"
+      "bin": {
+        "download-msgpackr-prebuilds": "bin/download-prebuilds.js"
       },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
+      "optionalDependencies": {
+        "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3",
+        "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3",
+        "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3",
+        "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3",
+        "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3",
+        "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3"
       }
     },
-    "node_modules/minipass-fetch": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz",
-      "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==",
+    "node_modules/multicast-dns": {
+      "version": "7.2.5",
+      "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
+      "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "minipass": "^7.0.3",
-        "minipass-sized": "^1.0.3",
-        "minizlib": "^2.1.2"
-      },
-      "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "dns-packet": "^5.2.2",
+        "thunky": "^1.0.2"
       },
-      "optionalDependencies": {
-        "encoding": "^0.1.13"
+      "bin": {
+        "multicast-dns": "cli.js"
+      }
+    },
+    "node_modules/mumath": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmjs.org/mumath/-/mumath-3.3.4.tgz",
+      "integrity": "sha512-VAFIOG6rsxoc7q/IaY3jdjmrsuX9f15KlRLYTHmixASBZkZEKC1IFqE2BC5CdhXmK6WLM1Re33z//AGmeRI6FA==",
+      "deprecated": "Redundant dependency in your project.",
+      "license": "Unlicense",
+      "dependencies": {
+        "almost-equal": "^1.1.0"
       }
     },
-    "node_modules/minipass-flush": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
-      "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+    "node_modules/murmurhash-js": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz",
+      "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==",
+      "license": "MIT"
+    },
+    "node_modules/mute-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz",
+      "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==",
       "dev": true,
       "license": "ISC",
-      "dependencies": {
-        "minipass": "^3.0.0"
-      },
       "engines": {
-        "node": ">= 8"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
-    "node_modules/minipass-flush/node_modules/minipass": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "yallist": "^4.0.0"
+    "node_modules/nanoid": {
+      "version": "3.3.7",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
       },
       "engines": {
-        "node": ">=8"
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
       }
     },
-    "node_modules/minipass-flush/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+    "node_modules/native-promise-only": {
+      "version": "0.8.1",
+      "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+      "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==",
+      "license": "MIT"
+    },
+    "node_modules/natural-compare": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
       "dev": true,
-      "license": "ISC"
+      "license": "MIT"
     },
-    "node_modules/minipass-pipeline": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
-      "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+    "node_modules/natural-compare-lite": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+      "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
       "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "minipass": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
+      "license": "MIT"
+    },
+    "node_modules/ncp": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
+      "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "ncp": "bin/ncp"
       }
     },
-    "node_modules/minipass-pipeline/node_modules/minipass": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+    "node_modules/needle": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz",
+      "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
+      "optional": true,
       "dependencies": {
-        "yallist": "^4.0.0"
+        "iconv-lite": "^0.6.3",
+        "sax": "^1.2.4"
+      },
+      "bin": {
+        "needle": "bin/needle"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">= 4.4.x"
       }
     },
-    "node_modules/minipass-pipeline/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+    "node_modules/needle/node_modules/sax": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
+      "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
       "dev": true,
-      "license": "ISC"
+      "license": "ISC",
+      "optional": true
     },
-    "node_modules/minipass-sized": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
-      "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+    "node_modules/negotiator": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
+      "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
       "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "minipass": "^3.0.0"
-      },
+      "license": "MIT",
       "engines": {
-        "node": ">=8"
+        "node": ">= 0.6"
       }
     },
-    "node_modules/minipass-sized/node_modules/minipass": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
+    "node_modules/neo-async": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+      "license": "MIT"
+    },
+    "node_modules/neotraverse": {
+      "version": "0.6.18",
+      "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz",
+      "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==",
+      "license": "MIT",
       "engines": {
-        "node": ">=8"
+        "node": ">= 10"
       }
     },
-    "node_modules/minipass-sized/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true,
+    "node_modules/next-tick": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
+      "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
       "license": "ISC"
     },
-    "node_modules/minizlib": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
-      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+    "node_modules/ng-packagr": {
+      "version": "19.0.1",
+      "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-19.0.1.tgz",
+      "integrity": "sha512-PnXa/y3ce3v4bKJNtUBS7qcNoyv5g/tSthoMe23NyMV5kjNY4+hJT7h64zK+8tnJWTelCbIpoep7tmSPsOifBA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "minipass": "^3.0.0",
-        "yallist": "^4.0.0"
+        "@rollup/plugin-json": "^6.1.0",
+        "@rollup/wasm-node": "^4.24.0",
+        "ajv": "^8.17.1",
+        "ansi-colors": "^4.1.3",
+        "browserslist": "^4.22.1",
+        "chokidar": "^4.0.1",
+        "commander": "^12.1.0",
+        "convert-source-map": "^2.0.0",
+        "dependency-graph": "^1.0.0",
+        "esbuild": "^0.24.0",
+        "fast-glob": "^3.3.2",
+        "find-cache-dir": "^3.3.2",
+        "injection-js": "^2.4.0",
+        "jsonc-parser": "^3.3.1",
+        "less": "^4.2.0",
+        "ora": "^5.1.0",
+        "piscina": "^4.7.0",
+        "postcss": "^8.4.47",
+        "rxjs": "^7.8.1",
+        "sass": "^1.79.5"
+      },
+      "bin": {
+        "ng-packagr": "cli/main.js"
       },
       "engines": {
-        "node": ">= 8"
+        "node": "^18.19.1 || >=20.11.1"
+      },
+      "optionalDependencies": {
+        "rollup": "^4.24.0"
+      },
+      "peerDependencies": {
+        "@angular/compiler-cli": "^19.0.0-next.0",
+        "tailwindcss": "^2.0.0 || ^3.0.0",
+        "tslib": "^2.3.0",
+        "typescript": ">=5.5 <5.7"
+      },
+      "peerDependenciesMeta": {
+        "tailwindcss": {
+          "optional": true
+        }
       }
     },
-    "node_modules/minizlib/node_modules/minipass": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+    "node_modules/ng-packagr/node_modules/@esbuild/aix-ppc64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz",
+      "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==",
+      "cpu": [
+        "ppc64"
+      ],
       "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "aix"
+      ],
       "engines": {
-        "node": ">=8"
+        "node": ">=18"
       }
     },
-    "node_modules/minizlib/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+    "node_modules/ng-packagr/node_modules/@esbuild/android-arm": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz",
+      "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==",
+      "cpu": [
+        "arm"
+      ],
       "dev": true,
-      "license": "ISC"
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
     },
-    "node_modules/mkdirp": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+    "node_modules/ng-packagr/node_modules/@esbuild/android-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz",
+      "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
-      "bin": {
-        "mkdirp": "bin/cmd.js"
-      },
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": ">=10"
+        "node": ">=18"
       }
     },
-    "node_modules/moment": {
-      "version": "2.30.1",
-      "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
-      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
+    "node_modules/ng-packagr/node_modules/@esbuild/android-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz",
+      "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": "*"
+        "node": ">=18"
       }
     },
-    "node_modules/morgan": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
-      "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
+    "node_modules/ng-packagr/node_modules/@esbuild/darwin-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz",
+      "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "basic-auth": "~2.0.1",
-        "debug": "2.6.9",
-        "depd": "~2.0.0",
-        "on-finished": "~2.3.0",
-        "on-headers": "~1.0.2"
-      },
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": ">= 0.8.0"
+        "node": ">=18"
       }
     },
-    "node_modules/morgan/node_modules/debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+    "node_modules/ng-packagr/node_modules/@esbuild/darwin-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz",
+      "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "ms": "2.0.0"
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/morgan/node_modules/ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-      "license": "MIT"
-    },
-    "node_modules/mouse-change": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/mouse-change/-/mouse-change-1.4.0.tgz",
-      "integrity": "sha512-vpN0s+zLL2ykyyUDh+fayu9Xkor5v/zRD9jhSqjRS1cJTGS0+oakVZzNm5n19JvvEj0you+MXlYTpNxUDQUjkQ==",
+    "node_modules/ng-packagr/node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz",
+      "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "mouse-event": "^1.0.0"
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/mouse-event": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/mouse-event/-/mouse-event-1.0.5.tgz",
-      "integrity": "sha512-ItUxtL2IkeSKSp9cyaX2JLUuKk2uMoxBg4bbOWVd29+CskYJR9BGsUqtXenNzKbnDshvupjUewDIYVrOB6NmGw==",
-      "license": "MIT"
-    },
-    "node_modules/mouse-event-offset": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz",
-      "integrity": "sha512-s9sqOs5B1Ykox3Xo8b3Ss2IQju4UwlW6LSR+Q5FXWpprJ5fzMLefIIItr3PH8RwzfGy6gxs/4GAmiNuZScE25w==",
-      "license": "MIT"
-    },
-    "node_modules/mouse-wheel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/mouse-wheel/-/mouse-wheel-1.2.0.tgz",
-      "integrity": "sha512-+OfYBiUOCTWcTECES49neZwL5AoGkXE+lFjIvzwNCnYRlso+EnfvovcBxGoyQ0yQt806eSPjS675K0EwWknXmw==",
+    "node_modules/ng-packagr/node_modules/@esbuild/freebsd-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz",
+      "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "right-now": "^1.0.0",
-        "signum": "^1.0.0",
-        "to-px": "^1.0.1"
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/mri": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
-      "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+    "node_modules/ng-packagr/node_modules/@esbuild/linux-arm": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz",
+      "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==",
+      "cpu": [
+        "arm"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=4"
+        "node": ">=18"
       }
     },
-    "node_modules/mrmime": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz",
-      "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==",
+    "node_modules/ng-packagr/node_modules/@esbuild/linux-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz",
+      "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=10"
+        "node": ">=18"
       }
     },
-    "node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "license": "MIT"
-    },
-    "node_modules/msgpackr": {
-      "version": "1.11.2",
-      "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.2.tgz",
-      "integrity": "sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==",
+    "node_modules/ng-packagr/node_modules/@esbuild/linux-ia32": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz",
+      "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==",
+      "cpu": [
+        "ia32"
+      ],
       "dev": true,
       "license": "MIT",
-      "optionalDependencies": {
-        "msgpackr-extract": "^3.0.2"
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/msgpackr-extract": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz",
-      "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==",
+    "node_modules/ng-packagr/node_modules/@esbuild/linux-loong64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz",
+      "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==",
+      "cpu": [
+        "loong64"
+      ],
       "dev": true,
-      "hasInstallScript": true,
       "license": "MIT",
       "optional": true,
-      "dependencies": {
-        "node-gyp-build-optional-packages": "5.2.2"
-      },
-      "bin": {
-        "download-msgpackr-prebuilds": "bin/download-prebuilds.js"
-      },
-      "optionalDependencies": {
-        "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3",
-        "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3",
-        "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3",
-        "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3",
-        "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3",
-        "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3"
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/multicast-dns": {
-      "version": "7.2.5",
-      "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
-      "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",
+    "node_modules/ng-packagr/node_modules/@esbuild/linux-mips64el": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz",
+      "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==",
+      "cpu": [
+        "mips64el"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "dns-packet": "^5.2.2",
-        "thunky": "^1.0.2"
-      },
-      "bin": {
-        "multicast-dns": "cli.js"
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/mumath": {
-      "version": "3.3.4",
-      "resolved": "https://registry.npmjs.org/mumath/-/mumath-3.3.4.tgz",
-      "integrity": "sha512-VAFIOG6rsxoc7q/IaY3jdjmrsuX9f15KlRLYTHmixASBZkZEKC1IFqE2BC5CdhXmK6WLM1Re33z//AGmeRI6FA==",
-      "deprecated": "Redundant dependency in your project.",
-      "license": "Unlicense",
-      "dependencies": {
-        "almost-equal": "^1.1.0"
+    "node_modules/ng-packagr/node_modules/@esbuild/linux-ppc64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz",
+      "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/murmurhash-js": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz",
-      "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==",
-      "license": "MIT"
-    },
-    "node_modules/mute-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz",
-      "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
+    "node_modules/ng-packagr/node_modules/@esbuild/linux-riscv64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz",
+      "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==",
+      "cpu": [
+        "riscv64"
+      ],
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": ">=18"
       }
     },
-    "node_modules/nanoid": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
-      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
+    "node_modules/ng-packagr/node_modules/@esbuild/linux-s390x": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz",
+      "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==",
+      "cpu": [
+        "s390x"
       ],
+      "dev": true,
       "license": "MIT",
-      "bin": {
-        "nanoid": "bin/nanoid.cjs"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+        "node": ">=18"
       }
     },
-    "node_modules/native-promise-only": {
-      "version": "0.8.1",
-      "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
-      "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==",
-      "license": "MIT"
-    },
-    "node_modules/natural-compare": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+    "node_modules/ng-packagr/node_modules/@esbuild/linux-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz",
+      "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
     },
-    "node_modules/natural-compare-lite": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
-      "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+    "node_modules/ng-packagr/node_modules/@esbuild/netbsd-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz",
+      "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
     },
-    "node_modules/ncp": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
-      "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==",
+    "node_modules/ng-packagr/node_modules/@esbuild/openbsd-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz",
+      "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
-      "bin": {
-        "ncp": "bin/ncp"
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/needle": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz",
-      "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==",
+    "node_modules/ng-packagr/node_modules/@esbuild/openbsd-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz",
+      "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
       "optional": true,
-      "dependencies": {
-        "iconv-lite": "^0.6.3",
-        "sax": "^1.2.4"
-      },
-      "bin": {
-        "needle": "bin/needle"
-      },
+      "os": [
+        "openbsd"
+      ],
       "engines": {
-        "node": ">= 4.4.x"
+        "node": ">=18"
       }
     },
-    "node_modules/needle/node_modules/sax": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
-      "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
+    "node_modules/ng-packagr/node_modules/@esbuild/sunos-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz",
+      "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "ISC",
-      "optional": true
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
     },
-    "node_modules/negotiator": {
-      "version": "0.6.4",
-      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
-      "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
+    "node_modules/ng-packagr/node_modules/@esbuild/win32-arm64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz",
+      "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">= 0.6"
+        "node": ">=18"
       }
     },
-    "node_modules/neo-async": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
-      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
-      "license": "MIT"
-    },
-    "node_modules/neotraverse": {
-      "version": "0.6.18",
-      "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz",
-      "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==",
+    "node_modules/ng-packagr/node_modules/@esbuild/win32-ia32": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz",
+      "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">= 10"
+        "node": ">=18"
       }
     },
-    "node_modules/next-tick": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
-      "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
-      "license": "ISC"
-    },
-    "node_modules/ng-packagr": {
-      "version": "18.2.1",
-      "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-18.2.1.tgz",
-      "integrity": "sha512-dy9ZDpZb3QpAz+Y/m8VAu7ctr2VrnRU3gmQwJagnNybVJtCsKn3lZA3IW7Z7GTLoG5IALSPouiCgiB/C8ozv7w==",
+    "node_modules/ng-packagr/node_modules/@esbuild/win32-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz",
+      "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@rollup/plugin-json": "^6.1.0",
-        "@rollup/plugin-node-resolve": "^15.2.3",
-        "@rollup/wasm-node": "^4.18.0",
-        "ajv": "^8.12.0",
-        "ansi-colors": "^4.1.3",
-        "browserslist": "^4.22.1",
-        "cacache": "^18.0.0",
-        "chokidar": "^3.5.3",
-        "commander": "^12.0.0",
-        "convert-source-map": "^2.0.0",
-        "dependency-graph": "^1.0.0",
-        "esbuild": "^0.23.0",
-        "fast-glob": "^3.3.1",
-        "find-cache-dir": "^3.3.2",
-        "injection-js": "^2.4.0",
-        "jsonc-parser": "^3.2.0",
-        "less": "^4.2.0",
-        "ora": "^5.1.0",
-        "piscina": "^4.4.0",
-        "postcss": "^8.4.31",
-        "rxjs": "^7.8.1",
-        "sass": "^1.69.5"
-      },
-      "bin": {
-        "ng-packagr": "cli/main.js"
-      },
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": "^18.19.1 || >=20.11.1"
-      },
-      "optionalDependencies": {
-        "rollup": "^4.18.0"
-      },
-      "peerDependencies": {
-        "@angular/compiler-cli": "^18.0.0 || ^18.2.0-next.0",
-        "tailwindcss": "^2.0.0 || ^3.0.0",
-        "tslib": "^2.3.0",
-        "typescript": ">=5.4 <5.6"
-      },
-      "peerDependenciesMeta": {
-        "tailwindcss": {
-          "optional": true
-        }
+        "node": ">=18"
       }
     },
     "node_modules/ng-packagr/node_modules/convert-source-map": {
@@ -21958,6 +23318,46 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/ng-packagr/node_modules/esbuild": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz",
+      "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.24.0",
+        "@esbuild/android-arm": "0.24.0",
+        "@esbuild/android-arm64": "0.24.0",
+        "@esbuild/android-x64": "0.24.0",
+        "@esbuild/darwin-arm64": "0.24.0",
+        "@esbuild/darwin-x64": "0.24.0",
+        "@esbuild/freebsd-arm64": "0.24.0",
+        "@esbuild/freebsd-x64": "0.24.0",
+        "@esbuild/linux-arm": "0.24.0",
+        "@esbuild/linux-arm64": "0.24.0",
+        "@esbuild/linux-ia32": "0.24.0",
+        "@esbuild/linux-loong64": "0.24.0",
+        "@esbuild/linux-mips64el": "0.24.0",
+        "@esbuild/linux-ppc64": "0.24.0",
+        "@esbuild/linux-riscv64": "0.24.0",
+        "@esbuild/linux-s390x": "0.24.0",
+        "@esbuild/linux-x64": "0.24.0",
+        "@esbuild/netbsd-x64": "0.24.0",
+        "@esbuild/openbsd-arm64": "0.24.0",
+        "@esbuild/openbsd-x64": "0.24.0",
+        "@esbuild/sunos-x64": "0.24.0",
+        "@esbuild/win32-arm64": "0.24.0",
+        "@esbuild/win32-ia32": "0.24.0",
+        "@esbuild/win32-x64": "0.24.0"
+      }
+    },
     "node_modules/ng-packagr/node_modules/find-cache-dir": {
       "version": "3.3.2",
       "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
@@ -22071,36 +23471,13 @@
         "semver": "bin/semver.js"
       }
     },
-    "node_modules/nice-napi": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz",
-      "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==",
-      "dev": true,
-      "hasInstallScript": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "!win32"
-      ],
-      "dependencies": {
-        "node-addon-api": "^3.0.0",
-        "node-gyp-build": "^4.2.2"
-      }
-    },
-    "node_modules/nice-napi/node_modules/node-addon-api": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
-      "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true
-    },
     "node_modules/node-addon-api": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
       "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true
     },
     "node_modules/node-forge": {
       "version": "1.3.1",
@@ -22113,9 +23490,9 @@
       }
     },
     "node_modules/node-gyp": {
-      "version": "10.2.0",
-      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz",
-      "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==",
+      "version": "11.0.0",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.0.0.tgz",
+      "integrity": "sha512-zQS+9MTTeCMgY0F3cWPyJyRFAkVltQ1uXm+xXu/ES6KFgC6Czo1Seb9vQW2wNxSX2OrDTiqL0ojtkFxBQ0ypIw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -22123,31 +23500,18 @@
         "exponential-backoff": "^3.1.1",
         "glob": "^10.3.10",
         "graceful-fs": "^4.2.6",
-        "make-fetch-happen": "^13.0.0",
-        "nopt": "^7.0.0",
-        "proc-log": "^4.1.0",
+        "make-fetch-happen": "^14.0.3",
+        "nopt": "^8.0.0",
+        "proc-log": "^5.0.0",
         "semver": "^7.3.5",
-        "tar": "^6.2.1",
-        "which": "^4.0.0"
+        "tar": "^7.4.3",
+        "which": "^5.0.0"
       },
       "bin": {
         "node-gyp": "bin/node-gyp.js"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
-    },
-    "node_modules/node-gyp-build": {
-      "version": "4.8.3",
-      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.3.tgz",
-      "integrity": "sha512-EMS95CMJzdoSKoIiXo8pxKoL8DYxwIZXYlLmgPb8KUv794abpnLK6ynsCAWNliOjREKruYKdzbh76HHYUHX7nw==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "bin": {
-        "node-gyp-build": "bin.js",
-        "node-gyp-build-optional": "optional.js",
-        "node-gyp-build-test": "build-test.js"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/node-gyp-build-optional-packages": {
@@ -22156,6 +23520,7 @@
       "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "dependencies": {
         "detect-libc": "^2.0.1"
       },
@@ -22165,6 +23530,16 @@
         "node-gyp-build-optional-packages-test": "build-test.js"
       }
     },
+    "node_modules/node-gyp/node_modules/chownr": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
+      "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/node-gyp/node_modules/glob": {
       "version": "10.4.5",
       "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
@@ -22235,6 +23610,22 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/node-gyp/node_modules/mkdirp": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
+      "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "mkdirp": "dist/cjs/src/bin.js"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/node-gyp/node_modules/path-scurry": {
       "version": "1.11.1",
       "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
@@ -22252,10 +23643,28 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/node-gyp/node_modules/tar": {
+      "version": "7.4.3",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz",
+      "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "@isaacs/fs-minipass": "^4.0.0",
+        "chownr": "^3.0.0",
+        "minipass": "^7.1.2",
+        "minizlib": "^3.0.1",
+        "mkdirp": "^3.0.1",
+        "yallist": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/node-gyp/node_modules/which": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
-      "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz",
+      "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -22265,7 +23674,17 @@
         "node-which": "bin/which.js"
       },
       "engines": {
-        "node": "^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
+      }
+    },
+    "node_modules/node-gyp/node_modules/yallist": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
+      "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "engines": {
+        "node": ">=18"
       }
     },
     "node_modules/node-int64": {
@@ -22289,9 +23708,9 @@
       "license": "MIT"
     },
     "node_modules/nopt": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
-      "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.0.0.tgz",
+      "integrity": "sha512-1L/fTJ4UmV/lUxT2Uf006pfZKTvAgCF+chz+0OgBHO8u2Z67pE7AaAUUj7CJy0lXqHmymUvGFt6NE9R3HER0yw==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -22301,7 +23720,7 @@
         "nopt": "bin/nopt.js"
       },
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/normalize-package-data": {
@@ -22346,68 +23765,68 @@
       "license": "MIT"
     },
     "node_modules/npm-bundled": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz",
-      "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz",
+      "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "npm-normalize-package-bin": "^3.0.0"
+        "npm-normalize-package-bin": "^4.0.0"
       },
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/npm-install-checks": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz",
-      "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.1.tgz",
+      "integrity": "sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
         "semver": "^7.1.1"
       },
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/npm-normalize-package-bin": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz",
-      "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz",
+      "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==",
       "dev": true,
       "license": "ISC",
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/npm-package-arg": {
-      "version": "11.0.3",
-      "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz",
-      "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==",
+      "version": "12.0.0",
+      "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.0.tgz",
+      "integrity": "sha512-ZTE0hbwSdTNL+Stx2zxSqdu2KZfNDcrtrLdIk7XGnQFYBWYDho/ORvXtn5XEePcL3tFpGjHCV3X3xrtDh7eZ+A==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "hosted-git-info": "^7.0.0",
-        "proc-log": "^4.0.0",
+        "hosted-git-info": "^8.0.0",
+        "proc-log": "^5.0.0",
         "semver": "^7.3.5",
-        "validate-npm-package-name": "^5.0.0"
+        "validate-npm-package-name": "^6.0.0"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/npm-package-arg/node_modules/hosted-git-info": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
-      "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.2.tgz",
+      "integrity": "sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
         "lru-cache": "^10.0.1"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/npm-package-arg/node_modules/lru-cache": {
@@ -22417,53 +23836,63 @@
       "dev": true,
       "license": "ISC"
     },
+    "node_modules/npm-package-arg/node_modules/validate-npm-package-name": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.0.tgz",
+      "integrity": "sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "^18.17.0 || >=20.5.0"
+      }
+    },
     "node_modules/npm-packlist": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz",
-      "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==",
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-9.0.0.tgz",
+      "integrity": "sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "ignore-walk": "^6.0.4"
+        "ignore-walk": "^7.0.0"
       },
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/npm-pick-manifest": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz",
-      "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==",
+      "version": "10.0.0",
+      "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz",
+      "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "npm-install-checks": "^6.0.0",
-        "npm-normalize-package-bin": "^3.0.0",
-        "npm-package-arg": "^11.0.0",
+        "npm-install-checks": "^7.1.0",
+        "npm-normalize-package-bin": "^4.0.0",
+        "npm-package-arg": "^12.0.0",
         "semver": "^7.3.5"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/npm-registry-fetch": {
-      "version": "17.1.0",
-      "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz",
-      "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==",
+      "version": "18.0.2",
+      "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz",
+      "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "@npmcli/redact": "^2.0.0",
+        "@npmcli/redact": "^3.0.0",
         "jsonparse": "^1.3.1",
-        "make-fetch-happen": "^13.0.0",
+        "make-fetch-happen": "^14.0.0",
         "minipass": "^7.0.2",
-        "minipass-fetch": "^3.0.0",
-        "minizlib": "^2.1.2",
-        "npm-package-arg": "^11.0.0",
-        "proc-log": "^4.0.0"
+        "minipass-fetch": "^4.0.0",
+        "minizlib": "^3.0.1",
+        "npm-package-arg": "^12.0.0",
+        "proc-log": "^5.0.0"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/npm-run-path": {
@@ -22943,7 +24372,8 @@
       "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.3.tgz",
       "integrity": "sha512-oGFr3T+pYdTGJ+YFEILMpS3es+GiIbs9h/XQrclBXUtd44ey7XwfsMzM31f64I1SQOawDoDr/D823kNCADI8TA==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true
     },
     "node_modules/os-name": {
       "version": "4.0.1",
@@ -23027,9 +24457,9 @@
       }
     },
     "node_modules/p-retry": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz",
-      "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==",
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz",
+      "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -23071,35 +24501,35 @@
       "license": "BlueOak-1.0.0"
     },
     "node_modules/pacote": {
-      "version": "18.0.6",
-      "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz",
-      "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==",
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/pacote/-/pacote-20.0.0.tgz",
+      "integrity": "sha512-pRjC5UFwZCgx9kUFDVM9YEahv4guZ1nSLqwmWiLUnDbGsjs+U5w7z6Uc8HNR1a6x8qnu5y9xtGE6D1uAuYz+0A==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "@npmcli/git": "^5.0.0",
-        "@npmcli/installed-package-contents": "^2.0.1",
-        "@npmcli/package-json": "^5.1.0",
-        "@npmcli/promise-spawn": "^7.0.0",
-        "@npmcli/run-script": "^8.0.0",
-        "cacache": "^18.0.0",
+        "@npmcli/git": "^6.0.0",
+        "@npmcli/installed-package-contents": "^3.0.0",
+        "@npmcli/package-json": "^6.0.0",
+        "@npmcli/promise-spawn": "^8.0.0",
+        "@npmcli/run-script": "^9.0.0",
+        "cacache": "^19.0.0",
         "fs-minipass": "^3.0.0",
         "minipass": "^7.0.2",
-        "npm-package-arg": "^11.0.0",
-        "npm-packlist": "^8.0.0",
-        "npm-pick-manifest": "^9.0.0",
-        "npm-registry-fetch": "^17.0.0",
-        "proc-log": "^4.0.0",
+        "npm-package-arg": "^12.0.0",
+        "npm-packlist": "^9.0.0",
+        "npm-pick-manifest": "^10.0.0",
+        "npm-registry-fetch": "^18.0.0",
+        "proc-log": "^5.0.0",
         "promise-retry": "^2.0.1",
-        "sigstore": "^2.2.0",
-        "ssri": "^10.0.0",
+        "sigstore": "^3.0.0",
+        "ssri": "^12.0.0",
         "tar": "^6.1.11"
       },
       "bin": {
         "pacote": "bin/index.js"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/parent-module": {
@@ -23310,9 +24740,9 @@
       }
     },
     "node_modules/path-to-regexp": {
-      "version": "0.1.10",
-      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
-      "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==",
+      "version": "0.1.12",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
+      "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
       "dev": true,
       "license": "MIT"
     },
@@ -23425,13 +24855,13 @@
       }
     },
     "node_modules/piscina": {
-      "version": "4.6.1",
-      "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.6.1.tgz",
-      "integrity": "sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==",
+      "version": "4.7.0",
+      "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.7.0.tgz",
+      "integrity": "sha512-b8hvkpp9zS0zsfa939b/jXbe64Z2gZv0Ha7FYPNUiDIB1y2AtxcOZdfP8xN8HFjUaqQiT9gRlfjAsoL8vdJ1Iw==",
       "dev": true,
       "license": "MIT",
       "optionalDependencies": {
-        "nice-napi": "^1.0.2"
+        "@napi-rs/nice": "^1.0.1"
       }
     },
     "node_modules/pkg-dir": {
@@ -23692,9 +25122,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.41",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
-      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+      "version": "8.4.49",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
+      "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
       "funding": [
         {
           "type": "opencollective",
@@ -23712,8 +25142,8 @@
       "license": "MIT",
       "dependencies": {
         "nanoid": "^3.3.7",
-        "picocolors": "^1.0.1",
-        "source-map-js": "^1.2.0"
+        "picocolors": "^1.1.1",
+        "source-map-js": "^1.2.1"
       },
       "engines": {
         "node": "^10 || ^12 || >=14"
@@ -24079,13 +25509,13 @@
       "license": "ISC"
     },
     "node_modules/proc-log": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
-      "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz",
+      "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==",
       "dev": true,
       "license": "ISC",
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/process": {
@@ -24543,27 +25973,16 @@
       }
     },
     "node_modules/readdirp": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-      "license": "MIT",
-      "dependencies": {
-        "picomatch": "^2.2.1"
-      },
-      "engines": {
-        "node": ">=8.10.0"
-      }
-    },
-    "node_modules/readdirp/node_modules/picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
+      "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
       "license": "MIT",
       "engines": {
-        "node": ">=8.6"
+        "node": ">= 14.16.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
+        "type": "individual",
+        "url": "https://paulmillr.com/funding/"
       }
     },
     "node_modules/receptor": {
@@ -25081,13 +26500,13 @@
       "license": "Unlicense"
     },
     "node_modules/rollup": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz",
-      "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==",
+      "version": "4.26.0",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.26.0.tgz",
+      "integrity": "sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@types/estree": "1.0.5"
+        "@types/estree": "1.0.6"
       },
       "bin": {
         "rollup": "dist/bin/rollup"
@@ -25097,32 +26516,27 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.22.4",
-        "@rollup/rollup-android-arm64": "4.22.4",
-        "@rollup/rollup-darwin-arm64": "4.22.4",
-        "@rollup/rollup-darwin-x64": "4.22.4",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.22.4",
-        "@rollup/rollup-linux-arm-musleabihf": "4.22.4",
-        "@rollup/rollup-linux-arm64-gnu": "4.22.4",
-        "@rollup/rollup-linux-arm64-musl": "4.22.4",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4",
-        "@rollup/rollup-linux-riscv64-gnu": "4.22.4",
-        "@rollup/rollup-linux-s390x-gnu": "4.22.4",
-        "@rollup/rollup-linux-x64-gnu": "4.22.4",
-        "@rollup/rollup-linux-x64-musl": "4.22.4",
-        "@rollup/rollup-win32-arm64-msvc": "4.22.4",
-        "@rollup/rollup-win32-ia32-msvc": "4.22.4",
-        "@rollup/rollup-win32-x64-msvc": "4.22.4",
+        "@rollup/rollup-android-arm-eabi": "4.26.0",
+        "@rollup/rollup-android-arm64": "4.26.0",
+        "@rollup/rollup-darwin-arm64": "4.26.0",
+        "@rollup/rollup-darwin-x64": "4.26.0",
+        "@rollup/rollup-freebsd-arm64": "4.26.0",
+        "@rollup/rollup-freebsd-x64": "4.26.0",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.26.0",
+        "@rollup/rollup-linux-arm-musleabihf": "4.26.0",
+        "@rollup/rollup-linux-arm64-gnu": "4.26.0",
+        "@rollup/rollup-linux-arm64-musl": "4.26.0",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.26.0",
+        "@rollup/rollup-linux-riscv64-gnu": "4.26.0",
+        "@rollup/rollup-linux-s390x-gnu": "4.26.0",
+        "@rollup/rollup-linux-x64-gnu": "4.26.0",
+        "@rollup/rollup-linux-x64-musl": "4.26.0",
+        "@rollup/rollup-win32-arm64-msvc": "4.26.0",
+        "@rollup/rollup-win32-ia32-msvc": "4.26.0",
+        "@rollup/rollup-win32-x64-msvc": "4.26.0",
         "fsevents": "~2.3.2"
       }
     },
-    "node_modules/rollup/node_modules/@types/estree": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
-      "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/run-applescript": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
@@ -25255,14 +26669,14 @@
       "license": "MIT"
     },
     "node_modules/sass": {
-      "version": "1.77.6",
-      "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz",
-      "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==",
+      "version": "1.80.7",
+      "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.7.tgz",
+      "integrity": "sha512-MVWvN0u5meytrSjsU7AWsbhoXi1sc58zADXFllfZzbsBT1GHjjar6JwBINYPRrkx/zqnQ6uqbQuHgE95O+C+eQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "chokidar": ">=3.0.0 <4.0.0",
-        "immutable": "^4.0.0",
+        "chokidar": "^4.0.0",
+        "immutable": "^5.0.2",
         "source-map-js": ">=0.6.2 <2.0.0"
       },
       "bin": {
@@ -25270,12 +26684,15 @@
       },
       "engines": {
         "node": ">=14.0.0"
+      },
+      "optionalDependencies": {
+        "@parcel/watcher": "^2.4.1"
       }
     },
     "node_modules/sass-loader": {
-      "version": "16.0.0",
-      "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.0.tgz",
-      "integrity": "sha512-n13Z+3rU9A177dk4888czcVFiC8CL9dii4qpXWUg3YIIgZEvi9TCFKjOQcbK0kJM7DJu9VucrZFddvNfYCPwtw==",
+      "version": "16.0.3",
+      "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.3.tgz",
+      "integrity": "sha512-gosNorT1RCkuCMyihv6FBRR7BMV06oKRAs+l4UMp1mlcVg9rWN6KMmUj3igjQwmYys4mDP3etEYJgiHRbgHCHA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -25728,11 +27145,14 @@
       }
     },
     "node_modules/shell-quote": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
-      "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
+      "version": "1.8.2",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz",
+      "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==",
       "dev": true,
       "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -25774,21 +27194,21 @@
       "license": "MIT"
     },
     "node_modules/sigstore": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz",
-      "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-3.0.0.tgz",
+      "integrity": "sha512-PHMifhh3EN4loMcHCz6l3v/luzgT3za+9f8subGgeMNjbJjzH4Ij/YoX3Gvu+kaouJRIlVdTHHCREADYf+ZteA==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@sigstore/bundle": "^2.3.2",
-        "@sigstore/core": "^1.0.0",
+        "@sigstore/bundle": "^3.0.0",
+        "@sigstore/core": "^2.0.0",
         "@sigstore/protobuf-specs": "^0.3.2",
-        "@sigstore/sign": "^2.3.2",
-        "@sigstore/tuf": "^2.3.4",
-        "@sigstore/verify": "^1.2.1"
+        "@sigstore/sign": "^3.0.0",
+        "@sigstore/tuf": "^3.0.0",
+        "@sigstore/verify": "^2.0.0"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/sirv": {
@@ -25902,13 +27322,13 @@
       }
     },
     "node_modules/socks-proxy-agent": {
-      "version": "8.0.4",
-      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz",
-      "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==",
+      "version": "8.0.5",
+      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz",
+      "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "agent-base": "^7.1.1",
+        "agent-base": "^7.1.2",
         "debug": "^4.3.4",
         "socks": "^2.8.3"
       },
@@ -26095,16 +27515,16 @@
       "license": "MIT"
     },
     "node_modules/ssri": {
-      "version": "10.0.6",
-      "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
-      "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
+      "version": "12.0.0",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz",
+      "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
         "minipass": "^7.0.3"
       },
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/stack-trace": {
@@ -26660,6 +28080,33 @@
         "node": ">=8"
       }
     },
+    "node_modules/tar/node_modules/minizlib": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/tar/node_modules/minizlib/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/tar/node_modules/yallist": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
@@ -26668,9 +28115,9 @@
       "license": "ISC"
     },
     "node_modules/terser": {
-      "version": "5.31.6",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz",
-      "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==",
+      "version": "5.36.0",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz",
+      "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==",
       "license": "BSD-2-Clause",
       "dependencies": {
         "@jridgewell/source-map": "^0.3.3",
@@ -27319,18 +28766,18 @@
       "license": "0BSD"
     },
     "node_modules/tuf-js": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz",
-      "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.0.1.tgz",
+      "integrity": "sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@tufjs/models": "2.0.1",
-        "debug": "^4.3.4",
-        "make-fetch-happen": "^13.0.1"
+        "@tufjs/models": "3.0.1",
+        "debug": "^4.3.6",
+        "make-fetch-happen": "^14.0.1"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/tunnel-agent": {
@@ -27611,29 +29058,29 @@
       }
     },
     "node_modules/unique-filename": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
-      "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz",
+      "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "unique-slug": "^4.0.0"
+        "unique-slug": "^5.0.0"
       },
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/unique-slug": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz",
-      "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz",
+      "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
         "imurmurhash": "^0.1.4"
       },
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^18.17.0 || >=20.5.0"
       }
     },
     "node_modules/universalify": {
@@ -27899,9 +29346,9 @@
       }
     },
     "node_modules/vite": {
-      "version": "5.4.6",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz",
-      "integrity": "sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==",
+      "version": "5.4.11",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz",
+      "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -28388,35 +29835,6 @@
         "@esbuild/win32-x64": "0.21.5"
       }
     },
-    "node_modules/vite/node_modules/postcss": {
-      "version": "8.4.49",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
-      "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/postcss/"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/postcss"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "nanoid": "^3.3.7",
-        "picocolors": "^1.1.1",
-        "source-map-js": "^1.2.1"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14"
-      }
-    },
     "node_modules/vt-pbf": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz",
@@ -28452,9 +29870,9 @@
       }
     },
     "node_modules/watchpack": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
-      "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
+      "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
       "license": "MIT",
       "dependencies": {
         "glob-to-regexp": "^0.4.1",
@@ -28488,7 +29906,8 @@
       "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz",
       "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true
     },
     "node_modules/weak-map": {
       "version": "1.0.8",
@@ -28520,7 +29939,6 @@
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
       "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@types/eslint-scope": "^3.7.7",
         "@types/estree": "^1.0.6",
@@ -28675,9 +30093,9 @@
       }
     },
     "node_modules/webpack-dev-server": {
-      "version": "5.0.4",
-      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz",
-      "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.1.0.tgz",
+      "integrity": "sha512-aQpaN81X6tXie1FoOB7xlMfCsN19pSvRAeYUHOdFWOlhpQ/LlbfTqYwwmEDFV0h8GGuqmCmKmT+pxcUV/Nt2gQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -28694,8 +30112,7 @@
         "colorette": "^2.0.10",
         "compression": "^1.7.4",
         "connect-history-api-fallback": "^2.0.0",
-        "default-gateway": "^6.0.3",
-        "express": "^4.17.3",
+        "express": "^4.19.2",
         "graceful-fs": "^4.2.6",
         "html-entities": "^2.4.0",
         "http-proxy-middleware": "^2.0.3",
@@ -28703,14 +30120,13 @@
         "launch-editor": "^2.6.1",
         "open": "^10.0.3",
         "p-retry": "^6.2.0",
-        "rimraf": "^5.0.5",
         "schema-utils": "^4.2.0",
         "selfsigned": "^2.4.1",
         "serve-index": "^1.9.1",
         "sockjs": "^0.3.24",
         "spdy": "^4.0.2",
-        "webpack-dev-middleware": "^7.1.0",
-        "ws": "^8.16.0"
+        "webpack-dev-middleware": "^7.4.2",
+        "ws": "^8.18.0"
       },
       "bin": {
         "webpack-dev-server": "bin/webpack-dev-server.js"
@@ -28734,25 +30150,42 @@
         }
       }
     },
-    "node_modules/webpack-dev-server/node_modules/glob": {
-      "version": "10.4.5",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
-      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+    "node_modules/webpack-dev-server/node_modules/chokidar": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "foreground-child": "^3.1.0",
-        "jackspeak": "^3.1.2",
-        "minimatch": "^9.0.4",
-        "minipass": "^7.1.2",
-        "package-json-from-dist": "^1.0.0",
-        "path-scurry": "^1.11.1"
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
       },
-      "bin": {
-        "glob": "dist/esm/bin.mjs"
+      "engines": {
+        "node": ">= 8.10.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "url": "https://paulmillr.com/funding/"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/webpack-dev-server/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
     "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": {
@@ -28793,76 +30226,30 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/webpack-dev-server/node_modules/jackspeak": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
-      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
-      "dev": true,
-      "license": "BlueOak-1.0.0",
-      "dependencies": {
-        "@isaacs/cliui": "^8.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      },
-      "optionalDependencies": {
-        "@pkgjs/parseargs": "^0.11.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/lru-cache": {
-      "version": "10.4.3",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
-      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/webpack-dev-server/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+    "node_modules/webpack-dev-server/node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
       "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
+      "license": "MIT",
       "engines": {
-        "node": ">=16 || 14 >=14.17"
+        "node": ">=8.6"
       },
       "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "url": "https://github.com/sponsors/jonschlinkert"
       }
     },
-    "node_modules/webpack-dev-server/node_modules/path-scurry": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
-      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+    "node_modules/webpack-dev-server/node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
       "dev": true,
-      "license": "BlueOak-1.0.0",
+      "license": "MIT",
       "dependencies": {
-        "lru-cache": "^10.2.0",
-        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+        "picomatch": "^2.2.1"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/rimraf": {
-      "version": "5.0.10",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
-      "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "glob": "^10.3.7"
-      },
-      "bin": {
-        "rimraf": "dist/esm/bin.mjs"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "node": ">=8.10.0"
       }
     },
     "node_modules/webpack-merge": {
@@ -28916,7 +30303,6 @@
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
       "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "fast-deep-equal": "^3.1.1",
         "fast-json-stable-stringify": "^2.0.0",
@@ -28933,7 +30319,6 @@
       "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
       "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
       "license": "MIT",
-      "peer": true,
       "peerDependencies": {
         "ajv": "^6.9.1"
       }
@@ -28943,7 +30328,6 @@
       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
       "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
       "license": "BSD-2-Clause",
-      "peer": true,
       "dependencies": {
         "esrecurse": "^4.3.0",
         "estraverse": "^4.1.1"
@@ -28957,7 +30341,6 @@
       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
       "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
       "license": "BSD-2-Clause",
-      "peer": true,
       "engines": {
         "node": ">=4.0"
       }
@@ -28967,7 +30350,6 @@
       "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
       "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">=0.8.x"
       }
@@ -28976,22 +30358,19 @@
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
       "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/webpack/node_modules/json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
       "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/webpack/node_modules/schema-utils": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
       "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@types/json-schema": "^7.0.8",
         "ajv": "^6.12.5",
@@ -29424,9 +30803,9 @@
       }
     },
     "node_modules/zone.js": {
-      "version": "0.14.10",
-      "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz",
-      "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==",
+      "version": "0.15.0",
+      "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.0.tgz",
+      "integrity": "sha512-9oxn0IIjbCZkJ67L+LkhYWRyAy7axphb3VgE2MBDlOqnmHMPWGYMxJxBYFueFq/JGY2GMwS0rU+UCLunEmy5UA==",
       "license": "MIT"
     }
   }
diff --git a/package.json b/package.json
index babaa0481..378f1b92d 100644
--- a/package.json
+++ b/package.json
@@ -32,16 +32,16 @@
   },
   "private": true,
   "dependencies": {
-    "@angular/animations": "18.2.11",
+    "@angular/animations": "19.0.4",
     "@angular/cdk": "^18.2.12",
-    "@angular/common": "18.2.11",
-    "@angular/compiler": "18.2.11",
-    "@angular/core": "18.2.11",
-    "@angular/forms": "18.2.11",
+    "@angular/common": "19.0.4",
+    "@angular/compiler": "19.0.4",
+    "@angular/core": "19.0.4",
+    "@angular/forms": "19.0.4",
     "@angular/material": "^18.2.12",
-    "@angular/platform-browser": "18.2.11",
-    "@angular/platform-browser-dynamic": "18.2.11",
-    "@angular/router": "18.2.11",
+    "@angular/platform-browser": "19.0.4",
+    "@angular/platform-browser-dynamic": "19.0.4",
+    "@angular/router": "19.0.4",
     "@asymmetrik/ngx-leaflet": "^18.0.1",
     "@compodoc/compodoc": "^1.1.26",
     "@ghsc/disagg-d3": "^0.13.0",
@@ -60,21 +60,21 @@
     "tslib": "^2.8.1",
     "uswds": "^2.14.0",
     "yaml": "^2.6.0",
-    "zone.js": "^0.14.10"
+    "zone.js": "^0.15.0"
   },
   "devDependencies": {
-    "@angular-devkit/architect": "0.1802.11",
-    "@angular-devkit/build-angular": "18.2.11",
-    "@angular-devkit/core": "18.2.11",
-    "@angular-devkit/schematics": "18.2.11",
+    "@angular-devkit/architect": "0.1900.5",
+    "@angular-devkit/build-angular": "19.0.5",
+    "@angular-devkit/core": "19.0.5",
+    "@angular-devkit/schematics": "19.0.5",
     "@angular-eslint/builder": "18.1.0",
     "@angular-eslint/eslint-plugin": "18.1.0",
     "@angular-eslint/eslint-plugin-template": "18.1.0",
     "@angular-eslint/schematics": "18.1.0",
     "@angular-eslint/template-parser": "18.1.0",
-    "@angular/cli": "18.2.11",
-    "@angular/compiler-cli": "18.2.11",
-    "@angular/language-service": "18.2.11",
+    "@angular/cli": "19.0.5",
+    "@angular/compiler-cli": "19.0.4",
+    "@angular/language-service": "19.0.4",
     "@cypress/schematic": "^2.5.2",
     "@cypress/webpack-preprocessor": "^6.0.2",
     "@nx/cypress": "^19.2.2",
@@ -109,7 +109,7 @@
     "jest-fail-on-console": "^3.3.1",
     "jest-junit": "^16.0.0",
     "jest-preset-angular": "^14.2.4",
-    "ng-packagr": "^18.2.1",
+    "ng-packagr": "^19.0.1",
     "prettier": "^3.3.3",
     "pretty-quick": "^4.0.0",
     "ts-jest": "^29.2.5",
diff --git a/projects/nshmp-apps/src/app/app.component.ts b/projects/nshmp-apps/src/app/app.component.ts
index 567b6ff90..4b236ca7f 100644
--- a/projects/nshmp-apps/src/app/app.component.ts
+++ b/projects/nshmp-apps/src/app/app.component.ts
@@ -16,7 +16,6 @@ import {navigation} from '../shared/utils/navigation.utils';
 @Component({
   imports: [RouterOutlet],
   selector: 'app-root',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dashboard/app.component.ts b/projects/nshmp-apps/src/app/dashboard/app.component.ts
index fb0bbe4ec..f8bbacf95 100644
--- a/projects/nshmp-apps/src/app/dashboard/app.component.ts
+++ b/projects/nshmp-apps/src/app/dashboard/app.component.ts
@@ -35,7 +35,6 @@ import {AboutComponent} from './components/about/about.component';
     AboutComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dashboard/components/about/about.component.ts b/projects/nshmp-apps/src/app/dashboard/components/about/about.component.ts
index 5d2686da9..302def9a6 100644
--- a/projects/nshmp-apps/src/app/dashboard/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/dashboard/components/about/about.component.ts
@@ -34,7 +34,6 @@ import {TOOLBOX_NAME} from 'projects/nshmp-apps/src/shared/utils/applications.ut
     MatDivider,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/designmaps/dashboard/app.component.ts b/projects/nshmp-apps/src/app/designmaps/dashboard/app.component.ts
index fbc4ee08a..0097d4005 100644
--- a/projects/nshmp-apps/src/app/designmaps/dashboard/app.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/dashboard/app.component.ts
@@ -25,7 +25,6 @@ import {
     NshmpLibNgAboutContentComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/app.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/app.component.ts
index daa491696..6131c2f82 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/app.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/app.component.ts
@@ -30,7 +30,6 @@ import {AppService} from './services/app.service';
     AboutComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/about/about.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/about/about.component.ts
index 49b038f32..72ea73ab3 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/about/about.component.ts
@@ -25,7 +25,6 @@ import {
     NshmpLibNgAboutSettingsComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.ts
index 86b2d1e0c..666fe4b6b 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.ts
@@ -9,7 +9,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatFormFieldModule, ReactiveFormsModule, MatSelectModule],
   selector: 'app-building-code-control',
-  standalone: true,
   styleUrl: './building-code-control.component.scss',
   templateUrl: './building-code-control.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/content/content.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/content/content.component.ts
index f007b75b0..9de62c527 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/content/content.component.ts
@@ -8,7 +8,6 @@ import {PlotsComponent} from '../plots/plots.component';
 @Component({
   imports: [MatTabsModule, PlotsComponent, DataComponent],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-hazard/control-panel-hazard.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-hazard/control-panel-hazard.component.ts
index 169c8af4e..d925ed8fd 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-hazard/control-panel-hazard.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-hazard/control-panel-hazard.component.ts
@@ -39,7 +39,6 @@ import {BuildingCodeControlComponent} from '../building-code-control/building-co
     BuildingCodeControlComponent,
   ],
   selector: 'app-control-panel-hazard',
-  standalone: true,
   styleUrl: './control-panel-hazard.component.scss',
   templateUrl: './control-panel-hazard.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts
index 73a25df9f..b4b954bbc 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts
@@ -26,7 +26,6 @@ import {BuildingCodeControlComponent} from '../building-code-control/building-co
     BuildingCodeControlComponent,
   ],
   selector: 'app-control-panel-input',
-  standalone: true,
   styleUrl: './control-panel-input.component.scss',
   templateUrl: './control-panel-input.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel/control-panel.component.ts
index 932848e3c..db44d5235 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel/control-panel.component.ts
@@ -12,7 +12,6 @@ import {ControlPanelInputComponent} from '../control-panel-input/control-panel-i
     ControlPanelHazardComponent,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/data/data.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/data/data.component.ts
index fcd33d7d8..4b8184a89 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/data/data.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/data/data.component.ts
@@ -25,7 +25,6 @@ interface PlotTable {
     MatDivider,
   ],
   selector: 'app-data',
-  standalone: true,
   styleUrl: './data.component.scss',
   templateUrl: './data.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/parameter-summary/parameter-summary.component.ts
index 7b51195f7..45d3834f7 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/parameter-summary/parameter-summary.component.ts
@@ -11,7 +11,6 @@ import {AppService} from '../../services/app.service';
   encapsulation: ViewEncapsulation.None,
   imports: [MatListModule, NshmpLibNgDataTableComponent],
   selector: 'app-parameter-summary',
-  standalone: true,
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/plot-settings-panel/plot-settings-panel.component.ts
index b2b7859cd..bf2c1f433 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -10,7 +10,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgPlotSettingsExpansionPanelComponent],
   selector: 'app-plot-settings-panel',
-  standalone: true,
   styleUrl: './plot-settings-panel.component.scss',
   templateUrl: './plot-settings-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/plots/plots.component.ts
index 220132002..f0d58121e 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/plots/plots.component.ts
@@ -29,7 +29,6 @@ import {RtgmSummaryComponent} from '../rtgm-summary/rtgm-summary.component';
     RtgmSummaryComponent,
   ],
   selector: 'app-plots',
-  standalone: true,
   styleUrl: './plots.component.scss',
   templateUrl: './plots.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/risk-targets/risk-targets.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/risk-targets/risk-targets.component.ts
index dce7e35ce..e81248504 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/risk-targets/risk-targets.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/risk-targets/risk-targets.component.ts
@@ -11,7 +11,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatListModule, NshmpLibNgDataTableComponent],
   selector: 'app-risk-targets',
-  standalone: true,
   styleUrl: './risk-targets.component.scss',
   templateUrl: './risk-targets.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/rtgm-summary/rtgm-summary.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/rtgm-summary/rtgm-summary.component.ts
index f2431704b..707fbcd5c 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/rtgm-summary/rtgm-summary.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/rtgm-summary/rtgm-summary.component.ts
@@ -10,7 +10,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgDataTableComponent],
   selector: 'app-rtgm-summary',
-  standalone: true,
   styleUrl: './rtgm-summary.component.scss',
   templateUrl: './rtgm-summary.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/dashboard/app.component.ts b/projects/nshmp-apps/src/app/dev/dashboard/app.component.ts
index 4e6d8365f..0af03eed3 100644
--- a/projects/nshmp-apps/src/app/dev/dashboard/app.component.ts
+++ b/projects/nshmp-apps/src/app/dev/dashboard/app.component.ts
@@ -26,7 +26,6 @@ import * as nav from '../../../shared/utils/navigation.utils';
     NshmpLibNgDashboardDescriptionComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.ts b/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.ts
index 79f6025a2..70992f37e 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.ts
@@ -25,7 +25,6 @@ import {
     NshmpLibNgAboutContentComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/app.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/app.component.ts
index 44a525bbc..e892e8917 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/app.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/app.component.ts
@@ -30,7 +30,6 @@ import {AppService} from './services/app.service';
     AboutComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/about/about.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/about/about.component.ts
index 4d7686353..68e95796d 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/about/about.component.ts
@@ -25,7 +25,6 @@ import {
     NshmpLibNgAboutSettingsComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts
index 409cf3c6a..250ef5390 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts
@@ -18,7 +18,6 @@ import {PlotsComponent} from '../plots/plots.component';
     AsyncPipe,
   ],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/control-panel/control-panel.component.ts
index dc3cdd0ee..9b4396e82 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/control-panel/control-panel.component.ts
@@ -45,7 +45,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.ts
index 309ad81f9..fc36a7b54 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.ts
@@ -29,7 +29,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-fault-control',
-  standalone: true,
   styleUrl: './fault-control.component.scss',
   templateUrl: './fault-control.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/parameter-summary/parameter-summary.component.ts
index ac81499e3..b5ed38694 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/parameter-summary/parameter-summary.component.ts
@@ -11,7 +11,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatList, MatListItem, AsyncPipe],
   selector: 'app-parameter-summary',
-  standalone: true,
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plot-settings-panel/plot-settings-panel.component.ts
index 3b2ae1691..51440edb5 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -11,7 +11,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgPlotSettingsExpansionPanelComponent],
   selector: 'app-plot-settings-panel',
-  standalone: true,
   styleUrl: './plot-settings-panel.component.scss',
   templateUrl: './plot-settings-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts
index e825df745..9813d4f6b 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts
@@ -45,7 +45,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     ReactiveFormsModule,
   ],
   selector: 'app-plots',
-  standalone: true,
   styleUrl: './plots.component.scss',
   templateUrl: './plots.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.ts
index ada40f9e3..97870d90b 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.ts
@@ -25,7 +25,6 @@ import {
     NshmpLibNgAboutContentComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/app.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/app.component.ts
index 48e7c37bb..dd7c17976 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/app.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/app.component.ts
@@ -34,7 +34,6 @@ import {AppService} from './services/app.service';
     AsyncPipe,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/about/about.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/about/about.component.ts
index eb0125e3c..70ff037c0 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/about/about.component.ts
@@ -28,7 +28,6 @@ import {
     NshmpLibNgAboutSettingsComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/content/content.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/content/content.component.ts
index cfe9b2b3c..2a1e683a4 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/content/content.component.ts
@@ -24,7 +24,6 @@ import {SpectraDataComponent} from '../spectra-data/spectra-data.component';
     AsyncPipe,
   ],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts
index d12338265..76dfa25fe 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts
@@ -53,7 +53,6 @@ import {AppService} from '../../services/app.service';
     MatError,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts
index fa4a10698..6aa360a05 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts
@@ -15,7 +15,6 @@ import {TableDataPanelComponent} from '../table-data-panel/table-data-panel.comp
 @Component({
   imports: [MatAccordion, TableDataPanelComponent, AsyncPipe],
   selector: 'app-hazard-data',
-  standalone: true,
   styleUrl: './hazard-data.component.scss',
   templateUrl: './hazard-data.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts
index 4d62d3296..89632d6dc 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts
@@ -9,7 +9,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatList, MatListItem, AsyncPipe],
   selector: 'app-parameter-summary',
-  standalone: true,
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/plot-settings-panel/plot-settings-panel.component.ts
index 0ef6ed3a3..0df48cea9 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -14,7 +14,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgPlotSettingsExpansionPanelComponent],
   selector: 'app-plot-settings-panel',
-  standalone: true,
   styleUrl: './plot-settings-panel.component.scss',
   templateUrl: './plot-settings-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/plots/plots.component.ts
index 958a7740b..7ae2bbf46 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/plots/plots.component.ts
@@ -53,7 +53,6 @@ interface PlotInfo {
     AsyncPipe,
   ],
   selector: 'app-plots',
-  standalone: true,
   styleUrl: './plots.component.scss',
   templateUrl: './plots.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts
index 408a6d9ad..9379a670f 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts
@@ -54,7 +54,6 @@ interface ToTableDataOptions {
 @Component({
   imports: [MatAccordion, TableDataPanelComponent, AsyncPipe],
   selector: 'app-spectra-data',
-  standalone: true,
   styleUrl: './spectra-data.component.scss',
   templateUrl: './spectra-data.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/table-data-panel/table-data-panel.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/table-data-panel/table-data-panel.component.ts
index 5a61dc773..dc8e87d44 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/table-data-panel/table-data-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/table-data-panel/table-data-panel.component.ts
@@ -24,7 +24,6 @@ import {
     LowerCasePipe,
   ],
   selector: 'app-table-data-panel',
-  standalone: true,
   styleUrl: './table-data-panel.component.scss',
   templateUrl: './table-data-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.ts b/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.ts
index 9a1d7e51d..64672d4cc 100644
--- a/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.ts
+++ b/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.ts
@@ -25,7 +25,6 @@ import {
     NshmpLibNgAboutContentComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/app.component.ts b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/app.component.ts
index 9040ede33..6fd5c89d2 100644
--- a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/app.component.ts
+++ b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/app.component.ts
@@ -34,7 +34,6 @@ import {PlotSettingsPanelComponent} from './components/plot-settings-panel/plot-
     AboutComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/about/about.component.ts b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/about/about.component.ts
index 81fea6ddd..a8cdc4a09 100644
--- a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/about/about.component.ts
@@ -25,7 +25,6 @@ import {
     MatButton,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts
index 22c2877b1..394735df8 100644
--- a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts
@@ -27,7 +27,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot-settings-panel/plot-settings-panel.component.ts
index 655368072..eb2ead049 100644
--- a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -14,7 +14,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgPlotSettingsExpansionPanelComponent],
   selector: 'app-plot-settings-panel',
-  standalone: true,
   styleUrl: './plot-settings-panel.component.scss',
   templateUrl: './plot-settings-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot/plot.component.ts b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot/plot.component.ts
index 7828869c5..7f6684165 100644
--- a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot/plot.component.ts
+++ b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot/plot.component.ts
@@ -31,7 +31,6 @@ import {AppService} from '../../services/app.service';
     AsyncPipe,
   ],
   selector: 'app-plot',
-  standalone: true,
   styleUrl: './plot.component.scss',
   templateUrl: './plot.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/error-pages/404/404.component.ts b/projects/nshmp-apps/src/app/error-pages/404/404.component.ts
index 1d3a16e99..b3403afe3 100644
--- a/projects/nshmp-apps/src/app/error-pages/404/404.component.ts
+++ b/projects/nshmp-apps/src/app/error-pages/404/404.component.ts
@@ -10,7 +10,6 @@ import {navigation} from 'projects/nshmp-apps/src/shared/utils/navigation.utils'
 @Component({
   imports: [NshmpLibNgErrorPageComponent],
   selector: 'app-404',
-  standalone: true,
   styleUrl: './404.component.scss',
   templateUrl: './404.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/error-pages/410/410.component.ts b/projects/nshmp-apps/src/app/error-pages/410/410.component.ts
index 4a47c0576..653e3cc6d 100644
--- a/projects/nshmp-apps/src/app/error-pages/410/410.component.ts
+++ b/projects/nshmp-apps/src/app/error-pages/410/410.component.ts
@@ -10,7 +10,6 @@ import {navigation} from 'projects/nshmp-apps/src/shared/utils/navigation.utils'
 @Component({
   imports: [NshmpLibNgErrorPageComponent],
   selector: 'app-410',
-  standalone: true,
   styleUrl: './410.component.scss',
   templateUrl: './410.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/error-pages/500/500.component.ts b/projects/nshmp-apps/src/app/error-pages/500/500.component.ts
index 6dae99afd..2bdad2ef0 100644
--- a/projects/nshmp-apps/src/app/error-pages/500/500.component.ts
+++ b/projects/nshmp-apps/src/app/error-pages/500/500.component.ts
@@ -10,7 +10,6 @@ import {navigation} from 'projects/nshmp-apps/src/shared/utils/navigation.utils'
 @Component({
   imports: [NshmpLibNgErrorPageComponent],
   selector: 'app-500',
-  standalone: true,
   styleUrl: './500.component.scss',
   templateUrl: './500.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/dashboard/app.component.ts b/projects/nshmp-apps/src/app/gmm/dashboard/app.component.ts
index f071f9f5a..d9904965c 100644
--- a/projects/nshmp-apps/src/app/gmm/dashboard/app.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/dashboard/app.component.ts
@@ -25,7 +25,6 @@ import {
     NshmpLibNgAboutContentComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/distance/app.component.ts b/projects/nshmp-apps/src/app/gmm/distance/app.component.ts
index e3666f2c9..9c546cadf 100644
--- a/projects/nshmp-apps/src/app/gmm/distance/app.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/distance/app.component.ts
@@ -37,7 +37,6 @@ import {AppService} from './services/app.service';
     AboutComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/distance/components/about/about.component.ts b/projects/nshmp-apps/src/app/gmm/distance/components/about/about.component.ts
index f9c19834d..56484205c 100644
--- a/projects/nshmp-apps/src/app/gmm/distance/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/distance/components/about/about.component.ts
@@ -28,7 +28,6 @@ import {
     NshmpLibNgAboutSettingsComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/distance/components/content/content.component.ts b/projects/nshmp-apps/src/app/gmm/distance/components/content/content.component.ts
index b0c0624da..93a093f44 100644
--- a/projects/nshmp-apps/src/app/gmm/distance/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/distance/components/content/content.component.ts
@@ -20,7 +20,6 @@ import {PlotsComponent} from '../plots/plots.component';
     NshmpLibNgDataTablePanelComponent,
   ],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/distance/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/gmm/distance/components/control-panel/control-panel.component.ts
index b7725d855..005dc98fa 100644
--- a/projects/nshmp-apps/src/app/gmm/distance/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/distance/components/control-panel/control-panel.component.ts
@@ -45,7 +45,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/distance/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/gmm/distance/components/parameter-summary/parameter-summary.component.ts
index ba1827927..fbc6b2021 100644
--- a/projects/nshmp-apps/src/app/gmm/distance/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/distance/components/parameter-summary/parameter-summary.component.ts
@@ -11,7 +11,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatList, MatListItem, AsyncPipe],
   selector: 'app-parameter-summary',
-  standalone: true,
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/distance/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/gmm/distance/components/plot-settings-panel/plot-settings-panel.component.ts
index 836282f07..afde84edc 100644
--- a/projects/nshmp-apps/src/app/gmm/distance/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/distance/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -14,7 +14,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgPlotSettingsExpansionPanelComponent],
   selector: 'app-plot-settings-panel',
-  standalone: true,
   styleUrl: './plot-settings-panel.component.scss',
   templateUrl: './plot-settings-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/distance/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/gmm/distance/components/plots/plots.component.ts
index 32985542b..f9dbd7101 100644
--- a/projects/nshmp-apps/src/app/gmm/distance/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/distance/components/plots/plots.component.ts
@@ -33,7 +33,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     AsyncPipe,
   ],
   selector: 'app-plots',
-  standalone: true,
   styleUrl: './plots.component.scss',
   templateUrl: './plots.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/app.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/app.component.ts
index 2e1e32de8..8e288d5cb 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/app.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/app.component.ts
@@ -37,7 +37,6 @@ import {AppService} from './services/app.service';
     AboutComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/about/about.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/about/about.component.ts
index 91f825d46..48ff86399 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/about/about.component.ts
@@ -28,7 +28,6 @@ import {
     NshmpLibNgAboutSettingsComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts
index f0ba3e8f8..71cbc4536 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts
@@ -23,7 +23,6 @@ import {PlotsComponent} from '../plots/plots.component';
     AsyncPipe,
   ],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts
index 2f04f6a66..da8349b92 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts
@@ -44,7 +44,6 @@ import {SourceParametersComponent} from '../source-parameters/source-parameters.
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/event-parameters/event-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/event-parameters/event-parameters.component.ts
index 9bfec4843..da49c50de 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/event-parameters/event-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/event-parameters/event-parameters.component.ts
@@ -12,7 +12,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatLabel, MatFormField, MatInput, MatError, ReactiveFormsModule],
   selector: 'app-event-parameters',
-  standalone: true,
   styleUrl: './event-parameters.component.scss',
   templateUrl: './event-parameters.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/parameter-summary/parameter-summary.component.ts
index 7db551ad9..ce96d1808 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/parameter-summary/parameter-summary.component.ts
@@ -11,7 +11,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatList, MatListItem, AsyncPipe],
   selector: 'app-parameter-summary',
-  standalone: true,
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/path-parameters/path-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/path-parameters/path-parameters.component.ts
index 6fd05b4e6..9ffd422a8 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/path-parameters/path-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/path-parameters/path-parameters.component.ts
@@ -12,7 +12,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatLabel, MatFormField, MatInput, MatError, ReactiveFormsModule],
   selector: 'app-path-parameters',
-  standalone: true,
   styleUrl: './path-parameters.component.scss',
   templateUrl: './path-parameters.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/plot-settings-panel/plot-settings-panel.component.ts
index 6e7152f33..b8d028ca9 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -14,7 +14,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgPlotSettingsExpansionPanelComponent],
   selector: 'app-plot-settings-panel',
-  standalone: true,
   styleUrl: './plot-settings-panel.component.scss',
   templateUrl: './plot-settings-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/plots/plots.component.ts
index dd82d2a4f..45cb11aa3 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/plots/plots.component.ts
@@ -33,7 +33,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     AsyncPipe,
   ],
   selector: 'app-plots',
-  standalone: true,
   styleUrl: './plots.component.scss',
   templateUrl: './plots.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/site-parameters/site-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/site-parameters/site-parameters.component.ts
index f99e87103..e710c00ab 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/site-parameters/site-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/site-parameters/site-parameters.component.ts
@@ -27,7 +27,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-site-parameters',
-  standalone: true,
   styleUrl: './site-parameters.component.scss',
   templateUrl: './site-parameters.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/source-parameters/source-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/source-parameters/source-parameters.component.ts
index ce9e7aac9..8134e7641 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/source-parameters/source-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/source-parameters/source-parameters.component.ts
@@ -20,7 +20,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-source-parameters',
-  standalone: true,
   styleUrl: './source-parameters.component.scss',
   templateUrl: './source-parameters.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/app.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/app.component.ts
index 9f28111e3..d1b310367 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/app.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/app.component.ts
@@ -37,7 +37,6 @@ import {AppService} from './services/app.service';
     AboutComponent,
   ],
   selector: 'app-main',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/about/about.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/about/about.component.ts
index 658b0076b..8221bdd8d 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/about/about.component.ts
@@ -28,7 +28,6 @@ import {
     NshmpLibNgAboutSettingsComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts
index 297df02e6..c52afa11e 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts
@@ -23,7 +23,6 @@ import {PlotsComponent} from '../plots/plots.component';
     AsyncPipe,
   ],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts
index 57167015e..9565fa29a 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts
@@ -43,7 +43,6 @@ import {SourceParametersComponent} from '../source-parameters/source-parameters.
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/event-parameters/event-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/event-parameters/event-parameters.component.ts
index 8c74d1fcf..39a6d995f 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/event-parameters/event-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/event-parameters/event-parameters.component.ts
@@ -42,7 +42,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-event-parameters',
-  standalone: true,
   styleUrl: './event-parameters.component.scss',
   templateUrl: './event-parameters.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/parameter-summary/parameter-summary.component.ts
index 7db551ad9..ce96d1808 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/parameter-summary/parameter-summary.component.ts
@@ -11,7 +11,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatList, MatListItem, AsyncPipe],
   selector: 'app-parameter-summary',
-  standalone: true,
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/path-parameters/path-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/path-parameters/path-parameters.component.ts
index 512eff8d4..a6d81730a 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/path-parameters/path-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/path-parameters/path-parameters.component.ts
@@ -26,7 +26,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-path-parameters',
-  standalone: true,
   styleUrl: './path-parameters.component.scss',
   templateUrl: './path-parameters.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/plot-settings-panel/plot-settings-panel.component.ts
index fcc18567e..612e33be7 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -14,7 +14,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgPlotSettingsExpansionPanelComponent],
   selector: 'app-plot-settings-panel',
-  standalone: true,
   styleUrl: './plot-settings-panel.component.scss',
   templateUrl: './plot-settings-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts
index 25ed7407c..088f0b562 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts
@@ -36,7 +36,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     AsyncPipe,
   ],
   selector: 'app-plots',
-  standalone: true,
   styleUrl: './plots.component.scss',
   templateUrl: './plots.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/site-parameters/site-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/site-parameters/site-parameters.component.ts
index 32732f32c..46eb3eacd 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/site-parameters/site-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/site-parameters/site-parameters.component.ts
@@ -27,7 +27,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-site-parameters',
-  standalone: true,
   styleUrl: './site-parameters.component.scss',
   templateUrl: './site-parameters.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/source-parameters/source-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/source-parameters/source-parameters.component.ts
index fc8f500e2..6123ce5f0 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/source-parameters/source-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/source-parameters/source-parameters.component.ts
@@ -20,7 +20,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-source-parameters',
-  standalone: true,
   styleUrl: './source-parameters.component.scss',
   templateUrl: './source-parameters.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/dashboard/app.component.ts b/projects/nshmp-apps/src/app/hazard/dashboard/app.component.ts
index 466b802f8..03b0d8eb1 100644
--- a/projects/nshmp-apps/src/app/hazard/dashboard/app.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dashboard/app.component.ts
@@ -25,7 +25,6 @@ import {
     NshmpLibNgAboutContentComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/app.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/app.component.ts
index 697fa154d..2fe0e2501 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/app.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/app.component.ts
@@ -33,7 +33,6 @@ import {AppService} from './services/app.service';
     AsyncPipe,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/about/about.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/about/about.component.ts
index 4213fcb38..acf1ed288 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/about/about.component.ts
@@ -21,7 +21,6 @@ import {
     NshmpLibNgAboutControlPanelComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts
index c7929d963..ef23f377d 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts
@@ -33,7 +33,6 @@ import {PlotsComponent} from '../plots/plots.component';
     AsyncPipe,
   ],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts
index bd8c6be98..b690cf27b 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts
@@ -54,7 +54,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts
index e0fa11c3c..1e6c1fdea 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts
@@ -29,7 +29,6 @@ import {AppService} from '../../services/app.service';
     MatIcon,
   ],
   selector: 'app-disagg-contributors',
-  standalone: true,
   styleUrl: './disagg-contributors.component.scss',
   templateUrl: './disagg-contributors.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
index 092e0d9a1..b68c0056b 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
@@ -12,7 +12,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [AsyncPipe, MatDivider, MatButton],
   selector: 'app-disagg-data',
-  standalone: true,
   styleUrl: './disagg-data.component.scss',
   templateUrl: './disagg-data.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts
index 95dc42462..b4b750085 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts
@@ -13,7 +13,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatButton, MatDivider, MatList, MatListItem, AsyncPipe],
   selector: 'app-disagg-summary',
-  standalone: true,
   styleUrl: './disagg-summary.component.scss',
   templateUrl: './disagg-summary.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts
index 475951fee..3ee2073aa 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts
@@ -25,7 +25,6 @@ const maxBounds = new L.LatLngBounds(southWestBounds, northEastBounds);
   encapsulation: ViewEncapsulation.None,
   imports: [LeafletModule, AsyncPipe, NshmpLibNgMapBaseLayersControlComponent],
   selector: 'app-geo-disagg',
-  standalone: true,
   styleUrl: './geo-disagg.component.scss',
   templateUrl: './geo-disagg.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts
index 503fc90b0..23d4dc934 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts
@@ -13,7 +13,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatDivider, MatList, MatListItem, AsyncPipe],
   selector: 'app-parameter-summary',
-  standalone: true,
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/plots/plots.component.ts
index a990f887b..5feede665 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/plots/plots.component.ts
@@ -30,7 +30,6 @@ import {AppService} from '../../services/app.service';
     FormsModule,
   ],
   selector: 'app-plots',
-  standalone: true,
   styleUrl: './plots.component.scss',
   templateUrl: './plots.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/app.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/app.component.ts
index 18e3eba4b..7798f12de 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/app.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/app.component.ts
@@ -37,7 +37,6 @@ import {AppService} from './services/app.service';
     AsyncPipe,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/about/about.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/about/about.component.ts
index cc0f1f749..de49e160f 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/about/about.component.ts
@@ -28,7 +28,6 @@ import {
     NshmpLibNgAboutSettingsComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts
index 0a1f11a25..7cdd5c033 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts
@@ -27,7 +27,6 @@ import {PlotsComponent} from '../plots/plots.component';
     LowerCasePipe,
   ],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts
index 651f53386..437f0839a 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts
@@ -53,7 +53,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts
index 96b0d7d89..e9d4fb3b5 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts
@@ -12,7 +12,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatList, MatListItem, AsyncPipe],
   selector: 'app-parameter-summary',
-  standalone: true,
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/plot-settings-panel/plot-settings-panel.component.ts
index 890bf8620..5fbdb21fa 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -14,7 +14,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgPlotSettingsExpansionPanelComponent],
   selector: 'app-plot-settings-panel',
-  standalone: true,
   styleUrl: './plot-settings-panel.component.scss',
   templateUrl: './plot-settings-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/plots/plots.component.ts
index 20b1822eb..ac5664e75 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/plots/plots.component.ts
@@ -35,7 +35,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     AsyncPipe,
   ],
   selector: 'app-plots',
-  standalone: true,
   styleUrl: './plots.component.scss',
   templateUrl: './plots.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/static/app.component.ts b/projects/nshmp-apps/src/app/hazard/static/app.component.ts
index 52f7e2d42..04a4ef74d 100644
--- a/projects/nshmp-apps/src/app/hazard/static/app.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/app.component.ts
@@ -33,7 +33,6 @@ import {AppService} from './services/app.service';
     AboutComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/about/about.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/about/about.component.ts
index cf2949642..ca3549bca 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/about/about.component.ts
@@ -28,7 +28,6 @@ import {
     NshmpLibNgAboutSettingsComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/content/content.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/content/content.component.ts
index 80f6b6c02..8240a6e04 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/content/content.component.ts
@@ -22,7 +22,6 @@ import {SpectrumDataComponent} from '../spectrum-data/spectrum-data.component';
     SpectrumDataComponent,
   ],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts
index 4d00f8acf..24a18fdbc 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts
@@ -42,7 +42,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts
index 0b61ab232..ee9f68ec6 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts
@@ -38,7 +38,6 @@ import {AppService} from '../../services/app.service';
     AsyncPipe,
   ],
   selector: 'app-curve-data',
-  standalone: true,
   styleUrl: './curve-data.component.scss',
   templateUrl: './curve-data.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts
index b7ab90fd1..ff5c4dd92 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts
@@ -12,7 +12,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatList, MatListItem, AsyncPipe],
   selector: 'app-parameter-summary',
-  standalone: true,
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/plot-settings-panel/plot-settings-panel.component.ts
index 429ecc2e5..08b2134e8 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -14,7 +14,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgPlotSettingsExpansionPanelComponent],
   selector: 'app-plot-settings-panel',
-  standalone: true,
   styleUrl: './plot-settings-panel.component.scss',
   templateUrl: './plot-settings-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/plots/plots.component.ts
index c91a6bdc7..e746d3978 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/plots/plots.component.ts
@@ -35,7 +35,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     AsyncPipe,
   ],
   selector: 'app-plots',
-  standalone: true,
   styleUrl: './plots.component.scss',
   templateUrl: './plots.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts
index 5b920c9a1..6059b9b60 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts
@@ -28,7 +28,6 @@ import {AppService} from '../../services/app.service';
     AsyncPipe,
   ],
   selector: 'app-spectrum-data',
-  standalone: true,
   styleUrl: './spectrum-data.component.scss',
   templateUrl: './spectrum-data.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/app.component.ts b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/app.component.ts
index d6f700a2a..0cbfa4c25 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/app.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/app.component.ts
@@ -34,7 +34,6 @@ import {AppService} from './services/app.service';
     AboutComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/about/about.component.ts b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/about/about.component.ts
index ddfe3b3ea..785dd1860 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/about/about.component.ts
@@ -21,7 +21,6 @@ import {
     MatButton,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.ts b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.ts
index 4ed3938f0..8ab4a73e0 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.ts
@@ -46,7 +46,6 @@ import {SnackBarComponent} from '../snack-bar/snack-bar.component';
     AsyncPipe,
   ],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/control-panel/control-panel.component.ts
index f18bca73c..a001758e8 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/control-panel/control-panel.component.ts
@@ -24,7 +24,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/snack-bar/snack-bar.component.ts b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/snack-bar/snack-bar.component.ts
index 4535d6618..7bcbe7a42 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/snack-bar/snack-bar.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/snack-bar/snack-bar.component.ts
@@ -25,7 +25,6 @@ import {MatTooltip} from '@angular/material/tooltip';
     MatIcon,
   ],
   selector: 'app-snack-bar',
-  standalone: true,
   styleUrl: './snack-bar.component.scss',
   templateUrl: './snack-bar.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.ts b/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.ts
index f0f2cf4a2..c1faedc1f 100644
--- a/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.ts
@@ -25,7 +25,6 @@ import {
     NshmpLibNgAboutContentComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/app.component.ts b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/app.component.ts
index ff4fecffe..464e02855 100644
--- a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/app.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/app.component.ts
@@ -32,7 +32,6 @@ import {AppService} from './services/app.service';
     AboutComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/about/about.component.ts b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/about/about.component.ts
index 55bbcb17a..4d40c5e1c 100644
--- a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/about/about.component.ts
@@ -21,7 +21,6 @@ import {
     MatButton,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/content/content.component.ts b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/content/content.component.ts
index 7bc211ecc..b1597244e 100644
--- a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/content/content.component.ts
@@ -36,7 +36,6 @@ import {AppService} from '../../services/app.service';
     YamlPipe,
   ],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/control-panel/control-panel.component.ts
index b3575ba52..5ebac4d24 100644
--- a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/control-panel/control-panel.component.ts
@@ -28,7 +28,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/app.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/app.component.ts
index d9967b88e..c2149b8b0 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/app.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/app.component.ts
@@ -23,7 +23,6 @@ import {AppService} from './services/app.service';
     AboutComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/about/about.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/about/about.component.ts
index 764013f8c..315162d5d 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/about/about.component.ts
@@ -22,7 +22,6 @@ import {
     NshmpLibNgAboutMainContentTabsComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config/config.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config/config.component.ts
index 5fbc6ac49..f1efc56dc 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config/config.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config/config.component.ts
@@ -57,7 +57,6 @@ interface Parameter {
     MatDivider,
   ],
   selector: 'app-config',
-  standalone: true,
   styleUrl: './config.component.scss',
   templateUrl: './config.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/content/content.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/content/content.component.ts
index 28e2f393c..df4693423 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/content/content.component.ts
@@ -22,7 +22,6 @@ import {HistoryComponent} from '../history/history.component';
     AsyncPipe,
   ],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
index 9deb70ce2..e088b42aa 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
@@ -76,7 +76,6 @@ import {JobSubmittedComponent} from '../job-submitted/job-submitted.component';
     MatIcon,
   ],
   selector: 'app-form',
-  standalone: true,
   styleUrl: './form.component.scss',
   templateUrl: './form.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/history/history.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/history/history.component.ts
index aba858c61..df2feae6d 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/history/history.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/history/history.component.ts
@@ -48,7 +48,6 @@ import {AppService} from '../../services/app.service';
     MatTooltip,
   ],
   selector: 'app-history',
-  standalone: true,
   styleUrl: './history.component.scss',
   templateUrl: './history.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/job-submitted/job-submitted.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/job-submitted/job-submitted.component.ts
index e93371632..1d72f738a 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/job-submitted/job-submitted.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/job-submitted/job-submitted.component.ts
@@ -33,7 +33,6 @@ import {AppService} from '../../services/app.service';
     MatExpansionModule,
   ],
   selector: 'app-job-submitted',
-  standalone: true,
   styleUrl: './job-submitted.component.scss',
   templateUrl: './job-submitted.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/app.component.ts b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/app.component.ts
index 5e3984aba..c0d540ae6 100644
--- a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/app.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/app.component.ts
@@ -23,7 +23,6 @@ import {AppService} from './services/app.service';
     AboutComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/about/about.component.ts b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/about/about.component.ts
index 09137c14f..cb9a6c331 100644
--- a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/about/about.component.ts
@@ -19,7 +19,6 @@ import {
     NshmpLibNgAboutHeaderControlsComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/content/content.component.ts b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/content/content.component.ts
index 3e490eabe..e9cec8a3f 100644
--- a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/content/content.component.ts
@@ -31,7 +31,6 @@ import {AppService} from '../../services/app.service';
     MatIcon,
   ],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/internal/dashboard/app.component.ts b/projects/nshmp-apps/src/app/internal/dashboard/app.component.ts
index d3ce98b92..2158f3deb 100644
--- a/projects/nshmp-apps/src/app/internal/dashboard/app.component.ts
+++ b/projects/nshmp-apps/src/app/internal/dashboard/app.component.ts
@@ -28,7 +28,6 @@ import {AuthService} from '../shared/services/auth.service';
     NshmpLibNgDashboardDescriptionComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/ncm/dashboard/app.component.ts b/projects/nshmp-apps/src/app/ncm/dashboard/app.component.ts
index 2cd182194..8faa370cb 100644
--- a/projects/nshmp-apps/src/app/ncm/dashboard/app.component.ts
+++ b/projects/nshmp-apps/src/app/ncm/dashboard/app.component.ts
@@ -25,7 +25,6 @@ import {
     NshmpLibNgAboutContentComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.ts
index 9d103b8ff..32e2387a5 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.ts
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.ts
@@ -30,7 +30,6 @@ import {AppService} from './services/app.service';
     AboutComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.ts
index 032b6bf24..c0095f576 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.ts
@@ -25,7 +25,6 @@ import {
     NshmpLibNgAboutSettingsComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.ts
index dc185dcf8..9318a5d27 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.ts
@@ -8,7 +8,6 @@ import {PlotsComponent} from '../plots/plots.component';
 @Component({
   imports: [MatTabsModule, PlotsComponent, DataComponent],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.ts
index 301520ce4..3f990609a 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.ts
@@ -35,7 +35,6 @@ import {AppService} from '../../services/app.service';
     MatTooltip,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/data/data.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/data/data.component.ts
index d0970c9db..f6c6aa94e 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/data/data.component.ts
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/data/data.component.ts
@@ -24,7 +24,6 @@ interface Tables {
     MatListModule,
   ],
   selector: 'app-data',
-  standalone: true,
   styleUrl: './data.component.scss',
   templateUrl: './data.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/parameter-summary/parameter-summary.component.ts
index 9b5379bf1..b992094ce 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/parameter-summary/parameter-summary.component.ts
@@ -6,7 +6,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatListModule],
   selector: 'app-parameter-summary',
-  standalone: true,
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.ts
index 828b597b9..74ad700d2 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -10,7 +10,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgPlotSettingsExpansionPanelComponent],
   selector: 'app-plot-settings-panel',
-  standalone: true,
   styleUrl: './plot-settings-panel.component.scss',
   templateUrl: './plot-settings-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plots/plots.component.ts
index 3c5a1e2f2..85921b4c7 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plots/plots.component.ts
@@ -21,7 +21,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     ParameterSummaryComponent,
   ],
   selector: 'app-plots',
-  standalone: true,
   styleUrl: './plots.component.scss',
   templateUrl: './plots.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/services/app.component.ts b/projects/nshmp-apps/src/app/services/app.component.ts
index 3b71f6a5c..cf932a5ea 100644
--- a/projects/nshmp-apps/src/app/services/app.component.ts
+++ b/projects/nshmp-apps/src/app/services/app.component.ts
@@ -20,7 +20,6 @@ import {ContentComponent} from './components/content/content.component';
     AboutComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/services/components/about/about.component.ts b/projects/nshmp-apps/src/app/services/components/about/about.component.ts
index 119830030..968e923d3 100644
--- a/projects/nshmp-apps/src/app/services/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/services/components/about/about.component.ts
@@ -17,7 +17,6 @@ import {
     NshmpLibNgAboutUsingApplicationExpansionPanelComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/services/components/content/content.component.ts b/projects/nshmp-apps/src/app/services/components/content/content.component.ts
index 4c71d4005..aab18aea0 100644
--- a/projects/nshmp-apps/src/app/services/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/services/components/content/content.component.ts
@@ -61,7 +61,6 @@ const APPS = apps();
     AsyncPipe,
   ],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/dashboard/app.component.ts b/projects/nshmp-apps/src/app/source/dashboard/app.component.ts
index 1f3231e03..8c9fda7c6 100644
--- a/projects/nshmp-apps/src/app/source/dashboard/app.component.ts
+++ b/projects/nshmp-apps/src/app/source/dashboard/app.component.ts
@@ -25,7 +25,6 @@ import {
     NshmpLibNgAboutContentComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/mfd/app.component.ts b/projects/nshmp-apps/src/app/source/mfd/app.component.ts
index b02196e22..9e3e3a63e 100644
--- a/projects/nshmp-apps/src/app/source/mfd/app.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/app.component.ts
@@ -41,7 +41,6 @@ import {AppService} from './services/app.service';
     AsyncPipe,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/about/about.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/about/about.component.ts
index c5f2ee852..c2dc2897b 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/about/about.component.ts
@@ -28,7 +28,6 @@ import {
     NshmpLibNgAboutSettingsComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/content/content.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/content/content.component.ts
index 8f47ec018..0106f0e3a 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/content/content.component.ts
@@ -22,7 +22,6 @@ import {PlotsComponent} from '../plots/plots.component';
     DataComponent,
   ],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/control-panel/control-panel.component.ts
index 1b97ea5b1..81dc7dc61 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/control-panel/control-panel.component.ts
@@ -50,7 +50,6 @@ interface SettingsGroup {
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts
index a76199b3f..9b32147cb 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts
@@ -17,7 +17,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgDataTablePanelComponent, AsyncPipe, LowerCasePipe],
   selector: 'app-data',
-  standalone: true,
   styleUrl: './data.component.scss',
   templateUrl: './data.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/logic-tree/logic-tree.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/logic-tree/logic-tree.component.ts
index 6e9f5a2bc..44b47b4d3 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/logic-tree/logic-tree.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/logic-tree/logic-tree.component.ts
@@ -12,7 +12,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgPlotComponent, AsyncPipe],
   selector: 'app-logic-tree',
-  standalone: true,
   styleUrl: './logic-tree.component.scss',
   templateUrl: './logic-tree.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts
index 50227d4da..297cd79de 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts
@@ -17,7 +17,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatList, MatListItem, AsyncPipe],
   selector: 'app-parameter-summary',
-  standalone: true,
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/plot-settings-panel/plot-settings-panel.component.ts
index 78562d0eb..fee77c2d8 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -14,7 +14,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgPlotSettingsExpansionPanelComponent],
   selector: 'app-plot-settings-panel',
-  standalone: true,
   styleUrl: './plot-settings-panel.component.scss',
   templateUrl: './plot-settings-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/plots/plots.component.ts
index 6219ab815..ba8b2c9ad 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/plots/plots.component.ts
@@ -46,7 +46,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     ReactiveFormsModule,
   ],
   selector: 'app-plots',
-  standalone: true,
   styleUrl: './plots.component.scss',
   templateUrl: './plots.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/model-maps/app.component.ts b/projects/nshmp-apps/src/app/source/model-maps/app.component.ts
index 0fe2e36c7..37573aeec 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/app.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/app.component.ts
@@ -46,7 +46,6 @@ import {AppService} from './services/app.service';
     AsyncPipe,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/about/about.component.ts b/projects/nshmp-apps/src/app/source/model-maps/components/about/about.component.ts
index e1d42ddc4..362c73a80 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/about/about.component.ts
@@ -23,7 +23,6 @@ import {
     MatSlideToggle,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/source/model-maps/components/control-panel/control-panel.component.ts
index d0d0b89dc..0470edd1d 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/control-panel/control-panel.component.ts
@@ -28,7 +28,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/info-popup/info-popup.component.ts b/projects/nshmp-apps/src/app/source/model-maps/components/info-popup/info-popup.component.ts
index f8329f872..5ebc9ba30 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/info-popup/info-popup.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/info-popup/info-popup.component.ts
@@ -55,7 +55,6 @@ import {AppService} from '../../services/app.service';
     MatListModule,
   ],
   selector: 'app-info-popup',
-  standalone: true,
   styleUrl: './info-popup.component.scss',
   templateUrl: './info-popup.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts b/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
index f2bcc490a..d5ac1cd40 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
@@ -25,7 +25,6 @@ import {LegendComponent} from '../legend/legend.component';
     NshmpLibNgMapBaseLayersControlComponent,
   ],
   selector: 'app-map',
-  standalone: true,
   styleUrl: './map.component.scss',
   templateUrl: './map.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/source/model-maps/components/plot-settings-panel/plot-settings-panel.component.ts
index a21d15fc6..16d93d257 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -15,7 +15,6 @@ import {AppService} from '../../services/app.service';
     ReactiveFormsModule,
   ],
   selector: 'app-plot-settings-panel',
-  standalone: true,
   styleUrl: './plot-settings-panel.component.scss',
   templateUrl: './plot-settings-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/rates/app.component.ts b/projects/nshmp-apps/src/app/source/rates/app.component.ts
index dae91be3f..637796ffe 100644
--- a/projects/nshmp-apps/src/app/source/rates/app.component.ts
+++ b/projects/nshmp-apps/src/app/source/rates/app.component.ts
@@ -32,7 +32,6 @@ import {AppService} from './services/app.service';
     AboutComponent,
   ],
   selector: 'app-app',
-  standalone: true,
   styleUrl: './app.component.scss',
   templateUrl: './app.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/rates/components/about/about.component.ts b/projects/nshmp-apps/src/app/source/rates/components/about/about.component.ts
index 572519051..3272f31b4 100644
--- a/projects/nshmp-apps/src/app/source/rates/components/about/about.component.ts
+++ b/projects/nshmp-apps/src/app/source/rates/components/about/about.component.ts
@@ -25,7 +25,6 @@ import {
     NshmpLibNgAboutSettingsComponent,
   ],
   selector: 'app-about',
-  standalone: true,
   styleUrl: './about.component.scss',
   templateUrl: './about.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/rates/components/content/content.component.ts b/projects/nshmp-apps/src/app/source/rates/components/content/content.component.ts
index 25a104a07..bd27c906a 100644
--- a/projects/nshmp-apps/src/app/source/rates/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/source/rates/components/content/content.component.ts
@@ -9,7 +9,6 @@ import {PlotsComponent} from '../plots/plots.component';
 @Component({
   imports: [MatTabsModule, PlotsComponent, NshmpLibNgDataTablePanelComponent],
   selector: 'app-content',
-  standalone: true,
   styleUrl: './content.component.scss',
   templateUrl: './content.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/rates/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/source/rates/components/control-panel/control-panel.component.ts
index 32df2d23e..4f5272b8e 100644
--- a/projects/nshmp-apps/src/app/source/rates/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/source/rates/components/control-panel/control-panel.component.ts
@@ -28,7 +28,6 @@ import {AppService} from '../../services/app.service';
     MatInputModule,
   ],
   selector: 'app-control-panel',
-  standalone: true,
   styleUrl: './control-panel.component.scss',
   templateUrl: './control-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/rates/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/source/rates/components/parameter-summary/parameter-summary.component.ts
index fc35dec54..abb4229cf 100644
--- a/projects/nshmp-apps/src/app/source/rates/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/source/rates/components/parameter-summary/parameter-summary.component.ts
@@ -7,7 +7,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [MatListModule],
   selector: 'app-parameter-summary',
-  standalone: true,
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/rates/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/source/rates/components/plot-settings-panel/plot-settings-panel.component.ts
index 72dfdc7c8..41382d74f 100644
--- a/projects/nshmp-apps/src/app/source/rates/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/source/rates/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -10,7 +10,6 @@ import {AppService} from '../../services/app.service';
 @Component({
   imports: [NshmpLibNgPlotSettingsExpansionPanelComponent],
   selector: 'app-plot-settings-panel',
-  standalone: true,
   styleUrl: './plot-settings-panel.component.scss',
   templateUrl: './plot-settings-panel.component.html',
 })
diff --git a/projects/nshmp-apps/src/app/source/rates/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/source/rates/components/plots/plots.component.ts
index 9cf3905b8..6ee7d5630 100644
--- a/projects/nshmp-apps/src/app/source/rates/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/source/rates/components/plots/plots.component.ts
@@ -20,7 +20,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     NshmpLibNgAppMetadataComponent,
   ],
   selector: 'app-plots',
-  standalone: true,
   styleUrl: './plots.component.scss',
   templateUrl: './plots.component.html',
 })
-- 
GitLab


From de5ba414af00b8229d9ae72076cc3f3972a02861 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 10:23:33 -0700
Subject: [PATCH 02/27] ng update angular material

---
 package-lock.json | 32 ++++++++++++++++----------------
 package.json      |  4 ++--
 2 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index fcf3918d4..0fbed711b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,12 +9,12 @@
       "version": "0.9.0",
       "dependencies": {
         "@angular/animations": "19.0.4",
-        "@angular/cdk": "^18.2.12",
+        "@angular/cdk": "^19.0.3",
         "@angular/common": "19.0.4",
         "@angular/compiler": "19.0.4",
         "@angular/core": "19.0.4",
         "@angular/forms": "19.0.4",
-        "@angular/material": "^18.2.12",
+        "@angular/material": "^19.0.3",
         "@angular/platform-browser": "19.0.4",
         "@angular/platform-browser-dynamic": "19.0.4",
         "@angular/router": "19.0.4",
@@ -1454,9 +1454,9 @@
       }
     },
     "node_modules/@angular/cdk": {
-      "version": "18.2.12",
-      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.12.tgz",
-      "integrity": "sha512-FOklA6KatPtb0yO0doRhBI/UVY23A8ZhOSws5VuZTQl/6r/jXEXGV9n5JQj4rm8t/6IrReO55hdyw9XfHfZFjQ==",
+      "version": "19.0.3",
+      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-19.0.3.tgz",
+      "integrity": "sha512-sPdIKbSgNk4z02FqdTTMUS62aLVA2R/DsnOk3qdH+nEfeS4nNWQEzwrvMf6dDsTeLQ6YJLWXfZfemsGYpOoiWg==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1465,8 +1465,8 @@
         "parse5": "^7.1.2"
       },
       "peerDependencies": {
-        "@angular/common": "^18.0.0 || ^19.0.0",
-        "@angular/core": "^18.0.0 || ^19.0.0",
+        "@angular/common": "^19.0.0 || ^20.0.0",
+        "@angular/core": "^19.0.0 || ^20.0.0",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
@@ -1624,20 +1624,20 @@
       }
     },
     "node_modules/@angular/material": {
-      "version": "18.2.12",
-      "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.2.12.tgz",
-      "integrity": "sha512-5q8Os6i3D1e3qN+RqP95UgIR+Kx3goncSSYDeT6yPNrdrcqcWdyDPXGK6UsZqTTx/CJee/I7ZxgVVK1YDoVASQ==",
+      "version": "19.0.3",
+      "resolved": "https://registry.npmjs.org/@angular/material/-/material-19.0.3.tgz",
+      "integrity": "sha512-aHAnmEzoE6nEF7S/lBlMwDMs6ZEkvE3omg9g6jY6WyKWtP9HYeCfwxmTPVclqcbXWxJWO/5Bvwfcjzs75uC+YA==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
       },
       "peerDependencies": {
-        "@angular/animations": "^18.0.0 || ^19.0.0",
-        "@angular/cdk": "18.2.12",
-        "@angular/common": "^18.0.0 || ^19.0.0",
-        "@angular/core": "^18.0.0 || ^19.0.0",
-        "@angular/forms": "^18.0.0 || ^19.0.0",
-        "@angular/platform-browser": "^18.0.0 || ^19.0.0",
+        "@angular/animations": "^19.0.0 || ^20.0.0",
+        "@angular/cdk": "19.0.3",
+        "@angular/common": "^19.0.0 || ^20.0.0",
+        "@angular/core": "^19.0.0 || ^20.0.0",
+        "@angular/forms": "^19.0.0 || ^20.0.0",
+        "@angular/platform-browser": "^19.0.0 || ^20.0.0",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
diff --git a/package.json b/package.json
index 378f1b92d..2269c4abc 100644
--- a/package.json
+++ b/package.json
@@ -33,12 +33,12 @@
   "private": true,
   "dependencies": {
     "@angular/animations": "19.0.4",
-    "@angular/cdk": "^18.2.12",
+    "@angular/cdk": "^19.0.3",
     "@angular/common": "19.0.4",
     "@angular/compiler": "19.0.4",
     "@angular/core": "19.0.4",
     "@angular/forms": "19.0.4",
-    "@angular/material": "^18.2.12",
+    "@angular/material": "^19.0.3",
     "@angular/platform-browser": "19.0.4",
     "@angular/platform-browser-dynamic": "19.0.4",
     "@angular/router": "19.0.4",
-- 
GitLab


From 1751742c763e623db64fda0fb9e010b6421eede5 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 10:29:18 -0700
Subject: [PATCH 03/27] update deps

---
 package-lock.json | 42 +++++++++++++++++++++---------------------
 package.json      |  4 ++--
 2 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 0fbed711b..2251d3554 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,11 +18,11 @@
         "@angular/platform-browser": "19.0.4",
         "@angular/platform-browser-dynamic": "19.0.4",
         "@angular/router": "19.0.4",
-        "@asymmetrik/ngx-leaflet": "^18.0.1",
+        "@bluehalo/ngx-leaflet": "^19.0.0",
         "@compodoc/compodoc": "^1.1.26",
         "@ghsc/disagg-d3": "^0.13.0",
         "@ghsc/nshmp-lib-ng": "^18.25.1",
-        "@ghsc/nshmp-template": "^18.4.2",
+        "@ghsc/nshmp-template": "^19.1.1",
         "@ghsc/nshmp-utils-ts": "^3.12.1",
         "angular-plotly.js": "^6.0.0",
         "d3": "^7.9.0",
@@ -1699,20 +1699,6 @@
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
-    "node_modules/@asymmetrik/ngx-leaflet": {
-      "version": "18.0.1",
-      "resolved": "https://registry.npmjs.org/@asymmetrik/ngx-leaflet/-/ngx-leaflet-18.0.1.tgz",
-      "integrity": "sha512-x1KFH+qUCB4H6GWJik0r+8k10/WZXgWcqq2Iu7GpcpESxBFan+bHtiWJt6urqvMOroObEWfMKmVND83CB7AjlQ==",
-      "license": "MIT",
-      "dependencies": {
-        "tslib": "^2.3.0"
-      },
-      "peerDependencies": {
-        "@angular/common": "18",
-        "@angular/core": "18",
-        "leaflet": "1"
-      }
-    },
     "node_modules/@aws-cdk/asset-awscli-v1": {
       "version": "2.2.211",
       "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.211.tgz",
@@ -3604,6 +3590,20 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/@bluehalo/ngx-leaflet": {
+      "version": "19.0.0",
+      "resolved": "https://registry.npmjs.org/@bluehalo/ngx-leaflet/-/ngx-leaflet-19.0.0.tgz",
+      "integrity": "sha512-c1BUyDcS5QB3bwG9QUCNJLB/G3hdYQmaj37TaeCNnKUo9TViOCEhPihCXDTRAFkobbtNGXN8lGg8uD5GXv6/Zw==",
+      "license": "MIT",
+      "dependencies": {
+        "tslib": "^2.3.0"
+      },
+      "peerDependencies": {
+        "@angular/common": "19",
+        "@angular/core": "19",
+        "leaflet": "1"
+      }
+    },
     "node_modules/@choojs/findup": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz",
@@ -4871,15 +4871,15 @@
       }
     },
     "node_modules/@ghsc/nshmp-template": {
-      "version": "18.4.2",
-      "resolved": "https://code.usgs.gov/api/v4/projects/1416/packages/npm/@ghsc/nshmp-template/-/@ghsc/nshmp-template-18.4.2.tgz",
-      "integrity": "sha1-9tQ6qwEsnQwzmmW9CTn1o1TRxyA=",
+      "version": "19.1.1",
+      "resolved": "https://code.usgs.gov/api/v4/projects/1416/packages/npm/@ghsc/nshmp-template/-/@ghsc/nshmp-template-19.1.1.tgz",
+      "integrity": "sha1-p55HT0oEhcSv9ogKZJ33/2CoJc4=",
       "dependencies": {
         "tslib": "^2.3.1"
       },
       "peerDependencies": {
-        "@angular/common": "^18.0.2",
-        "@angular/core": "^18.0.2"
+        "@angular/common": "^19.0.3",
+        "@angular/core": "^19.0.3"
       }
     },
     "node_modules/@ghsc/nshmp-utils-ts": {
diff --git a/package.json b/package.json
index 2269c4abc..1642bcdcc 100644
--- a/package.json
+++ b/package.json
@@ -42,11 +42,11 @@
     "@angular/platform-browser": "19.0.4",
     "@angular/platform-browser-dynamic": "19.0.4",
     "@angular/router": "19.0.4",
-    "@asymmetrik/ngx-leaflet": "^18.0.1",
+    "@bluehalo/ngx-leaflet": "^19.0.0",
     "@compodoc/compodoc": "^1.1.26",
     "@ghsc/disagg-d3": "^0.13.0",
     "@ghsc/nshmp-lib-ng": "^18.25.1",
-    "@ghsc/nshmp-template": "^18.4.2",
+    "@ghsc/nshmp-template": "^19.1.1",
     "@ghsc/nshmp-utils-ts": "^3.12.1",
     "angular-plotly.js": "^6.0.0",
     "d3": "^7.9.0",
-- 
GitLab


From 7088d6420eda92a5cb4434a10d381d800b742155 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 10:30:21 -0700
Subject: [PATCH 04/27] ng update eslint

---
 package-lock.json | 142 ++++++++++++++++++++--------------------------
 package.json      |  10 ++--
 2 files changed, 68 insertions(+), 84 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 2251d3554..d2156ec45 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -43,11 +43,11 @@
         "@angular-devkit/build-angular": "19.0.5",
         "@angular-devkit/core": "19.0.5",
         "@angular-devkit/schematics": "19.0.5",
-        "@angular-eslint/builder": "18.1.0",
-        "@angular-eslint/eslint-plugin": "18.1.0",
-        "@angular-eslint/eslint-plugin-template": "18.1.0",
-        "@angular-eslint/schematics": "18.1.0",
-        "@angular-eslint/template-parser": "18.1.0",
+        "@angular-eslint/builder": "19.0.2",
+        "@angular-eslint/eslint-plugin": "19.0.2",
+        "@angular-eslint/eslint-plugin-template": "19.0.2",
+        "@angular-eslint/schematics": "19.0.2",
+        "@angular-eslint/template-parser": "19.0.2",
         "@angular/cli": "19.0.5",
         "@angular/compiler-cli": "19.0.4",
         "@angular/language-service": "19.0.4",
@@ -785,14 +785,14 @@
       }
     },
     "node_modules/@angular-eslint/builder": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-18.1.0.tgz",
-      "integrity": "sha512-ttcp+M3XDqt4lpj4C9XWO/JJY5iC1kNWmK1FUtd1YR0+1mLhrZTbakFYFe06qoiRqb4MX0WW2oUvonh52y5/NQ==",
+      "version": "19.0.2",
+      "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-19.0.2.tgz",
+      "integrity": "sha512-BdmMSndQt2fSBiTVniskUcUpQaeweUapbsL0IDfQ7a13vL0NVXpc3K89YXuVE/xsb08uHtqphuwxPAAj6kX3OA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nx/devkit": "^19.0.6",
-        "nx": "^19.0.6"
+        "@angular-devkit/architect": ">= 0.1900.0 < 0.2000.0",
+        "@angular-devkit/core": ">= 19.0.0 < 20.0.0"
       },
       "peerDependencies": {
         "eslint": "^8.57.0 || ^9.0.0",
@@ -800,88 +800,82 @@
       }
     },
     "node_modules/@angular-eslint/bundled-angular-compiler": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-18.1.0.tgz",
-      "integrity": "sha512-2JNlMEnCvLz8q1Qa4sWR9BddtpDWMKYguMzHJKm5zUDwH90CgWHolQlXumtpqbL8r78xd57t35IkbEFLF3UsQw==",
+      "version": "19.0.2",
+      "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.0.2.tgz",
+      "integrity": "sha512-HPmp92r70SNO/0NdIaIhxrgVSpomqryuUk7jszvNRtu+OzYCJGcbLhQD38T3dbBWT/AV0QXzyzExn6/2ai9fEw==",
       "dev": true,
       "license": "MIT"
     },
     "node_modules/@angular-eslint/eslint-plugin": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-18.1.0.tgz",
-      "integrity": "sha512-rV1RLhcg9TTNE5hB7pMddkJvnH0+q3FnhhWVE+IJNkzlGxEktDwVx7hG17sy8YkRS2CxR0P6Dr5C6wMBdEwAsw==",
+      "version": "19.0.2",
+      "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-19.0.2.tgz",
+      "integrity": "sha512-DLuNVVGGFicSThOcMSJyNje+FZSPdG0B3lCBRiqcgKH/16kfM4pV8MobPM7RGK2NhaOmmZ4zzJNwpwWPSgi+Lw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-eslint/bundled-angular-compiler": "18.1.0",
-        "@angular-eslint/utils": "18.1.0"
+        "@angular-eslint/bundled-angular-compiler": "19.0.2",
+        "@angular-eslint/utils": "19.0.2"
       },
       "peerDependencies": {
-        "@typescript-eslint/utils": "^7.11.0 || ^8.0.0-alpha.37",
+        "@typescript-eslint/utils": "^7.11.0 || ^8.0.0",
         "eslint": "^8.57.0 || ^9.0.0",
         "typescript": "*"
       }
     },
     "node_modules/@angular-eslint/eslint-plugin-template": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-18.1.0.tgz",
-      "integrity": "sha512-k7Zq2JRd4jjg6PB0M24UnnmdhCeRFQ7Q4GlMGmeJLQGan+HFKDBu973yN2/Vmk4RYi+rTVuin0gy4HBeiGiiaw==",
+      "version": "19.0.2",
+      "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-19.0.2.tgz",
+      "integrity": "sha512-f/OCF9ThnxQ8m0eNYPwnCrySQPhYfCOF6STL7F9LnS8Bs3ZeW3/oT1yLaMIZ1Eg0ogIkgxksMAJZjrJPUPBD1Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-eslint/bundled-angular-compiler": "18.1.0",
-        "@angular-eslint/utils": "18.1.0",
-        "aria-query": "5.3.0",
-        "axobject-query": "4.0.0"
+        "@angular-eslint/bundled-angular-compiler": "19.0.2",
+        "@angular-eslint/utils": "19.0.2",
+        "aria-query": "5.3.2",
+        "axobject-query": "4.1.0"
       },
       "peerDependencies": {
-        "@typescript-eslint/utils": "^7.11.0 || ^8.0.0-alpha.37",
+        "@typescript-eslint/types": "^7.11.0 || ^8.0.0",
+        "@typescript-eslint/utils": "^7.11.0 || ^8.0.0",
         "eslint": "^8.57.0 || ^9.0.0",
         "typescript": "*"
       }
     },
     "node_modules/@angular-eslint/schematics": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-18.1.0.tgz",
-      "integrity": "sha512-wZll/9/RSER1Vl6m9fXA/866OAUz2DSWYufvHEpJUoDPug/uZ+l9jOMZwlSk4PeMrF+/fNXoWx5HK2ZEwTv2qw==",
+      "version": "19.0.2",
+      "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-19.0.2.tgz",
+      "integrity": "sha512-wI4SyiAnUCrpigtK6PHRlVWMC9vWljqmlLhbsJV5O5yDajlmRdvgXvSHDefhJm0hSfvZYRXuiAARYv2+QVfnGA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-eslint/eslint-plugin": "18.1.0",
-        "@angular-eslint/eslint-plugin-template": "18.1.0",
-        "@nx/devkit": "^19.0.6",
-        "ignore": "5.3.1",
-        "nx": "^19.0.6",
-        "semver": "7.6.2",
+        "@angular-devkit/core": ">= 19.0.0 < 20.0.0",
+        "@angular-devkit/schematics": ">= 19.0.0 < 20.0.0",
+        "@angular-eslint/eslint-plugin": "19.0.2",
+        "@angular-eslint/eslint-plugin-template": "19.0.2",
+        "ignore": "6.0.2",
+        "semver": "7.6.3",
         "strip-json-comments": "3.1.1"
-      },
-      "peerDependencies": {
-        "@angular-devkit/core": ">= 18.0.0 < 19.0.0",
-        "@angular-devkit/schematics": ">= 18.0.0 < 19.0.0"
       }
     },
-    "node_modules/@angular-eslint/schematics/node_modules/semver": {
-      "version": "7.6.2",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-      "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+    "node_modules/@angular-eslint/schematics/node_modules/ignore": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz",
+      "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==",
       "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
-      },
+      "license": "MIT",
       "engines": {
-        "node": ">=10"
+        "node": ">= 4"
       }
     },
     "node_modules/@angular-eslint/template-parser": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-18.1.0.tgz",
-      "integrity": "sha512-YqBNusbt3vWbm8eo2dICytU8hP8/ez4uETkwKpMvB+H1E0rYaD2F17D47YO9BBFUHCNzAGIBlA8BWDN1kLEMlw==",
+      "version": "19.0.2",
+      "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-19.0.2.tgz",
+      "integrity": "sha512-z3rZd2sBfuYcFf9rGDsB2zz2fbGX8kkF+0ftg9eocyQmzWrlZHFmuw9ha7oP/Mz8gpblyCS/aa1U/Srs6gz0UQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-eslint/bundled-angular-compiler": "18.1.0",
-        "eslint-scope": "^8.0.0"
+        "@angular-eslint/bundled-angular-compiler": "19.0.2",
+        "eslint-scope": "^8.0.2"
       },
       "peerDependencies": {
         "eslint": "^8.57.0 || ^9.0.0",
@@ -889,16 +883,16 @@
       }
     },
     "node_modules/@angular-eslint/utils": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-18.1.0.tgz",
-      "integrity": "sha512-pTCwbm9TPU1B0fxwhJg5qnJA2ILUJR0cT+rc7kejV0Xwl6RBXpMrzbuMzB9CucEY1au8hAR55I+Sc9znwSwuIw==",
+      "version": "19.0.2",
+      "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-19.0.2.tgz",
+      "integrity": "sha512-HotBT8OKr7zCaX1S9k27JuhRiTVIbbYVl6whlb3uwdMIPIWY8iOcEh1tjI4qDPUafpLfR72Dhwi5bO1E17F3/Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-eslint/bundled-angular-compiler": "18.1.0"
+        "@angular-eslint/bundled-angular-compiler": "19.0.2"
       },
       "peerDependencies": {
-        "@typescript-eslint/utils": "^7.11.0 || ^8.0.0-alpha.37",
+        "@typescript-eslint/utils": "^7.11.0 || ^8.0.0",
         "eslint": "^8.57.0 || ^9.0.0",
         "typescript": "*"
       }
@@ -10392,13 +10386,13 @@
       "license": "Python-2.0"
     },
     "node_modules/aria-query": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
-      "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+      "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
       "dev": true,
       "license": "Apache-2.0",
-      "dependencies": {
-        "dequal": "^2.0.3"
+      "engines": {
+        "node": ">= 0.4"
       }
     },
     "node_modules/array-bounds": {
@@ -11101,13 +11095,13 @@
       "license": "MIT"
     },
     "node_modules/axobject-query": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz",
-      "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+      "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
       "dev": true,
       "license": "Apache-2.0",
-      "dependencies": {
-        "dequal": "^2.0.3"
+      "engines": {
+        "node": ">= 0.4"
       }
     },
     "node_modules/babel-jest": {
@@ -14306,16 +14300,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/dequal": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
-      "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/destroy": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
diff --git a/package.json b/package.json
index 1642bcdcc..56cc54cf9 100644
--- a/package.json
+++ b/package.json
@@ -67,11 +67,11 @@
     "@angular-devkit/build-angular": "19.0.5",
     "@angular-devkit/core": "19.0.5",
     "@angular-devkit/schematics": "19.0.5",
-    "@angular-eslint/builder": "18.1.0",
-    "@angular-eslint/eslint-plugin": "18.1.0",
-    "@angular-eslint/eslint-plugin-template": "18.1.0",
-    "@angular-eslint/schematics": "18.1.0",
-    "@angular-eslint/template-parser": "18.1.0",
+    "@angular-eslint/builder": "19.0.2",
+    "@angular-eslint/eslint-plugin": "19.0.2",
+    "@angular-eslint/eslint-plugin-template": "19.0.2",
+    "@angular-eslint/schematics": "19.0.2",
+    "@angular-eslint/template-parser": "19.0.2",
     "@angular/cli": "19.0.5",
     "@angular/compiler-cli": "19.0.4",
     "@angular/language-service": "19.0.4",
-- 
GitLab


From 977ce9881f45bee630f4c253dd245c47f12a39e4 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 10:31:42 -0700
Subject: [PATCH 05/27] update typescript-eslint

---
 package-lock.json | 291 ++++++++++++----------------------------------
 package.json      |   4 +-
 2 files changed, 74 insertions(+), 221 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index d2156ec45..b7c065c9e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -65,8 +65,8 @@
         "@types/node": "^20.17.6",
         "@types/plotly.js": "^2.33.5",
         "@types/three": "^0.152.1",
-        "@typescript-eslint/eslint-plugin": "^7.18.0",
-        "@typescript-eslint/parser": "^7.18.0",
+        "@typescript-eslint/eslint-plugin": "^8.18.1",
+        "@typescript-eslint/parser": "^8.18.1",
         "angular-http-server": "^1.12.0",
         "cypress": "^13.15.2",
         "eslint": "^8.57.1",
@@ -9256,60 +9256,33 @@
       }
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz",
-      "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==",
+      "version": "8.18.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.1.tgz",
+      "integrity": "sha512-Ncvsq5CT3Gvh+uJG0Lwlho6suwDfUXH0HztslDf5I+F2wAFAZMRwYLEorumpKLzmO2suAXZ/td1tBg4NZIi9CQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "7.18.0",
-        "@typescript-eslint/type-utils": "7.18.0",
-        "@typescript-eslint/utils": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0",
+        "@typescript-eslint/scope-manager": "8.18.1",
+        "@typescript-eslint/type-utils": "8.18.1",
+        "@typescript-eslint/utils": "8.18.1",
+        "@typescript-eslint/visitor-keys": "8.18.1",
         "graphemer": "^1.4.0",
         "ignore": "^5.3.1",
         "natural-compare": "^1.4.0",
         "ts-api-utils": "^1.3.0"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "@typescript-eslint/parser": "^7.0.0",
-        "eslint": "^8.56.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
-      "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "7.18.0",
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/typescript-estree": "7.18.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
       "peerDependencies": {
-        "eslint": "^8.56.0"
+        "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+        "eslint": "^8.57.0 || ^9.0.0",
+        "typescript": ">=4.8.4 <5.8.0"
       }
     },
     "node_modules/@typescript-eslint/experimental-utils": {
@@ -9462,46 +9435,42 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz",
-      "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==",
+      "version": "8.18.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.1.tgz",
+      "integrity": "sha512-rBnTWHCdbYM2lh7hjyXqxk70wvon3p2FyaniZuey5TrcGBpfhVp0OxOa6gxr9Q9YhZFKyfbEnxc24ZnVbbUkCA==",
       "dev": true,
-      "license": "BSD-2-Clause",
+      "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/scope-manager": "7.18.0",
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/typescript-estree": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0",
+        "@typescript-eslint/scope-manager": "8.18.1",
+        "@typescript-eslint/types": "8.18.1",
+        "@typescript-eslint/typescript-estree": "8.18.1",
+        "@typescript-eslint/visitor-keys": "8.18.1",
         "debug": "^4.3.4"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
       "peerDependencies": {
-        "eslint": "^8.56.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
+        "eslint": "^8.57.0 || ^9.0.0",
+        "typescript": ">=4.8.4 <5.8.0"
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
-      "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
+      "version": "8.18.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.1.tgz",
+      "integrity": "sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0"
+        "@typescript-eslint/types": "8.18.1",
+        "@typescript-eslint/visitor-keys": "8.18.1"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
@@ -9509,64 +9478,37 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
-      "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
+      "version": "8.18.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.1.tgz",
+      "integrity": "sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "7.18.0",
-        "@typescript-eslint/utils": "7.18.0",
+        "@typescript-eslint/typescript-estree": "8.18.1",
+        "@typescript-eslint/utils": "8.18.1",
         "debug": "^4.3.4",
         "ts-api-utils": "^1.3.0"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.56.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
-      "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "7.18.0",
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/typescript-estree": "7.18.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
       "peerDependencies": {
-        "eslint": "^8.56.0"
+        "eslint": "^8.57.0 || ^9.0.0",
+        "typescript": ">=4.8.4 <5.8.0"
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
-      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
+      "version": "8.18.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.1.tgz",
+      "integrity": "sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
@@ -9574,32 +9516,30 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz",
-      "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==",
+      "version": "8.18.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz",
+      "integrity": "sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==",
       "dev": true,
-      "license": "BSD-2-Clause",
+      "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0",
+        "@typescript-eslint/types": "8.18.1",
+        "@typescript-eslint/visitor-keys": "8.18.1",
         "debug": "^4.3.4",
-        "globby": "^11.1.0",
+        "fast-glob": "^3.3.2",
         "is-glob": "^4.0.3",
         "minimatch": "^9.0.4",
         "semver": "^7.6.0",
         "ts-api-utils": "^1.3.0"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
+      "peerDependencies": {
+        "typescript": ">=4.8.4 <5.8.0"
       }
     },
     "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
@@ -9619,17 +9559,16 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "8.14.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.14.0.tgz",
-      "integrity": "sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==",
+      "version": "8.18.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.1.tgz",
+      "integrity": "sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==",
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.14.0",
-        "@typescript-eslint/types": "8.14.0",
-        "@typescript-eslint/typescript-estree": "8.14.0"
+        "@typescript-eslint/scope-manager": "8.18.1",
+        "@typescript-eslint/types": "8.18.1",
+        "@typescript-eslint/typescript-estree": "8.18.1"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -9639,59 +9578,19 @@
         "url": "https://opencollective.com/typescript-eslint"
       },
       "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.14.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz",
-      "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==",
-      "dev": true,
-      "license": "MIT",
-      "peer": true,
-      "dependencies": {
-        "@typescript-eslint/types": "8.14.0",
-        "@typescript-eslint/visitor-keys": "8.14.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
+        "eslint": "^8.57.0 || ^9.0.0",
+        "typescript": ">=4.8.4 <5.8.0"
       }
     },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
-      "version": "8.14.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz",
-      "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==",
+    "node_modules/@typescript-eslint/visitor-keys": {
+      "version": "8.18.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz",
+      "integrity": "sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==",
       "dev": true,
       "license": "MIT",
-      "peer": true,
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.14.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz",
-      "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "peer": true,
       "dependencies": {
-        "@typescript-eslint/types": "8.14.0",
-        "@typescript-eslint/visitor-keys": "8.14.0",
-        "debug": "^4.3.4",
-        "fast-glob": "^3.3.2",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^1.3.0"
+        "@typescript-eslint/types": "8.18.1",
+        "eslint-visitor-keys": "^4.2.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -9699,65 +9598,19 @@
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
       }
     },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.14.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz",
-      "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==",
+    "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+      "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
       "dev": true,
-      "license": "MIT",
-      "peer": true,
-      "dependencies": {
-        "@typescript-eslint/types": "8.14.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
+      "license": "Apache-2.0",
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "dev": true,
-      "license": "ISC",
-      "peer": true,
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
-      "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "7.18.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || >=20.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
+        "url": "https://opencollective.com/eslint"
       }
     },
     "node_modules/@ungap/structured-clone": {
diff --git a/package.json b/package.json
index 56cc54cf9..0a776f4aa 100644
--- a/package.json
+++ b/package.json
@@ -89,8 +89,8 @@
     "@types/node": "^20.17.6",
     "@types/plotly.js": "^2.33.5",
     "@types/three": "^0.152.1",
-    "@typescript-eslint/eslint-plugin": "^7.18.0",
-    "@typescript-eslint/parser": "^7.18.0",
+    "@typescript-eslint/eslint-plugin": "^8.18.1",
+    "@typescript-eslint/parser": "^8.18.1",
     "angular-http-server": "^1.12.0",
     "cypress": "^13.15.2",
     "eslint": "^8.57.1",
-- 
GitLab


From 53587ead5452d6df81aeb1611c2e75920db44a6e Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 10:37:55 -0700
Subject: [PATCH 06/27] update deps

---
 package-lock.json | 1269 +++++++--------------------------------------
 package.json      |   15 +-
 2 files changed, 183 insertions(+), 1101 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index b7c065c9e..f3924b7f1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -21,7 +21,7 @@
         "@bluehalo/ngx-leaflet": "^19.0.0",
         "@compodoc/compodoc": "^1.1.26",
         "@ghsc/disagg-d3": "^0.13.0",
-        "@ghsc/nshmp-lib-ng": "^18.25.1",
+        "@ghsc/nshmp-lib-ng": "^19.0.0",
         "@ghsc/nshmp-template": "^19.1.1",
         "@ghsc/nshmp-utils-ts": "^3.12.1",
         "angular-plotly.js": "^6.0.0",
@@ -68,23 +68,22 @@
         "@typescript-eslint/eslint-plugin": "^8.18.1",
         "@typescript-eslint/parser": "^8.18.1",
         "angular-http-server": "^1.12.0",
-        "cypress": "^13.15.2",
-        "eslint": "^8.57.1",
-        "eslint-config-prettier": "^9.1.0",
-        "eslint-plugin-import": "^2.31.0",
+        "cypress": "^13.16.1",
+        "eslint-plugin-jsdoc": "^50.6.1",
+        "eslint-plugin-prefer-arrow": "^1.2.3",
         "eslint-plugin-prettier": "^5.2.1",
         "eslint-plugin-simple-import-sort": "^12.1.1",
         "eslint-plugin-sort-keys-fix": "^1.1.2",
         "eslint-plugin-typescript-sort-keys": "^3.3.0",
-        "eslint-plugin-unused-imports": "^3.2.0",
+        "eslint-plugin-unused-imports": "^4.1.4",
         "fast-deep-equal": "^3.1.3",
-        "gts": "^5.3.1",
+        "gts": "^6.0.2",
         "husky": "^9.1.6",
         "jest": "^29.7.0",
         "jest-environment-jsdom": "^29.7.0",
         "jest-fail-on-console": "^3.3.1",
         "jest-junit": "^16.0.0",
-        "jest-preset-angular": "^14.2.4",
+        "jest-preset-angular": "^14.4.2",
         "ng-packagr": "^19.0.1",
         "prettier": "^3.3.3",
         "pretty-quick": "^4.0.0",
@@ -4295,6 +4294,21 @@
         "tslib": "^2.4.0"
       }
     },
+    "node_modules/@es-joy/jsdoccomment": {
+      "version": "0.49.0",
+      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz",
+      "integrity": "sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "comment-parser": "1.4.1",
+        "esquery": "^1.6.0",
+        "jsdoc-type-pratt-parser": "~4.1.0"
+      },
+      "engines": {
+        "node": ">=16"
+      }
+    },
     "node_modules/@esbuild/aix-ppc64": {
       "version": "0.23.0",
       "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz",
@@ -4853,15 +4867,15 @@
       }
     },
     "node_modules/@ghsc/nshmp-lib-ng": {
-      "version": "18.25.1",
-      "resolved": "https://code.usgs.gov/api/v4/projects/12416/packages/npm/@ghsc/nshmp-lib-ng/-/@ghsc/nshmp-lib-ng-18.25.1.tgz",
-      "integrity": "sha1-9TtMDz2ghcNinrFw4s5Aw5CCULA=",
+      "version": "19.0.0",
+      "resolved": "https://code.usgs.gov/api/v4/projects/12416/packages/npm/@ghsc/nshmp-lib-ng/-/@ghsc/nshmp-lib-ng-19.0.0.tgz",
+      "integrity": "sha1-bkwGldODNQFdbEMnMhOxFf8mp50=",
       "dependencies": {
         "tslib": "^2.3.0"
       },
       "peerDependencies": {
-        "@angular/common": "^18.0.2",
-        "@angular/core": "^18.0.2"
+        "@angular/common": "^19.0.3",
+        "@angular/core": "^19.0.3"
       }
     },
     "node_modules/@ghsc/nshmp-template": {
@@ -8338,13 +8352,6 @@
         "fsevents": "~2.3.2"
       }
     },
-    "node_modules/@rtsao/scc": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
-      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/@schematics/angular": {
       "version": "19.0.5",
       "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.0.5.tgz",
@@ -8989,13 +8996,6 @@
       "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
       "license": "MIT"
     },
-    "node_modules/@types/json5": {
-      "version": "0.0.29",
-      "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
-      "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/@types/leaflet": {
       "version": "1.9.14",
       "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.14.tgz",
@@ -10225,6 +10225,16 @@
       ],
       "license": "MIT"
     },
+    "node_modules/are-docs-informative": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
+      "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=14"
+      }
+    },
     "node_modules/arg": {
       "version": "4.1.3",
       "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
@@ -10286,27 +10296,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/array-includes": {
-      "version": "3.1.8",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
-      "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-object-atoms": "^1.0.0",
-        "get-intrinsic": "^1.2.4",
-        "is-string": "^1.0.7"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/array-normalize": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/array-normalize/-/array-normalize-1.1.4.tgz",
@@ -10338,88 +10327,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/array.prototype.findlastindex": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
-      "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
-        "es-shim-unscopables": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.flat": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
-      "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "es-shim-unscopables": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.flatmap": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
-      "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "es-shim-unscopables": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/arraybuffer.prototype.slice": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
-      "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-buffer-byte-length": "^1.0.1",
-        "call-bind": "^1.0.5",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.22.3",
-        "es-errors": "^1.2.1",
-        "get-intrinsic": "^1.2.3",
-        "is-array-buffer": "^3.0.4",
-        "is-shared-array-buffer": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/arrify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
@@ -12478,6 +12385,16 @@
         "node": ">=18"
       }
     },
+    "node_modules/comment-parser": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz",
+      "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 12.0.0"
+      }
+    },
     "node_modules/common-path-prefix": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
@@ -13070,9 +12987,9 @@
       "license": "MIT"
     },
     "node_modules/cypress": {
-      "version": "13.15.2",
-      "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.15.2.tgz",
-      "integrity": "sha512-ARbnUorjcCM3XiPwgHKuqsyr5W9Qn+pIIBPaoilnoBkLdSC2oLQjV1BUpnmc7KR+b7Avah3Ly2RMFnfxr96E/A==",
+      "version": "13.16.1",
+      "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.16.1.tgz",
+      "integrity": "sha512-17FtCaz0cx7ssWYKXzGB0Vub8xHwpVPr+iPt2fHhLMDhVAPVrplD+rTQsZUsfb19LVBn5iwkEUFjQ1yVVJXsLA==",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
@@ -13824,60 +13741,6 @@
         "node": ">=12"
       }
     },
-    "node_modules/data-view-buffer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
-      "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.6",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/data-view-byte-length": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
-      "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/data-view-byte-offset": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
-      "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.6",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/dayjs": {
       "version": "1.11.13",
       "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
@@ -14694,67 +14557,6 @@
         "is-arrayish": "^0.2.1"
       }
     },
-    "node_modules/es-abstract": {
-      "version": "1.23.3",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
-      "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-buffer-byte-length": "^1.0.1",
-        "arraybuffer.prototype.slice": "^1.0.3",
-        "available-typed-arrays": "^1.0.7",
-        "call-bind": "^1.0.7",
-        "data-view-buffer": "^1.0.1",
-        "data-view-byte-length": "^1.0.1",
-        "data-view-byte-offset": "^1.0.0",
-        "es-define-property": "^1.0.0",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
-        "es-set-tostringtag": "^2.0.3",
-        "es-to-primitive": "^1.2.1",
-        "function.prototype.name": "^1.1.6",
-        "get-intrinsic": "^1.2.4",
-        "get-symbol-description": "^1.0.2",
-        "globalthis": "^1.0.3",
-        "gopd": "^1.0.1",
-        "has-property-descriptors": "^1.0.2",
-        "has-proto": "^1.0.3",
-        "has-symbols": "^1.0.3",
-        "hasown": "^2.0.2",
-        "internal-slot": "^1.0.7",
-        "is-array-buffer": "^3.0.4",
-        "is-callable": "^1.2.7",
-        "is-data-view": "^1.0.1",
-        "is-negative-zero": "^2.0.3",
-        "is-regex": "^1.1.4",
-        "is-shared-array-buffer": "^1.0.3",
-        "is-string": "^1.0.7",
-        "is-typed-array": "^1.1.13",
-        "is-weakref": "^1.0.2",
-        "object-inspect": "^1.13.1",
-        "object-keys": "^1.1.1",
-        "object.assign": "^4.1.5",
-        "regexp.prototype.flags": "^1.5.2",
-        "safe-array-concat": "^1.1.2",
-        "safe-regex-test": "^1.0.3",
-        "string.prototype.trim": "^1.2.9",
-        "string.prototype.trimend": "^1.0.8",
-        "string.prototype.trimstart": "^1.0.8",
-        "typed-array-buffer": "^1.0.2",
-        "typed-array-byte-length": "^1.0.1",
-        "typed-array-byte-offset": "^1.0.2",
-        "typed-array-length": "^1.0.6",
-        "unbox-primitive": "^1.0.2",
-        "which-typed-array": "^1.1.15"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/es-define-property": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
@@ -14808,62 +14610,6 @@
       "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
       "license": "MIT"
     },
-    "node_modules/es-object-atoms": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
-      "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-set-tostringtag": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
-      "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "get-intrinsic": "^1.2.4",
-        "has-tostringtag": "^1.0.2",
-        "hasown": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-shim-unscopables": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
-      "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "hasown": "^2.0.0"
-      }
-    },
-    "node_modules/es-to-primitive": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-callable": "^1.1.4",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/es5-ext": {
       "version": "0.10.64",
       "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
@@ -15115,56 +14861,6 @@
         "eslint": ">=7.0.0"
       }
     },
-    "node_modules/eslint-import-resolver-node": {
-      "version": "0.3.9",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
-      "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^3.2.7",
-        "is-core-module": "^2.13.0",
-        "resolve": "^1.22.4"
-      }
-    },
-    "node_modules/eslint-import-resolver-node/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-module-utils": {
-      "version": "2.12.0",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
-      "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^3.2.7"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependenciesMeta": {
-        "eslint": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
     "node_modules/eslint-plugin-es": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
@@ -15211,131 +14907,72 @@
         "node": ">=4"
       }
     },
-    "node_modules/eslint-plugin-import": {
-      "version": "2.31.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
-      "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
+    "node_modules/eslint-plugin-jsdoc": {
+      "version": "50.6.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.6.1.tgz",
+      "integrity": "sha512-UWyaYi6iURdSfdVVqvfOs2vdCVz0J40O/z/HTsv2sFjdjmdlUI/qlKLOTmwbPQ2tAfQnE5F9vqx+B+poF71DBQ==",
       "dev": true,
-      "license": "MIT",
+      "license": "BSD-3-Clause",
       "dependencies": {
-        "@rtsao/scc": "^1.1.0",
-        "array-includes": "^3.1.8",
-        "array.prototype.findlastindex": "^1.2.5",
-        "array.prototype.flat": "^1.3.2",
-        "array.prototype.flatmap": "^1.3.2",
-        "debug": "^3.2.7",
-        "doctrine": "^2.1.0",
-        "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.12.0",
-        "hasown": "^2.0.2",
-        "is-core-module": "^2.15.1",
-        "is-glob": "^4.0.3",
-        "minimatch": "^3.1.2",
-        "object.fromentries": "^2.0.8",
-        "object.groupby": "^1.0.3",
-        "object.values": "^1.2.0",
-        "semver": "^6.3.1",
-        "string.prototype.trimend": "^1.0.8",
-        "tsconfig-paths": "^3.15.0"
+        "@es-joy/jsdoccomment": "~0.49.0",
+        "are-docs-informative": "^0.0.2",
+        "comment-parser": "1.4.1",
+        "debug": "^4.3.6",
+        "escape-string-regexp": "^4.0.0",
+        "espree": "^10.1.0",
+        "esquery": "^1.6.0",
+        "parse-imports": "^2.1.1",
+        "semver": "^7.6.3",
+        "spdx-expression-parse": "^4.0.0",
+        "synckit": "^0.9.1"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=18"
       },
       "peerDependencies": {
-        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
+        "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
       }
     },
-    "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/doctrine": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+    "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+      "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
       "dev": true,
       "license": "Apache-2.0",
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
       "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/json5": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "minimist": "^1.2.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
-      "bin": {
-        "json5": "lib/cli.js"
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/eslint-plugin-import/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+    "node_modules/eslint-plugin-jsdoc/node_modules/espree": {
+      "version": "10.3.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+      "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
       "dev": true,
-      "license": "ISC",
+      "license": "BSD-2-Clause",
       "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "acorn": "^8.14.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^4.2.0"
       },
       "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": {
-      "version": "3.15.0",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
-      "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+    "node_modules/eslint-plugin-jsdoc/node_modules/spdx-expression-parse": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
+      "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@types/json5": "^0.0.29",
-        "json5": "^1.0.2",
-        "minimist": "^1.2.6",
-        "strip-bom": "^3.0.0"
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
       }
     },
     "node_modules/eslint-plugin-n": {
@@ -15388,6 +15025,16 @@
         "node": "*"
       }
     },
+    "node_modules/eslint-plugin-prefer-arrow": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz",
+      "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==",
+      "dev": true,
+      "license": "MIT",
+      "peerDependencies": {
+        "eslint": ">=2.0.0"
+      }
+    },
     "node_modules/eslint-plugin-prettier": {
       "version": "5.2.1",
       "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz",
@@ -15504,20 +15151,14 @@
       }
     },
     "node_modules/eslint-plugin-unused-imports": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.2.0.tgz",
-      "integrity": "sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==",
+      "version": "4.1.4",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz",
+      "integrity": "sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "eslint-rule-composer": "^0.3.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
       "peerDependencies": {
-        "@typescript-eslint/eslint-plugin": "6 - 7",
-        "eslint": "8"
+        "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0",
+        "eslint": "^9.0.0 || ^8.0.0"
       },
       "peerDependenciesMeta": {
         "@typescript-eslint/eslint-plugin": {
@@ -15525,16 +15166,6 @@
         }
       }
     },
-    "node_modules/eslint-rule-composer": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz",
-      "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4.0.0"
-      }
-    },
     "node_modules/eslint-scope": {
       "version": "8.2.0",
       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
@@ -16804,25 +16435,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/function.prototype.name": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
-      "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "functions-have-names": "^1.2.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/functions-have-names": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
@@ -16920,24 +16532,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/get-symbol-description": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
-      "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.5",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.4"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/getos": {
       "version": "3.2.1",
       "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
@@ -17140,23 +16734,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/globalthis": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
-      "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-properties": "^1.2.1",
-        "gopd": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/globby": {
       "version": "11.1.0",
       "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
@@ -17460,25 +17037,25 @@
       "license": "ISC"
     },
     "node_modules/gts": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/gts/-/gts-5.3.1.tgz",
-      "integrity": "sha512-P9F+krJkGOkisUX+P9pfUas1Xy+U+CxBFZT62uInkJbgvZpnW1ug/pIcMJJmLOthMq1J88lpQUGhXDC9UTvVcw==",
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/gts/-/gts-6.0.2.tgz",
+      "integrity": "sha512-lp9+eDzzm6TYqiBpgGY00EInxBHFTJiU5brsVp11qXCJEw7Q6WNNngja0spZeqSFWSquaRuHQUuWxdZLaxnKmw==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
         "@typescript-eslint/eslint-plugin": "5.62.0",
         "@typescript-eslint/parser": "5.62.0",
         "chalk": "^4.1.2",
-        "eslint": "8.57.0",
+        "eslint": "8.57.1",
         "eslint-config-prettier": "9.1.0",
         "eslint-plugin-n": "15.7.0",
-        "eslint-plugin-prettier": "5.1.3",
+        "eslint-plugin-prettier": "5.2.1",
         "execa": "^5.0.0",
         "inquirer": "^7.3.3",
         "json5": "^2.1.3",
         "meow": "^9.0.0",
         "ncp": "^2.0.0",
-        "prettier": "3.2.5",
+        "prettier": "3.3.3",
         "rimraf": "3.0.2",
         "write-file-atomic": "^4.0.0"
       },
@@ -17486,36 +17063,10 @@
         "gts": "build/src/cli.js"
       },
       "engines": {
-        "node": ">=14"
+        "node": ">=18"
       },
       "peerDependencies": {
-        "typescript": ">=3"
-      }
-    },
-    "node_modules/gts/node_modules/@eslint/js": {
-      "version": "8.57.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
-      "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
-    "node_modules/gts/node_modules/@humanwhocodes/config-array": {
-      "version": "0.11.14",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
-      "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
-      "deprecated": "Use @eslint/config-array instead",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@humanwhocodes/object-schema": "^2.0.2",
-        "debug": "^4.3.1",
-        "minimatch": "^3.0.5"
-      },
-      "engines": {
-        "node": ">=10.10.0"
+        "typescript": ">=5"
       }
     },
     "node_modules/gts/node_modules/@typescript-eslint/eslint-plugin": {
@@ -17714,122 +17265,6 @@
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/gts/node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/gts/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/gts/node_modules/eslint": {
-      "version": "8.57.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
-      "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
-      "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.2.0",
-        "@eslint-community/regexpp": "^4.6.1",
-        "@eslint/eslintrc": "^2.1.4",
-        "@eslint/js": "8.57.0",
-        "@humanwhocodes/config-array": "^0.11.14",
-        "@humanwhocodes/module-importer": "^1.0.1",
-        "@nodelib/fs.walk": "^1.2.8",
-        "@ungap/structured-clone": "^1.2.0",
-        "ajv": "^6.12.4",
-        "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.2",
-        "debug": "^4.3.2",
-        "doctrine": "^3.0.0",
-        "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.2.2",
-        "eslint-visitor-keys": "^3.4.3",
-        "espree": "^9.6.1",
-        "esquery": "^1.4.2",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
-        "find-up": "^5.0.0",
-        "glob-parent": "^6.0.2",
-        "globals": "^13.19.0",
-        "graphemer": "^1.4.0",
-        "ignore": "^5.2.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "is-path-inside": "^3.0.3",
-        "js-yaml": "^4.1.0",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.4.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "^3.1.2",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.9.3",
-        "strip-ansi": "^6.0.1",
-        "text-table": "^0.2.0"
-      },
-      "bin": {
-        "eslint": "bin/eslint.js"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/gts/node_modules/eslint-plugin-prettier": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz",
-      "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "prettier-linter-helpers": "^1.0.0",
-        "synckit": "^0.8.6"
-      },
-      "engines": {
-        "node": "^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint-plugin-prettier"
-      },
-      "peerDependencies": {
-        "@types/eslint": ">=8.0.0",
-        "eslint": ">=8.0.0",
-        "eslint-config-prettier": "*",
-        "prettier": ">=3.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/eslint": {
-          "optional": true
-        },
-        "eslint-config-prettier": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/gts/node_modules/eslint-scope": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -17854,23 +17289,6 @@
         "node": ">=4.0"
       }
     },
-    "node_modules/gts/node_modules/eslint/node_modules/eslint-scope": {
-      "version": "7.2.2",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
-      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
     "node_modules/gts/node_modules/execa": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -17892,114 +17310,15 @@
         "node": ">=10"
       },
       "funding": {
-        "url": "https://github.com/sindresorhus/execa?sponsor=1"
-      }
-    },
-    "node_modules/gts/node_modules/get-stream": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
-      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/gts/node_modules/globals": {
-      "version": "13.24.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "type-fest": "^0.20.2"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/gts/node_modules/human-signals": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
-      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=10.17.0"
-      }
-    },
-    "node_modules/gts/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/gts/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/gts/node_modules/prettier": {
-      "version": "3.2.5",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
-      "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "prettier": "bin/prettier.cjs"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/prettier/prettier?sponsor=1"
-      }
-    },
-    "node_modules/gts/node_modules/signal-exit": {
-      "version": "3.0.7",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/gts/node_modules/synckit": {
-      "version": "0.8.8",
-      "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz",
-      "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@pkgr/core": "^0.1.0",
-        "tslib": "^2.6.2"
-      },
-      "engines": {
-        "node": "^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/unts"
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
       }
     },
-    "node_modules/gts/node_modules/type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+    "node_modules/gts/node_modules/get-stream": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
       "dev": true,
-      "license": "(MIT OR CC0-1.0)",
+      "license": "MIT",
       "engines": {
         "node": ">=10"
       },
@@ -18007,6 +17326,23 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/gts/node_modules/human-signals": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=10.17.0"
+      }
+    },
+    "node_modules/gts/node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/gzip-size": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz",
@@ -19007,22 +18343,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-data-view": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
-      "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-typed-array": "^1.1.13"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/is-date-object": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
@@ -19207,19 +18527,6 @@
       "integrity": "sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew==",
       "license": "MIT"
     },
-    "node_modules/is-negative-zero": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
-      "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/is-network-error": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz",
@@ -19446,19 +18753,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-weakref": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
-      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/is-weakset": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
@@ -20246,9 +19540,9 @@
       }
     },
     "node_modules/jest-preset-angular": {
-      "version": "14.2.4",
-      "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-14.2.4.tgz",
-      "integrity": "sha512-xyhkaiBdn3keBgxxkcbqZu/my3ADU9NcDrz6DaMuGRaxz/bf6ZC1qxZ1eQuz5V1WuA3/rD64VA3Kke8P6E9qNg==",
+      "version": "14.4.2",
+      "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-14.4.2.tgz",
+      "integrity": "sha512-BYYv0FaTDfBNh8WyA9mpOV3krfw20kurBGK8INZUnv7KZDAWZuQtCET4TwTWxSNQ9jS1OX1+a5weCm/bTDDM1A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -20266,10 +19560,9 @@
         "esbuild": ">=0.15.13"
       },
       "peerDependencies": {
-        "@angular-devkit/build-angular": ">=15.0.0 <19.0.0",
-        "@angular/compiler-cli": ">=15.0.0 <19.0.0",
-        "@angular/core": ">=15.0.0 <19.0.0",
-        "@angular/platform-browser-dynamic": ">=15.0.0 <19.0.0",
+        "@angular/compiler-cli": ">=15.0.0 <20.0.0",
+        "@angular/core": ">=15.0.0 <20.0.0",
+        "@angular/platform-browser-dynamic": ">=15.0.0 <20.0.0",
         "jest": "^29.0.0",
         "typescript": ">=4.8"
       }
@@ -20660,6 +19953,16 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/jsdoc-type-pratt-parser": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz",
+      "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
     "node_modules/jsdom": {
       "version": "20.0.3",
       "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz",
@@ -23998,58 +23301,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/object.fromentries": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
-      "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.groupby": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
-      "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.values": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
-      "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/obuf": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
@@ -24387,6 +23638,20 @@
       "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==",
       "license": "MIT"
     },
+    "node_modules/parse-imports": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz",
+      "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==",
+      "dev": true,
+      "license": "Apache-2.0 AND MIT",
+      "dependencies": {
+        "es-module-lexer": "^1.5.3",
+        "slashes": "^3.0.12"
+      },
+      "engines": {
+        "node": ">= 18"
+      }
+    },
     "node_modules/parse-json": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -26435,32 +25700,6 @@
         "tslib": "^2.1.0"
       }
     },
-    "node_modules/safe-array-concat": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
-      "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "get-intrinsic": "^1.2.4",
-        "has-symbols": "^1.0.3",
-        "isarray": "^2.0.5"
-      },
-      "engines": {
-        "node": ">=0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/safe-array-concat/node_modules/isarray": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
-      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/safe-buffer": {
       "version": "5.2.1",
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -26481,24 +25720,6 @@
       ],
       "license": "MIT"
     },
-    "node_modules/safe-regex-test": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
-      "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.6",
-        "es-errors": "^1.3.0",
-        "is-regex": "^1.1.4"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/safer-buffer": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -27080,6 +26301,13 @@
         "node": ">=8"
       }
     },
+    "node_modules/slashes": {
+      "version": "3.0.12",
+      "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz",
+      "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/slice-ansi": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
@@ -27544,58 +26772,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/string.prototype.trim": {
-      "version": "1.2.9",
-      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
-      "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.0",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimend": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
-      "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimstart": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
-      "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/strip-ansi": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -28693,83 +27869,6 @@
         "node": ">= 0.6"
       }
     },
-    "node_modules/typed-array-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
-      "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "es-errors": "^1.3.0",
-        "is-typed-array": "^1.1.13"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/typed-array-byte-length": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
-      "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "has-proto": "^1.0.3",
-        "is-typed-array": "^1.1.13"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/typed-array-byte-offset": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
-      "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "available-typed-arrays": "^1.0.7",
-        "call-bind": "^1.0.7",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "has-proto": "^1.0.3",
-        "is-typed-array": "^1.1.13"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/typed-array-length": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
-      "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "has-proto": "^1.0.3",
-        "is-typed-array": "^1.1.13",
-        "possible-typed-array-names": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/typed-assert": {
       "version": "1.0.9",
       "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz",
@@ -28819,22 +27918,6 @@
         "node": ">=0.8.0"
       }
     },
-    "node_modules/unbox-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
-      "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-bigints": "^1.0.2",
-        "has-symbols": "^1.0.3",
-        "which-boxed-primitive": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/undici-types": {
       "version": "6.19.8",
       "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
diff --git a/package.json b/package.json
index 0a776f4aa..d387b8d59 100644
--- a/package.json
+++ b/package.json
@@ -45,7 +45,7 @@
     "@bluehalo/ngx-leaflet": "^19.0.0",
     "@compodoc/compodoc": "^1.1.26",
     "@ghsc/disagg-d3": "^0.13.0",
-    "@ghsc/nshmp-lib-ng": "^18.25.1",
+    "@ghsc/nshmp-lib-ng": "^19.0.0",
     "@ghsc/nshmp-template": "^19.1.1",
     "@ghsc/nshmp-utils-ts": "^3.12.1",
     "angular-plotly.js": "^6.0.0",
@@ -92,23 +92,22 @@
     "@typescript-eslint/eslint-plugin": "^8.18.1",
     "@typescript-eslint/parser": "^8.18.1",
     "angular-http-server": "^1.12.0",
-    "cypress": "^13.15.2",
-    "eslint": "^8.57.1",
-    "eslint-config-prettier": "^9.1.0",
-    "eslint-plugin-import": "^2.31.0",
+    "cypress": "^13.16.1",
+    "eslint-plugin-jsdoc": "^50.6.1",
+    "eslint-plugin-prefer-arrow": "^1.2.3",
     "eslint-plugin-prettier": "^5.2.1",
     "eslint-plugin-simple-import-sort": "^12.1.1",
     "eslint-plugin-sort-keys-fix": "^1.1.2",
     "eslint-plugin-typescript-sort-keys": "^3.3.0",
-    "eslint-plugin-unused-imports": "^3.2.0",
+    "eslint-plugin-unused-imports": "^4.1.4",
     "fast-deep-equal": "^3.1.3",
-    "gts": "^5.3.1",
+    "gts": "^6.0.2",
     "husky": "^9.1.6",
     "jest": "^29.7.0",
     "jest-environment-jsdom": "^29.7.0",
     "jest-fail-on-console": "^3.3.1",
     "jest-junit": "^16.0.0",
-    "jest-preset-angular": "^14.2.4",
+    "jest-preset-angular": "^14.4.2",
     "ng-packagr": "^19.0.1",
     "prettier": "^3.3.3",
     "pretty-quick": "^4.0.0",
-- 
GitLab


From 90157700859e04850521d7d775b67dd855191017 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 10:38:11 -0700
Subject: [PATCH 07/27] audit fix

---
 package-lock.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index f3924b7f1..251093145 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -21890,9 +21890,9 @@
       }
     },
     "node_modules/nanoid": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
-      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+      "version": "3.3.8",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
+      "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
       "funding": [
         {
           "type": "github",
-- 
GitLab


From 1d2737ebc38313754b44639d7d49f2f2d834a451 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 10:43:29 -0700
Subject: [PATCH 08/27] lint fix

---
 .eslintrc.json                                |    3 +-
 package-lock.json                             | 1216 +++++++++++++++--
 package.json                                  |    1 +
 .../integration/dashboard/dashboard.spec.ts   |    2 +-
 .../dev/dashboard/dev-dashboard.spec.ts       |    2 +-
 .../integration/hazard/disagg/disagg.spec.ts  |   12 +-
 .../hazard/static/static-hazard.spec.ts       |    4 +-
 .../integration/source/mfd/mfd.spec.ts        |    2 +-
 .../cypress/utils/dashboard.utils.ts          |    4 +-
 .../cypress/utils/nshmp-template.utils.ts     |    2 +-
 projects/nshmp-apps/jest.config.ts            |    2 +-
 projects/nshmp-apps/src/app/app.component.ts  |    2 +-
 .../building-code-control.component.ts        |   10 +-
 .../components/content/content.component.ts   |    2 +-
 .../control-panel-hazard.component.ts         |   16 +-
 .../control-panel-input.component.ts          |    8 +-
 .../rtgm/components/data/data.component.ts    |    2 +-
 .../rtgm/components/plots/plots.component.ts  |    2 +-
 .../risk-targets/risk-targets.component.ts    |    2 +-
 .../designmaps/rtgm/services/app.service.ts   |   62 +-
 .../nshmp-apps/src/app/dev/gmm/gmm.routes.ts  |    2 +-
 .../components/content/content.component.ts   |    4 +-
 .../control-panel/control-panel.component.ts  |   30 +-
 .../components/plots/plots.component.ts       |    8 +-
 .../services/app.service.ts                   |   20 +-
 .../control-panel/control-panel.component.ts  |   16 +-
 .../hazard-data/hazard-data.component.ts      |    6 +-
 .../parameter-summary.component.ts            |    2 +-
 .../components/plots/plots.component.ts       |   22 +-
 .../spectra-data/spectra-data.component.ts    |   16 +-
 .../guards/dynamic-hazard-compare.guard.ts    |   12 +-
 .../dynamic-compare/services/app.service.ts   |   74 +-
 .../services/hazard-plots.service.ts          |   48 +-
 .../dynamic-compare/services/math.service.ts  |    2 +-
 .../services/spectra-plots.service.ts         |   62 +-
 .../control-panel/control-panel.component.ts  |    2 +-
 .../services/app.service.ts                   |   14 +-
 .../src/app/dev/math/math.routes.ts           |    2 +-
 .../components/content/content.component.ts   |    4 +-
 .../control-panel/control-panel.component.ts  |   24 +-
 .../app/gmm/distance/services/app.service.ts  |   18 +-
 .../components/content/content.component.ts   |    4 +-
 .../control-panel/control-panel.component.ts  |   16 +-
 .../path-parameters.component.ts              |    2 +-
 .../site-parameters.component.ts              |    4 +-
 .../app/gmm/magnitude/services/app.service.ts |   20 +-
 .../components/content/content.component.ts   |    4 +-
 .../control-panel/control-panel.component.ts  |   12 +-
 .../event-parameters.component.ts             |   10 +-
 .../path-parameters.component.ts              |    8 +-
 .../components/plots/plots.component.ts       |    2 +-
 .../site-parameters.component.ts              |    4 +-
 .../app/gmm/spectra/services/app.service.ts   |   32 +-
 .../components/content/content.component.ts   |    6 +-
 .../control-panel/control-panel.component.ts  |   10 +-
 .../disagg-data/disagg-data.component.ts      |    4 +-
 .../geo-disagg/geo-disagg.component.ts        |   16 +-
 .../parameter-summary.component.ts            |    2 +-
 .../components/plots/plots.component.ts       |    2 +-
 .../app/hazard/disagg/services/app.service.ts |   57 +-
 .../components/content/content.component.ts   |    4 +-
 .../control-panel/control-panel.component.ts  |   12 +-
 .../parameter-summary.component.ts            |    2 +-
 .../hazard/dynamic/services/app.service.ts    |   50 +-
 .../control-panel/control-panel.component.ts  |   10 +-
 .../curve-data/curve-data.component.ts        |    8 +-
 .../parameter-summary.component.ts            |    2 +-
 .../spectrum-data/spectrum-data.component.ts  |    2 +-
 .../app/hazard/static/services/app.service.ts |   66 +-
 .../src/app/internal/aws/aws.routes.ts        |    2 +-
 .../components/content/content.component.ts   |    4 +-
 .../control-panel/control-panel.component.ts  |    2 +-
 .../snack-bar/snack-bar.component.ts          |    2 +-
 .../aws/check-haz-jobs/pipes/log.pipe.ts      |    8 +-
 .../check-haz-jobs/services/app.service.ts    |   18 +-
 .../components/content/content.component.ts   |    4 +-
 .../control-panel/control-panel.component.ts  |    4 +-
 .../haz-job-history/services/app.service.ts   |   10 +-
 .../components/form/form.component.ts         |    8 +-
 .../components/history/history.component.ts   |    6 +-
 .../job-submitted/job-submitted.component.ts  |    8 +-
 .../submit-haz-jobs/services/app.service.ts   |   40 +-
 .../services/app.service.ts                   |   12 +-
 .../internal/shared/services/auth.service.ts  |    8 +-
 .../control-panel/control-panel.component.ts  |   10 +-
 .../components/data/data.component.ts         |    4 +-
 .../parameter-summary.component.html          |    2 +-
 .../services/app.service.ts                   |   10 +-
 projects/nshmp-apps/src/app/ncm/ncm.routes.ts |    2 +-
 .../components/content/content.component.ts   |   10 +-
 .../src/app/source/mfd/app.component.ts       |    2 +-
 .../control-panel/control-panel.component.ts  |   32 +-
 .../mfd/components/data/data.component.ts     |    8 +-
 .../parameter-summary.component.ts            |    4 +-
 .../app/source/mfd/services/app.service.ts    |   56 +-
 .../app/source/model-maps/app.component.ts    |    4 +-
 .../control-panel/control-panel.component.ts  |   66 +-
 .../info-popup/info-popup.component.ts        |   12 +-
 .../components/map/map.component.ts           |    8 +-
 .../source/model-maps/services/app.service.ts |  102 +-
 .../components/content/content.component.ts   |    4 +-
 .../control-panel/control-panel.component.ts  |   12 +-
 .../app/source/rates/services/app.service.ts  |   30 +-
 .../interceptors/http-error.interceptor.ts    |    4 +-
 .../src/shared/services/shared.service.ts     |    2 +-
 105 files changed, 1843 insertions(+), 792 deletions(-)

diff --git a/.eslintrc.json b/.eslintrc.json
index c12148440..d65e17029 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -58,7 +58,8 @@
         ],
         "unused-imports/no-unused-imports": "error",
         "unused-imports/no-unused-vars": "error",
-        "n/no-extraneous-import": "off"
+        "n/no-extraneous-import": "off",
+        "@typescript-eslint/no-floating-promises": "off"
       },
       "plugins": [
         "simple-import-sort",
diff --git a/package-lock.json b/package-lock.json
index 251093145..60eba3e0c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -69,6 +69,7 @@
         "@typescript-eslint/parser": "^8.18.1",
         "angular-http-server": "^1.12.0",
         "cypress": "^13.16.1",
+        "eslint-plugin-import": "^2.31.0",
         "eslint-plugin-jsdoc": "^50.6.1",
         "eslint-plugin-prefer-arrow": "^1.2.3",
         "eslint-plugin-prettier": "^5.2.1",
@@ -8352,6 +8353,13 @@
         "fsevents": "~2.3.2"
       }
     },
+    "node_modules/@rtsao/scc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@schematics/angular": {
       "version": "19.0.5",
       "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.0.5.tgz",
@@ -8996,6 +9004,13 @@
       "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
       "license": "MIT"
     },
+    "node_modules/@types/json5": {
+      "version": "0.0.29",
+      "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+      "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@types/leaflet": {
       "version": "1.9.14",
       "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.14.tgz",
@@ -10296,6 +10311,27 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/array-includes": {
+      "version": "3.1.8",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+      "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-object-atoms": "^1.0.0",
+        "get-intrinsic": "^1.2.4",
+        "is-string": "^1.0.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/array-normalize": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/array-normalize/-/array-normalize-1.1.4.tgz",
@@ -10327,6 +10363,87 @@
         "node": ">=8"
       }
     },
+    "node_modules/array.prototype.findlastindex": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+      "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "es-shim-unscopables": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.flat": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
+      "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.5",
+        "es-shim-unscopables": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.flatmap": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
+      "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.5",
+        "es-shim-unscopables": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/arraybuffer.prototype.slice": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
+      "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "array-buffer-byte-length": "^1.0.1",
+        "call-bind": "^1.0.8",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.5",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.6",
+        "is-array-buffer": "^3.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/arrify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
@@ -11739,16 +11856,44 @@
       }
     },
     "node_modules/call-bind": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
-      "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
+      "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
       "license": "MIT",
       "dependencies": {
+        "call-bind-apply-helpers": "^1.0.0",
         "es-define-property": "^1.0.0",
-        "es-errors": "^1.3.0",
-        "function-bind": "^1.1.2",
         "get-intrinsic": "^1.2.4",
-        "set-function-length": "^1.2.1"
+        "set-function-length": "^1.2.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/call-bind-apply-helpers": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz",
+      "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/call-bound": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz",
+      "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "get-intrinsic": "^1.2.6"
       },
       "engines": {
         "node": ">= 0.4"
@@ -13741,6 +13886,60 @@
         "node": ">=12"
       }
     },
+    "node_modules/data-view-buffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+      "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/data-view-byte-length": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+      "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/data-view-byte-offset": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+      "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/dayjs": {
       "version": "1.11.13",
       "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
@@ -14265,6 +14464,20 @@
         "node": ">= 0.8.0"
       }
     },
+    "node_modules/dunder-proto": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz",
+      "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/dup": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/dup/-/dup-1.0.0.tgz",
@@ -14557,14 +14770,74 @@
         "is-arrayish": "^0.2.1"
       }
     },
-    "node_modules/es-define-property": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
-      "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+    "node_modules/es-abstract": {
+      "version": "1.23.6",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.6.tgz",
+      "integrity": "sha512-Ifco6n3yj2tMZDWNLyloZrytt9lqqlwvS83P3HtaETR0NUOYnIULGGHpktqYGObGy+8wc1okO25p8TjemhImvA==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "get-intrinsic": "^1.2.4"
+        "array-buffer-byte-length": "^1.0.1",
+        "arraybuffer.prototype.slice": "^1.0.4",
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.3",
+        "data-view-buffer": "^1.0.1",
+        "data-view-byte-length": "^1.0.1",
+        "data-view-byte-offset": "^1.0.0",
+        "es-define-property": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "es-set-tostringtag": "^2.0.3",
+        "es-to-primitive": "^1.3.0",
+        "function.prototype.name": "^1.1.7",
+        "get-intrinsic": "^1.2.6",
+        "get-symbol-description": "^1.0.2",
+        "globalthis": "^1.0.4",
+        "gopd": "^1.2.0",
+        "has-property-descriptors": "^1.0.2",
+        "has-proto": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "hasown": "^2.0.2",
+        "internal-slot": "^1.1.0",
+        "is-array-buffer": "^3.0.4",
+        "is-callable": "^1.2.7",
+        "is-data-view": "^1.0.2",
+        "is-negative-zero": "^2.0.3",
+        "is-regex": "^1.2.1",
+        "is-shared-array-buffer": "^1.0.3",
+        "is-string": "^1.1.1",
+        "is-typed-array": "^1.1.13",
+        "is-weakref": "^1.1.0",
+        "math-intrinsics": "^1.0.0",
+        "object-inspect": "^1.13.3",
+        "object-keys": "^1.1.1",
+        "object.assign": "^4.1.5",
+        "regexp.prototype.flags": "^1.5.3",
+        "safe-array-concat": "^1.1.3",
+        "safe-regex-test": "^1.1.0",
+        "string.prototype.trim": "^1.2.10",
+        "string.prototype.trimend": "^1.0.9",
+        "string.prototype.trimstart": "^1.0.8",
+        "typed-array-buffer": "^1.0.2",
+        "typed-array-byte-length": "^1.0.1",
+        "typed-array-byte-offset": "^1.0.3",
+        "typed-array-length": "^1.0.7",
+        "unbox-primitive": "^1.0.2",
+        "which-typed-array": "^1.1.16"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/es-define-property": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+      "license": "MIT",
       "engines": {
         "node": ">= 0.4"
       }
@@ -14610,6 +14883,61 @@
       "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
       "license": "MIT"
     },
+    "node_modules/es-object-atoms": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+      "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-set-tostringtag": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+      "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "get-intrinsic": "^1.2.4",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-shim-unscopables": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+      "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "hasown": "^2.0.0"
+      }
+    },
+    "node_modules/es-to-primitive": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
+      "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-callable": "^1.2.7",
+        "is-date-object": "^1.0.5",
+        "is-symbol": "^1.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/es5-ext": {
       "version": "0.10.64",
       "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
@@ -14861,6 +15189,56 @@
         "eslint": ">=7.0.0"
       }
     },
+    "node_modules/eslint-import-resolver-node": {
+      "version": "0.3.9",
+      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+      "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^3.2.7",
+        "is-core-module": "^2.13.0",
+        "resolve": "^1.22.4"
+      }
+    },
+    "node_modules/eslint-import-resolver-node/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/eslint-module-utils": {
+      "version": "2.12.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+      "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^3.2.7"
+      },
+      "engines": {
+        "node": ">=4"
+      },
+      "peerDependenciesMeta": {
+        "eslint": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/eslint-module-utils/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
     "node_modules/eslint-plugin-es": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
@@ -14907,19 +15285,146 @@
         "node": ">=4"
       }
     },
-    "node_modules/eslint-plugin-jsdoc": {
-      "version": "50.6.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.6.1.tgz",
-      "integrity": "sha512-UWyaYi6iURdSfdVVqvfOs2vdCVz0J40O/z/HTsv2sFjdjmdlUI/qlKLOTmwbPQ2tAfQnE5F9vqx+B+poF71DBQ==",
+    "node_modules/eslint-plugin-import": {
+      "version": "2.31.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
+      "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
       "dev": true,
-      "license": "BSD-3-Clause",
+      "license": "MIT",
       "dependencies": {
-        "@es-joy/jsdoccomment": "~0.49.0",
-        "are-docs-informative": "^0.0.2",
-        "comment-parser": "1.4.1",
-        "debug": "^4.3.6",
-        "escape-string-regexp": "^4.0.0",
-        "espree": "^10.1.0",
+        "@rtsao/scc": "^1.1.0",
+        "array-includes": "^3.1.8",
+        "array.prototype.findlastindex": "^1.2.5",
+        "array.prototype.flat": "^1.3.2",
+        "array.prototype.flatmap": "^1.3.2",
+        "debug": "^3.2.7",
+        "doctrine": "^2.1.0",
+        "eslint-import-resolver-node": "^0.3.9",
+        "eslint-module-utils": "^2.12.0",
+        "hasown": "^2.0.2",
+        "is-core-module": "^2.15.1",
+        "is-glob": "^4.0.3",
+        "minimatch": "^3.1.2",
+        "object.fromentries": "^2.0.8",
+        "object.groupby": "^1.0.3",
+        "object.values": "^1.2.0",
+        "semver": "^6.3.1",
+        "string.prototype.trimend": "^1.0.8",
+        "tsconfig-paths": "^3.15.0"
+      },
+      "engines": {
+        "node": ">=4"
+      },
+      "peerDependencies": {
+        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/doctrine": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "esutils": "^2.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/json5": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "minimist": "^1.2.0"
+      },
+      "bin": {
+        "json5": "lib/cli.js"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/strip-bom": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": {
+      "version": "3.15.0",
+      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+      "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/json5": "^0.0.29",
+        "json5": "^1.0.2",
+        "minimist": "^1.2.6",
+        "strip-bom": "^3.0.0"
+      }
+    },
+    "node_modules/eslint-plugin-jsdoc": {
+      "version": "50.6.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.6.1.tgz",
+      "integrity": "sha512-UWyaYi6iURdSfdVVqvfOs2vdCVz0J40O/z/HTsv2sFjdjmdlUI/qlKLOTmwbPQ2tAfQnE5F9vqx+B+poF71DBQ==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@es-joy/jsdoccomment": "~0.49.0",
+        "are-docs-informative": "^0.0.2",
+        "comment-parser": "1.4.1",
+        "debug": "^4.3.6",
+        "escape-string-regexp": "^4.0.0",
+        "espree": "^10.1.0",
         "esquery": "^1.6.0",
         "parse-imports": "^2.1.1",
         "semver": "^7.6.3",
@@ -16435,6 +16940,26 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/function.prototype.name": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.7.tgz",
+      "integrity": "sha512-2g4x+HqTJKM9zcJqBSpjoRmdcPFtJM60J3xJisTQSXBWka5XqyBN/2tNUgma1mztTXyDuUsEtYe5qcs7xYzYQA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "define-properties": "^1.2.1",
+        "functions-have-names": "^1.2.3",
+        "hasown": "^2.0.2",
+        "is-callable": "^1.2.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/functions-have-names": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
@@ -16489,16 +17014,21 @@
       }
     },
     "node_modules/get-intrinsic": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
-      "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz",
+      "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==",
       "license": "MIT",
       "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "dunder-proto": "^1.0.0",
+        "es-define-property": "^1.0.1",
         "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
         "function-bind": "^1.1.2",
-        "has-proto": "^1.0.1",
-        "has-symbols": "^1.0.3",
-        "hasown": "^2.0.0"
+        "gopd": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "hasown": "^2.0.2",
+        "math-intrinsics": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -16532,6 +17062,24 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/get-symbol-description": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+      "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.5",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/getos": {
       "version": "3.2.1",
       "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
@@ -16734,6 +17282,23 @@
         "node": ">=4"
       }
     },
+    "node_modules/globalthis": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+      "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "define-properties": "^1.2.1",
+        "gopd": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/globby": {
       "version": "11.1.0",
       "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
@@ -17006,12 +17571,12 @@
       }
     },
     "node_modules/gopd": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
-      "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
       "license": "MIT",
-      "dependencies": {
-        "get-intrinsic": "^1.1.3"
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -17464,10 +18029,14 @@
       }
     },
     "node_modules/has-proto": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
-      "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
+      "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
+      "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "dunder-proto": "^1.0.0"
+      },
       "engines": {
         "node": ">= 0.4"
       },
@@ -17476,9 +18045,9 @@
       }
     },
     "node_modules/has-symbols": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
-      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
       "license": "MIT",
       "engines": {
         "node": ">= 0.4"
@@ -18179,14 +18748,14 @@
       "license": "0BSD"
     },
     "node_modules/internal-slot": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
-      "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
+      "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
       "license": "MIT",
       "dependencies": {
         "es-errors": "^1.3.0",
-        "hasown": "^2.0.0",
-        "side-channel": "^1.0.4"
+        "hasown": "^2.0.2",
+        "side-channel": "^1.1.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -18263,13 +18832,32 @@
       "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
       "license": "MIT"
     },
+    "node_modules/is-async-function": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
+      "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-bigint": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
-      "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
+      "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
       "license": "MIT",
       "dependencies": {
-        "has-bigints": "^1.0.1"
+        "has-bigints": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -18288,13 +18876,13 @@
       }
     },
     "node_modules/is-boolean-object": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
-      "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz",
+      "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==",
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
+        "call-bound": "^1.0.2",
+        "has-tostringtag": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -18343,13 +18931,32 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-data-view": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
+      "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "get-intrinsic": "^1.2.6",
+        "is-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-date-object": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
-      "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
+      "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
       "license": "MIT",
       "dependencies": {
-        "has-tostringtag": "^1.0.0"
+        "call-bound": "^1.0.2",
+        "has-tostringtag": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -18383,6 +18990,22 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/is-finalizationregistry": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz",
+      "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-finite": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
@@ -18527,6 +19150,19 @@
       "integrity": "sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew==",
       "license": "MIT"
     },
+    "node_modules/is-negative-zero": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+      "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-network-error": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz",
@@ -18550,12 +19186,13 @@
       }
     },
     "node_modules/is-number-object": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
-      "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
+      "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
       "license": "MIT",
       "dependencies": {
-        "has-tostringtag": "^1.0.0"
+        "call-bound": "^1.0.3",
+        "has-tostringtag": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -18610,13 +19247,15 @@
       "license": "MIT"
     },
     "node_modules/is-regex": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
-      "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+      "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
+        "call-bound": "^1.0.2",
+        "gopd": "^1.2.0",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -18665,12 +19304,13 @@
       }
     },
     "node_modules/is-string": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
-      "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
+      "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
       "license": "MIT",
       "dependencies": {
-        "has-tostringtag": "^1.0.0"
+        "call-bound": "^1.0.3",
+        "has-tostringtag": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -18692,12 +19332,14 @@
       "license": "MIT"
     },
     "node_modules/is-symbol": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
-      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
+      "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
       "license": "MIT",
       "dependencies": {
-        "has-symbols": "^1.0.2"
+        "call-bound": "^1.0.2",
+        "has-symbols": "^1.1.0",
+        "safe-regex-test": "^1.1.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -18753,6 +19395,22 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-weakref": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz",
+      "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-weakset": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
@@ -21163,6 +21821,15 @@
       "integrity": "sha512-c4vLwYWyl+Ji+U43eU/G5FwxWd4ZH0ePUsFs5y0uwD9HUEFBXUQ1zUUan+78IpRD+y4pUfG0nAzNM292K7ItvA==",
       "license": "MIT"
     },
+    "node_modules/math-intrinsics": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz",
+      "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/math-log2": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz",
@@ -23301,6 +23968,58 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/object.fromentries": {
+      "version": "2.0.8",
+      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+      "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/object.groupby": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+      "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/object.values": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+      "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/obuf": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
@@ -25120,6 +25839,29 @@
       "dev": true,
       "license": "Apache-2.0"
     },
+    "node_modules/reflect.getprototypeof": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz",
+      "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "define-properties": "^1.2.1",
+        "dunder-proto": "^1.0.0",
+        "es-abstract": "^1.23.5",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4",
+        "gopd": "^1.2.0",
+        "which-builtin-type": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/regenerate": {
       "version": "1.4.2",
       "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
@@ -25700,6 +26442,33 @@
         "tslib": "^2.1.0"
       }
     },
+    "node_modules/safe-array-concat": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
+      "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.2",
+        "get-intrinsic": "^1.2.6",
+        "has-symbols": "^1.1.0",
+        "isarray": "^2.0.5"
+      },
+      "engines": {
+        "node": ">=0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/safe-array-concat/node_modules/isarray": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/safe-buffer": {
       "version": "5.2.1",
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -25720,6 +26489,23 @@
       ],
       "license": "MIT"
     },
+    "node_modules/safe-regex-test": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
+      "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "is-regex": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/safer-buffer": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -26216,15 +27002,69 @@
       }
     },
     "node_modules/side-channel": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
-      "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+      "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.7",
         "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.4",
-        "object-inspect": "^1.13.1"
+        "object-inspect": "^1.13.3",
+        "side-channel-list": "^1.0.0",
+        "side-channel-map": "^1.0.1",
+        "side-channel-weakmap": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-list": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+      "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "object-inspect": "^1.13.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-map": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+      "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.5",
+        "object-inspect": "^1.13.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-weakmap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+      "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.5",
+        "object-inspect": "^1.13.3",
+        "side-channel-map": "^1.0.1"
       },
       "engines": {
         "node": ">= 0.4"
@@ -26772,6 +27612,65 @@
         "node": ">=8"
       }
     },
+    "node_modules/string.prototype.trim": {
+      "version": "1.2.10",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
+      "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.2",
+        "define-data-property": "^1.1.4",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.5",
+        "es-object-atoms": "^1.0.0",
+        "has-property-descriptors": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/string.prototype.trimend": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
+      "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.2",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/string.prototype.trimstart": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+      "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/strip-ansi": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -27869,6 +28768,84 @@
         "node": ">= 0.6"
       }
     },
+    "node_modules/typed-array-buffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+      "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "is-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/typed-array-byte-length": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+      "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "for-each": "^0.3.3",
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/typed-array-byte-offset": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz",
+      "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
+        "for-each": "^0.3.3",
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13",
+        "reflect.getprototypeof": "^1.0.6"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/typed-array-length": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
+      "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "for-each": "^0.3.3",
+        "gopd": "^1.0.1",
+        "is-typed-array": "^1.1.13",
+        "possible-typed-array-names": "^1.0.0",
+        "reflect.getprototypeof": "^1.0.6"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/typed-assert": {
       "version": "1.0.9",
       "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz",
@@ -27918,6 +28895,25 @@
         "node": ">=0.8.0"
       }
     },
+    "node_modules/unbox-primitive": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
+      "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.3",
+        "has-bigints": "^1.0.2",
+        "has-symbols": "^1.1.0",
+        "which-boxed-primitive": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/undici-types": {
       "version": "6.19.8",
       "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
@@ -29380,21 +30376,59 @@
       }
     },
     "node_modules/which-boxed-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
-      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
+      "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
       "license": "MIT",
       "dependencies": {
-        "is-bigint": "^1.0.1",
-        "is-boolean-object": "^1.1.0",
-        "is-number-object": "^1.0.4",
-        "is-string": "^1.0.5",
-        "is-symbol": "^1.0.3"
+        "is-bigint": "^1.1.0",
+        "is-boolean-object": "^1.2.1",
+        "is-number-object": "^1.1.1",
+        "is-string": "^1.1.1",
+        "is-symbol": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/which-builtin-type": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
+      "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "function.prototype.name": "^1.1.6",
+        "has-tostringtag": "^1.0.2",
+        "is-async-function": "^2.0.0",
+        "is-date-object": "^1.1.0",
+        "is-finalizationregistry": "^1.1.0",
+        "is-generator-function": "^1.0.10",
+        "is-regex": "^1.2.1",
+        "is-weakref": "^1.0.2",
+        "isarray": "^2.0.5",
+        "which-boxed-primitive": "^1.1.0",
+        "which-collection": "^1.0.2",
+        "which-typed-array": "^1.1.16"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/which-builtin-type/node_modules/isarray": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/which-collection": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
@@ -29414,9 +30448,9 @@
       }
     },
     "node_modules/which-typed-array": {
-      "version": "1.1.15",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
-      "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
+      "version": "1.1.16",
+      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz",
+      "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==",
       "license": "MIT",
       "dependencies": {
         "available-typed-arrays": "^1.0.7",
diff --git a/package.json b/package.json
index d387b8d59..39bc5b1e9 100644
--- a/package.json
+++ b/package.json
@@ -93,6 +93,7 @@
     "@typescript-eslint/parser": "^8.18.1",
     "angular-http-server": "^1.12.0",
     "cypress": "^13.16.1",
+    "eslint-plugin-import": "^2.31.0",
     "eslint-plugin-jsdoc": "^50.6.1",
     "eslint-plugin-prefer-arrow": "^1.2.3",
     "eslint-plugin-prettier": "^5.2.1",
diff --git a/projects/nshmp-apps/cypress/integration/dashboard/dashboard.spec.ts b/projects/nshmp-apps/cypress/integration/dashboard/dashboard.spec.ts
index ab5afa8fa..909100aab 100644
--- a/projects/nshmp-apps/cypress/integration/dashboard/dashboard.spec.ts
+++ b/projects/nshmp-apps/cypress/integration/dashboard/dashboard.spec.ts
@@ -14,7 +14,7 @@ describe('Dashboard', () => {
   describe('Check dashboard', () => {
     const nav = navigation().map(navItem => {
       const list = navItem.navigation.filter(
-        app => app.display !== 'Dashboard'
+        app => app.display !== 'Dashboard',
       );
       return {
         ...navItem,
diff --git a/projects/nshmp-apps/cypress/integration/dev/dashboard/dev-dashboard.spec.ts b/projects/nshmp-apps/cypress/integration/dev/dashboard/dev-dashboard.spec.ts
index 6b93ba787..9a86dd68b 100644
--- a/projects/nshmp-apps/cypress/integration/dev/dashboard/dev-dashboard.spec.ts
+++ b/projects/nshmp-apps/cypress/integration/dev/dashboard/dev-dashboard.spec.ts
@@ -14,7 +14,7 @@ describe('Development Dashboard', () => {
   describe('Check dev dashboard', () => {
     const nav = devNavigation().map(navItem => {
       const list = navItem.navigation.filter(
-        app => app.display !== 'Development Dashboard'
+        app => app.display !== 'Development Dashboard',
       );
       return {
         ...navItem,
diff --git a/projects/nshmp-apps/cypress/integration/hazard/disagg/disagg.spec.ts b/projects/nshmp-apps/cypress/integration/hazard/disagg/disagg.spec.ts
index 5f7e0c983..ade920cfa 100644
--- a/projects/nshmp-apps/cypress/integration/hazard/disagg/disagg.spec.ts
+++ b/projects/nshmp-apps/cypress/integration/hazard/disagg/disagg.spec.ts
@@ -149,41 +149,41 @@ describe('Disagg Application', () => {
         cy.get(returnPeriodRadioButtonSelector)
           .should(
             expected === RETURN_PERIOD ? 'have.class' : 'not.have.class',
-            'mat-radio-checked'
+            'mat-radio-checked',
           )
           .find('input')
           .should(expected === RETURN_PERIOD ? 'be.checked' : 'not.be.checked');
         cy.get(returnPeriodSelector)
           .should(
             expected === RETURN_PERIOD ? 'not.have.class' : 'have.class',
-            'mat-form-field-disabled'
+            'mat-form-field-disabled',
           )
           .find('input')
           .should(expected === RETURN_PERIOD ? 'be.enabled' : 'be.disabled');
         cy.get(commonReturnPeriodSelector).should(
           expected === RETURN_PERIOD ? 'not.have.class' : 'have.class',
-          'mat-select-disabled'
+          'mat-select-disabled',
         );
 
         // IML
         cy.get(imlRadioButtonSelector)
           .should(
             expected === IML ? 'have.class' : 'not.have.class',
-            'mat-radio-checked'
+            'mat-radio-checked',
           )
           .find('input')
           .should(expected === IML ? 'be.checked' : 'not.be.checked');
         cy.get(imlSelector)
           .should(
             expected === IML ? 'not.have.class' : 'have.class',
-            'mat-form-field-disabled'
+            'mat-form-field-disabled',
           )
           .find('input')
           .should(expected === IML ? 'be.enabled' : 'be.disabled');
         cy.get(maxDirectionSelector)
           .should(
             expected === IML ? 'not.have.class' : 'have.class',
-            'mat-checkbox-disabled'
+            'mat-checkbox-disabled',
           )
           .find('input')
           .should(expected === IML ? 'be.enabled' : 'be.disabled');
diff --git a/projects/nshmp-apps/cypress/integration/hazard/static/static-hazard.spec.ts b/projects/nshmp-apps/cypress/integration/hazard/static/static-hazard.spec.ts
index 7d916c6d8..ef75af05c 100644
--- a/projects/nshmp-apps/cypress/integration/hazard/static/static-hazard.spec.ts
+++ b/projects/nshmp-apps/cypress/integration/hazard/static/static-hazard.spec.ts
@@ -78,7 +78,7 @@ describe('Static Hazard Application', () => {
         cy.get('plotly-plot').should('not.exist');
 
         utils.hasExportDataTable(
-          'static-hazard-curves-CONUS_2018-(-118,34).csv'
+          'static-hazard-curves-CONUS_2018-(-118,34).csv',
         );
         utils.hasDataTable();
       });
@@ -101,7 +101,7 @@ describe('Static Hazard Application', () => {
         cy.get('plotly-plot').should('not.exist');
 
         utils.hasExportDataTable(
-          'static-hazard-spectra-CONUS_2018-(-118,34).csv'
+          'static-hazard-spectra-CONUS_2018-(-118,34).csv',
         );
         utils.hasDataTable();
       });
diff --git a/projects/nshmp-apps/cypress/integration/source/mfd/mfd.spec.ts b/projects/nshmp-apps/cypress/integration/source/mfd/mfd.spec.ts
index b5329f042..20da7c987 100644
--- a/projects/nshmp-apps/cypress/integration/source/mfd/mfd.spec.ts
+++ b/projects/nshmp-apps/cypress/integration/source/mfd/mfd.spec.ts
@@ -68,7 +68,7 @@ describe('Magnitude Frequency Distribution Application', () => {
         cy.get('plotly-plot').should('not.exist');
 
         utils.hasExportDataTable(
-          'mfd-active_crust-fault-gore_range_frontal.csv'
+          'mfd-active_crust-fault-gore_range_frontal.csv',
         );
         utils.hasDataTable();
       });
diff --git a/projects/nshmp-apps/cypress/utils/dashboard.utils.ts b/projects/nshmp-apps/cypress/utils/dashboard.utils.ts
index a9c50b9a9..3ff138217 100644
--- a/projects/nshmp-apps/cypress/utils/dashboard.utils.ts
+++ b/projects/nshmp-apps/cypress/utils/dashboard.utils.ts
@@ -11,7 +11,7 @@ export function hasDashboard(navList: NavigationList[]) {
     cy.get('.dashboard').should(
       'have.css',
       'background-image',
-      `url("${Cypress.config().baseUrl}dashboard-background.png")`
+      `url("${Cypress.config().baseUrl}dashboard-background.png")`,
     );
   });
 
@@ -49,7 +49,7 @@ export function hasDashboard(navList: NavigationList[]) {
             'https://earthquake.usgs.gov/ws/nshmp/hazard-runs/auth',
             {
               fixture: 'aws-auth.json',
-            }
+            },
           );
         }
 
diff --git a/projects/nshmp-apps/cypress/utils/nshmp-template.utils.ts b/projects/nshmp-apps/cypress/utils/nshmp-template.utils.ts
index a0aeb19bf..86f9982fd 100644
--- a/projects/nshmp-apps/cypress/utils/nshmp-template.utils.ts
+++ b/projects/nshmp-apps/cypress/utils/nshmp-template.utils.ts
@@ -93,7 +93,7 @@ export function hasNshmpTemplate(navList: NavigationList[]) {
               'https://earthquake.usgs.gov/ws/nshmp/hazard-runs/auth',
               {
                 fixture: 'aws-auth.json',
-              }
+              },
             );
           }
 
diff --git a/projects/nshmp-apps/jest.config.ts b/projects/nshmp-apps/jest.config.ts
index 2495d0033..394a5fb64 100644
--- a/projects/nshmp-apps/jest.config.ts
+++ b/projects/nshmp-apps/jest.config.ts
@@ -8,7 +8,7 @@ const config: Config.InitialOptions = {
   maxWorkers: '80%',
   moduleNameMapper: pathsToModuleNameMapper(
     {'projects/*': ['*']},
-    {prefix: '<rootDir>/..'}
+    {prefix: '<rootDir>/..'},
   ),
   preset: 'jest-preset-angular',
   reporters: ['default', 'jest-junit'],
diff --git a/projects/nshmp-apps/src/app/app.component.ts b/projects/nshmp-apps/src/app/app.component.ts
index 4b236ca7f..3e40ce7f3 100644
--- a/projects/nshmp-apps/src/app/app.component.ts
+++ b/projects/nshmp-apps/src/app/app.component.ts
@@ -27,7 +27,7 @@ export class AppComponent implements OnInit, OnDestroy {
 
   constructor(
     private nshmpService: NshmpService,
-    private http: HttpClient
+    private http: HttpClient,
   ) {}
 
   ngOnInit(): void {
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.ts
index 666fe4b6b..187f72681 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.ts
@@ -17,7 +17,7 @@ export class BuildingCodeControlComponent implements OnInit, OnDestroy {
   control: FormControl<string>;
 
   buildingCodes = computed(
-    () => this.service.usage()?.response.parameters.building_code.values
+    () => this.service.usage()?.response.parameters.building_code.values,
   );
 
   parameters = computed(() => this.service.usage()?.response.parameters);
@@ -35,8 +35,8 @@ export class BuildingCodeControlComponent implements OnInit, OnDestroy {
           if (values.buildingCode !== buildingCode) {
             this.service.hazardFormGroup.patchValue({buildingCode});
           }
-        }
-      )
+        },
+      ),
     );
 
     this.subs.push(
@@ -47,8 +47,8 @@ export class BuildingCodeControlComponent implements OnInit, OnDestroy {
           if (values.buildingCode !== buildingCode) {
             this.service.formGroup.patchValue({buildingCode});
           }
-        }
-      )
+        },
+      ),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/content/content.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/content/content.component.ts
index 9de62c527..5328da61c 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/content/content.component.ts
@@ -13,7 +13,7 @@ import {PlotsComponent} from '../plots/plots.component';
 })
 export class ContentComponent {
   hasData = computed(
-    () => this.service.serviceResponse()?.response !== undefined
+    () => this.service.serviceResponse()?.response !== undefined,
   );
 
   constructor(private service: AppService) {}
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-hazard/control-panel-hazard.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-hazard/control-panel-hazard.component.ts
index d925ed8fd..e800bea84 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-hazard/control-panel-hazard.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-hazard/control-panel-hazard.component.ts
@@ -72,7 +72,7 @@ export class ControlPanelHazardComponent implements OnInit, OnDestroy {
 
   /** List of site class `Parameter`s */
   siteClasses = computed(
-    () => this.service.hazardUsage()?.response?.models.siteClasses
+    () => this.service.hazardUsage()?.response?.models.siteClasses,
   );
 
   /** List of imt `Parameter`s */
@@ -86,25 +86,27 @@ export class ControlPanelHazardComponent implements OnInit, OnDestroy {
     const controls = this.formGroup.controls;
 
     this.subs.push(
-      controls.latitude.valueChanges.subscribe(() => this.service.resetState())
+      controls.latitude.valueChanges.subscribe(() => this.service.resetState()),
     );
 
     this.subs.push(
-      controls.longitude.valueChanges.subscribe(() => this.service.resetState())
+      controls.longitude.valueChanges.subscribe(() =>
+        this.service.resetState(),
+      ),
     );
 
     this.subs.push(
-      controls.model.valueChanges.subscribe(() => this.onModelChange())
+      controls.model.valueChanges.subscribe(() => this.onModelChange()),
     );
 
     this.subs.push(
-      controls.imt.valueChanges.subscribe(() => this.service.hazardToRtgm())
+      controls.imt.valueChanges.subscribe(() => this.service.hazardToRtgm()),
     );
 
     this.subs.push(
       controls.siteClass.valueChanges.subscribe(() =>
-        this.service.hazardToRtgm()
-      )
+        this.service.hazardToRtgm(),
+      ),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts
index b4b954bbc..20225cb58 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts
@@ -42,17 +42,17 @@ export class ControlPanelInputComponent implements OnInit, OnDestroy {
     const controls = this.formGroup.controls;
 
     this.subs.push(
-      controls.afe.valueChanges.subscribe(() => this.service.resetState())
+      controls.afe.valueChanges.subscribe(() => this.service.resetState()),
     );
 
     this.subs.push(
       controls.buildingCode.valueChanges.subscribe(() =>
-        this.service.resetState()
-      )
+        this.service.resetState(),
+      ),
     );
 
     this.subs.push(
-      controls.iml.valueChanges.subscribe(() => this.service.resetState())
+      controls.iml.valueChanges.subscribe(() => this.service.resetState()),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/data/data.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/data/data.component.ts
index 4b8184a89..0547c6493 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/data/data.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/data/data.component.ts
@@ -73,7 +73,7 @@ export class DataComponent {
   private plotTable(
     nshmpPlot: NshmpPlot,
     data: Partial<PlotData>[],
-    addLabel = true
+    addLabel = true,
   ): PlotTable {
     const plot: NshmpPlot = {
       ...nshmpPlot,
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/plots/plots.component.ts
index f0d58121e..e44785343 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/plots/plots.component.ts
@@ -52,7 +52,7 @@ export class PlotsComponent implements OnInit, OnDestroy {
 
   ngOnInit(): void {
     this.sub = this.service.formGroup.controls.label.valueChanges.subscribe(
-      label => this.onLabel(label)
+      label => this.onLabel(label),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/risk-targets/risk-targets.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/risk-targets/risk-targets.component.ts
index e81248504..f4e86f25d 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/risk-targets/risk-targets.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/risk-targets/risk-targets.component.ts
@@ -16,7 +16,7 @@ import {AppService} from '../../services/app.service';
 })
 export class RiskTargetsComponent {
   riskTargets = computed(
-    () => this.service.serviceResponse()?.response.riskTargets
+    () => this.service.serviceResponse()?.response.riskTargets,
   );
 
   constructor(private service: AppService) {}
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/services/app.service.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/services/app.service.ts
index 4f466b187..6d4adee16 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/services/app.service.ts
@@ -105,7 +105,7 @@ export class AppService
     private nshmpService: NshmpService,
     private route: ActivatedRoute,
     private hazardService: HazardService,
-    private location: LocationService
+    private location: LocationService,
   ) {
     super();
     this.addValidators();
@@ -121,8 +121,8 @@ export class AppService
   get hazardUsage(): Signal<StaticHazardUsage> {
     return computed(() =>
       this.state().hazardUsageResponses.get(
-        this.hazardFormGroup.getRawValue().model
-      )
+        this.hazardFormGroup.getRawValue().model,
+      ),
     );
   }
 
@@ -133,8 +133,8 @@ export class AppService
     return computed(() =>
       this.state().nshmServices.find(
         nshmService =>
-          nshmService.model === this.hazardFormGroup.getRawValue().model
-      )
+          nshmService.model === this.hazardFormGroup.getRawValue().model,
+      ),
     );
   }
 
@@ -221,7 +221,7 @@ export class AppService
     const values = this.hazardFormGroup.getRawValue();
 
     const service = this.state().nshmServices.find(
-      nshmService => nshmService.model === values.model
+      nshmService => nshmService.model === values.model,
     );
     const serviceUrl = `${service.url}${this.hazardServiceEndpoint}`;
     const url = `${serviceUrl}/${values.longitude}/${values.latitude}`;
@@ -232,7 +232,7 @@ export class AppService
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(hazardServiceResponse => {
         spinnerRef.close();
@@ -262,7 +262,7 @@ export class AppService
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(response => {
         this.handleServiceResponse(response);
@@ -317,15 +317,15 @@ export class AppService
 
   init(): void {
     const spinnerRef = this.spinnerService.show(
-      SpinnerService.MESSAGE_METADATA
+      SpinnerService.MESSAGE_METADATA,
     );
 
     const rtgm = this.nshmpService.callService$<RtgmUsageResponse>(
-      this.serviceUrl
+      this.serviceUrl,
     );
     const hazard = this.hazardService.staticNshms$(
       `${this.nshmpWsStatic.url}${this.nshmpWsStatic.services.nshms}`,
-      this.hazardServiceEndpoint
+      this.hazardServiceEndpoint,
     );
 
     forkJoin([rtgm, hazard])
@@ -333,7 +333,7 @@ export class AppService
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(([usageResponse, nshms]) => {
         this.handleUsageResponse(usageResponse, nshms);
@@ -382,14 +382,14 @@ export class AppService
 
     super.resetPlotSetting(
       plots.derivativeFragility,
-      defaultPlots.derivativeFragility
+      defaultPlots.derivativeFragility,
     );
     super.resetPlotSetting(plots.fragility, defaultPlots.fragility);
     super.resetPlotSetting(plots.hazard, defaultPlots.hazard);
     super.resetPlotSetting(plots.hazardFragility, defaultPlots.hazardFragility);
     super.resetPlotSetting(
       plots.integralHazardFragility,
-      defaultPlots.integralHazardFragility
+      defaultPlots.integralHazardFragility,
     );
   }
 
@@ -439,7 +439,7 @@ export class AppService
   }
 
   private createDerivativeFragilityPlot(
-    iterations: IterationPlotData
+    iterations: IterationPlotData,
   ): NshmpPlot {
     const plots = this.state().plots;
 
@@ -454,7 +454,7 @@ export class AppService
 
   private createFragilityPlot(
     rtgm: Rtgm,
-    iterations: IterationPlotData
+    iterations: IterationPlotData,
   ): NshmpPlot {
     const plots = this.state().plots;
     const {condCollapseProb} = rtgm.riskTargets;
@@ -468,13 +468,13 @@ export class AppService
           this.linePlotData(
             iterations.integralHazardFragilityPlotData,
             condCollapseProb,
-            `${condCollapseProb * 100}% Conditional Probability of Collapse`
+            `${condCollapseProb * 100}% Conditional Probability of Collapse`,
           ),
           ...this.createFragilitySlices(
             condCollapseProb,
             rtgm.rtgmCalc.iterations,
             rtgm.rtgmCalc.upsampledHazCurve.imlUP,
-            [0, 1]
+            [0, 1],
           ),
         ],
       },
@@ -485,7 +485,7 @@ export class AppService
     condCollapseProb: number,
     iterations: RtgmIteration[],
     imls: number[],
-    yRange: number[]
+    yRange: number[],
   ): Partial<PlotData>[] {
     const fragilitySlices: Partial<PlotData>[] = [];
     const colors = this.colorScale(iterations);
@@ -553,13 +553,13 @@ export class AppService
           this.linePlotData(
             [hazardPlotData],
             1 / rtgm.riskTargets.UH_retPeriod,
-            `${percent} Probability of Exceedance in ${rtgm.riskTargets.timeHorizon_Yr} years`
+            `${percent} Probability of Exceedance in ${rtgm.riskTargets.timeHorizon_Yr} years`,
           ),
           ...this.createFragilitySlices(
             rtgm.riskTargets.condCollapseProb,
             rtgm.rtgmCalc.iterations,
             imls,
-            [Math.min(...afes), Math.max(...afes)]
+            [Math.min(...afes), Math.max(...afes)],
           ),
         ],
       },
@@ -568,7 +568,7 @@ export class AppService
 
   private createIntegralPlot(
     rtgm: Rtgm,
-    iterations: IterationPlotData
+    iterations: IterationPlotData,
   ): NshmpPlot {
     const plots = this.state().plots;
     const riskTargets = rtgm.riskTargets;
@@ -584,7 +584,7 @@ export class AppService
           this.linePlotData(
             iterations.integralHazardFragilityPlotData,
             riskTargets.riskTgt_Annual,
-            `${percent * 100}% Probability of Collapse in ${year} years`
+            `${percent * 100}% Probability of Collapse in ${year} years`,
           ),
         ],
       },
@@ -593,7 +593,7 @@ export class AppService
 
   private createIterationPlotData(
     iterations: RtgmIteration[],
-    imls: number[]
+    imls: number[],
   ): IterationPlotData {
     const fragilityPlotData: Partial<PlotData>[] = [];
     const derivativeFragilityPlotData: Partial<PlotData>[] = [];
@@ -785,7 +785,7 @@ export class AppService
    */
   private getHazardResponseData(
     state: AppState,
-    values: RtgmHazardControlForm
+    values: RtgmHazardControlForm,
   ): StaticResponseData<HazardResponseMetadata> {
     const siteClass = values.siteClass;
 
@@ -796,7 +796,7 @@ export class AppService
       : null;
 
     return responseData?.find(
-      data => data.metadata.imt.value === values.imt.toString()
+      data => data.metadata.imt.value === values.imt.toString(),
     );
   }
 
@@ -814,7 +814,7 @@ export class AppService
 
   private handleUsageResponse(
     usageResponse: RtgmUsageResponse,
-    nshms: StaticNshms
+    nshms: StaticNshms,
   ): void {
     this.updateState({
       availableModels: nshms.models,
@@ -859,13 +859,13 @@ export class AppService
   private linePlotData(
     plotData: Partial<PlotData>[],
     value: number,
-    name: string
+    name: string,
   ): Partial<PlotData> {
     const xMin = Math.min(
-      ...plotData.map(xy => Math.min(...(xy.x as number[])))
+      ...plotData.map(xy => Math.min(...(xy.x as number[]))),
     );
     const xMax = Math.max(
-      ...plotData.map(xy => Math.max(...(xy.x as number[])))
+      ...plotData.map(xy => Math.max(...(xy.x as number[]))),
     );
 
     return {
@@ -915,7 +915,7 @@ export class AppService
   private updateUrl(): void {
     this.location.replaceState(
       apps().designMaps.rtgm.routerLink,
-      new HttpParams().appendAll(this.formGroup.getRawValue()).toString()
+      new HttpParams().appendAll(this.formGroup.getRawValue()).toString(),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/dev/gmm/gmm.routes.ts b/projects/nshmp-apps/src/app/dev/gmm/gmm.routes.ts
index 1bd5e5e8a..42585fb39 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/gmm.routes.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/gmm.routes.ts
@@ -13,7 +13,7 @@ const routes: Routes = [
     },
     loadComponent: () =>
       import('./hanging-wall-effects/app.component').then(
-        com => com.AppComponent
+        com => com.AppComponent,
       ),
     path: 'hanging-wall-effects',
   },
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts
index 250ef5390..97e98e8b0 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts
@@ -35,8 +35,8 @@ export class ContentComponent {
     gmmUtils.plotToTable(
       this.service.state().plots.get(Plots.GROUND_MOTION).plotData,
       this.exp,
-      this.commonXValues
-    )
+      this.commonXValues,
+    ),
   );
 
   constructor(private service: AppService) {}
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/control-panel/control-panel.component.ts
index 9b4396e82..fdffa4c00 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/control-panel/control-panel.component.ts
@@ -65,12 +65,12 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
   /** Whether a GMM has been selected */
   gmmSelected$ = this.controls.gmmSource.valueChanges.pipe(
-    map(gmmSource => gmmSource?.length > 0)
+    map(gmmSource => gmmSource?.length > 0),
   );
 
   /** Usage parameters */
   parameters = computed(
-    () => this.service.state().usageResponse?.response?.parameters
+    () => this.service.state().usageResponse?.response?.parameters,
   );
 
   /** Service call info state */
@@ -83,49 +83,49 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
   MwMultiple$ = this.controls.multiSelectableParam.valueChanges.pipe(
     map(
       multiSelectableParam =>
-        multiSelectableParam.toString() === GmmFormControlIds.MW.toString()
-    )
+        multiSelectableParam.toString() === GmmFormControlIds.MW.toString(),
+    ),
   );
 
   /** Whether Vs30 is multi-selectable */
   vs30Multiple$ = this.controls.multiSelectableParam.valueChanges.pipe(
     map(
       multiSelectableParam =>
-        multiSelectableParam.toString() === GmmFormControlIds.VS30.toString()
-    )
+        multiSelectableParam.toString() === GmmFormControlIds.VS30.toString(),
+    ),
   );
 
   subs: Subscription[] = [];
 
   constructor(
     public service: AppService,
-    private nshmpService: NshmpService
+    private nshmpService: NshmpService,
   ) {}
 
   ngOnInit(): void {
     this.subs.push(
       this.formState.controls.gmmSource.valueChanges.subscribe(() => {
         this.onGmmSource();
-      })
+      }),
     );
 
     this.subs.push(
       this.formState.controls.multiSelectableParam.valueChanges.subscribe(() =>
-        this.onMultiSelectableParam()
-      )
+        this.onMultiSelectableParam(),
+      ),
     );
 
     this.subs.push(
       this.formState.controls.showEpistemicUncertainty.valueChanges.subscribe(
-        () => this.onShowEpistemicUncertainty()
-      )
+        () => this.onShowEpistemicUncertainty(),
+      ),
     );
 
     this.subs.push(
       combineLatest([
         this.formState.controls.dip.valueChanges,
         this.formState.controls.width.valueChanges,
-      ]).subscribe(() => this.updatePlots())
+      ]).subscribe(() => this.updatePlots()),
     );
 
     this.subs.push(
@@ -138,7 +138,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
         this.formState.controls.z1p0.valueChanges,
         this.formState.controls.z2p5.valueChanges,
         this.formState.controls.zSed.valueChanges,
-      ]).subscribe(() => this.service.resetState())
+      ]).subscribe(() => this.service.resetState()),
     );
   }
 
@@ -170,7 +170,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
     const supportedImts = gmmUtils.getSupportedImts(
       formValues.gmmSource,
-      this.service.state().usageResponse
+      this.service.state().usageResponse,
     );
 
     this.service.updateState({
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts
index 9813d4f6b..f667952fa 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts
@@ -51,17 +51,17 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
 export class PlotsComponent {
   /** Usage parameters */
   private parameters = computed(
-    () => this.service.state().usageResponse?.response?.parameters
+    () => this.service.state().usageResponse?.response?.parameters,
   );
 
   /** Ground motion plot */
   groundMotionPlotData = computed(
-    () => this.service.state().plots?.get(Plots.GROUND_MOTION)?.plotData
+    () => this.service.state().plots?.get(Plots.GROUND_MOTION)?.plotData,
   );
 
   /** Fault plot */
   faultPlotData = computed(
-    () => this.service.state().plots?.get(Plots.FAULT)?.plotData
+    () => this.service.state().plots?.get(Plots.FAULT)?.plotData,
   );
 
   /** Control panel form field state */
@@ -84,7 +84,7 @@ export class PlotsComponent {
 
   /** Repo metadata */
   repositories = computed(
-    () => this.service.state().usageResponse?.metadata.repositories
+    () => this.service.state().usageResponse?.metadata.repositories,
   );
 
   constructor(private service: AppService) {}
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/services/app.service.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/services/app.service.ts
index 83aed91b3..284f61b6f 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/services/app.service.ts
@@ -75,7 +75,7 @@ export class AppService
     private formBuilder: FormBuilder,
     private route: ActivatedRoute,
     private location: LocationService,
-    private router: Router
+    private router: Router,
   ) {
     super();
     this.addValidators();
@@ -145,14 +145,14 @@ export class AppService
     const urls = gmmUtils.serviceEndpoints(
       this.serviceUrl,
       this.formGroup.getRawValue(),
-      this.formGroup.getRawValue().multiSelectableParam
+      this.formGroup.getRawValue().multiSelectableParam,
     );
 
     this.nshmpService
       .callServices$<GmmDistanceResponse>(urls)
       .pipe(catchError((error: Error) => this.nshmpService.throwError$(error)))
       .subscribe(serviceResponses =>
-        this.handleServiceResponses(serviceResponses)
+        this.handleServiceResponses(serviceResponses),
       );
   }
 
@@ -195,7 +195,7 @@ export class AppService
    */
   init(): void {
     const spinnerRef = this.spinnerService.show(
-      SpinnerService.MESSAGE_METADATA
+      SpinnerService.MESSAGE_METADATA,
     );
 
     this.nshmpService
@@ -230,7 +230,7 @@ export class AppService
    */
   resetControlPanel(): void {
     this.formGroup.reset(
-      this.usageFormValues(this.state().usageResponse.response.parameters)
+      this.usageFormValues(this.state().usageResponse.response.parameters),
     );
   }
 
@@ -316,7 +316,7 @@ export class AppService
    */
   private createFaultPlot(
     form: ControlPanelForm,
-    faultPlot: PlotlyPlot
+    faultPlot: PlotlyPlot,
   ): PlotlyPlot {
     const data = [this.createFaultPlotData(form)];
 
@@ -359,7 +359,7 @@ export class AppService
    * @param serviceResponses The service responses
    */
   private handleServiceResponses(
-    serviceResponses: GmmDistanceResponse[]
+    serviceResponses: GmmDistanceResponse[],
   ): void {
     const means = serviceResponses.map(s => s.response.means);
     const hasLogicTree = gmmUtils.hasTree(means);
@@ -435,7 +435,7 @@ export class AppService
       rMin: nshmpUtils.queryParseNumber(defaultValues.rMin, query?.rMin),
       showEpistemicUncertainty: nshmpUtils.queryParseBoolean(
         defaultValues.showEpistemicUncertainty,
-        query?.showEpistemicUncertainty
+        query?.showEpistemicUncertainty,
       ),
       vs30: nshmpUtils.queryParseNumber(defaultValues.vs30, query?.vs30),
       vs30Multi: nshmpUtils
@@ -473,7 +473,7 @@ export class AppService
    */
   private serviceResponseToPlots(
     state: AppState,
-    form: FormGroupControls<ControlPanelForm>
+    form: FormGroupControls<ControlPanelForm>,
   ): Map<string, NshmpPlot> {
     const plots = new Map<string, NshmpPlot>();
     const groundMotionPlot = state.plots.get(Plots.GROUND_MOTION);
@@ -567,7 +567,7 @@ export class AppService
 
     this.location.replaceState(
       devApps().gmm.hangingWallEffects.routerLink,
-      new HttpParams().appendAll({...query}).toString()
+      new HttpParams().appendAll({...query}).toString(),
     );
   }
 }
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts
index 76dfa25fe..164bb3dad 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts
@@ -89,7 +89,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
   /** List of site class `Parameter`s */
   siteClasses = computed(
-    () => this.service.usage()?.response?.model.siteClasses
+    () => this.service.usage()?.response?.model.siteClasses,
   );
 
   private imtSubscription = new Subscription();
@@ -102,7 +102,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
   constructor(
     public service: AppService,
-    private nshmpService: NshmpService
+    private nshmpService: NshmpService,
   ) {}
 
   ngOnInit(): void {
@@ -113,30 +113,30 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
     this.modelCompareSubscription =
       this.formGroup.controls.modelCompare.valueChanges.subscribe(
-        modelCompare => this.onModelCompare(modelCompare)
+        modelCompare => this.onModelCompare(modelCompare),
       );
 
     this.imtSubscription = this.formGroup.controls.imt.valueChanges.subscribe(
-      () => this.service.createPlots()
+      () => this.service.createPlots(),
     );
 
     this.maxDirectionSubscription =
       this.formGroup.controls.maxDirection.valueChanges.subscribe(() =>
-        this.service.createPlots()
+        this.service.createPlots(),
       );
 
     this.returnPeriodSubscription =
       this.formGroup.controls.returnPeriod.valueChanges.subscribe(() =>
-        this.service.createPlots()
+        this.service.createPlots(),
       );
 
     this.truncateSubscription =
       this.formGroup.controls.truncate.valueChanges.subscribe(() =>
-        this.service.createPlots()
+        this.service.createPlots(),
       );
 
     this.vs30Subscription = this.formGroup.controls.vs30.valueChanges.subscribe(
-      () => this.service.resetState()
+      () => this.service.resetState(),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts
index 6aa360a05..39d15eaf1 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts
@@ -68,13 +68,13 @@ export class HazardDataComponent {
           data,
         },
       },
-      this.tableParams
+      this.tableParams,
     );
   });
 
   /** Hazard difference table data */
   hazardDiffTableData = computed(() =>
-    plotUtils.plotDataToTableData(this.hazardDiffPlot, this.tableParams)
+    plotUtils.plotDataToTableData(this.hazardDiffPlot, this.tableParams),
   );
 
   /** Hazard components table data */
@@ -91,7 +91,7 @@ export class HazardDataComponent {
           data,
         },
       },
-      this.tableParams
+      this.tableParams,
     );
   });
 
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts
index 89632d6dc..d9d5bb034 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts
@@ -36,7 +36,7 @@ export class ParameterSummaryComponent {
     }
 
     return hazardUtils.siteClassesToParameters(
-      usage.response.model.siteClasses
+      usage.response.model.siteClasses,
     );
   });
 
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/plots/plots.component.ts
index 7ae2bbf46..21c9fae9e 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/plots/plots.component.ts
@@ -59,32 +59,32 @@ interface PlotInfo {
 export class PlotsComponent {
   /** Hazard plot data */
   private hazardPlotData = computed(
-    () => this.service.plots().get(Plots.HAZARD).plotData
+    () => this.service.plots().get(Plots.HAZARD).plotData,
   );
 
   /** Hazard components plot data */
   private hazardComponentsPlotData = computed(
-    () => this.service.plots().get(Plots.HAZARD_COMPONENTS).plotData
+    () => this.service.plots().get(Plots.HAZARD_COMPONENTS).plotData,
   );
 
   /** Hazard % diff plot data */
   private hazardDiffPlotData = computed(
-    () => this.service.plots().get(Plots.HAZARD_DIFFERENCES).plotData
+    () => this.service.plots().get(Plots.HAZARD_DIFFERENCES).plotData,
   );
 
   /** Spectra components plot data */
   private spectraComponentsPlotData = computed(
-    () => this.service.plots().get(Plots.SPECTRUM_COMPONENTS).plotData
+    () => this.service.plots().get(Plots.SPECTRUM_COMPONENTS).plotData,
   );
 
   /** Spectra % diff plot data */
   private spectraDiffPlotData = computed(
-    () => this.service.plots().get(Plots.SPECTRUM_DIFFERENCES).plotData
+    () => this.service.plots().get(Plots.SPECTRUM_DIFFERENCES).plotData,
   );
 
   /** Spectra plot data */
   private spectraPlotData = computed(
-    () => this.service.plots().get(Plots.SPECTRUM).plotData
+    () => this.service.plots().get(Plots.SPECTRUM).plotData,
   );
 
   /** Wheather both the control and settings panels are closed */
@@ -92,8 +92,8 @@ export class PlotsComponent {
     map(
       () =>
         !this.controlsService.controlPanelIsSelected &&
-        !this.controlsService.settingsIsSelected
-    )
+        !this.controlsService.settingsIsSelected,
+    ),
   );
 
   /** Wheather both the control and settings panels are opened */
@@ -101,8 +101,8 @@ export class PlotsComponent {
     map(
       () =>
         this.controlsService.controlPanelIsSelected &&
-        this.controlsService.settingsIsSelected
-    )
+        this.controlsService.settingsIsSelected,
+    ),
   );
 
   /** The plots */
@@ -132,6 +132,6 @@ export class PlotsComponent {
 
   constructor(
     private service: AppService,
-    private controlsService: AppControlsService
+    private controlsService: AppControlsService,
   ) {}
 }
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts
index 9379a670f..9b0a6465d 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts
@@ -89,7 +89,7 @@ export class SpectraDataComponent {
         availableModels: this.service.availableModels(),
         name: (modelInfo: Parameter, spectra: Spectra) =>
           `${modelInfo.display} - ${sourceTypeToCapitalCase(
-            spectra.sourceType
+            spectra.sourceType,
           )}`,
         returnPeriod: this.service.formGroup.getRawValue().returnPeriod,
         serviceResponses: this.service.serviceResponses(),
@@ -108,7 +108,7 @@ export class SpectraDataComponent {
 
     const spectraDiff = this.spectraPlotsService.spectraPercentDifference(
       serviceResponses,
-      this.service.formGroup.getRawValue().returnPeriod
+      this.service.formGroup.getRawValue().returnPeriod,
     );
 
     return [
@@ -148,7 +148,7 @@ export class SpectraDataComponent {
   constructor(
     private service: AppService,
     private mathService: MathService,
-    private spectraPlotsService: SpectraPlotsService
+    private spectraPlotsService: SpectraPlotsService,
   ) {}
 
   /**
@@ -158,10 +158,10 @@ export class SpectraDataComponent {
    */
   spectraImtRow(serviceResponses: ServiceResponses): TableData {
     const spectraA = serviceResponses.modelA.spectra.find(
-      spectra => spectra.sourceType === SourceType.TOTAL
+      spectra => spectra.sourceType === SourceType.TOTAL,
     );
     const spectraB = serviceResponses.modelB.spectra.find(
-      spectra => spectra.sourceType === SourceType.TOTAL
+      spectra => spectra.sourceType === SourceType.TOTAL,
     );
 
     const imtsA = spectraA.responseSpectra.imts;
@@ -179,19 +179,19 @@ export class SpectraDataComponent {
    * @param options The options
    */
   serviceResponseToTableData(
-    options: ServiceResponseToTableDataOptions
+    options: ServiceResponseToTableDataOptions,
   ): TableData[] {
     return options.serviceResponse.spectra
       .filter(options.spectraFilter)
       .map(spectra => {
         const returnPeriodSpectra =
           spectra.responseSpectra.responseSpectrum.find(
-            spectrum => spectrum.returnPeriod === options.returnPeriod
+            spectrum => spectrum.returnPeriod === options.returnPeriod,
           );
 
         const modelInfo = this.mathService.getModelInfo(
           options.serviceResponse.model,
-          options.availableModels
+          options.availableModels,
         );
 
         return {
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/guards/dynamic-hazard-compare.guard.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/guards/dynamic-hazard-compare.guard.ts
index 8014573d8..20def652d 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/guards/dynamic-hazard-compare.guard.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/guards/dynamic-hazard-compare.guard.ts
@@ -26,7 +26,7 @@ export class DynamicHazardCompareGuard {
     private router: Router,
     private hazardService: HazardService,
     private spinnerService: SpinnerService,
-    private nshmpService: NshmpService
+    private nshmpService: NshmpService,
   ) {}
 
   /**
@@ -54,7 +54,7 @@ export class DynamicHazardCompareGuard {
         }
 
         return hasComparableModels;
-      })
+      }),
     );
   }
 
@@ -65,7 +65,7 @@ export class DynamicHazardCompareGuard {
     return this.hazardService
       .dynamicNshms$(
         `${this.nshmpHazWs.url}${this.nshmpHazWs.services.nshms}`,
-        this.serviceEndpoint
+        this.serviceEndpoint,
       )
       .pipe(
         map(dynamicNshms => {
@@ -74,8 +74,8 @@ export class DynamicHazardCompareGuard {
               dynamicNshms.nshmServices.find(
                 service =>
                   service.project === nshmService.project &&
-                  service.model !== nshmService.model
-              )
+                  service.model !== nshmService.model,
+              ),
           );
 
           return hasComparableModels;
@@ -83,7 +83,7 @@ export class DynamicHazardCompareGuard {
         catchError(() => {
           this.spinnerService.remove();
           return of(false);
-        })
+        }),
       );
   }
 }
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/app.service.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/app.service.ts
index e4ff3a383..732995e81 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/app.service.ts
@@ -75,7 +75,7 @@ export class AppService
   private serviceEndpoint = this.nshmpHazWs.services.curveServices.hazard;
 
   readonly formGroup = this.formBuilder.group<ControlForm>(
-    this.defaultFormValues()
+    this.defaultFormValues(),
   );
   readonly state = signal<AppState>(this.initialState());
 
@@ -87,7 +87,7 @@ export class AppService
     private spectraPlotsService: SpectraPlotsService,
     private hazardService: HazardService,
     private route: ActivatedRoute,
-    private location: LocationService
+    private location: LocationService,
   ) {
     super();
     this.addValidators();
@@ -113,8 +113,8 @@ export class AppService
   get nshmService(): Signal<NshmMetadata> {
     return computed(() =>
       this.state().nshmServices.find(
-        nshmService => nshmService.model === this.formGroup.getRawValue().model
-      )
+        nshmService => nshmService.model === this.formGroup.getRawValue().model,
+      ),
     );
   }
 
@@ -151,7 +151,7 @@ export class AppService
    */
   get usageModelA(): Signal<HazardUsageResponse> {
     return computed(() =>
-      this.state().usageResponses?.get(this.formGroup.getRawValue().model)
+      this.state().usageResponses?.get(this.formGroup.getRawValue().model),
     );
   }
 
@@ -161,8 +161,8 @@ export class AppService
   get usageModelB(): Signal<HazardUsageResponse> {
     return computed(() =>
       this.state().usageResponses?.get(
-        this.formGroup.getRawValue().modelCompare
-      )
+        this.formGroup.getRawValue().modelCompare,
+      ),
     );
   }
 
@@ -191,13 +191,13 @@ export class AppService
     const modelUrl = this.serviceCallUrl(
       form.model,
       form,
-      this.state().nshmServices
+      this.state().nshmServices,
     );
 
     const modelCompareUrl = this.serviceCallUrl(
       form.modelCompare,
       form,
-      this.state().nshmServices
+      this.state().nshmServices,
     );
 
     const serviceCallInfo: ServiceCallInfo = {
@@ -248,7 +248,7 @@ export class AppService
     const gmms = usages.map(usage => usage.response.model.gmms);
     const imts = usages.map(usage => usage.response.model.imts);
     const siteClasses = this.findCommonSiteClasses(
-      usages.map(usage => usage.response.model.siteClasses)
+      usages.map(usage => usage.response.model.siteClasses),
     );
     const usage = [...usages].shift();
 
@@ -268,7 +268,7 @@ export class AppService
         model: {
           bounds: usage.response.model.bounds,
           gmms: gmms.reduce((previous, current) =>
-            previous.filter(gmm => current.includes(gmm))
+            previous.filter(gmm => current.includes(gmm)),
           ),
           imts: this.findCommonImts(imts),
           name: 'Combined usage',
@@ -322,7 +322,7 @@ export class AppService
     this.hazardService
       .dynamicNshms$<HazardRequestMetadata>(
         `${this.nshmpHazWs.url}${this.nshmpHazWs.services.nshms}`,
-        this.serviceEndpoint
+        this.serviceEndpoint,
       )
       .pipe(catchError((error: Error) => this.nshmpService.throwError$(error)))
       .subscribe(({models, nshmServices, usageResponses}) => {
@@ -330,7 +330,7 @@ export class AppService
         const serviceCallInfo: ServiceCallInfo = {
           ...this.state().serviceCallInfo,
           usage: nshmServices.map(
-            service => `${service.url}${this.serviceEndpoint}`
+            service => `${service.url}${this.serviceEndpoint}`,
           ),
         };
 
@@ -380,7 +380,7 @@ export class AppService
     const combinedUsage = this.getCombinedUsage(
       this.state().usageResponses,
       this.formGroup.getRawValue().model,
-      defaultComparableModel
+      defaultComparableModel,
     );
 
     if (
@@ -442,17 +442,17 @@ export class AppService
    */
   serviceCallUrls(
     formValues: ControlForm,
-    nshmServices: NshmMetadata[]
+    nshmServices: NshmMetadata[],
   ): string[] {
     const {imt, latitude, longitude, model, modelCompare, vs30} = formValues;
 
     const services = [model, modelCompare].map(model =>
-      nshmServices.find(service => service.model === model)
+      nshmServices.find(service => service.model === model),
     );
 
     const urls = services.map(
       nshmService =>
-        `${nshmService.url}${this.serviceEndpoint}/${longitude}/${latitude}/${vs30}?imt=${imt}`
+        `${nshmService.url}${this.serviceEndpoint}/${longitude}/${latitude}/${vs30}?imt=${imt}`,
     );
 
     return urls;
@@ -491,8 +491,8 @@ export class AppService
       previous.filter(previousParameter =>
         current
           .map(currentParameter => currentParameter.value)
-          .includes(previousParameter.value)
-      )
+          .includes(previousParameter.value),
+      ),
     );
   }
 
@@ -503,7 +503,7 @@ export class AppService
    * @param siteClasses The site classes
    */
   private findCommonSiteClasses(
-    siteClasses: Record<string, number>[]
+    siteClasses: Record<string, number>[],
   ): Record<string, number> {
     const allSiteClasses = siteClasses.reduce((previous, current) => ({
       ...previous,
@@ -532,7 +532,7 @@ export class AppService
   private getCombinedUsage(
     usageResponses: Map<string, HazardUsageResponse>,
     model: NshmId,
-    comparableModel: string | null
+    comparableModel: string | null,
   ): HazardUsageResponse {
     let combinedUsage = usageResponses.get(model);
 
@@ -556,19 +556,19 @@ export class AppService
     const state = this.state();
 
     const currentNshmService = state.nshmServices.find(
-      nshmService => nshmService.model === formValues.model
+      nshmService => nshmService.model === formValues.model,
     );
 
     const comparableServices = state.nshmServices.filter(
       nshmService =>
         nshmService.model !== currentNshmService.model &&
-        nshmService.project === currentNshmService.project
+        nshmService.project === currentNshmService.project,
     );
 
     return state.availableModels.filter(model =>
       comparableServices.find(
-        service => service.model.toString() === model.value
-      )
+        service => service.model.toString() === model.value,
+      ),
     );
   }
 
@@ -605,11 +605,11 @@ export class AppService
    */
   private getSiteClass(
     query: string,
-    defaultSiteClass: NehrpSiteClass
+    defaultSiteClass: NehrpSiteClass,
   ): NehrpSiteClass {
     return (
       Object.values(NehrpSiteClass).find(
-        siteClass => siteClass.toString() === query
+        siteClass => siteClass.toString() === query,
       ) ?? defaultSiteClass
     );
   }
@@ -630,14 +630,14 @@ export class AppService
       model: this.getModel(query.model, defaultValues.model),
       modelCompare: this.getModel(
         query.modelCompare,
-        defaultValues.modelCompare
+        defaultValues.modelCompare,
       ),
       returnPeriod: query.returnPeriod
         ? Number.parseInt(query.returnPeriod, 10)
         : defaultValues.returnPeriod,
       siteClass: this.getSiteClass(
         query.siteClass,
-        defaultValues.siteClass as NehrpSiteClass
+        defaultValues.siteClass as NehrpSiteClass,
       ),
       sourceType: null,
       truncate:
@@ -675,7 +675,7 @@ export class AppService
    */
   private responseSpectra(
     hazardResponses: HazardResponse[],
-    form: ControlForm
+    form: ControlForm,
   ): Spectra[] {
     const spectra: Spectra[] = [];
     const sourceTypes = [...hazardResponses]
@@ -700,7 +700,7 @@ export class AppService
    */
   private responseToPlots(
     state: AppState,
-    formGroup: FormGroupControls<ControlForm>
+    formGroup: FormGroupControls<ControlForm>,
   ): Map<string, NshmpPlot> {
     if (
       state.serviceResponses.modelA === null ||
@@ -711,11 +711,11 @@ export class AppService
 
     const hazardPlots = this.hazardPlotsService.createHazardPlots(
       state,
-      formGroup
+      formGroup,
     );
     const spectraPlots = this.spectraPlotsService.createSpectraPlots(
       state,
-      formGroup
+      formGroup,
     );
     return new Map([...hazardPlots.entries(), ...spectraPlots.entries()]);
   }
@@ -730,7 +730,7 @@ export class AppService
   private serviceCallUrl(
     model: NshmId,
     formValues: ControlForm,
-    nshmServices: NshmMetadata[]
+    nshmServices: NshmMetadata[],
   ): string {
     const {latitude, longitude, vs30} = formValues;
     const service = nshmServices.find(service => service.model === model);
@@ -797,7 +797,7 @@ export class AppService
       settingsForm: plotUtils.plotSettingsToFormGroup({
         config: hazardComponentsPlotData.config,
         layout: plotUtils.plotlyLayoutToSettings(
-          hazardComponentsPlotData.layout
+          hazardComponentsPlotData.layout,
         ),
       }),
     });
@@ -863,7 +863,7 @@ export class AppService
       settingsForm: plotUtils.plotSettingsToFormGroup({
         config: spectraComponentsPlotData.config,
         layout: plotUtils.plotlyLayoutToSettings(
-          spectraComponentsPlotData.layout
+          spectraComponentsPlotData.layout,
         ),
       }),
     });
@@ -887,7 +887,7 @@ export class AppService
 
     this.location.replaceState(
       devApps().hazard.dynamicCompare.routerLink,
-      new HttpParams().appendAll({...query}).toString()
+      new HttpParams().appendAll({...query}).toString(),
     );
   }
 }
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/hazard-plots.service.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/hazard-plots.service.ts
index 67dba0653..eb813559a 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/hazard-plots.service.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/hazard-plots.service.ts
@@ -90,7 +90,7 @@ export class HazardPlotsService {
    */
   createHazardPlots(
     state: AppState,
-    formGroup: FormGroupControls<ControlForm>
+    formGroup: FormGroupControls<ControlForm>,
   ): Map<string, NshmpPlot> {
     const plots = new Map<string, NshmpPlot>();
 
@@ -102,7 +102,7 @@ export class HazardPlotsService {
       state.serviceResponses,
       state.availableModels,
       hazardPlot,
-      formGroup.getRawValue()
+      formGroup.getRawValue(),
     );
 
     plots.set(Plots.HAZARD, {
@@ -113,7 +113,7 @@ export class HazardPlotsService {
     const hazardCurveDifference = this.createHazardDiffPlot(
       state.serviceResponses,
       formGroup.getRawValue().imt,
-      hazardDiffPlot
+      hazardDiffPlot,
     );
 
     plots.set(Plots.HAZARD_DIFFERENCES, {
@@ -125,7 +125,7 @@ export class HazardPlotsService {
       state.serviceResponses,
       state.availableModels,
       hazardComponentsPlot,
-      formGroup.getRawValue()
+      formGroup.getRawValue(),
     );
 
     plots.set(Plots.HAZARD_COMPONENTS, {
@@ -146,7 +146,7 @@ export class HazardPlotsService {
   private createHazardDiffPlot(
     serviceResponses: ServiceResponses,
     imt: Imt,
-    plot: NshmpPlot
+    plot: NshmpPlot,
   ): PlotlyPlot {
     const data = this.createHazardDiffPlotData(serviceResponses, imt);
     const yValues = data.y as number[];
@@ -189,7 +189,7 @@ export class HazardPlotsService {
    */
   private createHazardDiffPlotData(
     serviceResponses: ServiceResponses,
-    imt: Imt
+    imt: Imt,
   ): Partial<PlotData> {
     const {modelA, modelB} = serviceResponses;
 
@@ -198,20 +198,20 @@ export class HazardPlotsService {
 
     const modelAData = hazardUtils.getSourceTypeData(
       modelAResponse.data,
-      sourceTypeToPascalCase(SourceType.TOTAL)
+      sourceTypeToPascalCase(SourceType.TOTAL),
     );
     const modelBData = hazardUtils.getSourceTypeData(
       modelBResponse.data,
-      sourceTypeToPascalCase(SourceType.TOTAL)
+      sourceTypeToPascalCase(SourceType.TOTAL),
     );
 
     const xValues = modelAData.values.xs.filter(x =>
-      modelBData.values.xs.includes(x)
+      modelBData.values.xs.includes(x),
     );
 
     const yValues = this.mathService.percentDifferences(
       this.filterYValues(xValues, modelAData.values),
-      this.filterYValues(xValues, modelBData.values)
+      this.filterYValues(xValues, modelBData.values),
     );
 
     return {
@@ -236,7 +236,7 @@ export class HazardPlotsService {
     serviceResponses: ServiceResponses,
     availableModels: Parameter[],
     plot: NshmpPlot,
-    form: ControlForm
+    form: ControlForm,
   ): PlotlyPlot {
     const imt = form.imt;
 
@@ -274,7 +274,7 @@ export class HazardPlotsService {
     serviceResponses: ServiceResponses,
     availableModels: Parameter[],
     plot: NshmpPlot,
-    form: ControlForm
+    form: ControlForm,
   ): PlotlyPlot {
     const hazardCurveFilter = (data: HazardCurve) =>
       data.component !== sourceTypeToPascalCase(SourceType.TOTAL);
@@ -318,13 +318,13 @@ export class HazardPlotsService {
     const limitsA = this.hazardCurveLimits(
       options.serviceResponses.modelA,
       options.form.imt,
-      options.hazardCurveFilter
+      options.hazardCurveFilter,
     );
 
     const limitsB = this.hazardCurveLimits(
       options.serviceResponses.modelB,
       options.form.imt,
-      options.hazardCurveFilter
+      options.hazardCurveFilter,
     );
 
     const xMin = Math.min(limitsA.min, limitsB.min);
@@ -332,7 +332,7 @@ export class HazardPlotsService {
 
     const returnPeriodData = this.createReturnPeriodPlotData(
       options.form.returnPeriod,
-      [xMin, xMax]
+      [xMin, xMax],
     );
 
     const metadata =
@@ -366,17 +366,17 @@ export class HazardPlotsService {
    * @param options The plot data options
    */
   private createHazardPlotData(
-    options: CreateHazardPlotDataOptions
+    options: CreateHazardPlotDataOptions,
   ): Partial<PlotData>[] {
     const imt = options.form.imt;
     const hazardCurves = this.getHazardResponse(
       options.serviceResponse,
-      imt
+      imt,
     ).data.filter(data => options.hazardCurveFilter(data));
 
     const modelInfo = this.mathService.getModelInfo(
       options.serviceResponse.model,
-      options.availableModels
+      options.availableModels,
     );
 
     const colors = plotUtils.COLORWAY;
@@ -388,7 +388,7 @@ export class HazardPlotsService {
       const xy = hazardUtils.updateXySequence(
         options.form,
         hazardUtils.cleanXySequence(data.values),
-        imt
+        imt,
       );
 
       const plotlyData: Partial<PlotData> = {
@@ -415,7 +415,7 @@ export class HazardPlotsService {
    */
   private createReturnPeriodPlotData(
     returnPeriod: number,
-    xLimits: number[]
+    xLimits: number[],
   ): Partial<PlotData> {
     return {
       hoverinfo: 'none',
@@ -452,11 +452,11 @@ export class HazardPlotsService {
    */
   private getHazardResponse(
     serviceResponse: ServiceResponse,
-    imt: Imt
+    imt: Imt,
   ): HazardResponse {
     const hazardResponse =
       serviceResponse.hazardResponse.response.hazardCurves.find(
-        curves => curves.imt.value === imt.toString()
+        curves => curves.imt.value === imt.toString(),
       );
 
     if (hazardResponse === undefined) {
@@ -476,11 +476,11 @@ export class HazardPlotsService {
   private hazardCurveLimits(
     serviceResponse: ServiceResponse,
     imt: Imt,
-    hazardCurveFilter: (data: HazardCurve) => boolean
+    hazardCurveFilter: (data: HazardCurve) => boolean,
   ): NumberBounds {
     const hazardCurves = this.getHazardResponse(
       serviceResponse,
-      imt
+      imt,
     ).data.filter(data => hazardCurveFilter(data));
 
     const data = hazardCurves.map(curve => curve.values);
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/math.service.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/math.service.ts
index 1fa16280c..209d3a62f 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/math.service.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/math.service.ts
@@ -14,7 +14,7 @@ export class MathService {
    */
   getModelInfo(model: NshmId, availableModels: Parameter[]): Parameter {
     const modelInfo = availableModels.find(
-      service => service.value === model.toString()
+      service => service.value === model.toString(),
     );
 
     return modelInfo;
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/spectra-plots.service.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/spectra-plots.service.ts
index fdb820d83..8d41f4e8b 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/spectra-plots.service.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/services/spectra-plots.service.ts
@@ -119,7 +119,7 @@ export class SpectraPlotsService {
    */
   createSpectraPlots(
     state: AppState,
-    formGroup: FormGroupControls<ControlForm>
+    formGroup: FormGroupControls<ControlForm>,
   ): Map<string, NshmpPlot> {
     const plots = new Map<string, NshmpPlot>();
 
@@ -131,7 +131,7 @@ export class SpectraPlotsService {
       state.serviceResponses,
       state.availableModels,
       formGroup.getRawValue(),
-      spectraPlot
+      spectraPlot,
     );
 
     plots.set(Plots.SPECTRUM, {
@@ -143,7 +143,7 @@ export class SpectraPlotsService {
       state.serviceResponses,
       state.availableModels,
       formGroup.getRawValue(),
-      spectraPlot
+      spectraPlot,
     );
 
     plots.set(Plots.SPECTRUM_COMPONENTS, {
@@ -155,7 +155,7 @@ export class SpectraPlotsService {
       state.serviceResponses,
       state.availableModels,
       formGroup.getRawValue(),
-      spectraDiffPlot
+      spectraDiffPlot,
     );
 
     plots.set(Plots.SPECTRUM_DIFFERENCES, {
@@ -168,26 +168,26 @@ export class SpectraPlotsService {
 
   spectraPercentDifference(
     serviceResponses: ServiceResponses,
-    returnPeriod: number
+    returnPeriod: number,
   ): SpectraDifference {
     const {modelA, modelB} = serviceResponses;
 
     const spectraA = modelA.spectra.find(
-      spectra => spectra.sourceType === SourceType.TOTAL
+      spectra => spectra.sourceType === SourceType.TOTAL,
     );
     const spectraB = modelB.spectra.find(
-      spectra => spectra.sourceType === SourceType.TOTAL
+      spectra => spectra.sourceType === SourceType.TOTAL,
     );
 
     const xValues = spectraA.responseSpectra.imts.filter(imt =>
-      spectraB.responseSpectra.imts.includes(imt)
+      spectraB.responseSpectra.imts.includes(imt),
     );
 
     const returnPeriodSpectraA = spectraA.responseSpectra.responseSpectrum.find(
-      spectra => spectra.returnPeriod === returnPeriod
+      spectra => spectra.returnPeriod === returnPeriod,
     );
     const returnPeriodSpectraB = spectraB.responseSpectra.responseSpectrum.find(
-      spectra => spectra.returnPeriod === returnPeriod
+      spectra => spectra.returnPeriod === returnPeriod,
     );
 
     const yValuesA = spectraA.responseSpectra.imts
@@ -217,7 +217,7 @@ export class SpectraPlotsService {
     serviceResponses: ServiceResponses,
     availableModels: Parameter[],
     form: ControlForm,
-    plot: NshmpPlot
+    plot: NshmpPlot,
   ): PlotlyPlot {
     const spectraFilter = (spectra: Spectra) =>
       spectra.sourceType === SourceType.TOTAL;
@@ -251,7 +251,7 @@ export class SpectraPlotsService {
     serviceResponses: ServiceResponses,
     availableModels: Parameter[],
     form: ControlForm,
-    plot: NshmpPlot
+    plot: NshmpPlot,
   ): PlotlyPlot {
     const spectraFilter = (spectra: Spectra) =>
       spectra.sourceType !== SourceType.TOTAL;
@@ -289,12 +289,12 @@ export class SpectraPlotsService {
     serviceResponses: ServiceResponses,
     availableModels: Parameter[],
     form: ControlForm,
-    plot: NshmpPlot
+    plot: NshmpPlot,
   ): PlotlyPlot {
     const data = this.createSpectraDiffPlotData(
       serviceResponses,
       availableModels,
-      form
+      form,
     );
 
     const yValues = data
@@ -340,15 +340,15 @@ export class SpectraPlotsService {
   private createSpectraDiffPlotData(
     serviceResponses: ServiceResponses,
     availableModels: Parameter[],
-    form: ControlForm
+    form: ControlForm,
   ): Partial<PlotData>[] {
     const spectraA = serviceResponses.modelA.spectra.find(
-      spectra => spectra.sourceType === SourceType.TOTAL
+      spectra => spectra.sourceType === SourceType.TOTAL,
     );
 
     const {imts, percentDifference} = this.spectraPercentDifference(
       serviceResponses,
-      form.returnPeriod
+      form.returnPeriod,
     );
 
     const plotData = this.createSpectraPlotData({
@@ -379,7 +379,7 @@ export class SpectraPlotsService {
 
     plotData.forEach(data => (data.showlegend = false));
     plotData.forEach(
-      data => (data.hovertemplate = '%{x} s, %{y} % difference')
+      data => (data.hovertemplate = '%{x} s, %{y} % difference'),
     );
 
     return plotData;
@@ -393,15 +393,15 @@ export class SpectraPlotsService {
    * @param options The plot data options
    */
   private createSpectraPlotData(
-    options: CreateSpectraPlotDataOptions
+    options: CreateSpectraPlotDataOptions,
   ): Partial<PlotData>[] {
     const modelInfo = this.mathService.getModelInfo(
       options.serviceResponse.model,
-      options.availableModels
+      options.availableModels,
     );
 
     const spectra = options.serviceResponse.spectra.filter(spectra =>
-      options.spectraFilter(spectra)
+      options.spectraFilter(spectra),
     );
     const lines: Partial<PlotData>[] = [];
     let count = 0;
@@ -414,7 +414,7 @@ export class SpectraPlotsService {
 
       const returnPeriodSpectra =
         spectrum.responseSpectra.responseSpectrum.find(
-          s => s.returnPeriod === options.form.returnPeriod
+          s => s.returnPeriod === options.form.returnPeriod,
         );
 
       const imts = spectrum.responseSpectra.imts;
@@ -487,7 +487,7 @@ export class SpectraPlotsService {
         dash: options?.dash?.modelA,
         pgaMarker: options?.pgaMarker?.modelA,
         serviceResponse: modelA,
-      })
+      }),
     );
     lines.push(
       ...this.createSpectraPlotData({
@@ -496,24 +496,30 @@ export class SpectraPlotsService {
         dash: options?.dash?.modelB,
         pgaMarker: options?.pgaMarker?.modelB,
         serviceResponse: modelB,
-      })
+      }),
     );
 
     if (options?.pgaMarker?.modelA !== options?.pgaMarker?.modelB) {
       const modelAInfo = this.mathService.getModelInfo(
         options.serviceResponses.modelA.model,
-        options.availableModels
+        options.availableModels,
       );
       const modelBInfo = this.mathService.getModelInfo(
         options.serviceResponses.modelB.model,
-        options.availableModels
+        options.availableModels,
       );
 
       lines.push(
-        this.spectraPgaLegendEntry(modelAInfo.display, options.pgaMarker.modelA)
+        this.spectraPgaLegendEntry(
+          modelAInfo.display,
+          options.pgaMarker.modelA,
+        ),
       );
       lines.push(
-        this.spectraPgaLegendEntry(modelBInfo.display, options.pgaMarker.modelB)
+        this.spectraPgaLegendEntry(
+          modelBInfo.display,
+          options.pgaMarker.modelB,
+        ),
       );
     } else {
       lines.push(this.spectraPgaLegendEntry('PGA'));
diff --git a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts
index 394735df8..66f1df21f 100644
--- a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts
@@ -43,7 +43,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
   constructor(
     public service: AppService,
-    private nshmpService: NshmpService
+    private nshmpService: NshmpService,
   ) {}
 
   ngOnInit(): void {
diff --git a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/services/app.service.ts b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/services/app.service.ts
index 00d2d501f..47ba68a5d 100644
--- a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/services/app.service.ts
@@ -32,7 +32,7 @@ export class AppService
 {
   /** Control panels forms */
   readonly formGroup = this.formBuilder.group<ControlForm>(
-    this.defaultFormValues()
+    this.defaultFormValues(),
   );
   readonly state = signal<AppState>(this.initialState());
 
@@ -51,19 +51,19 @@ export class AppService
   addValidators(): void {
     this.boundsValidators(
       this.formGroup.controls.median,
-      this.formBounds().median
+      this.formBounds().median,
     );
     this.boundsValidators(this.formGroup.controls.rate, this.formBounds().rate);
     this.boundsValidators(
       this.formGroup.controls.sigma,
-      this.formBounds().sigma
+      this.formBounds().sigma,
     );
     this.boundsValidators(
       this.formGroup.controls.truncationLevel,
-      this.formBounds().truncationLevel
+      this.formBounds().truncationLevel,
     );
     this.formGroup.controls.truncation.addValidators(control =>
-      Validators.required(control)
+      Validators.required(control),
     );
     this.formGroup.updateValueAndValidity();
   }
@@ -235,7 +235,7 @@ export class AppService
    */
   private addPlotData(
     state: AppState,
-    formGroup: FormGroupControls<ControlForm>
+    formGroup: FormGroupControls<ControlForm>,
   ): Map<string, NshmpPlot> {
     const exceedanceData = this.calculateExceedance(formGroup.getRawValue());
     const plots = new Map<string, NshmpPlot>();
@@ -280,7 +280,7 @@ export class AppService
     const yValues: number[] = values.truncation
       ? ExceedanceModel.truncationUpperOnlySequence(
           model,
-          this.exceedanceXValues()
+          this.exceedanceXValues(),
         )
       : ExceedanceModel.truncationOffSequence(model, this.exceedanceXValues());
 
diff --git a/projects/nshmp-apps/src/app/dev/math/math.routes.ts b/projects/nshmp-apps/src/app/dev/math/math.routes.ts
index d586487f0..9981b7160 100644
--- a/projects/nshmp-apps/src/app/dev/math/math.routes.ts
+++ b/projects/nshmp-apps/src/app/dev/math/math.routes.ts
@@ -13,7 +13,7 @@ const routes: Routes = [
     },
     loadComponent: () =>
       import('./exceedance-explorer/app.component').then(
-        com => com.AppComponent
+        com => com.AppComponent,
       ),
     path: 'exceedance-explorer',
   },
diff --git a/projects/nshmp-apps/src/app/gmm/distance/components/content/content.component.ts b/projects/nshmp-apps/src/app/gmm/distance/components/content/content.component.ts
index 93a093f44..9d6c56fa3 100644
--- a/projects/nshmp-apps/src/app/gmm/distance/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/distance/components/content/content.component.ts
@@ -37,8 +37,8 @@ export class ContentComponent {
     gmmUtils.plotToTable(
       this.service.meanPlotState().plotData,
       this.exp,
-      this.commonXValues
-    )
+      this.commonXValues,
+    ),
   );
 
   constructor(public service: AppService) {}
diff --git a/projects/nshmp-apps/src/app/gmm/distance/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/gmm/distance/components/control-panel/control-panel.component.ts
index 005dc98fa..b6172a706 100644
--- a/projects/nshmp-apps/src/app/gmm/distance/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/distance/components/control-panel/control-panel.component.ts
@@ -76,42 +76,42 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
   MwMultiple$ = this.controls.multiSelectableParam.valueChanges.pipe(
     map(
       multiSelectableParam =>
-        multiSelectableParam.toString() === GmmFormControlIds.MW.toString()
-    )
+        multiSelectableParam.toString() === GmmFormControlIds.MW.toString(),
+    ),
   );
 
   /** Whether Vs30 is multi-selectable */
   vs30Multiple$ = this.controls.multiSelectableParam.valueChanges.pipe(
     map(
       multiSelectableParam =>
-        multiSelectableParam.toString() === GmmFormControlIds.VS30.toString()
-    )
+        multiSelectableParam.toString() === GmmFormControlIds.VS30.toString(),
+    ),
   );
 
   private subs: Subscription[] = [];
 
   constructor(
     public service: AppService,
-    private nshmpService: NshmpService
+    private nshmpService: NshmpService,
   ) {}
 
   ngOnInit(): void {
     this.subs.push(
       this.controls.gmmSource.valueChanges.subscribe(() => {
         this.onGmmSource();
-      })
+      }),
     );
 
     this.subs.push(
       this.controls.multiSelectableParam.valueChanges.subscribe(() =>
-        this.onMultiSelectableParam()
-      )
+        this.onMultiSelectableParam(),
+      ),
     );
 
     this.subs.push(
       this.controls.showEpistemicUncertainty.valueChanges.subscribe(() =>
-        this.onShowEpistemicUncertainty()
-      )
+        this.onShowEpistemicUncertainty(),
+      ),
     );
 
     this.subs.push(
@@ -126,7 +126,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
         this.controls.z2p5.valueChanges,
         this.controls.zSed.valueChanges,
         this.controls.width.valueChanges,
-      ]).subscribe(() => this.service.resetState())
+      ]).subscribe(() => this.service.resetState()),
     );
   }
 
@@ -158,7 +158,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
     const supportedImts = gmmUtils.getSupportedImts(
       formValues.gmmSource,
-      this.service.state().usageResponse
+      this.service.state().usageResponse,
     );
 
     this.service.updateState({
diff --git a/projects/nshmp-apps/src/app/gmm/distance/services/app.service.ts b/projects/nshmp-apps/src/app/gmm/distance/services/app.service.ts
index 1d6c721e8..f71c37dd0 100644
--- a/projects/nshmp-apps/src/app/gmm/distance/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/gmm/distance/services/app.service.ts
@@ -70,7 +70,7 @@ export class AppService
     private nshmpService: NshmpService,
     private spinnerService: SpinnerService,
     private route: ActivatedRoute,
-    private location: LocationService
+    private location: LocationService,
   ) {
     super();
     this.addValidators();
@@ -162,7 +162,7 @@ export class AppService
     const urls = gmmUtils.serviceEndpoints(
       this.serviceUrl,
       this.formGroup.getRawValue(),
-      this.formGroup.getRawValue().multiSelectableParam
+      this.formGroup.getRawValue().multiSelectableParam,
     );
 
     this.nshmpService
@@ -244,7 +244,7 @@ export class AppService
    */
   init(): void {
     const spinnerRef = this.spinnerService.show(
-      SpinnerService.MESSAGE_METADATA
+      SpinnerService.MESSAGE_METADATA,
     );
 
     this.nshmpService
@@ -279,7 +279,7 @@ export class AppService
    */
   resetControlPanel(): void {
     this.formGroup.reset(
-      this.usageFormValues(this.state().usageResponse.response.parameters)
+      this.usageFormValues(this.state().usageResponse.response.parameters),
     );
   }
 
@@ -344,7 +344,7 @@ export class AppService
   }
 
   private handleServiceResponses(
-    serviceResponses: GmmDistanceResponse[]
+    serviceResponses: GmmDistanceResponse[],
   ): void {
     const means = serviceResponses.map(s => s.response.means);
     const sigmas = serviceResponses.map(s => s.response.sigmas);
@@ -414,7 +414,7 @@ export class AppService
       rMin: nshmpUtils.queryParseNumber(defaultValues.rMin, query?.rMin),
       showEpistemicUncertainty: nshmpUtils.queryParseBoolean(
         defaultValues.showEpistemicUncertainty,
-        query?.showEpistemicUncertainty
+        query?.showEpistemicUncertainty,
       ),
       vs30: nshmpUtils.queryParseNumber(defaultValues.vs30, query?.vs30),
       vs30Multi: nshmpUtils
@@ -452,7 +452,7 @@ export class AppService
    */
   private serviceResponseToPlotData(
     state: AppState,
-    form: FormGroupControls<FormControls>
+    form: FormGroupControls<FormControls>,
   ): Map<string, NshmpPlot> {
     if (
       state.serviceResponses === null ||
@@ -466,7 +466,7 @@ export class AppService
     const meanPlot = state.plots.get(gmmUtils.PlotType.MEANS);
     const hoverTemplate = '%{x} km, %{y} AFE';
     const title = `Ground Motion vs. Distance: ${imtToString(
-      formValues.imt as Imt
+      formValues.imt as Imt,
     )}`;
 
     meanPlot.settingsForm.patchValue({
@@ -531,7 +531,7 @@ export class AppService
 
     this.location.replaceState(
       apps().gmm.distance.routerLink,
-      new HttpParams().appendAll({...query}).toString()
+      new HttpParams().appendAll({...query}).toString(),
     );
   }
 }
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts
index 71cbc4536..ef9dde0cb 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts
@@ -44,7 +44,7 @@ export class ContentComponent {
     return gmmUtils.plotToTable(
       plot.plotData,
       this.medianExp,
-      this.commonXValues
+      this.commonXValues,
     );
   });
 
@@ -55,7 +55,7 @@ export class ContentComponent {
     return gmmUtils.plotToTable(
       plot.plotData,
       this.medianExp,
-      this.commonXValues
+      this.commonXValues,
     );
   });
 
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts
index da8349b92..28a3e1f12 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts
@@ -70,30 +70,30 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
   constructor(
     public service: AppService,
-    private nshmpService: NshmpService
+    private nshmpService: NshmpService,
   ) {}
 
   ngOnInit(): void {
     this.subs.push(
       this.controls.gmmSource.valueChanges.subscribe(() => {
         this.onGmmSource();
-      })
+      }),
     );
 
     this.subs.push(
       this.controls.multiSelectableParam.valueChanges.subscribe(() =>
-        this.onMultiSelectableParam()
-      )
+        this.onMultiSelectableParam(),
+      ),
     );
 
     this.subs.push(
       this.controls.showEpistemicUncertainty.valueChanges.subscribe(() =>
-        this.onShowEpistemicUncertainty()
-      )
+        this.onShowEpistemicUncertainty(),
+      ),
     );
 
     this.subs.push(
-      this.controls.imt.valueChanges.subscribe(() => this.service.resetState())
+      this.controls.imt.valueChanges.subscribe(() => this.service.resetState()),
     );
   }
 
@@ -125,7 +125,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
     const supportedImts = gmmUtils.getSupportedImts(
       formValues.gmmSource,
-      this.service.state().usageResponse
+      this.service.state().usageResponse,
     );
 
     this.service.updateState({
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/path-parameters/path-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/path-parameters/path-parameters.component.ts
index 9ffd422a8..3d470d84c 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/path-parameters/path-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/path-parameters/path-parameters.component.ts
@@ -31,7 +31,7 @@ export class PathParametersComponent implements OnInit, OnDestroy {
 
   ngOnInit(): void {
     this.distanceSubscription = this.controls.distance.valueChanges.subscribe(
-      () => this.service.resetState()
+      () => this.service.resetState(),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/site-parameters/site-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/site-parameters/site-parameters.component.ts
index e710c00ab..ff8185571 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/site-parameters/site-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/site-parameters/site-parameters.component.ts
@@ -47,8 +47,8 @@ export class SiteParametersComponent implements OnInit, OnDestroy {
   vs30Multiple$ = this.controls.multiSelectableParam.valueChanges.pipe(
     map(
       multiSelectableParam =>
-        multiSelectableParam.toString() === GmmFormControlIds.VS30.toString()
-    )
+        multiSelectableParam.toString() === GmmFormControlIds.VS30.toString(),
+    ),
   );
 
   private valueSubscription = new Subscription();
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/services/app.service.ts b/projects/nshmp-apps/src/app/gmm/magnitude/services/app.service.ts
index f1b2fcc87..9fe90f58a 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/services/app.service.ts
@@ -78,7 +78,7 @@ export class AppService
     private nshmpService: NshmpService,
     private spinnerService: SpinnerService,
     private route: ActivatedRoute,
-    private location: LocationService
+    private location: LocationService,
   ) {
     super();
     this.addValidators();
@@ -172,7 +172,7 @@ export class AppService
     const urls = gmmUtils.serviceEndpoints(
       this.serviceUrl,
       this.formGroup.getRawValue(),
-      this.formGroup.getRawValue().multiSelectableParam
+      this.formGroup.getRawValue().multiSelectableParam,
     );
 
     this.nshmpService
@@ -297,7 +297,7 @@ export class AppService
    */
   init(): void {
     const spinnerRef = this.spinnerService.show(
-      SpinnerService.MESSAGE_METADATA
+      SpinnerService.MESSAGE_METADATA,
     );
 
     this.nshmpService
@@ -332,7 +332,7 @@ export class AppService
    */
   resetControlPanel(): void {
     this.formGroup.reset(
-      this.usageFormValues(this.state().usageResponse.response.parameters)
+      this.usageFormValues(this.state().usageResponse.response.parameters),
     );
   }
 
@@ -379,7 +379,7 @@ export class AppService
   }
 
   private handleServiceResponses(
-    serviceResponses: GmmMagnitudeResponse[]
+    serviceResponses: GmmMagnitudeResponse[],
   ): void {
     const means = serviceResponses.map(s => s.response.means);
     const sigmas = serviceResponses.map(s => s.response.sigmas);
@@ -440,7 +440,7 @@ export class AppService
       dip: nshmpUtils.queryParseNumber(defaultValues.dip, query?.dip),
       distance: nshmpUtils.queryParseNumber(
         defaultValues.distance,
-        query?.distance
+        query?.distance,
       ),
       gmmGroupType: query?.gmmGroupType ?? defaultValues.gmmGroupType,
       gmmSource,
@@ -453,7 +453,7 @@ export class AppService
         .map(mw => Number.parseFloat(mw)),
       showEpistemicUncertainty: nshmpUtils.queryParseBoolean(
         defaultValues.showEpistemicUncertainty,
-        query?.showEpistemicUncertainty
+        query?.showEpistemicUncertainty,
       ),
       step: nshmpUtils.queryParseNumber(defaultValues.step, query?.step),
       vs30: nshmpUtils.queryParseNumber(defaultValues.vs30, query?.vs30),
@@ -491,7 +491,7 @@ export class AppService
    */
   private serviceResponseToPlotData(
     state: AppState,
-    form: FormGroupControls<GmmMagnitudeFormControls>
+    form: FormGroupControls<GmmMagnitudeFormControls>,
   ): Map<string, NshmpPlot> {
     if (
       state.serviceResponses === null ||
@@ -565,7 +565,7 @@ export class AppService
 
     this.location.replaceState(
       apps().gmm.magnitude.routerLink,
-      new HttpParams().appendAll({...query}).toString()
+      new HttpParams().appendAll({...query}).toString(),
     );
   }
 
@@ -575,7 +575,7 @@ export class AppService
    * @param parameters The service parameters
    */
   private usageFormValues(
-    parameters: GmmMagnitudeUsageParameters
+    parameters: GmmMagnitudeUsageParameters,
   ): GmmMagnitudeFormControls {
     return {
       ...this.defaultFormValues(),
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts
index c52afa11e..5e2df3a62 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts
@@ -48,7 +48,7 @@ export class ContentComponent {
       this.sigmaExp,
       this.commonXValues,
       this.padValues,
-      plot.xValues
+      plot.xValues,
     );
   });
 
@@ -61,7 +61,7 @@ export class ContentComponent {
       this.spectraExp,
       this.commonXValues,
       this.padValues,
-      plot.xValues
+      plot.xValues,
     );
   });
 
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts
index 9565fa29a..0ba7be33d 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts
@@ -69,26 +69,26 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
   constructor(
     public service: AppService,
-    public nshmpService: NshmpService
+    public nshmpService: NshmpService,
   ) {}
 
   ngOnInit(): void {
     this.subs.push(
       this.controls.gmmSource.valueChanges.subscribe(() => {
         this.onGmmSource();
-      })
+      }),
     );
 
     this.subs.push(
       this.controls.multiSelectableParam.valueChanges.subscribe(() =>
-        this.onMultiSelectableParam()
-      )
+        this.onMultiSelectableParam(),
+      ),
     );
 
     this.subs.push(
       this.controls.showEpistemicUncertainty.valueChanges.subscribe(() =>
-        this.onShowEpistemicUncertainty()
-      )
+        this.onShowEpistemicUncertainty(),
+      ),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/event-parameters/event-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/event-parameters/event-parameters.component.ts
index 39a6d995f..772d599a8 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/event-parameters/event-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/event-parameters/event-parameters.component.ts
@@ -57,8 +57,8 @@ export class EventParametersComponent implements OnInit, OnDestroy {
     this.service.formGroup.controls.multiSelectableParam.valueChanges.pipe(
       map(
         multiSelectableParam =>
-          multiSelectableParam.toString() === GmmFormControlIds.MW.toString()
-      )
+          multiSelectableParam.toString() === GmmFormControlIds.MW.toString(),
+      ),
     );
 
   /** Usage parameters */
@@ -77,13 +77,13 @@ export class EventParametersComponent implements OnInit, OnDestroy {
         this.controls.rake.valueChanges,
         this.controls.rakeButton.valueChanges,
         this.controls.zHyp.valueChanges,
-      ]).subscribe(() => this.service.resetState())
+      ]).subscribe(() => this.service.resetState()),
     );
 
     this.subs.push(
       this.controls.zHypCentered.valueChanges.subscribe(() =>
-        this.onZHypCentered()
-      )
+        this.onZHypCentered(),
+      ),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/path-parameters/path-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/path-parameters/path-parameters.component.ts
index a6d81730a..022a17559 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/path-parameters/path-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/path-parameters/path-parameters.component.ts
@@ -47,14 +47,14 @@ export class PathParametersComponent implements OnInit, OnDestroy {
 
     this.subs.push(
       this.controls.derivePathParams.valueChanges.subscribe(() =>
-        this.onDerivePathParams()
-      )
+        this.onDerivePathParams(),
+      ),
     );
 
     this.subs.push(
       this.controls.hangingWall.valueChanges.subscribe(() =>
-        this.onHangingWall()
-      )
+        this.onHangingWall(),
+      ),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts
index 088f0b562..31567a6fb 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts
@@ -42,7 +42,7 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
 export class PlotsComponent {
   /** Sigma plot data */
   sigmaPlotData = computed(() =>
-    this.filterData(this.service.sigmaPlotState().plotData)
+    this.filterData(this.service.sigmaPlotState().plotData),
   );
 
   /** Response spectra plot data */
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/site-parameters/site-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/site-parameters/site-parameters.component.ts
index 46eb3eacd..967fba24d 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/site-parameters/site-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/site-parameters/site-parameters.component.ts
@@ -47,8 +47,8 @@ export class SiteParametersComponent implements OnInit, OnDestroy {
   vs30Multiple$ = this.controls.multiSelectableParam.valueChanges.pipe(
     map(
       multiSelectableParam =>
-        multiSelectableParam.toString() === GmmFormControlIds.VS30.toString()
-    )
+        multiSelectableParam.toString() === GmmFormControlIds.VS30.toString(),
+    ),
   );
 
   private valueSubscription = new Subscription();
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/services/app.service.ts b/projects/nshmp-apps/src/app/gmm/spectra/services/app.service.ts
index 8ccd925cc..b8b70b2a3 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/services/app.service.ts
@@ -97,7 +97,7 @@ export class AppService
     private nshmpService: NshmpService,
     private spinnerService: SpinnerService,
     private route: ActivatedRoute,
-    private location: LocationService
+    private location: LocationService,
   ) {
     super();
     this.addValidators();
@@ -283,7 +283,7 @@ export class AppService
     const urls = gmmUtils.serviceEndpoints(
       this.serviceUrl,
       this.formGroup.getRawValue(),
-      this.formGroup.getRawValue().multiSelectableParam
+      this.formGroup.getRawValue().multiSelectableParam,
     );
 
     this.nshmpService
@@ -428,7 +428,7 @@ export class AppService
    */
   init(): void {
     const spinnerRef = this.spinnerService.show(
-      SpinnerService.MESSAGE_METADATA
+      SpinnerService.MESSAGE_METADATA,
     );
 
     this.nshmpService
@@ -463,7 +463,7 @@ export class AppService
    */
   resetControlPanel(): void {
     this.formGroup.reset(
-      this.usageFormValues(this.state().usageResponse.response.parameters)
+      this.usageFormValues(this.state().usageResponse.response.parameters),
     );
   }
 
@@ -570,14 +570,14 @@ export class AppService
     this.formGroup.patchValue({
       derivePathParams: nshmpUtils.queryParseBoolean(
         defaultValues.derivePathParams,
-        query.derivePathParams
+        query.derivePathParams,
       ),
       dip: nshmpUtils.queryParseNumber(defaultValues.dip, query?.dip),
       gmmGroupType: query?.gmmGroupType ?? defaultValues.gmmGroupType,
       gmmSource,
       hangingWall: nshmpUtils.queryParseBoolean(
         defaultValues.hangingWall,
-        query?.hangingWall
+        query?.hangingWall,
       ),
       Mw: nshmpUtils.queryParseNumber(defaultValues.Mw, query?.Mw),
       MwMulti: nshmpUtils
@@ -596,7 +596,7 @@ export class AppService
       rX: nshmpUtils.queryParseNumber(defaultValues.rX, query?.rX),
       showEpistemicUncertainty: nshmpUtils.queryParseBoolean(
         defaultValues.showEpistemicUncertainty,
-        query?.showEpistemicUncertainty
+        query?.showEpistemicUncertainty,
       ),
       vs30: nshmpUtils.queryParseNumber(defaultValues.vs30, query?.vs30),
       vs30Multi: nshmpUtils
@@ -608,7 +608,7 @@ export class AppService
       zHyp: nshmpUtils.queryParseNumber(defaultValues.zHyp, query?.zHyp),
       zHypCentered: nshmpUtils.queryParseBoolean(
         defaultValues.zHypCentered,
-        query?.zHypCentered
+        query?.zHypCentered,
       ),
       zSed: nshmpUtils.queryParseNumber(defaultValues.zSed, query?.zSed),
       zTor: nshmpUtils.queryParseNumber(defaultValues.zTor, query?.zTor),
@@ -641,14 +641,14 @@ export class AppService
   private plotInfo(
     gmmSeries: GmmSeries<SpectraData, TreeValues>[],
     xUnit: string,
-    yUnit: string
+    yUnit: string,
   ) {
     let hoverTemplate: string[] = [];
     let symbol: string[] = [];
 
     if (gmmSeries.length > 0) {
       hoverTemplate = gmmSeries[0].data.sa.xs.map(
-        () => `%{x} ${xUnit}, %{y} ${yUnit}`
+        () => `%{x} ${xUnit}, %{y} ${yUnit}`,
       );
       symbol = gmmSeries[0].data.sa.xs.map(() => 'circle');
     }
@@ -666,7 +666,7 @@ export class AppService
    */
   private serviceResponseToPlotData(
     state: AppState,
-    form: FormGroupControls<FormControls>
+    form: FormGroupControls<FormControls>,
   ): Map<string, SpectraPlot> {
     if (
       state.serviceResponses === null ||
@@ -682,7 +682,7 @@ export class AppService
 
     const xValues = state.serviceResponses
       .map(serviceResponse =>
-        serviceResponse.response.means.data.map(data => data.data.sa.xs)
+        serviceResponse.response.means.data.map(data => data.data.sa.xs),
       )
       .reduce((prev, curr) => [...prev, ...curr])
       .reduce((prev, curr) => {
@@ -720,7 +720,7 @@ export class AppService
    * @param responses The spectra responses
    */
   private toGmmResponses(
-    responses: GmmSpectraResponse[]
+    responses: GmmSpectraResponse[],
   ): gmmUtils.GmmResponse<SpectraData, TreeValues>[] {
     const gmmResponses = responses.map(serviceResponse => {
       const means = serviceResponse.response.means;
@@ -775,7 +775,7 @@ export class AppService
   private updateControl(
     control: FormControl<number>,
     value: number,
-    disabled = false
+    disabled = false,
   ): void {
     const precision = 3;
     value = value ? Maths.round(value, precision) : value;
@@ -801,7 +801,7 @@ export class AppService
       rJB: number;
       rRup: number;
       rX: number;
-    }
+    },
   ): void {
     const values = form.getRawValue();
 
@@ -841,7 +841,7 @@ export class AppService
 
     this.location.replaceState(
       apps().gmm.spectra.routerLink,
-      new HttpParams().appendAll({...query}).toString()
+      new HttpParams().appendAll({...query}).toString(),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts
index ef23f377d..495676335 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts
@@ -55,9 +55,9 @@ export class ContentComponent {
     const layers = serviceResponse.response.disaggs.find(disaggs =>
       disaggs.data.find(data =>
         data.sources.find(
-          source => source.latitude !== null && source.longitude !== null
-        )
-      )
+          source => source.latitude !== null && source.longitude !== null,
+        ),
+      ),
     );
 
     return layers !== undefined;
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts
index b690cf27b..5684b8998 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts
@@ -95,7 +95,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
   /** The site classes */
   siteClasses = computed(
-    () => this.service.usage()?.response.model.siteClasses
+    () => this.service.usage()?.response.model.siteClasses,
   );
 
   /** Source model info from usage */
@@ -105,7 +105,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
   constructor(
     public service: AppService,
-    private nshmpService: NshmpService
+    private nshmpService: NshmpService,
   ) {}
 
   ngOnInit(): void {
@@ -115,11 +115,11 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
       controls.disaggTarget.valueChanges.subscribe(() => {
         this.service.onDisaggTarget();
         this.service.resetState();
-      })
+      }),
     );
 
     this.subs.push(
-      controls.model.valueChanges.subscribe(() => this.onModelChange())
+      controls.model.valueChanges.subscribe(() => this.onModelChange()),
     );
 
     this.subs.push(
@@ -132,7 +132,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
         controls.vs30.valueChanges,
       ]).subscribe(() => {
         this.service.resetState();
-      })
+      }),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
index b68c0056b..1dc943d7c 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
@@ -31,7 +31,7 @@ export class DisaggDataComponent {
     const bins = this.service.serviceResponse().response.metadata.εbins;
 
     const binData = bins.map(
-      bin => data.εdata.find(data => data.εbin === bin.id)?.value ?? 0
+      bin => data.εdata.find(data => data.εbin === bin.id)?.value ?? 0,
     );
 
     const total = binData.reduce((a, b) => a + b, 0);
@@ -41,7 +41,7 @@ export class DisaggDataComponent {
 
   epsilonKeys(): string[] {
     const keys = this.componentData.summary.find(
-      data => data.name.toLowerCase() === 'epsilon keys'
+      data => data.name.toLowerCase() === 'epsilon keys',
     );
 
     return ['ALL_ε', ...keys.data.map(data => `${data.name}=${data.value}`)];
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts
index 3ee2073aa..0670d34c4 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts
@@ -116,7 +116,7 @@ export class GeoDisaggComponent {
           .map(data => {
             return data.sources
               .filter(
-                source => source.latitude !== null && source.longitude !== null
+                source => source.latitude !== null && source.longitude !== null,
               )
               .map(source => {
                 const latLng = L.latLng(source.latitude, source.longitude);
@@ -125,16 +125,16 @@ export class GeoDisaggComponent {
                 const height = source.contribution * heightFactor;
                 const southWest = L.point(
                   currentPoint.x - width / 2,
-                  currentPoint.y
+                  currentPoint.y,
                 );
                 const northEast = L.point(
                   currentPoint.x + width / 2,
-                  currentPoint.y - height
+                  currentPoint.y - height,
                 );
 
                 const bounds = L.latLngBounds(
                   this.map.containerPointToLatLng(southWest),
-                  this.map.containerPointToLatLng(northEast)
+                  this.map.containerPointToLatLng(northEast),
                 );
                 const rect = L.rectangle(bounds, {
                   color: 'black',
@@ -151,7 +151,7 @@ export class GeoDisaggComponent {
                     <td>${value}</td>
                   </tr>
                   `;
-                  }
+                  },
                 );
 
                 const popupContent = `<table>
@@ -197,7 +197,7 @@ export class GeoDisaggComponent {
             fillOpacity: this.defaultOpacity,
             opacity: this.defaultOpacity,
             weight: 1,
-          })
+          }),
         );
       });
     });
@@ -242,7 +242,7 @@ export class GeoDisaggComponent {
 
     const site = L.latLng(
       serviceResponse.request.latitude,
-      serviceResponse.request.longitude
+      serviceResponse.request.longitude,
     );
 
     const siteMarker = L.marker(site, {
@@ -267,7 +267,7 @@ export class GeoDisaggComponent {
 
   private onEachFeatureFaults(
     layer: L.GeoJSON,
-    feature: GeoJSON.Feature
+    feature: GeoJSON.Feature,
   ): void {
     const properties = Object.entries(feature.properties)
       .filter(([key]) => key !== 'mfd-tree' && key !== 'rate-map')
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts
index 23d4dc934..6a6163ba0 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts
@@ -48,7 +48,7 @@ export class ParameterSummaryComponent {
 
     if (usage) {
       return hazardUtils.siteClassesToParameters(
-        usage.response.model.siteClasses
+        usage.response.model.siteClasses,
       );
     }
   });
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/plots/plots.component.ts
index 5feede665..51f29afb0 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/plots/plots.component.ts
@@ -43,7 +43,7 @@ export class PlotsComponent {
 
   constructor(
     public service: AppService,
-    public templateService: NshmpTemplateService
+    public templateService: NshmpTemplateService,
   ) {}
 
   /** Print report */
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/services/app.service.ts b/projects/nshmp-apps/src/app/hazard/disagg/services/app.service.ts
index 551e055c9..2d00f65c7 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/services/app.service.ts
@@ -74,7 +74,7 @@ export class AppService
   private featuresEndpoint = this.nshmpHazWs.services.curveServices.features;
 
   readonly formGroup = this.formBuilder.group<DisaggControlForm>(
-    this.defaultFormValues()
+    this.defaultFormValues(),
   );
   readonly state = signal<AppState>(this.initialState());
 
@@ -86,14 +86,14 @@ export class AppService
     private route: ActivatedRoute,
     private http: HttpClient,
     private location: LocationService,
-    @Inject(LOCALE_ID) private localId: string
+    @Inject(LOCALE_ID) private localId: string,
   ) {
     super();
     this.addValidators();
     this.formGroup.controls.disaggComponent.disable();
 
     this.formGroup.controls.disaggComponent.valueChanges.subscribe(() =>
-      this.updateComponentData()
+      this.updateComponentData(),
     );
   }
 
@@ -128,8 +128,8 @@ export class AppService
   get nshmService(): Signal<NshmMetadata> {
     return computed(() =>
       this.state().nshmServices.find(
-        nshmService => nshmService.model === this.formGroup.getRawValue().model
-      )
+        nshmService => nshmService.model === this.formGroup.getRawValue().model,
+      ),
     );
   }
 
@@ -159,7 +159,7 @@ export class AppService
    */
   get usage(): Signal<DisaggUsage> {
     return computed(() =>
-      this.state().usageResponses?.get(this.formGroup.getRawValue().model)
+      this.state().usageResponses?.get(this.formGroup.getRawValue().model),
     );
   }
 
@@ -220,7 +220,7 @@ export class AppService
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(([serviceResponse]) => {
         spinnerRef.close();
@@ -261,7 +261,7 @@ export class AppService
    */
   init(): void {
     const spinnerRef = this.spinnerService.show(
-      SpinnerService.MESSAGE_METADATA
+      SpinnerService.MESSAGE_METADATA,
     );
     const service = environment.webServices.nshmpHazWs;
     const endpoint = service.services.curveServices.disagg;
@@ -269,13 +269,13 @@ export class AppService
     this.hazardService
       .dynamicNshms$<DisaggRequestMetadata>(
         `${service.url}${service.services.nshms}`,
-        endpoint
+        endpoint,
       )
       .pipe(
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(({models, nshmServices, usageResponses}) => {
         spinnerRef.close();
@@ -362,7 +362,7 @@ export class AppService
       [this.componentDataToCSV(data, this.formGroup.getRawValue())],
       {
         type: 'text/csv;charset=utf-8;',
-      }
+      },
     );
 
     this.nshmpService.saveAs(blob, `disagg-${data.component}.csv`);
@@ -375,7 +375,7 @@ export class AppService
 
     this.nshmpService.saveAs(
       blob,
-      `disagg-summary-${this.componentData().component}.txt`
+      `disagg-summary-${this.componentData().component}.txt`,
     );
   }
 
@@ -387,7 +387,7 @@ export class AppService
    */
   saveContributions(
     data: DisaggComponentData,
-    formValues: DisaggControlForm
+    formValues: DisaggControlForm,
   ): void {
     const blob = new Blob([this.contributorsToCSV(data.sources, formValues)], {
       type: 'text/csv;charset=utf-8;',
@@ -410,7 +410,7 @@ export class AppService
 
   saveSummaryReport(): void {
     const summaries = this.disaggData().data.map((data, index) =>
-      this.summaryReportText(data, index === 0)
+      this.summaryReportText(data, index === 0),
     );
 
     const blob = new Blob(summaries, {
@@ -437,7 +437,7 @@ export class AppService
 
     const componentData = this.disaggData()?.data.find(
       disagg =>
-        disagg.component === this.formGroup.getRawValue().disaggComponent
+        disagg.component === this.formGroup.getRawValue().disaggComponent,
     );
 
     this.updateState({
@@ -482,13 +482,13 @@ export class AppService
     return this.http.get<FeaturesUsageResponse>(url).pipe(
       map(featureUsage => {
         const featureTypes = featureUsage.response.featureType.map(
-          feature => feature.value
+          feature => feature.value,
         );
 
         if (featureTypes.includes(FeatureType.FAULT)) {
           this.callFaultsService();
         }
-      })
+      }),
     );
   }
 
@@ -501,12 +501,12 @@ export class AppService
   private componentDataToCSV(
     componentData: DisaggComponentData,
     formValues: DisaggControlForm,
-    showMetadata = true
+    showMetadata = true,
   ): string {
     const metadata = this.serviceResponse().response.metadata;
     const bins = metadata.εbins;
     const keys = componentData.summary.find(
-      data => data.name.toLowerCase() === 'epsilon keys'
+      data => data.name.toLowerCase() === 'epsilon keys',
     );
 
     const headers = [
@@ -518,7 +518,7 @@ export class AppService
 
     const csv = componentData.data.map(data => {
       const εvalues = bins.map(
-        bin => data.εdata.find(data => data.εbin === bin.id)?.value ?? 0.0
+        bin => data.εdata.find(data => data.εbin === bin.id)?.value ?? 0.0,
       );
       const sum = εvalues.reduce((a, b) => a + b, 0);
       const values = [sum, ...εvalues]
@@ -544,7 +544,7 @@ export class AppService
   private contributorsToCSV(
     sources: DisaggSource[],
     formValues: DisaggControlForm,
-    showMetadata = true
+    showMetadata = true,
   ): string {
     const label = 'Disaggregation Contributions';
 
@@ -649,7 +649,7 @@ export class AppService
     const usage = this.usage().response;
 
     const imt = usage.model.imts.find(
-      imt => imt.value === formValues.imt.toString()
+      imt => imt.value === formValues.imt.toString(),
     )?.display;
 
     const vs30 =
@@ -677,7 +677,7 @@ export class AppService
    */
   private serviceEndpoint(
     serviceUrl: string,
-    values: DisaggControlForm
+    values: DisaggControlForm,
   ): string {
     const pathBase = `${serviceUrl}/${values.longitude}/${values.latitude}/${values.vs30}`;
     const queryBase = '?out=DISAGG_DATA,GMM,SOURCE';
@@ -701,7 +701,7 @@ export class AppService
 
   private summaryReportText(
     componentData: DisaggComponentData,
-    showMetadata = true
+    showMetadata = true,
   ): string {
     const formValues = this.formGroup.getRawValue();
     const firstLine = '*** Disaggregation of Seismic Hazard ***';
@@ -729,7 +729,7 @@ export class AppService
   private summaryToText(
     summaries: DisaggSummary[],
     formValues: DisaggControlForm,
-    showMetadata = true
+    showMetadata = true,
   ): string {
     const text = summaries.map(summary => {
       const name = summary.name;
@@ -747,7 +747,8 @@ export class AppService
 
   private updateDisaggData(): void {
     const disaggData = this.state().serviceResponse?.response.disaggs.find(
-      disagg => disagg.imt.value === this.formGroup.getRawValue().imt.toString()
+      disagg =>
+        disagg.imt.value === this.formGroup.getRawValue().imt.toString(),
     );
 
     this.updateState({
@@ -758,13 +759,13 @@ export class AppService
   private updateUrl(): void {
     this.location.replaceState(
       apps().hazard.disagg.routerLink,
-      new HttpParams().appendAll(this.formGroup.getRawValue()).toString()
+      new HttpParams().appendAll(this.formGroup.getRawValue()).toString(),
     );
   }
 
   private updateUsageUrl() {
     const nshmService = this.state().nshmServices.find(
-      nshm => nshm.model === this.formGroup.getRawValue().model
+      nshm => nshm.model === this.formGroup.getRawValue().model,
     );
 
     this.updateState({
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts
index 7cdd5c033..b9d56a2f7 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts
@@ -59,13 +59,13 @@ export class ContentComponent {
             : label,
         xValueFormat: (x: number) => x.toFixed(4),
         yValueFormat: (y: number) => y.toExponential(4),
-      }
+      },
     );
   });
 
   /** Spectra table data */
   spectraTableData = computed(() =>
-    hazardUtils.responseSpectraToTableData(this.service.responseSpectra())
+    hazardUtils.responseSpectraToTableData(this.service.responseSpectra()),
   );
 
   constructor(public service: AppService) {}
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts
index 437f0839a..3a167f757 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts
@@ -85,7 +85,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
   /** List of site class `Parameter`s */
   siteClasses = computed(
-    () => this.service.usage()?.response?.model.siteClasses
+    () => this.service.usage()?.response?.model.siteClasses,
   );
 
   /** Get available source types */
@@ -96,7 +96,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
       return [sourceTypeToCapitalCase(SourceType.TOTAL)];
     }
     return serviceResponse.response.hazardCurves[0].data.map(
-      data => data.component
+      data => data.component,
     );
   });
 
@@ -104,14 +104,14 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
   constructor(
     public service: AppService,
-    private nshmpService: NshmpService
+    private nshmpService: NshmpService,
   ) {}
 
   ngOnInit(): void {
     const controls = this.formGroup.controls;
 
     this.subs.push(
-      controls.model.valueChanges.subscribe(() => this.onModelChange())
+      controls.model.valueChanges.subscribe(() => this.onModelChange()),
     );
 
     this.subs.push(
@@ -119,7 +119,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
         controls.latitude.valueChanges,
         controls.longitude.valueChanges,
         controls.vs30.valueChanges,
-      ]).subscribe(() => this.service.resetState())
+      ]).subscribe(() => this.service.resetState()),
     );
 
     this.subs.push(
@@ -128,7 +128,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
         controls.sourceType.valueChanges,
         controls.maxDirection.valueChanges,
         controls.truncate.valueChanges,
-      ]).subscribe(() => this.service.createPlots())
+      ]).subscribe(() => this.service.createPlots()),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts
index e9d4fb3b5..fd19d06d4 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts
@@ -39,7 +39,7 @@ export class ParameterSummaryComponent {
     }
 
     return hazardUtils.siteClassesToParameters(
-      usage.response.model.siteClasses
+      usage.response.model.siteClasses,
     );
   });
 
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/services/app.service.ts b/projects/nshmp-apps/src/app/hazard/dynamic/services/app.service.ts
index d5e280b28..b09473bb0 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/services/app.service.ts
@@ -70,7 +70,7 @@ export class AppService
   private serviceEndpoint = this.nshmpHazWs.services.curveServices.hazard;
 
   readonly formGroup = this.formBuilder.group<DynamicHazardControlForm>(
-    this.defaultFormValues()
+    this.defaultFormValues(),
   );
 
   /** Application state */
@@ -82,7 +82,7 @@ export class AppService
     private nshmpService: NshmpService,
     private hazardService: HazardService,
     private route: ActivatedRoute,
-    private location: LocationService
+    private location: LocationService,
   ) {
     super();
     this.addValidators();
@@ -122,8 +122,8 @@ export class AppService
   get nshmService(): Signal<NshmMetadata> {
     return computed(() =>
       this.state().nshmServices.find(
-        nshmService => nshmService.model === this.formGroup.getRawValue().model
-      )
+        nshmService => nshmService.model === this.formGroup.getRawValue().model,
+      ),
     );
   }
 
@@ -178,7 +178,7 @@ export class AppService
    */
   get usage(): Signal<HazardUsageResponse> {
     return computed(() =>
-      this.state().usageResponses?.get(this.formGroup.getRawValue().model)
+      this.state().usageResponses?.get(this.formGroup.getRawValue().model),
     );
   }
 
@@ -203,7 +203,7 @@ export class AppService
     const values = this.formGroup.getRawValue();
 
     const service = this.state().nshmServices.find(
-      nshmService => nshmService.model === values.model
+      nshmService => nshmService.model === values.model,
     );
     const serviceUrl = `${service.url}${this.serviceEndpoint}`;
     const url = this.createServiceEndpoint(serviceUrl, values);
@@ -214,14 +214,14 @@ export class AppService
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(serviceResponse => {
         spinnerRef.close();
 
         const responseSpectra = hazardUtils.responseSpectra(
           serviceResponse.response.hazardCurves,
-          this.formGroup.getRawValue()
+          this.formGroup.getRawValue(),
         );
 
         this.updateState({
@@ -258,19 +258,19 @@ export class AppService
    */
   init(): void {
     const spinnerRef = this.spinnerService.show(
-      SpinnerService.MESSAGE_METADATA
+      SpinnerService.MESSAGE_METADATA,
     );
 
     this.hazardService
       .dynamicNshms$<HazardRequestMetadata>(
         `${this.nshmpHazWs.url}${this.nshmpHazWs.services.nshms}`,
-        this.serviceEndpoint
+        this.serviceEndpoint,
       )
       .pipe(
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(({models, nshmServices, usageResponses}) => {
         spinnerRef.close();
@@ -380,10 +380,10 @@ export class AppService
     responseData: HazardResponseData,
     plot: NshmpPlot,
     form: DynamicHazardControlForm,
-    returnPeriod: number
+    returnPeriod: number,
   ): PlotlyPlot {
     const hazardCurves = responseData.hazardCurves.filter(
-      response => response.imt.value !== Imt.PGV.toString()
+      response => response.imt.value !== Imt.PGV.toString(),
     );
 
     const data = hazardCurves.map((response, index) => {
@@ -391,12 +391,12 @@ export class AppService
 
       const sourceTypeData = hazardUtils.getSourceTypeData(
         response.data,
-        form.sourceType
+        form.sourceType,
       );
       const xy = hazardUtils.updateXySequence(
         form,
         hazardUtils.cleanXySequence(sourceTypeData.values),
-        imt
+        imt,
       );
 
       const plotlyData: Partial<PlotData> = {
@@ -455,7 +455,7 @@ export class AppService
 
   private createServiceEndpoint(
     serviceUrl: string,
-    values: DynamicHazardControlForm
+    values: DynamicHazardControlForm,
   ): string {
     const {longitude, latitude, vs30} = values;
     return `${serviceUrl}/${longitude}/${latitude}/${vs30}`;
@@ -524,7 +524,7 @@ export class AppService
   private responseSpectrumPlotData(
     spectra: ResponseSpectra,
     plot: NshmpPlot,
-    returnPeriodValue: number
+    returnPeriodValue: number,
   ): PlotlyPlot {
     if (spectra === null || spectra === undefined) {
       return;
@@ -539,7 +539,7 @@ export class AppService
 
       const color = hazardUtils.color(
         iSpectra,
-        spectra.responseSpectrum.length
+        spectra.responseSpectrum.length,
       );
 
       if (spectrum.returnPeriod === returnPeriodValue) {
@@ -633,7 +633,7 @@ export class AppService
    */
   private responseToPlots(
     state: AppState,
-    formGroup: FormGroupControls<DynamicHazardControlForm>
+    formGroup: FormGroupControls<DynamicHazardControlForm>,
   ): Map<string, NshmpPlot> {
     if (state.serviceResponse === null || state.serviceResponse === undefined) {
       return state.plots;
@@ -649,13 +649,13 @@ export class AppService
       responseData,
       hazardPlot,
       formGroup.getRawValue(),
-      returnPeriod
+      returnPeriod,
     );
 
     const spectrum = this.responseSpectrumPlotData(
       state.responseSpectra,
       spectrumPlot,
-      returnPeriod
+      returnPeriod,
     );
 
     plots.set(HazardPlots.HAZARD, {
@@ -681,12 +681,12 @@ export class AppService
   private returnPeriodPlotData(
     responseData: HazardResponseData,
     sourceType: string,
-    returnPeriod: number
+    returnPeriod: number,
   ): Partial<PlotData> {
     const data = responseData.hazardCurves
       .filter(hazard => hazard.imt.value !== Imt.PGV.toString())
       .map(
-        hazard => hazardUtils.getSourceTypeData(hazard.data, sourceType).values
+        hazard => hazardUtils.getSourceTypeData(hazard.data, sourceType).values,
       );
 
     const xMin = Math.min(...data.map(xy => Math.min(...xy.xs)));
@@ -707,13 +707,13 @@ export class AppService
   private updateUrl(): void {
     this.location.replaceState(
       apps().hazard.dynamic.routerLink,
-      new HttpParams().appendAll(this.formGroup.getRawValue()).toString()
+      new HttpParams().appendAll(this.formGroup.getRawValue()).toString(),
     );
   }
 
   private updateUsageUrl() {
     const nshmService = this.state().nshmServices.find(
-      nshm => nshm.model === this.formGroup.getRawValue().model
+      nshm => nshm.model === this.formGroup.getRawValue().model,
     );
 
     this.updateState({
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts
index 24a18fdbc..06f719544 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts
@@ -75,28 +75,28 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
   /** List of site class `Parameter`s */
   siteClasses = computed(
-    () => this.service.usage()?.response?.models.siteClasses
+    () => this.service.usage()?.response?.models.siteClasses,
   );
 
   private subs: Subscription[] = [];
 
   constructor(
     public service: AppService,
-    private nshmpService: NshmpService
+    private nshmpService: NshmpService,
   ) {}
 
   ngOnInit(): void {
     const controls = this.formGroup.controls;
 
     this.subs.push(
-      controls.model.valueChanges.subscribe(() => this.onModelChange())
+      controls.model.valueChanges.subscribe(() => this.onModelChange()),
     );
 
     this.subs.push(
       combineLatest([
         controls.latitude.valueChanges,
         controls.longitude.valueChanges,
-      ]).subscribe(() => this.service.resetState())
+      ]).subscribe(() => this.service.resetState()),
     );
 
     this.subs.push(
@@ -105,7 +105,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
         controls.maxDirection.valueChanges,
         controls.truncate.valueChanges,
         controls.siteClass.valueChanges,
-      ]).subscribe(() => this.service.createPlots())
+      ]).subscribe(() => this.service.createPlots()),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts
index ee9f68ec6..5b1cf2885 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts
@@ -58,7 +58,7 @@ export class CurveDataComponent {
     this.service.plots();
     return this.responseDataToTable(
       this.serviceResponse().response,
-      this.service.formGroup.getRawValue()
+      this.service.formGroup.getRawValue(),
     );
   });
 
@@ -67,7 +67,7 @@ export class CurveDataComponent {
 
   constructor(
     private service: AppService,
-    public nshmpService: NshmpService
+    public nshmpService: NshmpService,
   ) {}
 
   /** Filename for hazard export CSV */
@@ -86,7 +86,7 @@ export class CurveDataComponent {
    */
   private responseDataToTable(
     responseData: StaticResponseData<HazardResponseMetadata>[][],
-    form: HazardControlForm
+    form: HazardControlForm,
   ): StaticHazardCurveTable[] {
     return responseData.map(response => {
       const tableData = this.responseDataToTableData(response, form);
@@ -106,7 +106,7 @@ export class CurveDataComponent {
    */
   private responseDataToTableData(
     responseData: StaticResponseData<HazardResponseMetadata>[],
-    form: HazardControlForm
+    form: HazardControlForm,
   ): TableData[] {
     const tableData: TableData[] = [];
     responseData.forEach((response, index) => {
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts
index ff5c4dd92..13adebf02 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts
@@ -39,7 +39,7 @@ export class ParameterSummaryComponent {
     }
 
     return hazardUtils.siteClassesToParameters(
-      usage.response.models.siteClasses
+      usage.response.models.siteClasses,
     );
   });
 
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts
index 6059b9b60..b04445bb8 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts
@@ -64,7 +64,7 @@ export class SpectrumDataComponent {
    * @param spectra Response spectra data
    */
   private spectraToTableData(
-    spectra: ResponseSpectra[]
+    spectra: ResponseSpectra[],
   ): StaticHazardCurveTable[] {
     return spectra.map(spectrum => {
       const tableData = hazardUtils
diff --git a/projects/nshmp-apps/src/app/hazard/static/services/app.service.ts b/projects/nshmp-apps/src/app/hazard/static/services/app.service.ts
index 8ad4b174a..37e30a7a3 100644
--- a/projects/nshmp-apps/src/app/hazard/static/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/services/app.service.ts
@@ -75,7 +75,7 @@ export class AppService
   private serviceEndpoint = this.nshmpWsStatic.services.curveServices.hazard;
 
   readonly formGroup = this.formBuilder.group<HazardControlForm>(
-    this.defaultFormValues()
+    this.defaultFormValues(),
   );
 
   /** Application state */
@@ -87,7 +87,7 @@ export class AppService
     private nshmpService: NshmpService,
     private hazardService: HazardService,
     private route: ActivatedRoute,
-    private location: LocationService
+    private location: LocationService,
   ) {
     super();
     this.addValidators();
@@ -127,8 +127,8 @@ export class AppService
   get nshmService(): Signal<StaticNshmMetadata> {
     return computed(() =>
       this.state().nshmServices.find(
-        nshmService => nshmService.model === this.formGroup.getRawValue().model
-      )
+        nshmService => nshmService.model === this.formGroup.getRawValue().model,
+      ),
     );
   }
 
@@ -183,7 +183,7 @@ export class AppService
    */
   get usage(): Signal<StaticHazardUsage> {
     return computed(() =>
-      this.state().usageResponses?.get(this.formGroup.getRawValue().model)
+      this.state().usageResponses?.get(this.formGroup.getRawValue().model),
     );
   }
 
@@ -207,7 +207,7 @@ export class AppService
     const values = this.formGroup.getRawValue();
 
     const service = this.state().nshmServices.find(
-      nshmService => nshmService.model === values.model
+      nshmService => nshmService.model === values.model,
     );
     const serviceUrl = `${service.url}${this.serviceEndpoint}`;
     const url = this.createServiceEndpoint(serviceUrl, values);
@@ -218,7 +218,7 @@ export class AppService
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(serviceResponse => {
         spinnerRef.close();
@@ -226,7 +226,7 @@ export class AppService
         this.updateState({
           responseSpectra: this.createResponseSpectra(
             serviceResponse,
-            this.formGroup
+            this.formGroup,
           ),
           serviceCallInfo: {
             ...this.state().serviceCallInfo,
@@ -264,7 +264,7 @@ export class AppService
     services: HazardWebServices<StaticCurvesServices>,
     model: NshmId,
     longitude: number,
-    latitude: number
+    latitude: number,
   ): string {
     const service = this.staticService(services, model);
     return `${service.url}${services.services.hazard}/${longitude}/${latitude}`;
@@ -275,19 +275,19 @@ export class AppService
    */
   init(): void {
     const spinnerRef = this.spinnerService.show(
-      SpinnerService.MESSAGE_METADATA
+      SpinnerService.MESSAGE_METADATA,
     );
 
     this.hazardService
       .staticNshms$(
         `${this.nshmpWsStatic.url}${this.nshmpWsStatic.services.nshms}`,
-        this.serviceEndpoint
+        this.serviceEndpoint,
       )
       .pipe(
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(({models, nshmServices, usageResponses}) => {
         spinnerRef.close();
@@ -375,7 +375,7 @@ export class AppService
    */
   staticHazardOnSiteClassChange(
     state: AppState,
-    formGroup: FormGroupControls<HazardControlForm>
+    formGroup: FormGroupControls<HazardControlForm>,
   ): Map<string, NshmpPlot> {
     if (state.serviceResponse) {
       return this.responseToPlots(state, formGroup);
@@ -414,10 +414,10 @@ export class AppService
     responseData: StaticResponseData<HazardResponseMetadata>[],
     plot: NshmpPlot,
     form: HazardControlForm,
-    returnPeriod: number
+    returnPeriod: number,
   ): PlotlyPlot {
     const staticResponseData = responseData.filter(
-      response => response.metadata.imt.value !== Imt.PGV.toString()
+      response => response.metadata.imt.value !== Imt.PGV.toString(),
     );
 
     let data = staticResponseData.map((response, index) => {
@@ -428,7 +428,7 @@ export class AppService
       const xy = hazardUtils.updateXySequence(
         form,
         hazardUtils.cleanXySequence(response.data),
-        imt
+        imt,
       );
       const plotlyData: Partial<PlotData> = {
         hovertemplate: '%{x} g, %{y} AFE',
@@ -480,7 +480,7 @@ export class AppService
    */
   private createResponseSpectra(
     serviceResponse: StaticHazardResponse,
-    formGroup: FormGroupControls<HazardControlForm>
+    formGroup: FormGroupControls<HazardControlForm>,
   ): ResponseSpectra[] {
     if (serviceResponse === null) {
       return [];
@@ -497,7 +497,7 @@ export class AppService
     return serviceResponse.response.map(serviceResponse => {
       const hazardCurves: Map<Imt, XySequence> = this.hazardCurveMap(
         serviceResponse,
-        formGroup.getRawValue()
+        formGroup.getRawValue(),
       );
 
       const spectra: ResponseSpectrum[] = returnPeriods.map(
@@ -508,7 +508,7 @@ export class AppService
             returnPeriod,
             values: spectrum.ys,
           };
-        }
+        },
       );
 
       return {
@@ -521,7 +521,7 @@ export class AppService
 
   private createServiceEndpoint(
     serviceUrl: string,
-    values: HazardControlForm
+    values: HazardControlForm,
   ): string {
     const {longitude, latitude} = values;
     return `${serviceUrl}/${longitude}/${latitude}`;
@@ -534,7 +534,7 @@ export class AppService
    */
   private getResponseData(
     state: AppState,
-    formGroup: FormGroupControls<HazardControlForm>
+    formGroup: FormGroupControls<HazardControlForm>,
   ): StaticResponseData<HazardResponseMetadata>[] {
     const siteClass = formGroup.getRawValue().siteClass;
 
@@ -553,7 +553,7 @@ export class AppService
    */
   private hazardCurveMap(
     responseData: StaticResponseData<HazardResponseMetadata>[],
-    form: HazardControlForm
+    form: HazardControlForm,
   ): Map<Imt, XySequence> {
     const hazardCurves: Map<Imt, XySequence> = new Map();
     responseData.forEach(response => {
@@ -561,7 +561,7 @@ export class AppService
       const xy = hazardUtils.updateXySequence(
         form,
         hazardUtils.cleanXySequence(response.data),
-        imt
+        imt,
       );
       hazardCurves.set(imt, xy);
     });
@@ -623,7 +623,7 @@ export class AppService
     responseData: StaticResponseData<HazardResponseMetadata>[],
     plot: NshmpPlot,
     form: HazardControlForm,
-    returnPeriodValue: number
+    returnPeriodValue: number,
   ): PlotlyPlot {
     const hazardCurves = this.hazardCurveMap(responseData, form);
     const imts: Imt[] = [];
@@ -736,7 +736,7 @@ export class AppService
    */
   private responseToPlots(
     state: AppState,
-    formGroup: FormGroupControls<HazardControlForm>
+    formGroup: FormGroupControls<HazardControlForm>,
   ): Map<string, NshmpPlot> {
     if (state.serviceResponse === null || state.serviceResponse === undefined) {
       return state.plots;
@@ -752,14 +752,14 @@ export class AppService
       responseData,
       hazardPlot,
       formGroup.getRawValue(),
-      returnPeriod
+      returnPeriod,
     );
 
     const spectrum = this.responseSpectrumPlotData(
       responseData,
       spectrumPlot,
       formGroup.getRawValue(),
-      returnPeriod
+      returnPeriod,
     );
 
     plots.set(HazardPlots.HAZARD, {
@@ -783,13 +783,13 @@ export class AppService
    */
   private returnPeriodPlotData(
     plotData: Partial<PlotData>[],
-    returnPeriod: number
+    returnPeriod: number,
   ): Partial<PlotData> {
     const xMin = Math.min(
-      ...plotData.map(xy => Math.min(...(xy.x as number[])))
+      ...plotData.map(xy => Math.min(...(xy.x as number[]))),
     );
     const xMax = Math.max(
-      ...plotData.map(xy => Math.max(...(xy.x as number[])))
+      ...plotData.map(xy => Math.max(...(xy.x as number[]))),
     );
 
     return {
@@ -812,7 +812,7 @@ export class AppService
    */
   private staticService(
     services: HazardWebServices<StaticCurvesServices>,
-    model: NshmId
+    model: NshmId,
   ): HazardWebServiceConfig {
     return services.models.find(service => model === service.model);
   }
@@ -820,13 +820,13 @@ export class AppService
   private updateUrl(): void {
     this.location.replaceState(
       apps().hazard.static.routerLink,
-      new HttpParams().appendAll(this.formGroup.getRawValue()).toString()
+      new HttpParams().appendAll(this.formGroup.getRawValue()).toString(),
     );
   }
 
   private updateUsageUrl() {
     const nshmService = this.state().nshmServices.find(
-      nshm => nshm.model === this.formGroup.getRawValue().model
+      nshm => nshm.model === this.formGroup.getRawValue().model,
     );
 
     this.updateState({
diff --git a/projects/nshmp-apps/src/app/internal/aws/aws.routes.ts b/projects/nshmp-apps/src/app/internal/aws/aws.routes.ts
index e6de16c84..0dfdf714d 100644
--- a/projects/nshmp-apps/src/app/internal/aws/aws.routes.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/aws.routes.ts
@@ -28,7 +28,7 @@ const routes: Routes = [
     },
     loadComponent: () =>
       import('./terminate-haz-jobs/app.component').then(
-        com => com.AppComponent
+        com => com.AppComponent,
       ),
     path: 'terminate-haz-jobs',
   },
diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.ts b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.ts
index 8ab4a73e0..ed7f2d562 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.ts
@@ -67,7 +67,7 @@ export class ContentComponent implements OnDestroy, AfterViewInit {
   constructor(
     public templateServie: NshmpTemplateService,
     private service: AppService,
-    private snackBar: MatSnackBar
+    private snackBar: MatSnackBar,
   ) {
     effect(
       () => {
@@ -78,7 +78,7 @@ export class ContentComponent implements OnDestroy, AfterViewInit {
       },
       {
         allowSignalWrites: true,
-      }
+      },
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/control-panel/control-panel.component.ts
index a001758e8..af369d2ad 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/control-panel/control-panel.component.ts
@@ -35,7 +35,7 @@ export class ControlPanelComponent {
 
   constructor(
     public service: AppService,
-    public nshmpService: NshmpService
+    public nshmpService: NshmpService,
   ) {}
 
   /**
diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/snack-bar/snack-bar.component.ts b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/snack-bar/snack-bar.component.ts
index 7bcbe7a42..1fb833f5f 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/snack-bar/snack-bar.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/snack-bar/snack-bar.component.ts
@@ -31,7 +31,7 @@ import {MatTooltip} from '@angular/material/tooltip';
 export class SnackBarComponent {
   constructor(
     @Inject(MAT_SNACK_BAR_DATA) public downloadUrl: string,
-    private snackBar: MatSnackBar
+    private snackBar: MatSnackBar,
   ) {}
 
   /**
diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/pipes/log.pipe.ts b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/pipes/log.pipe.ts
index 5d840b9ca..54c36454b 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/pipes/log.pipe.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/pipes/log.pipe.ts
@@ -22,23 +22,23 @@ export class LogPipe implements PipeTransform {
     if (value.includes(this.INFO)) {
       value = value.replace(
         new RegExp(this.INFO, 'gi'),
-        `<span class="text-green">${this.INFO}</span>`
+        `<span class="text-green">${this.INFO}</span>`,
       );
     } else if (value.includes(this.WARNING)) {
       value = value.replace(
         new RegExp(this.WARNING, 'gi'),
-        `<span class="text-orange">${this.WARNING}</span>`
+        `<span class="text-orange">${this.WARNING}</span>`,
       );
     } else if (value.includes(this.ERROR)) {
       value = value.replace(
         new RegExp(this.ERROR, 'gi'),
-        `<span class="text-red">${this.ERROR}</span>`
+        `<span class="text-red">${this.ERROR}</span>`,
       );
     } else if (value.includes(this.RESULTS)) {
       const results = value.split(this.RESULTS).pop().trim();
       value = value.replace(
         new RegExp(`${this.RESULTS}${results}`, 'gi'),
-        `<span class="text-bold">${this.RESULTS}<a href="${results}">${results}</a></span>`
+        `<span class="text-bold">${this.RESULTS}<a href="${results}">${results}</a></span>`,
       );
     }
 
diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/services/app.service.ts b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/services/app.service.ts
index 6353510b4..c4af8f414 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/services/app.service.ts
@@ -39,7 +39,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
 
   /** Reactive form group */
   readonly formGroup = this.formBuilder.group<ControlForm>(
-    this.defaultFormValues()
+    this.defaultFormValues(),
   );
   /** Application signal state */
   readonly state = signal<AppState>(this.initialState());
@@ -50,7 +50,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
     private nshmpService: NshmpService,
     private awsService: AwsService,
     private route: ActivatedRoute,
-    private location: LocationService
+    private location: LocationService,
   ) {
     this.addValidators();
 
@@ -108,13 +108,13 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
     this.awsService
       .callJobHistoryService<DynamoDBItem>(
         `${this.baseUrl}/${this.hazardJobsService}`,
-        this.formGroup.controls.id
+        this.formGroup.controls.id,
       )
       .subscribe(jobHistoryResponse => {
         this.updateState({jobHistoryResponse});
 
         this.awsService.openTerminateDialog(jobHistoryResponse, () =>
-          this.callTerminateJobService()
+          this.callTerminateJobService(),
         );
       });
   }
@@ -140,7 +140,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
       .callService$<Response<GetLogsRequestData, GetLogsResponseData>>(url)
       .pipe(catchError((error: Error) => this.nshmpService.throwError$(error)))
       .subscribe(serviceResponse =>
-        this.handleServiceResponse(serviceResponse, showSpinner)
+        this.handleServiceResponse(serviceResponse, showSpinner),
       );
   }
 
@@ -197,10 +197,10 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
     this.awsService
       .callTerminateJobService(
         `${this.baseUrl}/${this.terminateService}`,
-        this.formGroup.controls.id
+        this.formGroup.controls.id,
       )
       .subscribe(terminateJobResponse =>
-        this.updateState({terminateJobResponse})
+        this.updateState({terminateJobResponse}),
       );
   }
 
@@ -212,7 +212,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
    */
   private handleServiceResponse(
     serviceResponse: Response<GetLogsRequestData, GetLogsResponseData>,
-    showSpinner: boolean
+    showSpinner: boolean,
   ): void {
     const {autoRefresh} = this.formGroup.getRawValue();
     const status = serviceResponse.response.jobStatus;
@@ -245,7 +245,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
 
     this.location.replaceState(
       internalApps().aws.checkHazJobs.routerLink,
-      new HttpParams().appendAll(query).toString()
+      new HttpParams().appendAll(query).toString(),
     );
   }
 }
diff --git a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/content/content.component.ts b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/content/content.component.ts
index b1597244e..61c7d8939 100644
--- a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/content/content.component.ts
@@ -45,7 +45,7 @@ export class ContentComponent {
 
   /** List of results for current page  */
   historySliced = computed(() =>
-    this.service.jobHistory().slice(0, this.pageSize)
+    this.service.jobHistory().slice(0, this.pageSize),
   );
 
   constructor(public service: AppService) {}
@@ -69,7 +69,7 @@ export class ContentComponent {
     this.historySliced = computed(() =>
       this.service
         .jobHistory()
-        .slice(pageIndex * pageSize, (pageIndex + 1) * pageSize)
+        .slice(pageIndex * pageSize, (pageIndex + 1) * pageSize),
     );
   }
 }
diff --git a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/control-panel/control-panel.component.ts
index 5ebac4d24..fc4f64264 100644
--- a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/components/control-panel/control-panel.component.ts
@@ -43,12 +43,12 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
   constructor(
     public nshmpService: NshmpService,
-    private service: AppService
+    private service: AppService,
   ) {}
 
   ngOnInit(): void {
     this.filterSubscription = this.form.controls.filter.valueChanges.subscribe(
-      () => this.service.filterHistory()
+      () => this.service.filterHistory(),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/services/app.service.ts b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/services/app.service.ts
index df579cc4d..94638d5a9 100644
--- a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/services/app.service.ts
@@ -25,7 +25,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
 
   /** Control form group */
   readonly formGroup = this.formBuilder.group<ControlForm>(
-    this.defaultFormValues()
+    this.defaultFormValues(),
   );
   /** Application state signal */
   readonly state = signal<AppState>(this.initialState());
@@ -35,7 +35,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
     private nshmpService: NshmpService,
     private awsService: AwsService,
     private route: ActivatedRoute,
-    private location: LocationService
+    private location: LocationService,
   ) {
     this.addValidators();
     this.formGroup.valueChanges.subscribe(() => this.updateUrl());
@@ -55,7 +55,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
    */
   addValidators(): void {
     this.formGroup.controls.id.addValidators(control =>
-      Validators.required(control)
+      Validators.required(control),
     );
     this.formGroup.controls.id.updateValueAndValidity();
   }
@@ -111,7 +111,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
       });
     } else {
       const filteredHistory = jobHistoryResponse.response.filter(
-        jobInfo => jobInfo.job.jobStatus.toString() === filter
+        jobInfo => jobInfo.job.jobStatus.toString() === filter,
       );
 
       this.updateState({filteredHistory});
@@ -173,7 +173,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
 
     this.location.replaceState(
       internalApps().aws.hazJobHistory.routerLink,
-      new HttpParams().appendAll(query).toString()
+      new HttpParams().appendAll(query).toString(),
     );
   }
 }
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
index e088b42aa..1f257d88c 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
@@ -128,7 +128,7 @@ export class FormComponent implements OnInit, OnDestroy {
 
   constructor(
     public service: AppService,
-    private matDialog: MatDialog
+    private matDialog: MatDialog,
   ) {
     effect(() => {
       const responses = this.service.state().serviceResponses;
@@ -150,13 +150,13 @@ export class FormComponent implements OnInit, OnDestroy {
             nshmpConfig.controls.nshmpLibSha.enable();
           } else {
             this.form.controls.nshmpConfig.controls.nshmpLibGitUrl.patchValue(
-              null
+              null,
             );
             nshmpConfig.controls.nshmpLibGitUrl.disable();
             nshmpConfig.controls.nshmpLibSha.patchValue(null);
             nshmpConfig.controls.nshmpLibSha.disable();
           }
-        }
+        },
       );
   }
 
@@ -195,7 +195,7 @@ export class FormComponent implements OnInit, OnDestroy {
   importSiteFile() {
     this.service.uploadFiles(
       this.uploadSiteEl.nativeElement.files,
-      FileType.SITE
+      FileType.SITE,
     );
     this.uploadSiteEl.nativeElement.value = '';
   }
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/history/history.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/history/history.component.ts
index df2feae6d..4184586b0 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/history/history.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/history/history.component.ts
@@ -58,14 +58,14 @@ export class HistoryComponent {
 
   constructor(
     public service: AppService,
-    private nshmpService: NshmpService
+    private nshmpService: NshmpService,
   ) {}
 
   downloadConfiguration(
     serviceResponse: Response<
       RunNshmpHazHttpPostConfig,
       RunNshmpHazResponseData
-    >
+    >,
   ): void {
     const blob = new Blob([JSON.stringify(serviceResponse.request, null, 2)], {
       type: 'text/csv;charset=utf-8;',
@@ -73,7 +73,7 @@ export class HistoryComponent {
 
     this.nshmpService.saveAs(
       blob,
-      `aws-config-${serviceResponse.response.jobId}.json`
+      `aws-config-${serviceResponse.response.jobId}.json`,
     );
   }
 }
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/job-submitted/job-submitted.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/job-submitted/job-submitted.component.ts
index 1d72f738a..23fe3aece 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/job-submitted/job-submitted.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/job-submitted/job-submitted.component.ts
@@ -42,7 +42,7 @@ export class JobSubmittedComponent {
   constructor(
     private service: AppService,
     private router: Router,
-    private location: Location
+    private location: Location,
   ) {}
 
   checkJob(response: RunNshmpHazResponseData) {
@@ -50,15 +50,15 @@ export class JobSubmittedComponent {
       this.router.createUrlTree(
         [
           this.location.prepareExternalUrl(
-            internalApps().aws.checkHazJobs.routerLink
+            internalApps().aws.checkHazJobs.routerLink,
           ),
         ],
         {
           queryParams: {
             id: response.jobId,
           },
-        }
-      )
+        },
+      ),
     );
 
     window.open(url, '_blank');
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/services/app.service.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/services/app.service.ts
index 08eac8789..764fdc736 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/services/app.service.ts
@@ -70,7 +70,7 @@ export class AppService implements AppServiceModel<AppState, RunNshmpHazForm> {
     mapConfig: this.formBuilder.group(this.defaultFormValues().mapConfig),
     nshmpConfig: this.formBuilder.group(this.defaultFormValues().nshmpConfig),
     overrideNshmpLib: this.formBuilder.control(
-      this.defaultFormValues().overrideNshmpLib
+      this.defaultFormValues().overrideNshmpLib,
     ),
   });
 
@@ -81,7 +81,7 @@ export class AppService implements AppServiceModel<AppState, RunNshmpHazForm> {
     private formBuilder: FormBuilder,
     private nshmpService: NshmpService,
     private spinnerService: SpinnerService,
-    private http: HttpClient
+    private http: HttpClient,
   ) {
     this.addValidators();
     this.formGroup.controls.nshmpConfig.controls.nshmpLibGitUrl.disable();
@@ -160,12 +160,12 @@ export class AppService implements AppServiceModel<AppState, RunNshmpHazForm> {
             Response<RunNshmpHazHttpPostConfig, RunNshmpHazResponseData>
           >(url, 'POST', JSON.stringify(postConfig))
           .pipe(
-            catchError((error: Error) => this.nshmpService.throwError$(error))
-          )
+            catchError((error: Error) => this.nshmpService.throwError$(error)),
+          ),
       );
 
     forkJoin(calls).subscribe(serviceResponses =>
-      this.handleServiceResponse(serviceResponses)
+      this.handleServiceResponse(serviceResponses),
     );
   }
 
@@ -176,7 +176,7 @@ export class AppService implements AppServiceModel<AppState, RunNshmpHazForm> {
   clearHistory(id?: string): void {
     if (id) {
       const history = this.history().filter(
-        serviceResponse => serviceResponse.response.jobId !== id
+        serviceResponse => serviceResponse.response.jobId !== id,
       );
       this.updateState({
         history,
@@ -306,7 +306,7 @@ export class AppService implements AppServiceModel<AppState, RunNshmpHazForm> {
             ?.sort(
               (a, b) =>
                 new Date(a.authored_date).getMilliseconds() -
-                new Date(b.authored_date).getMilliseconds()
+                new Date(b.authored_date).getMilliseconds(),
             )
             .shift()?.name ??
           this.defaultFormValues().nshmpConfig.modelSha ??
@@ -350,7 +350,7 @@ export class AppService implements AppServiceModel<AppState, RunNshmpHazForm> {
    */
   initialState(): AppState {
     const history = JSON.parse(
-      localStorage.getItem(this.localStorageKey) ?? '[]'
+      localStorage.getItem(this.localStorageKey) ?? '[]',
     ) as Response<RunNshmpHazHttpPostConfig, RunNshmpHazResponseData>[];
 
     return {
@@ -405,10 +405,10 @@ export class AppService implements AppServiceModel<AppState, RunNshmpHazForm> {
   }
 
   private addCloudValidators(
-    cloudConfig: FormGroupControls<CloudConfig>
+    cloudConfig: FormGroupControls<CloudConfig>,
   ): void {
     cloudConfig.controls.instanceType.addValidators(control =>
-      Validators.required(control)
+      Validators.required(control),
     );
   }
 
@@ -467,7 +467,7 @@ export class AppService implements AppServiceModel<AppState, RunNshmpHazForm> {
     serviceResponses: Response<
       RunNshmpHazHttpPostConfig,
       RunNshmpHazResponseData
-    >[]
+    >[],
   ): void {
     this.spinnerService.remove();
     this.updateState({
@@ -562,11 +562,11 @@ export class AppService implements AppServiceModel<AppState, RunNshmpHazForm> {
       } else {
         this.formGroup.controls.nshmpConfig.controls.nshmpLibGitUrl.disable();
         this.formGroup.controls.nshmpConfig.controls.nshmpLibGitUrl.patchValue(
-          null
+          null,
         );
         this.formGroup.controls.nshmpConfig.controls.nshmpLibSha.disable();
         this.formGroup.controls.nshmpConfig.controls.nshmpLibSha.patchValue(
-          null
+          null,
         );
         this.formGroup.controls.overrideNshmpLib.patchValue(false);
       }
@@ -614,7 +614,7 @@ export class AppService implements AppServiceModel<AppState, RunNshmpHazForm> {
   private setLocalStorage(): void {
     localStorage.setItem(
       this.localStorageKey,
-      JSON.stringify(this.state().history)
+      JSON.stringify(this.state().history),
     );
   }
 
@@ -637,18 +637,18 @@ export class AppService implements AppServiceModel<AppState, RunNshmpHazForm> {
             serviceResponse: Response<
               UploadFileRequestData,
               UploadFileResponseData
-            >
+            >,
           ) => {
             this.spinnerService.remove();
             this.spinnerService.show('Uploading file to S3');
             downloadUrl = serviceResponse.response.downloadUrl;
             return this.http.put(
               serviceResponse.response.preSignedUrl,
-              fileInfo.file
+              fileInfo.file,
             );
-          }
+          },
         ),
-        catchError((error: Error) => this.nshmpService.throwError$(error))
+        catchError((error: Error) => this.nshmpService.throwError$(error)),
       )
       .subscribe(() => {
         this.spinnerService.remove();
@@ -657,13 +657,13 @@ export class AppService implements AppServiceModel<AppState, RunNshmpHazForm> {
         switch (type) {
           case FileType.SITE: {
             this.formGroup.controls.nshmpConfig.controls.siteFileUrl.patchValue(
-              downloadUrl
+              downloadUrl,
             );
             break;
           }
           default: {
             return this.nshmpService.throwError$(
-              new Error(`Upload file type [${fileInfo.type}] not allowed`)
+              new Error(`Upload file type [${fileInfo.type}] not allowed`),
             );
           }
         }
diff --git a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/services/app.service.ts b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/services/app.service.ts
index 0ad70cbcd..5a0786fb3 100644
--- a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/services/app.service.ts
@@ -35,7 +35,7 @@ export class AppService implements AppServiceModel<AppState, IdForm> {
     private nshmpService: NshmpService,
     private awsService: AwsService,
     private route: ActivatedRoute,
-    private location: LocationService
+    private location: LocationService,
   ) {
     this.addValidators();
     this.formGroup.valueChanges.subscribe(() => this.updateUrl());
@@ -75,13 +75,13 @@ export class AppService implements AppServiceModel<AppState, IdForm> {
     this.awsService
       .callJobHistoryService<DynamoDBItem>(
         `${this.baseUrl}/${this.jobsService}`,
-        this.formGroup.controls.id
+        this.formGroup.controls.id,
       )
       .subscribe(jobHistoryResponse => {
         this.updateState({jobHistoryResponse});
 
         this.awsService.openTerminateDialog(jobHistoryResponse, () =>
-          this.callService()
+          this.callService(),
         );
       });
   }
@@ -93,10 +93,10 @@ export class AppService implements AppServiceModel<AppState, IdForm> {
     this.awsService
       .callTerminateJobService(
         `${this.baseUrl}/${this.terminateService}`,
-        this.formGroup.controls.id
+        this.formGroup.controls.id,
       )
       .subscribe(terminateJobResponse =>
-        this.updateState({terminateJobResponse})
+        this.updateState({terminateJobResponse}),
       );
   }
 
@@ -158,7 +158,7 @@ export class AppService implements AppServiceModel<AppState, IdForm> {
 
     this.location.replaceState(
       internalApps().aws.terminateHazJobs.routerLink,
-      new HttpParams().appendAll(query).toString()
+      new HttpParams().appendAll(query).toString(),
     );
   }
 }
diff --git a/projects/nshmp-apps/src/app/internal/shared/services/auth.service.ts b/projects/nshmp-apps/src/app/internal/shared/services/auth.service.ts
index 504d9fe00..7a39e67e4 100644
--- a/projects/nshmp-apps/src/app/internal/shared/services/auth.service.ts
+++ b/projects/nshmp-apps/src/app/internal/shared/services/auth.service.ts
@@ -21,7 +21,7 @@ export class AuthService {
   constructor(
     private http: HttpClient,
     private spinnerService: SpinnerService,
-    private nshmpService: NshmpService
+    private nshmpService: NshmpService,
   ) {}
 
   isAuthorized() {
@@ -33,7 +33,9 @@ export class AuthService {
 
         if (!response.isAuthorized) {
           this.nshmpService.throwError$(
-            new Error('Must be on USGS network to access internal applications')
+            new Error(
+              'Must be on USGS network to access internal applications',
+            ),
           );
         }
 
@@ -42,7 +44,7 @@ export class AuthService {
       catchError((error: Error) => {
         ref.close();
         return this.nshmpService.throwError$(error);
-      })
+      }),
     );
   }
 }
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.ts
index 3f990609a..89484208d 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.ts
@@ -67,16 +67,18 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
     const controls = this.formGroup.controls;
 
     this.subs.push(
-      controls.depthInc.valueChanges.subscribe(() => this.service.resetState())
+      controls.depthInc.valueChanges.subscribe(() => this.service.resetState()),
     );
     this.subs.push(
-      controls.depthMax.valueChanges.subscribe(() => this.service.resetState())
+      controls.depthMax.valueChanges.subscribe(() => this.service.resetState()),
     );
     this.subs.push(
-      controls.depthMin.valueChanges.subscribe(() => this.service.resetState())
+      controls.depthMin.valueChanges.subscribe(() => this.service.resetState()),
     );
     this.subs.push(
-      controls.locations.valueChanges.subscribe(() => this.service.resetState())
+      controls.locations.valueChanges.subscribe(() =>
+        this.service.resetState(),
+      ),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/data/data.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/data/data.component.ts
index f6c6aa94e..67d061a56 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/data/data.component.ts
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/data/data.component.ts
@@ -59,7 +59,7 @@ export class DataComponent {
   private toTableData(
     plot: NshmpPlot,
     index: number,
-    hideX = true
+    hideX = true,
   ): TableData[] {
     const data = plot.plotData.data[index];
 
@@ -84,7 +84,7 @@ export class DataComponent {
         yLabelTransform: () =>
           (plot.plotData.layout.xaxis.title as DataTitle).text,
         yValueFormat: (y: number) => y.toFixed(4),
-      }
+      },
     );
   }
 }
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/parameter-summary/parameter-summary.component.html b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/parameter-summary/parameter-summary.component.html
index c2f60bdc7..d683ae1c6 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/parameter-summary/parameter-summary.component.html
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/parameter-summary/parameter-summary.component.html
@@ -29,7 +29,7 @@
 
       @for (locationForm of locations; track locationForm; let index = $index) {
         <mat-list-item>
-          <mat-icon matListItemIcon> </mat-icon>
+          <mat-icon matListItemIcon />
           @let latitude = locationForm.value.latitude;
           @let longitude = locationForm.value.longitude;
 
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/services/app.service.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/services/app.service.ts
index 5cc0b5125..afb9333c6 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/services/app.service.ts
@@ -69,7 +69,7 @@ export class AppService
     private spinnerService: SpinnerService,
     private nshmpService: NshmpService,
     private route: ActivatedRoute,
-    private location: LocationService
+    private location: LocationService,
   ) {
     super();
 
@@ -146,7 +146,7 @@ export class AppService
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(serviceResponse => {
         this.updateState({
@@ -221,7 +221,7 @@ export class AppService
     this.formGroup.controls.locations.clear();
 
     const spinnerRef = this.spinnerService.show(
-      SpinnerService.MESSAGE_METADATA
+      SpinnerService.MESSAGE_METADATA,
     );
 
     this.nshmpService
@@ -230,7 +230,7 @@ export class AppService
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(usageResponse => {
         spinnerRef.close();
@@ -559,7 +559,7 @@ export class AppService
           depthMin: values.depthMin,
           location,
         })
-        .toString()
+        .toString(),
     );
   }
 }
diff --git a/projects/nshmp-apps/src/app/ncm/ncm.routes.ts b/projects/nshmp-apps/src/app/ncm/ncm.routes.ts
index c6255150f..37c484023 100644
--- a/projects/nshmp-apps/src/app/ncm/ncm.routes.ts
+++ b/projects/nshmp-apps/src/app/ncm/ncm.routes.ts
@@ -12,7 +12,7 @@ const routes: Routes = [
     },
     loadComponent: () =>
       import('./geophysical-profiles/app.component').then(
-        com => com.AppComponent
+        com => com.AppComponent,
       ),
     path: 'geophysical-profiles',
   },
diff --git a/projects/nshmp-apps/src/app/services/components/content/content.component.ts b/projects/nshmp-apps/src/app/services/components/content/content.component.ts
index aab18aea0..e270d108d 100644
--- a/projects/nshmp-apps/src/app/services/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/services/components/content/content.component.ts
@@ -74,7 +74,7 @@ export class ContentComponent implements AfterViewInit {
   /** Dynamic hazard services */
   dynamicHazardServices$: Observable<ServiceConfig[]> = this.hazardService
     .dynamicNshmService$(
-      `${this.nshmpHazWs.url}${this.nshmpHazWs.services.nshms}`
+      `${this.nshmpHazWs.url}${this.nshmpHazWs.services.nshms}`,
     )
     .pipe(
       map(usage => {
@@ -84,13 +84,13 @@ export class ContentComponent implements AfterViewInit {
           swaggerEndPoint: this.nshmpHazWs.services.curveServices.swagger,
           url: nshm.url,
         }));
-      })
+      }),
     );
 
   /** Static hazard services */
   staticHazardServices$: Observable<ServiceConfig[]> = this.hazardService
     .staticNshmService$(
-      `${this.nshmpWsStatic.url}${this.nshmpWsStatic.services.nshms}`
+      `${this.nshmpWsStatic.url}${this.nshmpWsStatic.services.nshms}`,
     )
     .pipe(
       map(usage => {
@@ -102,7 +102,7 @@ export class ContentComponent implements AfterViewInit {
           swaggerEndPoint: nshmpWsStatic.services.curveServices.swagger,
           url: nshm.url,
         }));
-      })
+      }),
     );
 
   /** Whether sidenav is collapsed */
@@ -241,7 +241,7 @@ export class ContentComponent implements AfterViewInit {
     private route: ActivatedRoute,
     private router: Router,
     private hazardService: HazardService,
-    private nshmpService: NshmpService
+    private nshmpService: NshmpService,
   ) {}
 
   ngAfterViewInit() {
diff --git a/projects/nshmp-apps/src/app/source/mfd/app.component.ts b/projects/nshmp-apps/src/app/source/mfd/app.component.ts
index 9e3e3a63e..2f5dba5ef 100644
--- a/projects/nshmp-apps/src/app/source/mfd/app.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/app.component.ts
@@ -52,7 +52,7 @@ export class AppComponent implements OnInit {
 
   constructor(
     public nshmpTemplateService: NshmpTemplateService,
-    public service: AppService
+    public service: AppService,
   ) {}
 
   ngOnInit(): void {
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/control-panel/control-panel.component.ts
index 81dc7dc61..d1f008121 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/control-panel/control-panel.component.ts
@@ -76,47 +76,47 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
   /** Source trees state */
   sourceTrees$ = this.formGroup.controls.source.valueChanges.pipe(
     map(source =>
-      this.toSourceTrees(source, this.service.usage().response.trees)
-    )
+      this.toSourceTrees(source, this.service.usage().response.trees),
+    ),
   );
 
   private subs: Subscription[] = [];
 
   constructor(
     public service: AppService,
-    private nshmpService: NshmpService
+    private nshmpService: NshmpService,
   ) {}
 
   ngOnInit(): void {
     const controls = this.formGroup.controls;
 
     this.subs.push(
-      controls.model.valueChanges.subscribe(() => this.onModelChange())
+      controls.model.valueChanges.subscribe(() => this.onModelChange()),
     );
 
     this.subs.push(
       controls.sourceAsString.valueChanges.subscribe(sourceAsString => {
         controls.source.setValue(JSON.parse(sourceAsString) as MfdSource);
         this.onSourceChange();
-      })
+      }),
     );
 
     this.subs.push(
       controls.sourceTree.valueChanges.subscribe(() =>
-        this.service.resetState()
-      )
+        this.service.resetState(),
+      ),
     );
 
     this.subs.push(
       controls.cumulative.valueChanges.subscribe(() =>
-        this.service.createPlots()
-      )
+        this.service.createPlots(),
+      ),
     );
 
     this.subs.push(
       controls.weightedMfds.valueChanges.subscribe(() =>
-        this.service.createPlots()
-      )
+        this.service.createPlots(),
+      ),
     );
   }
 
@@ -137,7 +137,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
     const defaultSource = this.service.defaultSource(trees);
     const defaultTreeInfo = this.service.defaultSourceTree(
       trees,
-      defaultSource
+      defaultSource,
     );
 
     this.formGroup.patchValue({
@@ -153,7 +153,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
     const trees = this.service.usage().response.trees;
     const defaultTreeInfo = this.service.defaultSourceTree(
       trees,
-      this.formGroup.getRawValue().source
+      this.formGroup.getRawValue().source,
     );
 
     this.formGroup.patchValue({
@@ -164,7 +164,7 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
 
   toSourceValue(
     sourceType: SourceType,
-    tectonicSettings: TectonicSettings
+    tectonicSettings: TectonicSettings,
   ): string {
     return JSON.stringify({
       sourceType,
@@ -189,10 +189,10 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
     }
 
     const settingsTree = trees.find(
-      tree => tree.setting === source.tectonicSettings
+      tree => tree.setting === source.tectonicSettings,
     );
     const tree = settingsTree?.data?.find(
-      data => data.type === source.sourceType
+      data => data.type === source.sourceType,
     );
     const data = tree?.data.sort((a, b) => a.name.localeCompare(b.name));
 
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts
index 9b32147cb..3f23737e6 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts
@@ -28,7 +28,7 @@ export class DataComponent {
     if (serviceResponse) {
       return this.toTableData(
         serviceResponse,
-        this.service.formGroup.getRawValue()
+        this.service.formGroup.getRawValue(),
       );
     } else {
       return [];
@@ -54,7 +54,7 @@ export class DataComponent {
       .findTreeInfo(
         this.service.usage().response.trees,
         values.source,
-        values.sourceTree
+        values.sourceTree,
       )
       ?.name?.replace(/ /g, '_');
 
@@ -71,7 +71,7 @@ export class DataComponent {
    */
   private toTableData(
     serviceResponse: SourceLogicTreesResponse,
-    form: ControlForm
+    form: ControlForm,
   ): TableData[] {
     const branches = serviceResponse.response.branches;
     const tree = serviceResponse.response;
@@ -132,7 +132,7 @@ export class DataComponent {
               td: [value],
               th: key,
             });
-          }
+          },
         );
       });
     });
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts
index 297cd79de..56a485305 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts
@@ -46,10 +46,10 @@ export class ParameterSummaryComponent {
     const source = values.source;
 
     const settingsTree = usage.response.trees.find(
-      tree => tree.setting === source.tectonicSettings
+      tree => tree.setting === source.tectonicSettings,
     );
     const tree = settingsTree?.data?.find(
-      data => data.type === source.sourceType
+      data => data.type === source.sourceType,
     );
     const data = tree?.data.find(info => info.id === values.sourceTree);
 
diff --git a/projects/nshmp-apps/src/app/source/mfd/services/app.service.ts b/projects/nshmp-apps/src/app/source/mfd/services/app.service.ts
index 5a25b8a13..af7841cd4 100644
--- a/projects/nshmp-apps/src/app/source/mfd/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/services/app.service.ts
@@ -99,7 +99,7 @@ export class AppService
   private usageEndpoint = this.nshmpHazWs.services.curveServices.trees;
 
   readonly formGroup = this.formBuilder.group<ControlForm>(
-    this.defaultFormValues()
+    this.defaultFormValues(),
   );
 
   /** Application state */
@@ -111,7 +111,7 @@ export class AppService
     private nshmpService: NshmpService,
     private hazardService: HazardService,
     private route: ActivatedRoute,
-    private location: LocationService
+    private location: LocationService,
   ) {
     super();
     this.formGroup.controls.mfdType.disable();
@@ -180,7 +180,7 @@ export class AppService
    */
   get usage(): Signal<SourceLogicTreesUsage> {
     return computed(() =>
-      this.state().usageResponses?.get(this.formGroup.getRawValue().model)
+      this.state().usageResponses?.get(this.formGroup.getRawValue().model),
     );
   }
 
@@ -200,7 +200,7 @@ export class AppService
     const values = this.formGroup.getRawValue();
 
     const service = this.state().nshmServices.find(
-      nshmService => nshmService.model === values.model
+      nshmService => nshmService.model === values.model,
     );
     const serviceUrl = `${service.url}${this.serviceEndpoint}`;
     const url = this.createServiceEndpoint(serviceUrl, values);
@@ -211,7 +211,7 @@ export class AppService
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(serviceResponse => {
         spinnerRef.close();
@@ -387,11 +387,11 @@ export class AppService
    */
   defaultSourceTree(trees: SettingGroup[], source: MfdSource): TreeInfo {
     const settingsTree = [...trees].find(
-      tree => tree.setting === source.tectonicSettings
+      tree => tree.setting === source.tectonicSettings,
     );
 
     const tree = settingsTree.data.find(
-      data => data.type === source.sourceType
+      data => data.type === source.sourceType,
     );
 
     return [...tree.data.sort((a, b) => a.name.localeCompare(b.name))].shift();
@@ -432,19 +432,19 @@ export class AppService
    */
   init(): void {
     const spinnerRef = this.spinnerService.show(
-      SpinnerService.MESSAGE_METADATA
+      SpinnerService.MESSAGE_METADATA,
     );
 
     this.hazardService
       .dynamicNshms$<SourceLogicTreesMetadata>(
         `${this.nshmpHazWs.url}${this.nshmpHazWs.services.nshms}`,
-        this.usageEndpoint
+        this.usageEndpoint,
       )
       .pipe(
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(({models, nshmServices, usageResponses}) => {
         spinnerRef.close();
@@ -540,7 +540,7 @@ export class AppService
 
   private createServiceEndpoint(
     serviceUrl: string,
-    values: ControlForm
+    values: ControlForm,
   ): string {
     const {sourceTree} = values;
     return `${serviceUrl}/${sourceTree}`;
@@ -554,7 +554,7 @@ export class AppService
    */
   private findSettingsGroup(
     trees: SettingGroup[],
-    source: MfdSource
+    source: MfdSource,
   ): SettingGroup {
     return trees.find(tree => tree.setting === source.tectonicSettings);
   }
@@ -568,7 +568,7 @@ export class AppService
    */
   private findSourceGroup(
     trees: SettingGroup[],
-    source: MfdSource
+    source: MfdSource,
   ): SourceGroup {
     const settingsGroup = this.findSettingsGroup(trees, source);
     return settingsGroup.data.find(data => data.type === source.sourceType);
@@ -585,7 +585,7 @@ export class AppService
     const defaultSource = this.defaultSource(usage.response.trees);
     const defaultTreeInfo = this.defaultSourceTree(
       usage.response.trees,
-      defaultSource
+      defaultSource,
     );
 
     const source: MfdSource =
@@ -635,13 +635,13 @@ export class AppService
     logicTreeData: LogicTreeData,
     branch: SourceBranch,
     parent: string,
-    type: MfdType
+    type: MfdType,
   ): void {
     branch.mfds
       .filter(mfdBranch => mfdBranch.mfd.props.type === type)
       .forEach(mfdBranch => {
         logicTreeData.labels.push(
-          `Branch: ${branch.branch}<br>` + `ID: ${mfdBranch.id}<br>`
+          `Branch: ${branch.branch}<br>` + `ID: ${mfdBranch.id}<br>`,
         );
 
         logicTreeData.parents.push(parent);
@@ -651,7 +651,7 @@ export class AppService
           .join('');
 
         logicTreeData.text.push(
-          `Weight: ${mfdBranch.weight}<br><br>` + 'Properties:' + props
+          `Weight: ${mfdBranch.weight}<br><br>` + 'Properties:' + props,
         );
       });
   }
@@ -666,15 +666,15 @@ export class AppService
   private logicTreeByType(
     logicTreeData: LogicTreeData,
     branch: SourceBranch,
-    parent: string
+    parent: string,
   ): void {
     const types = new Set(
-      branch.mfds.map(mfdBranch => mfdBranch.mfd.props.type)
+      branch.mfds.map(mfdBranch => mfdBranch.mfd.props.type),
     );
 
     types.forEach(type => {
       const typeLabel = [`Branch: ${branch.branch} <br>`, `Type: ${type}`].join(
-        ''
+        '',
       );
 
       logicTreeData.labels.push(typeLabel);
@@ -691,7 +691,7 @@ export class AppService
    * @param serviceResponse MFD service response
    */
   private logicTreeData(
-    serviceResponse: SourceLogicTreesResponse
+    serviceResponse: SourceLogicTreesResponse,
   ): LogicTreeData {
     const tree = serviceResponse.response;
     const root = tree.name;
@@ -726,7 +726,7 @@ export class AppService
    */
   private responseToPlots(
     state: AppState,
-    formGroup: FormGroupControls<ControlForm>
+    formGroup: FormGroupControls<ControlForm>,
   ): Map<string, NshmpPlot> {
     if (state.serviceResponse === null || state.serviceResponse === undefined) {
       return state.plots;
@@ -737,7 +737,7 @@ export class AppService
     const logicTreePlot = state.plots.get(Plots.LOGIC_TREE);
     const logicTreePlotData = this.setLogicTreePlotData(
       state.serviceResponse,
-      logicTreePlot
+      logicTreePlot,
     );
     plots.set(Plots.LOGIC_TREE, {
       ...logicTreePlot,
@@ -748,7 +748,7 @@ export class AppService
     const mfdPlotData = this.setMfdPlotData(
       state.serviceResponse,
       mfdPlot,
-      formGroup.getRawValue()
+      formGroup.getRawValue(),
     );
     plots.set(Plots.MFD, {
       ...mfdPlot,
@@ -766,7 +766,7 @@ export class AppService
    */
   private setLogicTreePlotData(
     serviceResponse: SourceLogicTreesResponse,
-    plot: NshmpPlot
+    plot: NshmpPlot,
   ): PlotlyPlot {
     const {labels, parents, text} = this.logicTreeData(serviceResponse);
 
@@ -797,7 +797,7 @@ export class AppService
   private setMfdPlotData(
     serviceResponse: SourceLogicTreesResponse,
     plot: NshmpPlot,
-    form: ControlForm
+    form: ControlForm,
   ): PlotlyPlot {
     const tree = serviceResponse.response;
 
@@ -908,13 +908,13 @@ export class AppService
 
     this.location.replaceState(
       apps().source.mfd.routerLink,
-      new HttpParams().appendAll({...queryParams}).toString()
+      new HttpParams().appendAll({...queryParams}).toString(),
     );
   }
 
   private updateUsageUrl() {
     const nshmService = this.state().nshmServices.find(
-      nshm => nshm.model === this.formGroup.getRawValue().model
+      nshm => nshm.model === this.formGroup.getRawValue().model,
     );
 
     this.updateState({
diff --git a/projects/nshmp-apps/src/app/source/model-maps/app.component.ts b/projects/nshmp-apps/src/app/source/model-maps/app.component.ts
index 37573aeec..5107a4f34 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/app.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/app.component.ts
@@ -59,14 +59,14 @@ export class AppComponent implements OnInit, OnDestroy {
 
   constructor(
     public service: AppService,
-    private controlsService: AppControlsService
+    private controlsService: AppControlsService,
   ) {}
 
   ngOnInit() {
     this.service.init();
 
     this.controlsSubscription = this.controlsService.controlsChanged.subscribe(
-      () => this.service.mapRedraw()
+      () => this.service.mapRedraw(),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/source/model-maps/components/control-panel/control-panel.component.ts
index 0470edd1d..c4fad8611 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/control-panel/control-panel.component.ts
@@ -57,67 +57,67 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
     const controls = this.formGroup.controls;
 
     this.subs.push(
-      controls.model.valueChanges.subscribe(() => this.onModelChange())
+      controls.model.valueChanges.subscribe(() => this.onModelChange()),
     );
     this.subs.push(
       controls.hasNshmBoundaryLayer.valueChanges.subscribe(checked =>
-        this.onNshmBoundaryToggle(checked)
-      )
+        this.onNshmBoundaryToggle(checked),
+      ),
     );
     this.subs.push(
       controls.hazardTileImt.valueChanges.subscribe(() =>
-        this.createHazardLayer()
-      )
+        this.createHazardLayer(),
+      ),
     );
     this.subs.push(
       controls.hazardTileReturnPeriod.valueChanges.subscribe(() =>
-        this.createHazardLayer()
-      )
+        this.createHazardLayer(),
+      ),
     );
     this.subs.push(
       controls.hazardTileYear.valueChanges.subscribe(() =>
-        this.onHazardTileYear()
-      )
+        this.onHazardTileYear(),
+      ),
     );
     this.subs.push(
       controls.overlayOpacity.valueChanges.subscribe(() =>
-        this.createHazardLayer()
-      )
+        this.createHazardLayer(),
+      ),
     );
     this.subs.push(
       controls.latestEarthquakeTime.valueChanges.subscribe(() =>
-        this.service.callEarthquakesService()
-      )
+        this.service.callEarthquakesService(),
+      ),
     );
     this.subs.push(
       controls.hasTestSitesLayer.valueChanges.subscribe(checked =>
-        this.onTestSitesToggle(checked)
-      )
+        this.onTestSitesToggle(checked),
+      ),
     );
     this.subs.push(
       controls.hasDecollementLayer.valueChanges.subscribe(checked =>
-        this.onFeaturesToggle(checked, FeatureType.DECOLLEMENT)
-      )
+        this.onFeaturesToggle(checked, FeatureType.DECOLLEMENT),
+      ),
     );
     this.subs.push(
       controls.hasFaultSectionLayer.valueChanges.subscribe(checked =>
-        this.onFeaturesToggle(checked, FeatureType.FAULT)
-      )
+        this.onFeaturesToggle(checked, FeatureType.FAULT),
+      ),
     );
     this.subs.push(
       controls.hasInterfaceSectionsLayer.valueChanges.subscribe(checked =>
-        this.onFeaturesToggle(checked, FeatureType.INTERFACE)
-      )
+        this.onFeaturesToggle(checked, FeatureType.INTERFACE),
+      ),
     );
     this.subs.push(
       controls.hasZoneSourcesLayer.valueChanges.subscribe(checked =>
-        this.onFeaturesToggle(checked, FeatureType.ZONE)
-      )
+        this.onFeaturesToggle(checked, FeatureType.ZONE),
+      ),
     );
     this.subs.push(
       controls.hasEarthquakesLayer.valueChanges.subscribe(checked =>
-        this.onEartquakesToggle(checked)
-      )
+        this.onEartquakesToggle(checked),
+      ),
     );
   }
 
@@ -171,9 +171,9 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
         hazardLayer: this.service.createHazardLayer(
           this.service.findTile(
             this.service.hazardTiles(),
-            this.formGroup.getRawValue()
+            this.formGroup.getRawValue(),
           ),
-          this.formGroup.getRawValue().overlayOpacity
+          this.formGroup.getRawValue().overlayOpacity,
         ),
       },
     });
@@ -184,17 +184,17 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
       this.service
         .filterTilesByYear(
           this.service.hazardTiles(),
-          this.formGroup.getRawValue()
+          this.formGroup.getRawValue(),
         )
-        .map(tile => tile.imt)
+        .map(tile => tile.imt),
     );
     this.returnPeriods = new Set(
       this.service
         .filterTilesByImt(
           this.service.hazardTiles(),
-          this.formGroup.getRawValue()
+          this.formGroup.getRawValue(),
         )
-        .map(tile => tile.returnPeriod)
+        .map(tile => tile.returnPeriod),
     );
 
     this.createHazardLayer();
@@ -205,9 +205,9 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
       this.service
         .filterTilesByRegion(
           this.service.hazardTiles(),
-          this.formGroup.getRawValue()
+          this.formGroup.getRawValue(),
         )
-        .map(tile => nshmYear(tile.nshm))
+        .map(tile => nshmYear(tile.nshm)),
     );
     this.service.resetState();
   }
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/info-popup/info-popup.component.ts b/projects/nshmp-apps/src/app/source/model-maps/components/info-popup/info-popup.component.ts
index 5ebc9ba30..147f319f9 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/info-popup/info-popup.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/info-popup/info-popup.component.ts
@@ -71,21 +71,21 @@ export class InfoPopupComponent {
     this.getMfdParameters(
       this.service.formGroup.getRawValue().model,
       this.infoPopupData(),
-      this.service.treesUsageResponse()
-    )
+      this.service.treesUsageResponse(),
+    ),
   );
 
   /** Feature properties */
   properties = computed(() => {
     const entries: [string, unknown][] = Object.entries(
-      this.infoPopupData()?.feature.properties
+      this.infoPopupData()?.feature.properties,
     );
 
     return entries.map(([key, value]) => ({key, value}));
   });
 
   earthquakeProperties = computed(
-    () => this.earthquakeInfoPopupData().feature.properties
+    () => this.earthquakeInfoPopupData().feature.properties,
   );
 
   Keys = Object.keys;
@@ -110,7 +110,7 @@ export class InfoPopupComponent {
 
   earthquakeDepth(): string {
     return this.earthquakeInfoPopupData()?.feature.geometry.coordinates[2].toFixed(
-      1
+      1,
     );
   }
 
@@ -142,7 +142,7 @@ export class InfoPopupComponent {
   private getMfdParameters(
     model: NshmId,
     infoPopupData: InfoPopupData,
-    treesUsage: SourceLogicTreesUsage
+    treesUsage: SourceLogicTreesUsage,
   ): MfdQuery {
     if (infoPopupData.feature === null || infoPopupData.featureType === null) {
       return null;
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts b/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
index d5ac1cd40..f9d5ad556 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
@@ -54,13 +54,13 @@ export class MapComponent {
 
   constructor(
     public service: AppService,
-    private zone: NgZone
+    private zone: NgZone,
   ) {
     effect(() => {
       this.onMap(
         this.service.map(),
         this.layers(),
-        this.formGroup.getRawValue().model
+        this.formGroup.getRawValue().model,
       );
     });
   }
@@ -83,7 +83,7 @@ export class MapComponent {
             this.service.initialState().earthquakeInfoPopupData,
           infoPopupData: this.service.initialState().infoPopupData,
         });
-      })
+      }),
     );
 
     if (!L.Browser.mobile) {
@@ -135,7 +135,7 @@ export class MapComponent {
   private onTestSitesZoom(
     testSitesLayer: L.GeoJSON,
     zoom: number,
-    model: NshmId
+    model: NshmId,
   ): void {
     if (zoom >= this.siteZoomLevel[model]) {
       this.testSitesTooltipOpen(testSitesLayer);
diff --git a/projects/nshmp-apps/src/app/source/model-maps/services/app.service.ts b/projects/nshmp-apps/src/app/source/model-maps/services/app.service.ts
index 1ea217d2f..cb8f3a3d5 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/services/app.service.ts
@@ -120,7 +120,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
   private services = this.nshmpHazWs.services.curveServices;
 
   readonly formGroup = this.formBuilder.group<ControlForm>(
-    this.defaultFormValues()
+    this.defaultFormValues(),
   );
   /** Application state */
   readonly state = signal<AppState>(this.initialState());
@@ -133,7 +133,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
     private http: HttpClient,
     private zone: NgZone,
     private route: ActivatedRoute,
-    private location: LocationService
+    private location: LocationService,
   ) {
     this.addValidators();
   }
@@ -203,14 +203,14 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
   get nshmService(): Signal<NshmMetadata> {
     return computed(() =>
       this.state().nshmServices.find(
-        nshm => nshm.model === this.formGroup.getRawValue().model
-      )
+        nshm => nshm.model === this.formGroup.getRawValue().model,
+      ),
     );
   }
 
   get sourceFeaturesUsage(): Signal<FeaturesUsageResponse> {
     return computed(() =>
-      this.state().sourceFeaturesUsages.get(this.formGroup.getRawValue().model)
+      this.state().sourceFeaturesUsages.get(this.formGroup.getRawValue().model),
     );
   }
 
@@ -219,13 +219,13 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
    */
   get treesUsageResponse(): Signal<SourceLogicTreesUsage> {
     return computed(() =>
-      this.state().treesUsageResponses?.get(this.formGroup.getRawValue().model)
+      this.state().treesUsageResponses?.get(this.formGroup.getRawValue().model),
     );
   }
 
   addValidators(): void {
     this.formGroup.controls.model.addValidators(control =>
-      Validators.required(control)
+      Validators.required(control),
     );
   }
 
@@ -241,7 +241,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
         baseLayer: nshmpLeaflet.baseLayer(baseLayer),
         hazardLayer: this.createHazardLayer(
           this.findTile(this.state().hazardTiles, this.formGroup.getRawValue()),
-          this.formGroup.getRawValue().overlayOpacity
+          this.formGroup.getRawValue().overlayOpacity,
         ),
       },
     });
@@ -343,7 +343,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
       nshm =>
         this.nshmpService
           .callService$<FeaturesUsageResponse>(
-            `${nshm.url}${this.services.features}`
+            `${nshm.url}${this.services.features}`,
           )
           .pipe(
             map(sourceFeaturesUsage => {
@@ -351,9 +351,9 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
                 nshm,
                 sourceFeaturesUsage,
               };
-            })
+            }),
           ),
-      catchError((error: Error) => this.nshmpService.throwError$(error))
+      catchError((error: Error) => this.nshmpService.throwError$(error)),
     );
 
     return forkJoin(usages$).pipe(
@@ -370,7 +370,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
 
         this.resetSourceFeatureControls();
         this.callService();
-      })
+      }),
     );
   }
 
@@ -385,7 +385,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
       .pipe(catchError((error: Error) => this.nshmpService.throwError$(error)))
       .subscribe(response => {
         const nshmBorder = response.features.find(
-          feature => feature.id !== 'Extents'
+          feature => feature.id !== 'Extents',
         );
 
         this.updateState({
@@ -555,7 +555,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
    */
   findTile(tiles: HazardTile[], form: ControlForm): HazardTile {
     return this.filterTilesByImt(tiles, form)?.find(
-      tile => tile.returnPeriod === form.hazardTileReturnPeriod
+      tile => tile.returnPeriod === form.hazardTileReturnPeriod,
     );
   }
 
@@ -564,20 +564,20 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
    */
   init(): void {
     const spinnerRef = this.spinnerService.show(
-      SpinnerService.MESSAGE_METADATA
+      SpinnerService.MESSAGE_METADATA,
     );
 
     this.callTreesUsage()
       .pipe(
         mergeMap(() =>
-          forkJoin([this.callFeaturesUsages$(), this.callHazardTilesUsage()])
+          forkJoin([this.callFeaturesUsages$(), this.callHazardTilesUsage()]),
         ),
         catchError(error => {
           this.initialFormSet();
           spinnerRef.close();
           console.error(error);
           return [];
-        })
+        }),
       )
       .subscribe(() => {
         this.initialFormSet();
@@ -702,7 +702,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
   sourceFeatureControl(
     featureType: FeatureType,
     featureTypes: string[],
-    control: AbstractControl<boolean>
+    control: AbstractControl<boolean>,
   ): void {
     control.setValue(false);
 
@@ -737,7 +737,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
 
           const hazardTilesForRegion = this.filterTilesByRegion(
             hazardTiles,
-            this.formGroup.getRawValue()
+            this.formGroup.getRawValue(),
           );
 
           const defaultTile = [...hazardTilesForRegion].pop();
@@ -761,15 +761,15 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
               ...this.layers(),
               hazardLayer: this.createHazardLayer(
                 defaultTile,
-                this.formGroup.getRawValue().overlayOpacity
+                this.formGroup.getRawValue().overlayOpacity,
               ),
             },
           });
 
           this.formGroup.controls.model.setValue(
-            this.formGroup.getRawValue().model
+            this.formGroup.getRawValue().model,
           );
-        })
+        }),
       );
   }
 
@@ -777,7 +777,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
     return this.hazardService
       .dynamicNshms$<SourceLogicTreesMetadata>(
         `${this.nshmpHazWs.url}${this.nshmsEndpoint}`,
-        environment.webServices.nshmpHazWs.services.curveServices.trees
+        environment.webServices.nshmpHazWs.services.curveServices.trees,
       )
       .pipe(
         map(({models, nshmServices, usageResponses}) => {
@@ -789,7 +789,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
         }),
         catchError((error: Error) => {
           return this.nshmpService.throwError$(error);
-        })
+        }),
       );
   }
 
@@ -838,7 +838,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
   }
 
   private earthquakesToLayer(
-    earthquakes: GeoJSON.FeatureCollection<GeoJSON.Point>
+    earthquakes: GeoJSON.FeatureCollection<GeoJSON.Point>,
   ): L.GeoJSON {
     const features = earthquakes.features.filter(feature => {
       const coords = feature.geometry.coordinates;
@@ -883,7 +883,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
       },
       pointToLayer: (
         feature: GeoJSON.Feature<GeoJSON.Point, EarthquakeFeatureProperties>,
-        latlng
+        latlng,
       ) => {
         const layer = L.circle(latlng, {
           color: 'black',
@@ -931,7 +931,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
    */
   private featureTypeToLayer(
     fc: GeoJSON.FeatureCollection,
-    featureType: FeatureType
+    featureType: FeatureType,
   ): L.GeoJSON {
     let color = 'red';
     let weight = 2;
@@ -1000,11 +1000,11 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
   private initialControlSet(
     control: FormControl<boolean>,
     defaultValue: boolean,
-    queryValue?: string
+    queryValue?: string,
   ): void {
     if (control.enabled) {
       control.patchValue(
-        nshmpUtils.queryParseBoolean(defaultValue, queryValue)
+        nshmpUtils.queryParseBoolean(defaultValue, queryValue),
       );
     }
   }
@@ -1021,44 +1021,44 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
     this.formGroup.patchValue({
       hasTestSitesLayer: nshmpUtils.queryParseBoolean(
         defaultValues.hasTestSitesLayer,
-        query?.hasTestSitesLayer
+        query?.hasTestSitesLayer,
       ),
     });
 
     this.initialControlSet(
       controls.hasDecollementLayer,
       defaultValues.hasDecollementLayer,
-      query?.hasDecollementLayer
+      query?.hasDecollementLayer,
     );
     this.initialControlSet(
       controls.hasEarthquakesLayer,
       defaultValues.hasEarthquakesLayer,
-      query?.hasEarthquakesLayer
+      query?.hasEarthquakesLayer,
     );
     this.initialControlSet(
       controls.hasFaultSectionLayer,
       defaultValues.hasFaultSectionLayer,
-      query?.hasFaultSectionLayer
+      query?.hasFaultSectionLayer,
     );
     this.initialControlSet(
       controls.hasHazardTiles,
       defaultValues.hasHazardTiles,
-      query?.hasHazardTiles
+      query?.hasHazardTiles,
     );
     this.initialControlSet(
       controls.hasInterfaceSectionsLayer,
       defaultValues.hasInterfaceSectionsLayer,
-      query?.hasNshmBoundaryLayer
+      query?.hasNshmBoundaryLayer,
     );
     this.initialControlSet(
       controls.hasNshmBoundaryLayer,
       defaultValues.hasNshmBoundaryLayer,
-      query?.hasNshmBoundaryLayer
+      query?.hasNshmBoundaryLayer,
     );
     this.initialControlSet(
       controls.hasZoneSourcesLayer,
       defaultValues.hasZoneSourcesLayer,
-      query?.hasZoneSourcesLayer
+      query?.hasZoneSourcesLayer,
     );
 
     this.formGroup.valueChanges.subscribe(() => this.updateUrl());
@@ -1074,19 +1074,19 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
     /** COUNS NSHM bounds */
     const conusBounds = new L.LatLngBounds(
       new L.LatLng(48.75, -68.8),
-      new L.LatLng(25.75, -124.25)
+      new L.LatLng(25.75, -124.25),
     );
 
     const bounds: Partial<Record<NshmId, L.LatLngBounds>> = {
       ALASKA_2023: new L.LatLngBounds(
         new L.LatLng(71.3, -131.7),
-        new L.LatLng(51.9, -176.7)
+        new L.LatLng(51.9, -176.7),
       ),
       CONUS_2018: conusBounds,
       CONUS_2023: conusBounds,
       HAWAII_2021: new L.LatLngBounds(
         new L.LatLng(22.22, -155.06),
-        new L.LatLng(19.1, -160.2)
+        new L.LatLng(19.1, -160.2),
       ),
     };
 
@@ -1117,7 +1117,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
   private onEachFeatureSourceFeatures(
     layer: L.GeoJSON,
     feature: GeoJSON.Feature,
-    featureType: FeatureType
+    featureType: FeatureType,
   ): void {
     const popupContent = 'Select for properties';
 
@@ -1155,7 +1155,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
 
   private resetSourceFeatureControls(): void {
     const featureTypes = this.sourceFeaturesUsage().response.featureType.map(
-      type => type.value
+      type => type.value,
     );
 
     const controls = this.formGroup.controls;
@@ -1163,22 +1163,22 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
     this.sourceFeatureControl(
       FeatureType.DECOLLEMENT,
       featureTypes,
-      controls.hasDecollementLayer
+      controls.hasDecollementLayer,
     );
     this.sourceFeatureControl(
       FeatureType.FAULT,
       featureTypes,
-      controls.hasFaultSectionLayer
+      controls.hasFaultSectionLayer,
     );
     this.sourceFeatureControl(
       FeatureType.INTERFACE,
       featureTypes,
-      controls.hasInterfaceSectionsLayer
+      controls.hasInterfaceSectionsLayer,
     );
     this.sourceFeatureControl(
       FeatureType.ZONE,
       featureTypes,
-      controls.hasZoneSourcesLayer
+      controls.hasZoneSourcesLayer,
     );
   }
 
@@ -1201,7 +1201,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
    */
   private toHazardTiles(response: ArcServiceResponse): HazardTile[] {
     const services = response.services.filter(
-      service => service.name.includes('hz') || service.name.includes('pga')
+      service => service.name.includes('hz') || service.name.includes('pga'),
     );
 
     const hazardTiles: HazardTile[] = [];
@@ -1256,15 +1256,15 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
     switch (region) {
       case 'AK':
         return this.nshmIdFromString(
-          `${nshmRegion(NshmId.ALASKA_2023)}_${year}`
+          `${nshmRegion(NshmId.ALASKA_2023)}_${year}`,
         );
       case 'HI':
         return this.nshmIdFromString(
-          `${nshmRegion(NshmId.HAWAII_2021)}_${year}`
+          `${nshmRegion(NshmId.HAWAII_2021)}_${year}`,
         );
       case 'US':
         return this.nshmIdFromString(
-          `${nshmRegion(NshmId.CONUS_2023)}_${year}`
+          `${nshmRegion(NshmId.CONUS_2023)}_${year}`,
         );
       default:
         throw new Error(`Region [${region}] year [${year}] not supported`);
@@ -1292,7 +1292,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
   private updateUrl(): void {
     this.location.replaceState(
       apps().source.data.routerLink,
-      new HttpParams().appendAll(this.formGroup.getRawValue()).toString()
+      new HttpParams().appendAll(this.formGroup.getRawValue()).toString(),
     );
   }
 }
diff --git a/projects/nshmp-apps/src/app/source/rates/components/content/content.component.ts b/projects/nshmp-apps/src/app/source/rates/components/content/content.component.ts
index bd27c906a..2a6a376a2 100644
--- a/projects/nshmp-apps/src/app/source/rates/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/source/rates/components/content/content.component.ts
@@ -25,7 +25,7 @@ export class ContentComponent {
   probabilityTableData = computed(() =>
     plotUtils.plotDataToTableData(this.service.plots().probability, {
       addLabel: true,
-    })
+    }),
   );
 
   rateTableData = computed(() =>
@@ -33,7 +33,7 @@ export class ContentComponent {
       addLabel: true,
       yLabelTransform: () => 'Rate (1/yr)',
       yValueFormat: (y: number) => y.toExponential(4),
-    })
+    }),
   );
 
   constructor(private service: AppService) {}
diff --git a/projects/nshmp-apps/src/app/source/rates/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/source/rates/components/control-panel/control-panel.component.ts
index 4f5272b8e..2cdb72325 100644
--- a/projects/nshmp-apps/src/app/source/rates/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/source/rates/components/control-panel/control-panel.component.ts
@@ -61,19 +61,21 @@ export class ControlPanelComponent implements OnInit, OnDestroy {
     const controls = this.formGroup.controls;
 
     this.subs.push(
-      controls.model.valueChanges.subscribe(() => this.onModelChange())
+      controls.model.valueChanges.subscribe(() => this.onModelChange()),
     );
     this.subs.push(
-      controls.latitude.valueChanges.subscribe(() => this.service.resetState())
+      controls.latitude.valueChanges.subscribe(() => this.service.resetState()),
     );
     this.subs.push(
-      controls.longitude.valueChanges.subscribe(() => this.service.resetState())
+      controls.longitude.valueChanges.subscribe(() =>
+        this.service.resetState(),
+      ),
     );
     this.subs.push(
-      controls.distance.valueChanges.subscribe(() => this.service.resetState())
+      controls.distance.valueChanges.subscribe(() => this.service.resetState()),
     );
     this.subs.push(
-      controls.timespan.valueChanges.subscribe(() => this.service.resetState())
+      controls.timespan.valueChanges.subscribe(() => this.service.resetState()),
     );
   }
 
diff --git a/projects/nshmp-apps/src/app/source/rates/services/app.service.ts b/projects/nshmp-apps/src/app/source/rates/services/app.service.ts
index edd7eaea3..96fb4ba27 100644
--- a/projects/nshmp-apps/src/app/source/rates/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/source/rates/services/app.service.ts
@@ -61,7 +61,7 @@ export class AppService
     private spinnerService: SpinnerService,
     private hazardService: HazardService,
     private route: ActivatedRoute,
-    private location: LocationService
+    private location: LocationService,
   ) {
     super();
     this.addValidators();
@@ -81,7 +81,7 @@ export class AppService
     return computed(
       () =>
         this.state().rateResponse !== null &&
-        this.state().probabilityResponse !== null
+        this.state().probabilityResponse !== null,
     );
   }
 
@@ -91,8 +91,8 @@ export class AppService
   get nshmService(): Signal<NshmMetadata> {
     return computed(() =>
       this.state().nshmServices.find(
-        nshmService => nshmService.model === this.formGroup.getRawValue().model
-      )
+        nshmService => nshmService.model === this.formGroup.getRawValue().model,
+      ),
     );
   }
 
@@ -115,7 +115,7 @@ export class AppService
    */
   get usage(): Signal<ProbabilityUsage> {
     return computed(() =>
-      this.state().usageResponses?.get(this.formGroup.getRawValue().model)
+      this.state().usageResponses?.get(this.formGroup.getRawValue().model),
     );
   }
 
@@ -158,7 +158,7 @@ export class AppService
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(([rateResponse, probabilityResponse]) => {
         this.handleServiceResponse(rateResponse, probabilityResponse);
@@ -251,19 +251,19 @@ export class AppService
    */
   init(): void {
     const spinnerRef = this.spinnerService.show(
-      SpinnerService.MESSAGE_METADATA
+      SpinnerService.MESSAGE_METADATA,
     );
 
     this.hazardService
       .dynamicNshms$<ProbabilityRequestMetadata>(
         `${this.nshmpHazWs.url}${this.nshmpHazWs.services.nshms}`,
-        this.probabilityEndpoint
+        this.probabilityEndpoint,
       )
       .pipe(
         catchError((error: Error) => {
           spinnerRef.close();
           return this.nshmpService.throwError$(error);
-        })
+        }),
       )
       .subscribe(({models, nshmServices, usageResponses}) => {
         spinnerRef.close();
@@ -351,7 +351,7 @@ export class AppService
   private createPlot(
     plot: NshmpPlot,
     rateData: RateData[],
-    xRange: number[]
+    xRange: number[],
   ): NshmpPlot {
     const plotData: Partial<PlotData>[] = rateData.map((data, index) => {
       const xy = hazardUtils.cleanXySequence({
@@ -395,7 +395,7 @@ export class AppService
    */
   private handleServiceResponse(
     rateResponse: RateResponse,
-    probabilityResponse: ProbabilityResponse
+    probabilityResponse: ProbabilityResponse,
   ): void {
     this.updateState({
       probabilityResponse,
@@ -448,12 +448,12 @@ export class AppService
       probability: this.createPlot(
         this.plots().probability,
         probabilityResponse.response.data,
-        this.xRange(rateData, probData, probPlot.plotData.layout.xaxis.type)
+        this.xRange(rateData, probData, probPlot.plotData.layout.xaxis.type),
       ),
       rate: this.createPlot(
         this.plots().rate,
         rateResponse.response.data,
-        this.xRange(rateData, probData, ratePlot.plotData.layout.xaxis.type)
+        this.xRange(rateData, probData, ratePlot.plotData.layout.xaxis.type),
       ),
     };
   }
@@ -464,7 +464,7 @@ export class AppService
   private updateUrl(): void {
     this.location.replaceState(
       apps().source.rateAndProbability.routerLink,
-      new HttpParams().appendAll(this.formGroup.getRawValue()).toString()
+      new HttpParams().appendAll(this.formGroup.getRawValue()).toString(),
     );
   }
 
@@ -487,7 +487,7 @@ export class AppService
   private xRange(
     rateData: RateData[],
     probaData: RateData[],
-    axisType: AxisType
+    axisType: AxisType,
   ): number[] {
     const x = [
       ...rateData.map(data => data.xvalues),
diff --git a/projects/nshmp-apps/src/shared/interceptors/http-error.interceptor.ts b/projects/nshmp-apps/src/shared/interceptors/http-error.interceptor.ts
index 1de70ea45..c8ec74b82 100644
--- a/projects/nshmp-apps/src/shared/interceptors/http-error.interceptor.ts
+++ b/projects/nshmp-apps/src/shared/interceptors/http-error.interceptor.ts
@@ -8,7 +8,7 @@ import {catchError, Observable} from 'rxjs';
 
 export function httpErrorInterceptor(
   req: HttpRequest<unknown>,
-  next: HttpHandlerFn
+  next: HttpHandlerFn,
 ): Observable<HttpEvent<unknown>> {
   return next(req).pipe(
     catchError(error => {
@@ -20,6 +20,6 @@ export function httpErrorInterceptor(
       }
 
       throw error;
-    })
+    }),
   );
 }
diff --git a/projects/nshmp-apps/src/shared/services/shared.service.ts b/projects/nshmp-apps/src/shared/services/shared.service.ts
index effe8ddbc..aca94dbee 100644
--- a/projects/nshmp-apps/src/shared/services/shared.service.ts
+++ b/projects/nshmp-apps/src/shared/services/shared.service.ts
@@ -28,7 +28,7 @@ export class SharedService {
 
   validateNan(): ValidatorFn {
     return (
-      control: AbstractControl<number, number>
+      control: AbstractControl<number, number>,
     ): ValidationErrors | null => {
       return isNaN(control.value) ? {nan: {value: control.value}} : null;
     };
-- 
GitLab


From 26727f744915008649829a1af624e7be6c3f164e Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 10:44:37 -0700
Subject: [PATCH 09/27] fix import

---
 .../disagg/components/geo-disagg/geo-disagg.component.spec.ts   | 2 +-
 .../hazard/disagg/components/geo-disagg/geo-disagg.component.ts | 2 +-
 .../src/app/source/model-maps/components/map/map.component.ts   | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.spec.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.spec.ts
index c39f5431d..7feefd831 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.spec.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.spec.ts
@@ -2,7 +2,7 @@ import {provideHttpClient} from '@angular/common/http';
 import {ComponentFixture, TestBed} from '@angular/core/testing';
 import {provideNoopAnimations} from '@angular/platform-browser/animations';
 import {provideRouter} from '@angular/router';
-import {LeafletModule} from '@asymmetrik/ngx-leaflet';
+import {LeafletModule} from '@bluehalo/ngx-leaflet';
 
 import {GeoDisaggComponent} from './geo-disagg.component';
 
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts
index 0670d34c4..2c42ce64b 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts
@@ -1,6 +1,6 @@
 import {AsyncPipe} from '@angular/common';
 import {Component, computed, effect, ViewEncapsulation} from '@angular/core';
-import {LeafletModule} from '@asymmetrik/ngx-leaflet';
+import {LeafletModule} from '@bluehalo/ngx-leaflet';
 import {
   mapUtils,
   NshmpLibNgMapBaseLayersControlComponent,
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts b/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
index f9d5ad556..d4a3e5696 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
@@ -1,6 +1,6 @@
 import {AsyncPipe} from '@angular/common';
 import {Component, effect, ElementRef, NgZone, ViewChild} from '@angular/core';
-import {LeafletModule} from '@asymmetrik/ngx-leaflet';
+import {LeafletModule} from '@bluehalo/ngx-leaflet';
 import {
   mapUtils,
   NshmpLibNgMapBaseLayersControlComponent,
-- 
GitLab


From 58e78deec175b7e15a739b529a44cb8873590a0c Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 10:45:42 -0700
Subject: [PATCH 10/27] change to error

---
 .../app/internal/aws/submit-haz-jobs/services/app.service.ts    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/services/app.service.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/services/app.service.ts
index 764fdc736..e04af7c39 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/services/app.service.ts
@@ -603,7 +603,7 @@ export class AppService implements AppServiceModel<AppState, RunNshmpHazForm> {
 
       fileReader.onerror = () => {
         this.nshmpService.throwError$(fileReader.error);
-        reject(fileReader.error.message);
+        reject(fileReader.error);
       };
     });
   }
-- 
GitLab


From 25027dd7e17f70a23354db412227c95b94903dd0 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 10:49:52 -0700
Subject: [PATCH 11/27] update deps

---
 package-lock.json | 455 ++++++++++++++++++----------------------------
 package.json      |  22 +--
 2 files changed, 185 insertions(+), 292 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 60eba3e0c..010ee7478 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -31,11 +31,11 @@
         "deep-equal": "^2.2.3",
         "file-saver": "^2.0.5",
         "leaflet": "^1.9.4",
-        "plotly.js": "^2.35.2",
+        "plotly.js": "^2.35.3",
         "rxjs": "^7.8.0",
         "tslib": "^2.8.1",
         "uswds": "^2.14.0",
-        "yaml": "^2.6.0",
+        "yaml": "^2.6.1",
         "zone.js": "^0.15.0"
       },
       "devDependencies": {
@@ -53,18 +53,18 @@
         "@angular/language-service": "19.0.4",
         "@cypress/schematic": "^2.5.2",
         "@cypress/webpack-preprocessor": "^6.0.2",
-        "@nx/cypress": "^19.2.2",
-        "@nx/workspace": "^19.2.2",
+        "@nx/cypress": "^20.2.2",
+        "@nx/workspace": "^20.2.2",
         "@types/aws-sdk": "^2.7.4",
         "@types/d3-array": "^3.2.1",
-        "@types/d3-scale-chromatic": "^3.0.3",
+        "@types/d3-scale-chromatic": "^3.1.0",
         "@types/deep-equal": "^1.0.4",
         "@types/file-saver": "^2.0.7",
         "@types/jest": "^29.5.14",
-        "@types/leaflet": "^1.9.14",
-        "@types/node": "^20.17.6",
-        "@types/plotly.js": "^2.33.5",
-        "@types/three": "^0.152.1",
+        "@types/leaflet": "^1.9.15",
+        "@types/node": "^22.10.2",
+        "@types/plotly.js": "^2.35.1",
+        "@types/three": "^0.171.0",
         "@typescript-eslint/eslint-plugin": "^8.18.1",
         "@typescript-eslint/parser": "^8.18.1",
         "angular-http-server": "^1.12.0",
@@ -79,14 +79,14 @@
         "eslint-plugin-unused-imports": "^4.1.4",
         "fast-deep-equal": "^3.1.3",
         "gts": "^6.0.2",
-        "husky": "^9.1.6",
+        "husky": "^9.1.7",
         "jest": "^29.7.0",
         "jest-environment-jsdom": "^29.7.0",
         "jest-fail-on-console": "^3.3.1",
         "jest-junit": "^16.0.0",
         "jest-preset-angular": "^14.4.2",
         "ng-packagr": "^19.0.1",
-        "prettier": "^3.3.3",
+        "prettier": "^3.4.2",
         "pretty-quick": "^4.0.0",
         "ts-jest": "^29.2.5",
         "ts-node": "^10.9.2",
@@ -3310,9 +3310,9 @@
       }
     },
     "node_modules/@babel/plugin-transform-typescript": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz",
-      "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==",
+      "version": "7.26.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz",
+      "integrity": "sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6988,71 +6988,16 @@
         "node": "^18.17.0 || >=20.5.0"
       }
     },
-    "node_modules/@nrwl/cypress": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nrwl/cypress/-/cypress-19.8.10.tgz",
-      "integrity": "sha512-54q/f2M75Q6r8u90O7HUt3LtX2vgw1kapnZ+sGN2Ky4+RvhgfwgKUDnnSw4+Zsx8DMJqCG4bOPZFryJs/oBX/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nx/cypress": "19.8.10"
-      }
-    },
-    "node_modules/@nrwl/devkit": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.8.10.tgz",
-      "integrity": "sha512-voDKQcf5v7HvjDeF8x21kULJK6OqOdeRS9lPCSnbF2cKwKGfdEPszLxw7j/SPV5R6TYKs5rDHt8Yj72RhXfteQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nx/devkit": "19.8.10"
-      }
-    },
-    "node_modules/@nrwl/js": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-19.8.10.tgz",
-      "integrity": "sha512-3mVljFIlizoBDeyVBHsRuq7LMbij4NSL0zOJoEILsBcNjmZ4UZQhkztH/jbWN9JCSyWxDmo991d9KkCA5zxAKQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nx/js": "19.8.10"
-      }
-    },
-    "node_modules/@nrwl/tao": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.8.10.tgz",
-      "integrity": "sha512-fY/g5r4mqDrxcyHeg2ggi1U4B+24y8JZISmn4l6pXDXr13hdTuBv6nNxJhogrb/RW24IkweqYtAsHjh1d5CoYw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "nx": "19.8.10",
-        "tslib": "^2.3.0"
-      },
-      "bin": {
-        "tao": "index.js"
-      }
-    },
-    "node_modules/@nrwl/workspace": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-19.8.10.tgz",
-      "integrity": "sha512-W90BBVVTaDxlHtATQ9RQdKA8YIxziCL3p7NZcdqWMqa2o21Q0eer2QpvUGRrY5VxcthsnPJNW9kjitv1nnD7EQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nx/workspace": "19.8.10"
-      }
-    },
     "node_modules/@nx/cypress": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-19.8.10.tgz",
-      "integrity": "sha512-OTdjV8P3wAeXV8vOPaTV4CrnKoKI67ub/8a8VoeV0nkzPchlccsIS6Q6zkyy2BDe8qtwOSBHcAeYODoNj41q2Q==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-20.2.2.tgz",
+      "integrity": "sha512-Y0V5b8N0J0Ofd8JQK21DPE+MB3SwqiarF0fKMB56P7HIuV9RucLqmwqTqnfVOpnFfKrMMs96Qy1vXsaAlHQLgg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nrwl/cypress": "19.8.10",
-        "@nx/devkit": "19.8.10",
-        "@nx/eslint": "19.8.10",
-        "@nx/js": "19.8.10",
+        "@nx/devkit": "20.2.2",
+        "@nx/eslint": "20.2.2",
+        "@nx/js": "20.2.2",
         "@phenomnomnominal/tsquery": "~5.0.1",
         "detect-port": "^1.5.1",
         "tslib": "^2.3.0"
@@ -7067,13 +7012,12 @@
       }
     },
     "node_modules/@nx/devkit": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.8.10.tgz",
-      "integrity": "sha512-i5gWrxtniGOryiPU9df4quzrZuvuzqs8gL+GlLBaoFLqA9UNsTLShPWwHblmTK0FZZxlZYNthJR19nVweVO2ag==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.2.2.tgz",
+      "integrity": "sha512-uqs0LVvuRRVAfFdn0ewvmr1vsNV9Ztugw36emcLJxskqhBZb10K+vzdTDAZpg5aVE2ISg1BmPidoOyk1tP+Omg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nrwl/devkit": "19.8.10",
         "ejs": "^3.1.7",
         "enquirer": "~2.3.6",
         "ignore": "^5.0.4",
@@ -7088,18 +7032,17 @@
       }
     },
     "node_modules/@nx/eslint": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-19.8.10.tgz",
-      "integrity": "sha512-Naz/bsITv4R+GFYRx6ktNmBeUdzktrAGkKp3K+16An5dHSH3IOpzkuXbszU2lw5GXpRAfPQS5zkCAm2kESxANA==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-20.2.2.tgz",
+      "integrity": "sha512-GID3r539okSIdqqaLJxOttjbC8xaAbyrGJfSo/jyFLVASN4ZYuwFwWU94Vdn1NsOPHc2kiDa/qQj5mv0gbBfUw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nx/devkit": "19.8.10",
-        "@nx/js": "19.8.10",
-        "@nx/linter": "19.8.10",
+        "@nx/devkit": "20.2.2",
+        "@nx/js": "20.2.2",
         "semver": "^7.5.3",
         "tslib": "^2.3.0",
-        "typescript": "~5.4.2"
+        "typescript": "~5.6.2"
       },
       "peerDependencies": {
         "@zkochan/js-yaml": "0.0.7",
@@ -7111,24 +7054,10 @@
         }
       }
     },
-    "node_modules/@nx/eslint/node_modules/typescript": {
-      "version": "5.4.5",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
-      "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "bin": {
-        "tsc": "bin/tsc",
-        "tsserver": "bin/tsserver"
-      },
-      "engines": {
-        "node": ">=14.17"
-      }
-    },
     "node_modules/@nx/js": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/js/-/js-19.8.10.tgz",
-      "integrity": "sha512-gAt3XnXyYJiLyeXIAwHjHwZ34irLCvpINSAQoD2xY+1ZHU3RXJG8QgqlgUIfGUVhbCr8IovK9gwUCwLm4uAsag==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/js/-/js-20.2.2.tgz",
+      "integrity": "sha512-y/L+GMS8pIE1rQTQ28Lb1YeWpEnDj2v3T/7QpWvICc78NZXuMrO6N1ZRTPRSQNXKL6Bs9S9bRuivsvSIiNlULw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -7139,9 +7068,9 @@
         "@babel/preset-env": "^7.23.2",
         "@babel/preset-typescript": "^7.22.5",
         "@babel/runtime": "^7.22.6",
-        "@nrwl/js": "19.8.10",
-        "@nx/devkit": "19.8.10",
-        "@nx/workspace": "19.8.10",
+        "@nx/devkit": "20.2.2",
+        "@nx/workspace": "20.2.2",
+        "@zkochan/js-yaml": "0.0.7",
         "babel-plugin-const-enum": "^1.0.1",
         "babel-plugin-macros": "^2.8.0",
         "babel-plugin-transform-typescript-metadata": "^0.3.1",
@@ -7149,7 +7078,6 @@
         "columnify": "^1.6.0",
         "detect-port": "^1.5.1",
         "enquirer": "~2.3.6",
-        "fast-glob": "3.2.7",
         "ignore": "^5.0.4",
         "js-tokens": "^4.0.0",
         "jsonc-parser": "3.2.0",
@@ -7159,6 +7087,7 @@
         "ora": "5.3.0",
         "semver": "^7.5.3",
         "source-map-support": "0.5.19",
+        "tinyglobby": "^0.2.10",
         "ts-node": "10.9.1",
         "tsconfig-paths": "^4.1.2",
         "tslib": "^2.3.0"
@@ -7172,36 +7101,6 @@
         }
       }
     },
-    "node_modules/@nx/js/node_modules/fast-glob": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
-      "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.4"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/@nx/js/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
     "node_modules/@nx/js/node_modules/hosted-git-info": {
       "version": "7.0.2",
       "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
@@ -7343,20 +7242,10 @@
         }
       }
     },
-    "node_modules/@nx/linter": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-19.8.10.tgz",
-      "integrity": "sha512-WEDMLiaLT+JLCVtQF7058I/hRkgR5B7k7oGJ2zxk0iISJfJW2/mkfxW+kEQmQ935F5IjJ/KEiDeIQcTAzuqUdw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nx/eslint": "19.8.10"
-      }
-    },
     "node_modules/@nx/nx-darwin-arm64": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.8.10.tgz",
-      "integrity": "sha512-zZ0EI1DjFLb5aebjZZuR89irSWZMse9E13QymZLsC8+WE2PMvcwkwUfbMEIhIze88zsThcF1R5U1qZKmrgcD9w==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.2.2.tgz",
+      "integrity": "sha512-gnS5mtbaBAO5TJkl4T68rQaN/79MMWePavw2SOcFyFnIdAriGEZ+ZFDUE0B/xYJSs9CPWLaGHf+n7oqyxaGd9A==",
       "cpu": [
         "arm64"
       ],
@@ -7371,9 +7260,9 @@
       }
     },
     "node_modules/@nx/nx-darwin-x64": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.8.10.tgz",
-      "integrity": "sha512-8vypmuiwIe3t0aaE1b3G34tx6mIUW6a4nbbhMOISWO2ehaX/bnMMbIbrkp/sAP1fYhydbXIqcgixWsN/h3qu1A==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.2.2.tgz",
+      "integrity": "sha512-IctvdQon+K8mlhl06zIq1xTPwf5L4OuS7crzCmK26p5F/lV6iz/UXSPCcgn+bYKOL/q3QCLNR7UasQMjzgCNkQ==",
       "cpu": [
         "x64"
       ],
@@ -7388,9 +7277,9 @@
       }
     },
     "node_modules/@nx/nx-freebsd-x64": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.8.10.tgz",
-      "integrity": "sha512-onwAPBoK6nMqniDuHMb4loGuXazodiql23VOlFxe4oIKZKa1A1/l8Z7BW12rW7dpIuL44T+Z83ZTSYZOR84cag==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.2.2.tgz",
+      "integrity": "sha512-4/Blg9Y6LVU8tS8yoa2BEXPHWsorpvCuZRH0gXPh96i6b71o4ORPafyLOHp08o3WjtUZb4jl5TfDryE+8y62ZA==",
       "cpu": [
         "x64"
       ],
@@ -7405,9 +7294,9 @@
       }
     },
     "node_modules/@nx/nx-linux-arm-gnueabihf": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.8.10.tgz",
-      "integrity": "sha512-DqDIxe+i8y34srvI5tO09aSai71a620bQvv3dJTfon2Vbr4i4wUsqA99hXFEwEeI2Sjva3vM2eGnEIMEhLAiXQ==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.2.2.tgz",
+      "integrity": "sha512-AVAxbUXi6q+inmp8re3OV7HzH6fbkKnnMKvjDLnkzK8dA2Mv4JFl/gz++rgkYfEsBk20lcB1i3unqNrtOvzS7Q==",
       "cpu": [
         "arm"
       ],
@@ -7422,9 +7311,9 @@
       }
     },
     "node_modules/@nx/nx-linux-arm64-gnu": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.8.10.tgz",
-      "integrity": "sha512-JEFOtH6vIJB8f2aOg7ZxbPLjLdh04jpVbycE8F4l3W0DjaW7j+sb0vFlsRNsZPq9ZlP9aLXsx/o8ebyEZqCzmQ==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.2.2.tgz",
+      "integrity": "sha512-h04SLH464Oh/k/1mpAfsMhTVlnc1NJItx4N5DLZb2VuOOY+Tquhrp7HBJLyAhU0Q74JG0LevGFO6wdxliHupmA==",
       "cpu": [
         "arm64"
       ],
@@ -7439,9 +7328,9 @@
       }
     },
     "node_modules/@nx/nx-linux-arm64-musl": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.8.10.tgz",
-      "integrity": "sha512-KWj7Z/dtwwbQDQi/zA3jBCd1UJ9o8BUGzsLZn0+6fG1ztHw+wy6hzBNvjW6IAabAfMZSozFb3pTFr6gr2UdfZQ==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.2.2.tgz",
+      "integrity": "sha512-rnRXDLvHHj66rCslD4ShDq6KBOVsQ+X63GWTGKM0pnTIIDje9+ltZCoAByieCUm4BvFfCWMUf9y0mGfZvLVKSw==",
       "cpu": [
         "arm64"
       ],
@@ -7456,9 +7345,9 @@
       }
     },
     "node_modules/@nx/nx-linux-x64-gnu": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.8.10.tgz",
-      "integrity": "sha512-Soxogm5eql+bj4SIY8uFQGJAh/ODsFhiztaA+NxkYnRJOrLIWw+gprHDpyTUi2y4erSj1lHu+DiIZQ43cHq2fw==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.2.2.tgz",
+      "integrity": "sha512-K1Z2DVTnyCGl4nolhZ8fvHEixoe1pZOY256LD6D0lGca4Fsi3mHQ7lDU237Pzyc91+cfLva/OAvrivRPeU+DMA==",
       "cpu": [
         "x64"
       ],
@@ -7473,9 +7362,9 @@
       }
     },
     "node_modules/@nx/nx-linux-x64-musl": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.8.10.tgz",
-      "integrity": "sha512-IDEgKqlY0XMNkiZIcKmvhClRRi/6z2fFHvjsLDOmghqzUS8vyRSeEaHiTiKAh5yzNL2gkK96Mcx6OLi4Lrrc4Q==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.2.2.tgz",
+      "integrity": "sha512-pyWe+d2Y2pJVgPZf27KkDBufhFPq+Xhs3/zAQdJbicMvym7uhw0qMTV+lmoMXgfx52WZzhqTfG8JQcDqHjExJw==",
       "cpu": [
         "x64"
       ],
@@ -7490,9 +7379,9 @@
       }
     },
     "node_modules/@nx/nx-win32-arm64-msvc": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.8.10.tgz",
-      "integrity": "sha512-o9YhREK0ogXxKDwE4ci6HtWJX3DGigpvQFK9U8VxzHZQb/sOOVgAU8lNpneH50o1BsPsfPFZFmpt9oYw61ps3Q==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.2.2.tgz",
+      "integrity": "sha512-zqSoVrV34tx6qhQo/PwD9IMGhzoNSaFQxjTjNCY61sE7iwi5Qt4dDs3Rlh1ZFCBFnrjziymRPY2RryArgeK8Bw==",
       "cpu": [
         "arm64"
       ],
@@ -7507,9 +7396,9 @@
       }
     },
     "node_modules/@nx/nx-win32-x64-msvc": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.8.10.tgz",
-      "integrity": "sha512-gayjQyHU18Jglt+95f4DsnTOETW8+pX6zNbd9wPFyf6PQCmoc62kl07/NxJMzRNkzwK7p3CzS7aQlCe4wJf+Xg==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.2.2.tgz",
+      "integrity": "sha512-IfQf2axmCuSArhFGaocIDt8ajWDHXoVut5NOQH4eV2q9whP1j/LVB8EehEaolF5UenM7rhL4V25PXPuuBaUq4A==",
       "cpu": [
         "x64"
       ],
@@ -7524,17 +7413,16 @@
       }
     },
     "node_modules/@nx/workspace": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.8.10.tgz",
-      "integrity": "sha512-oqopf4pbuKE5Qs2FG/Hdl/5ln5Seo6LPiW6XVI4FPs6Wi7eiXAb5Umc6MOqpg9dZTlmWeAWm6wt13yXzNGs8YA==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-20.2.2.tgz",
+      "integrity": "sha512-VC22d5EG9f8sLD+gvq9Nbau0u8cV0gy5aYyRcleecqs9bBvOiVxAvv7HaDCRcHezHQhKwxcIOZvmuCjYF/oKxg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nrwl/workspace": "19.8.10",
-        "@nx/devkit": "19.8.10",
+        "@nx/devkit": "20.2.2",
         "chalk": "^4.1.0",
         "enquirer": "~2.3.6",
-        "nx": "19.8.10",
+        "nx": "20.2.2",
         "tslib": "^2.3.0",
         "yargs-parser": "21.1.1"
       }
@@ -8693,9 +8581,9 @@
       }
     },
     "node_modules/@tweenjs/tween.js": {
-      "version": "18.6.4",
-      "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-18.6.4.tgz",
-      "integrity": "sha512-lB9lMjuqjtuJrx7/kOkqQBtllspPIN+96OvTCeJ2j5FEzinoAXTdAMFnDAQT1KVPRlnYfBrqxtqP66vDM40xxQ==",
+      "version": "23.1.3",
+      "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz",
+      "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==",
       "dev": true,
       "license": "MIT"
     },
@@ -8821,9 +8709,9 @@
       "license": "MIT"
     },
     "node_modules/@types/d3-scale-chromatic": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz",
-      "integrity": "sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
+      "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==",
       "dev": true,
       "license": "MIT"
     },
@@ -9012,9 +8900,9 @@
       "license": "MIT"
     },
     "node_modules/@types/leaflet": {
-      "version": "1.9.14",
-      "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.14.tgz",
-      "integrity": "sha512-sx2q6MDJaajwhKeVgPSvqXd8rhNJSTA3tMidQGduZn9S6WBYxDkCpSpV5xXEmSg7Cgdk/5vJGhVF1kMYLzauBg==",
+      "version": "1.9.15",
+      "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.15.tgz",
+      "integrity": "sha512-7UuggAuAs+mva66gtf2OTB1nEhzU/9JED93TIaOEgvFMvG/dIGQaukHE7izHo1Zd+Ko1L4ETUw7TBc8yUxevpg==",
       "license": "MIT",
       "dependencies": {
         "@types/geojson": "*"
@@ -9052,12 +8940,12 @@
       "license": "MIT"
     },
     "node_modules/@types/node": {
-      "version": "20.17.6",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
-      "integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
+      "version": "22.10.2",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz",
+      "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==",
       "license": "MIT",
       "dependencies": {
-        "undici-types": "~6.19.2"
+        "undici-types": "~6.20.0"
       }
     },
     "node_modules/@types/node-forge": {
@@ -9091,9 +8979,9 @@
       "license": "MIT"
     },
     "node_modules/@types/plotly.js": {
-      "version": "2.33.5",
-      "resolved": "https://registry.npmjs.org/@types/plotly.js/-/plotly.js-2.33.5.tgz",
-      "integrity": "sha512-TSXtrlc/4Zz7FP8HyDjmhsFFZ9JlzRk0KdHxXieDno4yZB4Jm5ET873QH+qPm5iZMaRZAEJMOrs1AGgN7r4e4g==",
+      "version": "2.35.1",
+      "resolved": "https://registry.npmjs.org/@types/plotly.js/-/plotly.js-2.35.1.tgz",
+      "integrity": "sha512-9fTHC8qeJNEDpGJK1qIJAEcRxrI9uPrap32I8cbCLPKsqwFmafOYHecaBzvIJXEPhLIUiQocN9Bc/tIV9CjsxQ==",
       "license": "MIT"
     },
     "node_modules/@types/qs": {
@@ -9205,17 +9093,18 @@
       }
     },
     "node_modules/@types/three": {
-      "version": "0.152.1",
-      "resolved": "https://registry.npmjs.org/@types/three/-/three-0.152.1.tgz",
-      "integrity": "sha512-PMOCQnx9JRmq+2OUGTPoY9h1hTWD2L7/nmuW/SyNq1Vbq3Lwt3MNdl3wYSa4DvLTGv62NmIXD9jYdAOwohwJyw==",
+      "version": "0.171.0",
+      "resolved": "https://registry.npmjs.org/@types/three/-/three-0.171.0.tgz",
+      "integrity": "sha512-oLuT1SAsT+CUg/wxUTFHo0K3NtJLnx9sJhZWQJp/0uXqFpzSk1hRHmvWvpaAWSfvx2db0lVKZ5/wV0I0isD2mQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@tweenjs/tween.js": "~18.6.4",
+        "@tweenjs/tween.js": "~23.1.3",
         "@types/stats.js": "*",
         "@types/webxr": "*",
-        "fflate": "~0.6.9",
-        "lil-gui": "~0.17.0"
+        "@webgpu/types": "*",
+        "fflate": "~0.8.2",
+        "meshoptimizer": "~0.18.1"
       }
     },
     "node_modules/@types/tough-cookie": {
@@ -9794,6 +9683,13 @@
         "@xtuc/long": "4.2.2"
       }
     },
+    "node_modules/@webgpu/types": {
+      "version": "0.1.51",
+      "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.51.tgz",
+      "integrity": "sha512-ktR3u64NPjwIViNCck+z9QeyN0iPkQCUOQ07ZCV1RzlkfP+olLTeEZ95O1QHS+v4w9vJeY9xj/uJuSphsHy5rQ==",
+      "dev": true,
+      "license": "BSD-3-Clause"
+    },
     "node_modules/@xtuc/ieee754": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
@@ -9814,9 +9710,9 @@
       "license": "BSD-2-Clause"
     },
     "node_modules/@yarnpkg/parsers": {
-      "version": "3.0.0-rc.46",
-      "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz",
-      "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz",
+      "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
@@ -9824,7 +9720,7 @@
         "tslib": "^2.4.0"
       },
       "engines": {
-        "node": ">=14.15.0"
+        "node": ">=18.12.0"
       }
     },
     "node_modules/@yarnpkg/parsers/node_modules/argparse": {
@@ -10953,9 +10849,9 @@
       "license": "MIT"
     },
     "node_modules/axios": {
-      "version": "1.7.7",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz",
-      "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
+      "version": "1.7.9",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
+      "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -14417,9 +14313,9 @@
       "license": "MIT"
     },
     "node_modules/dotenv": {
-      "version": "16.4.5",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
-      "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
+      "version": "16.4.7",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
+      "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
       "dev": true,
       "license": "BSD-2-Clause",
       "engines": {
@@ -14430,13 +14326,13 @@
       }
     },
     "node_modules/dotenv-expand": {
-      "version": "11.0.6",
-      "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz",
-      "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==",
+      "version": "11.0.7",
+      "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz",
+      "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "dotenv": "^16.4.4"
+        "dotenv": "^16.4.5"
       },
       "engines": {
         "node": ">=12"
@@ -16473,9 +16369,9 @@
       }
     },
     "node_modules/fflate": {
-      "version": "0.6.10",
-      "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.10.tgz",
-      "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==",
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
+      "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==",
       "dev": true,
       "license": "MIT"
     },
@@ -17901,6 +17797,22 @@
         "node": ">=10.17.0"
       }
     },
+    "node_modules/gts/node_modules/prettier": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
+      "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "prettier": "bin/prettier.cjs"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
+      }
+    },
     "node_modules/gts/node_modules/signal-exit": {
       "version": "3.0.7",
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -18401,9 +18313,9 @@
       }
     },
     "node_modules/husky": {
-      "version": "9.1.6",
-      "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.6.tgz",
-      "integrity": "sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==",
+      "version": "9.1.7",
+      "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz",
+      "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==",
       "dev": true,
       "license": "MIT",
       "bin": {
@@ -21089,13 +21001,6 @@
         }
       }
     },
-    "node_modules/lil-gui": {
-      "version": "0.17.0",
-      "resolved": "https://registry.npmjs.org/lil-gui/-/lil-gui-0.17.0.tgz",
-      "integrity": "sha512-MVBHmgY+uEbmJNApAaPbtvNh1RCAeMnKym82SBjtp5rODTYKWtM+MXHCifLe2H2Ti1HuBGBtK/5SyG4ShQ3pUQ==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/lines-and-columns": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz",
@@ -21956,6 +21861,13 @@
         "node": ">= 8"
       }
     },
+    "node_modules/meshoptimizer": {
+      "version": "0.18.1",
+      "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz",
+      "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/methods": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
@@ -23746,17 +23658,16 @@
       "license": "MIT"
     },
     "node_modules/nx": {
-      "version": "19.8.10",
-      "resolved": "https://registry.npmjs.org/nx/-/nx-19.8.10.tgz",
-      "integrity": "sha512-/QCJZ5jDDzYIKjFNseb3Ehi/PxO3KZdOnH37603doO6B7N/x1yyB7pVTtf4MKVogOcoltmUZbsq975Ery3QFEA==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/nx/-/nx-20.2.2.tgz",
+      "integrity": "sha512-wHgC/NQ82Q3LOeUZXPI2j/JhpZwb7JjRc0uDn3kQU+lN/ulySCJHTHCf4CIglW4NjZeN1WZZ7YMeddtFWETGGA==",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
       "dependencies": {
         "@napi-rs/wasm-runtime": "0.2.4",
-        "@nrwl/tao": "19.8.10",
         "@yarnpkg/lockfile": "^1.1.0",
-        "@yarnpkg/parsers": "3.0.0-rc.46",
+        "@yarnpkg/parsers": "3.0.2",
         "@zkochan/js-yaml": "0.0.7",
         "axios": "^1.7.4",
         "chalk": "^4.1.0",
@@ -23780,11 +23691,11 @@
         "ora": "5.3.0",
         "semver": "^7.5.3",
         "string-width": "^4.2.3",
-        "strong-log-transformer": "^2.1.0",
         "tar-stream": "~2.2.0",
         "tmp": "~0.2.1",
         "tsconfig-paths": "^4.1.2",
         "tslib": "^2.3.0",
+        "yaml": "^2.6.0",
         "yargs": "^17.6.2",
         "yargs-parser": "21.1.1"
       },
@@ -23793,16 +23704,16 @@
         "nx-cloud": "bin/nx-cloud.js"
       },
       "optionalDependencies": {
-        "@nx/nx-darwin-arm64": "19.8.10",
-        "@nx/nx-darwin-x64": "19.8.10",
-        "@nx/nx-freebsd-x64": "19.8.10",
-        "@nx/nx-linux-arm-gnueabihf": "19.8.10",
-        "@nx/nx-linux-arm64-gnu": "19.8.10",
-        "@nx/nx-linux-arm64-musl": "19.8.10",
-        "@nx/nx-linux-x64-gnu": "19.8.10",
-        "@nx/nx-linux-x64-musl": "19.8.10",
-        "@nx/nx-win32-arm64-msvc": "19.8.10",
-        "@nx/nx-win32-x64-msvc": "19.8.10"
+        "@nx/nx-darwin-arm64": "20.2.2",
+        "@nx/nx-darwin-x64": "20.2.2",
+        "@nx/nx-freebsd-x64": "20.2.2",
+        "@nx/nx-linux-arm-gnueabihf": "20.2.2",
+        "@nx/nx-linux-arm64-gnu": "20.2.2",
+        "@nx/nx-linux-arm64-musl": "20.2.2",
+        "@nx/nx-linux-x64-gnu": "20.2.2",
+        "@nx/nx-linux-x64-musl": "20.2.2",
+        "@nx/nx-win32-arm64-msvc": "20.2.2",
+        "@nx/nx-win32-x64-msvc": "20.2.2"
       },
       "peerDependencies": {
         "@swc-node/register": "^1.8.0",
@@ -24790,9 +24701,9 @@
       }
     },
     "node_modules/plotly.js": {
-      "version": "2.35.2",
-      "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.35.2.tgz",
-      "integrity": "sha512-s0knlWzRvLQXxzf3JQ6qbm8FpwKuMjkr+6r04f8/yCEByAQ+I0jkUzY/hSGRGb+u7iljTh9hgpEiiJP90vjyeQ==",
+      "version": "2.35.3",
+      "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.35.3.tgz",
+      "integrity": "sha512-7RaC6FxmCUhpD6H4MpD+QLUu3hCn76I11rotRefrh3m1iDvWqGnVqVk9dSaKmRAhFD3vsNsYea0OxnR1rc2IzQ==",
       "license": "MIT",
       "dependencies": {
         "@plotly/d3": "3.8.2",
@@ -25104,9 +25015,9 @@
       }
     },
     "node_modules/prettier": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
-      "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
+      "version": "3.4.2",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz",
+      "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==",
       "dev": true,
       "license": "MIT",
       "bin": {
@@ -27741,24 +27652,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/strong-log-transformer": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz",
-      "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "duplexer": "^0.1.1",
-        "minimist": "^1.2.0",
-        "through": "^2.3.4"
-      },
-      "bin": {
-        "sl-log-transformer": "bin/sl-log-transformer.js"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/strongly-connected-components": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz",
@@ -28870,9 +28763,9 @@
       }
     },
     "node_modules/typescript": {
-      "version": "5.5.4",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
-      "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
+      "version": "5.6.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+      "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
       "license": "Apache-2.0",
       "bin": {
         "tsc": "bin/tsc",
@@ -28915,9 +28808,9 @@
       }
     },
     "node_modules/undici-types": {
-      "version": "6.19.8",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
-      "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+      "version": "6.20.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+      "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
       "license": "MIT"
     },
     "node_modules/unicode-canonical-property-names-ecmascript": {
@@ -30669,9 +30562,9 @@
       "license": "ISC"
     },
     "node_modules/yaml": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
-      "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz",
+      "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==",
       "license": "ISC",
       "bin": {
         "yaml": "bin.mjs"
diff --git a/package.json b/package.json
index 39bc5b1e9..cde0c884b 100644
--- a/package.json
+++ b/package.json
@@ -55,11 +55,11 @@
     "deep-equal": "^2.2.3",
     "file-saver": "^2.0.5",
     "leaflet": "^1.9.4",
-    "plotly.js": "^2.35.2",
+    "plotly.js": "^2.35.3",
     "rxjs": "^7.8.0",
     "tslib": "^2.8.1",
     "uswds": "^2.14.0",
-    "yaml": "^2.6.0",
+    "yaml": "^2.6.1",
     "zone.js": "^0.15.0"
   },
   "devDependencies": {
@@ -77,18 +77,18 @@
     "@angular/language-service": "19.0.4",
     "@cypress/schematic": "^2.5.2",
     "@cypress/webpack-preprocessor": "^6.0.2",
-    "@nx/cypress": "^19.2.2",
-    "@nx/workspace": "^19.2.2",
+    "@nx/cypress": "^20.2.2",
+    "@nx/workspace": "^20.2.2",
     "@types/aws-sdk": "^2.7.4",
     "@types/d3-array": "^3.2.1",
-    "@types/d3-scale-chromatic": "^3.0.3",
+    "@types/d3-scale-chromatic": "^3.1.0",
     "@types/deep-equal": "^1.0.4",
     "@types/file-saver": "^2.0.7",
     "@types/jest": "^29.5.14",
-    "@types/leaflet": "^1.9.14",
-    "@types/node": "^20.17.6",
-    "@types/plotly.js": "^2.33.5",
-    "@types/three": "^0.152.1",
+    "@types/leaflet": "^1.9.15",
+    "@types/node": "^22.10.2",
+    "@types/plotly.js": "^2.35.1",
+    "@types/three": "^0.171.0",
     "@typescript-eslint/eslint-plugin": "^8.18.1",
     "@typescript-eslint/parser": "^8.18.1",
     "angular-http-server": "^1.12.0",
@@ -103,14 +103,14 @@
     "eslint-plugin-unused-imports": "^4.1.4",
     "fast-deep-equal": "^3.1.3",
     "gts": "^6.0.2",
-    "husky": "^9.1.6",
+    "husky": "^9.1.7",
     "jest": "^29.7.0",
     "jest-environment-jsdom": "^29.7.0",
     "jest-fail-on-console": "^3.3.1",
     "jest-junit": "^16.0.0",
     "jest-preset-angular": "^14.4.2",
     "ng-packagr": "^19.0.1",
-    "prettier": "^3.3.3",
+    "prettier": "^3.4.2",
     "pretty-quick": "^4.0.0",
     "ts-jest": "^29.2.5",
     "ts-node": "^10.9.2",
-- 
GitLab


From 58b0269a29a4552ad13f96d45120cc7fd9ee9902 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 10:54:19 -0700
Subject: [PATCH 12/27] switch to signals

---
 .../building-code-control.component.html      |  4 +-
 .../building-code-control.component.ts        |  5 +--
 .../fault-control.component.html              | 24 ++++++------
 .../fault-control/fault-control.component.ts  | 14 +++----
 .../table-data-panel.component.html           | 10 ++---
 .../table-data-panel.component.ts             | 14 +++----
 .../disagg-contributors.component.html        | 10 ++---
 .../disagg-contributors.component.ts          |  8 ++--
 .../disagg-data/disagg-data.component.html    | 10 ++---
 .../disagg-data/disagg-data.component.ts      | 10 ++---
 .../disagg-summary.component.html             |  8 ++--
 .../disagg-summary.component.ts               |  8 ++--
 .../components/content/content.component.ts   | 14 +++----
 .../config-example.component.html             |  4 +-
 .../config-example.component.ts               |  9 ++---
 .../components/form/form.component.html       |  6 +--
 .../components/form/form.component.ts         | 39 ++++++++-----------
 .../components/map/map.component.ts           |  5 +--
 18 files changed, 90 insertions(+), 112 deletions(-)

diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.html b/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.html
index ee6f0cfe1..343874fac 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.html
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.html
@@ -1,9 +1,9 @@
-@if (control) {
+@if (control()) {
   <!-- Building code -->
   <mat-form-field class="grid-col-12 margin-bottom-3">
     <mat-label>{{ parameters()?.building_code.label }}</mat-label>
 
-    <mat-select [formControl]="control">
+    <mat-select [formControl]="control()">
       @for (buildingCode of buildingCodes(); track buildingCode) {
         <mat-option [value]="buildingCode">
           {{ buildingCode }}
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.ts
index 187f72681..4ada5732a 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.ts
@@ -1,4 +1,4 @@
-import {Component, computed, Input, OnDestroy, OnInit} from '@angular/core';
+import {Component, computed, input, OnDestroy, OnInit} from '@angular/core';
 import {FormControl, ReactiveFormsModule} from '@angular/forms';
 import {MatFormFieldModule} from '@angular/material/form-field';
 import {MatSelectModule} from '@angular/material/select';
@@ -13,8 +13,7 @@ import {AppService} from '../../services/app.service';
   templateUrl: './building-code-control.component.html',
 })
 export class BuildingCodeControlComponent implements OnInit, OnDestroy {
-  @Input({required: true})
-  control: FormControl<string>;
+  readonly control = input.required<FormControl<string>>();
 
   buildingCodes = computed(
     () => this.service.usage()?.response.parameters.building_code.values,
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.html b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.html
index 3aea1bb2e..5deef3ba2 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.html
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.html
@@ -1,37 +1,37 @@
-<mat-label>{{ label }}</mat-label>
+<mat-label>{{ label() }}</mat-label>
 
 <div class="grid-row grid-gap-lg">
   <div class="grid-col-7">
     <mat-slider
       discrete
-      [min]="parameter?.min"
-      [max]="parameter?.max"
+      [min]="parameter()?.min"
+      [max]="parameter()?.max"
       matTooltip="Slide to change fault"
       (change)="service.callService()"
     >
-      <input matSliderThumb [formControl]="control" />
+      <input matSliderThumb [formControl]="control()" />
     </mat-slider>
   </div>
 
   <mat-form-field class="grid-col-5">
-    <mat-label>{{ label }}</mat-label>
+    <mat-label>{{ label() }}</mat-label>
     <input
       matInput
-      [formControl]="control"
+      [formControl]="control()"
       type="number"
-      [min]="parameter?.min"
-      [max]="parameter?.max"
+      [min]="parameter()?.min"
+      [max]="parameter()?.max"
       (input)="service.callService()"
     />
 
-    @if (textSuffix) {
-      <span matTextSuffix>{{ textSuffix }}</span>
+    @if (textSuffix()) {
+      <span matTextSuffix>{{ textSuffix() }}</span>
     }
 
     <mat-error>
       [
-      {{ parameter?.min }},
-      {{ parameter?.max }}
+      {{ parameter()?.min }},
+      {{ parameter()?.max }}
       ]
     </mat-error>
   </mat-form-field>
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.ts
index fc36a7b54..a110e6886 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.ts
@@ -1,4 +1,4 @@
-import {Component, Input} from '@angular/core';
+import {Component, input} from '@angular/core';
 import {FormControl, ReactiveFormsModule} from '@angular/forms';
 import {
   MatError,
@@ -34,20 +34,16 @@ import {AppService} from '../../services/app.service';
 })
 export class FaultControlComponent {
   /** Form control state */
-  @Input({required: true})
-  control: FormControl<number>;
+  readonly control = input.required<FormControl<number>>();
 
   /** Label */
-  @Input()
-  label: string;
+  readonly label = input<string>(undefined);
 
   /** GMM usage parameter with min and max values */
-  @Input({required: true})
-  parameter: GmmUsageParameter;
+  readonly parameter = input.required<GmmUsageParameter>();
 
   /** Input text suffix */
-  @Input()
-  textSuffix: string;
+  readonly textSuffix = input<string>(undefined);
 
   constructor(public service: AppService) {}
 }
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/table-data-panel/table-data-panel.component.html b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/table-data-panel/table-data-panel.component.html
index b0b49ca7b..102dfe79a 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/table-data-panel/table-data-panel.component.html
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/table-data-panel/table-data-panel.component.html
@@ -1,13 +1,13 @@
 <mat-expansion-panel expanded>
   <mat-expansion-panel-header>
-    <mat-panel-title>{{ panelTitle }}</mat-panel-title>
+    <mat-panel-title>{{ panelTitle() }}</mat-panel-title>
   </mat-expansion-panel-header>
 
   <nshmp-lib-ng-export-data-table
-    [table]="tableData"
-    [filename]="filename | lowercase"
-    [buttonText]="buttonText"
+    [table]="tableData()"
+    [filename]="filename() | lowercase"
+    [buttonText]="buttonText()"
   />
 
-  <nshmp-lib-ng-data-table [table]="tableData" />
+  <nshmp-lib-ng-data-table [table]="tableData()" />
 </mat-expansion-panel>
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/table-data-panel/table-data-panel.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/table-data-panel/table-data-panel.component.ts
index dc8e87d44..85b2b08e0 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/table-data-panel/table-data-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/table-data-panel/table-data-panel.component.ts
@@ -1,5 +1,5 @@
 import {LowerCasePipe} from '@angular/common';
-import {Component, Input} from '@angular/core';
+import {Component, input} from '@angular/core';
 import {
   MatExpansionPanel,
   MatExpansionPanelHeader,
@@ -29,18 +29,14 @@ import {
 })
 export class TableDataPanelComponent {
   /** Text for export button */
-  @Input()
-  buttonText = 'Export as CSV';
+  readonly buttonText = input('Export as CSV');
 
   /** Filename for export  */
-  @Input()
-  filename: string;
+  readonly filename = input<string>(undefined);
 
   /** Expansion panel title */
-  @Input()
-  panelTitle: string;
+  readonly panelTitle = input<string>(undefined);
 
   /** Table data */
-  @Input()
-  tableData: TableData[];
+  readonly tableData = input<TableData[]>(undefined);
 }
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.html b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.html
index e13aeab01..f055f198d 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.html
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.html
@@ -1,15 +1,15 @@
 <!-- Disagg contributions -->
-@if (componentData) {
-  @if (componentData?.sources?.length > 0) {
+@if (componentData()) {
+  @if (componentData()?.sources?.length > 0) {
     <div class="disagg-contributions">
       @if (serviceResponse()) {
-        @if (showExportButton) {
+        @if (showExportButton()) {
           <div class="print-display-none">
             <button
               mat-raised-button
               color="primary"
               (click)="
-                service.saveContributions(componentData, form.getRawValue())
+                service.saveContributions(componentData(), form.getRawValue())
               "
             >
               Export as CSV
@@ -45,7 +45,7 @@
               </thead>
 
               <tbody>
-                @for (data of componentData?.sources; track data) {
+                @for (data of componentData()?.sources; track data) {
                   <tr [ngClass]="{'contributor-set': data.type === 'SET'}">
                     @if (data.type === 'SET') {
                       <td nowrap>{{ data?.name }}</td>
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts
index 1e6c1fdea..233c8ada3 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts
@@ -1,5 +1,5 @@
 import {AsyncPipe, DecimalPipe, NgClass} from '@angular/common';
-import {Component, Input} from '@angular/core';
+import {Component, input} from '@angular/core';
 import {MatButton} from '@angular/material/button';
 import {MatDivider} from '@angular/material/divider';
 import {MatIcon} from '@angular/material/icon';
@@ -34,11 +34,9 @@ import {AppService} from '../../services/app.service';
 })
 export class DisaggContributorsComponent {
   /** Disaggregation component data state */
-  @Input({required: true})
-  componentData: DisaggComponentData;
+  readonly componentData = input.required<DisaggComponentData>();
 
-  @Input()
-  showExportButton = true;
+  readonly showExportButton = input(true);
 
   /** Form field state */
   form = this.service.formGroup;
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.html b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.html
index e4e80db7e..60fad1379 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.html
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.html
@@ -1,13 +1,13 @@
-@if (componentData) {
-  @if (componentData.data.length > 0) {
-    @if (showExportButton) {
+@if (componentData()) {
+  @if (componentData().data.length > 0) {
+    @if (showExportButton()) {
       <!-- Export button -->
       <div class="print-display-none">
         <button
           class="export-button"
           mat-raised-button
           color="primary"
-          [disabled]="componentData.data === null"
+          [disabled]="componentData().data === null"
           (click)="service.saveComponentData()"
         >
           Export Data as CSV
@@ -30,7 +30,7 @@
             </tr>
           </thead>
           <tbody>
-            @for (data of componentData.data; track data) {
+            @for (data of componentData().data; track data) {
               <tr>
                 <td noWrap>{{ data.r }}</td>
                 <td nowrap>{{ data.m }}</td>
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
index 1dc943d7c..7aea0bb9e 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
@@ -1,5 +1,5 @@
 import {AsyncPipe} from '@angular/common';
-import {Component, computed, Input} from '@angular/core';
+import {Component, computed, input} from '@angular/core';
 import {MatButton} from '@angular/material/button';
 import {MatDivider} from '@angular/material/divider';
 import {
@@ -17,11 +17,9 @@ import {AppService} from '../../services/app.service';
 })
 export class DisaggDataComponent {
   /** Disaggregation component data state */
-  @Input({required: true})
-  componentData: DisaggComponentData;
+  readonly componentData = input.required<DisaggComponentData>();
 
-  @Input()
-  showExportButton = true;
+  readonly showExportButton = input(true);
 
   metadata = computed(() => this.service.serviceResponse().response.metadata);
 
@@ -40,7 +38,7 @@ export class DisaggDataComponent {
   }
 
   epsilonKeys(): string[] {
-    const keys = this.componentData.summary.find(
+    const keys = this.componentData().summary.find(
       data => data.name.toLowerCase() === 'epsilon keys',
     );
 
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.html b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.html
index 2ed8ee819..a49c9e9a6 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.html
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.html
@@ -1,13 +1,13 @@
-@if (componentData) {
+@if (componentData()) {
   <div class="disagg-summaries">
     <!-- Summaries -->
     <div class="summary-group">
-      @if (showExportButton) {
+      @if (showExportButton()) {
         <div class="print-display-none">
           <button
             mat-raised-button
             color="primary"
-            (click)="service.saveSummary(componentData, form.getRawValue())"
+            (click)="service.saveSummary(componentData(), form.getRawValue())"
           >
             Export as Text
           </button>
@@ -17,7 +17,7 @@
       }
 
       <div class="grid-row">
-        @for (summary of componentData?.summary; track summary) {
+        @for (summary of componentData()?.summary; track summary) {
           <div
             class="grid-col-12 mobile:grid-col-6 desktop-lg:grid-col-4 widescreen:grid-col-3 summary-values print-flex-basis-half"
           >
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts
index b4b750085..905d72683 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts
@@ -1,5 +1,5 @@
 import {AsyncPipe} from '@angular/common';
-import {Component, Input} from '@angular/core';
+import {Component, input} from '@angular/core';
 import {MatButton} from '@angular/material/button';
 import {MatDivider} from '@angular/material/divider';
 import {MatList, MatListItem} from '@angular/material/list';
@@ -18,11 +18,9 @@ import {AppService} from '../../services/app.service';
 })
 export class DisaggSummaryComponent {
   /** Disaggregation component data state */
-  @Input({required: true})
-  componentData: DisaggComponentData;
+  readonly componentData = input.required<DisaggComponentData>();
 
-  @Input()
-  showExportButton = true;
+  readonly showExportButton = input(true);
 
   /** Form field state */
   form = this.service.formGroup;
diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.ts b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.ts
index ed7f2d562..a93f976ca 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.ts
@@ -5,7 +5,7 @@ import {
   effect,
   ElementRef,
   OnDestroy,
-  ViewChild,
+  viewChild,
 } from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {MatButtonToggleGroup} from '@angular/material/button-toggle';
@@ -54,8 +54,7 @@ export class ContentComponent implements OnDestroy, AfterViewInit {
   jobStatus = JobStatus;
 
   /** Element reference to logs element */
-  @ViewChild('logs')
-  logsEl: ElementRef<HTMLDivElement>;
+  readonly logsEl = viewChild<ElementRef<HTMLDivElement>>('logs');
 
   /** The log service response */
   serviceResponse = this.service.serviceResponse;
@@ -105,9 +104,10 @@ export class ContentComponent implements OnDestroy, AfterViewInit {
   scrollBottom(): void {
     /* Wait for log to display and scroll */
     setTimeout(() => {
-      if (this.logsEl) {
-        this.logsEl.nativeElement.scroll({
-          top: this.logsEl.nativeElement.scrollHeight,
+      const logsEl = this.logsEl();
+      if (logsEl) {
+        logsEl.nativeElement.scroll({
+          top: logsEl.nativeElement.scrollHeight,
         });
       }
     }, 0);
@@ -117,7 +117,7 @@ export class ContentComponent implements OnDestroy, AfterViewInit {
    * Scroll to top of logs.
    */
   scrollTop() {
-    this.logsEl.nativeElement.scroll({top: 0});
+    this.logsEl().nativeElement.scroll({top: 0});
   }
 
   /**
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config-example/config-example.component.html b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config-example/config-example.component.html
index 063664e24..df65bcd8f 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config-example/config-example.component.html
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config-example/config-example.component.html
@@ -1,7 +1,7 @@
 <div
   class="desktop:grid-offset-1 desktop:grid-col-10 grid-col-12 example-config"
 >
-  <h2>{{ type }} File Example: Calc Config Object</h2>
+  <h2>{{ type() }} File Example: Calc Config Object</h2>
 
   <pre class="code-block">
     <code>
@@ -13,7 +13,7 @@
 <div
   class="desktop:grid-offset-1 desktop:grid-col-10 grid-col-12 example-config"
 >
-  <h2>{{ type }} File Example: Calc Config Array</h2>
+  <h2>{{ type() }} File Example: Calc Config Array</h2>
 
   <pre class="code-block">
     <code>
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config-example/config-example.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config-example/config-example.component.ts
index 1d22c9a52..6379492ba 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config-example/config-example.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config-example/config-example.component.ts
@@ -1,4 +1,4 @@
-import {Component, Input, OnInit} from '@angular/core';
+import {Component, input, OnInit} from '@angular/core';
 import * as YAML from 'yaml';
 
 import {AppService} from '../../services/app.service';
@@ -14,8 +14,7 @@ import {AppService} from '../../services/app.service';
 })
 export class ConfigExampleComponent implements OnInit {
   /** The example type */
-  @Input()
-  type = 'YAML' || 'JSON';
+  readonly type = input('YAML' || 'JSON');
 
   /** JSON example */
   exampleJson = `\n${JSON.stringify(this.service.exampleConfig(), null, 2)}`;
@@ -34,8 +33,8 @@ export class ConfigExampleComponent implements OnInit {
   constructor(private service: AppService) {}
 
   ngOnInit(): void {
-    this.example = this.type === 'YAML' ? this.exampleYml : this.exampleJson;
+    this.example = this.type() === 'YAML' ? this.exampleYml : this.exampleJson;
     this.exampleArray =
-      this.type === 'YAML' ? this.exampleYmlArray : this.exampleJsonArray;
+      this.type() === 'YAML' ? this.exampleYmlArray : this.exampleJsonArray;
   }
 }
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.html b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.html
index f168af7d0..a702754e0 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.html
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.html
@@ -20,13 +20,13 @@
               <div>
                 Already have the below information? <br />
                 Import the
-                <a (click)="service.activeTab(configTab.position)">
+                <a (click)="service.activeTab(configTab().position)">
                   configuration
                 </a>
                 as
-                <a (click)="service.activeTab(jsonTab.position)">JSON</a>
+                <a (click)="service.activeTab(jsonTab().position)">JSON</a>
                 or
-                <a (click)="service.activeTab(yamlTab.position)">YAML</a>
+                <a (click)="service.activeTab(yamlTab().position)">YAML</a>
               </div>
               <br />
               <input
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
index 1f257d88c..9ed517d17 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
@@ -3,10 +3,10 @@ import {
   Component,
   effect,
   ElementRef,
-  Input,
+  input,
   OnDestroy,
   OnInit,
-  ViewChild,
+  viewChild,
 } from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {MatButton, MatIconAnchor} from '@angular/material/button';
@@ -81,28 +81,24 @@ import {JobSubmittedComponent} from '../job-submitted/job-submitted.component';
 })
 export class FormComponent implements OnInit, OnDestroy {
   /** The angular material config tab  */
-  @Input()
-  configTab: MatTab;
+  readonly configTab = input<MatTab>(undefined);
 
   /** The angular material json example tab */
-  @Input()
-  jsonTab: MatTab;
+  readonly jsonTab = input<MatTab>(undefined);
 
   /** THe angular material yaml example tab */
-  @Input()
-  yamlTab: MatTab;
+  readonly yamlTab = input<MatTab>(undefined);
 
   /** The element reference for the calculation configuration input element */
-  @ViewChild('calcConfigEl')
-  calcConfigEl: ElementRef<HTMLInputElement>;
+  readonly calcConfigEl =
+    viewChild<ElementRef<HTMLInputElement>>('calcConfigEl');
 
   /** The element reference for the configuration input element */
-  @ViewChild('configEl')
-  configEl: ElementRef<HTMLInputElement>;
+  readonly configEl = viewChild<ElementRef<HTMLInputElement>>('configEl');
 
   /** The element reference to the upload site file input */
-  @ViewChild('uploadSiteFileEl')
-  uploadSiteEl: ElementRef<HTMLInputElement>;
+  readonly uploadSiteEl =
+    viewChild<ElementRef<HTMLInputElement>>('uploadSiteFileEl');
 
   /** Common EC2 instance types */
   commonInstances = commonInstances();
@@ -178,25 +174,24 @@ export class FormComponent implements OnInit, OnDestroy {
    * Dispatch action to import calculation configuration file.
    */
   importCalcConfigFile() {
-    this.service.importCalcConfigFile(this.calcConfigEl.nativeElement.files);
+    this.service.importCalcConfigFile(this.calcConfigEl().nativeElement.files);
   }
 
   /**
    * Dispatch aciton to import configuration file.
    */
   importConfigFile() {
-    this.service.importConfigFile(this.configEl.nativeElement.files);
-    this.configEl.nativeElement.value = '';
+    const configEl = this.configEl();
+    this.service.importConfigFile(configEl.nativeElement.files);
+    configEl.nativeElement.value = '';
   }
 
   /**
    * Dispatch action to upload site file.
    */
   importSiteFile() {
-    this.service.uploadFiles(
-      this.uploadSiteEl.nativeElement.files,
-      FileType.SITE,
-    );
-    this.uploadSiteEl.nativeElement.value = '';
+    const uploadSiteEl = this.uploadSiteEl();
+    this.service.uploadFiles(uploadSiteEl.nativeElement.files, FileType.SITE);
+    uploadSiteEl.nativeElement.value = '';
   }
 }
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts b/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
index d4a3e5696..4157b320a 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
@@ -1,5 +1,5 @@
 import {AsyncPipe} from '@angular/common';
-import {Component, effect, ElementRef, NgZone, ViewChild} from '@angular/core';
+import {Component, effect, ElementRef, NgZone, viewChild} from '@angular/core';
 import {LeafletModule} from '@bluehalo/ngx-leaflet';
 import {
   mapUtils,
@@ -49,8 +49,7 @@ export class MapComponent {
   /** Map options state */
   mapOptions = this.service.mapOptions;
 
-  @ViewChild('map', {static: true})
-  mapEl: ElementRef<HTMLElement>;
+  readonly mapEl = viewChild<ElementRef<HTMLElement>>('map');
 
   constructor(
     public service: AppService,
-- 
GitLab


From 5340a5608f0f9db8ceeea4ef43037f6d03d1cf5a Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 12:44:37 -0700
Subject: [PATCH 13/27] add div

---
 .../components/plots/plots.component.html     | 81 ++++++++++---------
 1 file changed, 42 insertions(+), 39 deletions(-)

diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.html b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.html
index 757d3e63d..ac634aeb3 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.html
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.html
@@ -8,52 +8,55 @@
 
       <mat-divider />
 
-      @if (groundMotionPlotData()) {
-        <nshmp-lib-ng-plot [plot]="groundMotionPlotData()" />
-      }
+      <div>
+        @if (groundMotionPlotData()) {
+          <nshmp-lib-ng-plot [plot]="groundMotionPlotData()" />
+        }
 
-      <mat-divider />
+        <div>asdasda</div>
+        <mat-divider />
 
-      <!-- Fault plot and controls-->
-      <div class="fault grid-row">
-        <!-- Fault plot -->
-        <div class="fault-plot grid-col-12 tablet-lg:grid-col-7">
-          @if (faultPlotData()) {
-            <nshmp-lib-ng-plot [plot]="faultPlotData()" />
-          }
-        </div>
+        <!-- Fault plot and controls-->
+        <div class="fault grid-row">
+          <!-- Fault plot -->
+          <div class="fault-plot grid-col-12 tablet-lg:grid-col-7">
+            @if (faultPlotData()) {
+              <nshmp-lib-ng-plot [plot]="faultPlotData()" />
+            }
+          </div>
 
-        <mat-divider [vertical]="true" />
+          <mat-divider [vertical]="true" />
 
-        <!-- Fault controls -->
-        <div class="fault-controls grid-col-12 tablet-lg:grid-col">
-          <mat-label class="section-label">Source Geometry</mat-label>
+          <!-- Fault controls -->
+          <div class="fault-controls grid-col-12 tablet-lg:grid-col">
+            <mat-label class="section-label">Source Geometry</mat-label>
 
-          <form [formGroup]="formState">
-            <!-- Dip -->
-            <app-fault-control
-              [control]="formState.controls.dip"
-              label="Dip"
-              [parameter]="dipParameter()"
-              textSuffix="°"
-            />
+            <form [formGroup]="formState">
+              <!-- Dip -->
+              <app-fault-control
+                [control]="formState.controls.dip"
+                label="Dip"
+                [parameter]="dipParameter()"
+                textSuffix="°"
+              />
 
-            <!-- Width -->
-            <app-fault-control
-              [control]="formState.controls.width"
-              label="Width"
-              [parameter]="widthParameter()"
-              textSuffix="km"
-            />
+              <!-- Width -->
+              <app-fault-control
+                [control]="formState.controls.width"
+                label="Width"
+                [parameter]="widthParameter()"
+                textSuffix="km"
+              />
 
-            <!-- zTop -->
-            <app-fault-control
-              [control]="formState.controls.zTor"
-              label="zTor"
-              [parameter]="zTorParameter()"
-              textSuffix="km"
-            />
-          </form>
+              <!-- zTop -->
+              <app-fault-control
+                [control]="formState.controls.zTor"
+                label="zTor"
+                [parameter]="zTorParameter()"
+                textSuffix="km"
+              />
+            </form>
+          </div>
         </div>
       </div>
     </mat-expansion-panel>
-- 
GitLab


From 05d3c3d25c3f493a7381e69368a9b8513eea4afc Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 12:45:14 -0700
Subject: [PATCH 14/27] add redraw

---
 .../geo-disagg/geo-disagg.component.ts          | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts
index 2c42ce64b..697ec4c5d 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/geo-disagg/geo-disagg.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, effect, ViewEncapsulation} from '@angular/core';
 import {LeafletModule} from '@bluehalo/ngx-leaflet';
 import {
@@ -8,6 +7,7 @@ import {
 import {baseLayer, MapBaseLayer} from '@ghsc/nshmp-utils-ts/libs/leaflet';
 import {DisaggResponse} from '@ghsc/nshmp-utils-ts/libs/nshmp-haz/www/disagg-service';
 import * as L from 'leaflet';
+import {} from 'rxjs';
 
 import {AppService} from '../../services/app.service';
 
@@ -23,7 +23,7 @@ const maxBounds = new L.LatLngBounds(southWestBounds, northEastBounds);
  */
 @Component({
   encapsulation: ViewEncapsulation.None,
-  imports: [LeafletModule, AsyncPipe, NshmpLibNgMapBaseLayersControlComponent],
+  imports: [LeafletModule, NshmpLibNgMapBaseLayersControlComponent],
   selector: 'app-geo-disagg',
   styleUrl: './geo-disagg.component.scss',
   templateUrl: './geo-disagg.component.html',
@@ -70,6 +70,8 @@ export class GeoDisaggComponent {
           this.siteLayer().bounds,
         ]);
       }
+
+      this.mapRedraw();
     });
   }
 
@@ -80,6 +82,7 @@ export class GeoDisaggComponent {
    */
   onBaseLayerChange(layer: MapBaseLayer) {
     this.baseLayer = baseLayer(layer);
+    this.mapRedraw();
   }
 
   /**
@@ -96,6 +99,8 @@ export class GeoDisaggComponent {
       new mapUtils.MousePosition().addTo(map);
     }
     L.control.scale({position: 'bottomleft'}).addTo(map);
+
+    this.mapRedraw();
   }
 
   /**
@@ -202,6 +207,8 @@ export class GeoDisaggComponent {
       });
     });
 
+    this.mapRedraw();
+
     return barLayers;
   }
 
@@ -227,6 +234,8 @@ export class GeoDisaggComponent {
       });
     });
 
+    this.mapRedraw();
+
     return faultLayer;
   }
 
@@ -309,6 +318,10 @@ export class GeoDisaggComponent {
     this.createBarLayers(serviceResponse);
   }
 
+  private mapRedraw(): void {
+    setTimeout(() => this.map.invalidateSize(true), 0);
+  }
+
   /**
    * Set the bounds.
    *
-- 
GitLab


From b4d515317469425f5a5fd7fb99c80fa9c2975099 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 12:45:23 -0700
Subject: [PATCH 15/27] add interface

---
 .../config-example/config-example.component.ts     | 14 +++++++++++---
 .../components/content/content.component.html      |  4 ++--
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config-example/config-example.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config-example/config-example.component.ts
index 6379492ba..09d9b2b8a 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config-example/config-example.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config-example/config-example.component.ts
@@ -3,6 +3,11 @@ import * as YAML from 'yaml';
 
 import {AppService} from '../../services/app.service';
 
+export enum ExampleType {
+  JSON = 'JSON',
+  YAML = 'YAML',
+}
+
 /**
  * YAML or JSON example of HTTP POST to run hazard on AWS.
  */
@@ -14,7 +19,7 @@ import {AppService} from '../../services/app.service';
 })
 export class ConfigExampleComponent implements OnInit {
   /** The example type */
-  readonly type = input('YAML' || 'JSON');
+  readonly type = input<ExampleType>();
 
   /** JSON example */
   exampleJson = `\n${JSON.stringify(this.service.exampleConfig(), null, 2)}`;
@@ -33,8 +38,11 @@ export class ConfigExampleComponent implements OnInit {
   constructor(private service: AppService) {}
 
   ngOnInit(): void {
-    this.example = this.type() === 'YAML' ? this.exampleYml : this.exampleJson;
+    this.example =
+      this.type() === ExampleType.YAML ? this.exampleYml : this.exampleJson;
     this.exampleArray =
-      this.type() === 'YAML' ? this.exampleYmlArray : this.exampleJsonArray;
+      this.type() === ExampleType.YAML
+        ? this.exampleYmlArray
+        : this.exampleJsonArray;
   }
 }
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/content/content.component.html b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/content/content.component.html
index 29ed91b7f..9f1fca03a 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/content/content.component.html
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/content/content.component.html
@@ -23,10 +23,10 @@
   </mat-tab>
 
   <mat-tab #jsonTab label="JSON Example">
-    <app-config-example type="JSON" />
+    <app-config-example [type]="Type.JSON" />
   </mat-tab>
 
   <mat-tab #yamlTab label="YAML Example">
-    <app-config-example type="YAML" />
+    <app-config-example [type]="Type.YAML" />
   </mat-tab>
 </mat-tab-group>
-- 
GitLab


From b9e139c774a98c005bcbe4efb082a6400aed0d2a Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 12:45:30 -0700
Subject: [PATCH 16/27] add intrerface

---
 .../components/content/content.component.ts                | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/content/content.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/content/content.component.ts
index df4693423..1c0e95110 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/content/content.component.ts
@@ -4,7 +4,10 @@ import {MatTab, MatTabGroup} from '@angular/material/tabs';
 
 import {AppService} from '../../services/app.service';
 import {ConfigComponent} from '../config/config.component';
-import {ConfigExampleComponent} from '../config-example/config-example.component';
+import {
+  ConfigExampleComponent,
+  ExampleType,
+} from '../config-example/config-example.component';
 import {FormComponent} from '../form/form.component';
 import {HistoryComponent} from '../history/history.component';
 
@@ -26,5 +29,7 @@ import {HistoryComponent} from '../history/history.component';
   templateUrl: './content.component.html',
 })
 export class ContentComponent {
+  Type = ExampleType;
+
   constructor(public appService: AppService) {}
 }
-- 
GitLab


From cf9ca1e9eb1b01db549b31d366167e2b14422286 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 12:59:06 -0700
Subject: [PATCH 17/27] remove unused imports

---
 .../control-panel-hazard.component.ts         | 30 ++++++++-----------
 .../control-panel-input.component.ts          |  2 --
 .../components/content/content.component.ts   |  1 -
 .../parameter-summary.component.ts            |  2 +-
 .../components/plots/plots.component.ts       |  1 -
 .../hazard/dynamic-compare/app.component.ts   |  1 -
 .../components/content/content.component.ts   |  1 -
 .../control-panel/control-panel.component.ts  |  3 --
 .../hazard-data/hazard-data.component.ts      |  2 +-
 .../parameter-summary.component.ts            |  2 +-
 .../spectra-data/spectra-data.component.ts    |  2 +-
 .../control-panel/control-panel.component.ts  |  1 -
 .../components/plot/plot.component.ts         |  1 -
 .../parameter-summary.component.ts            |  2 +-
 .../components/plots/plots.component.ts       |  1 -
 .../components/content/content.component.ts   |  1 -
 .../control-panel/control-panel.component.ts  |  1 -
 .../parameter-summary.component.ts            |  2 +-
 .../components/plots/plots.component.ts       |  1 -
 .../source-parameters.component.ts            |  9 +-----
 .../components/content/content.component.ts   |  1 -
 .../control-panel/control-panel.component.ts  |  5 ----
 .../parameter-summary.component.ts            |  2 +-
 .../components/plots/plots.component.ts       |  1 -
 .../source-parameters.component.ts            |  9 +-----
 .../src/app/hazard/disagg/app.component.ts    |  1 -
 .../components/content/content.component.ts   |  1 -
 .../control-panel/control-panel.component.ts  |  1 -
 .../disagg-contributors.component.ts          |  1 -
 .../disagg-data/disagg-data.component.ts      |  2 +-
 .../disagg-summary.component.ts               |  2 +-
 .../parameter-summary.component.ts            |  2 +-
 .../src/app/hazard/dynamic/app.component.ts   |  1 -
 .../components/content/content.component.ts   |  1 -
 .../control-panel/control-panel.component.ts  |  1 -
 .../parameter-summary.component.ts            |  2 +-
 .../components/plots/plots.component.ts       |  1 -
 .../control-panel/control-panel.component.ts  |  1 -
 .../curve-data/curve-data.component.ts        |  1 -
 .../parameter-summary.component.ts            |  2 +-
 .../components/plots/plots.component.ts       |  1 -
 .../spectrum-data/spectrum-data.component.ts  |  1 -
 .../components/form/form.component.ts         |  1 -
 .../components/content/content.component.ts   |  1 -
 .../src/app/source/mfd/app.component.ts       |  1 -
 .../mfd/components/data/data.component.ts     |  2 +-
 .../logic-tree/logic-tree.component.ts        |  2 +-
 .../parameter-summary.component.ts            |  2 +-
 .../mfd/components/plots/plots.component.ts   |  1 -
 .../app/source/model-maps/app.component.ts    |  1 -
 .../components/map/map.component.ts           |  1 -
 .../plot-settings-panel.component.ts          |  8 +----
 tsconfig.json                                 |  8 ++++-
 53 files changed, 37 insertions(+), 97 deletions(-)

diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-hazard/control-panel-hazard.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-hazard/control-panel-hazard.component.ts
index e800bea84..114dffeaf 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-hazard/control-panel-hazard.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-hazard/control-panel-hazard.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, OnDestroy, OnInit, Signal} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {MatFormFieldModule} from '@angular/material/form-field';
@@ -32,7 +31,6 @@ import {BuildingCodeControlComponent} from '../building-code-control/building-co
     NshmpLibNgMapSelectSiteComponent,
     NshmpLibNgHazardSiteClassFormComponent,
     NshmpLibNgControlPanelButtonsComponent,
-    AsyncPipe,
     MatFormFieldModule,
     ReactiveFormsModule,
     MatSelectModule,
@@ -43,16 +41,16 @@ import {BuildingCodeControlComponent} from '../building-code-control/building-co
   templateUrl: './control-panel-hazard.component.html',
 })
 export class ControlPanelHazardComponent implements OnInit, OnDestroy {
+  private subs: Subscription[] = [];
+
+  /** Form field state */
+  formGroup = this.service.hazardFormGroup;
+  /** List of imt `Parameter`s */
+  imts = computed(() => this.service.hazardUsage()?.response?.models.imts);
   /** Max and min bounds for return periods */
   returnPeriodBounds = RETURN_PERIOD_BOUNDS;
   /** List of return periods */
   returnPeriods = RETURN_PERIODS;
-  /** Site class select menu holder */
-  siteClassPlaceHolder = nshmpUtils.selectPlaceHolder();
-
-  /** Form field state */
-  formGroup = this.service.hazardFormGroup;
-
   /** Data for select site component */
   selectSiteData: Signal<SelectSiteDialogData> = computed(() => {
     const usage = this.service.hazardUsage();
@@ -69,19 +67,19 @@ export class ControlPanelHazardComponent implements OnInit, OnDestroy {
       sitesUrl: `${nshmService.url}${services.sites}?raw=true`,
     };
   });
-
+  /** Site class select menu holder */
+  siteClassPlaceHolder = nshmpUtils.selectPlaceHolder();
   /** List of site class `Parameter`s */
   siteClasses = computed(
     () => this.service.hazardUsage()?.response?.models.siteClasses,
   );
 
-  /** List of imt `Parameter`s */
-  imts = computed(() => this.service.hazardUsage()?.response?.models.imts);
-
-  private subs: Subscription[] = [];
-
   constructor(public service: AppService) {}
 
+  ngOnDestroy(): void {
+    this.subs.forEach(sub => sub.unsubscribe());
+  }
+
   ngOnInit(): void {
     const controls = this.formGroup.controls;
 
@@ -110,10 +108,6 @@ export class ControlPanelHazardComponent implements OnInit, OnDestroy {
     );
   }
 
-  ngOnDestroy(): void {
-    this.subs.forEach(sub => sub.unsubscribe());
-  }
-
   onSubmit() {
     this.service.callHazardService();
   }
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts
index 20225cb58..7653602b1 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts
@@ -17,9 +17,7 @@ import {BuildingCodeControlComponent} from '../building-code-control/building-co
     MatSelectModule,
     MatInputModule,
     ReactiveFormsModule,
-    MatIcon,
     MatButtonModule,
-    MatDivider,
     NshmpLibNgControlPanelButtonsComponent,
     MatHint,
     MatError,
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts
index 97e98e8b0..3fd98af15 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts
@@ -15,7 +15,6 @@ import {PlotsComponent} from '../plots/plots.component';
     MatTab,
     MatTabContent,
     PlotsComponent,
-    AsyncPipe,
   ],
   selector: 'app-content',
   styleUrl: './content.component.scss',
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/parameter-summary/parameter-summary.component.ts
index b5ed38694..e0fc0d330 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/parameter-summary/parameter-summary.component.ts
@@ -9,7 +9,7 @@ import {AppService} from '../../services/app.service';
  * List of control panel values.
  */
 @Component({
-  imports: [MatList, MatListItem, AsyncPipe],
+  imports: [MatList, MatListItem],
   selector: 'app-parameter-summary',
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts
index f667952fa..b28b6228b 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts
@@ -41,7 +41,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     MatLabel,
     FaultControlComponent,
     ParameterSummaryComponent,
-    AsyncPipe,
     ReactiveFormsModule,
   ],
   selector: 'app-plots',
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/app.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/app.component.ts
index dd7c17976..3a4facc62 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/app.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/app.component.ts
@@ -31,7 +31,6 @@ import {AppService} from './services/app.service';
     ContentComponent,
     PlotSettingsPanelComponent,
     AboutComponent,
-    AsyncPipe,
   ],
   selector: 'app-app',
   styleUrl: './app.component.scss',
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/content/content.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/content/content.component.ts
index 2a1e683a4..b2426d420 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/content/content.component.ts
@@ -21,7 +21,6 @@ import {SpectraDataComponent} from '../spectra-data/spectra-data.component';
     PlotsComponent,
     HazardDataComponent,
     SpectraDataComponent,
-    AsyncPipe,
   ],
   selector: 'app-content',
   styleUrl: './content.component.scss',
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts
index 164bb3dad..1a45b6a5e 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts
@@ -39,8 +39,6 @@ import {AppService} from '../../services/app.service';
     MatLabel,
     MatSelect,
     MatOption,
-    AsyncPipe,
-    MatInput,
     NshmpLibNgHazardModelFormComponent,
     NshmpLibNgHazardLocationFormComponent,
     NshmpLibNgMapSelectSiteComponent,
@@ -50,7 +48,6 @@ import {AppService} from '../../services/app.service';
     NshmpLibNgHazardMaxDirectionFormComponent,
     NshmpLibNgControlPanelButtonsComponent,
     ReactiveFormsModule,
-    MatError,
   ],
   selector: 'app-control-panel',
   styleUrl: './control-panel.component.scss',
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts
index 39d15eaf1..9684a45e8 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts
@@ -13,7 +13,7 @@ import {TableDataPanelComponent} from '../table-data-panel/table-data-panel.comp
  * Component with tables for hazard data.
  */
 @Component({
-  imports: [MatAccordion, TableDataPanelComponent, AsyncPipe],
+  imports: [MatAccordion, TableDataPanelComponent],
   selector: 'app-hazard-data',
   styleUrl: './hazard-data.component.scss',
   templateUrl: './hazard-data.component.html',
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts
index d9d5bb034..db53a546a 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts
@@ -7,7 +7,7 @@ import {nshmpUtils, returnPeriodAltName} from '@ghsc/nshmp-lib-ng/nshmp';
 import {AppService} from '../../services/app.service';
 
 @Component({
-  imports: [MatList, MatListItem, AsyncPipe],
+  imports: [MatList, MatListItem],
   selector: 'app-parameter-summary',
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts
index 9b0a6465d..8abb0276c 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts
@@ -52,7 +52,7 @@ interface ToTableDataOptions {
  * Component with tables for spectra data.
  */
 @Component({
-  imports: [MatAccordion, TableDataPanelComponent, AsyncPipe],
+  imports: [MatAccordion, TableDataPanelComponent],
   selector: 'app-spectra-data',
   styleUrl: './spectra-data.component.scss',
   templateUrl: './spectra-data.component.html',
diff --git a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts
index 66f1df21f..5ed137933 100644
--- a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts
@@ -22,7 +22,6 @@ import {AppService} from '../../services/app.service';
     MatInput,
     MatError,
     MatCheckbox,
-    AsyncPipe,
     NshmpLibNgControlPanelButtonsComponent,
     ReactiveFormsModule,
   ],
diff --git a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot/plot.component.ts b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot/plot.component.ts
index 7f6684165..c5bca5e28 100644
--- a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot/plot.component.ts
+++ b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot/plot.component.ts
@@ -28,7 +28,6 @@ import {AppService} from '../../services/app.service';
     MatExpansionPanelHeader,
     MatExpansionPanelTitle,
     MatDivider,
-    AsyncPipe,
   ],
   selector: 'app-plot',
   styleUrl: './plot.component.scss',
diff --git a/projects/nshmp-apps/src/app/gmm/distance/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/gmm/distance/components/parameter-summary/parameter-summary.component.ts
index fbc6b2021..7be566813 100644
--- a/projects/nshmp-apps/src/app/gmm/distance/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/distance/components/parameter-summary/parameter-summary.component.ts
@@ -9,7 +9,7 @@ import {AppService} from '../../services/app.service';
  * Summary of parameters entered, form field values to call service.
  */
 @Component({
-  imports: [MatList, MatListItem, AsyncPipe],
+  imports: [MatList, MatListItem],
   selector: 'app-parameter-summary',
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
diff --git a/projects/nshmp-apps/src/app/gmm/distance/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/gmm/distance/components/plots/plots.component.ts
index f9dbd7101..055e817cd 100644
--- a/projects/nshmp-apps/src/app/gmm/distance/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/distance/components/plots/plots.component.ts
@@ -30,7 +30,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     MatExpansionPanelTitle,
     MatDivider,
     ParameterSummaryComponent,
-    AsyncPipe,
   ],
   selector: 'app-plots',
   styleUrl: './plots.component.scss',
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts
index ef9dde0cb..03e0a748c 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts
@@ -20,7 +20,6 @@ import {PlotsComponent} from '../plots/plots.component';
     MatTab,
     MatTabContent,
     PlotsComponent,
-    AsyncPipe,
   ],
   selector: 'app-content',
   styleUrl: './content.component.scss',
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts
index 28a3e1f12..95ec7b5ac 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts
@@ -40,7 +40,6 @@ import {SourceParametersComponent} from '../source-parameters/source-parameters.
     SourceParametersComponent,
     PathParametersComponent,
     SiteParametersComponent,
-    AsyncPipe,
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/parameter-summary/parameter-summary.component.ts
index ce96d1808..f7f3593b5 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/parameter-summary/parameter-summary.component.ts
@@ -9,7 +9,7 @@ import {AppService} from '../../services/app.service';
  * Summary of parameters entered, form field values to call service.
  */
 @Component({
-  imports: [MatList, MatListItem, AsyncPipe],
+  imports: [MatList, MatListItem],
   selector: 'app-parameter-summary',
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/plots/plots.component.ts
index 45cb11aa3..e2c0338e0 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/plots/plots.component.ts
@@ -30,7 +30,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     MatExpansionPanelTitle,
     MatDivider,
     ParameterSummaryComponent,
-    AsyncPipe,
   ],
   selector: 'app-plots',
   styleUrl: './plots.component.scss',
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/source-parameters/source-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/source-parameters/source-parameters.component.ts
index 8134e7641..bb693f433 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/source-parameters/source-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/source-parameters/source-parameters.component.ts
@@ -11,14 +11,7 @@ import {AppService} from '../../services/app.service';
  * Control panel form fields for GMM source parameters.
  */
 @Component({
-  imports: [
-    MatLabel,
-    MatFormField,
-    MatInput,
-    MatError,
-    AsyncPipe,
-    ReactiveFormsModule,
-  ],
+  imports: [MatLabel, MatFormField, MatInput, MatError, ReactiveFormsModule],
   selector: 'app-source-parameters',
   styleUrl: './source-parameters.component.scss',
   templateUrl: './source-parameters.component.html',
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts
index 5e2df3a62..688f5c8ec 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts
@@ -20,7 +20,6 @@ import {PlotsComponent} from '../plots/plots.component';
     MatTab,
     MatTabContent,
     PlotsComponent,
-    AsyncPipe,
   ],
   selector: 'app-content',
   styleUrl: './content.component.scss',
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts
index 0ba7be33d..ce4591b25 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts
@@ -31,15 +31,10 @@ import {SourceParametersComponent} from '../source-parameters/source-parameters.
     NshmpLibNgGmmPlotOptionsControlPanelComponent,
     NshmpLibNgGmmMultiParamMenuComponent,
     NshmpLibNgControlPanelButtonsComponent,
-    MatFormField,
-    MatLabel,
-    MatSelect,
-    MatOption,
     EventParametersComponent,
     SourceParametersComponent,
     PathParametersComponent,
     SiteParametersComponent,
-    AsyncPipe,
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/parameter-summary/parameter-summary.component.ts
index ce96d1808..f7f3593b5 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/parameter-summary/parameter-summary.component.ts
@@ -9,7 +9,7 @@ import {AppService} from '../../services/app.service';
  * Summary of parameters entered, form field values to call service.
  */
 @Component({
-  imports: [MatList, MatListItem, AsyncPipe],
+  imports: [MatList, MatListItem],
   selector: 'app-parameter-summary',
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts
index 31567a6fb..2251df2c1 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts
@@ -33,7 +33,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     MatExpansionPanelTitle,
     MatDivider,
     ParameterSummaryComponent,
-    AsyncPipe,
   ],
   selector: 'app-plots',
   styleUrl: './plots.component.scss',
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/source-parameters/source-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/source-parameters/source-parameters.component.ts
index 6123ce5f0..d8112a781 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/source-parameters/source-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/source-parameters/source-parameters.component.ts
@@ -11,14 +11,7 @@ import {AppService} from '../../services/app.service';
  * Control panel form fields for GMM source parameters.
  */
 @Component({
-  imports: [
-    MatLabel,
-    MatFormField,
-    MatInput,
-    MatError,
-    AsyncPipe,
-    ReactiveFormsModule,
-  ],
+  imports: [MatLabel, MatFormField, MatInput, MatError, ReactiveFormsModule],
   selector: 'app-source-parameters',
   styleUrl: './source-parameters.component.scss',
   templateUrl: './source-parameters.component.html',
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/app.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/app.component.ts
index 2fe0e2501..3ba2aed3d 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/app.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/app.component.ts
@@ -30,7 +30,6 @@ import {AppService} from './services/app.service';
     ControlPanelComponent,
     ContentComponent,
     AboutComponent,
-    AsyncPipe,
   ],
   selector: 'app-app',
   styleUrl: './app.component.scss',
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts
index 495676335..c3094f992 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts
@@ -30,7 +30,6 @@ import {PlotsComponent} from '../plots/plots.component';
     DisaggSummaryComponent,
     DisaggContributorsComponent,
     DisaggDataComponent,
-    AsyncPipe,
   ],
   selector: 'app-content',
   styleUrl: './content.component.scss',
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts
index 5684b8998..fb67250f4 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts
@@ -50,7 +50,6 @@ import {AppService} from '../../services/app.service';
     MatInput,
     MatError,
     MatCheckbox,
-    AsyncPipe,
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts
index 233c8ada3..263d3d4fc 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts
@@ -22,7 +22,6 @@ import {AppService} from '../../services/app.service';
     MatButton,
     MatDivider,
     NgClass,
-    AsyncPipe,
     DecimalPipe,
     FormatLatitudePipe,
     FormatLongitudePipe,
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
index 7aea0bb9e..8cf250388 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
@@ -10,7 +10,7 @@ import {
 import {AppService} from '../../services/app.service';
 
 @Component({
-  imports: [AsyncPipe, MatDivider, MatButton],
+  imports: [MatDivider, MatButton],
   selector: 'app-disagg-data',
   styleUrl: './disagg-data.component.scss',
   templateUrl: './disagg-data.component.html',
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts
index 905d72683..dcd8549d0 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts
@@ -11,7 +11,7 @@ import {AppService} from '../../services/app.service';
  * Lists of disaggregation summaries from service response.
  */
 @Component({
-  imports: [MatButton, MatDivider, MatList, MatListItem, AsyncPipe],
+  imports: [MatButton, MatDivider, MatList, MatListItem],
   selector: 'app-disagg-summary',
   styleUrl: './disagg-summary.component.scss',
   templateUrl: './disagg-summary.component.html',
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts
index 6a6163ba0..9f877f019 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts
@@ -11,7 +11,7 @@ import {AppService} from '../../services/app.service';
  * Summary of parameters entered, form field values to call service.
  */
 @Component({
-  imports: [MatDivider, MatList, MatListItem, AsyncPipe],
+  imports: [MatDivider, MatList, MatListItem],
   selector: 'app-parameter-summary',
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/app.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/app.component.ts
index 7798f12de..e3a49aaab 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/app.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/app.component.ts
@@ -34,7 +34,6 @@ import {AppService} from './services/app.service';
     ContentComponent,
     PlotSettingsPanelComponent,
     AboutComponent,
-    AsyncPipe,
   ],
   selector: 'app-app',
   styleUrl: './app.component.scss',
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts
index b9d56a2f7..c19cd6c5b 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts
@@ -23,7 +23,6 @@ import {PlotsComponent} from '../plots/plots.component';
     MatTab,
     MatTabContent,
     PlotsComponent,
-    AsyncPipe,
     LowerCasePipe,
   ],
   selector: 'app-content',
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts
index 3a167f757..5332d4696 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts
@@ -49,7 +49,6 @@ import {AppService} from '../../services/app.service';
     MatLabel,
     MatSelect,
     MatOption,
-    AsyncPipe,
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts
index fd19d06d4..eecd0a479 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts
@@ -10,7 +10,7 @@ import {AppService} from '../../services/app.service';
  * Summary of parameters entered, form field values to call service.
  */
 @Component({
-  imports: [MatList, MatListItem, AsyncPipe],
+  imports: [MatList, MatListItem],
   selector: 'app-parameter-summary',
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/plots/plots.component.ts
index ac5664e75..6d12b96fa 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/plots/plots.component.ts
@@ -32,7 +32,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     MatExpansionPanelTitle,
     MatDivider,
     ParameterSummaryComponent,
-    AsyncPipe,
   ],
   selector: 'app-plots',
   styleUrl: './plots.component.scss',
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts
index 06f719544..5afaf607c 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts
@@ -38,7 +38,6 @@ import {AppService} from '../../services/app.service';
     NshmpLibNgHazardTruncationFormComponent,
     NshmpLibNgHazardMaxDirectionFormComponent,
     NshmpLibNgControlPanelButtonsComponent,
-    AsyncPipe,
     ReactiveFormsModule,
   ],
   selector: 'app-control-panel',
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts
index 5b1cf2885..24243c9ac 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts
@@ -35,7 +35,6 @@ import {AppService} from '../../services/app.service';
     MatExpansionPanelHeader,
     MatDivider,
     MatExpansionPanelContent,
-    AsyncPipe,
   ],
   selector: 'app-curve-data',
   styleUrl: './curve-data.component.scss',
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts
index 13adebf02..77bcbffd9 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts
@@ -10,7 +10,7 @@ import {AppService} from '../../services/app.service';
  * Summary of parameters entered, form field values to call service.
  */
 @Component({
-  imports: [MatList, MatListItem, AsyncPipe],
+  imports: [MatList, MatListItem],
   selector: 'app-parameter-summary',
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/plots/plots.component.ts
index e746d3978..ec8a3831f 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/plots/plots.component.ts
@@ -32,7 +32,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     MatExpansionPanelTitle,
     MatDivider,
     ParameterSummaryComponent,
-    AsyncPipe,
   ],
   selector: 'app-plots',
   styleUrl: './plots.component.scss',
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts
index b04445bb8..b90b7f229 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts
@@ -25,7 +25,6 @@ import {AppService} from '../../services/app.service';
     MatAccordion,
     MatExpansionPanel,
     MatExpansionPanelHeader,
-    AsyncPipe,
   ],
   selector: 'app-spectrum-data',
   styleUrl: './spectrum-data.component.scss',
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
index 9ed517d17..1881e31c3 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
@@ -70,7 +70,6 @@ import {JobSubmittedComponent} from '../job-submitted/job-submitted.component';
     MatSlideToggle,
     MatExpansionPanelDescription,
     MatButton,
-    AsyncPipe,
     NshmpTemplateFormFieldsComponent,
     ReactiveFormsModule,
     MatIcon,
diff --git a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/content/content.component.ts b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/content/content.component.ts
index e9cec8a3f..07c39a6c1 100644
--- a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/content/content.component.ts
@@ -25,7 +25,6 @@ import {AppService} from '../../services/app.service';
     MatSuffix,
     MatTooltip,
     MatHint,
-    AsyncPipe,
     NshmpTemplateFormFieldsComponent,
     ReactiveFormsModule,
     MatIcon,
diff --git a/projects/nshmp-apps/src/app/source/mfd/app.component.ts b/projects/nshmp-apps/src/app/source/mfd/app.component.ts
index 2f5dba5ef..cb99719b4 100644
--- a/projects/nshmp-apps/src/app/source/mfd/app.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/app.component.ts
@@ -38,7 +38,6 @@ import {AppService} from './services/app.service';
     ContentComponent,
     PlotSettingsPanelComponent,
     AboutComponent,
-    AsyncPipe,
   ],
   selector: 'app-app',
   styleUrl: './app.component.scss',
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts
index 3f23737e6..f58389efa 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts
@@ -15,7 +15,7 @@ import {AppService} from '../../services/app.service';
  * Table of MFD data from service response.
  */
 @Component({
-  imports: [NshmpLibNgDataTablePanelComponent, AsyncPipe, LowerCasePipe],
+  imports: [NshmpLibNgDataTablePanelComponent, LowerCasePipe],
   selector: 'app-data',
   styleUrl: './data.component.scss',
   templateUrl: './data.component.html',
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/logic-tree/logic-tree.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/logic-tree/logic-tree.component.ts
index 44b47b4d3..540e86af8 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/logic-tree/logic-tree.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/logic-tree/logic-tree.component.ts
@@ -10,7 +10,7 @@ import {AppService} from '../../services/app.service';
  * @see https://plotly.com/javascript/treemaps/
  */
 @Component({
-  imports: [NshmpLibNgPlotComponent, AsyncPipe],
+  imports: [NshmpLibNgPlotComponent],
   selector: 'app-logic-tree',
   styleUrl: './logic-tree.component.scss',
   templateUrl: './logic-tree.component.html',
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts
index 56a485305..9c684c145 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts
@@ -15,7 +15,7 @@ import {AppService} from '../../services/app.service';
  * Summary of parameters entered, form field values to call service.
  */
 @Component({
-  imports: [MatList, MatListItem, AsyncPipe],
+  imports: [MatList, MatListItem],
   selector: 'app-parameter-summary',
   styleUrl: './parameter-summary.component.scss',
   templateUrl: './parameter-summary.component.html',
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/plots/plots.component.ts
index ba8b2c9ad..e60ca3f51 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/plots/plots.component.ts
@@ -42,7 +42,6 @@ import {ParameterSummaryComponent} from '../parameter-summary/parameter-summary.
     MatSelect,
     MatOption,
     ParameterSummaryComponent,
-    AsyncPipe,
     ReactiveFormsModule,
   ],
   selector: 'app-plots',
diff --git a/projects/nshmp-apps/src/app/source/model-maps/app.component.ts b/projects/nshmp-apps/src/app/source/model-maps/app.component.ts
index 5107a4f34..b90fa294a 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/app.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/app.component.ts
@@ -43,7 +43,6 @@ import {AppService} from './services/app.service';
     PlotSettingsPanelComponent,
     InfoPopupComponent,
     AboutComponent,
-    AsyncPipe,
   ],
   selector: 'app-app',
   styleUrl: './app.component.scss',
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts b/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
index 4157b320a..ed68cf860 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
@@ -19,7 +19,6 @@ import {LegendComponent} from '../legend/legend.component';
 @Component({
   imports: [
     LegendComponent,
-    AsyncPipe,
     LeafletModule,
     NshmpLibNgMapLeafletControlComponent,
     NshmpLibNgMapBaseLayersControlComponent,
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/source/model-maps/components/plot-settings-panel/plot-settings-panel.component.ts
index 16d93d257..f3ded4eea 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -7,13 +7,7 @@ import {MatSlider, MatSliderThumb} from '@angular/material/slider';
 import {AppService} from '../../services/app.service';
 
 @Component({
-  imports: [
-    MatLabel,
-    MatSlider,
-    MatSliderThumb,
-    AsyncPipe,
-    ReactiveFormsModule,
-  ],
+  imports: [MatLabel, MatSlider, MatSliderThumb, ReactiveFormsModule],
   selector: 'app-plot-settings-panel',
   styleUrl: './plot-settings-panel.component.scss',
   templateUrl: './plot-settings-panel.component.html',
diff --git a/tsconfig.json b/tsconfig.json
index 5e8b5cf4d..6b0b78324 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -23,7 +23,13 @@
     }
   },
   "angularCompilerOptions": {
-    "strictTemplates": true
+    "strictTemplates": true,
+    "strictStandalone": true,
+    "extendedDiagnostics": {
+      "checks": {
+        "unusedStandaloneImports": "error"
+      }
+    }
   },
   "exclude": ["node_modules", "tmp", "dist"]
 }
-- 
GitLab


From fb7ca894c3036301ecdce761216f50893c9d4913 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 13:12:17 -0700
Subject: [PATCH 18/27] switch to @use

---
 .../components/content/content.component.scss | 10 ++++-----
 .../snack-bar/snack-bar.component.scss        |  4 ++--
 .../components/config/config.component.scss   |  4 ++--
 .../components/data/data.component.scss       |  7 ++++---
 .../components/content/content.component.scss | 15 ++++++++-----
 .../info-popup/info-popup.component.scss      |  4 ++--
 .../nshmp-apps/src/styles/_code-block.scss    |  6 +++---
 projects/nshmp-apps/src/styles/_forms.scss    |  9 ++++----
 .../nshmp-apps/src/styles/_scrolling.scss     |  4 ++--
 .../src/styles/_settings-panel.scss           |  4 ++--
 projects/nshmp-apps/src/styles/styles.scss    | 21 +++++++++----------
 11 files changed, 46 insertions(+), 42 deletions(-)

diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.scss b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.scss
index b691b3623..6639d9e4c 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.scss
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/content/content.component.scss
@@ -1,6 +1,6 @@
 @use '@angular/material' as mat;
-@import '@ghsc/nshmp-template/styles/variables';
-@import '@ghsc/nshmp-template/styles/mixins';
+@use '@ghsc/nshmp-template/styles/variables';
+@use '@ghsc/nshmp-template/styles/mixins';
 
 $toolbarHeight: 3.5em;
 
@@ -26,7 +26,7 @@ $toolbarHeight: 3.5em;
 }
 
 .logs-toolbar {
-  background-color: mat.m2-get-color-from-palette($nshmp-accent);
+  background-color: mat.m2-get-color-from-palette(variables.$nshmp-accent);
   font-size: clamp(8px, 6px + 1vw, 14px);
   font-weight: normal;
   height: $toolbarHeight;
@@ -49,7 +49,7 @@ $toolbarHeight: 3.5em;
     margin-bottom: 0;
 
     mat-icon {
-      @include mat-icon-size(28px);
+      @include mixins.mat-icon-size(28px);
     }
   }
 }
@@ -68,5 +68,5 @@ $toolbarHeight: 3.5em;
 }
 
 body.dark-mode :host .logs-toolbar {
-  background-color: mat.m2-get-color-from-palette($nshmp-accent, 900);
+  background-color: mat.m2-get-color-from-palette(variables.$nshmp-accent, 900);
 }
diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/snack-bar/snack-bar.component.scss b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/snack-bar/snack-bar.component.scss
index 1f2a0823b..df192e283 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/snack-bar/snack-bar.component.scss
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/components/snack-bar/snack-bar.component.scss
@@ -1,4 +1,4 @@
-@import '@ghsc/nshmp-template/styles/mixins';
+@use '@ghsc/nshmp-template/styles/mixins';
 
 :host {
   display: flex;
@@ -14,5 +14,5 @@ button.download-button {
 }
 
 mat-icon {
-  @include mat-icon-size(32px);
+  @include mixins.mat-icon-size(32px);
 }
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config/config.component.scss b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config/config.component.scss
index 04f64152b..4683b5f22 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config/config.component.scss
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/config/config.component.scss
@@ -1,5 +1,5 @@
 @use '@angular/material' as mat;
-@import '@ghsc/nshmp-template/styles/variables';
+@use '@ghsc/nshmp-template/styles/variables';
 
 :host ::ng-deep table.config-table {
   height: 100%;
@@ -43,5 +43,5 @@
 
 tr:hover {
   cursor: pointer;
-  background-color: mat.m2-get-color-from-palette($nshmp-accent);
+  background-color: mat.m2-get-color-from-palette(variables.$nshmp-accent);
 }
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/data/data.component.scss b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/data/data.component.scss
index e63791e51..71bd80d31 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/data/data.component.scss
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/data/data.component.scss
@@ -1,5 +1,5 @@
 @use '@angular/material' as mat;
-@import '@ghsc/nshmp-template/styles/variables';
+@use '@ghsc/nshmp-template/styles/variables';
 
 td {
   padding-right: 4em !important;
@@ -7,11 +7,12 @@ td {
 
 body.dark-mode :host {
   table {
-    color: mat.m2-get-color-from-palette($nshmp-accent, 200);
+    color: mat.m2-get-color-from-palette(variables.$nshmp-accent, 200);
 
     th,
     td {
-      border: 1px solid mat.m2-get-color-from-palette($nshmp-accent, 700);
+      border: 1px solid
+        mat.m2-get-color-from-palette(variables.$nshmp-accent, 700);
       border-left: 0;
       border-right: 0;
     }
diff --git a/projects/nshmp-apps/src/app/services/components/content/content.component.scss b/projects/nshmp-apps/src/app/services/components/content/content.component.scss
index 2ebdb3c72..168a39b28 100644
--- a/projects/nshmp-apps/src/app/services/components/content/content.component.scss
+++ b/projects/nshmp-apps/src/app/services/components/content/content.component.scss
@@ -1,5 +1,5 @@
 @use '@angular/material' as mat;
-@import '@ghsc/nshmp-template/styles/variables';
+@use '@ghsc/nshmp-template/styles/variables';
 
 :host ::ng-deep mat-nav-list .mat-mdc-list-item .mdc-list-item__primary-text {
   font-size: clamp(10px, 8px + 1vw, 16px);
@@ -84,7 +84,7 @@ mat-sidenav {
   }
 
   mat-nav-list {
-    border-right: solid 3px $theme-color;
+    border-right: solid 3px variables.$theme-color;
 
     a {
       @include mat.list-typography(
@@ -97,8 +97,10 @@ mat-sidenav {
     a.active {
       @include mat.list-typography(
         mat.m2-define-typography-config(
-          $body-2:
-            mat.m2-define-typography-level($font-size: 14px, $font-weight: 800)
+          $body-2: mat.m2-define-typography-level(
+              $font-size: 14px,
+              $font-weight: 800
+            )
         )
       );
       --mdc-list-list-item-supporting-text-color: #3d5e80;
@@ -116,7 +118,10 @@ mat-sidenav.collapsed {
 
 body.dark-mode :host {
   mat-sidenav {
-    background-color: mat.m2-get-color-from-palette($nshmp-accent, 800);
+    background-color: mat.m2-get-color-from-palette(
+      variables.$nshmp-accent,
+      800
+    );
   }
 
   .card-section h4 {
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/info-popup/info-popup.component.scss b/projects/nshmp-apps/src/app/source/model-maps/components/info-popup/info-popup.component.scss
index e7d5cec20..bef92ddc0 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/info-popup/info-popup.component.scss
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/info-popup/info-popup.component.scss
@@ -1,5 +1,5 @@
 @use '@angular/material' as mat;
-@import '@ghsc/nshmp-template/styles/variables';
+@use '@ghsc/nshmp-template/styles/variables';
 
 .leaflet-feature-popup {
   mat-card {
@@ -7,7 +7,7 @@
     position: absolute !important;
     left: 0.5em;
     bottom: 1em;
-    width: calc($side-panel-width - 1em);
+    width: calc(variables.$side-panel-width - 1em);
     @include mat.elevation(6);
 
     mat-card-header {
diff --git a/projects/nshmp-apps/src/styles/_code-block.scss b/projects/nshmp-apps/src/styles/_code-block.scss
index a71ffb64c..5a35435a8 100644
--- a/projects/nshmp-apps/src/styles/_code-block.scss
+++ b/projects/nshmp-apps/src/styles/_code-block.scss
@@ -1,8 +1,8 @@
 @use '@angular/material' as mat;
-@import '@ghsc/nshmp-template/styles/variables';
+@use '@ghsc/nshmp-template/styles/variables';
 
 .code-block {
-  background-color: mat.m2-get-color-from-palette($nshmp-accent);
+  background-color: mat.m2-get-color-from-palette(variables.$nshmp-accent);
   font-size: clamp(8px, 6px + 1vw, 14px);
   line-height: clamp(0.75em, 0.5em + 1vw, 1.5em);
   overflow-x: scroll;
@@ -10,5 +10,5 @@
 }
 
 body.dark-mode .code-block {
-  background-color: mat.m2-get-color-from-palette($nshmp-accent, 700);
+  background-color: mat.m2-get-color-from-palette(variables.$nshmp-accent, 700);
 }
diff --git a/projects/nshmp-apps/src/styles/_forms.scss b/projects/nshmp-apps/src/styles/_forms.scss
index 4b04af7d5..c1f793ac6 100644
--- a/projects/nshmp-apps/src/styles/_forms.scss
+++ b/projects/nshmp-apps/src/styles/_forms.scss
@@ -3,8 +3,7 @@
 */
 
 @use '@angular/material' as mat;
-@import '@ghsc/nshmp-template/styles/variables';
-@import '@ghsc/nshmp-template/styles/mixins';
+@use '@ghsc/nshmp-template/styles/variables';
 
 nshmp-template-control-panel form {
   padding-bottom: 3em;
@@ -15,9 +14,9 @@ nshmp-template-control-panel form {
   bottom: 0;
   padding: 1em 0 0 0;
   position: absolute;
-  width: $side-panel-width;
+  width: variables.$side-panel-width;
   z-index: 10;
-  background-color: mat.m2-get-color-from-palette($nshmp-accent);
+  background-color: mat.m2-get-color-from-palette(variables.$nshmp-accent);
   box-shadow: 0 0 1px rgba(0, 0, 0, 0.8);
 }
 
@@ -38,5 +37,5 @@ nshmp-template-control-panel form {
 }
 
 body.dark-mode .form-buttons {
-  background-color: mat.m2-get-color-from-palette($nshmp-accent, 800);
+  background-color: mat.m2-get-color-from-palette(variables.$nshmp-accent, 800);
 }
diff --git a/projects/nshmp-apps/src/styles/_scrolling.scss b/projects/nshmp-apps/src/styles/_scrolling.scss
index 4ff287541..d7d2ada65 100644
--- a/projects/nshmp-apps/src/styles/_scrolling.scss
+++ b/projects/nshmp-apps/src/styles/_scrolling.scss
@@ -3,7 +3,7 @@
 */
 
 @use '@angular/material' as mat;
-@import '@ghsc/nshmp-template/styles/variables';
+@use '@ghsc/nshmp-template/styles/variables';
 
 $spacing: 1em !default;
 
@@ -31,7 +31,7 @@ $spacing: 1em !default;
   }
 }
 
-$dark-mode-accent: mat.m2-get-color-from-palette($nshmp-accent, 800);
+$dark-mode-accent: mat.m2-get-color-from-palette(variables.$nshmp-accent, 800);
 
 body.dark-mode {
   .horizontal-scrolling {
diff --git a/projects/nshmp-apps/src/styles/_settings-panel.scss b/projects/nshmp-apps/src/styles/_settings-panel.scss
index a43400938..5255f646a 100644
--- a/projects/nshmp-apps/src/styles/_settings-panel.scss
+++ b/projects/nshmp-apps/src/styles/_settings-panel.scss
@@ -13,11 +13,11 @@
 
     .settings-subsection {
       .settings-subsection--section {
+        margin-left: 0.5em;
+
         &:first-of-type {
           padding-top: 0.5em;
         }
-
-        margin-left: 0.5em;
       }
 
       .settings-subsection--label {
diff --git a/projects/nshmp-apps/src/styles/styles.scss b/projects/nshmp-apps/src/styles/styles.scss
index c0fb170ca..b1c04f069 100644
--- a/projects/nshmp-apps/src/styles/styles.scss
+++ b/projects/nshmp-apps/src/styles/styles.scss
@@ -4,18 +4,17 @@ $theme-image-path: $base-href + '/assets/img';
 $theme-show-notifications: false;
 $theme-hero-image: $base-href + '/assets/usgs-logo.svg';
 
-@import '@ghsc/nshmp-template/styles/styles.scss';
-@import '@ghsc/nshmp-template/styles/uswds-functions';
-@import '@ghsc/nshmp-lib-ng/styles/about';
+@use '@ghsc/nshmp-template/styles/styles.scss';
+@use '@ghsc/nshmp-lib-ng/styles/about';
 
-@import './code-block';
-@import './forms';
-@import './mobile';
-@import './parameter-summary';
-@import './print';
-@import './scrolling';
-@import './settings-panel';
-@import './utilities';
+@use './code-block';
+@use './forms';
+@use './mobile';
+@use './parameter-summary';
+@use './print';
+@use './scrolling';
+@use './settings-panel';
+@use './utilities';
 
 .error-dialog mat-dialog-container {
   padding: 0;
-- 
GitLab


From ce3c41f788e6f577e8f46cdf77d5e508aacd405d Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 14:22:29 -0700
Subject: [PATCH 19/27] set input

---
 package-lock.json                                 |  1 -
 package.json                                      |  1 -
 projects/nshmp-apps/jest.config.ts                | 15 ++++++++++-----
 projects/nshmp-apps/setup-jest.ts                 | 12 +++++++++---
 .../building-code-control.component.spec.ts       |  4 ++++
 .../disagg-contributors.component.spec.ts         |  3 +++
 .../disagg-data/disagg-data.component.spec.ts     |  3 +++
 .../disagg-summary.component.spec.ts              |  3 +++
 8 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 010ee7478..15ef62697 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -81,7 +81,6 @@
         "gts": "^6.0.2",
         "husky": "^9.1.7",
         "jest": "^29.7.0",
-        "jest-environment-jsdom": "^29.7.0",
         "jest-fail-on-console": "^3.3.1",
         "jest-junit": "^16.0.0",
         "jest-preset-angular": "^14.4.2",
diff --git a/package.json b/package.json
index cde0c884b..cc7df8bc3 100644
--- a/package.json
+++ b/package.json
@@ -105,7 +105,6 @@
     "gts": "^6.0.2",
     "husky": "^9.1.7",
     "jest": "^29.7.0",
-    "jest-environment-jsdom": "^29.7.0",
     "jest-fail-on-console": "^3.3.1",
     "jest-junit": "^16.0.0",
     "jest-preset-angular": "^14.4.2",
diff --git a/projects/nshmp-apps/jest.config.ts b/projects/nshmp-apps/jest.config.ts
index 394a5fb64..4fae2fdfb 100644
--- a/projects/nshmp-apps/jest.config.ts
+++ b/projects/nshmp-apps/jest.config.ts
@@ -6,17 +6,22 @@ const config: Config.InitialOptions = {
   coverageReporters: ['text-summary', 'html'],
   globalSetup: 'jest-preset-angular/global-setup',
   maxWorkers: '80%',
-  moduleNameMapper: pathsToModuleNameMapper(
-    {'projects/*': ['*']},
-    {prefix: '<rootDir>/..'},
-  ),
+  moduleNameMapper: {
+    d3: '<rootDir>/../../node_modules/d3/dist/d3.min.js',
+    ...pathsToModuleNameMapper({'projects/*': ['*']}, {prefix: '<rootDir>/..'}),
+  },
   preset: 'jest-preset-angular',
   reporters: ['default', 'jest-junit'],
   roots: ['..'],
   setupFilesAfterEnv: ['<rootDir>/setup-jest.ts'],
   testPathIgnorePatterns: ['<rootDir>/cypress'],
   transformIgnorePatterns: [
-    'node_modules/(?!.*\\.mjs$|d3|d3-*|delaunator|robust-predicates|internmap|@ghsc/nshmp-utils-ts/node_modules/d3-format|yaml|change-case)',
+    `node_modules/(
+      ?!.*\\.mjs$|
+      yaml|
+      change-case|
+      @ghsc/nshmp-utils-ts/node_modules/d3-format
+    )/`,
   ],
 };
 
diff --git a/projects/nshmp-apps/setup-jest.ts b/projects/nshmp-apps/setup-jest.ts
index 195bbea19..b29124854 100644
--- a/projects/nshmp-apps/setup-jest.ts
+++ b/projects/nshmp-apps/setup-jest.ts
@@ -1,9 +1,13 @@
-import 'jest-preset-angular/setup-jest';
-
 import failOnConsole from 'jest-fail-on-console';
+import {setupZoneTestEnv} from 'jest-preset-angular/setup-env/zone';
 
 // Make Jest test fail on console.error and warn
-failOnConsole();
+failOnConsole({
+  // https://github.com/primefaces/primeng/issues/14085
+  silenceMessage: message => {
+    return !(message === 'Error: Could not parse CSS stylesheet');
+  },
+});
 
 Object.defineProperty(window, 'CSS', {value: null});
 Object.defineProperty(window.URL, 'createObjectURL', {value: function () {}});
@@ -27,3 +31,5 @@ Object.defineProperty(document.body.style, 'transform', {
     };
   },
 });
+
+setupZoneTestEnv();
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.spec.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.spec.ts
index 881b7520d..718ebfbe9 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.spec.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.spec.ts
@@ -4,6 +4,7 @@ import {provideNoopAnimations} from '@angular/platform-browser/animations';
 import {provideRouter} from '@angular/router';
 
 import {BuildingCodeControlComponent} from './building-code-control.component';
+import {FormControl} from '@angular/forms';
 
 describe('BuildingCodeControlComponent', () => {
   let component: BuildingCodeControlComponent;
@@ -21,6 +22,9 @@ describe('BuildingCodeControlComponent', () => {
 
     fixture = TestBed.createComponent(BuildingCodeControlComponent);
     component = fixture.componentInstance;
+
+    fixture.componentRef.setInput('control', new FormControl());
+
     fixture.detectChanges();
   });
 
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.spec.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.spec.ts
index d2e5e96e1..4f1485792 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.spec.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.spec.ts
@@ -24,6 +24,9 @@ describe('DisaggContributorsComponent', () => {
   beforeEach(() => {
     fixture = TestBed.createComponent(DisaggContributorsComponent);
     component = fixture.componentInstance;
+
+    fixture.componentRef.setInput('componentData', undefined);
+
     fixture.detectChanges();
   });
 
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.spec.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.spec.ts
index d5c0d7072..4fcb0d885 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.spec.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.spec.ts
@@ -21,6 +21,9 @@ describe('DisaggDataComponent', () => {
 
     fixture = TestBed.createComponent(DisaggDataComponent);
     component = fixture.componentInstance;
+
+    fixture.componentRef.setInput('componentData', undefined);
+
     fixture.detectChanges();
   });
 
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.spec.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.spec.ts
index f64909fb4..bc00687f9 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.spec.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.spec.ts
@@ -24,6 +24,9 @@ describe('DisaggSummaryComponent', () => {
   beforeEach(() => {
     fixture = TestBed.createComponent(DisaggSummaryComponent);
     component = fixture.componentInstance;
+
+    fixture.componentRef.setInput('componentData', undefined);
+
     fixture.detectChanges();
   });
 
-- 
GitLab


From 830130d4956c7ea8677d05824733f772b1945477 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 15:03:00 -0700
Subject: [PATCH 20/27] test

---
 package-lock.json                  |  3 ++-
 package.json                       |  3 ++-
 projects/nshmp-apps/jest.config.ts | 15 +++++----------
 3 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 15ef62697..63d40542d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -81,9 +81,10 @@
         "gts": "^6.0.2",
         "husky": "^9.1.7",
         "jest": "^29.7.0",
+        "jest-environment-jsdom": "^29.7.0",
         "jest-fail-on-console": "^3.3.1",
         "jest-junit": "^16.0.0",
-        "jest-preset-angular": "^14.4.2",
+        "jest-preset-angular": "^14.2.4",
         "ng-packagr": "^19.0.1",
         "prettier": "^3.4.2",
         "pretty-quick": "^4.0.0",
diff --git a/package.json b/package.json
index cc7df8bc3..f704d0c28 100644
--- a/package.json
+++ b/package.json
@@ -105,9 +105,10 @@
     "gts": "^6.0.2",
     "husky": "^9.1.7",
     "jest": "^29.7.0",
+    "jest-environment-jsdom": "^29.7.0",
     "jest-fail-on-console": "^3.3.1",
     "jest-junit": "^16.0.0",
-    "jest-preset-angular": "^14.4.2",
+    "jest-preset-angular": "^14.2.4",
     "ng-packagr": "^19.0.1",
     "prettier": "^3.4.2",
     "pretty-quick": "^4.0.0",
diff --git a/projects/nshmp-apps/jest.config.ts b/projects/nshmp-apps/jest.config.ts
index 4fae2fdfb..394a5fb64 100644
--- a/projects/nshmp-apps/jest.config.ts
+++ b/projects/nshmp-apps/jest.config.ts
@@ -6,22 +6,17 @@ const config: Config.InitialOptions = {
   coverageReporters: ['text-summary', 'html'],
   globalSetup: 'jest-preset-angular/global-setup',
   maxWorkers: '80%',
-  moduleNameMapper: {
-    d3: '<rootDir>/../../node_modules/d3/dist/d3.min.js',
-    ...pathsToModuleNameMapper({'projects/*': ['*']}, {prefix: '<rootDir>/..'}),
-  },
+  moduleNameMapper: pathsToModuleNameMapper(
+    {'projects/*': ['*']},
+    {prefix: '<rootDir>/..'},
+  ),
   preset: 'jest-preset-angular',
   reporters: ['default', 'jest-junit'],
   roots: ['..'],
   setupFilesAfterEnv: ['<rootDir>/setup-jest.ts'],
   testPathIgnorePatterns: ['<rootDir>/cypress'],
   transformIgnorePatterns: [
-    `node_modules/(
-      ?!.*\\.mjs$|
-      yaml|
-      change-case|
-      @ghsc/nshmp-utils-ts/node_modules/d3-format
-    )/`,
+    'node_modules/(?!.*\\.mjs$|d3|d3-*|delaunator|robust-predicates|internmap|@ghsc/nshmp-utils-ts/node_modules/d3-format|yaml|change-case)',
   ],
 };
 
-- 
GitLab


From 4e8f3cedc398f1ec430bf486dbe733af94e46625 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 15:38:21 -0700
Subject: [PATCH 21/27] test

---
 package-lock.json | 1045 +++++++++++++++++++++++++++++++++++++++++----
 package.json      |    6 +-
 2 files changed, 975 insertions(+), 76 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 63d40542d..9dc618f3e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -53,8 +53,8 @@
         "@angular/language-service": "19.0.4",
         "@cypress/schematic": "^2.5.2",
         "@cypress/webpack-preprocessor": "^6.0.2",
-        "@nx/cypress": "^20.2.2",
-        "@nx/workspace": "^20.2.2",
+        "@nx/cypress": "^19.2.2",
+        "@nx/workspace": "^19.2.2",
         "@types/aws-sdk": "^2.7.4",
         "@types/d3-array": "^3.2.1",
         "@types/d3-scale-chromatic": "^3.1.0",
@@ -68,7 +68,7 @@
         "@typescript-eslint/eslint-plugin": "^8.18.1",
         "@typescript-eslint/parser": "^8.18.1",
         "angular-http-server": "^1.12.0",
-        "cypress": "^13.16.1",
+        "cypress": "^13.15.2",
         "eslint-plugin-import": "^2.31.0",
         "eslint-plugin-jsdoc": "^50.6.1",
         "eslint-plugin-prefer-arrow": "^1.2.3",
@@ -6988,16 +6988,445 @@
         "node": "^18.17.0 || >=20.5.0"
       }
     },
+    "node_modules/@nrwl/cypress": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nrwl/cypress/-/cypress-19.8.14.tgz",
+      "integrity": "sha512-IqbjMM2MiHZb/1fLE5hwRU9RtTLDj7K+QzmVlzH1mTse0uphYFrQZZ5Y+mvYkR8OloEKL3UJPgbpcVScS4c8NQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nx/cypress": "19.8.14"
+      }
+    },
+    "node_modules/@nrwl/devkit": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.8.14.tgz",
+      "integrity": "sha512-Oud7BPhFNqE3/YStULn/gHyuGSw2QyxUaHXJApr+DybmYtUms7hQ+cWnY1IY+hRpdtU9ldlg8UYx+VslpS9YNQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nx/devkit": "19.8.14"
+      }
+    },
+    "node_modules/@nrwl/js": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-19.8.14.tgz",
+      "integrity": "sha512-DilRYVrqoecsNOkV2j4QDvcIjJXaO2krV7bbfGU/9TSmDzNcdB1R++dEgpa0seo2FrEfVgKffOl/6zzi8PhsgQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nx/js": "19.8.14"
+      }
+    },
+    "node_modules/@nrwl/tao": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.8.14.tgz",
+      "integrity": "sha512-zBeYzzwg43T/Z8ZtLblv0fcKuqJULttqYDekSLILThXp3UOMSerEvruhUgwddCY1jUssfLscz8vacMKISv5X4w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "nx": "19.8.14",
+        "tslib": "^2.3.0"
+      },
+      "bin": {
+        "tao": "index.js"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/@nx/nx-darwin-arm64": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.8.14.tgz",
+      "integrity": "sha512-bZUFf23gAzuwVw71dR8rngye5aCR8Z/ouIo+KayjqB0LWWoi3WzO73s4S69ljftYt4n6z9wvD+Trbb1BKm2fPg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/@nx/nx-darwin-x64": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.8.14.tgz",
+      "integrity": "sha512-UXXVea8icFG/3rFwpbLYsD6O4wlyJ1STQfOdhGK1Hyuga70AUUdrjVm7HzigAQP/Sb2Nzd7155YXHzfpRPDFYA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/@nx/nx-freebsd-x64": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.8.14.tgz",
+      "integrity": "sha512-TK2xuXn+BI6hxGaRK1HRUPWeF/nOtezKSqM+6rbippfCzjES/crmp9l5nbI764MMthtUmykCyWvhEfkDca6kbA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-arm-gnueabihf": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.8.14.tgz",
+      "integrity": "sha512-33rptyRraqaeQ2Kq6pcZKQqgnYY/7zcGH8fHXgKK7XzKk+7QuPViq+jMEUZP5E3UzZPkIYhsfmZcZqhNRvepJQ==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-arm64-gnu": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.8.14.tgz",
+      "integrity": "sha512-2E70qMKOhh7Fp4JGcRbRLvFKq0+ANVdAgSzH47plxOLygIeVAfIXRSuQbCI0EUFa5Sy6hImLaoRSB2GdgKihAw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-arm64-musl": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.8.14.tgz",
+      "integrity": "sha512-ltty/PDWqkYgu/6Ye65d7v5nh3D6e0n3SacoKRs2Vtfz5oHYRUkSKizKIhEVfRNuHn3d9j8ve1fdcCN4SDPUBQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-x64-gnu": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.8.14.tgz",
+      "integrity": "sha512-JzE3BuO9RCBVdgai18CCze6KUzG0AozE0TtYFxRokfSC05NU3nUhd/o62UsOl7s6Bqt/9nwrW7JC8pNDiCi9OQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-x64-musl": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.8.14.tgz",
+      "integrity": "sha512-2rPvDOQLb7Wd6YiU88FMBiLtYco0dVXF99IJBRGAWv+WTI7MNr47OyK2ze+JOsbYY1d8aOGUvckUvCCZvZKEfg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/@nx/nx-win32-arm64-msvc": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.8.14.tgz",
+      "integrity": "sha512-JxW+YPS+EjhUsLw9C6wtk9pQTG3psyFwxhab8y/dgk2s4AOTLyIm0XxgcCJVvB6i4uv+s1g0QXRwp6+q3IR6hg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/@nx/nx-win32-x64-msvc": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.8.14.tgz",
+      "integrity": "sha512-RxiPlBWPcGSf9TzIIy62iKRdRhokXMDUsPub9DL2VdVyTMXPZQR25aY/PJeasJN1EQU74hg097LK2wSHi+vzOQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/@yarnpkg/parsers": {
+      "version": "3.0.0-rc.46",
+      "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz",
+      "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "js-yaml": "^3.10.0",
+        "tslib": "^2.4.0"
+      },
+      "engines": {
+        "node": ">=14.15.0"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/define-lazy-prop": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+      "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/is-docker": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+      "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "is-docker": "cli.js"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/is-wsl": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+      "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-docker": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/js-yaml": {
+      "version": "3.14.1",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+      "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/jsonc-parser": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
+      "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@nrwl/tao/node_modules/nx": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/nx/-/nx-19.8.14.tgz",
+      "integrity": "sha512-yprBOWV16eQntz5h5SShYHMVeN50fUb6yHfzsqNiFneCJeyVjyJ585m+2TuVbE11vT1amU0xCjHcSGfJBBnm8g==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "dependencies": {
+        "@napi-rs/wasm-runtime": "0.2.4",
+        "@nrwl/tao": "19.8.14",
+        "@yarnpkg/lockfile": "^1.1.0",
+        "@yarnpkg/parsers": "3.0.0-rc.46",
+        "@zkochan/js-yaml": "0.0.7",
+        "axios": "^1.7.4",
+        "chalk": "^4.1.0",
+        "cli-cursor": "3.1.0",
+        "cli-spinners": "2.6.1",
+        "cliui": "^8.0.1",
+        "dotenv": "~16.4.5",
+        "dotenv-expand": "~11.0.6",
+        "enquirer": "~2.3.6",
+        "figures": "3.2.0",
+        "flat": "^5.0.2",
+        "front-matter": "^4.0.2",
+        "ignore": "^5.0.4",
+        "jest-diff": "^29.4.1",
+        "jsonc-parser": "3.2.0",
+        "lines-and-columns": "2.0.3",
+        "minimatch": "9.0.3",
+        "node-machine-id": "1.1.12",
+        "npm-run-path": "^4.0.1",
+        "open": "^8.4.0",
+        "ora": "5.3.0",
+        "semver": "^7.5.3",
+        "string-width": "^4.2.3",
+        "strong-log-transformer": "^2.1.0",
+        "tar-stream": "~2.2.0",
+        "tmp": "~0.2.1",
+        "tsconfig-paths": "^4.1.2",
+        "tslib": "^2.3.0",
+        "yargs": "^17.6.2",
+        "yargs-parser": "21.1.1"
+      },
+      "bin": {
+        "nx": "bin/nx.js",
+        "nx-cloud": "bin/nx-cloud.js"
+      },
+      "optionalDependencies": {
+        "@nx/nx-darwin-arm64": "19.8.14",
+        "@nx/nx-darwin-x64": "19.8.14",
+        "@nx/nx-freebsd-x64": "19.8.14",
+        "@nx/nx-linux-arm-gnueabihf": "19.8.14",
+        "@nx/nx-linux-arm64-gnu": "19.8.14",
+        "@nx/nx-linux-arm64-musl": "19.8.14",
+        "@nx/nx-linux-x64-gnu": "19.8.14",
+        "@nx/nx-linux-x64-musl": "19.8.14",
+        "@nx/nx-win32-arm64-msvc": "19.8.14",
+        "@nx/nx-win32-x64-msvc": "19.8.14"
+      },
+      "peerDependencies": {
+        "@swc-node/register": "^1.8.0",
+        "@swc/core": "^1.3.85"
+      },
+      "peerDependenciesMeta": {
+        "@swc-node/register": {
+          "optional": true
+        },
+        "@swc/core": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/open": {
+      "version": "8.4.2",
+      "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+      "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "define-lazy-prop": "^2.0.0",
+        "is-docker": "^2.1.1",
+        "is-wsl": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/ora": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz",
+      "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bl": "^4.0.3",
+        "chalk": "^4.1.0",
+        "cli-cursor": "^3.1.0",
+        "cli-spinners": "^2.5.0",
+        "is-interactive": "^1.0.0",
+        "log-symbols": "^4.0.0",
+        "strip-ansi": "^6.0.0",
+        "wcwidth": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@nrwl/tao/node_modules/sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+      "dev": true,
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@nrwl/workspace": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-19.8.14.tgz",
+      "integrity": "sha512-I4eZtnHMkqnmOXVy6yN59fQopQZ+Sg0OFWwGluhKD5XPZULrlzECB8d4vblY9pcmQlN/6fat+KBrWkmKl41ZKg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nx/workspace": "19.8.14"
+      }
+    },
     "node_modules/@nx/cypress": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-20.2.2.tgz",
-      "integrity": "sha512-Y0V5b8N0J0Ofd8JQK21DPE+MB3SwqiarF0fKMB56P7HIuV9RucLqmwqTqnfVOpnFfKrMMs96Qy1vXsaAlHQLgg==",
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-19.8.14.tgz",
+      "integrity": "sha512-3TNlQURA/Xe27B+bQGWEwFTzjVChYqpsFP1Xg8iJDYykLGS1jvlCLSAwDtIo8dJCioOdmKR2orFCLHBWioxKog==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nx/devkit": "20.2.2",
-        "@nx/eslint": "20.2.2",
-        "@nx/js": "20.2.2",
+        "@nrwl/cypress": "19.8.14",
+        "@nx/devkit": "19.8.14",
+        "@nx/eslint": "19.8.14",
+        "@nx/js": "19.8.14",
         "@phenomnomnominal/tsquery": "~5.0.1",
         "detect-port": "^1.5.1",
         "tslib": "^2.3.0"
@@ -7012,12 +7441,13 @@
       }
     },
     "node_modules/@nx/devkit": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.2.2.tgz",
-      "integrity": "sha512-uqs0LVvuRRVAfFdn0ewvmr1vsNV9Ztugw36emcLJxskqhBZb10K+vzdTDAZpg5aVE2ISg1BmPidoOyk1tP+Omg==",
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.8.14.tgz",
+      "integrity": "sha512-A8dCGttbuqgg9P56VTb0ElD2vM5nc5g0aLnX5PSXo4SkFXwd8DV5GgwJKWB1GO9hYyEtbj4gKek0KxnCtdav4g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
+        "@nrwl/devkit": "19.8.14",
         "ejs": "^3.1.7",
         "enquirer": "~2.3.6",
         "ignore": "^5.0.4",
@@ -7032,17 +7462,18 @@
       }
     },
     "node_modules/@nx/eslint": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-20.2.2.tgz",
-      "integrity": "sha512-GID3r539okSIdqqaLJxOttjbC8xaAbyrGJfSo/jyFLVASN4ZYuwFwWU94Vdn1NsOPHc2kiDa/qQj5mv0gbBfUw==",
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-19.8.14.tgz",
+      "integrity": "sha512-fhrCd8OZue7WcIoU4NyKLLrfolEa2TvSgaLxjDabONqZOJRG38Y7ZX92P+Y1hSEdDZ9AazzirIdsy2d1AZWvfQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nx/devkit": "20.2.2",
-        "@nx/js": "20.2.2",
+        "@nx/devkit": "19.8.14",
+        "@nx/js": "19.8.14",
+        "@nx/linter": "19.8.14",
         "semver": "^7.5.3",
         "tslib": "^2.3.0",
-        "typescript": "~5.6.2"
+        "typescript": "~5.4.2"
       },
       "peerDependencies": {
         "@zkochan/js-yaml": "0.0.7",
@@ -7054,10 +7485,24 @@
         }
       }
     },
+    "node_modules/@nx/eslint/node_modules/typescript": {
+      "version": "5.4.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
+      "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=14.17"
+      }
+    },
     "node_modules/@nx/js": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/js/-/js-20.2.2.tgz",
-      "integrity": "sha512-y/L+GMS8pIE1rQTQ28Lb1YeWpEnDj2v3T/7QpWvICc78NZXuMrO6N1ZRTPRSQNXKL6Bs9S9bRuivsvSIiNlULw==",
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/js/-/js-19.8.14.tgz",
+      "integrity": "sha512-Nk0eEB2F/ZbBkH2iT+cgLWIittY8n5eOrA/uBBG2XMdencJZ9E2HNA/UzSGPZmD4EYVk0R1vm83k5+IMS1VAZA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -7068,9 +7513,9 @@
         "@babel/preset-env": "^7.23.2",
         "@babel/preset-typescript": "^7.22.5",
         "@babel/runtime": "^7.22.6",
-        "@nx/devkit": "20.2.2",
-        "@nx/workspace": "20.2.2",
-        "@zkochan/js-yaml": "0.0.7",
+        "@nrwl/js": "19.8.14",
+        "@nx/devkit": "19.8.14",
+        "@nx/workspace": "19.8.14",
         "babel-plugin-const-enum": "^1.0.1",
         "babel-plugin-macros": "^2.8.0",
         "babel-plugin-transform-typescript-metadata": "^0.3.1",
@@ -7078,6 +7523,7 @@
         "columnify": "^1.6.0",
         "detect-port": "^1.5.1",
         "enquirer": "~2.3.6",
+        "fast-glob": "3.2.7",
         "ignore": "^5.0.4",
         "js-tokens": "^4.0.0",
         "jsonc-parser": "3.2.0",
@@ -7087,7 +7533,6 @@
         "ora": "5.3.0",
         "semver": "^7.5.3",
         "source-map-support": "0.5.19",
-        "tinyglobby": "^0.2.10",
         "ts-node": "10.9.1",
         "tsconfig-paths": "^4.1.2",
         "tslib": "^2.3.0"
@@ -7101,6 +7546,36 @@
         }
       }
     },
+    "node_modules/@nx/js/node_modules/fast-glob": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
+      "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@nx/js/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "node_modules/@nx/js/node_modules/hosted-git-info": {
       "version": "7.0.2",
       "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
@@ -7242,10 +7717,216 @@
         }
       }
     },
-    "node_modules/@nx/nx-darwin-arm64": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.2.2.tgz",
-      "integrity": "sha512-gnS5mtbaBAO5TJkl4T68rQaN/79MMWePavw2SOcFyFnIdAriGEZ+ZFDUE0B/xYJSs9CPWLaGHf+n7oqyxaGd9A==",
+    "node_modules/@nx/linter": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-19.8.14.tgz",
+      "integrity": "sha512-QIeEXmdvXKX6rHIiA3W77l2oB9rABH3HYP6bgNaHyx65+tZ6RvmKfVXk+GWMgTf0lfQpnGyI/M7nsa91RGxu6w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nx/eslint": "19.8.14"
+      }
+    },
+    "node_modules/@nx/nx-darwin-arm64": {
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.2.2.tgz",
+      "integrity": "sha512-gnS5mtbaBAO5TJkl4T68rQaN/79MMWePavw2SOcFyFnIdAriGEZ+ZFDUE0B/xYJSs9CPWLaGHf+n7oqyxaGd9A==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "peer": true,
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nx/nx-darwin-x64": {
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.2.2.tgz",
+      "integrity": "sha512-IctvdQon+K8mlhl06zIq1xTPwf5L4OuS7crzCmK26p5F/lV6iz/UXSPCcgn+bYKOL/q3QCLNR7UasQMjzgCNkQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "peer": true,
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nx/nx-freebsd-x64": {
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.2.2.tgz",
+      "integrity": "sha512-4/Blg9Y6LVU8tS8yoa2BEXPHWsorpvCuZRH0gXPh96i6b71o4ORPafyLOHp08o3WjtUZb4jl5TfDryE+8y62ZA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "peer": true,
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nx/nx-linux-arm-gnueabihf": {
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.2.2.tgz",
+      "integrity": "sha512-AVAxbUXi6q+inmp8re3OV7HzH6fbkKnnMKvjDLnkzK8dA2Mv4JFl/gz++rgkYfEsBk20lcB1i3unqNrtOvzS7Q==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "peer": true,
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nx/nx-linux-arm64-gnu": {
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.2.2.tgz",
+      "integrity": "sha512-h04SLH464Oh/k/1mpAfsMhTVlnc1NJItx4N5DLZb2VuOOY+Tquhrp7HBJLyAhU0Q74JG0LevGFO6wdxliHupmA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "peer": true,
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nx/nx-linux-arm64-musl": {
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.2.2.tgz",
+      "integrity": "sha512-rnRXDLvHHj66rCslD4ShDq6KBOVsQ+X63GWTGKM0pnTIIDje9+ltZCoAByieCUm4BvFfCWMUf9y0mGfZvLVKSw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "peer": true,
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nx/nx-linux-x64-gnu": {
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.2.2.tgz",
+      "integrity": "sha512-K1Z2DVTnyCGl4nolhZ8fvHEixoe1pZOY256LD6D0lGca4Fsi3mHQ7lDU237Pzyc91+cfLva/OAvrivRPeU+DMA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "peer": true,
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nx/nx-linux-x64-musl": {
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.2.2.tgz",
+      "integrity": "sha512-pyWe+d2Y2pJVgPZf27KkDBufhFPq+Xhs3/zAQdJbicMvym7uhw0qMTV+lmoMXgfx52WZzhqTfG8JQcDqHjExJw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "peer": true,
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nx/nx-win32-arm64-msvc": {
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.2.2.tgz",
+      "integrity": "sha512-zqSoVrV34tx6qhQo/PwD9IMGhzoNSaFQxjTjNCY61sE7iwi5Qt4dDs3Rlh1ZFCBFnrjziymRPY2RryArgeK8Bw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "peer": true,
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nx/nx-win32-x64-msvc": {
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.2.2.tgz",
+      "integrity": "sha512-IfQf2axmCuSArhFGaocIDt8ajWDHXoVut5NOQH4eV2q9whP1j/LVB8EehEaolF5UenM7rhL4V25PXPuuBaUq4A==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "peer": true,
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nx/workspace": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.8.14.tgz",
+      "integrity": "sha512-Yb3d5WVjCyLill8MycKU+P/kbTyatKKqoUCu5zWokkysABiMWRLlrCYNzqwjTjeIIGj9MMGRHAQEemkBdL4tdg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nrwl/workspace": "19.8.14",
+        "@nx/devkit": "19.8.14",
+        "chalk": "^4.1.0",
+        "enquirer": "~2.3.6",
+        "nx": "19.8.14",
+        "tslib": "^2.3.0",
+        "yargs-parser": "21.1.1"
+      }
+    },
+    "node_modules/@nx/workspace/node_modules/@nx/nx-darwin-arm64": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.8.14.tgz",
+      "integrity": "sha512-bZUFf23gAzuwVw71dR8rngye5aCR8Z/ouIo+KayjqB0LWWoi3WzO73s4S69ljftYt4n6z9wvD+Trbb1BKm2fPg==",
       "cpu": [
         "arm64"
       ],
@@ -7259,10 +7940,10 @@
         "node": ">= 10"
       }
     },
-    "node_modules/@nx/nx-darwin-x64": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.2.2.tgz",
-      "integrity": "sha512-IctvdQon+K8mlhl06zIq1xTPwf5L4OuS7crzCmK26p5F/lV6iz/UXSPCcgn+bYKOL/q3QCLNR7UasQMjzgCNkQ==",
+    "node_modules/@nx/workspace/node_modules/@nx/nx-darwin-x64": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.8.14.tgz",
+      "integrity": "sha512-UXXVea8icFG/3rFwpbLYsD6O4wlyJ1STQfOdhGK1Hyuga70AUUdrjVm7HzigAQP/Sb2Nzd7155YXHzfpRPDFYA==",
       "cpu": [
         "x64"
       ],
@@ -7276,10 +7957,10 @@
         "node": ">= 10"
       }
     },
-    "node_modules/@nx/nx-freebsd-x64": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.2.2.tgz",
-      "integrity": "sha512-4/Blg9Y6LVU8tS8yoa2BEXPHWsorpvCuZRH0gXPh96i6b71o4ORPafyLOHp08o3WjtUZb4jl5TfDryE+8y62ZA==",
+    "node_modules/@nx/workspace/node_modules/@nx/nx-freebsd-x64": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.8.14.tgz",
+      "integrity": "sha512-TK2xuXn+BI6hxGaRK1HRUPWeF/nOtezKSqM+6rbippfCzjES/crmp9l5nbI764MMthtUmykCyWvhEfkDca6kbA==",
       "cpu": [
         "x64"
       ],
@@ -7293,10 +7974,10 @@
         "node": ">= 10"
       }
     },
-    "node_modules/@nx/nx-linux-arm-gnueabihf": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.2.2.tgz",
-      "integrity": "sha512-AVAxbUXi6q+inmp8re3OV7HzH6fbkKnnMKvjDLnkzK8dA2Mv4JFl/gz++rgkYfEsBk20lcB1i3unqNrtOvzS7Q==",
+    "node_modules/@nx/workspace/node_modules/@nx/nx-linux-arm-gnueabihf": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.8.14.tgz",
+      "integrity": "sha512-33rptyRraqaeQ2Kq6pcZKQqgnYY/7zcGH8fHXgKK7XzKk+7QuPViq+jMEUZP5E3UzZPkIYhsfmZcZqhNRvepJQ==",
       "cpu": [
         "arm"
       ],
@@ -7310,10 +7991,10 @@
         "node": ">= 10"
       }
     },
-    "node_modules/@nx/nx-linux-arm64-gnu": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.2.2.tgz",
-      "integrity": "sha512-h04SLH464Oh/k/1mpAfsMhTVlnc1NJItx4N5DLZb2VuOOY+Tquhrp7HBJLyAhU0Q74JG0LevGFO6wdxliHupmA==",
+    "node_modules/@nx/workspace/node_modules/@nx/nx-linux-arm64-gnu": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.8.14.tgz",
+      "integrity": "sha512-2E70qMKOhh7Fp4JGcRbRLvFKq0+ANVdAgSzH47plxOLygIeVAfIXRSuQbCI0EUFa5Sy6hImLaoRSB2GdgKihAw==",
       "cpu": [
         "arm64"
       ],
@@ -7327,10 +8008,10 @@
         "node": ">= 10"
       }
     },
-    "node_modules/@nx/nx-linux-arm64-musl": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.2.2.tgz",
-      "integrity": "sha512-rnRXDLvHHj66rCslD4ShDq6KBOVsQ+X63GWTGKM0pnTIIDje9+ltZCoAByieCUm4BvFfCWMUf9y0mGfZvLVKSw==",
+    "node_modules/@nx/workspace/node_modules/@nx/nx-linux-arm64-musl": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.8.14.tgz",
+      "integrity": "sha512-ltty/PDWqkYgu/6Ye65d7v5nh3D6e0n3SacoKRs2Vtfz5oHYRUkSKizKIhEVfRNuHn3d9j8ve1fdcCN4SDPUBQ==",
       "cpu": [
         "arm64"
       ],
@@ -7344,10 +8025,10 @@
         "node": ">= 10"
       }
     },
-    "node_modules/@nx/nx-linux-x64-gnu": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.2.2.tgz",
-      "integrity": "sha512-K1Z2DVTnyCGl4nolhZ8fvHEixoe1pZOY256LD6D0lGca4Fsi3mHQ7lDU237Pzyc91+cfLva/OAvrivRPeU+DMA==",
+    "node_modules/@nx/workspace/node_modules/@nx/nx-linux-x64-gnu": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.8.14.tgz",
+      "integrity": "sha512-JzE3BuO9RCBVdgai18CCze6KUzG0AozE0TtYFxRokfSC05NU3nUhd/o62UsOl7s6Bqt/9nwrW7JC8pNDiCi9OQ==",
       "cpu": [
         "x64"
       ],
@@ -7361,10 +8042,10 @@
         "node": ">= 10"
       }
     },
-    "node_modules/@nx/nx-linux-x64-musl": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.2.2.tgz",
-      "integrity": "sha512-pyWe+d2Y2pJVgPZf27KkDBufhFPq+Xhs3/zAQdJbicMvym7uhw0qMTV+lmoMXgfx52WZzhqTfG8JQcDqHjExJw==",
+    "node_modules/@nx/workspace/node_modules/@nx/nx-linux-x64-musl": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.8.14.tgz",
+      "integrity": "sha512-2rPvDOQLb7Wd6YiU88FMBiLtYco0dVXF99IJBRGAWv+WTI7MNr47OyK2ze+JOsbYY1d8aOGUvckUvCCZvZKEfg==",
       "cpu": [
         "x64"
       ],
@@ -7378,10 +8059,10 @@
         "node": ">= 10"
       }
     },
-    "node_modules/@nx/nx-win32-arm64-msvc": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.2.2.tgz",
-      "integrity": "sha512-zqSoVrV34tx6qhQo/PwD9IMGhzoNSaFQxjTjNCY61sE7iwi5Qt4dDs3Rlh1ZFCBFnrjziymRPY2RryArgeK8Bw==",
+    "node_modules/@nx/workspace/node_modules/@nx/nx-win32-arm64-msvc": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.8.14.tgz",
+      "integrity": "sha512-JxW+YPS+EjhUsLw9C6wtk9pQTG3psyFwxhab8y/dgk2s4AOTLyIm0XxgcCJVvB6i4uv+s1g0QXRwp6+q3IR6hg==",
       "cpu": [
         "arm64"
       ],
@@ -7395,10 +8076,10 @@
         "node": ">= 10"
       }
     },
-    "node_modules/@nx/nx-win32-x64-msvc": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.2.2.tgz",
-      "integrity": "sha512-IfQf2axmCuSArhFGaocIDt8ajWDHXoVut5NOQH4eV2q9whP1j/LVB8EehEaolF5UenM7rhL4V25PXPuuBaUq4A==",
+    "node_modules/@nx/workspace/node_modules/@nx/nx-win32-x64-msvc": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.8.14.tgz",
+      "integrity": "sha512-RxiPlBWPcGSf9TzIIy62iKRdRhokXMDUsPub9DL2VdVyTMXPZQR25aY/PJeasJN1EQU74hg097LK2wSHi+vzOQ==",
       "cpu": [
         "x64"
       ],
@@ -7412,21 +8093,210 @@
         "node": ">= 10"
       }
     },
-    "node_modules/@nx/workspace": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-20.2.2.tgz",
-      "integrity": "sha512-VC22d5EG9f8sLD+gvq9Nbau0u8cV0gy5aYyRcleecqs9bBvOiVxAvv7HaDCRcHezHQhKwxcIOZvmuCjYF/oKxg==",
+    "node_modules/@nx/workspace/node_modules/@yarnpkg/parsers": {
+      "version": "3.0.0-rc.46",
+      "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz",
+      "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "js-yaml": "^3.10.0",
+        "tslib": "^2.4.0"
+      },
+      "engines": {
+        "node": ">=14.15.0"
+      }
+    },
+    "node_modules/@nx/workspace/node_modules/argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "node_modules/@nx/workspace/node_modules/define-lazy-prop": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+      "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@nx/workspace/node_modules/is-docker": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+      "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "is-docker": "cli.js"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@nx/workspace/node_modules/is-wsl": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+      "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-docker": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@nx/workspace/node_modules/js-yaml": {
+      "version": "3.14.1",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+      "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/@nx/workspace/node_modules/jsonc-parser": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
+      "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@nx/workspace/node_modules/nx": {
+      "version": "19.8.14",
+      "resolved": "https://registry.npmjs.org/nx/-/nx-19.8.14.tgz",
+      "integrity": "sha512-yprBOWV16eQntz5h5SShYHMVeN50fUb6yHfzsqNiFneCJeyVjyJ585m+2TuVbE11vT1amU0xCjHcSGfJBBnm8g==",
       "dev": true,
+      "hasInstallScript": true,
       "license": "MIT",
       "dependencies": {
-        "@nx/devkit": "20.2.2",
+        "@napi-rs/wasm-runtime": "0.2.4",
+        "@nrwl/tao": "19.8.14",
+        "@yarnpkg/lockfile": "^1.1.0",
+        "@yarnpkg/parsers": "3.0.0-rc.46",
+        "@zkochan/js-yaml": "0.0.7",
+        "axios": "^1.7.4",
         "chalk": "^4.1.0",
+        "cli-cursor": "3.1.0",
+        "cli-spinners": "2.6.1",
+        "cliui": "^8.0.1",
+        "dotenv": "~16.4.5",
+        "dotenv-expand": "~11.0.6",
         "enquirer": "~2.3.6",
-        "nx": "20.2.2",
+        "figures": "3.2.0",
+        "flat": "^5.0.2",
+        "front-matter": "^4.0.2",
+        "ignore": "^5.0.4",
+        "jest-diff": "^29.4.1",
+        "jsonc-parser": "3.2.0",
+        "lines-and-columns": "2.0.3",
+        "minimatch": "9.0.3",
+        "node-machine-id": "1.1.12",
+        "npm-run-path": "^4.0.1",
+        "open": "^8.4.0",
+        "ora": "5.3.0",
+        "semver": "^7.5.3",
+        "string-width": "^4.2.3",
+        "strong-log-transformer": "^2.1.0",
+        "tar-stream": "~2.2.0",
+        "tmp": "~0.2.1",
+        "tsconfig-paths": "^4.1.2",
         "tslib": "^2.3.0",
+        "yargs": "^17.6.2",
         "yargs-parser": "21.1.1"
+      },
+      "bin": {
+        "nx": "bin/nx.js",
+        "nx-cloud": "bin/nx-cloud.js"
+      },
+      "optionalDependencies": {
+        "@nx/nx-darwin-arm64": "19.8.14",
+        "@nx/nx-darwin-x64": "19.8.14",
+        "@nx/nx-freebsd-x64": "19.8.14",
+        "@nx/nx-linux-arm-gnueabihf": "19.8.14",
+        "@nx/nx-linux-arm64-gnu": "19.8.14",
+        "@nx/nx-linux-arm64-musl": "19.8.14",
+        "@nx/nx-linux-x64-gnu": "19.8.14",
+        "@nx/nx-linux-x64-musl": "19.8.14",
+        "@nx/nx-win32-arm64-msvc": "19.8.14",
+        "@nx/nx-win32-x64-msvc": "19.8.14"
+      },
+      "peerDependencies": {
+        "@swc-node/register": "^1.8.0",
+        "@swc/core": "^1.3.85"
+      },
+      "peerDependenciesMeta": {
+        "@swc-node/register": {
+          "optional": true
+        },
+        "@swc/core": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@nx/workspace/node_modules/open": {
+      "version": "8.4.2",
+      "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+      "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "define-lazy-prop": "^2.0.0",
+        "is-docker": "^2.1.1",
+        "is-wsl": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@nx/workspace/node_modules/ora": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz",
+      "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bl": "^4.0.3",
+        "chalk": "^4.1.0",
+        "cli-cursor": "^3.1.0",
+        "cli-spinners": "^2.5.0",
+        "is-interactive": "^1.0.0",
+        "log-symbols": "^4.0.0",
+        "strip-ansi": "^6.0.0",
+        "wcwidth": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/@nx/workspace/node_modules/sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+      "dev": true,
+      "license": "BSD-3-Clause"
+    },
     "node_modules/@parcel/watcher": {
       "version": "2.5.0",
       "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz",
@@ -9715,6 +10585,7 @@
       "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==",
       "dev": true,
       "license": "BSD-2-Clause",
+      "peer": true,
       "dependencies": {
         "js-yaml": "^3.10.0",
         "tslib": "^2.4.0"
@@ -9729,6 +10600,7 @@
       "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "sprintf-js": "~1.0.2"
       }
@@ -9739,6 +10611,7 @@
       "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "argparse": "^1.0.7",
         "esprima": "^4.0.0"
@@ -9752,7 +10625,8 @@
       "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
       "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
       "dev": true,
-      "license": "BSD-3-Clause"
+      "license": "BSD-3-Clause",
+      "peer": true
     },
     "node_modules/@zkochan/js-yaml": {
       "version": "0.0.7",
@@ -23664,6 +24538,7 @@
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "@napi-rs/wasm-runtime": "0.2.4",
         "@yarnpkg/lockfile": "^1.1.0",
@@ -23734,6 +24609,7 @@
       "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "engines": {
         "node": ">=8"
       }
@@ -23744,6 +24620,7 @@
       "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "bin": {
         "is-docker": "cli.js"
       },
@@ -23760,6 +24637,7 @@
       "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "is-docker": "^2.0.0"
       },
@@ -23772,7 +24650,8 @@
       "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
       "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "peer": true
     },
     "node_modules/nx/node_modules/open": {
       "version": "8.4.2",
@@ -23780,6 +24659,7 @@
       "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "define-lazy-prop": "^2.0.0",
         "is-docker": "^2.1.1",
@@ -23798,6 +24678,7 @@
       "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "bl": "^4.0.3",
         "chalk": "^4.1.0",
@@ -27652,6 +28533,24 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/strong-log-transformer": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz",
+      "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "duplexer": "^0.1.1",
+        "minimist": "^1.2.0",
+        "through": "^2.3.4"
+      },
+      "bin": {
+        "sl-log-transformer": "bin/sl-log-transformer.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/strongly-connected-components": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz",
diff --git a/package.json b/package.json
index f704d0c28..c427033a6 100644
--- a/package.json
+++ b/package.json
@@ -77,8 +77,8 @@
     "@angular/language-service": "19.0.4",
     "@cypress/schematic": "^2.5.2",
     "@cypress/webpack-preprocessor": "^6.0.2",
-    "@nx/cypress": "^20.2.2",
-    "@nx/workspace": "^20.2.2",
+    "@nx/cypress": "^19.2.2",
+    "@nx/workspace": "^19.2.2",
     "@types/aws-sdk": "^2.7.4",
     "@types/d3-array": "^3.2.1",
     "@types/d3-scale-chromatic": "^3.1.0",
@@ -92,7 +92,7 @@
     "@typescript-eslint/eslint-plugin": "^8.18.1",
     "@typescript-eslint/parser": "^8.18.1",
     "angular-http-server": "^1.12.0",
-    "cypress": "^13.16.1",
+    "cypress": "^13.15.2",
     "eslint-plugin-import": "^2.31.0",
     "eslint-plugin-jsdoc": "^50.6.1",
     "eslint-plugin-prefer-arrow": "^1.2.3",
-- 
GitLab


From 32998c400c6124929c8175080954cae609c19d65 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 15:51:24 -0700
Subject: [PATCH 22/27] fix

---
 package-lock.json | 2126 +++++++++++++++------------------------------
 package.json      |    9 +-
 2 files changed, 707 insertions(+), 1428 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 9dc618f3e..0aa2f1036 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -54,7 +54,7 @@
         "@cypress/schematic": "^2.5.2",
         "@cypress/webpack-preprocessor": "^6.0.2",
         "@nx/cypress": "^19.2.2",
-        "@nx/workspace": "^19.2.2",
+        "@nx/workspace": "^20.2.2",
         "@types/aws-sdk": "^2.7.4",
         "@types/d3-array": "^3.2.1",
         "@types/d3-scale-chromatic": "^3.1.0",
@@ -68,10 +68,9 @@
         "@typescript-eslint/eslint-plugin": "^8.18.1",
         "@typescript-eslint/parser": "^8.18.1",
         "angular-http-server": "^1.12.0",
-        "cypress": "^13.15.2",
+        "cypress": "^13.16.1",
+        "eslint-config-prettier": "^9.1.0",
         "eslint-plugin-import": "^2.31.0",
-        "eslint-plugin-jsdoc": "^50.6.1",
-        "eslint-plugin-prefer-arrow": "^1.2.3",
         "eslint-plugin-prettier": "^5.2.1",
         "eslint-plugin-simple-import-sort": "^12.1.1",
         "eslint-plugin-sort-keys-fix": "^1.1.2",
@@ -84,7 +83,7 @@
         "jest-environment-jsdom": "^29.7.0",
         "jest-fail-on-console": "^3.3.1",
         "jest-junit": "^16.0.0",
-        "jest-preset-angular": "^14.2.4",
+        "jest-preset-angular": "^14.4.2",
         "ng-packagr": "^19.0.1",
         "prettier": "^3.4.2",
         "pretty-quick": "^4.0.0",
@@ -3310,9 +3309,9 @@
       }
     },
     "node_modules/@babel/plugin-transform-typescript": {
-      "version": "7.26.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz",
-      "integrity": "sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz",
+      "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4295,21 +4294,6 @@
         "tslib": "^2.4.0"
       }
     },
-    "node_modules/@es-joy/jsdoccomment": {
-      "version": "0.49.0",
-      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz",
-      "integrity": "sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "comment-parser": "1.4.1",
-        "esquery": "^1.6.0",
-        "jsdoc-type-pratt-parser": "~4.1.0"
-      },
-      "engines": {
-        "node": ">=16"
-      }
-    },
     "node_modules/@esbuild/aix-ppc64": {
       "version": "0.23.0",
       "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz",
@@ -6989,619 +6973,277 @@
       }
     },
     "node_modules/@nrwl/cypress": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nrwl/cypress/-/cypress-19.8.14.tgz",
-      "integrity": "sha512-IqbjMM2MiHZb/1fLE5hwRU9RtTLDj7K+QzmVlzH1mTse0uphYFrQZZ5Y+mvYkR8OloEKL3UJPgbpcVScS4c8NQ==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nrwl/cypress/-/cypress-19.8.10.tgz",
+      "integrity": "sha512-54q/f2M75Q6r8u90O7HUt3LtX2vgw1kapnZ+sGN2Ky4+RvhgfwgKUDnnSw4+Zsx8DMJqCG4bOPZFryJs/oBX/g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nx/cypress": "19.8.14"
+        "@nx/cypress": "19.8.10"
       }
     },
     "node_modules/@nrwl/devkit": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.8.14.tgz",
-      "integrity": "sha512-Oud7BPhFNqE3/YStULn/gHyuGSw2QyxUaHXJApr+DybmYtUms7hQ+cWnY1IY+hRpdtU9ldlg8UYx+VslpS9YNQ==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.8.10.tgz",
+      "integrity": "sha512-voDKQcf5v7HvjDeF8x21kULJK6OqOdeRS9lPCSnbF2cKwKGfdEPszLxw7j/SPV5R6TYKs5rDHt8Yj72RhXfteQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nx/devkit": "19.8.14"
+        "@nx/devkit": "19.8.10"
       }
     },
     "node_modules/@nrwl/js": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-19.8.14.tgz",
-      "integrity": "sha512-DilRYVrqoecsNOkV2j4QDvcIjJXaO2krV7bbfGU/9TSmDzNcdB1R++dEgpa0seo2FrEfVgKffOl/6zzi8PhsgQ==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-19.8.10.tgz",
+      "integrity": "sha512-3mVljFIlizoBDeyVBHsRuq7LMbij4NSL0zOJoEILsBcNjmZ4UZQhkztH/jbWN9JCSyWxDmo991d9KkCA5zxAKQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nx/js": "19.8.14"
+        "@nx/js": "19.8.10"
       }
     },
     "node_modules/@nrwl/tao": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.8.14.tgz",
-      "integrity": "sha512-zBeYzzwg43T/Z8ZtLblv0fcKuqJULttqYDekSLILThXp3UOMSerEvruhUgwddCY1jUssfLscz8vacMKISv5X4w==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.8.10.tgz",
+      "integrity": "sha512-fY/g5r4mqDrxcyHeg2ggi1U4B+24y8JZISmn4l6pXDXr13hdTuBv6nNxJhogrb/RW24IkweqYtAsHjh1d5CoYw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "nx": "19.8.14",
+        "nx": "19.8.10",
         "tslib": "^2.3.0"
       },
       "bin": {
         "tao": "index.js"
       }
     },
-    "node_modules/@nrwl/tao/node_modules/@nx/nx-darwin-arm64": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.8.14.tgz",
-      "integrity": "sha512-bZUFf23gAzuwVw71dR8rngye5aCR8Z/ouIo+KayjqB0LWWoi3WzO73s4S69ljftYt4n6z9wvD+Trbb1BKm2fPg==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@nrwl/workspace": {
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-19.8.10.tgz",
+      "integrity": "sha512-W90BBVVTaDxlHtATQ9RQdKA8YIxziCL3p7NZcdqWMqa2o21Q0eer2QpvUGRrY5VxcthsnPJNW9kjitv1nnD7EQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 10"
+      "dependencies": {
+        "@nx/workspace": "19.8.10"
       }
     },
-    "node_modules/@nrwl/tao/node_modules/@nx/nx-darwin-x64": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.8.14.tgz",
-      "integrity": "sha512-UXXVea8icFG/3rFwpbLYsD6O4wlyJ1STQfOdhGK1Hyuga70AUUdrjVm7HzigAQP/Sb2Nzd7155YXHzfpRPDFYA==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@nrwl/workspace/node_modules/@nx/workspace": {
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.8.10.tgz",
+      "integrity": "sha512-oqopf4pbuKE5Qs2FG/Hdl/5ln5Seo6LPiW6XVI4FPs6Wi7eiXAb5Umc6MOqpg9dZTlmWeAWm6wt13yXzNGs8YA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 10"
+      "dependencies": {
+        "@nrwl/workspace": "19.8.10",
+        "@nx/devkit": "19.8.10",
+        "chalk": "^4.1.0",
+        "enquirer": "~2.3.6",
+        "nx": "19.8.10",
+        "tslib": "^2.3.0",
+        "yargs-parser": "21.1.1"
       }
     },
-    "node_modules/@nrwl/tao/node_modules/@nx/nx-freebsd-x64": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.8.14.tgz",
-      "integrity": "sha512-TK2xuXn+BI6hxGaRK1HRUPWeF/nOtezKSqM+6rbippfCzjES/crmp9l5nbI764MMthtUmykCyWvhEfkDca6kbA==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@nx/cypress": {
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-19.8.10.tgz",
+      "integrity": "sha512-OTdjV8P3wAeXV8vOPaTV4CrnKoKI67ub/8a8VoeV0nkzPchlccsIS6Q6zkyy2BDe8qtwOSBHcAeYODoNj41q2Q==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">= 10"
+      "dependencies": {
+        "@nrwl/cypress": "19.8.10",
+        "@nx/devkit": "19.8.10",
+        "@nx/eslint": "19.8.10",
+        "@nx/js": "19.8.10",
+        "@phenomnomnominal/tsquery": "~5.0.1",
+        "detect-port": "^1.5.1",
+        "tslib": "^2.3.0"
+      },
+      "peerDependencies": {
+        "cypress": ">= 3 < 14"
+      },
+      "peerDependenciesMeta": {
+        "cypress": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-arm-gnueabihf": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.8.14.tgz",
-      "integrity": "sha512-33rptyRraqaeQ2Kq6pcZKQqgnYY/7zcGH8fHXgKK7XzKk+7QuPViq+jMEUZP5E3UzZPkIYhsfmZcZqhNRvepJQ==",
-      "cpu": [
-        "arm"
-      ],
+    "node_modules/@nx/devkit": {
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.8.10.tgz",
+      "integrity": "sha512-i5gWrxtniGOryiPU9df4quzrZuvuzqs8gL+GlLBaoFLqA9UNsTLShPWwHblmTK0FZZxlZYNthJR19nVweVO2ag==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
+      "dependencies": {
+        "@nrwl/devkit": "19.8.10",
+        "ejs": "^3.1.7",
+        "enquirer": "~2.3.6",
+        "ignore": "^5.0.4",
+        "minimatch": "9.0.3",
+        "semver": "^7.5.3",
+        "tmp": "~0.2.1",
+        "tslib": "^2.3.0",
+        "yargs-parser": "21.1.1"
+      },
+      "peerDependencies": {
+        "nx": ">= 19 <= 21"
       }
     },
-    "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-arm64-gnu": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.8.14.tgz",
-      "integrity": "sha512-2E70qMKOhh7Fp4JGcRbRLvFKq0+ANVdAgSzH47plxOLygIeVAfIXRSuQbCI0EUFa5Sy6hImLaoRSB2GdgKihAw==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@nx/eslint": {
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-19.8.10.tgz",
+      "integrity": "sha512-Naz/bsITv4R+GFYRx6ktNmBeUdzktrAGkKp3K+16An5dHSH3IOpzkuXbszU2lw5GXpRAfPQS5zkCAm2kESxANA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
+      "dependencies": {
+        "@nx/devkit": "19.8.10",
+        "@nx/js": "19.8.10",
+        "@nx/linter": "19.8.10",
+        "semver": "^7.5.3",
+        "tslib": "^2.3.0",
+        "typescript": "~5.4.2"
+      },
+      "peerDependencies": {
+        "@zkochan/js-yaml": "0.0.7",
+        "eslint": "^8.0.0 || ^9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@zkochan/js-yaml": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-arm64-musl": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.8.14.tgz",
-      "integrity": "sha512-ltty/PDWqkYgu/6Ye65d7v5nh3D6e0n3SacoKRs2Vtfz5oHYRUkSKizKIhEVfRNuHn3d9j8ve1fdcCN4SDPUBQ==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@nx/eslint/node_modules/typescript": {
+      "version": "5.4.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
+      "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "license": "Apache-2.0",
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
       "engines": {
-        "node": ">= 10"
+        "node": ">=14.17"
       }
     },
-    "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-x64-gnu": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.8.14.tgz",
-      "integrity": "sha512-JzE3BuO9RCBVdgai18CCze6KUzG0AozE0TtYFxRokfSC05NU3nUhd/o62UsOl7s6Bqt/9nwrW7JC8pNDiCi9OQ==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@nx/js": {
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/js/-/js-19.8.10.tgz",
+      "integrity": "sha512-gAt3XnXyYJiLyeXIAwHjHwZ34irLCvpINSAQoD2xY+1ZHU3RXJG8QgqlgUIfGUVhbCr8IovK9gwUCwLm4uAsag==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
+      "dependencies": {
+        "@babel/core": "^7.23.2",
+        "@babel/plugin-proposal-decorators": "^7.22.7",
+        "@babel/plugin-transform-class-properties": "^7.22.5",
+        "@babel/plugin-transform-runtime": "^7.23.2",
+        "@babel/preset-env": "^7.23.2",
+        "@babel/preset-typescript": "^7.22.5",
+        "@babel/runtime": "^7.22.6",
+        "@nrwl/js": "19.8.10",
+        "@nx/devkit": "19.8.10",
+        "@nx/workspace": "19.8.10",
+        "babel-plugin-const-enum": "^1.0.1",
+        "babel-plugin-macros": "^2.8.0",
+        "babel-plugin-transform-typescript-metadata": "^0.3.1",
+        "chalk": "^4.1.0",
+        "columnify": "^1.6.0",
+        "detect-port": "^1.5.1",
+        "enquirer": "~2.3.6",
+        "fast-glob": "3.2.7",
+        "ignore": "^5.0.4",
+        "js-tokens": "^4.0.0",
+        "jsonc-parser": "3.2.0",
+        "minimatch": "9.0.3",
+        "npm-package-arg": "11.0.1",
+        "npm-run-path": "^4.0.1",
+        "ora": "5.3.0",
+        "semver": "^7.5.3",
+        "source-map-support": "0.5.19",
+        "ts-node": "10.9.1",
+        "tsconfig-paths": "^4.1.2",
+        "tslib": "^2.3.0"
+      },
+      "peerDependencies": {
+        "verdaccio": "^5.0.4"
+      },
+      "peerDependenciesMeta": {
+        "verdaccio": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-x64-musl": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.8.14.tgz",
-      "integrity": "sha512-2rPvDOQLb7Wd6YiU88FMBiLtYco0dVXF99IJBRGAWv+WTI7MNr47OyK2ze+JOsbYY1d8aOGUvckUvCCZvZKEfg==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@nx/js/node_modules/@nx/workspace": {
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.8.10.tgz",
+      "integrity": "sha512-oqopf4pbuKE5Qs2FG/Hdl/5ln5Seo6LPiW6XVI4FPs6Wi7eiXAb5Umc6MOqpg9dZTlmWeAWm6wt13yXzNGs8YA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
+      "dependencies": {
+        "@nrwl/workspace": "19.8.10",
+        "@nx/devkit": "19.8.10",
+        "chalk": "^4.1.0",
+        "enquirer": "~2.3.6",
+        "nx": "19.8.10",
+        "tslib": "^2.3.0",
+        "yargs-parser": "21.1.1"
       }
     },
-    "node_modules/@nrwl/tao/node_modules/@nx/nx-win32-arm64-msvc": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.8.14.tgz",
-      "integrity": "sha512-JxW+YPS+EjhUsLw9C6wtk9pQTG3psyFwxhab8y/dgk2s4AOTLyIm0XxgcCJVvB6i4uv+s1g0QXRwp6+q3IR6hg==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@nx/js/node_modules/fast-glob": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
+      "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      },
       "engines": {
-        "node": ">= 10"
+        "node": ">=8"
       }
     },
-    "node_modules/@nrwl/tao/node_modules/@nx/nx-win32-x64-msvc": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.8.14.tgz",
-      "integrity": "sha512-RxiPlBWPcGSf9TzIIy62iKRdRhokXMDUsPub9DL2VdVyTMXPZQR25aY/PJeasJN1EQU74hg097LK2wSHi+vzOQ==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@nx/js/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
       "engines": {
-        "node": ">= 10"
+        "node": ">= 6"
       }
     },
-    "node_modules/@nrwl/tao/node_modules/@yarnpkg/parsers": {
-      "version": "3.0.0-rc.46",
-      "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz",
-      "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==",
+    "node_modules/@nx/js/node_modules/hosted-git-info": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+      "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
       "dev": true,
-      "license": "BSD-2-Clause",
+      "license": "ISC",
       "dependencies": {
-        "js-yaml": "^3.10.0",
-        "tslib": "^2.4.0"
+        "lru-cache": "^10.0.1"
       },
       "engines": {
-        "node": ">=14.15.0"
+        "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/@nrwl/tao/node_modules/argparse": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+    "node_modules/@nx/js/node_modules/jsonc-parser": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
+      "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "sprintf-js": "~1.0.2"
-      }
+      "license": "MIT"
     },
-    "node_modules/@nrwl/tao/node_modules/define-lazy-prop": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
-      "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+    "node_modules/@nx/js/node_modules/lru-cache": {
+      "version": "10.4.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
       "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/@nrwl/tao/node_modules/is-docker": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
-      "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "is-docker": "cli.js"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@nrwl/tao/node_modules/is-wsl": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
-      "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-docker": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/@nrwl/tao/node_modules/js-yaml": {
-      "version": "3.14.1",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-      "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "argparse": "^1.0.7",
-        "esprima": "^4.0.0"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
-    "node_modules/@nrwl/tao/node_modules/jsonc-parser": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
-      "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@nrwl/tao/node_modules/nx": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/nx/-/nx-19.8.14.tgz",
-      "integrity": "sha512-yprBOWV16eQntz5h5SShYHMVeN50fUb6yHfzsqNiFneCJeyVjyJ585m+2TuVbE11vT1amU0xCjHcSGfJBBnm8g==",
-      "dev": true,
-      "hasInstallScript": true,
-      "license": "MIT",
-      "dependencies": {
-        "@napi-rs/wasm-runtime": "0.2.4",
-        "@nrwl/tao": "19.8.14",
-        "@yarnpkg/lockfile": "^1.1.0",
-        "@yarnpkg/parsers": "3.0.0-rc.46",
-        "@zkochan/js-yaml": "0.0.7",
-        "axios": "^1.7.4",
-        "chalk": "^4.1.0",
-        "cli-cursor": "3.1.0",
-        "cli-spinners": "2.6.1",
-        "cliui": "^8.0.1",
-        "dotenv": "~16.4.5",
-        "dotenv-expand": "~11.0.6",
-        "enquirer": "~2.3.6",
-        "figures": "3.2.0",
-        "flat": "^5.0.2",
-        "front-matter": "^4.0.2",
-        "ignore": "^5.0.4",
-        "jest-diff": "^29.4.1",
-        "jsonc-parser": "3.2.0",
-        "lines-and-columns": "2.0.3",
-        "minimatch": "9.0.3",
-        "node-machine-id": "1.1.12",
-        "npm-run-path": "^4.0.1",
-        "open": "^8.4.0",
-        "ora": "5.3.0",
-        "semver": "^7.5.3",
-        "string-width": "^4.2.3",
-        "strong-log-transformer": "^2.1.0",
-        "tar-stream": "~2.2.0",
-        "tmp": "~0.2.1",
-        "tsconfig-paths": "^4.1.2",
-        "tslib": "^2.3.0",
-        "yargs": "^17.6.2",
-        "yargs-parser": "21.1.1"
-      },
-      "bin": {
-        "nx": "bin/nx.js",
-        "nx-cloud": "bin/nx-cloud.js"
-      },
-      "optionalDependencies": {
-        "@nx/nx-darwin-arm64": "19.8.14",
-        "@nx/nx-darwin-x64": "19.8.14",
-        "@nx/nx-freebsd-x64": "19.8.14",
-        "@nx/nx-linux-arm-gnueabihf": "19.8.14",
-        "@nx/nx-linux-arm64-gnu": "19.8.14",
-        "@nx/nx-linux-arm64-musl": "19.8.14",
-        "@nx/nx-linux-x64-gnu": "19.8.14",
-        "@nx/nx-linux-x64-musl": "19.8.14",
-        "@nx/nx-win32-arm64-msvc": "19.8.14",
-        "@nx/nx-win32-x64-msvc": "19.8.14"
-      },
-      "peerDependencies": {
-        "@swc-node/register": "^1.8.0",
-        "@swc/core": "^1.3.85"
-      },
-      "peerDependenciesMeta": {
-        "@swc-node/register": {
-          "optional": true
-        },
-        "@swc/core": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@nrwl/tao/node_modules/open": {
-      "version": "8.4.2",
-      "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
-      "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-lazy-prop": "^2.0.0",
-        "is-docker": "^2.1.1",
-        "is-wsl": "^2.2.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@nrwl/tao/node_modules/ora": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz",
-      "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "bl": "^4.0.3",
-        "chalk": "^4.1.0",
-        "cli-cursor": "^3.1.0",
-        "cli-spinners": "^2.5.0",
-        "is-interactive": "^1.0.0",
-        "log-symbols": "^4.0.0",
-        "strip-ansi": "^6.0.0",
-        "wcwidth": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@nrwl/tao/node_modules/sprintf-js": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
-      "dev": true,
-      "license": "BSD-3-Clause"
-    },
-    "node_modules/@nrwl/workspace": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-19.8.14.tgz",
-      "integrity": "sha512-I4eZtnHMkqnmOXVy6yN59fQopQZ+Sg0OFWwGluhKD5XPZULrlzECB8d4vblY9pcmQlN/6fat+KBrWkmKl41ZKg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nx/workspace": "19.8.14"
-      }
-    },
-    "node_modules/@nx/cypress": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-19.8.14.tgz",
-      "integrity": "sha512-3TNlQURA/Xe27B+bQGWEwFTzjVChYqpsFP1Xg8iJDYykLGS1jvlCLSAwDtIo8dJCioOdmKR2orFCLHBWioxKog==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nrwl/cypress": "19.8.14",
-        "@nx/devkit": "19.8.14",
-        "@nx/eslint": "19.8.14",
-        "@nx/js": "19.8.14",
-        "@phenomnomnominal/tsquery": "~5.0.1",
-        "detect-port": "^1.5.1",
-        "tslib": "^2.3.0"
-      },
-      "peerDependencies": {
-        "cypress": ">= 3 < 14"
-      },
-      "peerDependenciesMeta": {
-        "cypress": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@nx/devkit": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.8.14.tgz",
-      "integrity": "sha512-A8dCGttbuqgg9P56VTb0ElD2vM5nc5g0aLnX5PSXo4SkFXwd8DV5GgwJKWB1GO9hYyEtbj4gKek0KxnCtdav4g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nrwl/devkit": "19.8.14",
-        "ejs": "^3.1.7",
-        "enquirer": "~2.3.6",
-        "ignore": "^5.0.4",
-        "minimatch": "9.0.3",
-        "semver": "^7.5.3",
-        "tmp": "~0.2.1",
-        "tslib": "^2.3.0",
-        "yargs-parser": "21.1.1"
-      },
-      "peerDependencies": {
-        "nx": ">= 19 <= 21"
-      }
-    },
-    "node_modules/@nx/eslint": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-19.8.14.tgz",
-      "integrity": "sha512-fhrCd8OZue7WcIoU4NyKLLrfolEa2TvSgaLxjDabONqZOJRG38Y7ZX92P+Y1hSEdDZ9AazzirIdsy2d1AZWvfQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nx/devkit": "19.8.14",
-        "@nx/js": "19.8.14",
-        "@nx/linter": "19.8.14",
-        "semver": "^7.5.3",
-        "tslib": "^2.3.0",
-        "typescript": "~5.4.2"
-      },
-      "peerDependencies": {
-        "@zkochan/js-yaml": "0.0.7",
-        "eslint": "^8.0.0 || ^9.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@zkochan/js-yaml": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@nx/eslint/node_modules/typescript": {
-      "version": "5.4.5",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
-      "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "bin": {
-        "tsc": "bin/tsc",
-        "tsserver": "bin/tsserver"
-      },
-      "engines": {
-        "node": ">=14.17"
-      }
-    },
-    "node_modules/@nx/js": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/js/-/js-19.8.14.tgz",
-      "integrity": "sha512-Nk0eEB2F/ZbBkH2iT+cgLWIittY8n5eOrA/uBBG2XMdencJZ9E2HNA/UzSGPZmD4EYVk0R1vm83k5+IMS1VAZA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/core": "^7.23.2",
-        "@babel/plugin-proposal-decorators": "^7.22.7",
-        "@babel/plugin-transform-class-properties": "^7.22.5",
-        "@babel/plugin-transform-runtime": "^7.23.2",
-        "@babel/preset-env": "^7.23.2",
-        "@babel/preset-typescript": "^7.22.5",
-        "@babel/runtime": "^7.22.6",
-        "@nrwl/js": "19.8.14",
-        "@nx/devkit": "19.8.14",
-        "@nx/workspace": "19.8.14",
-        "babel-plugin-const-enum": "^1.0.1",
-        "babel-plugin-macros": "^2.8.0",
-        "babel-plugin-transform-typescript-metadata": "^0.3.1",
-        "chalk": "^4.1.0",
-        "columnify": "^1.6.0",
-        "detect-port": "^1.5.1",
-        "enquirer": "~2.3.6",
-        "fast-glob": "3.2.7",
-        "ignore": "^5.0.4",
-        "js-tokens": "^4.0.0",
-        "jsonc-parser": "3.2.0",
-        "minimatch": "9.0.3",
-        "npm-package-arg": "11.0.1",
-        "npm-run-path": "^4.0.1",
-        "ora": "5.3.0",
-        "semver": "^7.5.3",
-        "source-map-support": "0.5.19",
-        "ts-node": "10.9.1",
-        "tsconfig-paths": "^4.1.2",
-        "tslib": "^2.3.0"
-      },
-      "peerDependencies": {
-        "verdaccio": "^5.0.4"
-      },
-      "peerDependenciesMeta": {
-        "verdaccio": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@nx/js/node_modules/fast-glob": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
-      "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.4"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/@nx/js/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/@nx/js/node_modules/hosted-git-info": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
-      "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "lru-cache": "^10.0.1"
-      },
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@nx/js/node_modules/jsonc-parser": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
-      "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@nx/js/node_modules/lru-cache": {
-      "version": "10.4.3",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
-      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
-      "dev": true,
-      "license": "ISC"
+      "license": "ISC"
     },
     "node_modules/@nx/js/node_modules/npm-package-arg": {
       "version": "11.0.1",
@@ -7718,19 +7360,19 @@
       }
     },
     "node_modules/@nx/linter": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-19.8.14.tgz",
-      "integrity": "sha512-QIeEXmdvXKX6rHIiA3W77l2oB9rABH3HYP6bgNaHyx65+tZ6RvmKfVXk+GWMgTf0lfQpnGyI/M7nsa91RGxu6w==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-19.8.10.tgz",
+      "integrity": "sha512-WEDMLiaLT+JLCVtQF7058I/hRkgR5B7k7oGJ2zxk0iISJfJW2/mkfxW+kEQmQ935F5IjJ/KEiDeIQcTAzuqUdw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nx/eslint": "19.8.14"
+        "@nx/eslint": "19.8.10"
       }
     },
     "node_modules/@nx/nx-darwin-arm64": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.2.2.tgz",
-      "integrity": "sha512-gnS5mtbaBAO5TJkl4T68rQaN/79MMWePavw2SOcFyFnIdAriGEZ+ZFDUE0B/xYJSs9CPWLaGHf+n7oqyxaGd9A==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.8.10.tgz",
+      "integrity": "sha512-zZ0EI1DjFLb5aebjZZuR89irSWZMse9E13QymZLsC8+WE2PMvcwkwUfbMEIhIze88zsThcF1R5U1qZKmrgcD9w==",
       "cpu": [
         "arm64"
       ],
@@ -7740,15 +7382,14 @@
       "os": [
         "darwin"
       ],
-      "peer": true,
       "engines": {
         "node": ">= 10"
       }
     },
     "node_modules/@nx/nx-darwin-x64": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.2.2.tgz",
-      "integrity": "sha512-IctvdQon+K8mlhl06zIq1xTPwf5L4OuS7crzCmK26p5F/lV6iz/UXSPCcgn+bYKOL/q3QCLNR7UasQMjzgCNkQ==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.8.10.tgz",
+      "integrity": "sha512-8vypmuiwIe3t0aaE1b3G34tx6mIUW6a4nbbhMOISWO2ehaX/bnMMbIbrkp/sAP1fYhydbXIqcgixWsN/h3qu1A==",
       "cpu": [
         "x64"
       ],
@@ -7758,15 +7399,14 @@
       "os": [
         "darwin"
       ],
-      "peer": true,
       "engines": {
         "node": ">= 10"
       }
     },
     "node_modules/@nx/nx-freebsd-x64": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.2.2.tgz",
-      "integrity": "sha512-4/Blg9Y6LVU8tS8yoa2BEXPHWsorpvCuZRH0gXPh96i6b71o4ORPafyLOHp08o3WjtUZb4jl5TfDryE+8y62ZA==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.8.10.tgz",
+      "integrity": "sha512-onwAPBoK6nMqniDuHMb4loGuXazodiql23VOlFxe4oIKZKa1A1/l8Z7BW12rW7dpIuL44T+Z83ZTSYZOR84cag==",
       "cpu": [
         "x64"
       ],
@@ -7776,15 +7416,14 @@
       "os": [
         "freebsd"
       ],
-      "peer": true,
       "engines": {
         "node": ">= 10"
       }
     },
     "node_modules/@nx/nx-linux-arm-gnueabihf": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.2.2.tgz",
-      "integrity": "sha512-AVAxbUXi6q+inmp8re3OV7HzH6fbkKnnMKvjDLnkzK8dA2Mv4JFl/gz++rgkYfEsBk20lcB1i3unqNrtOvzS7Q==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.8.10.tgz",
+      "integrity": "sha512-DqDIxe+i8y34srvI5tO09aSai71a620bQvv3dJTfon2Vbr4i4wUsqA99hXFEwEeI2Sjva3vM2eGnEIMEhLAiXQ==",
       "cpu": [
         "arm"
       ],
@@ -7794,15 +7433,14 @@
       "os": [
         "linux"
       ],
-      "peer": true,
       "engines": {
         "node": ">= 10"
       }
     },
     "node_modules/@nx/nx-linux-arm64-gnu": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.2.2.tgz",
-      "integrity": "sha512-h04SLH464Oh/k/1mpAfsMhTVlnc1NJItx4N5DLZb2VuOOY+Tquhrp7HBJLyAhU0Q74JG0LevGFO6wdxliHupmA==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.8.10.tgz",
+      "integrity": "sha512-JEFOtH6vIJB8f2aOg7ZxbPLjLdh04jpVbycE8F4l3W0DjaW7j+sb0vFlsRNsZPq9ZlP9aLXsx/o8ebyEZqCzmQ==",
       "cpu": [
         "arm64"
       ],
@@ -7812,15 +7450,14 @@
       "os": [
         "linux"
       ],
-      "peer": true,
       "engines": {
         "node": ">= 10"
       }
     },
     "node_modules/@nx/nx-linux-arm64-musl": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.2.2.tgz",
-      "integrity": "sha512-rnRXDLvHHj66rCslD4ShDq6KBOVsQ+X63GWTGKM0pnTIIDje9+ltZCoAByieCUm4BvFfCWMUf9y0mGfZvLVKSw==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.8.10.tgz",
+      "integrity": "sha512-KWj7Z/dtwwbQDQi/zA3jBCd1UJ9o8BUGzsLZn0+6fG1ztHw+wy6hzBNvjW6IAabAfMZSozFb3pTFr6gr2UdfZQ==",
       "cpu": [
         "arm64"
       ],
@@ -7830,15 +7467,14 @@
       "os": [
         "linux"
       ],
-      "peer": true,
       "engines": {
         "node": ">= 10"
       }
     },
     "node_modules/@nx/nx-linux-x64-gnu": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.2.2.tgz",
-      "integrity": "sha512-K1Z2DVTnyCGl4nolhZ8fvHEixoe1pZOY256LD6D0lGca4Fsi3mHQ7lDU237Pzyc91+cfLva/OAvrivRPeU+DMA==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.8.10.tgz",
+      "integrity": "sha512-Soxogm5eql+bj4SIY8uFQGJAh/ODsFhiztaA+NxkYnRJOrLIWw+gprHDpyTUi2y4erSj1lHu+DiIZQ43cHq2fw==",
       "cpu": [
         "x64"
       ],
@@ -7848,15 +7484,14 @@
       "os": [
         "linux"
       ],
-      "peer": true,
       "engines": {
         "node": ">= 10"
       }
     },
     "node_modules/@nx/nx-linux-x64-musl": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.2.2.tgz",
-      "integrity": "sha512-pyWe+d2Y2pJVgPZf27KkDBufhFPq+Xhs3/zAQdJbicMvym7uhw0qMTV+lmoMXgfx52WZzhqTfG8JQcDqHjExJw==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.8.10.tgz",
+      "integrity": "sha512-IDEgKqlY0XMNkiZIcKmvhClRRi/6z2fFHvjsLDOmghqzUS8vyRSeEaHiTiKAh5yzNL2gkK96Mcx6OLi4Lrrc4Q==",
       "cpu": [
         "x64"
       ],
@@ -7866,15 +7501,14 @@
       "os": [
         "linux"
       ],
-      "peer": true,
       "engines": {
         "node": ">= 10"
       }
     },
     "node_modules/@nx/nx-win32-arm64-msvc": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.2.2.tgz",
-      "integrity": "sha512-zqSoVrV34tx6qhQo/PwD9IMGhzoNSaFQxjTjNCY61sE7iwi5Qt4dDs3Rlh1ZFCBFnrjziymRPY2RryArgeK8Bw==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.8.10.tgz",
+      "integrity": "sha512-o9YhREK0ogXxKDwE4ci6HtWJX3DGigpvQFK9U8VxzHZQb/sOOVgAU8lNpneH50o1BsPsfPFZFmpt9oYw61ps3Q==",
       "cpu": [
         "arm64"
       ],
@@ -7884,15 +7518,14 @@
       "os": [
         "win32"
       ],
-      "peer": true,
       "engines": {
         "node": ">= 10"
       }
     },
     "node_modules/@nx/nx-win32-x64-msvc": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.2.2.tgz",
-      "integrity": "sha512-IfQf2axmCuSArhFGaocIDt8ajWDHXoVut5NOQH4eV2q9whP1j/LVB8EehEaolF5UenM7rhL4V25PXPuuBaUq4A==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.8.10.tgz",
+      "integrity": "sha512-gayjQyHU18Jglt+95f4DsnTOETW8+pX6zNbd9wPFyf6PQCmoc62kl07/NxJMzRNkzwK7p3CzS7aQlCe4wJf+Xg==",
       "cpu": [
         "x64"
       ],
@@ -7902,31 +7535,49 @@
       "os": [
         "win32"
       ],
-      "peer": true,
       "engines": {
         "node": ">= 10"
       }
     },
     "node_modules/@nx/workspace": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.8.14.tgz",
-      "integrity": "sha512-Yb3d5WVjCyLill8MycKU+P/kbTyatKKqoUCu5zWokkysABiMWRLlrCYNzqwjTjeIIGj9MMGRHAQEemkBdL4tdg==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-20.2.2.tgz",
+      "integrity": "sha512-VC22d5EG9f8sLD+gvq9Nbau0u8cV0gy5aYyRcleecqs9bBvOiVxAvv7HaDCRcHezHQhKwxcIOZvmuCjYF/oKxg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nrwl/workspace": "19.8.14",
-        "@nx/devkit": "19.8.14",
+        "@nx/devkit": "20.2.2",
         "chalk": "^4.1.0",
         "enquirer": "~2.3.6",
-        "nx": "19.8.14",
+        "nx": "20.2.2",
         "tslib": "^2.3.0",
         "yargs-parser": "21.1.1"
       }
     },
+    "node_modules/@nx/workspace/node_modules/@nx/devkit": {
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.2.2.tgz",
+      "integrity": "sha512-uqs0LVvuRRVAfFdn0ewvmr1vsNV9Ztugw36emcLJxskqhBZb10K+vzdTDAZpg5aVE2ISg1BmPidoOyk1tP+Omg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ejs": "^3.1.7",
+        "enquirer": "~2.3.6",
+        "ignore": "^5.0.4",
+        "minimatch": "9.0.3",
+        "semver": "^7.5.3",
+        "tmp": "~0.2.1",
+        "tslib": "^2.3.0",
+        "yargs-parser": "21.1.1"
+      },
+      "peerDependencies": {
+        "nx": ">= 19 <= 21"
+      }
+    },
     "node_modules/@nx/workspace/node_modules/@nx/nx-darwin-arm64": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.8.14.tgz",
-      "integrity": "sha512-bZUFf23gAzuwVw71dR8rngye5aCR8Z/ouIo+KayjqB0LWWoi3WzO73s4S69ljftYt4n6z9wvD+Trbb1BKm2fPg==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.2.2.tgz",
+      "integrity": "sha512-gnS5mtbaBAO5TJkl4T68rQaN/79MMWePavw2SOcFyFnIdAriGEZ+ZFDUE0B/xYJSs9CPWLaGHf+n7oqyxaGd9A==",
       "cpu": [
         "arm64"
       ],
@@ -7941,9 +7592,9 @@
       }
     },
     "node_modules/@nx/workspace/node_modules/@nx/nx-darwin-x64": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.8.14.tgz",
-      "integrity": "sha512-UXXVea8icFG/3rFwpbLYsD6O4wlyJ1STQfOdhGK1Hyuga70AUUdrjVm7HzigAQP/Sb2Nzd7155YXHzfpRPDFYA==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.2.2.tgz",
+      "integrity": "sha512-IctvdQon+K8mlhl06zIq1xTPwf5L4OuS7crzCmK26p5F/lV6iz/UXSPCcgn+bYKOL/q3QCLNR7UasQMjzgCNkQ==",
       "cpu": [
         "x64"
       ],
@@ -7958,9 +7609,9 @@
       }
     },
     "node_modules/@nx/workspace/node_modules/@nx/nx-freebsd-x64": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.8.14.tgz",
-      "integrity": "sha512-TK2xuXn+BI6hxGaRK1HRUPWeF/nOtezKSqM+6rbippfCzjES/crmp9l5nbI764MMthtUmykCyWvhEfkDca6kbA==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.2.2.tgz",
+      "integrity": "sha512-4/Blg9Y6LVU8tS8yoa2BEXPHWsorpvCuZRH0gXPh96i6b71o4ORPafyLOHp08o3WjtUZb4jl5TfDryE+8y62ZA==",
       "cpu": [
         "x64"
       ],
@@ -7975,9 +7626,9 @@
       }
     },
     "node_modules/@nx/workspace/node_modules/@nx/nx-linux-arm-gnueabihf": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.8.14.tgz",
-      "integrity": "sha512-33rptyRraqaeQ2Kq6pcZKQqgnYY/7zcGH8fHXgKK7XzKk+7QuPViq+jMEUZP5E3UzZPkIYhsfmZcZqhNRvepJQ==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.2.2.tgz",
+      "integrity": "sha512-AVAxbUXi6q+inmp8re3OV7HzH6fbkKnnMKvjDLnkzK8dA2Mv4JFl/gz++rgkYfEsBk20lcB1i3unqNrtOvzS7Q==",
       "cpu": [
         "arm"
       ],
@@ -7992,9 +7643,9 @@
       }
     },
     "node_modules/@nx/workspace/node_modules/@nx/nx-linux-arm64-gnu": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.8.14.tgz",
-      "integrity": "sha512-2E70qMKOhh7Fp4JGcRbRLvFKq0+ANVdAgSzH47plxOLygIeVAfIXRSuQbCI0EUFa5Sy6hImLaoRSB2GdgKihAw==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.2.2.tgz",
+      "integrity": "sha512-h04SLH464Oh/k/1mpAfsMhTVlnc1NJItx4N5DLZb2VuOOY+Tquhrp7HBJLyAhU0Q74JG0LevGFO6wdxliHupmA==",
       "cpu": [
         "arm64"
       ],
@@ -8009,9 +7660,9 @@
       }
     },
     "node_modules/@nx/workspace/node_modules/@nx/nx-linux-arm64-musl": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.8.14.tgz",
-      "integrity": "sha512-ltty/PDWqkYgu/6Ye65d7v5nh3D6e0n3SacoKRs2Vtfz5oHYRUkSKizKIhEVfRNuHn3d9j8ve1fdcCN4SDPUBQ==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.2.2.tgz",
+      "integrity": "sha512-rnRXDLvHHj66rCslD4ShDq6KBOVsQ+X63GWTGKM0pnTIIDje9+ltZCoAByieCUm4BvFfCWMUf9y0mGfZvLVKSw==",
       "cpu": [
         "arm64"
       ],
@@ -8026,9 +7677,9 @@
       }
     },
     "node_modules/@nx/workspace/node_modules/@nx/nx-linux-x64-gnu": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.8.14.tgz",
-      "integrity": "sha512-JzE3BuO9RCBVdgai18CCze6KUzG0AozE0TtYFxRokfSC05NU3nUhd/o62UsOl7s6Bqt/9nwrW7JC8pNDiCi9OQ==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.2.2.tgz",
+      "integrity": "sha512-K1Z2DVTnyCGl4nolhZ8fvHEixoe1pZOY256LD6D0lGca4Fsi3mHQ7lDU237Pzyc91+cfLva/OAvrivRPeU+DMA==",
       "cpu": [
         "x64"
       ],
@@ -8043,9 +7694,9 @@
       }
     },
     "node_modules/@nx/workspace/node_modules/@nx/nx-linux-x64-musl": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.8.14.tgz",
-      "integrity": "sha512-2rPvDOQLb7Wd6YiU88FMBiLtYco0dVXF99IJBRGAWv+WTI7MNr47OyK2ze+JOsbYY1d8aOGUvckUvCCZvZKEfg==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.2.2.tgz",
+      "integrity": "sha512-pyWe+d2Y2pJVgPZf27KkDBufhFPq+Xhs3/zAQdJbicMvym7uhw0qMTV+lmoMXgfx52WZzhqTfG8JQcDqHjExJw==",
       "cpu": [
         "x64"
       ],
@@ -8060,9 +7711,9 @@
       }
     },
     "node_modules/@nx/workspace/node_modules/@nx/nx-win32-arm64-msvc": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.8.14.tgz",
-      "integrity": "sha512-JxW+YPS+EjhUsLw9C6wtk9pQTG3psyFwxhab8y/dgk2s4AOTLyIm0XxgcCJVvB6i4uv+s1g0QXRwp6+q3IR6hg==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.2.2.tgz",
+      "integrity": "sha512-zqSoVrV34tx6qhQo/PwD9IMGhzoNSaFQxjTjNCY61sE7iwi5Qt4dDs3Rlh1ZFCBFnrjziymRPY2RryArgeK8Bw==",
       "cpu": [
         "arm64"
       ],
@@ -8077,9 +7728,9 @@
       }
     },
     "node_modules/@nx/workspace/node_modules/@nx/nx-win32-x64-msvc": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.8.14.tgz",
-      "integrity": "sha512-RxiPlBWPcGSf9TzIIy62iKRdRhokXMDUsPub9DL2VdVyTMXPZQR25aY/PJeasJN1EQU74hg097LK2wSHi+vzOQ==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.2.2.tgz",
+      "integrity": "sha512-IfQf2axmCuSArhFGaocIDt8ajWDHXoVut5NOQH4eV2q9whP1j/LVB8EehEaolF5UenM7rhL4V25PXPuuBaUq4A==",
       "cpu": [
         "x64"
       ],
@@ -8094,9 +7745,9 @@
       }
     },
     "node_modules/@nx/workspace/node_modules/@yarnpkg/parsers": {
-      "version": "3.0.0-rc.46",
-      "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz",
-      "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz",
+      "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
@@ -8104,7 +7755,7 @@
         "tslib": "^2.4.0"
       },
       "engines": {
-        "node": ">=14.15.0"
+        "node": ">=18.12.0"
       }
     },
     "node_modules/@nx/workspace/node_modules/argparse": {
@@ -8178,17 +7829,16 @@
       "license": "MIT"
     },
     "node_modules/@nx/workspace/node_modules/nx": {
-      "version": "19.8.14",
-      "resolved": "https://registry.npmjs.org/nx/-/nx-19.8.14.tgz",
-      "integrity": "sha512-yprBOWV16eQntz5h5SShYHMVeN50fUb6yHfzsqNiFneCJeyVjyJ585m+2TuVbE11vT1amU0xCjHcSGfJBBnm8g==",
+      "version": "20.2.2",
+      "resolved": "https://registry.npmjs.org/nx/-/nx-20.2.2.tgz",
+      "integrity": "sha512-wHgC/NQ82Q3LOeUZXPI2j/JhpZwb7JjRc0uDn3kQU+lN/ulySCJHTHCf4CIglW4NjZeN1WZZ7YMeddtFWETGGA==",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
       "dependencies": {
         "@napi-rs/wasm-runtime": "0.2.4",
-        "@nrwl/tao": "19.8.14",
         "@yarnpkg/lockfile": "^1.1.0",
-        "@yarnpkg/parsers": "3.0.0-rc.46",
+        "@yarnpkg/parsers": "3.0.2",
         "@zkochan/js-yaml": "0.0.7",
         "axios": "^1.7.4",
         "chalk": "^4.1.0",
@@ -8212,11 +7862,11 @@
         "ora": "5.3.0",
         "semver": "^7.5.3",
         "string-width": "^4.2.3",
-        "strong-log-transformer": "^2.1.0",
         "tar-stream": "~2.2.0",
         "tmp": "~0.2.1",
         "tsconfig-paths": "^4.1.2",
         "tslib": "^2.3.0",
+        "yaml": "^2.6.0",
         "yargs": "^17.6.2",
         "yargs-parser": "21.1.1"
       },
@@ -8225,16 +7875,16 @@
         "nx-cloud": "bin/nx-cloud.js"
       },
       "optionalDependencies": {
-        "@nx/nx-darwin-arm64": "19.8.14",
-        "@nx/nx-darwin-x64": "19.8.14",
-        "@nx/nx-freebsd-x64": "19.8.14",
-        "@nx/nx-linux-arm-gnueabihf": "19.8.14",
-        "@nx/nx-linux-arm64-gnu": "19.8.14",
-        "@nx/nx-linux-arm64-musl": "19.8.14",
-        "@nx/nx-linux-x64-gnu": "19.8.14",
-        "@nx/nx-linux-x64-musl": "19.8.14",
-        "@nx/nx-win32-arm64-msvc": "19.8.14",
-        "@nx/nx-win32-x64-msvc": "19.8.14"
+        "@nx/nx-darwin-arm64": "20.2.2",
+        "@nx/nx-darwin-x64": "20.2.2",
+        "@nx/nx-freebsd-x64": "20.2.2",
+        "@nx/nx-linux-arm-gnueabihf": "20.2.2",
+        "@nx/nx-linux-arm64-gnu": "20.2.2",
+        "@nx/nx-linux-arm64-musl": "20.2.2",
+        "@nx/nx-linux-x64-gnu": "20.2.2",
+        "@nx/nx-linux-x64-musl": "20.2.2",
+        "@nx/nx-win32-arm64-msvc": "20.2.2",
+        "@nx/nx-win32-x64-msvc": "20.2.2"
       },
       "peerDependencies": {
         "@swc-node/register": "^1.8.0",
@@ -10059,155 +9709,6 @@
         "typescript": ">=4.8.4 <5.8.0"
       }
     },
-    "node_modules/@typescript-eslint/experimental-utils": {
-      "version": "5.62.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz",
-      "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/utils": "5.62.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
-      }
-    },
-    "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": {
-      "version": "5.62.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
-      "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "5.62.0",
-        "@typescript-eslint/visitor-keys": "5.62.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": {
-      "version": "5.62.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
-      "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "5.62.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
-      "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "@typescript-eslint/types": "5.62.0",
-        "@typescript-eslint/visitor-keys": "5.62.0",
-        "debug": "^4.3.4",
-        "globby": "^11.1.0",
-        "is-glob": "^4.0.3",
-        "semver": "^7.3.7",
-        "tsutils": "^3.21.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/utils": {
-      "version": "5.62.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
-      "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.2.0",
-        "@types/json-schema": "^7.0.9",
-        "@types/semver": "^7.3.12",
-        "@typescript-eslint/scope-manager": "5.62.0",
-        "@typescript-eslint/types": "5.62.0",
-        "@typescript-eslint/typescript-estree": "5.62.0",
-        "eslint-scope": "^5.1.1",
-        "semver": "^7.3.7"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
-      }
-    },
-    "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "5.62.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
-      "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "5.62.0",
-        "eslint-visitor-keys": "^3.3.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^4.1.1"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/@typescript-eslint/experimental-utils/node_modules/estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
     "node_modules/@typescript-eslint/parser": {
       "version": "8.18.1",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.1.tgz",
@@ -10580,18 +10081,17 @@
       "license": "BSD-2-Clause"
     },
     "node_modules/@yarnpkg/parsers": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz",
-      "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==",
+      "version": "3.0.0-rc.46",
+      "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz",
+      "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==",
       "dev": true,
       "license": "BSD-2-Clause",
-      "peer": true,
       "dependencies": {
         "js-yaml": "^3.10.0",
         "tslib": "^2.4.0"
       },
       "engines": {
-        "node": ">=18.12.0"
+        "node": ">=14.15.0"
       }
     },
     "node_modules/@yarnpkg/parsers/node_modules/argparse": {
@@ -10600,7 +10100,6 @@
       "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "sprintf-js": "~1.0.2"
       }
@@ -10611,7 +10110,6 @@
       "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "argparse": "^1.0.7",
         "esprima": "^4.0.0"
@@ -10625,8 +10123,7 @@
       "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
       "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
       "dev": true,
-      "license": "BSD-3-Clause",
-      "peer": true
+      "license": "BSD-3-Clause"
     },
     "node_modules/@zkochan/js-yaml": {
       "version": "0.0.7",
@@ -11010,16 +10507,6 @@
       ],
       "license": "MIT"
     },
-    "node_modules/are-docs-informative": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
-      "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=14"
-      }
-    },
     "node_modules/arg": {
       "version": "4.1.3",
       "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
@@ -11155,16 +10642,16 @@
       }
     },
     "node_modules/array.prototype.flat": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
-      "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+      "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-shim-unscopables": "^1.0.2"
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "es-shim-unscopables": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -11174,16 +10661,16 @@
       }
     },
     "node_modules/array.prototype.flatmap": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
-      "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+      "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-shim-unscopables": "^1.0.2"
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "es-shim-unscopables": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -11193,19 +10680,20 @@
       }
     },
     "node_modules/arraybuffer.prototype.slice": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
-      "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+      "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "array-buffer-byte-length": "^1.0.1",
-        "call-bind": "^1.0.8",
+        "call-bind": "^1.0.5",
         "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.6",
-        "is-array-buffer": "^3.0.4"
+        "es-abstract": "^1.22.3",
+        "es-errors": "^1.2.1",
+        "get-intrinsic": "^1.2.3",
+        "is-array-buffer": "^3.0.4",
+        "is-shared-array-buffer": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -11723,9 +11211,9 @@
       "license": "MIT"
     },
     "node_modules/axios": {
-      "version": "1.7.9",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
-      "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
+      "version": "1.7.7",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz",
+      "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -12610,60 +12098,32 @@
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
       "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
       "dev": true,
-      "license": "BlueOak-1.0.0",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/cachedir": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz",
-      "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/call-bind": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
-      "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.0",
-        "es-define-property": "^1.0.0",
-        "get-intrinsic": "^1.2.4",
-        "set-function-length": "^1.2.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "license": "BlueOak-1.0.0",
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/call-bind-apply-helpers": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz",
-      "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==",
+    "node_modules/cachedir": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz",
+      "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==",
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "function-bind": "^1.1.2"
-      },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">=6"
       }
     },
-    "node_modules/call-bound": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz",
-      "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
+    "node_modules/call-bind": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+      "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
       "license": "MIT",
       "dependencies": {
-        "call-bind-apply-helpers": "^1.0.1",
-        "get-intrinsic": "^1.2.6"
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.4",
+        "set-function-length": "^1.2.1"
       },
       "engines": {
         "node": ">= 0.4"
@@ -12851,9 +12311,9 @@
       }
     },
     "node_modules/chokidar": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz",
-      "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.2.tgz",
+      "integrity": "sha512-/b57FK+bblSU+dfewfFe0rT1YjVDfOmeLQwCAuC+vwvgLkXboATqqmy+Ipux6JrF6L5joe5CBnFOw+gLWH6yKg==",
       "license": "MIT",
       "dependencies": {
         "readdirp": "^4.0.1"
@@ -13300,16 +12760,6 @@
         "node": ">=18"
       }
     },
-    "node_modules/comment-parser": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz",
-      "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 12.0.0"
-      }
-    },
     "node_modules/common-path-prefix": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
@@ -13717,9 +13167,9 @@
       "license": "MIT"
     },
     "node_modules/cross-spawn": {
-      "version": "7.0.5",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz",
-      "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==",
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
       "license": "MIT",
       "dependencies": {
         "path-key": "^3.1.0",
@@ -15187,9 +14637,9 @@
       "license": "MIT"
     },
     "node_modules/dotenv": {
-      "version": "16.4.7",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
-      "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
+      "version": "16.4.5",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
+      "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
       "dev": true,
       "license": "BSD-2-Clause",
       "engines": {
@@ -15200,13 +14650,13 @@
       }
     },
     "node_modules/dotenv-expand": {
-      "version": "11.0.7",
-      "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz",
-      "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==",
+      "version": "11.0.6",
+      "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz",
+      "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "dotenv": "^16.4.5"
+        "dotenv": "^16.4.4"
       },
       "engines": {
         "node": ">=12"
@@ -15234,20 +14684,6 @@
         "node": ">= 0.8.0"
       }
     },
-    "node_modules/dunder-proto": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz",
-      "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.0",
-        "es-errors": "^1.3.0",
-        "gopd": "^1.2.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
     "node_modules/dup": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/dup/-/dup-1.0.0.tgz",
@@ -15541,60 +14977,58 @@
       }
     },
     "node_modules/es-abstract": {
-      "version": "1.23.6",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.6.tgz",
-      "integrity": "sha512-Ifco6n3yj2tMZDWNLyloZrytt9lqqlwvS83P3HtaETR0NUOYnIULGGHpktqYGObGy+8wc1okO25p8TjemhImvA==",
+      "version": "1.23.3",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+      "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "array-buffer-byte-length": "^1.0.1",
-        "arraybuffer.prototype.slice": "^1.0.4",
+        "arraybuffer.prototype.slice": "^1.0.3",
         "available-typed-arrays": "^1.0.7",
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
+        "call-bind": "^1.0.7",
         "data-view-buffer": "^1.0.1",
         "data-view-byte-length": "^1.0.1",
         "data-view-byte-offset": "^1.0.0",
-        "es-define-property": "^1.0.1",
+        "es-define-property": "^1.0.0",
         "es-errors": "^1.3.0",
         "es-object-atoms": "^1.0.0",
         "es-set-tostringtag": "^2.0.3",
-        "es-to-primitive": "^1.3.0",
-        "function.prototype.name": "^1.1.7",
-        "get-intrinsic": "^1.2.6",
+        "es-to-primitive": "^1.2.1",
+        "function.prototype.name": "^1.1.6",
+        "get-intrinsic": "^1.2.4",
         "get-symbol-description": "^1.0.2",
-        "globalthis": "^1.0.4",
-        "gopd": "^1.2.0",
+        "globalthis": "^1.0.3",
+        "gopd": "^1.0.1",
         "has-property-descriptors": "^1.0.2",
-        "has-proto": "^1.2.0",
-        "has-symbols": "^1.1.0",
+        "has-proto": "^1.0.3",
+        "has-symbols": "^1.0.3",
         "hasown": "^2.0.2",
-        "internal-slot": "^1.1.0",
+        "internal-slot": "^1.0.7",
         "is-array-buffer": "^3.0.4",
         "is-callable": "^1.2.7",
-        "is-data-view": "^1.0.2",
+        "is-data-view": "^1.0.1",
         "is-negative-zero": "^2.0.3",
-        "is-regex": "^1.2.1",
+        "is-regex": "^1.1.4",
         "is-shared-array-buffer": "^1.0.3",
-        "is-string": "^1.1.1",
+        "is-string": "^1.0.7",
         "is-typed-array": "^1.1.13",
-        "is-weakref": "^1.1.0",
-        "math-intrinsics": "^1.0.0",
-        "object-inspect": "^1.13.3",
+        "is-weakref": "^1.0.2",
+        "object-inspect": "^1.13.1",
         "object-keys": "^1.1.1",
         "object.assign": "^4.1.5",
-        "regexp.prototype.flags": "^1.5.3",
-        "safe-array-concat": "^1.1.3",
-        "safe-regex-test": "^1.1.0",
-        "string.prototype.trim": "^1.2.10",
-        "string.prototype.trimend": "^1.0.9",
+        "regexp.prototype.flags": "^1.5.2",
+        "safe-array-concat": "^1.1.2",
+        "safe-regex-test": "^1.0.3",
+        "string.prototype.trim": "^1.2.9",
+        "string.prototype.trimend": "^1.0.8",
         "string.prototype.trimstart": "^1.0.8",
         "typed-array-buffer": "^1.0.2",
         "typed-array-byte-length": "^1.0.1",
-        "typed-array-byte-offset": "^1.0.3",
-        "typed-array-length": "^1.0.7",
+        "typed-array-byte-offset": "^1.0.2",
+        "typed-array-length": "^1.0.6",
         "unbox-primitive": "^1.0.2",
-        "which-typed-array": "^1.1.16"
+        "which-typed-array": "^1.1.15"
       },
       "engines": {
         "node": ">= 0.4"
@@ -15604,10 +15038,13 @@
       }
     },
     "node_modules/es-define-property": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
-      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+      "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
       "license": "MIT",
+      "dependencies": {
+        "get-intrinsic": "^1.2.4"
+      },
       "engines": {
         "node": ">= 0.4"
       }
@@ -15657,6 +15094,7 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
       "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
         "es-errors": "^1.3.0"
@@ -15691,15 +15129,15 @@
       }
     },
     "node_modules/es-to-primitive": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
-      "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "is-callable": "^1.2.7",
-        "is-date-object": "^1.0.5",
-        "is-symbol": "^1.0.4"
+        "is-callable": "^1.1.4",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -16182,74 +15620,6 @@
         "strip-bom": "^3.0.0"
       }
     },
-    "node_modules/eslint-plugin-jsdoc": {
-      "version": "50.6.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.6.1.tgz",
-      "integrity": "sha512-UWyaYi6iURdSfdVVqvfOs2vdCVz0J40O/z/HTsv2sFjdjmdlUI/qlKLOTmwbPQ2tAfQnE5F9vqx+B+poF71DBQ==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "@es-joy/jsdoccomment": "~0.49.0",
-        "are-docs-informative": "^0.0.2",
-        "comment-parser": "1.4.1",
-        "debug": "^4.3.6",
-        "escape-string-regexp": "^4.0.0",
-        "espree": "^10.1.0",
-        "esquery": "^1.6.0",
-        "parse-imports": "^2.1.1",
-        "semver": "^7.6.3",
-        "spdx-expression-parse": "^4.0.0",
-        "synckit": "^0.9.1"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "peerDependencies": {
-        "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
-      }
-    },
-    "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
-      "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint-plugin-jsdoc/node_modules/espree": {
-      "version": "10.3.0",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
-      "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "acorn": "^8.14.0",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^4.2.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint-plugin-jsdoc/node_modules/spdx-expression-parse": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
-      "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
     "node_modules/eslint-plugin-n": {
       "version": "15.7.0",
       "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz",
@@ -16300,16 +15670,6 @@
         "node": "*"
       }
     },
-    "node_modules/eslint-plugin-prefer-arrow": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz",
-      "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==",
-      "dev": true,
-      "license": "MIT",
-      "peerDependencies": {
-        "eslint": ">=2.0.0"
-      }
-    },
     "node_modules/eslint-plugin-prettier": {
       "version": "5.2.1",
       "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz",
@@ -16425,6 +15785,155 @@
         "typescript": "^3 || ^4 || ^5"
       }
     },
+    "node_modules/eslint-plugin-typescript-sort-keys/node_modules/@typescript-eslint/experimental-utils": {
+      "version": "5.62.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz",
+      "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/utils": "5.62.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+      }
+    },
+    "node_modules/eslint-plugin-typescript-sort-keys/node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/utils": {
+      "version": "5.62.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
+      "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.2.0",
+        "@types/json-schema": "^7.0.9",
+        "@types/semver": "^7.3.12",
+        "@typescript-eslint/scope-manager": "5.62.0",
+        "@typescript-eslint/types": "5.62.0",
+        "@typescript-eslint/typescript-estree": "5.62.0",
+        "eslint-scope": "^5.1.1",
+        "semver": "^7.3.7"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+      }
+    },
+    "node_modules/eslint-plugin-typescript-sort-keys/node_modules/@typescript-eslint/scope-manager": {
+      "version": "5.62.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
+      "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "5.62.0",
+        "@typescript-eslint/visitor-keys": "5.62.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/eslint-plugin-typescript-sort-keys/node_modules/@typescript-eslint/types": {
+      "version": "5.62.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
+      "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/eslint-plugin-typescript-sort-keys/node_modules/@typescript-eslint/typescript-estree": {
+      "version": "5.62.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
+      "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "@typescript-eslint/types": "5.62.0",
+        "@typescript-eslint/visitor-keys": "5.62.0",
+        "debug": "^4.3.4",
+        "globby": "^11.1.0",
+        "is-glob": "^4.0.3",
+        "semver": "^7.3.7",
+        "tsutils": "^3.21.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/eslint-plugin-typescript-sort-keys/node_modules/@typescript-eslint/visitor-keys": {
+      "version": "5.62.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
+      "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "5.62.0",
+        "eslint-visitor-keys": "^3.3.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/eslint-plugin-typescript-sort-keys/node_modules/eslint-scope": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^4.1.1"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/eslint-plugin-typescript-sort-keys/node_modules/estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
     "node_modules/eslint-plugin-unused-imports": {
       "version": "4.1.4",
       "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz",
@@ -17711,17 +17220,16 @@
       }
     },
     "node_modules/function.prototype.name": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.7.tgz",
-      "integrity": "sha512-2g4x+HqTJKM9zcJqBSpjoRmdcPFtJM60J3xJisTQSXBWka5XqyBN/2tNUgma1mztTXyDuUsEtYe5qcs7xYzYQA==",
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+      "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "functions-have-names": "^1.2.3",
-        "hasown": "^2.0.2",
-        "is-callable": "^1.2.7"
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "functions-have-names": "^1.2.3"
       },
       "engines": {
         "node": ">= 0.4"
@@ -17784,21 +17292,16 @@
       }
     },
     "node_modules/get-intrinsic": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz",
-      "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+      "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
       "license": "MIT",
       "dependencies": {
-        "call-bind-apply-helpers": "^1.0.1",
-        "dunder-proto": "^1.0.0",
-        "es-define-property": "^1.0.1",
         "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
         "function-bind": "^1.1.2",
-        "gopd": "^1.2.0",
-        "has-symbols": "^1.1.0",
-        "hasown": "^2.0.2",
-        "math-intrinsics": "^1.0.0"
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -18341,12 +17844,12 @@
       }
     },
     "node_modules/gopd": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
-      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+      "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
       "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
+      "dependencies": {
+        "get-intrinsic": "^1.1.3"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -18815,14 +18318,10 @@
       }
     },
     "node_modules/has-proto": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
-      "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
-      "dev": true,
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+      "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
       "license": "MIT",
-      "dependencies": {
-        "dunder-proto": "^1.0.0"
-      },
       "engines": {
         "node": ">= 0.4"
       },
@@ -18831,9 +18330,9 @@
       }
     },
     "node_modules/has-symbols": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
-      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
       "license": "MIT",
       "engines": {
         "node": ">= 0.4"
@@ -19534,14 +19033,14 @@
       "license": "0BSD"
     },
     "node_modules/internal-slot": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
-      "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+      "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
       "license": "MIT",
       "dependencies": {
         "es-errors": "^1.3.0",
-        "hasown": "^2.0.2",
-        "side-channel": "^1.1.0"
+        "hasown": "^2.0.0",
+        "side-channel": "^1.0.4"
       },
       "engines": {
         "node": ">= 0.4"
@@ -19618,32 +19117,13 @@
       "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
       "license": "MIT"
     },
-    "node_modules/is-async-function": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
-      "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/is-bigint": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
-      "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+      "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
       "license": "MIT",
       "dependencies": {
-        "has-bigints": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
+        "has-bigints": "^1.0.1"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -19662,13 +19142,13 @@
       }
     },
     "node_modules/is-boolean-object": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz",
-      "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+      "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.2",
-        "has-tostringtag": "^1.0.2"
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -19718,14 +19198,12 @@
       }
     },
     "node_modules/is-data-view": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
-      "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+      "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.2",
-        "get-intrinsic": "^1.2.6",
         "is-typed-array": "^1.1.13"
       },
       "engines": {
@@ -19736,13 +19214,12 @@
       }
     },
     "node_modules/is-date-object": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
-      "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+      "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.2",
-        "has-tostringtag": "^1.0.2"
+        "has-tostringtag": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -19776,22 +19253,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/is-finalizationregistry": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz",
-      "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/is-finite": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
@@ -19972,13 +19433,12 @@
       }
     },
     "node_modules/is-number-object": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
-      "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+      "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.3",
-        "has-tostringtag": "^1.0.2"
+        "has-tostringtag": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -20033,15 +19493,13 @@
       "license": "MIT"
     },
     "node_modules/is-regex": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
-      "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+      "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.2",
-        "gopd": "^1.2.0",
-        "has-tostringtag": "^1.0.2",
-        "hasown": "^2.0.2"
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -20090,13 +19548,12 @@
       }
     },
     "node_modules/is-string": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
-      "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+      "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.3",
-        "has-tostringtag": "^1.0.2"
+        "has-tostringtag": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -20118,14 +19575,12 @@
       "license": "MIT"
     },
     "node_modules/is-symbol": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
-      "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.2",
-        "has-symbols": "^1.1.0",
-        "safe-regex-test": "^1.1.0"
+        "has-symbols": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -20182,16 +19637,13 @@
       }
     },
     "node_modules/is-weakref": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz",
-      "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
+        "call-bind": "^1.0.2"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -21397,16 +20849,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/jsdoc-type-pratt-parser": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz",
-      "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12.0.0"
-      }
-    },
     "node_modules/jsdom": {
       "version": "20.0.3",
       "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz",
@@ -22600,15 +22042,6 @@
       "integrity": "sha512-c4vLwYWyl+Ji+U43eU/G5FwxWd4ZH0ePUsFs5y0uwD9HUEFBXUQ1zUUan+78IpRD+y4pUfG0nAzNM292K7ItvA==",
       "license": "MIT"
     },
-    "node_modules/math-intrinsics": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz",
-      "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
     "node_modules/math-log2": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz",
@@ -23343,9 +22776,9 @@
       }
     },
     "node_modules/nanoid": {
-      "version": "3.3.8",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
-      "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
+      "version": "3.3.7",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
       "funding": [
         {
           "type": "github",
@@ -24532,17 +23965,17 @@
       "license": "MIT"
     },
     "node_modules/nx": {
-      "version": "20.2.2",
-      "resolved": "https://registry.npmjs.org/nx/-/nx-20.2.2.tgz",
-      "integrity": "sha512-wHgC/NQ82Q3LOeUZXPI2j/JhpZwb7JjRc0uDn3kQU+lN/ulySCJHTHCf4CIglW4NjZeN1WZZ7YMeddtFWETGGA==",
+      "version": "19.8.10",
+      "resolved": "https://registry.npmjs.org/nx/-/nx-19.8.10.tgz",
+      "integrity": "sha512-/QCJZ5jDDzYIKjFNseb3Ehi/PxO3KZdOnH37603doO6B7N/x1yyB7pVTtf4MKVogOcoltmUZbsq975Ery3QFEA==",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@napi-rs/wasm-runtime": "0.2.4",
+        "@nrwl/tao": "19.8.10",
         "@yarnpkg/lockfile": "^1.1.0",
-        "@yarnpkg/parsers": "3.0.2",
+        "@yarnpkg/parsers": "3.0.0-rc.46",
         "@zkochan/js-yaml": "0.0.7",
         "axios": "^1.7.4",
         "chalk": "^4.1.0",
@@ -24566,11 +23999,11 @@
         "ora": "5.3.0",
         "semver": "^7.5.3",
         "string-width": "^4.2.3",
+        "strong-log-transformer": "^2.1.0",
         "tar-stream": "~2.2.0",
         "tmp": "~0.2.1",
         "tsconfig-paths": "^4.1.2",
         "tslib": "^2.3.0",
-        "yaml": "^2.6.0",
         "yargs": "^17.6.2",
         "yargs-parser": "21.1.1"
       },
@@ -24579,16 +24012,16 @@
         "nx-cloud": "bin/nx-cloud.js"
       },
       "optionalDependencies": {
-        "@nx/nx-darwin-arm64": "20.2.2",
-        "@nx/nx-darwin-x64": "20.2.2",
-        "@nx/nx-freebsd-x64": "20.2.2",
-        "@nx/nx-linux-arm-gnueabihf": "20.2.2",
-        "@nx/nx-linux-arm64-gnu": "20.2.2",
-        "@nx/nx-linux-arm64-musl": "20.2.2",
-        "@nx/nx-linux-x64-gnu": "20.2.2",
-        "@nx/nx-linux-x64-musl": "20.2.2",
-        "@nx/nx-win32-arm64-msvc": "20.2.2",
-        "@nx/nx-win32-x64-msvc": "20.2.2"
+        "@nx/nx-darwin-arm64": "19.8.10",
+        "@nx/nx-darwin-x64": "19.8.10",
+        "@nx/nx-freebsd-x64": "19.8.10",
+        "@nx/nx-linux-arm-gnueabihf": "19.8.10",
+        "@nx/nx-linux-arm64-gnu": "19.8.10",
+        "@nx/nx-linux-arm64-musl": "19.8.10",
+        "@nx/nx-linux-x64-gnu": "19.8.10",
+        "@nx/nx-linux-x64-musl": "19.8.10",
+        "@nx/nx-win32-arm64-msvc": "19.8.10",
+        "@nx/nx-win32-x64-msvc": "19.8.10"
       },
       "peerDependencies": {
         "@swc-node/register": "^1.8.0",
@@ -24609,7 +24042,6 @@
       "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">=8"
       }
@@ -24620,7 +24052,6 @@
       "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "bin": {
         "is-docker": "cli.js"
       },
@@ -24637,7 +24068,6 @@
       "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "is-docker": "^2.0.0"
       },
@@ -24650,8 +24080,7 @@
       "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
       "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
       "dev": true,
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/nx/node_modules/open": {
       "version": "8.4.2",
@@ -24659,7 +24088,6 @@
       "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "define-lazy-prop": "^2.0.0",
         "is-docker": "^2.1.1",
@@ -24678,7 +24106,6 @@
       "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==",
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "bl": "^4.0.3",
         "chalk": "^4.1.0",
@@ -25149,20 +24576,6 @@
       "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==",
       "license": "MIT"
     },
-    "node_modules/parse-imports": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz",
-      "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==",
-      "dev": true,
-      "license": "Apache-2.0 AND MIT",
-      "dependencies": {
-        "es-module-lexer": "^1.5.3",
-        "slashes": "^3.0.12"
-      },
-      "engines": {
-        "node": ">= 18"
-      }
-    },
     "node_modules/parse-json": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -26631,29 +26044,6 @@
       "dev": true,
       "license": "Apache-2.0"
     },
-    "node_modules/reflect.getprototypeof": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz",
-      "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "dunder-proto": "^1.0.0",
-        "es-abstract": "^1.23.5",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.4",
-        "gopd": "^1.2.0",
-        "which-builtin-type": "^1.2.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/regenerate": {
       "version": "1.4.2",
       "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
@@ -27235,16 +26625,15 @@
       }
     },
     "node_modules/safe-array-concat": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
-      "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+      "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.2",
-        "get-intrinsic": "^1.2.6",
-        "has-symbols": "^1.1.0",
+        "call-bind": "^1.0.7",
+        "get-intrinsic": "^1.2.4",
+        "has-symbols": "^1.0.3",
         "isarray": "^2.0.5"
       },
       "engines": {
@@ -27282,14 +26671,15 @@
       "license": "MIT"
     },
     "node_modules/safe-regex-test": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
-      "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+      "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.2",
+        "call-bind": "^1.0.6",
         "es-errors": "^1.3.0",
-        "is-regex": "^1.2.1"
+        "is-regex": "^1.1.4"
       },
       "engines": {
         "node": ">= 0.4"
@@ -27794,69 +27184,15 @@
       }
     },
     "node_modules/side-channel": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
-      "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "object-inspect": "^1.13.3",
-        "side-channel-list": "^1.0.0",
-        "side-channel-map": "^1.0.1",
-        "side-channel-weakmap": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/side-channel-list": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
-      "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "object-inspect": "^1.13.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/side-channel-map": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
-      "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.5",
-        "object-inspect": "^1.13.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/side-channel-weakmap": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
-      "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+      "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.2",
+        "call-bind": "^1.0.7",
         "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.5",
-        "object-inspect": "^1.13.3",
-        "side-channel-map": "^1.0.1"
+        "get-intrinsic": "^1.2.4",
+        "object-inspect": "^1.13.1"
       },
       "engines": {
         "node": ">= 0.4"
@@ -27933,13 +27269,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/slashes": {
-      "version": "3.0.12",
-      "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz",
-      "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==",
-      "dev": true,
-      "license": "ISC"
-    },
     "node_modules/slice-ansi": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
@@ -28405,19 +27734,16 @@
       }
     },
     "node_modules/string.prototype.trim": {
-      "version": "1.2.10",
-      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
-      "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
+      "version": "1.2.9",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+      "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.2",
-        "define-data-property": "^1.1.4",
+        "call-bind": "^1.0.7",
         "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-object-atoms": "^1.0.0",
-        "has-property-descriptors": "^1.0.2"
+        "es-abstract": "^1.23.0",
+        "es-object-atoms": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -28427,20 +27753,16 @@
       }
     },
     "node_modules/string.prototype.trimend": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
-      "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+      "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.2",
+        "call-bind": "^1.0.7",
         "define-properties": "^1.2.1",
         "es-object-atoms": "^1.0.0"
       },
-      "engines": {
-        "node": ">= 0.4"
-      },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -29596,9 +28918,9 @@
       }
     },
     "node_modules/typed-array-byte-offset": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz",
-      "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+      "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -29607,8 +28929,7 @@
         "for-each": "^0.3.3",
         "gopd": "^1.0.1",
         "has-proto": "^1.0.3",
-        "is-typed-array": "^1.1.13",
-        "reflect.getprototypeof": "^1.0.6"
+        "is-typed-array": "^1.1.13"
       },
       "engines": {
         "node": ">= 0.4"
@@ -29618,18 +28939,18 @@
       }
     },
     "node_modules/typed-array-length": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
-      "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+      "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
         "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
         "is-typed-array": "^1.1.13",
-        "possible-typed-array-names": "^1.0.0",
-        "reflect.getprototypeof": "^1.0.6"
+        "possible-typed-array-names": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -29662,9 +28983,9 @@
       }
     },
     "node_modules/typescript": {
-      "version": "5.6.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
-      "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
+      "version": "5.5.4",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
+      "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
       "license": "Apache-2.0",
       "bin": {
         "tsc": "bin/tsc",
@@ -29688,19 +29009,16 @@
       }
     },
     "node_modules/unbox-primitive": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
-      "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+      "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.3",
+        "call-bind": "^1.0.2",
         "has-bigints": "^1.0.2",
-        "has-symbols": "^1.1.0",
-        "which-boxed-primitive": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
+        "has-symbols": "^1.0.3",
+        "which-boxed-primitive": "^1.0.2"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -31168,59 +30486,21 @@
       }
     },
     "node_modules/which-boxed-primitive": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
-      "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
-      "license": "MIT",
-      "dependencies": {
-        "is-bigint": "^1.1.0",
-        "is-boolean-object": "^1.2.1",
-        "is-number-object": "^1.1.1",
-        "is-string": "^1.1.1",
-        "is-symbol": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/which-builtin-type": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
-      "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
-      "dev": true,
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.2",
-        "function.prototype.name": "^1.1.6",
-        "has-tostringtag": "^1.0.2",
-        "is-async-function": "^2.0.0",
-        "is-date-object": "^1.1.0",
-        "is-finalizationregistry": "^1.1.0",
-        "is-generator-function": "^1.0.10",
-        "is-regex": "^1.2.1",
-        "is-weakref": "^1.0.2",
-        "isarray": "^2.0.5",
-        "which-boxed-primitive": "^1.1.0",
-        "which-collection": "^1.0.2",
-        "which-typed-array": "^1.1.16"
-      },
-      "engines": {
-        "node": ">= 0.4"
+        "is-bigint": "^1.0.1",
+        "is-boolean-object": "^1.1.0",
+        "is-number-object": "^1.0.4",
+        "is-string": "^1.0.5",
+        "is-symbol": "^1.0.3"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/which-builtin-type/node_modules/isarray": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
-      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/which-collection": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
@@ -31240,9 +30520,9 @@
       }
     },
     "node_modules/which-typed-array": {
-      "version": "1.1.16",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz",
-      "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==",
+      "version": "1.1.15",
+      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+      "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
       "license": "MIT",
       "dependencies": {
         "available-typed-arrays": "^1.0.7",
diff --git a/package.json b/package.json
index c427033a6..23890c4e6 100644
--- a/package.json
+++ b/package.json
@@ -78,7 +78,7 @@
     "@cypress/schematic": "^2.5.2",
     "@cypress/webpack-preprocessor": "^6.0.2",
     "@nx/cypress": "^19.2.2",
-    "@nx/workspace": "^19.2.2",
+    "@nx/workspace": "^20.2.2",
     "@types/aws-sdk": "^2.7.4",
     "@types/d3-array": "^3.2.1",
     "@types/d3-scale-chromatic": "^3.1.0",
@@ -92,10 +92,9 @@
     "@typescript-eslint/eslint-plugin": "^8.18.1",
     "@typescript-eslint/parser": "^8.18.1",
     "angular-http-server": "^1.12.0",
-    "cypress": "^13.15.2",
+    "cypress": "^13.16.1",
+    "eslint-config-prettier": "^9.1.0",
     "eslint-plugin-import": "^2.31.0",
-    "eslint-plugin-jsdoc": "^50.6.1",
-    "eslint-plugin-prefer-arrow": "^1.2.3",
     "eslint-plugin-prettier": "^5.2.1",
     "eslint-plugin-simple-import-sort": "^12.1.1",
     "eslint-plugin-sort-keys-fix": "^1.1.2",
@@ -108,7 +107,7 @@
     "jest-environment-jsdom": "^29.7.0",
     "jest-fail-on-console": "^3.3.1",
     "jest-junit": "^16.0.0",
-    "jest-preset-angular": "^14.2.4",
+    "jest-preset-angular": "^14.4.2",
     "ng-packagr": "^19.0.1",
     "prettier": "^3.4.2",
     "pretty-quick": "^4.0.0",
-- 
GitLab


From 58650c8e6d01c916ce4a6873d56938047e4a1d8b Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 15:52:15 -0700
Subject: [PATCH 23/27] audit fix

---
 package-lock.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 0aa2f1036..be43e15d3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -22776,9 +22776,9 @@
       }
     },
     "node_modules/nanoid": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
-      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+      "version": "3.3.8",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
+      "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
       "funding": [
         {
           "type": "github",
-- 
GitLab


From 8b283c77bca07ab25a74bfc4c2faea75fd8f33fb Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 15:54:44 -0700
Subject: [PATCH 24/27] add input

---
 .../fault-control/fault-control.component.spec.ts     | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.spec.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.spec.ts
index c6acd1fc4..990a1a0ff 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.spec.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.spec.ts
@@ -22,9 +22,14 @@ describe('FaultControlComponent', () => {
 
     fixture = TestBed.createComponent(FaultControlComponent);
     component = fixture.componentInstance;
-    component.control = new FormControl(0, {
-      nonNullable: true,
-    });
+
+    fixture.componentRef.setInput(
+      'control',
+      new FormControl(0, {
+        nonNullable: true,
+      }),
+    );
+
     fixture.detectChanges();
   });
 
-- 
GitLab


From 5868b061b079493906d38e198b67b4d998221640 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 15:59:24 -0700
Subject: [PATCH 25/27] add inpiut

---
 .../components/fault-control/fault-control.component.spec.ts    | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.spec.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.spec.ts
index 990a1a0ff..3a8adfe98 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.spec.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/fault-control/fault-control.component.spec.ts
@@ -30,6 +30,8 @@ describe('FaultControlComponent', () => {
       }),
     );
 
+    fixture.componentRef.setInput('parameter', {});
+
     fixture.detectChanges();
   });
 
-- 
GitLab


From 49c8440c044485219e7b652d8dfe49164d711d03 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 16:04:03 -0700
Subject: [PATCH 26/27] lint fix

---
 .../building-code-control.component.spec.ts                   | 2 +-
 .../control-panel-input/control-panel-input.component.ts      | 2 --
 .../components/content/content.component.ts                   | 1 -
 .../parameter-summary/parameter-summary.component.ts          | 1 -
 .../hanging-wall-effects/components/plots/plots.component.ts  | 1 -
 .../src/app/dev/hazard/dynamic-compare/app.component.ts       | 1 -
 .../dynamic-compare/components/content/content.component.ts   | 1 -
 .../components/control-panel/control-panel.component.ts       | 4 +---
 .../components/hazard-data/hazard-data.component.ts           | 1 -
 .../parameter-summary/parameter-summary.component.ts          | 1 -
 .../components/spectra-data/spectra-data.component.ts         | 1 -
 .../components/control-panel/control-panel.component.ts       | 1 -
 .../exceedance-explorer/components/plot/plot.component.ts     | 1 -
 .../parameter-summary/parameter-summary.component.ts          | 1 -
 .../src/app/gmm/distance/components/plots/plots.component.ts  | 1 -
 .../app/gmm/magnitude/components/content/content.component.ts | 1 -
 .../components/control-panel/control-panel.component.ts       | 1 -
 .../parameter-summary/parameter-summary.component.ts          | 1 -
 .../src/app/gmm/magnitude/components/plots/plots.component.ts | 1 -
 .../source-parameters/source-parameters.component.ts          | 1 -
 .../app/gmm/spectra/components/content/content.component.ts   | 1 -
 .../components/control-panel/control-panel.component.ts       | 4 ----
 .../parameter-summary/parameter-summary.component.ts          | 1 -
 .../src/app/gmm/spectra/components/plots/plots.component.ts   | 1 -
 .../source-parameters/source-parameters.component.ts          | 1 -
 projects/nshmp-apps/src/app/hazard/disagg/app.component.ts    | 1 -
 .../app/hazard/disagg/components/content/content.component.ts | 1 -
 .../components/control-panel/control-panel.component.ts       | 1 -
 .../disagg-contributors/disagg-contributors.component.ts      | 2 +-
 .../disagg/components/disagg-data/disagg-data.component.ts    | 1 -
 .../components/disagg-summary/disagg-summary.component.ts     | 1 -
 .../parameter-summary/parameter-summary.component.ts          | 1 -
 projects/nshmp-apps/src/app/hazard/dynamic/app.component.ts   | 1 -
 .../hazard/dynamic/components/content/content.component.ts    | 2 +-
 .../components/control-panel/control-panel.component.ts       | 1 -
 .../parameter-summary/parameter-summary.component.ts          | 1 -
 .../app/hazard/dynamic/components/plots/plots.component.ts    | 1 -
 .../components/control-panel/control-panel.component.ts       | 1 -
 .../static/components/curve-data/curve-data.component.ts      | 1 -
 .../parameter-summary/parameter-summary.component.ts          | 1 -
 .../src/app/hazard/static/components/plots/plots.component.ts | 1 -
 .../components/spectrum-data/spectrum-data.component.ts       | 1 -
 .../aws/submit-haz-jobs/components/form/form.component.ts     | 1 -
 .../components/content/content.component.ts                   | 1 -
 projects/nshmp-apps/src/app/source/mfd/app.component.ts       | 1 -
 .../src/app/source/mfd/components/data/data.component.ts      | 2 +-
 .../source/mfd/components/logic-tree/logic-tree.component.ts  | 1 -
 .../parameter-summary/parameter-summary.component.ts          | 1 -
 .../src/app/source/mfd/components/plots/plots.component.ts    | 1 -
 .../nshmp-apps/src/app/source/model-maps/app.component.ts     | 1 -
 .../src/app/source/model-maps/components/map/map.component.ts | 1 -
 .../plot-settings-panel/plot-settings-panel.component.ts      | 1 -
 52 files changed, 5 insertions(+), 58 deletions(-)

diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.spec.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.spec.ts
index 718ebfbe9..05651e1b5 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.spec.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/building-code-control/building-code-control.component.spec.ts
@@ -1,10 +1,10 @@
 import {provideHttpClient} from '@angular/common/http';
 import {ComponentFixture, TestBed} from '@angular/core/testing';
+import {FormControl} from '@angular/forms';
 import {provideNoopAnimations} from '@angular/platform-browser/animations';
 import {provideRouter} from '@angular/router';
 
 import {BuildingCodeControlComponent} from './building-code-control.component';
-import {FormControl} from '@angular/forms';
 
 describe('BuildingCodeControlComponent', () => {
   let component: BuildingCodeControlComponent;
diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts
index 7653602b1..019168b78 100644
--- a/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts
+++ b/projects/nshmp-apps/src/app/designmaps/rtgm/components/control-panel-input/control-panel-input.component.ts
@@ -1,8 +1,6 @@
 import {Component, computed, OnDestroy, OnInit} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {MatButtonModule} from '@angular/material/button';
-import {MatDivider} from '@angular/material/divider';
-import {MatIcon} from '@angular/material/icon';
 import {MatError, MatHint, MatInputModule} from '@angular/material/input';
 import {MatFormField, MatSelectModule} from '@angular/material/select';
 import {NshmpLibNgControlPanelButtonsComponent} from '@ghsc/nshmp-lib-ng/nshmp';
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts
index 3fd98af15..75c1b1473 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/content/content.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatTab, MatTabContent, MatTabGroup} from '@angular/material/tabs';
 import {gmmUtils} from '@ghsc/nshmp-lib-ng/gmm';
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/parameter-summary/parameter-summary.component.ts
index e0fc0d330..4d9332ade 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/parameter-summary/parameter-summary.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component} from '@angular/core';
 import {MatList, MatListItem} from '@angular/material/list';
 import {gmmUtils, MultiSelectableParam} from '@ghsc/nshmp-lib-ng/gmm';
diff --git a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts
index b28b6228b..c21a838bc 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/hanging-wall-effects/components/plots/plots.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, Signal} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {MatDivider} from '@angular/material/divider';
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/app.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/app.component.ts
index 3a4facc62..f239fca48 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/app.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/app.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, OnInit} from '@angular/core';
 import {NshmpLibNgAboutPageComponent} from '@ghsc/nshmp-lib-ng/about';
 import {NshmpLibNgHazardProvisionalModelComponent} from '@ghsc/nshmp-lib-ng/hazard';
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/content/content.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/content/content.component.ts
index b2426d420..b288059bd 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/content/content.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatTab, MatTabContent, MatTabGroup} from '@angular/material/tabs';
 
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts
index 1a45b6a5e..bb37bcf16 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/control-panel/control-panel.component.ts
@@ -1,9 +1,7 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, OnDestroy, OnInit, Signal} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {MatOption} from '@angular/material/core';
-import {MatError, MatFormField, MatLabel} from '@angular/material/form-field';
-import {MatInput} from '@angular/material/input';
+import {MatFormField, MatLabel} from '@angular/material/form-field';
 import {MatSelect} from '@angular/material/select';
 import {
   NshmpLibNgHazardLocationFormComponent,
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts
index 9684a45e8..618e52a5c 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/hazard-data/hazard-data.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatAccordion} from '@angular/material/expansion';
 import {PlotTableDataParams, plotUtils} from '@ghsc/nshmp-lib-ng/plot';
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts
index db53a546a..b56f903b5 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/parameter-summary/parameter-summary.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatList, MatListItem} from '@angular/material/list';
 import {hazardUtils} from '@ghsc/nshmp-lib-ng/hazard';
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts
index 8abb0276c..8ae72b206 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/dynamic-compare/components/spectra-data/spectra-data.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, Signal} from '@angular/core';
 import {MatAccordion} from '@angular/material/expansion';
 import {TableData} from '@ghsc/nshmp-lib-ng/nshmp';
diff --git a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts
index 5ed137933..564e6f601 100644
--- a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/control-panel/control-panel.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, OnDestroy, OnInit} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {MatCheckbox} from '@angular/material/checkbox';
diff --git a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot/plot.component.ts b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot/plot.component.ts
index c5bca5e28..53bf7901a 100644
--- a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot/plot.component.ts
+++ b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/components/plot/plot.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatDivider} from '@angular/material/divider';
 import {
diff --git a/projects/nshmp-apps/src/app/gmm/distance/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/gmm/distance/components/parameter-summary/parameter-summary.component.ts
index 7be566813..e9b3bc719 100644
--- a/projects/nshmp-apps/src/app/gmm/distance/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/distance/components/parameter-summary/parameter-summary.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatList, MatListItem} from '@angular/material/list';
 import {gmmUtils, MultiSelectableParam} from '@ghsc/nshmp-lib-ng/gmm';
diff --git a/projects/nshmp-apps/src/app/gmm/distance/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/gmm/distance/components/plots/plots.component.ts
index 055e817cd..e7c54cbb3 100644
--- a/projects/nshmp-apps/src/app/gmm/distance/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/distance/components/plots/plots.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatDivider} from '@angular/material/divider';
 import {
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts
index 03e0a748c..0381e2c43 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/content/content.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatTab, MatTabContent, MatTabGroup} from '@angular/material/tabs';
 import {gmmUtils} from '@ghsc/nshmp-lib-ng/gmm';
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts
index 95ec7b5ac..d184eae04 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/control-panel/control-panel.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, OnDestroy, OnInit} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {MatOption} from '@angular/material/core';
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/parameter-summary/parameter-summary.component.ts
index f7f3593b5..472d1a391 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/parameter-summary/parameter-summary.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatList, MatListItem} from '@angular/material/list';
 import {gmmUtils, MultiSelectableParam} from '@ghsc/nshmp-lib-ng/gmm';
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/plots/plots.component.ts
index e2c0338e0..886915965 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/plots/plots.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatDivider} from '@angular/material/divider';
 import {
diff --git a/projects/nshmp-apps/src/app/gmm/magnitude/components/source-parameters/source-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/magnitude/components/source-parameters/source-parameters.component.ts
index bb693f433..4d88912b6 100644
--- a/projects/nshmp-apps/src/app/gmm/magnitude/components/source-parameters/source-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/magnitude/components/source-parameters/source-parameters.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, OnDestroy, OnInit} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {MatError, MatFormField, MatLabel} from '@angular/material/form-field';
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts
index 688f5c8ec..bb91ded93 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/content/content.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatTab, MatTabContent, MatTabGroup} from '@angular/material/tabs';
 import {gmmUtils} from '@ghsc/nshmp-lib-ng/gmm';
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts
index ce4591b25..99570c11c 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/control-panel/control-panel.component.ts
@@ -1,9 +1,5 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, OnDestroy, OnInit} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
-import {MatOption} from '@angular/material/core';
-import {MatFormField, MatLabel} from '@angular/material/form-field';
-import {MatSelect} from '@angular/material/select';
 import {
   MultiSelectableParam,
   NshmpLibNgGmmMenuComponent,
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/parameter-summary/parameter-summary.component.ts
index f7f3593b5..472d1a391 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/parameter-summary/parameter-summary.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatList, MatListItem} from '@angular/material/list';
 import {gmmUtils, MultiSelectableParam} from '@ghsc/nshmp-lib-ng/gmm';
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts
index 2251df2c1..a9efa78af 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/plots/plots.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatDivider} from '@angular/material/divider';
 import {
diff --git a/projects/nshmp-apps/src/app/gmm/spectra/components/source-parameters/source-parameters.component.ts b/projects/nshmp-apps/src/app/gmm/spectra/components/source-parameters/source-parameters.component.ts
index d8112a781..c4d432a0d 100644
--- a/projects/nshmp-apps/src/app/gmm/spectra/components/source-parameters/source-parameters.component.ts
+++ b/projects/nshmp-apps/src/app/gmm/spectra/components/source-parameters/source-parameters.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, OnDestroy, OnInit} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {MatError, MatFormField, MatLabel} from '@angular/material/form-field';
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/app.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/app.component.ts
index 3ba2aed3d..048c8b8be 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/app.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/app.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, OnInit} from '@angular/core';
 import {NshmpLibNgAboutPageComponent} from '@ghsc/nshmp-lib-ng/about';
 import {NshmpLibNgHazardProvisionalModelComponent} from '@ghsc/nshmp-lib-ng/hazard';
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts
index c3094f992..b0668555c 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/content/content.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatDivider} from '@angular/material/divider';
 import {MatExpansionModule} from '@angular/material/expansion';
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts
index fb67250f4..c2d54454a 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/control-panel/control-panel.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, OnDestroy, OnInit, Signal} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {MatCheckbox} from '@angular/material/checkbox';
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts
index 263d3d4fc..2a1a3ccce 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-contributors/disagg-contributors.component.ts
@@ -1,4 +1,4 @@
-import {AsyncPipe, DecimalPipe, NgClass} from '@angular/common';
+import {DecimalPipe, NgClass} from '@angular/common';
 import {Component, input} from '@angular/core';
 import {MatButton} from '@angular/material/button';
 import {MatDivider} from '@angular/material/divider';
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
index 8cf250388..c2bb1e6eb 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-data/disagg-data.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, input} from '@angular/core';
 import {MatButton} from '@angular/material/button';
 import {MatDivider} from '@angular/material/divider';
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts
index dcd8549d0..5e17b6956 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/disagg-summary/disagg-summary.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, input} from '@angular/core';
 import {MatButton} from '@angular/material/button';
 import {MatDivider} from '@angular/material/divider';
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts
index 9f877f019..f25b16025 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/components/parameter-summary/parameter-summary.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatDivider} from '@angular/material/divider';
 import {MatList, MatListItem} from '@angular/material/list';
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/app.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/app.component.ts
index e3a49aaab..084042bc4 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/app.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/app.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, OnInit} from '@angular/core';
 import {NshmpLibNgAboutPageComponent} from '@ghsc/nshmp-lib-ng/about';
 import {NshmpLibNgHazardProvisionalModelComponent} from '@ghsc/nshmp-lib-ng/hazard';
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts
index c19cd6c5b..1fc58d555 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/content/content.component.ts
@@ -1,4 +1,4 @@
-import {AsyncPipe, LowerCasePipe} from '@angular/common';
+import {LowerCasePipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatTab, MatTabContent, MatTabGroup} from '@angular/material/tabs';
 import {hazardUtils} from '@ghsc/nshmp-lib-ng/hazard';
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts
index 5332d4696..d32ba225c 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/control-panel/control-panel.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, OnDestroy, OnInit, Signal} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {MatOption} from '@angular/material/core';
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts
index eecd0a479..1ee1e7755 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/parameter-summary/parameter-summary.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatList, MatListItem} from '@angular/material/list';
 import {hazardUtils} from '@ghsc/nshmp-lib-ng/hazard';
diff --git a/projects/nshmp-apps/src/app/hazard/dynamic/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/hazard/dynamic/components/plots/plots.component.ts
index 6d12b96fa..e21803fce 100644
--- a/projects/nshmp-apps/src/app/hazard/dynamic/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/dynamic/components/plots/plots.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatDivider} from '@angular/material/divider';
 import {
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts
index 5afaf607c..f2e6b0d28 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/control-panel/control-panel.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, OnDestroy, OnInit, Signal} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts
index 24243c9ac..9f6bfbcca 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/curve-data/curve-data.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatDivider} from '@angular/material/divider';
 import {
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts
index 77bcbffd9..600b21b87 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/parameter-summary/parameter-summary.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatList, MatListItem} from '@angular/material/list';
 import {hazardUtils} from '@ghsc/nshmp-lib-ng/hazard';
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/plots/plots.component.ts
index ec8a3831f..690087232 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/plots/plots.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {MatDivider} from '@angular/material/divider';
 import {
diff --git a/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts b/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts
index b90b7f229..065c3386c 100644
--- a/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts
+++ b/projects/nshmp-apps/src/app/hazard/static/components/spectrum-data/spectrum-data.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {
   MatAccordion,
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
index 1881e31c3..cb48cdafd 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/form/form.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {
   Component,
   effect,
diff --git a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/content/content.component.ts b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/content/content.component.ts
index 07c39a6c1..38b8480ec 100644
--- a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/content/content.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/components/content/content.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {
diff --git a/projects/nshmp-apps/src/app/source/mfd/app.component.ts b/projects/nshmp-apps/src/app/source/mfd/app.component.ts
index cb99719b4..4caa9b025 100644
--- a/projects/nshmp-apps/src/app/source/mfd/app.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/app.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, OnInit} from '@angular/core';
 import {NshmpLibNgAboutPageComponent} from '@ghsc/nshmp-lib-ng/about';
 import {NshmpLibNgHazardProvisionalModelComponent} from '@ghsc/nshmp-lib-ng/hazard';
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts
index f58389efa..077ba5ba7 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/data/data.component.ts
@@ -1,4 +1,4 @@
-import {AsyncPipe, LowerCasePipe} from '@angular/common';
+import {LowerCasePipe} from '@angular/common';
 import {Component, computed} from '@angular/core';
 import {hazardUtils} from '@ghsc/nshmp-lib-ng/hazard';
 import {
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/logic-tree/logic-tree.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/logic-tree/logic-tree.component.ts
index 540e86af8..6ae0114aa 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/logic-tree/logic-tree.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/logic-tree/logic-tree.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component} from '@angular/core';
 import {NshmpLibNgPlotComponent} from '@ghsc/nshmp-lib-ng/plot';
 
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts
index 9c684c145..233f16e8b 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/parameter-summary/parameter-summary.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component} from '@angular/core';
 import {MatList, MatListItem} from '@angular/material/list';
 import {nshmpUtils} from '@ghsc/nshmp-lib-ng/nshmp';
diff --git a/projects/nshmp-apps/src/app/source/mfd/components/plots/plots.component.ts b/projects/nshmp-apps/src/app/source/mfd/components/plots/plots.component.ts
index e60ca3f51..424b90986 100644
--- a/projects/nshmp-apps/src/app/source/mfd/components/plots/plots.component.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/components/plots/plots.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, computed, OnDestroy, OnInit} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {MatOption} from '@angular/material/core';
diff --git a/projects/nshmp-apps/src/app/source/model-maps/app.component.ts b/projects/nshmp-apps/src/app/source/model-maps/app.component.ts
index b90fa294a..b893795ad 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/app.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/app.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core';
 import {NshmpLibNgAboutPageComponent} from '@ghsc/nshmp-lib-ng/about';
 import {NshmpLibNgHazardProvisionalModelComponent} from '@ghsc/nshmp-lib-ng/hazard';
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts b/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
index ed68cf860..0c4be1045 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/map/map.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component, effect, ElementRef, NgZone, viewChild} from '@angular/core';
 import {LeafletModule} from '@bluehalo/ngx-leaflet';
 import {
diff --git a/projects/nshmp-apps/src/app/source/model-maps/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/source/model-maps/components/plot-settings-panel/plot-settings-panel.component.ts
index f3ded4eea..7c0c5397e 100644
--- a/projects/nshmp-apps/src/app/source/model-maps/components/plot-settings-panel/plot-settings-panel.component.ts
+++ b/projects/nshmp-apps/src/app/source/model-maps/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -1,4 +1,3 @@
-import {AsyncPipe} from '@angular/common';
 import {Component} from '@angular/core';
 import {ReactiveFormsModule} from '@angular/forms';
 import {MatLabel} from '@angular/material/form-field';
-- 
GitLab


From 2a70c60f1a714fbb3e7491d315a7d8d27bc27930 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Mon, 16 Dec 2024 16:17:16 -0700
Subject: [PATCH 27/27] use method

---
 .../app/services/components/content/content.component.scss | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/projects/nshmp-apps/src/app/services/components/content/content.component.scss b/projects/nshmp-apps/src/app/services/components/content/content.component.scss
index 168a39b28..ff5faac12 100644
--- a/projects/nshmp-apps/src/app/services/components/content/content.component.scss
+++ b/projects/nshmp-apps/src/app/services/components/content/content.component.scss
@@ -95,6 +95,12 @@ mat-sidenav {
     }
 
     a.active {
+      @include mat.list-overrides(
+        (
+          list-item-supporting-text-color: #3d5e80,
+        )
+      );
+
       @include mat.list-typography(
         mat.m2-define-typography-config(
           $body-2: mat.m2-define-typography-level(
@@ -103,7 +109,6 @@ mat-sidenav {
             )
         )
       );
-      --mdc-list-list-item-supporting-text-color: #3d5e80;
     }
   }
 }
-- 
GitLab