From c819fddd15d1d179613c2da587012b48faebb51e Mon Sep 17 00:00:00 2001 From: Ben <43026681+bwp91@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:40:44 +0000 Subject: [PATCH] update angular from `v18` to `v19` --- CHANGELOG.md | 1 + ui/package-lock.json | 3106 +++++++++++------ ui/package.json | 41 +- ui/src/app/app-routing.module.ts | 15 +- ui/src/app/app.component.ts | 18 +- ui/src/app/app.module.ts | 80 - .../core/accessories/accessories.module.ts | 23 +- .../core/accessories/accessories.service.ts | 16 +- .../accessory-info.component.html | 19 +- .../accessory-info.component.ts | 17 +- .../accessory-tile.component.ts | 81 +- .../airpurifier/airpurifier.component.html | 8 +- .../airpurifier/airpurifier.component.ts | 18 +- .../airpurifier.manage.component.html | 4 +- .../airpurifier.manage.component.ts | 17 +- .../airqualitysensor.component.ts | 3 + .../types/battery/battery.component.html | 16 +- .../types/battery/battery.component.ts | 7 + .../carbondioxidesensor.component.html | 11 +- .../carbondioxidesensor.component.ts | 8 + .../carbonmonoxidesensor.component.html | 11 +- .../carbonmonoxidesensor.component.ts | 8 + .../contactsensor.component.html | 16 +- .../contactsensor/contactsensor.component.ts | 8 + .../types/door/door.component.html | 43 +- .../accessories/types/door/door.component.ts | 18 +- .../types/door/door.manage.component.html | 26 +- .../types/door/door.manage.component.ts | 17 +- .../accessories/types/fan/fan.component.html | 15 +- .../accessories/types/fan/fan.component.ts | 16 +- .../types/fan/fan.manage.component.html | 10 +- .../types/fan/fan.manage.component.ts | 17 +- .../types/fanv2/fanv2.component.html | 15 +- .../types/fanv2/fanv2.component.ts | 16 +- .../types/fanv2/fanv2.manage.component.html | 10 +- .../types/fanv2/fanv2.manage.component.ts | 17 +- .../garagedooropener.component.html | 19 +- .../garagedooropener.component.ts | 10 + .../heatercooler/heatercooler.component.html | 37 +- .../heatercooler/heatercooler.component.ts | 19 +- .../heatercooler.manage.component.html | 17 +- .../heatercooler.manage.component.ts | 21 +- .../humidifierdehumidifier.component.html | 33 +- .../humidifierdehumidifier.component.ts | 16 +- ...midifierdehumidifier.manage.component.html | 19 +- ...humidifierdehumidifier.manage.component.ts | 18 +- .../humiditysensor.component.ts | 1 + .../irrigationsystem.component.html | 11 +- .../irrigationsystem.component.ts | 10 + .../leaksensor/leaksensor.component.html | 11 +- .../types/leaksensor/leaksensor.component.ts | 8 + .../types/lightbulb/lightbulb.component.html | 6 +- .../types/lightbulb/lightbulb.component.ts | 18 +- .../lightbulb/lightbulb.manage.component.html | 4 +- .../lightbulb/lightbulb.manage.component.ts | 17 +- .../lightsensor/lightsensor.component.html | 11 +- .../lightsensor/lightsensor.component.ts | 6 + .../lockmechanism.component.html | 39 +- .../lockmechanism/lockmechanism.component.ts | 10 + .../motionsensor/motionsensor.component.html | 11 +- .../motionsensor/motionsensor.component.ts | 8 + .../occupancysensor.component.html | 11 +- .../occupancysensor.component.ts | 8 + .../types/outlet/outlet.component.ts | 10 + .../securitysystem.component.html | 23 +- .../securitysystem.component.ts | 18 +- .../securitysystem.manage.component.ts | 11 +- .../smokesensor/smokesensor.component.html | 11 +- .../smokesensor/smokesensor.component.ts | 8 + .../types/speaker/speaker.component.html | 18 +- .../types/speaker/speaker.component.ts | 18 +- .../speaker/speaker.manage.component.html | 4 +- .../types/speaker/speaker.manage.component.ts | 17 +- .../statelessprogrammableswitch.component.ts | 2 + .../types/switch/switch.component.ts | 10 + .../television/television.component.html | 11 +- .../types/television/television.component.ts | 10 + .../temperaturesensor.component.ts | 3 + .../thermostat/thermostat.component.html | 9 +- .../types/thermostat/thermostat.component.ts | 19 +- .../thermostat/thermostat.manage.component.ts | 21 +- .../types/unknown/unknown.component.ts | 2 + .../types/valve/valve.component.html | 49 +- .../types/valve/valve.component.ts | 18 +- .../types/valve/valve.manage.component.html | 4 +- .../types/valve/valve.manage.component.ts | 15 +- .../types/window/window.component.html | 43 +- .../types/window/window.component.ts | 18 +- .../types/window/window.manage.component.html | 26 +- .../types/window/window.manage.component.ts | 17 +- .../windowcovering.component.html | 31 +- .../windowcovering.component.ts | 18 +- .../windowcovering.manage.component.html | 26 +- .../windowcovering.manage.component.ts | 17 +- ui/src/app/core/api.service.ts | 4 +- ui/src/app/core/auth/admin.guard.ts | 12 +- ui/src/app/core/auth/auth.guard.ts | 10 +- ui/src/app/core/auth/auth.service.ts | 12 +- .../components/confirm/confirm.component.html | 4 +- .../components/confirm/confirm.component.ts | 11 +- .../information/information.component.html | 23 +- .../information/information.component.ts | 11 +- .../components/qrcode/qrcode.component.ts | 10 +- .../restart-child-bridges.component.html | 4 +- .../restart-child-bridges.component.ts | 17 +- .../restart-homebridge.component.ts | 19 +- .../schema-form/schema-form.component.html | 3 +- .../schema-form/schema-form.component.ts | 15 +- .../components/spinner/spinner.component.ts | 1 + ui/src/app/core/core.module.ts | 58 - .../json-schema-form-patch.directive.ts | 17 +- .../core/directives/longclick.directive.ts | 1 + .../directives/plugins.markdown.directive.ts | 7 +- ui/src/app/core/directives/rtl.directive.ts | 11 +- ui/src/app/core/log.service.ts | 8 +- .../custom-plugins.component.html | 42 +- .../custom-plugins.component.ts | 38 +- .../custom-plugins/custom-plugins.module.ts | 12 +- .../custom-plugins/custom-plugins.service.ts | 10 +- .../homebridge-deconz.component.ts | 11 +- ...homebridge-google-smarthome.component.html | 56 +- .../homebridge-google-smarthome.component.ts | 31 +- .../homebridge-hue.component.ts | 11 +- .../disable-plugin.component.html | 7 +- .../disable-plugin.component.ts | 16 +- .../donate/donate.component.html | 4 +- .../manage-plugins/donate/donate.component.ts | 14 +- .../hb-update-confirm.component.html | 28 +- .../hb-update-confirm.component.ts | 21 +- .../manage-plugins/interpolate-md.pipe.ts | 1 + .../manage-plugin.component.html | 91 +- .../manage-plugin/manage-plugin.component.ts | 32 +- .../manage-plugins/manage-plugins.module.ts | 24 +- .../manage-plugins/manage-plugins.service.ts | 16 +- .../manage-version.component.html | 65 +- .../manage-version.component.ts | 22 +- .../manual-config.component.html | 47 +- .../manual-config/manual-config.component.ts | 45 +- .../plugin-bridge.component.html | 102 +- .../plugin-bridge/plugin-bridge.component.ts | 36 +- .../plugin-compatibility.component.html | 57 +- .../plugin-compatibility.component.ts | 13 +- .../plugin-config.component.html | 52 +- .../plugin-config/plugin-config.component.ts | 50 +- .../plugin-logs/plugin-logs.component.ts | 33 +- .../reset-accessories.component.html | 11 +- .../reset-accessories.component.ts | 27 +- .../switch-to-scoped.component.html | 34 +- .../switch-to-scoped.component.ts | 27 +- .../uninstall-plugin.component.html | 42 +- .../uninstall-plugin.component.ts | 29 +- ui/src/app/core/pipes/convert-temp.pipe.ts | 11 +- .../app/core/pipes/external-link-icon.pipe.ts | 1 + ui/src/app/core/pipes/replace.pipe.ts | 1 + ui/src/app/core/settings.service.ts | 14 +- ui/src/app/core/terminal.service.ts | 8 +- ui/src/app/core/ws.service.ts | 8 +- .../accessories/accessories-routing.module.ts | 3 +- .../accessories/accessories.component.ts | 39 +- .../modules/accessories/accessories.module.ts | 11 +- .../add-room/add-room.component.ts | 11 +- .../drag-here-placeholder.component.ts | 2 + .../config-editor-routing.module.ts | 3 +- .../config-editor.component.html | 23 +- .../config-editor/config-editor.component.ts | 39 +- .../config-editor/config-editor.module.ts | 6 +- .../config-editor/config-editor.resolver.ts | 12 +- .../config.restore.component.html | 17 +- .../config.restore.component.ts | 21 +- ui/src/app/modules/login/login.component.html | 15 +- ui/src/app/modules/login/login.component.ts | 37 +- ui/src/app/modules/login/login.guard.ts | 10 +- ui/src/app/modules/login/login.module.ts | 4 +- .../app/modules/logs/logs-routing.module.ts | 3 +- ui/src/app/modules/logs/logs.component.ts | 25 +- ui/src/app/modules/logs/logs.module.ts | 4 +- .../container-restart.component.html | 13 +- .../container-restart.component.ts | 21 +- .../docker/docker-routing.module.ts | 6 +- .../platform-tools/docker/docker.module.ts | 8 +- .../startup-script.component.html | 12 +- .../startup-script.component.ts | 26 +- .../startup-script/startup-script.resolver.ts | 12 +- .../linux/linux-routing.module.ts | 6 +- .../platform-tools/linux/linux.module.ts | 8 +- .../restart-linux.component.html | 13 +- .../restart-linux/restart-linux.component.ts | 21 +- .../shutdown-linux.component.html | 7 +- .../shutdown-linux.component.ts | 15 +- .../terminal/terminal-routing.module.ts | 3 +- .../terminal/terminal.component.ts | 21 +- .../terminal/terminal.module.ts | 4 +- .../plugin-card/plugin-card.component.html | 272 +- .../plugin-card/plugin-card.component.ts | 38 +- .../plugin-info/plugin-info.component.html | 23 +- .../plugin-info/plugin-info.component.ts | 11 +- .../modules/plugins/plugins-routing.module.ts | 3 +- .../modules/plugins/plugins.component.html | 15 +- .../app/modules/plugins/plugins.component.ts | 34 +- ui/src/app/modules/plugins/plugins.module.ts | 10 +- .../power-options-routing.module.ts | 3 +- .../power-options.component.html | 10 +- .../power-options/power-options.component.ts | 21 +- .../power-options/power-options.module.ts | 4 +- .../modules/restart/restart.component.html | 17 +- .../app/modules/restart/restart.component.ts | 25 +- ui/src/app/modules/restart/restart.module.ts | 6 +- .../settings/backup/backup.component.html | 22 +- .../settings/backup/backup.component.ts | 27 +- .../remove-all-accessories.component.html | 23 +- .../remove-all-accessories.component.ts | 22 +- .../remove-bridge-accessories.component.html | 11 +- .../remove-bridge-accessories.component.ts | 27 +- .../remove-single-accessory.component.html | 14 +- .../remove-single-accessory.component.ts | 24 +- .../settings/restore/restore.component.html | 39 +- .../settings/restore/restore.component.ts | 21 +- .../select-network-interfaces.component.html | 7 +- .../select-network-interfaces.component.ts | 17 +- .../settings/settings-routing.module.ts | 4 +- .../modules/settings/settings.component.html | 103 +- .../modules/settings/settings.component.ts | 36 +- .../app/modules/settings/settings.module.ts | 16 +- .../unpair-all-bridges.component.html | 7 +- .../unpair-all-bridges.component.ts | 24 +- .../unpair-single-bridge.component.html | 11 +- .../unpair-single-bridge.component.ts | 27 +- .../setup-wizard-routing.module.ts | 3 +- .../setup-wizard/setup-wizard.component.html | 34 +- .../setup-wizard/setup-wizard.component.ts | 33 +- .../setup-wizard/setup-wizard.guard.ts | 8 +- .../setup-wizard/setup-wizard.module.ts | 6 +- .../status/credits/credits.component.ts | 8 +- .../app/modules/status/status.component.html | 47 +- ui/src/app/modules/status/status.component.ts | 32 +- ui/src/app/modules/status/status.module.ts | 29 +- .../widget-control.component.ts | 31 +- .../widget-visibility.component.html | 11 +- .../widget-visibility.component.ts | 17 +- .../accessories-widget.component.ts | 28 +- .../clock-widget/clock-widget.component.ts | 2 + .../cpu-widget/cpu-widget.component.html | 4 +- .../cpu-widget/cpu-widget.component.ts | 36 +- .../hap-qrcode-widget.component.html | 4 +- .../hap-qrcode-widget.component.ts | 26 +- .../homebridge-logs-widget.component.ts | 34 +- .../homekit-bridges-widget.component.html | 20 +- .../homekit-bridges-widget.component.ts | 23 +- .../memory-widget/memory-widget.component.ts | 31 +- .../network-widget.component.ts | 33 +- .../system-info-widget.component.html | 54 +- .../system-info-widget.component.ts | 20 +- .../terminal-widget.component.ts | 34 +- .../update-centre-widget.component.html | 154 +- .../update-centre-widget.component.ts | 27 +- .../uptime-widget/uptime-widget.component.ts | 11 +- .../weather-widget.component.html | 13 +- .../weather-widget.component.ts | 23 +- .../status/widgets/widgets.component.ts | 25 +- .../modules/support/support-routing.module.ts | 3 +- .../modules/support/support.component.html | 8 +- .../app/modules/support/support.component.ts | 6 + ui/src/app/modules/support/support.module.ts | 4 +- .../users-2fa-disable.component.html | 4 +- .../users-2fa-disable.component.ts | 23 +- .../users-2fa-enable.component.html | 16 +- .../users-2fa-enable.component.ts | 31 +- .../users/users-add/users-add.component.ts | 25 +- .../users/users-edit/users-edit.component.ts | 27 +- .../app/modules/users/users-routing.module.ts | 3 +- ui/src/app/modules/users/users.component.html | 28 +- ui/src/app/modules/users/users.component.ts | 23 +- ui/src/app/modules/users/users.module.ts | 14 +- ui/src/app/modules/users/users.resolver.ts | 12 +- ui/src/app/shared/layout/layout.component.ts | 27 +- .../layout/sidebar/sidebar.component.html | 28 +- .../layout/sidebar/sidebar.component.ts | 38 +- ui/src/main.ts | 62 +- ui/tsconfig.json | 1 - 279 files changed, 5350 insertions(+), 3485 deletions(-) delete mode 100644 ui/src/app/app.module.ts delete mode 100644 ui/src/app/core/core.module.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index f93ab6f1c..2fe517c84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ Plugin developers: - bump the default node version from 20 to 22 - make terminal enabled by default on new macOS hb-service installs - update node pty beta `v0.12.0-beta` +- update angular from `v18` to `v19` ### Homebridge Dependencies diff --git a/ui/package-lock.json b/ui/package-lock.json index e55a2a8f4..4aa2fc781 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -10,15 +10,15 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { - "@angular/animations": "18.2.12", - "@angular/common": "18.2.12", - "@angular/compiler": "18.2.12", - "@angular/core": "18.2.12", - "@angular/forms": "18.2.12", - "@angular/localize": "18.2.12", - "@angular/platform-browser": "18.2.12", - "@angular/platform-browser-dynamic": "18.2.12", - "@angular/router": "18.2.12", + "@angular/animations": "19.0.0", + "@angular/common": "19.0.0", + "@angular/compiler": "19.0.0", + "@angular/core": "19.0.0", + "@angular/forms": "19.0.0", + "@angular/localize": "19.0.0", + "@angular/platform-browser": "19.0.0", + "@angular/platform-browser-dynamic": "19.0.0", + "@angular/router": "19.0.0", "@auth0/angular-jwt": "5.2.0", "@homebridge/hap-client": "2.0.4", "@ng-bootstrap/ng-bootstrap": "17.0.1", @@ -54,13 +54,13 @@ "xterm": "4.19.0", "xterm-addon-fit": "0.5.0", "xterm-addon-web-links": "0.6.0", - "zone.js": "0.14.10" + "zone.js": "0.15.0" }, "devDependencies": { - "@angular/build": "^18.2.9", - "@angular/cli": "^18.2.9", - "@angular/compiler-cli": "^18.2.12", - "@angular/language-service": "^18.2.12", + "@angular/build": "^19.0.1", + "@angular/cli": "^19.0.1", + "@angular/compiler-cli": "^19.0.0", + "@angular/language-service": "^19.0.0", "@fortawesome/fontawesome-free": "^6.7.1", "@homebridge/plugin-ui-utils": "^1.0.4-beta.2", "@types/emoji-js": "^3.5.2", @@ -73,7 +73,7 @@ "he": "^1.2.0", "patch-package": "^8.0.0", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "5.6.3" } }, "node_modules/@ampproject/remapping": { @@ -90,13 +90,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1802.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.12.tgz", - "integrity": "sha512-bepVb2/GtJppYKaeW8yTGE6egmoWZ7zagFDsmBdbF+BYp+HmeoPsclARcdryBPVq68zedyTRdvhWSUTbw1AYuw==", + "version": "0.1900.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1900.1.tgz", + "integrity": "sha512-4SONLz5lzuNINz5DAaZlQLhBasLqEiDKMH+YHYgYE2N3ImfuYj9urgfdRnfarPInQslCE9OzahOQslVzoQxJhg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.12", + "@angular-devkit/core": "19.0.1", "rxjs": "7.8.1" }, "engines": { @@ -106,9 +106,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.12.tgz", - "integrity": "sha512-NtB6ypsaDyPE6/fqWOdfTmACs+yK5RqfH5tStEzWFeeDsIEDYKsJ06ypuRep7qTjYus5Rmttk0Ds+cFgz8JdUQ==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.0.1.tgz", + "integrity": "sha512-oXIAV3hXqUW3Pmm95pvEmb+24n1cKQG62FzhQSjOIrMeHiCbGLNuc8zHosIi2oMrcCJJxR6KzWjThvbuzDwWlw==", "dev": true, "license": "MIT", "dependencies": { @@ -125,7 +125,7 @@ "yarn": ">= 1.13.0" }, "peerDependencies": { - "chokidar": "^3.5.2" + "chokidar": "^4.0.0" }, "peerDependenciesMeta": { "chokidar": { @@ -134,15 +134,15 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.12.tgz", - "integrity": "sha512-mMea9txHbnCX5lXLHlo0RAgfhFHDio45/jMsREM2PA8UtVf2S8ltXz7ZwUrUyMQRv8vaSfn4ijDstF4hDMnRgQ==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.0.1.tgz", + "integrity": "sha512-N9dV8WpNRULykNj8fSxQrta85gPKxb315J3xugLS2uwiFWhz7wo5EY1YeYhoVKoVcNB2ng9imJgC5aO52AHZwg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.12", + "@angular-devkit/core": "19.0.1", "jsonc-parser": "3.3.1", - "magic-string": "0.30.11", + "magic-string": "0.30.12", "ora": "5.4.1", "rxjs": "7.8.1" }, @@ -153,9 +153,9 @@ } }, "node_modules/@angular/animations": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.12.tgz", - "integrity": "sha512-XcWH/VFQ1Rddhdqi/iU8lW3Qg96yVx1NPfrO5lhcSSvVUzYWTZ5r+jh3GqYqUgPWyEp1Kpw3FLsOgVcGcBWQkQ==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.0.0.tgz", + "integrity": "sha512-+uZTvEXjYh8PZKB4ijk8uuH1K+Tz/A67mUlltFv9pYKtnmbZAeS/PI66g/7pigRYDvEgid1fvlAANeBShAiPZQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -164,56 +164,61 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.12" + "@angular/core": "19.0.0" } }, "node_modules/@angular/build": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.12.tgz", - "integrity": "sha512-4Ohz+OSILoL+cCAQ4UTiCT5v6pctu3fXNoNpTEUK46OmxELk9jDITO5rNyNS7TxBn9wY69kjX5VcDf7MenquFQ==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.0.1.tgz", + "integrity": "sha512-Aodt+EsGQyM8LVG/GjeMAC7BQ4z14SmtUbu6S54mAjGn9uiiYixszAi3fM4SsaQZRK9m0Lwv3a151rw2yZUJow==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.12", - "@babel/core": "7.25.2", - "@babel/helper-annotate-as-pure": "7.24.7", + "@angular-devkit/architect": "0.1900.1", + "@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.1", "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": { @@ -225,6 +230,9 @@ "@angular/service-worker": { "optional": true }, + "@angular/ssr": { + "optional": true + }, "less": { "optional": true }, @@ -255,25 +263,25 @@ } }, "node_modules/@angular/cli": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.12.tgz", - "integrity": "sha512-xhuZ/b7IhqNw1MgXf+arWf4x+GfUSt/IwbdWU4+CO8A7h0Y46zQywouP/KUK3cMQZfVdHdciTBvlpF3vFacA6Q==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.0.1.tgz", + "integrity": "sha512-vn+assDJoTQyHKSiWorduJ4JDlPyLSJ8M4EHod9Kdn8XT26dEwubTh6o70GkFNEiZ7TSSqQbrAEYuGVJwMRQjQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1802.12", - "@angular-devkit/core": "18.2.12", - "@angular-devkit/schematics": "18.2.12", - "@inquirer/prompts": "5.3.8", - "@listr2/prompt-adapter-inquirer": "2.0.15", - "@schematics/angular": "18.2.12", + "@angular-devkit/architect": "0.1900.1", + "@angular-devkit/core": "19.0.1", + "@angular-devkit/schematics": "19.0.1", + "@inquirer/prompts": "7.1.0", + "@listr2/prompt-adapter-inquirer": "2.0.18", + "@schematics/angular": "19.0.1", "@yarnpkg/lockfile": "1.1.0", - "ini": "4.1.3", + "ini": "5.0.0", "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", + "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", @@ -289,9 +297,9 @@ } }, "node_modules/@angular/common": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.12.tgz", - "integrity": "sha512-gI5o8Bccsi8ow8Wk2vG4Tw/Rw9LoHEA9j8+qHKNR/55SCBsz68Syg310dSyxy+sApJO2WiqIadr5VP36dlSUFw==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-19.0.0.tgz", + "integrity": "sha512-kb2iS26GZS0vyR3emAQbIiQifnK5M5vnbclEHni+pApDEU5V9FufbdRP3vCxs28UHZvAZKB0LrxkTrnT6T+z5g==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -300,14 +308,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.12", + "@angular/core": "19.0.0", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.12.tgz", - "integrity": "sha512-D5d5dLrjQal5DbAXJJNSsCC3UxzjOI2wbc+Iv+LOpRM1gpNwuYfZMX5W7cj62Ce4G2++78CJSppdKBp8D4HErQ==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.0.0.tgz", + "integrity": "sha512-Uw2Yy25pdqfzKsS9WofnIq1zvknlVYyy03LYO7NMKHlFWiy8q8SIXN7WKPFhiHlOfyACXipp4eZb9m3+IbOfSA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -316,7 +324,7 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.12" + "@angular/core": "19.0.0" }, "peerDependenciesMeta": { "@angular/core": { @@ -325,12 +333,12 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.12.tgz", - "integrity": "sha512-IWimTNq5Q+i2Wxev6HLqnN4iYbPvLz04W1BBycT1LfGUsHcjFYLuUqbeUzHbk2snmBAzXkixgVpo8SF6P4Y5Pg==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.0.0.tgz", + "integrity": "sha512-2PxpsIeppoDLAx7A6i0GE10WjC+Fkz8tTQioa7r4y/+eYnniEjJFIQM/8lbkOnRVcuYoeXoNyYWr3fEQAyO4LA==", "license": "MIT", "dependencies": { - "@babel/core": "7.25.2", + "@babel/core": "7.26.0", "@jridgewell/sourcemap-codec": "^1.4.14", "chokidar": "^4.0.0", "convert-source-map": "^1.5.1", @@ -348,42 +356,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/compiler": "18.2.12", - "typescript": ">=5.4 <5.6" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "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==", - "license": "MIT", - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "@angular/compiler": "19.0.0", + "typescript": ">=5.5 <5.7" } }, "node_modules/@angular/core": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.12.tgz", - "integrity": "sha512-wCf/OObwS6bpM60rk6bpMpCRGp0DlMLB1WNAMtfcaPNyqimVV5Bm98mWRhkOuRyvU3fU7iHhM/10ePVaoyu9+A==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-19.0.0.tgz", + "integrity": "sha512-aNG2kd30BOM/zf0jC+aEVG8OA27IwqCki9EkmyRNYnaP2O5Mj1n7JpCyZGI+0LrWTJ2UUCfRNZiZdZwmNThr1Q==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -393,13 +373,13 @@ }, "peerDependencies": { "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.14.10" + "zone.js": "~0.15.0" } }, "node_modules/@angular/forms": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.12.tgz", - "integrity": "sha512-FsukBJEU6jfAmht7TrODTkct/o4iwCZvGozuThOp0tYUPD/E1rZZzuKjEyTnT5Azpfkf0Wqx1nmpz80cczELOQ==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.0.0.tgz", + "integrity": "sha512-gM4bUdlIJ0uRYNwoVMbXiZt4+bZzPXzyQ7ByNIOVKEAI0PN9Jz1dR1pSeQgIoUvKQbhwsVKVUoa7Tn1hoqwvTg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -408,16 +388,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.12", - "@angular/core": "18.2.12", - "@angular/platform-browser": "18.2.12", + "@angular/common": "19.0.0", + "@angular/core": "19.0.0", + "@angular/platform-browser": "19.0.0", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-18.2.12.tgz", - "integrity": "sha512-oaiVAnGzmPZvrXdGh8XnosaqfEPbZxO2225MxbbrD49XTqUgpaS2zrz1Uf5j42e8qytA2kj8tckLq7PAMm0D1w==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-19.0.0.tgz", + "integrity": "sha512-oXDZ+gOTVFhpGg+Cp/3Mo0aa214eCF13dEboRYTIM/m1jnsTHcIlfhRpkw+FLUSEN9MTVK5xVfx5gUudI7T0rg==", "dev": true, "license": "MIT", "engines": { @@ -425,12 +405,12 @@ } }, "node_modules/@angular/localize": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-18.2.12.tgz", - "integrity": "sha512-qC3cYFh3miR9revmHGlfbGvugcsK6nQud4QKBNyTUp1XZRrEE0yzPvvsnmbv2lHUOazrvTxQpfVZZKpiifgoLw==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-19.0.0.tgz", + "integrity": "sha512-n1mDFjVKjJEXycpWPyXQ5sUy83KzJTbpohsvM6Fhgk+gTUSxmj9kP6wjnKtsGCSV3tjtI62jTczKYJJotoDc9w==", "license": "MIT", "dependencies": { - "@babel/core": "7.25.2", + "@babel/core": "7.26.0", "@types/babel__core": "7.20.5", "fast-glob": "3.3.2", "yargs": "^17.2.1" @@ -444,14 +424,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/compiler": "18.2.12", - "@angular/compiler-cli": "18.2.12" + "@angular/compiler": "19.0.0", + "@angular/compiler-cli": "19.0.0" } }, "node_modules/@angular/platform-browser": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.12.tgz", - "integrity": "sha512-DRSMznuxuecrs+v5BRyd60/R4vjkQtuYUEPfzdo+rqxM83Dmr3PGtnqPRgd5oAFUbATxf02hQXijRD27K7rZRg==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.0.0.tgz", + "integrity": "sha512-g9Qkv+KgEmXLVeg+dw1edmWsRBspUGeJMOBf2UX1kUCw6txeco+pzCMimouB5LQYHfs6cD6oC+FwINm0HNwrhg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -460,9 +440,9 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/animations": "18.2.12", - "@angular/common": "18.2.12", - "@angular/core": "18.2.12" + "@angular/animations": "19.0.0", + "@angular/common": "19.0.0", + "@angular/core": "19.0.0" }, "peerDependenciesMeta": { "@angular/animations": { @@ -471,9 +451,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.12.tgz", - "integrity": "sha512-dv1QEjYpcFno6+oUeGEDRWpB5g2Ufb0XkUbLJQIgrOk1Qbyzb8tmpDpTjok8jcKdquigMRWolr6Y1EOicfRlLw==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.0.0.tgz", + "integrity": "sha512-ljvycDe0etmTBDzbCFakpsItywddpKEyCZGMKRvz5TdND1N1qqXydxAF1kLzP5H7F/QOMdP4/T/T1HS+6AUpkw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -482,16 +462,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.12", - "@angular/compiler": "18.2.12", - "@angular/core": "18.2.12", - "@angular/platform-browser": "18.2.12" + "@angular/common": "19.0.0", + "@angular/compiler": "19.0.0", + "@angular/core": "19.0.0", + "@angular/platform-browser": "19.0.0" } }, "node_modules/@angular/router": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.12.tgz", - "integrity": "sha512-cz/1YWOZadAT35PPPYmpK3HSzKOE56nlUHue5bFkw73VSZr2iBn03ALLpd9YKzWgRmx3y7DqnlQtCkDu9JPGKQ==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-19.0.0.tgz", + "integrity": "sha512-uFyT8DWVLGY8k0AZjpK7iyMO/WwT4/+b09Ax0uUEbdcRxTXSOg8/U/AVzQWtxzxI80/vJE2WZMmhIJFUTYwhKA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -500,9 +480,9 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.12", - "@angular/core": "18.2.12", - "@angular/platform-browser": "18.2.12", + "@angular/common": "19.0.0", + "@angular/core": "19.0.0", + "@angular/platform-browser": "19.0.0", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -542,21 +522,21 @@ } }, "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==", + "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": { "@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", + "@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", @@ -603,13 +583,13 @@ } }, "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==", + "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.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -749,13 +729,13 @@ } }, "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==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -834,9 +814,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", - "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", "cpu": [ "ppc64" ], @@ -851,9 +831,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", - "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "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" ], @@ -868,9 +848,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", - "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "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" ], @@ -885,9 +865,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", - "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", "cpu": [ "x64" ], @@ -902,9 +882,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", - "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", + "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" ], @@ -919,9 +899,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", - "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "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" ], @@ -936,9 +916,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", - "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", "cpu": [ "arm64" ], @@ -953,9 +933,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", - "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "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" ], @@ -970,9 +950,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", - "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", "cpu": [ "arm" ], @@ -987,9 +967,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", - "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "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" ], @@ -1004,9 +984,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", - "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "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" ], @@ -1021,9 +1001,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", - "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "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" ], @@ -1038,9 +1018,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", - "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "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" ], @@ -1055,9 +1035,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", - "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", "cpu": [ "ppc64" ], @@ -1072,9 +1052,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", - "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "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" ], @@ -1089,9 +1069,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", - "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "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" ], @@ -1106,9 +1086,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", - "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "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" ], @@ -1123,9 +1103,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", - "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "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" ], @@ -1140,9 +1120,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", - "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", "cpu": [ "arm64" ], @@ -1157,9 +1137,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", - "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "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" ], @@ -1174,9 +1154,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", - "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "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" ], @@ -1191,9 +1171,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", - "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "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" ], @@ -1208,9 +1188,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", - "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "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" ], @@ -1225,9 +1205,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", - "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", "cpu": [ "x64" ], @@ -1272,51 +1252,54 @@ "license": "MIT" }, "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.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.0.2.tgz", + "integrity": "sha512-+gznPl8ip8P8HYHYecDtUtdsh1t2jvb+sWCD72GAiZ9m45RqwrLmReDaqdC0umQfamtFXVRoMVJ2/qINKGm9Tg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/figures": "^1.0.5", - "@inquirer/type": "^1.5.3", + "@inquirer/core": "^10.1.0", + "@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.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.0.tgz", + "integrity": "sha512-I+ETk2AL+yAVbvuKx5AJpQmoaWhpiTFOg/UJb7ZkMAK4blmtG8ATh5ct+T/8xNld0CZG/2UhtkdMwpgvld92XQ==", "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", @@ -1326,47 +1309,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/editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.2.0.tgz", - "integrity": "sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.1.0.tgz", + "integrity": "sha512-K1gGWsxEqO23tVdp5MT3H799OZ4ER1za7Dlc8F4um0W7lwSv0KGR/YyrUEyimj0g7dXZd8XknM/5QA2/Uy+TbA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3", + "@inquirer/core": "^10.1.0", + "@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.2", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.2.tgz", + "integrity": "sha512-WdgCX1cUtinz+syKyZdJomovULYlKUWZbVYZzhf+ZeeYf4htAQ3jLymoNs3koIAKfZZl3HUBb819ClCBfyznaw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3", + "@inquirer/core": "^10.1.0", + "@inquirer/type": "^3.0.1", "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" } }, "node_modules/@inquirer/figures": { @@ -1380,129 +1356,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.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.0.2.tgz", + "integrity": "sha512-yCLCraigU085EcdpIVEDgyfGv4vBiE4I+k1qRkc9C5dMjWF42ADMGy1RFU94+eZlz4YlkmFsiyHZy0W1wdhaNg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3" + "@inquirer/core": "^10.1.0", + "@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.2", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.2.tgz", + "integrity": "sha512-MKQhYofdUNk7eqJtz52KvM1dH6R93OMrqHduXCvuefKrsiMjHiMwjc3NZw5Imm2nqY7gWd9xdhYrtcHMJQZUxA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3" + "@inquirer/core": "^10.1.0", + "@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.2", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.2.tgz", + "integrity": "sha512-tQXGSu7IO07gsYlGy3VgXRVsbOWqFBMbqAUrJSc1PDTQQ5Qdm+QVwkP0OC0jnUZ62D19iPgXOMO+tnWG+HhjNQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3", + "@inquirer/core": "^10.1.0", + "@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.2", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.2.tgz", + "integrity": "sha512-3XGcskMoVF8H0Dl1S5TSZ3rMPPBWXRcM0VeNVsS4ByWeWjSeb0lPqfnBg6N7T0608I1B2bSVnbi2cwCrmOD1Yw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3", + "@inquirer/core": "^10.1.0", + "@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.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.2.tgz", + "integrity": "sha512-Zv4FC7w4dJ13BOJfKRQCICQfShinGjb1bCEIHxTSnjj2telu3+3RHwHubPG9HyD4aix5s+lyAMEK/wSFD75HLA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/figures": "^1.0.5", - "@inquirer/type": "^1.5.3", + "@inquirer/core": "^10.1.0", + "@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.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.0.2.tgz", + "integrity": "sha512-uSWUzaSYAEj0hlzxa1mUB6VqrKaYx0QxGBLZzU4xWFxaSyGaXxsSE4OSOwdU24j0xl8OajgayqFXW0l2bkl2kg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/figures": "^1.0.5", - "@inquirer/type": "^1.5.3", + "@inquirer/core": "^10.1.0", + "@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": { @@ -1608,6 +1605,29 @@ "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/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -1669,25 +1689,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" ], @@ -1699,9 +1742,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" ], @@ -1713,9 +1756,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" ], @@ -1727,9 +1770,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" ], @@ -1741,9 +1784,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" ], @@ -1755,9 +1798,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" ], @@ -1852,77 +1895,382 @@ "win32" ] }, - "node_modules/@ng-bootstrap/ng-bootstrap": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-17.0.1.tgz", - "integrity": "sha512-utbm8OXIoqVVYGVzQkOS773ymbjc+UMkXv8lyi7hTqLhCQs0rZ0yA74peqVZRuOGXLHgcSTA7fnJhA80iQOblw==", + "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": { - "tslib": "^2.3.0" + "optional": true, + "engines": { + "node": ">= 10" }, - "peerDependencies": { - "@angular/common": "^18.0.0", - "@angular/core": "^18.0.0", - "@angular/forms": "^18.0.0", - "@angular/localize": "^18.0.0", - "@popperjs/core": "^2.11.8", - "rxjs": "^6.5.3 || ^7.4.0" + "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": ">= 10" } }, - "node_modules/@ng-formworks/bootstrap4": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@ng-formworks/bootstrap4/-/bootstrap4-18.0.0.tgz", - "integrity": "sha512-xY2BDGA23wOZCPWMd/15TfOHZynqtxZLUmLugH7iiXzv1o4M/FoUn7SqUxBbymJ0Vye447qxrgK0+zZs5A5AQg==", + "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": { - "@ng-formworks/core": "~18.0.0", - "@ng-formworks/cssframework": "~18.0.0", - "lodash-es": "~4.17.21", - "tslib": "^2.7.0" - }, - "peerDependencies": { - "@angular/common": ">=18.0.0", - "@angular/core": ">=18.0.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@ng-formworks/core": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@ng-formworks/core/-/core-18.0.0.tgz", - "integrity": "sha512-K3VQtTRfNYFVOG9kB2WvUWhBhcVqO0mrJ1soDH8/AfEU78kfocun4vV1URoNbyIKpIROwMlCiyKL3nV4N6g6Xg==", + "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", - "dependencies": { - "ajv": "^8.12.0", - "lodash-es": "~4.17.21", - "tslib": "^2.7.0" - }, - "peerDependencies": { - "@angular/common": ">=18.0.0", - "@angular/core": ">=18.0.0", - "@angular/forms": ">=18.0.0", - "@angular/platform-browser": ">=18.0.0", - "rxjs": "^7.0.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@ng-formworks/cssframework": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@ng-formworks/cssframework/-/cssframework-18.0.0.tgz", - "integrity": "sha512-N5fwtx2hGkee6AUpot+5KopcAyNQGweKA6wb22Buq8uPgd9Z4wiAoZ4fnR/lw15s6cYdmRTi7O9baHjUBicIZQ==", + "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": { - "@ng-formworks/core": "~18.0.0", - "tslib": "^2.7.0" - }, - "peerDependencies": { - "@angular/common": "^18.0.0", - "@angular/core": "^18.0.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@ngx-translate/core": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-16.0.3.tgz", - "integrity": "sha512-UPse66z9tRUmIpeorYodXBQY6O4foUmj9jy9cCuuja7lqdOwRBWPzCWqc+qYIXv5L2QoqZdxgHtqoUz+Q9weSA==", - "license": "MIT", - "dependencies": { + "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": "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/@ng-bootstrap/ng-bootstrap": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-17.0.1.tgz", + "integrity": "sha512-utbm8OXIoqVVYGVzQkOS773ymbjc+UMkXv8lyi7hTqLhCQs0rZ0yA74peqVZRuOGXLHgcSTA7fnJhA80iQOblw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^18.0.0", + "@angular/core": "^18.0.0", + "@angular/forms": "^18.0.0", + "@angular/localize": "^18.0.0", + "@popperjs/core": "^2.11.8", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@ng-formworks/bootstrap4": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@ng-formworks/bootstrap4/-/bootstrap4-18.0.0.tgz", + "integrity": "sha512-xY2BDGA23wOZCPWMd/15TfOHZynqtxZLUmLugH7iiXzv1o4M/FoUn7SqUxBbymJ0Vye447qxrgK0+zZs5A5AQg==", + "license": "MIT", + "dependencies": { + "@ng-formworks/core": "~18.0.0", + "@ng-formworks/cssframework": "~18.0.0", + "lodash-es": "~4.17.21", + "tslib": "^2.7.0" + }, + "peerDependencies": { + "@angular/common": ">=18.0.0", + "@angular/core": ">=18.0.0" + } + }, + "node_modules/@ng-formworks/core": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@ng-formworks/core/-/core-18.0.0.tgz", + "integrity": "sha512-K3VQtTRfNYFVOG9kB2WvUWhBhcVqO0mrJ1soDH8/AfEU78kfocun4vV1URoNbyIKpIROwMlCiyKL3nV4N6g6Xg==", + "license": "MIT", + "dependencies": { + "ajv": "^8.12.0", + "lodash-es": "~4.17.21", + "tslib": "^2.7.0" + }, + "peerDependencies": { + "@angular/common": ">=18.0.0", + "@angular/core": ">=18.0.0", + "@angular/forms": ">=18.0.0", + "@angular/platform-browser": ">=18.0.0", + "rxjs": "^7.0.0" + } + }, + "node_modules/@ng-formworks/cssframework": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@ng-formworks/cssframework/-/cssframework-18.0.0.tgz", + "integrity": "sha512-N5fwtx2hGkee6AUpot+5KopcAyNQGweKA6wb22Buq8uPgd9Z4wiAoZ4fnR/lw15s6cYdmRTi7O9baHjUBicIZQ==", + "license": "MIT", + "dependencies": { + "@ng-formworks/core": "~18.0.0", + "tslib": "^2.7.0" + }, + "peerDependencies": { + "@angular/common": "^18.0.0", + "@angular/core": "^18.0.0" + } + }, + "node_modules/@ngx-translate/core": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-16.0.3.tgz", + "integrity": "sha512-UPse66z9tRUmIpeorYodXBQY6O4foUmj9jy9cCuuja7lqdOwRBWPzCWqc+qYIXv5L2QoqZdxgHtqoUz+Q9weSA==", + "license": "MIT", + "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { @@ -1990,37 +2338,37 @@ "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/lru-cache": { @@ -2031,92 +2379,424 @@ "license": "ISC" }, "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.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.0.1.tgz", + "integrity": "sha512-YW6PZ99sc1Q4DINEY2td5z9Z3rwbbsx7CyCnOc7UXUUdePXh5gPi1UeaoQVmKQMVbIU7aOwX2l1OG5ZfjgGi5g==", "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/promise-spawn": { + "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": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/redact": { + "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": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.0.1.tgz", + "integrity": "sha512-q9C0uHrb6B6cm3qXVM32UmpqTKuFGbtP23O2K5sLvPMz2hilKd0ptqGXSpuunOuOmPQb/aT5F/kCXFc1P2gO/A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^10.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "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": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "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": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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/@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", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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/@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/@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": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "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==", + "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": [ + "ia32" + ], "dev": true, - "license": "ISC", - "dependencies": { - "which": "^4.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@npmcli/redact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", - "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", + "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": [ + "x64" + ], "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "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==", + "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": "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" + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=0.10" } }, + "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 + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -2139,9 +2819,9 @@ } }, "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==", + "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" ], @@ -2153,9 +2833,9 @@ ] }, "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==", + "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" ], @@ -2167,9 +2847,9 @@ ] }, "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==", + "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" ], @@ -2181,9 +2861,9 @@ ] }, "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==", + "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" ], @@ -2194,10 +2874,38 @@ "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.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==", + "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" ], @@ -2209,9 +2917,9 @@ ] }, "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==", + "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" ], @@ -2223,9 +2931,9 @@ ] }, "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==", + "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" ], @@ -2237,9 +2945,9 @@ ] }, "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==", + "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" ], @@ -2251,9 +2959,9 @@ ] }, "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==", + "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" ], @@ -2265,9 +2973,9 @@ ] }, "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==", + "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" ], @@ -2279,9 +2987,9 @@ ] }, "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==", + "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" ], @@ -2293,9 +3001,9 @@ ] }, "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==", + "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" ], @@ -2307,9 +3015,9 @@ ] }, "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==", + "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" ], @@ -2321,9 +3029,9 @@ ] }, "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==", + "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" ], @@ -2335,9 +3043,9 @@ ] }, "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==", + "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" ], @@ -2349,9 +3057,9 @@ ] }, "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==", + "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" ], @@ -2363,14 +3071,14 @@ ] }, "node_modules/@schematics/angular": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.12.tgz", - "integrity": "sha512-sIoeipsisK5eTLW3XuNZYcal83AfslBbgI7LnV+3VrXwpasKPGHwo2ZdwhCd2IXAkuJ02Iyu7MyV0aQRM9i/3g==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.0.1.tgz", + "integrity": "sha512-zjUv+D8j21dmWgJrNCgav3njb06509Mwy7/ZIC5TMyzWfRsrNlrHLEam/tasi4dt171d5mj9A+IlXeEPnWoNCA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.12", - "@angular-devkit/schematics": "18.2.12", + "@angular-devkit/core": "19.0.1", + "@angular-devkit/schematics": "19.0.1", "jsonc-parser": "3.3.1" }, "engines": { @@ -2380,26 +3088,26 @@ } }, "node_modules/@sigstore/bundle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "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": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", - "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "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": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/protobuf-specs": { @@ -2413,50 +3121,155 @@ } }, "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==", + "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": "^2.3.2", - "@sigstore/core": "^1.0.0", + "@sigstore/bundle": "^3.0.0", + "@sigstore/core": "^2.0.0", "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", + "make-fetch-happen": "^14.0.1", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign/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", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign/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/@sigstore/sign/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/@sigstore/sign/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": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/@sigstore/sign/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", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@sigstore/sign/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": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@sigstore/sign/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_modules/@sigstore/tuf": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", - "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", + "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": "^2.2.1" + "tuf-js": "^3.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.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==", + "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": "^2.3.2", - "@sigstore/core": "^1.1.0", + "@sigstore/bundle": "^3.0.0", + "@sigstore/core": "^2.0.0", "@sigstore/protobuf-specs": "^0.3.2" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@socket.io/component-emitter": { @@ -2504,17 +3317,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/@types/babel__core": { @@ -2573,9 +3386,9 @@ "license": "MIT" }, "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==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true, "license": "MIT" }, @@ -2603,16 +3416,6 @@ "@types/lodash": "*" } }, - "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": "22.9.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.1.tgz", @@ -2651,13 +3454,6 @@ "socket.io-client": "*" } }, - "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/@vitejs/plugin-basic-ssl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", @@ -2829,33 +3625,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/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": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -2925,17 +3694,21 @@ ], "license": "MIT" }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "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": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "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/bl": { @@ -3066,42 +3839,126 @@ "ieee754": "^1.1.13" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/cacache": { + "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": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" + }, + "engines": { + "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/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/cacache/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", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } + }, + "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/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_modules/cacache": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "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": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "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" + "@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": "^16.14.0 || >=18.0.0" + "node": ">=18" } }, - "node_modules/cacache/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==", + "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": "ISC" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } }, "node_modules/call-bind": { "version": "1.0.7", @@ -3189,28 +4046,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==", - "dev": true, + "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/chownr": { @@ -3443,23 +4290,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.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -3626,6 +4456,7 @@ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "dev": true, "license": "Apache-2.0", + "optional": true, "engines": { "node": ">=8" } @@ -3877,9 +4708,9 @@ } }, "node_modules/esbuild": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", - "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "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", @@ -3890,30 +4721,30 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.0", - "@esbuild/android-arm": "0.23.0", - "@esbuild/android-arm64": "0.23.0", - "@esbuild/android-x64": "0.23.0", - "@esbuild/darwin-arm64": "0.23.0", - "@esbuild/darwin-x64": "0.23.0", - "@esbuild/freebsd-arm64": "0.23.0", - "@esbuild/freebsd-x64": "0.23.0", - "@esbuild/linux-arm": "0.23.0", - "@esbuild/linux-arm64": "0.23.0", - "@esbuild/linux-ia32": "0.23.0", - "@esbuild/linux-loong64": "0.23.0", - "@esbuild/linux-mips64el": "0.23.0", - "@esbuild/linux-ppc64": "0.23.0", - "@esbuild/linux-riscv64": "0.23.0", - "@esbuild/linux-s390x": "0.23.0", - "@esbuild/linux-x64": "0.23.0", - "@esbuild/netbsd-x64": "0.23.0", - "@esbuild/openbsd-arm64": "0.23.0", - "@esbuild/openbsd-x64": "0.23.0", - "@esbuild/sunos-x64": "0.23.0", - "@esbuild/win32-arm64": "0.23.0", - "@esbuild/win32-ia32": "0.23.0", - "@esbuild/win32-x64": "0.23.0" + "@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/escalade": { @@ -4337,16 +5168,16 @@ } }, "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/hosted-git-info/node_modules/lru-cache": { @@ -4357,9 +5188,9 @@ "license": "ISC" }, "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "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", @@ -4372,8 +5203,8 @@ "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" + "domutils": "^3.1.0", + "entities": "^4.5.0" } }, "node_modules/http-cache-semantics": { @@ -4446,22 +5277,22 @@ "license": "BSD-3-Clause" }, "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/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" }, @@ -4514,13 +5345,13 @@ "license": "ISC" }, "node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/ip-address": { @@ -4537,19 +5368,6 @@ "node": ">= 12" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-core-module": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", @@ -4685,6 +5503,33 @@ "node": ">=16" } }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", @@ -4733,13 +5578,13 @@ } }, "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-traverse": { @@ -4830,9 +5675,9 @@ } }, "node_modules/listr2": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", - "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", + "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": { @@ -4908,29 +5753,30 @@ } }, "node_modules/lmdb": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.0.13.tgz", - "integrity": "sha512-UGe+BbaSUQtAMZobTb4nHvFMrmvuAQKSeaqAX2meTEQjfsbpl5sxdHD8T72OnwD4GU9uwNhYXIVe4QGs8N9Zyw==", + "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.10.2", + "msgpackr": "^1.11.2", "node-addon-api": "^6.1.0", "node-gyp-build-optional-packages": "5.2.2", - "ordered-binary": "^1.4.1", + "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.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" + "@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/locate-path": { @@ -5107,9 +5953,9 @@ } }, "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==", + "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": { @@ -5147,6 +5993,115 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/make-fetch-happen/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "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" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/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/make-fetch-happen/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen/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==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/marked": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", @@ -5491,6 +6446,7 @@ "integrity": "sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==", "dev": true, "license": "MIT", + "optional": true, "optionalDependencies": { "msgpackr-extract": "^3.0.2" } @@ -5532,13 +6488,13 @@ } }, "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==", + "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", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/nanoid": { @@ -5673,36 +6629,13 @@ "@angular/platform-browser": ">=16.0.0-0" } }, - "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-gyp": { "version": "10.2.0", @@ -5729,32 +6662,46 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", "dev": true, "license": "MIT", "optional": true, + "dependencies": { + "detect-libc": "^2.0.1" + }, "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" } }, - "node_modules/node-gyp-build-optional-packages": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", - "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "node_modules/node-gyp/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==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "detect-libc": "^2.0.1" + "isexe": "^3.1.1" }, "bin": { - "node-gyp-build-optional-packages": "bin.js", - "node-gyp-build-optional-packages-optional": "optional.js", - "node-gyp-build-optional-packages-test": "build-test.js" + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" } }, "node_modules/node-releases": { @@ -5780,28 +6727,18 @@ } }, "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_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/nouislider": { @@ -5812,104 +6749,209 @@ "peer": true }, "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-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-registry-fetch/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", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-registry-fetch/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/npm-registry-fetch/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/npm-registry-fetch/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": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm-registry-fetch/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", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm-registry-fetch/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": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm-registry-fetch/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_modules/nth-check": { @@ -6057,7 +7099,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-tmpdir": { "version": "1.0.2", @@ -6097,16 +7140,13 @@ } }, "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.2.tgz", + "integrity": "sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==", "dev": true, "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6129,35 +7169,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/parse5": { @@ -6312,13 +7352,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/pngjs": { @@ -6387,13 +7427,13 @@ } }, "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/promise-inflight": { @@ -6566,29 +7606,16 @@ } }, "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": "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==", - "dev": true, + "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/reflect-metadata": { @@ -6744,13 +7771,13 @@ } }, "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" @@ -6760,22 +7787,24 @@ "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" } }, @@ -6840,14 +7869,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": { @@ -6855,6 +7884,9 @@ }, "engines": { "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, "node_modules/semver": { @@ -6930,21 +7962,21 @@ } }, "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/slash": { @@ -7139,16 +8171,16 @@ "license": "BSD-3-Clause" }, "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/string_decoder": { @@ -7453,18 +8485,123 @@ "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/tuf-js/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", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/tuf-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" + }, + "node_modules/tuf-js/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/tuf-js/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": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/tuf-js/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", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/tuf-js/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": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/tuf-js/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_modules/type-fest": { @@ -7501,29 +8638,29 @@ "license": "MIT" }, "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": { @@ -7605,19 +8742,19 @@ } }, "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "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": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "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": { @@ -8105,9 +9242,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==", "dev": true, "license": "MIT", "dependencies": { @@ -8133,12 +9270,13 @@ "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/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": { @@ -8148,7 +9286,7 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/which-module": { @@ -8422,9 +9560,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/ui/package.json b/ui/package.json index 7630a196e..50be3017d 100644 --- a/ui/package.json +++ b/ui/package.json @@ -12,15 +12,15 @@ "postinstall": "patch-package" }, "dependencies": { - "@angular/animations": "18.2.12", - "@angular/common": "18.2.12", - "@angular/compiler": "18.2.12", - "@angular/core": "18.2.12", - "@angular/forms": "18.2.12", - "@angular/localize": "18.2.12", - "@angular/platform-browser": "18.2.12", - "@angular/platform-browser-dynamic": "18.2.12", - "@angular/router": "18.2.12", + "@angular/animations": "19.0.0", + "@angular/common": "19.0.0", + "@angular/compiler": "19.0.0", + "@angular/core": "19.0.0", + "@angular/forms": "19.0.0", + "@angular/localize": "19.0.0", + "@angular/platform-browser": "19.0.0", + "@angular/platform-browser-dynamic": "19.0.0", + "@angular/router": "19.0.0", "@auth0/angular-jwt": "5.2.0", "@homebridge/hap-client": "2.0.4", "@ng-bootstrap/ng-bootstrap": "17.0.1", @@ -56,13 +56,13 @@ "xterm": "4.19.0", "xterm-addon-fit": "0.5.0", "xterm-addon-web-links": "0.6.0", - "zone.js": "0.14.10" + "zone.js": "0.15.0" }, "devDependencies": { - "@angular/build": "^18.2.9", - "@angular/cli": "^18.2.9", - "@angular/compiler-cli": "^18.2.12", - "@angular/language-service": "^18.2.12", + "@angular/build": "^19.0.1", + "@angular/cli": "^19.0.1", + "@angular/compiler-cli": "^19.0.0", + "@angular/language-service": "^19.0.0", "@fortawesome/fontawesome-free": "^6.7.1", "@homebridge/plugin-ui-utils": "^1.0.4-beta.2", "@types/emoji-js": "^3.5.2", @@ -75,14 +75,13 @@ "he": "^1.2.0", "patch-package": "^8.0.0", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "5.6.3" }, "overrides": { - "@angular/animations": "18.2.12", - "@angular/common": "18.2.12", - "@angular/core": "18.2.12", - "@angular/forms": "18.2.12", - "@angular/localize": "18.2.12", - "typescript": "^5.6.3" + "@angular/animations": "19.0.0", + "@angular/common": "19.0.0", + "@angular/core": "19.0.0", + "@angular/forms": "19.0.0", + "@angular/localize": "19.0.0" } } diff --git a/ui/src/app/app-routing.module.ts b/ui/src/app/app-routing.module.ts index 9a78e321b..a1d53cd6b 100644 --- a/ui/src/app/app-routing.module.ts +++ b/ui/src/app/app-routing.module.ts @@ -1,11 +1,10 @@ import { AdminGuard } from '@/app/core/auth/admin.guard' import { AuthGuard } from '@/app/core/auth/auth.guard' -import { LoginComponent } from '@/app/modules/login/login.component' + import { LoginGuard } from '@/app/modules/login/login.guard' -import { RestartComponent } from '@/app/modules/restart/restart.component' + import { SetupWizardGuard } from '@/app/modules/setup-wizard/setup-wizard.guard' -import { StatusComponent } from '@/app/modules/status/status.component' -import { LayoutComponent } from '@/app/shared/layout/layout.component' + import { NgModule } from '@angular/core' import { RouterModule, Routes } from '@angular/router' @@ -17,7 +16,7 @@ import { RouterModule, Routes } from '@angular/router' const routes: Routes = [ { path: 'login', - component: LoginComponent, + loadComponent: () => import('@/app/modules/login/login.component').then(m => m.LoginComponent), canActivate: [LoginGuard], }, { @@ -27,16 +26,16 @@ const routes: Routes = [ }, { path: '', - component: LayoutComponent, + loadComponent: () => import('@/app/shared/layout/layout.component').then(m => m.LayoutComponent), canActivate: [AuthGuard], children: [ { path: '', - component: StatusComponent, + loadComponent: () => import('@/app/modules/status/status.component').then(m => m.StatusComponent), }, { path: 'restart', - component: RestartComponent, + loadComponent: () => import('@/app/modules/restart/restart.component').then(m => m.RestartComponent), canActivate: [AdminGuard], }, { diff --git a/ui/src/app/app.component.ts b/ui/src/app/app.component.ts index e18917da7..ff4488acd 100644 --- a/ui/src/app/app.component.ts +++ b/ui/src/app/app.component.ts @@ -1,18 +1,22 @@ import { SettingsService } from '@/app/core/settings.service' -import { Component } from '@angular/core' -import { Router } from '@angular/router' +import { Component, inject } from '@angular/core' +import { Router, RouterOutlet } from '@angular/router' import { TranslateService } from '@ngx-translate/core' @Component({ selector: 'app-root', templateUrl: './app.component.html', + imports: [RouterOutlet], }) export class AppComponent { - constructor( - private $router: Router, - private $translate: TranslateService, - private $settings: SettingsService, - ) { + private $router = inject(Router) + private $translate = inject(TranslateService) + private $settings = inject(SettingsService) + + constructor() { + const $translate = this.$translate + const $settings = this.$settings + // Detect if the user has a dark mode preference const colorSchemeQueryList = window.matchMedia('(prefers-color-scheme: dark)') const setLightingMode = (event: MediaQueryList | MediaQueryListEvent) => { diff --git a/ui/src/app/app.module.ts b/ui/src/app/app.module.ts deleted file mode 100644 index 8aa1273fb..000000000 --- a/ui/src/app/app.module.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { AppComponent } from '@/app/app.component' -import { AppRoutingModule } from '@/app/app-routing.module' -import { AuthModule } from '@/app/core/auth/auth.module' -import { CoreModule } from '@/app/core/core.module' -import { supportedLocales } from '@/app/core/locales' -import { onMonacoLoad } from '@/app/core/monaco-editor.service' -import { LoginModule } from '@/app/modules/login/login.module' -import { RestartModule } from '@/app/modules/restart/restart.module' -import { StatusModule } from '@/app/modules/status/status.module' -import { LayoutComponent } from '@/app/shared/layout/layout.component' -import { SidebarComponent } from '@/app/shared/layout/sidebar/sidebar.component' -import { NgOptimizedImage } from '@angular/common' -import { HttpClientModule } from '@angular/common/http' -import { LOCALE_ID, NgModule } from '@angular/core' -import { BrowserModule } from '@angular/platform-browser' -import { BrowserAnimationsModule } from '@angular/platform-browser/animations' -import { NgbModule } from '@ng-bootstrap/ng-bootstrap' -import { TranslateModule, TranslateService } from '@ngx-translate/core' -import { DragulaModule } from 'ng2-dragula' -import { MonacoEditorModule } from 'ngx-monaco-editor-v2' -import { ToastrModule } from 'ngx-toastr' - -@NgModule({ - declarations: [ - AppComponent, - LayoutComponent, - SidebarComponent, - ], - imports: [ - BrowserModule, - BrowserAnimationsModule, - HttpClientModule, - TranslateModule.forRoot(), - ToastrModule.forRoot({ - autoDismiss: true, - newestOnTop: false, - closeButton: true, - maxOpened: 2, - positionClass: 'toast-bottom-right', - }), - NgbModule, - MonacoEditorModule.forRoot({ - defaultOptions: { - scrollBeyondLastLine: false, - quickSuggestions: true, - parameterHints: true, - formatOnType: true, - formatOnPaste: true, - folding: true, - minimap: { - enabled: false, - }, - }, - onMonacoLoad, - }), - DragulaModule.forRoot(), - CoreModule, - AuthModule, - LoginModule, - StatusModule, - RestartModule, - AppRoutingModule, - NgOptimizedImage, - ], - providers: [ - { - provide: LOCALE_ID, - useFactory: (translate: TranslateService) => { - if (translate.currentLang in supportedLocales) { - return supportedLocales[translate.currentLang] - } else { - return 'en' - } - }, - deps: [TranslateService], - }, - ], - bootstrap: [AppComponent], -}) -export class AppModule {} diff --git a/ui/src/app/core/accessories/accessories.module.ts b/ui/src/app/core/accessories/accessories.module.ts index 2ab04802f..f069ba1ab 100644 --- a/ui/src/app/core/accessories/accessories.module.ts +++ b/ui/src/app/core/accessories/accessories.module.ts @@ -47,18 +47,24 @@ import { WindowComponent } from '@/app/core/accessories/types/window/window.comp import { WindowManageComponent } from '@/app/core/accessories/types/window/window.manage.component' import { WindowCoveringComponent } from '@/app/core/accessories/types/windowcovering/windowcovering.component' import { WindowcoveringManageComponent } from '@/app/core/accessories/types/windowcovering/windowcovering.manage.component' -import { CoreModule } from '@/app/core/core.module' + import { CommonModule } from '@angular/common' import { NgModule } from '@angular/core' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { NgbModule } from '@ng-bootstrap/ng-bootstrap' import { TranslateModule } from '@ngx-translate/core' -import { InlineSVGModule } from 'ng-inline-svg-2' import { NouisliderModule } from 'ng2-nouislider' import { NgxMdModule } from 'ngx-md' @NgModule({ - declarations: [ + imports: [ + CommonModule, + FormsModule, + ReactiveFormsModule, + TranslateModule.forChild(), + NouisliderModule, + NgbModule, + NgxMdModule, AccessoryTileComponent, AccessoryInfoComponent, SwitchComponent, @@ -108,17 +114,6 @@ import { NgxMdModule } from 'ngx-md' CarbonmonoxidesensorComponent, CarbondioxidesensorComponent, ], - imports: [ - CommonModule, - FormsModule, - ReactiveFormsModule, - InlineSVGModule.forRoot(), - TranslateModule.forChild(), - NouisliderModule, - NgbModule, - NgxMdModule, - CoreModule, - ], exports: [ AccessoryTileComponent, ], diff --git a/ui/src/app/core/accessories/accessories.service.ts b/ui/src/app/core/accessories/accessories.service.ts index 69b86fa3b..02adbdb65 100644 --- a/ui/src/app/core/accessories/accessories.service.ts +++ b/ui/src/app/core/accessories/accessories.service.ts @@ -2,7 +2,7 @@ import type { ServiceType } from '@homebridge/hap-client' import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' import { AccessoryInfoComponent } from '@/app/core/accessories/accessory-info/accessory-info.component' -import { Injectable } from '@angular/core' +import { inject, Injectable } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { TranslateService } from '@ngx-translate/core' import { ToastrService } from 'ngx-toastr' @@ -15,6 +15,12 @@ import { IoNamespace, WsService } from '../ws.service' providedIn: 'root', }) export class AccessoriesService { + private $auth = inject(AuthService) + private $modal = inject(NgbModal) + private $toastr = inject(ToastrService) + private $translate = inject(TranslateService) + private $ws = inject(WsService) + public layoutSaved = new Subject() public accessoryData = new Subject() public readyForControl = false @@ -40,14 +46,6 @@ export class AccessoriesService { 'ProtocolInformation', ] - constructor( - private $auth: AuthService, - private $modal: NgbModal, - private $toastr: ToastrService, - private $translate: TranslateService, - private $ws: WsService, - ) {} - /** * */ diff --git a/ui/src/app/core/accessories/accessory-info/accessory-info.component.html b/ui/src/app/core/accessories/accessory-info/accessory-info.component.html index 5c2fc9a46..fc06d5816 100644 --- a/ui/src/app/core/accessories/accessory-info/accessory-info.component.html +++ b/ui/src/app/core/accessories/accessory-info/accessory-info.component.html @@ -60,20 +60,27 @@ {{ service.humanType }} - + @for (characteristic of service.serviceCharacteristics; track characteristic) { + {{ characteristic.description }} - - {{ characteristic.value }}% - {{ characteristic.value | convertTemp }}° - {{ characteristic.value }} + + @switch (characteristic.unit) { @case ('percentage') { + {{ characteristic.value }}% + } @case ('celsius') { + {{ characteristic.value | convertTemp }}° + } @default { + {{ characteristic.value }} + } } - + } @for (information of accessoryInformation; track information) { + {{ information.key }} {{ information.value }} + } Homebridge Instance IP {{ service.instance.ipAddress }} diff --git a/ui/src/app/core/accessories/accessory-info/accessory-info.component.ts b/ui/src/app/core/accessories/accessory-info/accessory-info.component.ts index 12a6b14e2..56de22259 100644 --- a/ui/src/app/core/accessories/accessory-info/accessory-info.component.ts +++ b/ui/src/app/core/accessories/accessory-info/accessory-info.component.ts @@ -1,18 +1,25 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' -import { Component, Input, OnInit } from '@angular/core' +import { ConvertTempPipe } from '@/app/core/pipes/convert-temp.pipe' +import { Component, inject, Input, OnInit } from '@angular/core' +import { FormsModule } from '@angular/forms' + import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' @Component({ templateUrl: './accessory-info.component.html', + imports: [ + FormsModule, + TranslatePipe, + ConvertTempPipe, + ], }) export class AccessoryInfoComponent implements OnInit { + $activeModal = inject(NgbActiveModal) + @Input() public service: ServiceTypeX public accessoryInformation: Array - constructor( - public $activeModal: NgbActiveModal, - ) {} - ngOnInit() { this.accessoryInformation = Object.entries(this.service.accessoryInformation).map(([key, value]) => ({ key, value })) } diff --git a/ui/src/app/core/accessories/accessory-tile/accessory-tile.component.ts b/ui/src/app/core/accessories/accessory-tile/accessory-tile.component.ts index 0c57b6d2e..9675cd356 100644 --- a/ui/src/app/core/accessories/accessory-tile/accessory-tile.component.ts +++ b/ui/src/app/core/accessories/accessory-tile/accessory-tile.component.ts @@ -1,16 +1,87 @@ -import { Component, Input } from '@angular/core' +import { NgIf, NgSwitch, NgSwitchCase, NgSwitchDefault } from '@angular/common' +import { Component, inject, Input } from '@angular/core' import { ServiceTypeX } from '../accessories.interfaces' import { AccessoriesService } from '../accessories.service' +import { AirpurifierComponent } from '../types/airpurifier/airpurifier.component' +import { AirqualitysensorComponent } from '../types/airqualitysensor/airqualitysensor.component' +import { BatteryComponent } from '../types/battery/battery.component' +import { CarbondioxidesensorComponent } from '../types/carbondioxidesensor/carbondioxidesensor.component' +import { CarbonmonoxidesensorComponent } from '../types/carbonmonoxidesensor/carbonmonoxidesensor.component' +import { ContactsensorComponent } from '../types/contactsensor/contactsensor.component' +import { DoorComponent } from '../types/door/door.component' +import { FanComponent } from '../types/fan/fan.component' +import { Fanv2Component } from '../types/fanv2/fanv2.component' +import { GaragedooropenerComponent } from '../types/garagedooropener/garagedooropener.component' +import { HeaterCoolerComponent } from '../types/heatercooler/heatercooler.component' +import { HumidifierDehumidifierComponent } from '../types/humidifierdehumidifier/humidifierdehumidifier.component' +import { HumiditysensorComponent } from '../types/humiditysensor/humiditysensor.component' +import { IrrigationSystemComponent } from '../types/irrigationsystem/irrigationsystem.component' +import { LeaksensorComponent } from '../types/leaksensor/leaksensor.component' +import { LightbulbComponent } from '../types/lightbulb/lightbulb.component' +import { LightsensorComponent } from '../types/lightsensor/lightsensor.component' +import { LockmechanismComponent } from '../types/lockmechanism/lockmechanism.component' +import { MotionsensorComponent } from '../types/motionsensor/motionsensor.component' +import { OccupancysensorComponent } from '../types/occupancysensor/occupancysensor.component' +import { OutletComponent } from '../types/outlet/outlet.component' +import { SecuritysystemComponent } from '../types/securitysystem/securitysystem.component' +import { SmokesensorComponent } from '../types/smokesensor/smokesensor.component' +import { SpeakerComponent } from '../types/speaker/speaker.component' +import { StatelessprogrammableswitchComponent } from '../types/statelessprogrammableswitch/statelessprogrammableswitch.component' +import { SwitchComponent } from '../types/switch/switch.component' +import { TelevisionComponent } from '../types/television/television.component' +import { TemperaturesensorComponent } from '../types/temperaturesensor/temperaturesensor.component' +import { ThermostatComponent } from '../types/thermostat/thermostat.component' +import { UnknownComponent } from '../types/unknown/unknown.component' +import { ValveComponent } from '../types/valve/valve.component' +import { WindowComponent } from '../types/window/window.component' +import { WindowCoveringComponent } from '../types/windowcovering/windowcovering.component' @Component({ selector: 'app-accessory-tile', templateUrl: './accessory-tile.component.html', + imports: [ + NgSwitch, + NgIf, + NgSwitchCase, + SwitchComponent, + ThermostatComponent, + OutletComponent, + FanComponent, + Fanv2Component, + AirpurifierComponent, + LightbulbComponent, + LightsensorComponent, + LockmechanismComponent, + TemperaturesensorComponent, + GaragedooropenerComponent, + MotionsensorComponent, + OccupancysensorComponent, + ContactsensorComponent, + HumiditysensorComponent, + AirqualitysensorComponent, + WindowCoveringComponent, + WindowComponent, + DoorComponent, + TelevisionComponent, + BatteryComponent, + SpeakerComponent, + SecuritysystemComponent, + LeaksensorComponent, + SmokesensorComponent, + CarbonmonoxidesensorComponent, + CarbondioxidesensorComponent, + ValveComponent, + IrrigationSystemComponent, + HeaterCoolerComponent, + HumidifierDehumidifierComponent, + StatelessprogrammableswitchComponent, + NgSwitchDefault, + UnknownComponent, + ], }) export class AccessoryTileComponent { - @Input() public service: ServiceTypeX + $accessories = inject(AccessoriesService) - constructor( - public $accessories: AccessoriesService, - ) {} + @Input() public service: ServiceTypeX } diff --git a/ui/src/app/core/accessories/types/airpurifier/airpurifier.component.html b/ui/src/app/core/accessories/types/airpurifier/airpurifier.component.html index e36ca83df..a4a3efce6 100644 --- a/ui/src/app/core/accessories/types/airpurifier/airpurifier.component.html +++ b/ui/src/app/core/accessories/types/airpurifier/airpurifier.component.html @@ -13,13 +13,13 @@ class="accessory-svg" >
{{ service.customName || service.serviceName }}
+ @if (!service.values.RotationSpeed || !service.values.Active) {
-
- {{ service.values.RotationSpeed }}% -
+ } @if (service.values.RotationSpeed && service.values.Active) { +
{{ service.values.RotationSpeed }}%
+ } diff --git a/ui/src/app/core/accessories/types/airpurifier/airpurifier.component.ts b/ui/src/app/core/accessories/types/airpurifier/airpurifier.component.ts index aa6a0acaf..5474c6f12 100644 --- a/ui/src/app/core/accessories/types/airpurifier/airpurifier.component.ts +++ b/ui/src/app/core/accessories/types/airpurifier/airpurifier.component.ts @@ -1,19 +1,27 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' import { AirpurifierManageComponent } from '@/app/core/accessories/types/airpurifier/airpurifier.manage.component' -import { Component, Input } from '@angular/core' +import { NgClass } from '@angular/common' +import { Component, inject, Input } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-airpurifier', templateUrl: './airpurifier.component.html', styleUrls: ['./airpurifier.component.scss'], + imports: [ + LongClickDirective, + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class AirpurifierComponent { - @Input() public service: ServiceTypeX + private $modal = inject(NgbModal) - constructor( - private $modal: NgbModal, - ) {} + @Input() public service: ServiceTypeX onClick() { this.service.getCharacteristic('Active').setValue(this.service.values.Active ? 0 : 1) diff --git a/ui/src/app/core/accessories/types/airpurifier/airpurifier.manage.component.html b/ui/src/app/core/accessories/types/airpurifier/airpurifier.manage.component.html index 0cf6b6f84..7cc4b10f8 100644 --- a/ui/src/app/core/accessories/types/airpurifier/airpurifier.manage.component.html +++ b/ui/src/app/core/accessories/types/airpurifier/airpurifier.manage.component.html @@ -33,7 +33,8 @@
-
+ @if (targetRotationSpeed) { +
{{ 'accessories.control.rotation_speed' | translate }}

{{ targetRotationSpeed.value }}%

{{ 'accessories.control.rotation_speed' | translate }}
> + } diff --git a/ui/src/app/core/accessories/types/airpurifier/airpurifier.manage.component.ts b/ui/src/app/core/accessories/types/airpurifier/airpurifier.manage.component.ts index 49093893a..393126a12 100644 --- a/ui/src/app/core/accessories/types/airpurifier/airpurifier.manage.component.ts +++ b/ui/src/app/core/accessories/types/airpurifier/airpurifier.manage.component.ts @@ -1,6 +1,10 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' -import { Component, Input, OnInit } from '@angular/core' +import { Component, inject, Input, OnInit } from '@angular/core' +import { FormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { NouisliderComponent } from 'ng2-nouislider' + import { Subject } from 'rxjs' import { debounceTime, distinctUntilChanged } from 'rxjs/operators' @@ -8,16 +12,21 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators' selector: 'app-airpurifier-manage', templateUrl: './airpurifier.manage.component.html', styleUrls: ['./airpurifier.component.scss'], + imports: [ + FormsModule, + NouisliderComponent, + TranslatePipe, + ], }) export class AirpurifierManageComponent implements OnInit { + $activeModal = inject(NgbActiveModal) + @Input() public service: ServiceTypeX public targetMode: any public targetRotationSpeed: any public targetRotationSpeedChanged: Subject = new Subject() - constructor( - public $activeModal: NgbActiveModal, - ) { + constructor() { this.targetRotationSpeedChanged .pipe( debounceTime(300), diff --git a/ui/src/app/core/accessories/types/airqualitysensor/airqualitysensor.component.ts b/ui/src/app/core/accessories/types/airqualitysensor/airqualitysensor.component.ts index 9238b0897..017117159 100644 --- a/ui/src/app/core/accessories/types/airqualitysensor/airqualitysensor.component.ts +++ b/ui/src/app/core/accessories/types/airqualitysensor/airqualitysensor.component.ts @@ -1,9 +1,12 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { NgClass } from '@angular/common' import { Component, Input } from '@angular/core' +import { InlineSVGModule } from 'ng-inline-svg-2' @Component({ selector: 'app-airqualitysensor', templateUrl: './airqualitysensor.component.html', + imports: [NgClass, InlineSVGModule], }) export class AirqualitysensorComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/battery/battery.component.html b/ui/src/app/core/accessories/types/battery/battery.component.html index 370ea30b4..0a3aebf94 100644 --- a/ui/src/app/core/accessories/types/battery/battery.component.html +++ b/ui/src/app/core/accessories/types/battery/battery.component.html @@ -8,14 +8,12 @@ }" >
{{ service.customName || service.serviceName }}
-
- {{ 'accessories.control.battery_notcharging' | translate }} -
-
- {{ 'accessories.control.battery_charging' | translate }} -
-
- {{ 'accessories.control.battery_notchargeable' | translate }} -
+ @if (service.values.ChargingState === 0) { +
{{ 'accessories.control.battery_notcharging' | translate }}
+ } @if (service.values.ChargingState === 1) { +
{{ 'accessories.control.battery_charging' | translate }}
+ } @if (service.values.ChargingState === 2) { +
{{ 'accessories.control.battery_notchargeable' | translate }}
+ } diff --git a/ui/src/app/core/accessories/types/battery/battery.component.ts b/ui/src/app/core/accessories/types/battery/battery.component.ts index c091824ff..76b66e211 100644 --- a/ui/src/app/core/accessories/types/battery/battery.component.ts +++ b/ui/src/app/core/accessories/types/battery/battery.component.ts @@ -1,10 +1,17 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { DecimalPipe, NgClass } from '@angular/common' import { Component, Input } from '@angular/core' +import { TranslatePipe } from '@ngx-translate/core' @Component({ selector: 'app-battery', templateUrl: './battery.component.html', styleUrls: ['./battery.component.scss'], + imports: [ + NgClass, + DecimalPipe, + TranslatePipe, + ], }) export class BatteryComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/carbondioxidesensor/carbondioxidesensor.component.html b/ui/src/app/core/accessories/types/carbondioxidesensor/carbondioxidesensor.component.html index 485313aad..e5f6895da 100644 --- a/ui/src/app/core/accessories/types/carbondioxidesensor/carbondioxidesensor.component.html +++ b/ui/src/app/core/accessories/types/carbondioxidesensor/carbondioxidesensor.component.html @@ -12,11 +12,10 @@ class="accessory-svg" >
{{ service.customName || service.serviceName }}
-
- {{ 'accessories.control.detected' | translate }} -
-
- {{ 'accessories.control.not_detected' | translate }} -
+ @if (service.values.CarbonDioxideDetected) { +
{{ 'accessories.control.detected' | translate }}
+ } @if (!service.values.CarbonDioxideDetected) { +
{{ 'accessories.control.not_detected' | translate }}
+ } diff --git a/ui/src/app/core/accessories/types/carbondioxidesensor/carbondioxidesensor.component.ts b/ui/src/app/core/accessories/types/carbondioxidesensor/carbondioxidesensor.component.ts index a60a153ca..cd4a393fa 100644 --- a/ui/src/app/core/accessories/types/carbondioxidesensor/carbondioxidesensor.component.ts +++ b/ui/src/app/core/accessories/types/carbondioxidesensor/carbondioxidesensor.component.ts @@ -1,10 +1,18 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { NgClass } from '@angular/common' import { Component, Input } from '@angular/core' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' @Component({ selector: 'app-carbondioxidesensor', templateUrl: './carbondioxidesensor.component.html', styleUrls: ['./carbondioxidesensor.component.scss'], + imports: [ + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class CarbondioxidesensorComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/carbonmonoxidesensor/carbonmonoxidesensor.component.html b/ui/src/app/core/accessories/types/carbonmonoxidesensor/carbonmonoxidesensor.component.html index 8cf3960e0..701aa57b3 100644 --- a/ui/src/app/core/accessories/types/carbonmonoxidesensor/carbonmonoxidesensor.component.html +++ b/ui/src/app/core/accessories/types/carbonmonoxidesensor/carbonmonoxidesensor.component.html @@ -12,11 +12,10 @@ class="accessory-svg" >
{{ service.customName || service.serviceName }}
-
- {{ 'accessories.control.detected' | translate }} -
-
- {{ 'accessories.control.not_detected' | translate }} -
+ @if (service.values.CarbonMonoxideDetected) { +
{{ 'accessories.control.detected' | translate }}
+ } @if (!service.values.CarbonMonoxideDetected) { +
{{ 'accessories.control.not_detected' | translate }}
+ } diff --git a/ui/src/app/core/accessories/types/carbonmonoxidesensor/carbonmonoxidesensor.component.ts b/ui/src/app/core/accessories/types/carbonmonoxidesensor/carbonmonoxidesensor.component.ts index ae5fb24e4..e1d988e42 100644 --- a/ui/src/app/core/accessories/types/carbonmonoxidesensor/carbonmonoxidesensor.component.ts +++ b/ui/src/app/core/accessories/types/carbonmonoxidesensor/carbonmonoxidesensor.component.ts @@ -1,10 +1,18 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { NgClass } from '@angular/common' import { Component, Input } from '@angular/core' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' @Component({ selector: 'app-carbonmonoxidesensor', templateUrl: './carbonmonoxidesensor.component.html', styleUrls: ['./carbonmonoxidesensor.component.scss'], + imports: [ + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class CarbonmonoxidesensorComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/contactsensor/contactsensor.component.html b/ui/src/app/core/accessories/types/contactsensor/contactsensor.component.html index d78f0ce33..65caf28bd 100644 --- a/ui/src/app/core/accessories/types/contactsensor/contactsensor.component.html +++ b/ui/src/app/core/accessories/types/contactsensor/contactsensor.component.html @@ -6,24 +6,24 @@ }" >
+ @if (service.values.ContactSensorState) {
+ } @if (!service.values.ContactSensorState) {
+ }
{{ service.customName || service.serviceName }}
-
- {{ 'accessories.control.open' | translate }} -
-
- {{ 'accessories.control.closed' | translate }} -
+ @if (service.values.ContactSensorState) { +
{{ 'accessories.control.open' | translate }}
+ } @if (!service.values.ContactSensorState) { +
{{ 'accessories.control.closed' | translate }}
+ }
diff --git a/ui/src/app/core/accessories/types/contactsensor/contactsensor.component.ts b/ui/src/app/core/accessories/types/contactsensor/contactsensor.component.ts index e17976931..4b0cf4f9a 100644 --- a/ui/src/app/core/accessories/types/contactsensor/contactsensor.component.ts +++ b/ui/src/app/core/accessories/types/contactsensor/contactsensor.component.ts @@ -1,10 +1,18 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { NgClass } from '@angular/common' import { Component, Input } from '@angular/core' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' @Component({ selector: 'app-contactsensor', templateUrl: './contactsensor.component.html', styleUrls: ['./contactsensor.component.scss'], + imports: [ + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class ContactsensorComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/door/door.component.html b/ui/src/app/core/accessories/types/door/door.component.html index df8df0eff..3b4c21ee8 100644 --- a/ui/src/app/core/accessories/types/door/door.component.html +++ b/ui/src/app/core/accessories/types/door/door.component.html @@ -7,31 +7,26 @@ tabindex="0" >
-
-
+ @if (!service.values.TargetPosition) { +
+ } @if (service.values.TargetPosition) { +
+ }
{{ service.customName || service.serviceName }}
-
- {{ 'accessories.control.closed' | translate }} - - {{ service.values.CurrentPosition }}% - - {{ 'accessories.control.open' | translate }} -
-
- {{ 'accessories.control.opening' | translate }}... -
-
- {{ 'accessories.control.closing' | translate }}... + @if (service.values.PositionState === 2) { +
+ @if (service.values.CurrentPosition === 0) { + {{ 'accessories.control.closed' | translate }} + } @if (service.values.CurrentPosition > 0 && service.values.CurrentPosition < 100) { + {{ service.values.CurrentPosition }}% + } @if (service.values.CurrentPosition === 100) { + {{ 'accessories.control.open' | translate }} + }
+ } @if (service.values.PositionState === 1) { +
{{ 'accessories.control.opening' | translate }}...
+ } @if (service.values.PositionState === 0) { +
{{ 'accessories.control.closing' | translate }}...
+ }
diff --git a/ui/src/app/core/accessories/types/door/door.component.ts b/ui/src/app/core/accessories/types/door/door.component.ts index 684e6e4bb..ac878efed 100644 --- a/ui/src/app/core/accessories/types/door/door.component.ts +++ b/ui/src/app/core/accessories/types/door/door.component.ts @@ -1,19 +1,27 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' import { DoorManageComponent } from '@/app/core/accessories/types/door/door.manage.component' -import { Component, Input } from '@angular/core' +import { NgClass } from '@angular/common' +import { Component, inject, Input } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-door', templateUrl: './door.component.html', styleUrls: ['./door.component.scss'], + imports: [ + LongClickDirective, + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class DoorComponent { - @Input() public service: ServiceTypeX + private $modal = inject(NgbModal) - constructor( - private $modal: NgbModal, - ) {} + @Input() public service: ServiceTypeX onClick() { if (this.service.values.TargetPosition) { diff --git a/ui/src/app/core/accessories/types/door/door.manage.component.html b/ui/src/app/core/accessories/types/door/door.manage.component.html index 3d30f946c..3708e4c98 100644 --- a/ui/src/app/core/accessories/types/door/door.manage.component.html +++ b/ui/src/app/core/accessories/types/door/door.manage.component.html @@ -14,19 +14,21 @@
-
+ @if (targetRotationSpeed) { +
{{ 'accessories.control.rotation_speed' | translate }}
-

{{ targetRotationSpeed.value }}%

+

+ {{ targetRotationSpeed.value }}@if (targetRotationSpeed.unit === 'percentage') { + % + } +

{{ 'accessories.control.rotation_speed' | translate }}
> + } diff --git a/ui/src/app/core/accessories/types/fan/fan.manage.component.ts b/ui/src/app/core/accessories/types/fan/fan.manage.component.ts index de06e1db0..c138dc5cd 100644 --- a/ui/src/app/core/accessories/types/fan/fan.manage.component.ts +++ b/ui/src/app/core/accessories/types/fan/fan.manage.component.ts @@ -1,6 +1,10 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' -import { Component, Input, OnInit } from '@angular/core' +import { Component, inject, Input, OnInit } from '@angular/core' +import { FormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { NouisliderComponent } from 'ng2-nouislider' + import { Subject } from 'rxjs' import { debounceTime, distinctUntilChanged } from 'rxjs/operators' @@ -8,16 +12,21 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators' selector: 'app-fan-manage', templateUrl: './fan.manage.component.html', styleUrls: ['./fan.component.scss'], + imports: [ + FormsModule, + NouisliderComponent, + TranslatePipe, + ], }) export class FanManageComponent implements OnInit { + $activeModal = inject(NgbActiveModal) + @Input() public service: ServiceTypeX public targetMode: any public targetRotationSpeed: any public targetRotationSpeedChanged: Subject = new Subject() - constructor( - public $activeModal: NgbActiveModal, - ) { + constructor() { this.targetRotationSpeedChanged .pipe( debounceTime(300), diff --git a/ui/src/app/core/accessories/types/fanv2/fanv2.component.html b/ui/src/app/core/accessories/types/fanv2/fanv2.component.html index 6cb230594..77109933d 100644 --- a/ui/src/app/core/accessories/types/fanv2/fanv2.component.html +++ b/ui/src/app/core/accessories/types/fanv2/fanv2.component.html @@ -7,16 +7,19 @@ tabindex="0" >
- Fan - Fan + @if (!service.values.Active) { + Fan + } @if (service.values.Active) { + Fan + }
{{ service.customName || service.serviceName }}
+ @if (!service.values.RotationSpeed || !service.values.Active) {
-
- {{ service.values.RotationSpeed }}{{ rotationSpeedUnit }} -
+ } @if (service.values.RotationSpeed && service.values.Active) { +
{{ service.values.RotationSpeed }}{{ rotationSpeedUnit }}
+ }
diff --git a/ui/src/app/core/accessories/types/fanv2/fanv2.component.ts b/ui/src/app/core/accessories/types/fanv2/fanv2.component.ts index dafd115ab..a98073e6c 100644 --- a/ui/src/app/core/accessories/types/fanv2/fanv2.component.ts +++ b/ui/src/app/core/accessories/types/fanv2/fanv2.component.ts @@ -1,21 +1,27 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' import { Fanv2ManageComponent } from '@/app/core/accessories/types/fanv2/fanv2.manage.component' -import { Component, Input, OnInit } from '@angular/core' +import { NgClass } from '@angular/common' +import { Component, inject, Input, OnInit } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-fanv2', templateUrl: './fanv2.component.html', styleUrls: ['./fanv2.component.scss'], + imports: [ + LongClickDirective, + NgClass, + TranslatePipe, + ], }) export class Fanv2Component implements OnInit { + private $modal = inject(NgbModal) + @Input() public service: ServiceTypeX public rotationSpeedUnit = '' - constructor( - private $modal: NgbModal, - ) {} - ngOnInit() { // Find the unit for the rotation speed const RotationSpeed = this.service.serviceCharacteristics.find(c => c.type === 'RotationSpeed') diff --git a/ui/src/app/core/accessories/types/fanv2/fanv2.manage.component.html b/ui/src/app/core/accessories/types/fanv2/fanv2.manage.component.html index 0ec467c08..70997046a 100644 --- a/ui/src/app/core/accessories/types/fanv2/fanv2.manage.component.html +++ b/ui/src/app/core/accessories/types/fanv2/fanv2.manage.component.html @@ -34,9 +34,14 @@
-
+ @if (targetRotationSpeed) { +
{{ 'accessories.control.rotation_speed' | translate }}
-

{{ targetRotationSpeed.value }}%

+

+ {{ targetRotationSpeed.value }}@if (targetRotationSpeed.unit === 'percentage') { + % + } +

{{ 'accessories.control.rotation_speed' | translate }}
> + } diff --git a/ui/src/app/core/accessories/types/fanv2/fanv2.manage.component.ts b/ui/src/app/core/accessories/types/fanv2/fanv2.manage.component.ts index 2d18d3481..2afcdd250 100644 --- a/ui/src/app/core/accessories/types/fanv2/fanv2.manage.component.ts +++ b/ui/src/app/core/accessories/types/fanv2/fanv2.manage.component.ts @@ -1,6 +1,10 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' -import { Component, Input, OnInit } from '@angular/core' +import { Component, inject, Input, OnInit } from '@angular/core' +import { FormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { NouisliderComponent } from 'ng2-nouislider' + import { Subject } from 'rxjs' import { debounceTime, distinctUntilChanged } from 'rxjs/operators' @@ -8,16 +12,21 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators' selector: 'app-fanv2-manage', templateUrl: './fanv2.manage.component.html', styleUrls: ['./fanv2.component.scss'], + imports: [ + FormsModule, + NouisliderComponent, + TranslatePipe, + ], }) export class Fanv2ManageComponent implements OnInit { + $activeModal = inject(NgbActiveModal) + @Input() public service: ServiceTypeX public targetMode: any public targetRotationSpeed: any public targetRotationSpeedChanged: Subject = new Subject() - constructor( - public $activeModal: NgbActiveModal, - ) { + constructor() { this.targetRotationSpeedChanged .pipe( debounceTime(300), diff --git a/ui/src/app/core/accessories/types/garagedooropener/garagedooropener.component.html b/ui/src/app/core/accessories/types/garagedooropener/garagedooropener.component.html index 5ae4da9a4..5ce6e3195 100644 --- a/ui/src/app/core/accessories/types/garagedooropener/garagedooropener.component.html +++ b/ui/src/app/core/accessories/types/garagedooropener/garagedooropener.component.html @@ -9,21 +9,18 @@
{{ service.customName || service.serviceName }}
+ @if (service.values.CurrentDoorState < 2 ) {
- -
- {{ 'accessories.control.opening' | translate }}... -
-
- {{ 'accessories.control.closing' | translate }}... -
-
- {{ 'accessories.control.stopped' | translate }} -
+ } @if (service.values.CurrentDoorState === 2) { +
{{ 'accessories.control.opening' | translate }}...
+ } @if (service.values.CurrentDoorState === 3) { +
{{ 'accessories.control.closing' | translate }}...
+ } @if (service.values.CurrentDoorState === 4) { +
{{ 'accessories.control.stopped' | translate }}
+ } diff --git a/ui/src/app/core/accessories/types/garagedooropener/garagedooropener.component.ts b/ui/src/app/core/accessories/types/garagedooropener/garagedooropener.component.ts index d4652bf09..f90c6c593 100644 --- a/ui/src/app/core/accessories/types/garagedooropener/garagedooropener.component.ts +++ b/ui/src/app/core/accessories/types/garagedooropener/garagedooropener.component.ts @@ -1,9 +1,19 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { NgClass } from '@angular/common' import { Component, Input } from '@angular/core' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-garagedooropener', templateUrl: './garagedooropener.component.html', + imports: [ + LongClickDirective, + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class GaragedooropenerComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/heatercooler/heatercooler.component.html b/ui/src/app/core/accessories/types/heatercooler/heatercooler.component.html index 379f02ae4..4ba400e55 100644 --- a/ui/src/app/core/accessories/types/heatercooler/heatercooler.component.html +++ b/ui/src/app/core/accessories/types/heatercooler/heatercooler.component.html @@ -17,30 +17,25 @@ }" >
{{ service.customName || service.serviceName }}
-
- {{ 'accessories.control.off' | translate }} -
-
- - {{ service.values.HeatingThresholdTemperature | convertTemp | number:'1.0-1' }}° - - - {{ service.values.CoolingThresholdTemperature | convertTemp | number:'1.0-1' }}° - - + @if (service.values.Active === 0) { +
{{ 'accessories.control.off' | translate }}
+ } @if (service.values.Active === 1 && service.getCharacteristic('CoolingThresholdTemperature') && + service.getCharacteristic('HeatingThresholdTemperature')) { +
+ @switch (service.values.TargetHeaterCoolerState) { @case (1) { + {{ service.values.HeatingThresholdTemperature | convertTemp | number:'1.0-1' }}° + } @case (2) { + {{ service.values.CoolingThresholdTemperature | convertTemp | number:'1.0-1' }}° + } @case (0) { + {{ service.values.HeatingThresholdTemperature | convertTemp | number:'1.0-1' }}°-{{ service.values.CoolingThresholdTemperature | convertTemp | number:'1.0-1' }}° + } }
-
- {{ 'accessories.control.on' | translate }} -
+ } @if (service.values.Active === 1 && (!service.getCharacteristic('CoolingThresholdTemperature') || + !service.getCharacteristic('HeatingThresholdTemperature'))) { +
{{ 'accessories.control.on' | translate }}
+ }
diff --git a/ui/src/app/core/accessories/types/heatercooler/heatercooler.component.ts b/ui/src/app/core/accessories/types/heatercooler/heatercooler.component.ts index 8483fd28a..80db0116f 100644 --- a/ui/src/app/core/accessories/types/heatercooler/heatercooler.component.ts +++ b/ui/src/app/core/accessories/types/heatercooler/heatercooler.component.ts @@ -1,21 +1,30 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' import { HeaterCoolerManageComponent } from '@/app/core/accessories/types/heatercooler/heatercooler.manage.component' -import { Component, Input } from '@angular/core' +import { ConvertTempPipe } from '@/app/core/pipes/convert-temp.pipe' +import { DecimalPipe, NgClass } from '@angular/common' +import { Component, inject, Input } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-heatercooler', templateUrl: './heatercooler.component.html', styleUrls: ['./heatercooler.component.scss'], + imports: [ + LongClickDirective, + NgClass, + DecimalPipe, + TranslatePipe, + ConvertTempPipe, + ], }) export class HeaterCoolerComponent { + private $modal = inject(NgbModal) + @Input() public service: ServiceTypeX model = 1 - constructor( - private $modal: NgbModal, - ) {} - onClick() { this.service.getCharacteristic('Active').setValue(this.service.values.Active ? 0 : 1) } diff --git a/ui/src/app/core/accessories/types/heatercooler/heatercooler.manage.component.html b/ui/src/app/core/accessories/types/heatercooler/heatercooler.manage.component.html index cfad71edd..2fd2b59a3 100644 --- a/ui/src/app/core/accessories/types/heatercooler/heatercooler.manage.component.html +++ b/ui/src/app/core/accessories/types/heatercooler/heatercooler.manage.component.html @@ -43,11 +43,12 @@ > -
+ } @case (2) { +

{{ targetCoolingTemp | convertTemp | number:'1.0-1' }}°

{{ 'accessories.control.target_temperature' | translate }} >
+ } }
+ } diff --git a/ui/src/app/core/accessories/types/heatercooler/heatercooler.manage.component.ts b/ui/src/app/core/accessories/types/heatercooler/heatercooler.manage.component.ts index 27edcbd62..eaedd443e 100644 --- a/ui/src/app/core/accessories/types/heatercooler/heatercooler.manage.component.ts +++ b/ui/src/app/core/accessories/types/heatercooler/heatercooler.manage.component.ts @@ -1,7 +1,12 @@ import type { CharacteristicType } from '@homebridge/hap-client' import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' -import { Component, Input, OnInit } from '@angular/core' +import { ConvertTempPipe } from '@/app/core/pipes/convert-temp.pipe' +import { DecimalPipe, NgClass } from '@angular/common' +import { Component, inject, Input, OnInit } from '@angular/core' +import { FormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { NouisliderComponent } from 'ng2-nouislider' import { Subject } from 'rxjs' import { debounceTime } from 'rxjs/operators' @@ -9,8 +14,18 @@ import { debounceTime } from 'rxjs/operators' selector: 'app-heatercooler-manage', templateUrl: './heatercooler.manage.component.html', styleUrls: ['./heatercooler.component.scss'], + imports: [ + NgClass, + FormsModule, + NouisliderComponent, + DecimalPipe, + TranslatePipe, + ConvertTempPipe, + ], }) export class HeaterCoolerManageComponent implements OnInit { + $activeModal = inject(NgbActiveModal) + @Input() public service: ServiceTypeX public targetMode: any public targetTemperatureChanged: Subject = new Subject() @@ -22,9 +37,7 @@ export class HeaterCoolerManageComponent implements OnInit { public targetHeatingTemp: number public autoTemp: [number, number] - constructor( - public $activeModal: NgbActiveModal, - ) { + constructor() { this.targetTemperatureChanged .pipe( debounceTime(300), diff --git a/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.component.html b/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.component.html index 8ac6c48f9..f634e1fb2 100644 --- a/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.component.html +++ b/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.component.html @@ -18,26 +18,25 @@
{{ service.customName || service.serviceName }}
-
- {{ 'accessories.control.off' | translate }} -
-
- {{ service.values.RelativeHumidityHumidifierThreshold }}% - {{ service.values.RelativeHumidityDehumidifierThreshold }}% - + @if (service.values.Active === 0) { +
{{ 'accessories.control.off' | translate }}
+ } @if (service.values.Active === 1 && service.getCharacteristic('RelativeHumidityDehumidifierThreshold') && + service.getCharacteristic('RelativeHumidityHumidifierThreshold')) { +
+ @switch (service.values.TargetHumidifierDehumidifierState) { @case (1) { + {{ service.values.RelativeHumidityHumidifierThreshold }}% + } @case (2) { + {{ service.values.RelativeHumidityDehumidifierThreshold }}% + } @case (0) { + {{ service.values.RelativeHumidityHumidifierThreshold }}%-{{ service.values.RelativeHumidityDehumidifierThreshold }}% + } }
-
- {{ 'accessories.control.on' | translate }} -
+ } @if (service.values.Active === 1 && (!service.getCharacteristic('RelativeHumidityDehumidifierThreshold') || + !service.getCharacteristic('RelativeHumidityHumidifierThreshold'))) { +
{{ 'accessories.control.on' | translate }}
+ }
diff --git a/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.component.ts b/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.component.ts index 3cd70f0f7..62e468f58 100644 --- a/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.component.ts +++ b/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.component.ts @@ -1,21 +1,27 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' import { HumidifierDehumidifierManageComponent } from '@/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.manage.component' -import { Component, Input } from '@angular/core' +import { NgClass } from '@angular/common' +import { Component, inject, Input } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-humidifierdehumidifier', templateUrl: './humidifierdehumidifier.component.html', styleUrls: ['./humidifierdehumidifier.component.scss'], + imports: [ + LongClickDirective, + NgClass, + TranslatePipe, + ], }) export class HumidifierDehumidifierComponent { + private $modal = inject(NgbModal) + @Input() public service: ServiceTypeX model = 1 - constructor( - private $modal: NgbModal, - ) {} - onClick() { this.service.getCharacteristic('Active').setValue(this.service.values.Active ? 0 : 1) } diff --git a/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.manage.component.html b/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.manage.component.html index 641dd0471..c5de61ad9 100644 --- a/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.manage.component.html +++ b/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.manage.component.html @@ -44,13 +44,12 @@ > -
+ } @case (1) { +

{{ targetHumidifierHumidity }}%

{{ 'accessories.control.target_humidity' | translate }} >
-
+ } @case (2) { +

{{ targetDehumidifierHumidity }}%

{{ 'accessories.control.target_humidity' | translate }} >
+ } }
+ } diff --git a/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.manage.component.ts b/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.manage.component.ts index f57d53c75..b2b50a116 100644 --- a/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.manage.component.ts +++ b/ui/src/app/core/accessories/types/humidifierdehumidifier/humidifierdehumidifier.manage.component.ts @@ -1,7 +1,11 @@ import type { CharacteristicType } from '@homebridge/hap-client' import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' -import { Component, Input, OnInit } from '@angular/core' +import { NgClass } from '@angular/common' +import { Component, inject, Input, OnInit } from '@angular/core' +import { FormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { NouisliderComponent } from 'ng2-nouislider' import { Subject } from 'rxjs' import { debounceTime } from 'rxjs/operators' @@ -9,8 +13,16 @@ import { debounceTime } from 'rxjs/operators' selector: 'app-humidifierdehumidifier-manage', templateUrl: './humidifierdehumidifier.manage.component.html', styleUrls: ['./humidifierdehumidifier.component.scss'], + imports: [ + NgClass, + FormsModule, + NouisliderComponent, + TranslatePipe, + ], }) export class HumidifierDehumidifierManageComponent implements OnInit { + $activeModal = inject(NgbActiveModal) + @Input() public service: ServiceTypeX public targetMode: any public targetHumidityChanged: Subject = new Subject() @@ -22,9 +34,7 @@ export class HumidifierDehumidifierManageComponent implements OnInit { public targetHumidifierHumidity: number public autoHumidity: [number, number] - constructor( - public $activeModal: NgbActiveModal, - ) { + constructor() { this.targetHumidityChanged .pipe( debounceTime(300), diff --git a/ui/src/app/core/accessories/types/humiditysensor/humiditysensor.component.ts b/ui/src/app/core/accessories/types/humiditysensor/humiditysensor.component.ts index 842404b93..a2dd03b7c 100644 --- a/ui/src/app/core/accessories/types/humiditysensor/humiditysensor.component.ts +++ b/ui/src/app/core/accessories/types/humiditysensor/humiditysensor.component.ts @@ -5,6 +5,7 @@ import { Component, Input } from '@angular/core' selector: 'app-humiditysensor', templateUrl: './humiditysensor.component.html', styleUrls: ['./humiditysensor.component.scss'], + standalone: true, }) export class HumiditysensorComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/irrigationsystem/irrigationsystem.component.html b/ui/src/app/core/accessories/types/irrigationsystem/irrigationsystem.component.html index 72f87e078..d34cc2567 100644 --- a/ui/src/app/core/accessories/types/irrigationsystem/irrigationsystem.component.html +++ b/ui/src/app/core/accessories/types/irrigationsystem/irrigationsystem.component.html @@ -12,11 +12,10 @@
{{ service.customName || service.values.ConfiguredName || service.serviceName }}
-
- {{ 'accessories.control.running' | translate }} -
-
- {{ 'accessories.control.off' | translate }} -
+ @if (service.values.InUse) { +
{{ 'accessories.control.running' | translate }}
+ } @if (!service.values.InUse) { +
{{ 'accessories.control.off' | translate }}
+ } diff --git a/ui/src/app/core/accessories/types/irrigationsystem/irrigationsystem.component.ts b/ui/src/app/core/accessories/types/irrigationsystem/irrigationsystem.component.ts index d40780b57..bfc828c0d 100644 --- a/ui/src/app/core/accessories/types/irrigationsystem/irrigationsystem.component.ts +++ b/ui/src/app/core/accessories/types/irrigationsystem/irrigationsystem.component.ts @@ -1,10 +1,20 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { NgClass } from '@angular/common' import { Component, Input } from '@angular/core' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-irrigationsystem', templateUrl: './irrigationsystem.component.html', styleUrls: ['./irrigationsystem.component.scss'], + imports: [ + LongClickDirective, + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class IrrigationSystemComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/leaksensor/leaksensor.component.html b/ui/src/app/core/accessories/types/leaksensor/leaksensor.component.html index 22854fdec..a5bca7525 100644 --- a/ui/src/app/core/accessories/types/leaksensor/leaksensor.component.html +++ b/ui/src/app/core/accessories/types/leaksensor/leaksensor.component.html @@ -8,11 +8,10 @@
{{ service.customName || service.serviceName }}
-
- {{ 'accessories.control.detected' | translate }} -
-
- {{ 'accessories.control.not_detected' | translate }} -
+ @if (service.values.LeakDetected) { +
{{ 'accessories.control.detected' | translate }}
+ } @if (!service.values.LeakDetected) { +
{{ 'accessories.control.not_detected' | translate }}
+ }
diff --git a/ui/src/app/core/accessories/types/leaksensor/leaksensor.component.ts b/ui/src/app/core/accessories/types/leaksensor/leaksensor.component.ts index b8ce31d83..1d5a15a52 100644 --- a/ui/src/app/core/accessories/types/leaksensor/leaksensor.component.ts +++ b/ui/src/app/core/accessories/types/leaksensor/leaksensor.component.ts @@ -1,10 +1,18 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { NgClass } from '@angular/common' import { Component, Input } from '@angular/core' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' @Component({ selector: 'app-leaksensor', templateUrl: './leaksensor.component.html', styleUrls: ['./leaksensor.component.scss'], + imports: [ + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class LeaksensorComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/lightbulb/lightbulb.component.html b/ui/src/app/core/accessories/types/lightbulb/lightbulb.component.html index 86111ed30..198f9c091 100644 --- a/ui/src/app/core/accessories/types/lightbulb/lightbulb.component.html +++ b/ui/src/app/core/accessories/types/lightbulb/lightbulb.component.html @@ -9,11 +9,13 @@
{{ service.customName || service.serviceName }}
+ @if (!service.values.Brightness) {
-
{{ service.values.Brightness }}%
+ } @if (service.values.Brightness) { +
{{ service.values.Brightness }}%
+ }
diff --git a/ui/src/app/core/accessories/types/lightbulb/lightbulb.component.ts b/ui/src/app/core/accessories/types/lightbulb/lightbulb.component.ts index 152c86437..f37b37491 100644 --- a/ui/src/app/core/accessories/types/lightbulb/lightbulb.component.ts +++ b/ui/src/app/core/accessories/types/lightbulb/lightbulb.component.ts @@ -1,19 +1,27 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' import { LightbulbManageComponent } from '@/app/core/accessories/types//lightbulb/lightbulb.manage.component' -import { Component, Input } from '@angular/core' +import { NgClass } from '@angular/common' +import { Component, inject, Input } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-lightbulb', templateUrl: './lightbulb.component.html', styleUrls: ['./lightbulb.component.scss'], + imports: [ + LongClickDirective, + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class LightbulbComponent { - @Input() public service: ServiceTypeX + private $modal = inject(NgbModal) - constructor( - private $modal: NgbModal, - ) {} + @Input() public service: ServiceTypeX onClick() { this.service.getCharacteristic('On').setValue(!this.service.values.On) diff --git a/ui/src/app/core/accessories/types/lightbulb/lightbulb.manage.component.html b/ui/src/app/core/accessories/types/lightbulb/lightbulb.manage.component.html index 48e28ed67..d9da9454d 100644 --- a/ui/src/app/core/accessories/types/lightbulb/lightbulb.manage.component.html +++ b/ui/src/app/core/accessories/types/lightbulb/lightbulb.manage.component.html @@ -34,7 +34,8 @@
-
+ @if (targetBrightness) { +
{{ 'accessories.control.brightness' | translate }}

{{ targetBrightness.value }}%

{{ 'accessories.control.brightness' | translate }}
> + } diff --git a/ui/src/app/core/accessories/types/lightbulb/lightbulb.manage.component.ts b/ui/src/app/core/accessories/types/lightbulb/lightbulb.manage.component.ts index 7c07b26a5..b0d8f2e56 100644 --- a/ui/src/app/core/accessories/types/lightbulb/lightbulb.manage.component.ts +++ b/ui/src/app/core/accessories/types/lightbulb/lightbulb.manage.component.ts @@ -1,6 +1,10 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' -import { Component, Input, OnInit } from '@angular/core' +import { Component, inject, Input, OnInit } from '@angular/core' +import { FormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { NouisliderComponent } from 'ng2-nouislider' + import { Subject } from 'rxjs' import { debounceTime, distinctUntilChanged } from 'rxjs/operators' @@ -8,16 +12,21 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators' selector: 'app-lightbulb-manage', templateUrl: './lightbulb.manage.component.html', styleUrls: ['./lightbulb.component.scss'], + imports: [ + FormsModule, + NouisliderComponent, + TranslatePipe, + ], }) export class LightbulbManageComponent implements OnInit { + $activeModal = inject(NgbActiveModal) + @Input() public service: ServiceTypeX public targetMode: any public targetBrightness: any public targetBrightnessChanged: Subject = new Subject() - constructor( - public $activeModal: NgbActiveModal, - ) { + constructor() { this.targetBrightnessChanged .pipe( debounceTime(300), diff --git a/ui/src/app/core/accessories/types/lightsensor/lightsensor.component.html b/ui/src/app/core/accessories/types/lightsensor/lightsensor.component.html index e0b111b2f..7bb67e856 100644 --- a/ui/src/app/core/accessories/types/lightsensor/lightsensor.component.html +++ b/ui/src/app/core/accessories/types/lightsensor/lightsensor.component.html @@ -2,11 +2,10 @@
{{ service.customName || service.serviceName }}
-
- {{ service.values.CurrentAmbientLightLevel | number: '0.1-1' }} lux -
-
- {{ service.values.CurrentAmbientLightLevel | number: '1.0-0' }} lux -
+ @if (service.values.CurrentAmbientLightLevel < 1) { +
{{ service.values.CurrentAmbientLightLevel | number: '0.1-1' }} lux
+ } @if (service.values.CurrentAmbientLightLevel >= 1) { +
{{ service.values.CurrentAmbientLightLevel | number: '1.0-0' }} lux
+ }
diff --git a/ui/src/app/core/accessories/types/lightsensor/lightsensor.component.ts b/ui/src/app/core/accessories/types/lightsensor/lightsensor.component.ts index f4cd83950..9e003595d 100644 --- a/ui/src/app/core/accessories/types/lightsensor/lightsensor.component.ts +++ b/ui/src/app/core/accessories/types/lightsensor/lightsensor.component.ts @@ -1,9 +1,15 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { DecimalPipe } from '@angular/common' import { Component, Input } from '@angular/core' +import { InlineSVGModule } from 'ng-inline-svg-2' @Component({ selector: 'app-lightsensor', templateUrl: './lightsensor.component.html', + imports: [ + InlineSVGModule, + DecimalPipe, + ], }) export class LightsensorComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/lockmechanism/lockmechanism.component.html b/ui/src/app/core/accessories/types/lockmechanism/lockmechanism.component.html index d2cb81a6f..bea28fe66 100644 --- a/ui/src/app/core/accessories/types/lockmechanism/lockmechanism.component.html +++ b/ui/src/app/core/accessories/types/lockmechanism/lockmechanism.component.html @@ -6,39 +6,26 @@ tabindex="0" >
-
-
-
+ @if (service.values.LockCurrentState === 0) { +
+ } @if (service.values.LockCurrentState === 1) { +
+ } @if (service.values.LockCurrentState > 1) { +
+ }
{{ service.customName || service.serviceName }}
+ @if (service.values.LockCurrentState < 2) {
- -
- {{ 'accessories.control.jammed' | translate }} -
-
- {{ 'accessories.control.unknown' | translate }} -
+ } @if (service.values.LockCurrentState === 2) { +
{{ 'accessories.control.jammed' | translate }}
+ } @if (service.values.LockCurrentState === 3) { +
{{ 'accessories.control.unknown' | translate }}
+ }
diff --git a/ui/src/app/core/accessories/types/lockmechanism/lockmechanism.component.ts b/ui/src/app/core/accessories/types/lockmechanism/lockmechanism.component.ts index 8a5463c39..a9c7e58bf 100644 --- a/ui/src/app/core/accessories/types/lockmechanism/lockmechanism.component.ts +++ b/ui/src/app/core/accessories/types/lockmechanism/lockmechanism.component.ts @@ -1,9 +1,19 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { NgClass } from '@angular/common' import { Component, Input } from '@angular/core' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-lockmechanism', templateUrl: './lockmechanism.component.html', + imports: [ + LongClickDirective, + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class LockmechanismComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/motionsensor/motionsensor.component.html b/ui/src/app/core/accessories/types/motionsensor/motionsensor.component.html index 39cbcc4bb..5168daf2e 100644 --- a/ui/src/app/core/accessories/types/motionsensor/motionsensor.component.html +++ b/ui/src/app/core/accessories/types/motionsensor/motionsensor.component.html @@ -12,11 +12,10 @@ class="accessory-svg" >
{{ service.customName || service.serviceName }}
-
- {{ 'accessories.control.detected' | translate }} -
-
- {{ 'accessories.control.not_detected' | translate }} -
+ @if (service.values.MotionDetected) { +
{{ 'accessories.control.detected' | translate }}
+ } @if (!service.values.MotionDetected) { +
{{ 'accessories.control.not_detected' | translate }}
+ } diff --git a/ui/src/app/core/accessories/types/motionsensor/motionsensor.component.ts b/ui/src/app/core/accessories/types/motionsensor/motionsensor.component.ts index 987c00938..db83c7747 100644 --- a/ui/src/app/core/accessories/types/motionsensor/motionsensor.component.ts +++ b/ui/src/app/core/accessories/types/motionsensor/motionsensor.component.ts @@ -1,10 +1,18 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { NgClass } from '@angular/common' import { Component, Input } from '@angular/core' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' @Component({ selector: 'app-motionsensor', templateUrl: './motionsensor.component.html', styleUrls: ['./motionsensor.component.scss'], + imports: [ + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class MotionsensorComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/occupancysensor/occupancysensor.component.html b/ui/src/app/core/accessories/types/occupancysensor/occupancysensor.component.html index 75e9cf3de..7a12c1568 100644 --- a/ui/src/app/core/accessories/types/occupancysensor/occupancysensor.component.html +++ b/ui/src/app/core/accessories/types/occupancysensor/occupancysensor.component.html @@ -12,11 +12,10 @@ class="accessory-svg" >
{{ service.customName || service.serviceName }}
-
- {{ 'accessories.control.detected' | translate }} -
-
- {{ 'accessories.control.not_detected' | translate }} -
+ @if (service.values.OccupancyDetected) { +
{{ 'accessories.control.detected' | translate }}
+ } @if (!service.values.OccupancyDetected) { +
{{ 'accessories.control.not_detected' | translate }}
+ } diff --git a/ui/src/app/core/accessories/types/occupancysensor/occupancysensor.component.ts b/ui/src/app/core/accessories/types/occupancysensor/occupancysensor.component.ts index 9aa9092ae..a93f35eb0 100644 --- a/ui/src/app/core/accessories/types/occupancysensor/occupancysensor.component.ts +++ b/ui/src/app/core/accessories/types/occupancysensor/occupancysensor.component.ts @@ -1,10 +1,18 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { NgClass } from '@angular/common' import { Component, Input } from '@angular/core' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' @Component({ selector: 'app-occupancysensor', templateUrl: './occupancysensor.component.html', styleUrls: ['./occupancysensor.component.scss'], + imports: [ + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class OccupancysensorComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/outlet/outlet.component.ts b/ui/src/app/core/accessories/types/outlet/outlet.component.ts index 3d0f963e6..9147ffeb2 100644 --- a/ui/src/app/core/accessories/types/outlet/outlet.component.ts +++ b/ui/src/app/core/accessories/types/outlet/outlet.component.ts @@ -1,9 +1,19 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { NgClass } from '@angular/common' import { Component, Input } from '@angular/core' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-outlet', templateUrl: './outlet.component.html', + imports: [ + LongClickDirective, + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class OutletComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/securitysystem/securitysystem.component.html b/ui/src/app/core/accessories/types/securitysystem/securitysystem.component.html index 52fdebd8d..2c21fb7f1 100644 --- a/ui/src/app/core/accessories/types/securitysystem/securitysystem.component.html +++ b/ui/src/app/core/accessories/types/securitysystem/securitysystem.component.html @@ -6,27 +6,32 @@ tabindex="0" >
+ @if (service.values.SecuritySystemCurrentState !== 3) {
+ } @if (service.values.SecuritySystemCurrentState === 3) {
+ }
{{ service.customName || service.serviceName }}
- -
{{ 'accessories.control.home' | translate }}
-
{{ 'accessories.control.away' | translate }}
-
{{ 'accessories.control.night' | translate }}
-
{{ 'accessories.control.off' | translate }}
-
{{ 'accessories.control.triggered' | translate }}
-
+ @switch (service.values.SecuritySystemCurrentState) { @case (0) { +
{{ 'accessories.control.home' | translate }}
+ } @case (1) { +
{{ 'accessories.control.away' | translate }}
+ } @case (2) { +
{{ 'accessories.control.night' | translate }}
+ } @case (3) { +
{{ 'accessories.control.off' | translate }}
+ } @case (4) { +
{{ 'accessories.control.triggered' | translate }}
+ } }
diff --git a/ui/src/app/core/accessories/types/securitysystem/securitysystem.component.ts b/ui/src/app/core/accessories/types/securitysystem/securitysystem.component.ts index fdd989257..542825441 100644 --- a/ui/src/app/core/accessories/types/securitysystem/securitysystem.component.ts +++ b/ui/src/app/core/accessories/types/securitysystem/securitysystem.component.ts @@ -1,19 +1,27 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' import { SecuritysystemManageComponent } from '@/app/core/accessories/types/securitysystem/securitysystem.manage.component' -import { Component, Input } from '@angular/core' +import { NgClass } from '@angular/common' +import { Component, inject, Input } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-securitysystem', templateUrl: './securitysystem.component.html', styleUrls: ['./securitysystem.component.scss'], + imports: [ + LongClickDirective, + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class SecuritysystemComponent { - @Input() public service: ServiceTypeX + private $modal = inject(NgbModal) - constructor( - private $modal: NgbModal, - ) {} + @Input() public service: ServiceTypeX onClick() { const ref = this.$modal.open(SecuritysystemManageComponent, { diff --git a/ui/src/app/core/accessories/types/securitysystem/securitysystem.manage.component.ts b/ui/src/app/core/accessories/types/securitysystem/securitysystem.manage.component.ts index 745ad07e0..c8e8328a6 100644 --- a/ui/src/app/core/accessories/types/securitysystem/securitysystem.manage.component.ts +++ b/ui/src/app/core/accessories/types/securitysystem/securitysystem.manage.component.ts @@ -1,20 +1,21 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' -import { Component, Input, OnInit } from '@angular/core' +import { Component, inject, Input, OnInit } from '@angular/core' +import { FormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' @Component({ selector: 'app-securitysystem.manage', templateUrl: './securitysystem.manage.component.html', styleUrls: ['./securitysystem.component.scss'], + imports: [FormsModule, TranslatePipe], }) export class SecuritysystemManageComponent implements OnInit { + $activeModal = inject(NgbActiveModal) + @Input() public service: ServiceTypeX public targetMode: any - constructor( - public $activeModal: NgbActiveModal, - ) {} - ngOnInit() { this.targetMode = this.service.values.SecuritySystemTargetState } diff --git a/ui/src/app/core/accessories/types/smokesensor/smokesensor.component.html b/ui/src/app/core/accessories/types/smokesensor/smokesensor.component.html index 53b21405f..13bd18a18 100644 --- a/ui/src/app/core/accessories/types/smokesensor/smokesensor.component.html +++ b/ui/src/app/core/accessories/types/smokesensor/smokesensor.component.html @@ -12,11 +12,10 @@ class="accessory-svg" >
{{ service.customName || service.serviceName }}
-
- {{ 'accessories.control.detected' | translate }} -
-
- {{ 'accessories.control.not_detected' | translate }} -
+ @if (service.values.SmokeDetected) { +
{{ 'accessories.control.detected' | translate }}
+ } @if (!service.values.SmokeDetected) { +
{{ 'accessories.control.not_detected' | translate }}
+ } diff --git a/ui/src/app/core/accessories/types/smokesensor/smokesensor.component.ts b/ui/src/app/core/accessories/types/smokesensor/smokesensor.component.ts index aebb32bef..36cbc046c 100644 --- a/ui/src/app/core/accessories/types/smokesensor/smokesensor.component.ts +++ b/ui/src/app/core/accessories/types/smokesensor/smokesensor.component.ts @@ -1,10 +1,18 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { NgClass } from '@angular/common' import { Component, Input } from '@angular/core' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' @Component({ selector: 'app-smokesensor', templateUrl: './smokesensor.component.html', styleUrls: ['./smokesensor.component.scss'], + imports: [ + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class SmokesensorComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/speaker/speaker.component.html b/ui/src/app/core/accessories/types/speaker/speaker.component.html index 9b9b54a45..0f772e614 100644 --- a/ui/src/app/core/accessories/types/speaker/speaker.component.html +++ b/ui/src/app/core/accessories/types/speaker/speaker.component.html @@ -9,16 +9,12 @@
{{ service.customName || service.serviceName }}
-
-
- {{ service.values.Volume }}% -
-
- {{ 'accessories.control.not_mute' | translate }} -
+ @if (service.values.Mute) { +
+ } @if (service.values.Volume !== undefined && !service.values.Mute) { +
{{ service.values.Volume }}%
+ } @if (service.values.Volume === undefined && !service.values.Mute) { +
{{ 'accessories.control.not_mute' | translate }}
+ }
diff --git a/ui/src/app/core/accessories/types/speaker/speaker.component.ts b/ui/src/app/core/accessories/types/speaker/speaker.component.ts index d86c6bf13..8c7b12073 100644 --- a/ui/src/app/core/accessories/types/speaker/speaker.component.ts +++ b/ui/src/app/core/accessories/types/speaker/speaker.component.ts @@ -1,19 +1,27 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' import { SpeakerManageComponent } from '@/app/core/accessories/types/speaker/speaker.manage.component' -import { Component, Input } from '@angular/core' +import { NgClass } from '@angular/common' +import { Component, inject, Input } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-speaker', templateUrl: './speaker.component.html', styleUrls: ['./speaker.component.scss'], + imports: [ + LongClickDirective, + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class SpeakerComponent { - @Input() public service: ServiceTypeX + private $modal = inject(NgbModal) - constructor( - private $modal: NgbModal, - ) {} + @Input() public service: ServiceTypeX onClick() { this.service.getCharacteristic('Mute').setValue(!this.service.values.Mute) diff --git a/ui/src/app/core/accessories/types/speaker/speaker.manage.component.html b/ui/src/app/core/accessories/types/speaker/speaker.manage.component.html index 27ae0aa3a..14d5cb1cf 100644 --- a/ui/src/app/core/accessories/types/speaker/speaker.manage.component.html +++ b/ui/src/app/core/accessories/types/speaker/speaker.manage.component.html @@ -33,7 +33,8 @@
-
+ @if (targetVolume) { +
{{ 'accessories.control.speaker_volume' | translate }}

{{ targetVolume.value }}%

{{ 'accessories.control.speaker_volume' | translate }}
> + } diff --git a/ui/src/app/core/accessories/types/speaker/speaker.manage.component.ts b/ui/src/app/core/accessories/types/speaker/speaker.manage.component.ts index f94a85a02..447b63842 100644 --- a/ui/src/app/core/accessories/types/speaker/speaker.manage.component.ts +++ b/ui/src/app/core/accessories/types/speaker/speaker.manage.component.ts @@ -1,6 +1,10 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' -import { Component, Input, OnInit } from '@angular/core' +import { Component, inject, Input, OnInit } from '@angular/core' +import { FormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { NouisliderComponent } from 'ng2-nouislider' + import { Subject } from 'rxjs' import { debounceTime, distinctUntilChanged } from 'rxjs/operators' @@ -8,16 +12,21 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators' selector: 'app-speaker-manage', templateUrl: './speaker.manage.component.html', styleUrls: ['./speaker.component.scss'], + imports: [ + FormsModule, + NouisliderComponent, + TranslatePipe, + ], }) export class SpeakerManageComponent implements OnInit { + $activeModal = inject(NgbActiveModal) + @Input() public service: ServiceTypeX public targetMode: any public targetVolume: any public targetVolumeChanged: Subject = new Subject() - constructor( - public $activeModal: NgbActiveModal, - ) { + constructor() { this.targetVolumeChanged .pipe( debounceTime(300), diff --git a/ui/src/app/core/accessories/types/statelessprogrammableswitch/statelessprogrammableswitch.component.ts b/ui/src/app/core/accessories/types/statelessprogrammableswitch/statelessprogrammableswitch.component.ts index 308aa8d4a..05e16d385 100644 --- a/ui/src/app/core/accessories/types/statelessprogrammableswitch/statelessprogrammableswitch.component.ts +++ b/ui/src/app/core/accessories/types/statelessprogrammableswitch/statelessprogrammableswitch.component.ts @@ -1,9 +1,11 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' import { Component, Input } from '@angular/core' +import { InlineSVGModule } from 'ng-inline-svg-2' @Component({ selector: 'app-statelessprogrammableswitch', templateUrl: './statelessprogrammableswitch.component.html', + imports: [InlineSVGModule], }) export class StatelessprogrammableswitchComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/switch/switch.component.ts b/ui/src/app/core/accessories/types/switch/switch.component.ts index c549acdf4..902944b0c 100644 --- a/ui/src/app/core/accessories/types/switch/switch.component.ts +++ b/ui/src/app/core/accessories/types/switch/switch.component.ts @@ -1,9 +1,19 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { NgClass } from '@angular/common' import { Component, Input } from '@angular/core' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-switch', templateUrl: './switch.component.html', + imports: [ + LongClickDirective, + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class SwitchComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/television/television.component.html b/ui/src/app/core/accessories/types/television/television.component.html index 76aab0d82..97102dd25 100644 --- a/ui/src/app/core/accessories/types/television/television.component.html +++ b/ui/src/app/core/accessories/types/television/television.component.html @@ -10,11 +10,10 @@
{{ service.customName || service.values.ConfiguredName || service.serviceName }}
-
- {{ 'accessories.control.off' | translate }} -
-
- {{ channelList[service.values.ActiveIdentifier] }} -
+ @if (!service.values.Active) { +
{{ 'accessories.control.off' | translate }}
+ } @if (service.values.Active) { +
{{ channelList[service.values.ActiveIdentifier] }}
+ } diff --git a/ui/src/app/core/accessories/types/television/television.component.ts b/ui/src/app/core/accessories/types/television/television.component.ts index bbeb11e05..7e58ec924 100644 --- a/ui/src/app/core/accessories/types/television/television.component.ts +++ b/ui/src/app/core/accessories/types/television/television.component.ts @@ -1,9 +1,19 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { NgClass } from '@angular/common' import { Component, Input, OnInit } from '@angular/core' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-television', templateUrl: './television.component.html', + imports: [ + LongClickDirective, + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class TelevisionComponent implements OnInit { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/temperaturesensor/temperaturesensor.component.ts b/ui/src/app/core/accessories/types/temperaturesensor/temperaturesensor.component.ts index 1bf86fde3..2af99e513 100644 --- a/ui/src/app/core/accessories/types/temperaturesensor/temperaturesensor.component.ts +++ b/ui/src/app/core/accessories/types/temperaturesensor/temperaturesensor.component.ts @@ -1,10 +1,13 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' +import { ConvertTempPipe } from '@/app/core/pipes/convert-temp.pipe' +import { DecimalPipe } from '@angular/common' import { Component, Input } from '@angular/core' @Component({ selector: 'app-temperaturesensor', templateUrl: './temperaturesensor.component.html', styleUrls: ['./temperaturesensor.component.scss'], + imports: [DecimalPipe, ConvertTempPipe], }) export class TemperaturesensorComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/thermostat/thermostat.component.html b/ui/src/app/core/accessories/types/thermostat/thermostat.component.html index bb172946d..c8e459239 100644 --- a/ui/src/app/core/accessories/types/thermostat/thermostat.component.html +++ b/ui/src/app/core/accessories/types/thermostat/thermostat.component.html @@ -17,11 +17,12 @@ }" >
{{ service.customName || service.serviceName }}
-
- {{ 'accessories.control.off' | translate }} -
-
+ @if (service.values.TargetHeatingCoolingState === 0) { +
{{ 'accessories.control.off' | translate }}
+ } @if (service.values.TargetHeatingCoolingState) { +
{{ service.values.TargetTemperature | convertTemp | number:'1.0-1' }}°
+ }
diff --git a/ui/src/app/core/accessories/types/thermostat/thermostat.component.ts b/ui/src/app/core/accessories/types/thermostat/thermostat.component.ts index 9ee71ba28..0fcb3464b 100644 --- a/ui/src/app/core/accessories/types/thermostat/thermostat.component.ts +++ b/ui/src/app/core/accessories/types/thermostat/thermostat.component.ts @@ -1,21 +1,30 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' import { ThermostatManageComponent } from '@/app/core/accessories/types/thermostat/thermostat.manage.component' -import { Component, Input } from '@angular/core' +import { ConvertTempPipe } from '@/app/core/pipes/convert-temp.pipe' +import { DecimalPipe, NgClass } from '@angular/common' +import { Component, inject, Input } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-thermostat', templateUrl: './thermostat.component.html', styleUrls: ['./thermostat.component.scss'], + imports: [ + LongClickDirective, + NgClass, + DecimalPipe, + TranslatePipe, + ConvertTempPipe, + ], }) export class ThermostatComponent { + private $modal = inject(NgbModal) + @Input() public service: ServiceTypeX model = 1 - constructor( - private $modal: NgbModal, - ) {} - onClick() { const ref = this.$modal.open(ThermostatManageComponent, { size: 'sm', diff --git a/ui/src/app/core/accessories/types/thermostat/thermostat.manage.component.ts b/ui/src/app/core/accessories/types/thermostat/thermostat.manage.component.ts index 4a4de5abd..3b03d84c1 100644 --- a/ui/src/app/core/accessories/types/thermostat/thermostat.manage.component.ts +++ b/ui/src/app/core/accessories/types/thermostat/thermostat.manage.component.ts @@ -1,6 +1,11 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' -import { Component, Input, OnInit } from '@angular/core' +import { ConvertTempPipe } from '@/app/core/pipes/convert-temp.pipe' +import { DecimalPipe, NgClass } from '@angular/common' +import { Component, inject, Input, OnInit } from '@angular/core' +import { FormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { NouisliderComponent } from 'ng2-nouislider' import { Subject } from 'rxjs' import { debounceTime, distinctUntilChanged } from 'rxjs/operators' @@ -8,16 +13,24 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators' selector: 'app-thermostat-manage', templateUrl: './thermostat.manage.component.html', styleUrls: ['./thermostat.component.scss'], + imports: [ + NgClass, + FormsModule, + NouisliderComponent, + DecimalPipe, + TranslatePipe, + ConvertTempPipe, + ], }) export class ThermostatManageComponent implements OnInit { + $activeModal = inject(NgbActiveModal) + @Input() public service: ServiceTypeX public targetMode: any public targetTemperature: any public targetTemperatureChanged: Subject = new Subject() - constructor( - public $activeModal: NgbActiveModal, - ) { + constructor() { this.targetTemperatureChanged .pipe( debounceTime(300), diff --git a/ui/src/app/core/accessories/types/unknown/unknown.component.ts b/ui/src/app/core/accessories/types/unknown/unknown.component.ts index 72e85eb3b..6f76d1e57 100644 --- a/ui/src/app/core/accessories/types/unknown/unknown.component.ts +++ b/ui/src/app/core/accessories/types/unknown/unknown.component.ts @@ -1,9 +1,11 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' import { Component, Input } from '@angular/core' +import { InlineSVGModule } from 'ng-inline-svg-2' @Component({ selector: 'app-unknown', templateUrl: './unknown.component.html', + imports: [InlineSVGModule], }) export class UnknownComponent { @Input() public service: ServiceTypeX diff --git a/ui/src/app/core/accessories/types/valve/valve.component.html b/ui/src/app/core/accessories/types/valve/valve.component.html index 9f4a68558..162a4a6db 100644 --- a/ui/src/app/core/accessories/types/valve/valve.component.html +++ b/ui/src/app/core/accessories/types/valve/valve.component.html @@ -7,41 +7,24 @@ tabindex="0" >
-
-
-
-
+ @if (service.values.ValveType === 0) { +
+ } @if (service.values.ValveType === 1) { +
+ } @if (service.values.ValveType === 2) { +
+ } @if (service.values.ValveType === 3) { +
+ }
{{ service.customName || service.values.ConfiguredName || service.serviceName }}
-
- {{ remainingDuration }} -
-
- {{ 'accessories.control.running' | translate }} -
-
- {{ 'accessories.control.off' | translate }} -
+ @if (service.values.Active && remainingDuration) { +
{{ remainingDuration }}
+ } @if (service.values.Active && !remainingDuration) { +
{{ 'accessories.control.running' | translate }}
+ } @if (!service.values.Active) { +
{{ 'accessories.control.off' | translate }}
+ }
diff --git a/ui/src/app/core/accessories/types/valve/valve.component.ts b/ui/src/app/core/accessories/types/valve/valve.component.ts index 7650b07ce..b255513d7 100644 --- a/ui/src/app/core/accessories/types/valve/valve.component.ts +++ b/ui/src/app/core/accessories/types/valve/valve.component.ts @@ -1,16 +1,28 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' import { ValveManageComponent } from '@/app/core/accessories/types/valve/valve.manage.component' -import { Component, Input, OnDestroy, OnInit } from '@angular/core' +import { NgClass } from '@angular/common' +import { Component, inject, Input, OnDestroy, OnInit } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' import { interval, Subscription } from 'rxjs' import { filter } from 'rxjs/operators' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-valve', templateUrl: './valve.component.html', styleUrls: ['./valve.component.scss'], + imports: [ + LongClickDirective, + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class ValveComponent implements OnInit, OnDestroy { + private $modal = inject(NgbModal) + @Input() public service: ServiceTypeX public secondsActive = 0 @@ -18,10 +30,6 @@ export class ValveComponent implements OnInit, OnDestroy { private remainingDurationInterval = interval(1000).pipe(filter(() => this.isActive())) private remainingDurationSubscription: Subscription - constructor( - private $modal: NgbModal, - ) {} - ngOnInit() { // set up the RemainingDuration countdown handlers, if the valve has the RemainingDuration Characteristic if (this.service.getCharacteristic('RemainingDuration')) { diff --git a/ui/src/app/core/accessories/types/valve/valve.manage.component.html b/ui/src/app/core/accessories/types/valve/valve.manage.component.html index 680f30d27..91722697e 100644 --- a/ui/src/app/core/accessories/types/valve/valve.manage.component.html +++ b/ui/src/app/core/accessories/types/valve/valve.manage.component.html @@ -18,7 +18,9 @@
diff --git a/ui/src/app/core/accessories/types/valve/valve.manage.component.ts b/ui/src/app/core/accessories/types/valve/valve.manage.component.ts index 5cff3bb61..b53876770 100644 --- a/ui/src/app/core/accessories/types/valve/valve.manage.component.ts +++ b/ui/src/app/core/accessories/types/valve/valve.manage.component.ts @@ -1,23 +1,28 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' -import { Component, Input, OnInit } from '@angular/core' +import { Component, inject, Input, OnInit } from '@angular/core' +import { FormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' + @Component({ selector: 'app-valve-manage', templateUrl: './valve.manage.component.html', styleUrls: ['./valve.component.scss'], + imports: [ + FormsModule, + TranslatePipe, + ], }) export class ValveManageComponent implements OnInit { + $activeModal = inject(NgbActiveModal) + @Input() public service: ServiceTypeX public availableSetDurations = [] public targetSetDuration: number private durationSeconds = [300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600] - constructor( - public $activeModal: NgbActiveModal, - ) {} - ngOnInit() { this.targetSetDuration = this.service.values.SetDuration diff --git a/ui/src/app/core/accessories/types/window/window.component.html b/ui/src/app/core/accessories/types/window/window.component.html index 741bff947..5e9587188 100644 --- a/ui/src/app/core/accessories/types/window/window.component.html +++ b/ui/src/app/core/accessories/types/window/window.component.html @@ -7,31 +7,26 @@ tabindex="0" >
-
-
+ @if (!service.values.TargetPosition) { +
+ } @if (service.values.TargetPosition) { +
+ }
{{ service.customName || service.serviceName }}
-
- {{ 'accessories.control.closed' | translate }} - - {{ service.values.CurrentPosition }}% - - {{ 'accessories.control.open' | translate }} -
-
- {{ 'accessories.control.opening' | translate }}... -
-
- {{ 'accessories.control.closing' | translate }}... + @if (service.values.PositionState === 2) { +
+ @if (service.values.CurrentPosition === 0) { + {{ 'accessories.control.closed' | translate }} + } @if (service.values.CurrentPosition > 0 && service.values.CurrentPosition < 100) { + {{ service.values.CurrentPosition }}% + } @if (service.values.CurrentPosition === 100) { + {{ 'accessories.control.open' | translate }} + }
+ } @if (service.values.PositionState === 1) { +
{{ 'accessories.control.opening' | translate }}...
+ } @if (service.values.PositionState === 0) { +
{{ 'accessories.control.closing' | translate }}...
+ }
diff --git a/ui/src/app/core/accessories/types/window/window.component.ts b/ui/src/app/core/accessories/types/window/window.component.ts index bbcd0b981..d063de8a3 100644 --- a/ui/src/app/core/accessories/types/window/window.component.ts +++ b/ui/src/app/core/accessories/types/window/window.component.ts @@ -1,19 +1,27 @@ import { ServiceTypeX } from '@/app/core/accessories/accessories.interfaces' import { WindowManageComponent } from '@/app/core/accessories/types/window/window.manage.component' -import { Component, Input } from '@angular/core' +import { NgClass } from '@angular/common' +import { Component, inject, Input } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' +import { InlineSVGModule } from 'ng-inline-svg-2' +import { LongClickDirective } from '../../../directives/longclick.directive' @Component({ selector: 'app-window', templateUrl: './window.component.html', styleUrls: ['./window.component.scss'], + imports: [ + LongClickDirective, + NgClass, + InlineSVGModule, + TranslatePipe, + ], }) export class WindowComponent { - @Input() public service: ServiceTypeX + private $modal = inject(NgbModal) - constructor( - private $modal: NgbModal, - ) {} + @Input() public service: ServiceTypeX onClick() { if (this.service.values.TargetPosition) { diff --git a/ui/src/app/core/accessories/types/window/window.manage.component.html b/ui/src/app/core/accessories/types/window/window.manage.component.html index 3d30f946c..3708e4c98 100644 --- a/ui/src/app/core/accessories/types/window/window.manage.component.html +++ b/ui/src/app/core/accessories/types/window/window.manage.component.html @@ -14,19 +14,21 @@ > {{ 'form.button_close' | translate }} + } diff --git a/ui/src/app/core/components/information/information.component.ts b/ui/src/app/core/components/information/information.component.ts index fbca31fa0..9bdb82359 100644 --- a/ui/src/app/core/components/information/information.component.ts +++ b/ui/src/app/core/components/information/information.component.ts @@ -1,18 +1,19 @@ -import { Component, Input } from '@angular/core' +import { Component, inject, Input } from '@angular/core' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe } from '@ngx-translate/core' + @Component({ templateUrl: './information.component.html', + imports: [TranslatePipe], }) export class InformationComponent { + $activeModal = inject(NgbActiveModal) + @Input() title: string @Input() subtitle?: string @Input() message: string @Input() ctaButtonLabel?: string @Input() ctaButtonLink?: string @Input() faIconClass: string - - constructor( - public $activeModal: NgbActiveModal, - ) {} } diff --git a/ui/src/app/core/components/qrcode/qrcode.component.ts b/ui/src/app/core/components/qrcode/qrcode.component.ts index f72d68132..1bd77deb5 100644 --- a/ui/src/app/core/components/qrcode/qrcode.component.ts +++ b/ui/src/app/core/components/qrcode/qrcode.component.ts @@ -1,14 +1,15 @@ -import { Component, ElementRef, Input, OnChanges, ViewChild } from '@angular/core' +import { Component, ElementRef, Input, OnChanges, viewChild } from '@angular/core' import { toString } from 'qrcode' @Component({ selector: 'app-qrcode', templateUrl: './qrcode.component.html', + standalone: true, }) export class QrcodeComponent implements OnChanges { @Input() data: string - @ViewChild('qrcode', { static: true }) qrcodeElement: ElementRef + readonly qrcodeElement = viewChild('qrcode') ngOnChanges(): void { this.renderQrCode() @@ -16,7 +17,8 @@ export class QrcodeComponent implements OnChanges { async renderQrCode() { if (this.data) { - this.qrcodeElement.nativeElement.innerHTML = await toString(this.data, { + const qrcodeElement = this.qrcodeElement() + qrcodeElement.nativeElement.innerHTML = await toString(this.data, { type: 'svg', margin: 0, color: { @@ -24,7 +26,7 @@ export class QrcodeComponent implements OnChanges { dark: document.body.classList.contains('dark-mode') ? '#FFF' : '#000', }, }) - const svgElement = this.qrcodeElement.nativeElement.querySelector('svg') as SVGElement + const svgElement = qrcodeElement.nativeElement.querySelector('svg') as SVGElement const svgPathElement = svgElement.querySelector('path') as SVGPathElement svgPathElement.classList.add('qr-code-theme-color') } diff --git a/ui/src/app/core/components/restart-child-bridges/restart-child-bridges.component.html b/ui/src/app/core/components/restart-child-bridges/restart-child-bridges.component.html index d79d350ed..b071592af 100644 --- a/ui/src/app/core/components/restart-child-bridges/restart-child-bridges.component.html +++ b/ui/src/app/core/components/restart-child-bridges/restart-child-bridges.component.html @@ -16,7 +16,9 @@ + } + } diff --git a/ui/src/app/core/manage-plugins/manual-config/manual-config.component.ts b/ui/src/app/core/manage-plugins/manual-config/manual-config.component.ts index 9002eb8ae..cf69b5f45 100644 --- a/ui/src/app/core/manage-plugins/manual-config/manual-config.component.ts +++ b/ui/src/app/core/manage-plugins/manual-config/manual-config.component.ts @@ -4,19 +4,46 @@ import { RestartHomebridgeComponent } from '@/app/core/components/restart-homebr import { ManagePluginsService } from '@/app/core/manage-plugins/manage-plugins.service' import { MobileDetectService } from '@/app/core/mobile-detect.service' import { SettingsService } from '@/app/core/settings.service' -import { Component, Input, OnInit } from '@angular/core' +import { Component, inject, Input, OnInit } from '@angular/core' +import { FormsModule } from '@angular/forms' import { Router } from '@angular/router' -import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap' -import { TranslateService } from '@ngx-translate/core' +import { NgbAccordionBody, NgbAccordionButton, NgbAccordionCollapse, NgbAccordionDirective, NgbAccordionHeader, NgbAccordionItem, NgbAccordionToggle, NgbActiveModal, NgbCollapse, NgbModal, NgbTooltip } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe, TranslateService } from '@ngx-translate/core' import json5 from 'json5' +import { EditorComponent } from 'ngx-monaco-editor-v2' + import { ToastrService } from 'ngx-toastr' import { firstValueFrom } from 'rxjs' @Component({ templateUrl: './manual-config.component.html', styleUrls: ['./manual-config.component.scss'], + imports: [ + NgbAccordionDirective, + NgbAccordionItem, + NgbAccordionHeader, + NgbTooltip, + NgbAccordionToggle, + NgbAccordionButton, + NgbCollapse, + NgbAccordionCollapse, + NgbAccordionBody, + EditorComponent, + FormsModule, + TranslatePipe, + ], }) export class ManualConfigComponent implements OnInit { + $activeModal = inject(NgbActiveModal) + private $api = inject(ApiService) + private $md = inject(MobileDetectService) + private $modal = inject(NgbModal) + private $plugin = inject(ManagePluginsService) + private $router = inject(Router) + private $settings = inject(SettingsService) + private $toastr = inject(ToastrService) + private $translate = inject(TranslateService) + @Input() plugin: any public pluginAlias: string @@ -36,18 +63,6 @@ export class ManualConfigComponent implements OnInit { public monacoEditor: any public editorOptions: any - constructor( - public $activeModal: NgbActiveModal, - private $api: ApiService, - private $md: MobileDetectService, - private $modal: NgbModal, - private $plugin: ManagePluginsService, - private $router: Router, - private $settings: SettingsService, - private $toastr: ToastrService, - private $translate: TranslateService, - ) {} - get arrayKey() { return this.pluginType === 'accessory' ? 'accessories' : 'platforms' } diff --git a/ui/src/app/core/manage-plugins/plugin-bridge/plugin-bridge.component.html b/ui/src/app/core/manage-plugins/plugin-bridge/plugin-bridge.component.html index 53d154b86..1b96cdca4 100644 --- a/ui/src/app/core/manage-plugins/plugin-bridge/plugin-bridge.component.html +++ b/ui/src/app/core/manage-plugins/plugin-bridge/plugin-bridge.component.html @@ -3,17 +3,18 @@ + @if (!justInstalled) { + } -
+ @if (showConfigFields[i]) { +
{{ 'child_bridge.config.description' | translate }}
{{ 'child_bridge.config.name' | translate }} @@ -126,10 +135,8 @@
/>
-
+ @if (canShowBridgeDebug) { +
{{ 'child_bridge.config.debug' | translate }} -D />
+ }
DEBUG
@@ -169,16 +177,22 @@
+ } + } + } + } + } + } - - {{ 'child_bridge.must_configure_plugin' | translate }} - -
+ } @if (!configBlocks.length && canConfigure) { + {{ 'child_bridge.must_configure_plugin' | translate }} + } @if (!canConfigure) { +
{{ 'plugins.settings.message_manual_config_required' | translate }} {{ 'plugins.settings.message_consult_documentation' | translate }} @@ -189,49 +203,51 @@
+ } diff --git a/ui/src/app/core/manage-plugins/plugin-bridge/plugin-bridge.component.ts b/ui/src/app/core/manage-plugins/plugin-bridge/plugin-bridge.component.ts index 590543edd..e981b3552 100644 --- a/ui/src/app/core/manage-plugins/plugin-bridge/plugin-bridge.component.ts +++ b/ui/src/app/core/manage-plugins/plugin-bridge/plugin-bridge.component.ts @@ -3,18 +3,37 @@ import { RestartHomebridgeComponent } from '@/app/core/components/restart-homebr import { ManagePluginsService } from '@/app/core/manage-plugins/manage-plugins.service' import { PluginSchema } from '@/app/core/manage-plugins/plugin-config/plugin-config.component' import { SettingsService } from '@/app/core/settings.service' -import { Component, Input, OnInit } from '@angular/core' +import { NgClass } from '@angular/common' +import { Component, inject, Input, OnInit } from '@angular/core' +import { FormsModule } from '@angular/forms' import { Router } from '@angular/router' -import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap' -import { TranslateService } from '@ngx-translate/core' +import { NgbActiveModal, NgbAlert, NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe, TranslateService } from '@ngx-translate/core' import { ToastrService } from 'ngx-toastr' import { firstValueFrom } from 'rxjs' +import { QrcodeComponent } from '../../components/qrcode/qrcode.component' @Component({ templateUrl: './plugin-bridge.component.html', styleUrls: ['./plugin-bridge.component.scss'], + imports: [ + FormsModule, + NgbAlert, + QrcodeComponent, + NgClass, + TranslatePipe, + ], }) export class PluginBridgeComponent implements OnInit { + $activeModal = inject(NgbActiveModal) + private $api = inject(ApiService) + private $modal = inject(NgbModal) + private $plugins = inject(ManagePluginsService) + private $router = inject(Router) + $settings = inject(SettingsService) + private $toastr = inject(ToastrService) + private $translate = inject(TranslateService) + @Input() plugin: any @Input() schema: PluginSchema @Input() justInstalled = false @@ -28,17 +47,6 @@ export class PluginBridgeComponent implements OnInit { public saveInProgress = false public canShowBridgeDebug = false - constructor( - public $activeModal: NgbActiveModal, - private $api: ApiService, - private $modal: NgbModal, - private $plugins: ManagePluginsService, - private $router: Router, - public $settings: SettingsService, - private $toastr: ToastrService, - private $translate: TranslateService, - ) {} - ngOnInit(): void { this.loadPluginConfig() this.canShowBridgeDebug = this.$settings.env.homebridgeVersion.startsWith('2') diff --git a/ui/src/app/core/manage-plugins/plugin-compatibility/plugin-compatibility.component.html b/ui/src/app/core/manage-plugins/plugin-compatibility/plugin-compatibility.component.html index accf66ff2..10d42b23d 100644 --- a/ui/src/app/core/manage-plugins/plugin-compatibility/plugin-compatibility.component.html +++ b/ui/src/app/core/manage-plugins/plugin-compatibility/plugin-compatibility.component.html @@ -13,90 +13,91 @@ diff --git a/ui/src/app/modules/settings/unpair-all-bridges/unpair-all-bridges.component.ts b/ui/src/app/modules/settings/unpair-all-bridges/unpair-all-bridges.component.ts index 2356ddd55..818e7be0b 100644 --- a/ui/src/app/modules/settings/unpair-all-bridges/unpair-all-bridges.component.ts +++ b/ui/src/app/modules/settings/unpair-all-bridges/unpair-all-bridges.component.ts @@ -1,23 +1,25 @@ import { ApiService } from '@/app/core/api.service' -import { Component } from '@angular/core' +import { Component, inject } from '@angular/core' import { Router } from '@angular/router' -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { TranslateService } from '@ngx-translate/core' +import { NgbActiveModal, NgbAlert } from '@ng-bootstrap/ng-bootstrap' +import { TranslatePipe, TranslateService } from '@ngx-translate/core' import { ToastrService } from 'ngx-toastr' @Component({ templateUrl: './unpair-all-bridges.component.html', + imports: [ + NgbAlert, + TranslatePipe, + ], }) export class UnpairAllBridgesComponent { - public clicked: boolean + $activeModal = inject(NgbActiveModal) + private $api = inject(ApiService) + private $route = inject(Router) + private $toastr = inject(ToastrService) + private $translate = inject(TranslateService) - constructor( - public $activeModal: NgbActiveModal, - private $api: ApiService, - private $route: Router, - private $toastr: ToastrService, - private $translate: TranslateService, - ) {} + public clicked: boolean onResetHomebridgeAccessoryClick() { this.clicked = true diff --git a/ui/src/app/modules/settings/unpair-single-bridge/unpair-single-bridge.component.html b/ui/src/app/modules/settings/unpair-single-bridge/unpair-single-bridge.component.html index 389812156..afbded8af 100644 --- a/ui/src/app/modules/settings/unpair-single-bridge/unpair-single-bridge.component.html +++ b/ui/src/app/modules/settings/unpair-single-bridge/unpair-single-bridge.component.html @@ -13,11 +13,13 @@