From 358a2ce0c89e4956e03d170ad1e5894616b43214 Mon Sep 17 00:00:00 2001 From: Lurkars Date: Mon, 30 Sep 2024 20:30:25 +0200 Subject: [PATCH] add unlisted treauses (for FC), improve FC data, small fixes and improvements, update dependencies --- .../deck/ancient-artillery-scenario-98.json | 133 +++++ data/fc/deck/cultist-scenario-99.json | 253 ++++++++++ data/fc/label/en.json | 6 +- data/fc/scenarios/097.json | 17 + data/fc/scenarios/098.json | 46 +- data/fc/scenarios/099.json | 35 ++ data/fc/sections/001.json | 25 + data/fc/sections/008.json | 23 + data/fc/sections/023.json | 2 +- data/fc/sections/024.json | 25 + data/fc/sections/034.json | 25 + data/fc/sections/055.json | 2 + data/fc/sections/059.json | 2 + data/fc/sections/082.json | 2 + data/fc/treasures.json | 3 +- data/fh/sections/111-2.json | 2 +- data/fh/sections/129-2.json | 2 +- package-lock.json | 471 +++++++++--------- package.json | 32 +- src/app/game/businesslogic/LootManager.ts | 10 +- src/app/ui/figures/standee/standee.ts | 1 + .../ui/footer/scenario-rules/scenario-rule.ts | 12 +- .../scenario/summary/scenario-summary.html | 7 +- .../footer/scenario/treasures/label/label.ts | 7 +- .../scenario/treasures/treasures-dialog.html | 24 +- .../scenario/treasures/treasures-dialog.ts | 7 +- src/app/ui/helper/EntityAnimation.ts | 3 + 27 files changed, 908 insertions(+), 269 deletions(-) create mode 100644 data/fc/deck/ancient-artillery-scenario-98.json create mode 100644 data/fc/deck/cultist-scenario-99.json diff --git a/data/fc/deck/ancient-artillery-scenario-98.json b/data/fc/deck/ancient-artillery-scenario-98.json new file mode 100644 index 000000000..e7441232d --- /dev/null +++ b/data/fc/deck/ancient-artillery-scenario-98.json @@ -0,0 +1,133 @@ +{ + "name": "ancient-artillery-scenario-98", + "edition": "gh", + "abilities": [ + { + "cardId": 700, + "initiative": 46, + "actions": [ + { + "type": "custom", + "value": "%data.scenario.rules.fc.98.2%", + "small": true + } + ] + }, + { + "cardId": 701, + "initiative": 71, + "shuffle": true, + "actions": [ + { + "type": "custom", + "value": "%data.scenario.rules.fc.98.2%", + "small": true + } + ] + }, + { + "cardId": 702, + "initiative": 71, + "shuffle": true, + "actions": [ + { + "type": "custom", + "value": "%data.scenario.rules.fc.98.2%", + "small": true + } + ] + }, + { + "cardId": 703, + "initiative": 37, + "actions": [ + { + "type": "push", + "value": 1, + "subActions": [ + { + "type": "specialTarget", + "value": "enemiesAdjacent", + "small": true + } + ] + }, + { + "type": "custom", + "value": "%data.scenario.rules.fc.98.2%", + "small": true + } + ] + }, + { + "cardId": 704, + "initiative": 37, + "actions": [ + { + "type": "push", + "value": 1, + "subActions": [ + { + "type": "specialTarget", + "value": "enemiesAdjacent", + "small": true + } + ] + }, + { + "type": "custom", + "value": "%data.scenario.rules.fc.98.2%", + "small": true + } + ] + }, + { + "cardId": 705, + "initiative": 95, + "actions": [ + { + "type": "custom", + "value": "%data.scenario.rules.fc.98.2%", + "small": true + } + ] + }, + { + "cardId": 706, + "initiative": 17, + "actions": [ + { + "type": "push", + "value": 2, + "subActions": [ + { + "type": "specialTarget", + "value": "enemiesAdjacent", + "small": true + } + ] + }, + { + "type": "shield", + "value": 2 + }, + { + "type": "custom", + "value": "%data.scenario.rules.fc.98.2%", + "small": true + } + ] + }, + { + "cardId": 707, + "initiative": 46, + "actions": [ + { + "type": "custom", + "value": "%data.scenario.rules.fc.98.2%", + "small": true + } + ] + } + ] +} \ No newline at end of file diff --git a/data/fc/deck/cultist-scenario-99.json b/data/fc/deck/cultist-scenario-99.json new file mode 100644 index 000000000..2fd94e1ce --- /dev/null +++ b/data/fc/deck/cultist-scenario-99.json @@ -0,0 +1,253 @@ +{ + "name": "cultist-scenario-99", + "edition": "gh", + "abilities": [ + { + "cardId": 604, + "initiative": 10, + "actions": [ + { + "type": "move", + "value": 1, + "valueType": "minus" + }, + { + "type": "attack", + "value": 1, + "valueType": "minus" + }, + { + "type": "custom", + "value": "%game.custom.ondeath%", + "subActions": [ + { + "type": "attack", + "value": 2, + "valueType": "plus", + "small": true, + "subActions": [ + { + "type": "area", + "value": "(1,0,target)|(2,0,target)|(0,1,target)|(1,1,active)|(2,1,target)|(1,2,target)|(2,2,target)", + "small": true + } + ] + } + ] + } + ] + }, + { + "cardId": 605, + "initiative": 10, + "actions": [ + { + "type": "move", + "value": 1, + "valueType": "minus" + }, + { + "type": "attack", + "value": 1, + "valueType": "minus" + }, + { + "type": "custom", + "value": "%game.custom.ondeath%", + "subActions": [ + { + "type": "attack", + "value": 2, + "valueType": "plus", + "small": true, + "subActions": [ + { + "type": "area", + "value": "(1,0,target)|(2,0,target)|(0,1,target)|(1,1,active)|(2,1,target)|(1,2,target)|(2,2,target)", + "small": true + } + ] + } + ] + } + ] + }, + { + "cardId": 606, + "initiative": 27, + "actions": [ + { + "type": "move", + "value": 0, + "valueType": "plus" + }, + { + "type": "attack", + "value": 0, + "valueType": "plus" + } + ] + }, + { + "cardId": 607, + "initiative": 27, + "actions": [ + { + "type": "move", + "value": 0, + "valueType": "plus" + }, + { + "type": "attack", + "value": 0, + "valueType": "plus" + } + ] + }, + { + "cardId": 608, + "initiative": 39, + "actions": [ + { + "type": "move", + "value": 1, + "valueType": "minus" + }, + { + "type": "attack", + "value": 0, + "valueType": "plus" + }, + { + "type": "heal", + "value": 1, + "subActions": [ + { + "type": "specialTarget", + "value": "self", + "small": true + } + ] + } + ] + }, + { + "cardId": 609, + "initiative": 63, + "shuffle": true, + "actions": [ + { + "type": "monsterType", + "value": "normal", + "subActions": [ + { + "type": "summon", + "value": "monsterStandee", + "valueObject": [ + { + "monster": { + "name": "black-imp", + "type": "normal" + } + } + ] + } + ] + }, + { + "type": "monsterType", + "value": "elite", + "subActions": [ + { + "type": "summon", + "value": "monsterStandee", + "valueObject": [ + { + "monster": { + "name": "black-imp", + "type": "elite" + } + } + ] + } + ] + }, + { + "type": "sufferDamage", + "value": 2, + "small": true + } + ] + }, + { + "cardId": 610, + "initiative": 63, + "shuffle": true, + "actions": [ + { + "type": "monsterType", + "value": "normal", + "subActions": [ + { + "type": "summon", + "value": "monsterStandee", + "valueObject": [ + { + "monster": { + "name": "black-imp", + "type": "normal" + } + } + ] + } + ] + }, + { + "type": "monsterType", + "value": "elite", + "subActions": [ + { + "type": "summon", + "value": "monsterStandee", + "valueObject": [ + { + "monster": { + "name": "black-imp", + "type": "elite" + } + } + ] + } + ] + }, + { + "type": "sufferDamage", + "value": 2, + "small": true + } + ] + }, + { + "cardId": 611, + "initiative": 31, + "actions": [ + { + "type": "move", + "value": 1, + "valueType": "minus" + }, + { + "type": "heal", + "value": 3, + "subActions": [ + { + "type": "range", + "value": 3, + "small": true + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/data/fc/label/en.json b/data/fc/label/en.json index 0311afe8c..78ff60d35 100644 --- a/data/fc/label/en.json +++ b/data/fc/label/en.json @@ -37,7 +37,11 @@ "rules": { "fc": { "98": { - "1": "Place 1 damage token to both ships %game.mapMarker.a% and %game.mapMarker.b%." + "1": "Whenever the Ancient Artillery would perform an Attack action, place 1 damage token next to ship %game.mapMarker.a% instead. If that ship has 2 or more damage tokens next to it, place 1 damage token next to ship %game.mapMarker.b% instead.", + "2": "Place 1 damage token next to ship %game.mapMarker.a%/%game.mapMarker.b%." + }, + "99": { + "1": "Whenever a Cultist would summon a Living Bones, it summons one Black Imp instead. Normal Cultists summon normal Black Imps, and elite Cultists summon elite Black Imps." }, "101": { "1": "if adjacent Spitting Drake is alive and without %game.condition.stun%." diff --git a/data/fc/scenarios/097.json b/data/fc/scenarios/097.json index 8a719d755..d5057ae6e 100644 --- a/data/fc/scenarios/097.json +++ b/data/fc/scenarios/097.json @@ -21,6 +21,23 @@ "living-bones", "living-corpse" ], + "rules": [ + { + "round": "R == 1", + "start": true, + "figures": [ + { + "identifier": { + "type": "character", + "name": ".*" + }, + "type": "amAdd", + "value": "curse:2", + "scenarioEffect": true + } + ] + } + ], "rooms": [ { "roomNumber": 1, diff --git a/data/fc/scenarios/098.json b/data/fc/scenarios/098.json index 31716f5fa..f04355c4b 100644 --- a/data/fc/scenarios/098.json +++ b/data/fc/scenarios/098.json @@ -16,11 +16,51 @@ "bandit-guard", "spitting-drake" ], + "objectives": [ + { + "name": "Ship", + "health": 12, + "marker": "a" + }, + { + "name": "Ship", + "health": 12, + "marker": "b" + } + ], "rules": [ { "round": "true", "start": true, - "note": "%data.scenario.rules.fc.98.1%" + "figures": [ + { + "identifier": { + "type": "objective", + "edition": "objective", + "name": "Ship" + }, + "type": "damage", + "value": "1" + } + ] + }, + { + "round": "true", + "always": true, + "alwaysApply": true, + "statEffects": [ + { + "identifier": { + "type": "monster", + "edition": "gh", + "name": "ancient-artillery" + }, + "statEffect": { + "deck": "ancient-artillery-scenario-98" + }, + "note": "%data.scenario.rules.fc.98.1%" + } + ] } ], "rooms": [ @@ -81,6 +121,10 @@ "player3": "normal", "player4": "normal" } + ], + "objectives": [ + 1, + 2 ] } ] diff --git a/data/fc/scenarios/099.json b/data/fc/scenarios/099.json index c3cf616d6..3a57a1e8e 100644 --- a/data/fc/scenarios/099.json +++ b/data/fc/scenarios/099.json @@ -25,6 +25,41 @@ "marker": "a" } ], + "rules": [ + { + "round": "R == 1", + "start": true, + "figures": [ + { + "identifier": { + "type": "character", + "name": ".*" + }, + "type": "gainCondition", + "value": "muddle", + "scenarioEffect": true + } + ] + }, + { + "round": "true", + "always": true, + "alwaysApply": true, + "statEffects": [ + { + "identifier": { + "type": "monster", + "edition": "gh", + "name": "cultist" + }, + "statEffect": { + "deck": "cultist-scenario-99" + }, + "note": "%data.scenario.rules.fc.99.1%" + } + ] + } + ], "rooms": [ { "roomNumber": 1, diff --git a/data/fc/sections/001.json b/data/fc/sections/001.json index 52a532cc1..d1081ff0e 100644 --- a/data/fc/sections/001.json +++ b/data/fc/sections/001.json @@ -20,6 +20,31 @@ ] } ], + "rules": [ + { + "round": "true", + "always": true, + "figures": [ + { + "identifier": { + "type": "objective", + "edition": "objective", + "name": "Altar of Wildfire", + "marker": "d" + }, + "type": "dead" + } + ], + "disableRules": [ + { + "edition": "fc", + "scenario": "96", + "index": 1, + "section": false + } + ] + } + ], "rooms": [ { "roomNumber": 4, diff --git a/data/fc/sections/008.json b/data/fc/sections/008.json index df48ef968..93123c41a 100644 --- a/data/fc/sections/008.json +++ b/data/fc/sections/008.json @@ -20,6 +20,29 @@ } } ] + }, + { + "round": "true", + "always": true, + "figures": [ + { + "identifier": { + "type": "objective", + "edition": "escort", + "name": "Civilian" + }, + "type": "killed" + } + ], + "spawns": [ + { + "monster": { + "name": "valrath-savage", + "type": "elite" + } + } + ], + "alwaysApply": true } ] } \ No newline at end of file diff --git a/data/fc/sections/023.json b/data/fc/sections/023.json index e6485b040..e9faa47c6 100644 --- a/data/fc/sections/023.json +++ b/data/fc/sections/023.json @@ -15,7 +15,7 @@ "initial": true, "marker": "e", "treasures": [ - null + -1 ], "monster": [ { diff --git a/data/fc/sections/024.json b/data/fc/sections/024.json index 60a234689..5a0a1f1c3 100644 --- a/data/fc/sections/024.json +++ b/data/fc/sections/024.json @@ -14,6 +14,31 @@ "marker": "e" } ], + "rules": [ + { + "round": "true", + "always": true, + "figures": [ + { + "identifier": { + "type": "objective", + "edition": "objective", + "name": "Altar of Rot", + "marker": "e" + }, + "type": "dead" + } + ], + "disableRules": [ + { + "edition": "fc", + "scenario": "96", + "index": 2, + "section": false + } + ] + } + ], "rooms": [ { "roomNumber": 3, diff --git a/data/fc/sections/034.json b/data/fc/sections/034.json index ce9879840..e2614b29b 100644 --- a/data/fc/sections/034.json +++ b/data/fc/sections/034.json @@ -27,6 +27,31 @@ ] } ], + "rules": [ + { + "round": "true", + "always": true, + "figures": [ + { + "identifier": { + "type": "objective", + "edition": "objective", + "name": "Altar of Blizzards", + "marker": "f" + }, + "type": "dead" + } + ], + "disableRules": [ + { + "edition": "fc", + "scenario": "96", + "index": 0, + "section": false + } + ] + } + ], "rooms": [ { "roomNumber": 2, diff --git a/data/fc/sections/055.json b/data/fc/sections/055.json index dfb71c385..a85cf39c8 100644 --- a/data/fc/sections/055.json +++ b/data/fc/sections/055.json @@ -1,8 +1,10 @@ { "index": "55", + "name": "Record of Journey saved", "edition": "fc", "parent": "98", "conclusion": true, + "named": true, "unlocks": [ "103" ], diff --git a/data/fc/sections/059.json b/data/fc/sections/059.json index 5da1af12e..eafc9c931 100644 --- a/data/fc/sections/059.json +++ b/data/fc/sections/059.json @@ -1,8 +1,10 @@ { "index": "59", + "name": "Record of Accounts saved", "edition": "fc", "parent": "98", "conclusion": true, + "named": true, "unlocks": [ "102" ], diff --git a/data/fc/sections/082.json b/data/fc/sections/082.json index 6817e828b..a3347fce3 100644 --- a/data/fc/sections/082.json +++ b/data/fc/sections/082.json @@ -1,8 +1,10 @@ { "index": "82", + "name": "Both Orchid records saved", "edition": "fc", "parent": "98", "conclusion": true, + "named": true, "unlocks": [ "102", "103" diff --git a/data/fc/treasures.json b/data/fc/treasures.json index c1924d5c7..f94a90cde 100644 --- a/data/fc/treasures.json +++ b/data/fc/treasures.json @@ -19,5 +19,6 @@ "item:159", "battleGoal:1|event:rift-20", "gold:25|partyAchievement:A Strongbox|event:city-85", - "custom:%data.treasures.fc.96%" + "custom:%data.treasures.fc.96%", + "item:152" ] \ No newline at end of file diff --git a/data/fh/sections/111-2.json b/data/fh/sections/111-2.json index 14d6d8973..ff499b691 100644 --- a/data/fh/sections/111-2.json +++ b/data/fh/sections/111-2.json @@ -89,7 +89,7 @@ "ref": "10-B", "initial": true, "treasures": [ - "22" + 22 ], "monster": [ { diff --git a/data/fh/sections/129-2.json b/data/fh/sections/129-2.json index 406c8bda2..a92b6bc1f 100644 --- a/data/fh/sections/129-2.json +++ b/data/fh/sections/129-2.json @@ -17,7 +17,7 @@ "ref": "14-A", "initial": true, "treasures": [ - "23" + 23 ], "monster": [ { diff --git a/package-lock.json b/package-lock.json index ad519a960..02491002f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,24 +1,24 @@ { "name": "gloomhavensecretariat", - "version": "0.100.3", + "version": "0.100.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "gloomhavensecretariat", - "version": "0.100.3", + "version": "0.100.4", "license": "AGPL3", "dependencies": { - "@angular/animations": "^18.2.5", - "@angular/cdk": "^18.2.4", - "@angular/common": "^18.2.5", - "@angular/compiler": "^18.2.5", - "@angular/core": "^18.2.5", - "@angular/forms": "^18.2.5", - "@angular/platform-browser": "^18.2.5", - "@angular/platform-browser-dynamic": "^18.2.5", - "@angular/router": "^18.2.5", - "@angular/service-worker": "^18.2.5", + "@angular/animations": "^18.2.6", + "@angular/cdk": "^18.2.6", + "@angular/common": "^18.2.6", + "@angular/compiler": "^18.2.6", + "@angular/core": "^18.2.6", + "@angular/forms": "^18.2.6", + "@angular/platform-browser": "^18.2.6", + "@angular/platform-browser-dynamic": "^18.2.6", + "@angular/router": "^18.2.6", + "@angular/service-worker": "^18.2.6", "autocompleter": "^9.3.2", "leaflet": "^1.9.4", "mermaid": "^10.9.1", @@ -29,16 +29,16 @@ "zone.js": "~0.14.10" }, "devDependencies": { - "@angular-devkit/build-angular": "^18.2.5", - "@angular/cli": "^18.2.5", - "@angular/compiler-cli": "^18.2.5", + "@angular-devkit/build-angular": "^18.2.6", + "@angular/cli": "^18.2.6", + "@angular/compiler-cli": "^18.2.6", "@types/d3": "^7.4.3", "@types/dom-screen-wake-lock": "1.0.3", "@types/dompurify": "^3.0.5", "@types/jasmine": "~5.1.4", "@types/leaflet": "^1.9.12", "@types/uuid": "^10.0.0", - "electron": "^32.1.1", + "electron": "^32.1.2", "electron-builder": "^25.0.5", "http-server": "^14.1.1", "husky": "^9.1.6", @@ -48,7 +48,7 @@ "karma-coverage": "~2.2.1", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", - "nodemon": "^3.1.6", + "nodemon": "^3.1.7", "typescript": "~5.5.4" }, "funding": { @@ -71,13 +71,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1802.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.5.tgz", - "integrity": "sha512-c7sVoW85Yqj7IYvNKxtNSGS5I7gWpORorg/xxLZX3OkHWXDrwYbb5LN/2p5/Aytxyb0aXl4o5fFOu6CUwcaLUw==", + "version": "0.1802.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.6.tgz", + "integrity": "sha512-oF7cPFdTLxeuvXkK/opSdIxZ1E4LrBbmuytQ/nCoAGOaKBWdqvwagRZ6jVhaI0Gwu48rkcV7Zhesg/ESNnROdw==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.5", + "@angular-devkit/core": "18.2.6", "rxjs": "7.8.1" }, "engines": { @@ -87,17 +87,17 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.5.tgz", - "integrity": "sha512-dIvb0AHoRIMM6tLuG4t6lDDslSAYP77wqytodsN317UzFOuuCPernXbO8NJs+QHxj09nPsem1T5vnvpO2E/PVQ==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.6.tgz", + "integrity": "sha512-u12cJZttgs5j7gICHWSmcaTCu0EFXEzKqI8nkYCwq2MtuJlAXiMQSXYuEP9OU3Go4vMAPtQh2kShyOWCX5b4EQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.5", - "@angular-devkit/build-webpack": "0.1802.5", - "@angular-devkit/core": "18.2.5", - "@angular/build": "18.2.5", + "@angular-devkit/architect": "0.1802.6", + "@angular-devkit/build-webpack": "0.1802.6", + "@angular-devkit/core": "18.2.6", + "@angular/build": "18.2.6", "@babel/core": "7.25.2", "@babel/generator": "7.25.0", "@babel/helper-annotate-as-pure": "7.24.7", @@ -108,7 +108,7 @@ "@babel/preset-env": "7.25.3", "@babel/runtime": "7.25.0", "@discoveryjs/json-ext": "0.6.1", - "@ngtools/webpack": "18.2.5", + "@ngtools/webpack": "18.2.6", "@vitejs/plugin-basic-ssl": "1.1.0", "ansi-colors": "4.1.3", "autoprefixer": "10.4.20", @@ -223,13 +223,13 @@ "license": "0BSD" }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1802.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.5.tgz", - "integrity": "sha512-6qkcrWBdkxojCVHGWcdJaz4G+7QTjFvmc+3g8xvLc9sYvJq1I059gfXhDnC0FxiA0MT4cY/26ECYWUHTD5CJLQ==", + "version": "0.1802.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.6.tgz", + "integrity": "sha512-JMLcXFaitJplwZMKkqhbYirINCRD6eOPZuIGaIOVynXYGWgvJkLT9t5C2wm9HqSLtp1K7NcYG2Y7PtTVR4krnQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1802.5", + "@angular-devkit/architect": "0.1802.6", "rxjs": "7.8.1" }, "engines": { @@ -243,9 +243,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.5.tgz", - "integrity": "sha512-r9TumPlJ8PvA2+yz4sp+bUHgtznaVKzhvXTN5qL1k4YP8LJ7iZWMR2FOP+HjukHZOTsenzmV9pszbogabqwoZQ==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.6.tgz", + "integrity": "sha512-la4CFvs5PcRWSkQ/H7TB5cPZirFVA9GoWk5LzIk8si6VjWBJRm8b3keKJoC9LlNeABRUIR5z0ocYkyQQUhdMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -271,13 +271,13 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.5.tgz", - "integrity": "sha512-NUmz2UQ1Xl4cf4j1AgkwIfsCjBzAPgfeC3IBrD29hSOBE1Y3j6auqjBkvw50v6mbSPxESND995Xy13HpK1Xflw==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.6.tgz", + "integrity": "sha512-uIttrQ2cQ2PWAFFVPeCoNR8xvs7tPJ2i8gzqsIwYdge107xDC6u9CqfgmBqPDSFpWj+IiC2Jwcm8Z4HYKU4+7A==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.5", + "@angular-devkit/core": "18.2.6", "jsonc-parser": "3.3.1", "magic-string": "0.30.11", "ora": "5.4.1", @@ -290,9 +290,9 @@ } }, "node_modules/@angular/animations": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.5.tgz", - "integrity": "sha512-IlXtW/Nj48ZzjHUzH1TykZcSR64ScJx39T3IHnjV2z/bVATzZ36JGoadQHdqpJNKBodYJNgtJCGLCbgAvGWY2g==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.6.tgz", + "integrity": "sha512-vy9wy+Q9beiRxkEO8wNxFQ63AqAujGvk8AUHepxxIT7QNNc512TNKz8uH+feWDPO38Dm2obwYQHMGzs3WO7pUA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -301,18 +301,18 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.5" + "@angular/core": "18.2.6" } }, "node_modules/@angular/build": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.5.tgz", - "integrity": "sha512-XWkmjzgeUga0SJ0lYSYcTuYOWTyqcln2mNfBp7Ae/GZ+/7+APbedsIZEiZGZwveOIyOpTM5wguNSoe9khDl5Ig==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.6.tgz", + "integrity": "sha512-TQzX6Mi7uXFvmz7+OVl4Za7WawYPcx+B5Ewm6IY/DdMyB9P/Z4tbKb1LO+ynWUXYwm7avXo6XQQ4m5ArDY5F/A==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.5", + "@angular-devkit/architect": "0.1802.6", "@babel/core": "7.25.2", "@babel/helper-annotate-as-pure": "7.24.7", "@babel/helper-split-export-declaration": "7.24.7", @@ -331,7 +331,7 @@ "parse5-html-rewriting-stream": "7.0.0", "picomatch": "4.0.2", "piscina": "4.6.1", - "rollup": "4.20.0", + "rollup": "4.22.4", "sass": "1.77.6", "semver": "7.6.3", "vite": "5.4.6", @@ -374,9 +374,9 @@ } }, "node_modules/@angular/cdk": { - "version": "18.2.4", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.4.tgz", - "integrity": "sha512-o+TuxZDqStfkviEkCR05pVyP6R2RIruEs/45Cms76hlsIheMoxRaxir/yrHdh4tZESJJhcO/EVE+aymNIRWAfg==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.6.tgz", + "integrity": "sha512-Gfq/iv4zhlKYpdQkDaBRwxI71NHNUHM1Cs1XhnZ0/oFct5HXvSv1RHRGTKqBJLLACaAPzZKXJ/UglLoyO5CNiQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -391,18 +391,18 @@ } }, "node_modules/@angular/cli": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.5.tgz", - "integrity": "sha512-97uNs0HsOdnMaTlNJKFjIBUXw0wz43uYvSSKmIpBt7eq1LaPLju1G/qpDIHx2YwhMClPrXXrW2H/xdvqZiIw+w==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.6.tgz", + "integrity": "sha512-tdXsnV/w+Rgu8q0zFsLU5L9ImTVqrTol1vppHaQkJ/vuoHy+s8ZEbBqhVrO/ffosNb2xseUybGYvqMS4zkNQjg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1802.5", - "@angular-devkit/core": "18.2.5", - "@angular-devkit/schematics": "18.2.5", + "@angular-devkit/architect": "0.1802.6", + "@angular-devkit/core": "18.2.6", + "@angular-devkit/schematics": "18.2.6", "@inquirer/prompts": "5.3.8", "@listr2/prompt-adapter-inquirer": "2.0.15", - "@schematics/angular": "18.2.5", + "@schematics/angular": "18.2.6", "@yarnpkg/lockfile": "1.1.0", "ini": "4.1.3", "jsonc-parser": "3.3.1", @@ -425,9 +425,9 @@ } }, "node_modules/@angular/common": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.5.tgz", - "integrity": "sha512-m+KJrtbFXTE36jP/po6UAMeUR/enQxRHpVGLCRcIcE7VWVH1ZcOvoW1yqh2A6k+KxWXeajlq/Z04nnMhcoxMRw==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.6.tgz", + "integrity": "sha512-89793ow+wrI1c7C6kyMbnweLNIZHzXthosxAEjipRZGBrqBYjvTtkE45Fl+5yBa3JO7bAhyGkUnEoyvWtZIAEA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -436,14 +436,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.5", + "@angular/core": "18.2.6", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.5.tgz", - "integrity": "sha512-vcqe9x4dGGAnMfPhEpcZyiSVgAiqJeK80LqP1vWoAmBR+HeOqAilSv6SflcLAtuTzwgzMMAvD2T+SMCgUvaqww==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.6.tgz", + "integrity": "sha512-3tX2/Qw+bZ8XzKitviH8jzNGyY0uohhehhBB57OJOCc+yr4ojy/7SYFnun1lSsRnDztdCE461641X4iQLCQ94w==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -452,7 +452,7 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.5" + "@angular/core": "18.2.6" }, "peerDependenciesMeta": { "@angular/core": { @@ -461,9 +461,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.5.tgz", - "integrity": "sha512-CCCtZobUTUfId/RTYtuDCw5R1oK0w65hdAUMRP1MdGmd8bb8DKJA86u1QCWwozL3rbXlIIX4ognQ6urQ43k/Gw==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.6.tgz", + "integrity": "sha512-b5x9STfjNiNM/S0D+CnqRP9UOxPtSz1+RlCH5WdOMiW/p8j5p6dBix8YYgTe6Wg3OD7eItD2pnFQKgF/dWiopA==", "dev": true, "license": "MIT", "dependencies": { @@ -485,14 +485,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/compiler": "18.2.5", + "@angular/compiler": "18.2.6", "typescript": ">=5.4 <5.6" } }, "node_modules/@angular/core": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.5.tgz", - "integrity": "sha512-5BLVc5gXxzanQkADNS9WPsor3vNF5nQcyIHBi5VScErwM5vVZ7ATH1iZwaOg1ykDEVTFVhKDwD0X1aaqGDbhmQ==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.6.tgz", + "integrity": "sha512-PjFad2j4YBwLVTw+0Te8CJCa/tV0W8caTHG8aOjj3ObdL6ihGI+FKnwerLc9RVzDFd14BOO4C6/+LbOQAh3Ltw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -506,9 +506,9 @@ } }, "node_modules/@angular/forms": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.5.tgz", - "integrity": "sha512-ohKeH+EZCCIyGSiFYlraWLzssGAZc13P92cuYpXB62322PkcA5u0IT72mML9JWGKRqF2zteVsw4koWHVxXM5mA==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.6.tgz", + "integrity": "sha512-quGkUqTxlBaLB8C/RnpfFG57fdmNF5RQ+368N89Ma++2lpIsVAHaGZZn4yOyo3wNYaM2jBxNqaYxOzZNUl5Tig==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -517,16 +517,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.5", - "@angular/core": "18.2.5", - "@angular/platform-browser": "18.2.5", + "@angular/common": "18.2.6", + "@angular/core": "18.2.6", + "@angular/platform-browser": "18.2.6", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/platform-browser": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.5.tgz", - "integrity": "sha512-PoX9idwnOpTJBlujzZ2nFGOsmCnZzOH7uNSWIR7trdoq0b1AFXfrxlCQ36qWamk7bbhJI4H28L8YTmKew/nXDA==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.6.tgz", + "integrity": "sha512-RA8UMiYNLga+QMwpKcDw1357gYPfPyY/rmLeezMak//BbsENFYQOJ4Z6DBOBNiPlHxmBsUJMGaKdlpQhfCROyQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -535,9 +535,9 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/animations": "18.2.5", - "@angular/common": "18.2.5", - "@angular/core": "18.2.5" + "@angular/animations": "18.2.6", + "@angular/common": "18.2.6", + "@angular/core": "18.2.6" }, "peerDependenciesMeta": { "@angular/animations": { @@ -546,9 +546,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.5.tgz", - "integrity": "sha512-5u0IuAt1r5e2u2vSKhp3phnaf6hH89B/q7GErfPse1sdDfNI6wHVppxai28PAfAj9gwooJun6MjFWhJFLzS44A==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.6.tgz", + "integrity": "sha512-kGBU3FNc+DF9r33hwHZqiWoZgQbCDdEIucU0NCLCIg0Hw6/Q9Hr2ndjxQI+WynCPg0JeBn34jpouvpeJer3YDQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -557,16 +557,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.5", - "@angular/compiler": "18.2.5", - "@angular/core": "18.2.5", - "@angular/platform-browser": "18.2.5" + "@angular/common": "18.2.6", + "@angular/compiler": "18.2.6", + "@angular/core": "18.2.6", + "@angular/platform-browser": "18.2.6" } }, "node_modules/@angular/router": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.5.tgz", - "integrity": "sha512-OjZV1PTiSwT0ytmR0ykveLYzs4uQWf0EuIclZmWqM/bb8Q4P+gJl7/sya05nGnZsj6nHGOL0e/LhSZ3N+5p6qg==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.6.tgz", + "integrity": "sha512-t57Sqja8unHhZlPr+4CWnQacuox2M4p2pMHps+31wt337qH6mKf4jqDmK0dE/MFdRyKjT2a2E/2NwtxXxcWNuw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -575,16 +575,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.5", - "@angular/core": "18.2.5", - "@angular/platform-browser": "18.2.5", + "@angular/common": "18.2.6", + "@angular/core": "18.2.6", + "@angular/platform-browser": "18.2.6", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/service-worker": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-18.2.5.tgz", - "integrity": "sha512-MoF2n7z/X+yqK89mIRHQutVHIBTyEUo/fDEL8LcuBP4KOZmX9cRoCEt+vqH49BkArsgOM0jNFMYCM8yt0jg7pw==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-18.2.6.tgz", + "integrity": "sha512-KNqRAunG0yj3jVA/YYKH9wbAe261gAIwKeQsJyeMHGR48H88tSKdcstttNZZ3S6wdhp7tcyUC526Fc4phXnSJw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -596,8 +596,8 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.5", - "@angular/core": "18.2.5" + "@angular/common": "18.2.6", + "@angular/core": "18.2.6" } }, "node_modules/@babel/code-frame": { @@ -4129,9 +4129,9 @@ ] }, "node_modules/@ngtools/webpack": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.5.tgz", - "integrity": "sha512-L0n4eHObeqEOYRfSP+e4SeF/dmwxOIFy9xYvYCOUwOLrW4b3+a1+kkT30pqyfL72LFtpf0cmUwaWEFIcWl5PCg==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.6.tgz", + "integrity": "sha512-7HwOPE1EOgcHnpt4brSiT8G2CcXB50G0+CbCBaKGy4LYCG3Y3mrlzF5Fup9HvMJ6Tzqd62RqzpKKYBiGUT7hxg==", "dev": true, "license": "MIT", "engines": { @@ -4812,9 +4812,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", - "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", "cpu": [ "arm" ], @@ -4826,9 +4826,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz", - "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==", + "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==", "cpu": [ "arm64" ], @@ -4840,9 +4840,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz", - "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], @@ -4854,9 +4854,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz", - "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==", + "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==", "cpu": [ "x64" ], @@ -4868,9 +4868,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz", - "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", "cpu": [ "arm" ], @@ -4882,9 +4882,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz", - "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", "cpu": [ "arm" ], @@ -4896,9 +4896,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz", - "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==", + "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==", "cpu": [ "arm64" ], @@ -4910,9 +4910,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz", - "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==", + "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==", "cpu": [ "arm64" ], @@ -4924,9 +4924,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz", - "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==", + "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==", "cpu": [ "ppc64" ], @@ -4938,9 +4938,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz", - "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", "cpu": [ "riscv64" ], @@ -4952,9 +4952,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz", - "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", "cpu": [ "s390x" ], @@ -4966,9 +4966,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz", - "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], @@ -4980,9 +4980,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz", - "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", "cpu": [ "x64" ], @@ -4994,9 +4994,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz", - "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", "cpu": [ "arm64" ], @@ -5008,9 +5008,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz", - "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", "cpu": [ "ia32" ], @@ -5022,9 +5022,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz", - "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", "cpu": [ "x64" ], @@ -5036,14 +5036,14 @@ ] }, "node_modules/@schematics/angular": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.5.tgz", - "integrity": "sha512-tBXhk9OGT4U6VsBNbuCNl2ITDOF3NYdGrEieIHU+lHSkpJNGZUIGxCgXCETXkmXDq1pe4wFZSKelWjeqYDfX0g==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.6.tgz", + "integrity": "sha512-Y988EoOEQDLEyHu3414T6AeVUyx21AexBHQNbUNQkK8cxlxyB6m1eH1cx6vFgLRFUTsLVv+C6Ln/ICNTfLcG4A==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.5", - "@angular-devkit/schematics": "18.2.5", + "@angular-devkit/core": "18.2.6", + "@angular-devkit/schematics": "18.2.6", "jsonc-parser": "3.3.1" }, "engines": { @@ -5826,9 +5826,22 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz", + "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "dev": true, "license": "MIT", "dependencies": { @@ -5964,9 +5977,9 @@ } }, "node_modules/@types/node": { - "version": "22.5.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", - "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", + "version": "22.7.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz", + "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==", "dev": true, "license": "MIT", "dependencies": { @@ -7169,9 +7182,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "dev": true, "funding": [ { @@ -7189,8 +7202,8 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, @@ -7583,9 +7596,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001662", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001662.tgz", - "integrity": "sha512-sgMUVwLmGseH8ZIrm1d51UbrhqMCH3jvS7gF/M6byuHOnKyLOBL7W8yz5V02OHwgLGA36o/AFhWzzh4uc5aqTA==", + "version": "1.0.30001664", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz", + "integrity": "sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==", "dev": true, "funding": [ { @@ -9551,9 +9564,9 @@ } }, "node_modules/dompurify": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", - "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz", + "integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==", "license": "(MPL-2.0 OR Apache-2.0)" }, "node_modules/domutils": { @@ -9631,9 +9644,9 @@ } }, "node_modules/electron": { - "version": "32.1.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-32.1.1.tgz", - "integrity": "sha512-NlWvG6kXOJbZbELmzP3oV7u50I3NHYbCeh+AkUQ9vGyP7b74cFMx9HdTzejODeztW1jhr3SjIBbUZzZ45zflfQ==", + "version": "32.1.2", + "resolved": "https://registry.npmjs.org/electron/-/electron-32.1.2.tgz", + "integrity": "sha512-CXe6doFzhmh1U7daOvUzmF6Cj8hssdYWMeEPRnRO6rB9/bbwMlWctcQ7P8NJXhLQ88/vYUJQrJvlJPh8qM0BRQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -9976,16 +9989,16 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.25.tgz", - "integrity": "sha512-kMb204zvK3PsSlgvvwzI3wBIcAw15tRkYk+NQdsjdDtcQWTp2RABbMQ9rUBy8KNEOM+/E6ep+XC3AykiWZld4g==", + "version": "1.5.30", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.30.tgz", + "integrity": "sha512-sXI35EBN4lYxzc/pIGorlymYNzDBOqkSlVRe6MkgBsW/hW1tpC/HDJ2fjG7XnjakzfLEuvdmux0Mjs6jHq4UOA==", "dev": true, "license": "ISC" }, "node_modules/electron/node_modules/@types/node": { - "version": "20.16.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz", - "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==", + "version": "20.16.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.10.tgz", + "integrity": "sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==", "dev": true, "license": "MIT", "dependencies": { @@ -10047,9 +10060,9 @@ } }, "node_modules/engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.1.tgz", + "integrity": "sha512-NEpDCw9hrvBW+hVEOK4T7v0jFJ++KgtPl4jKFwsZVfG1XhS0dCrSb3VMb9gPAd7VAdW52VT1EnaNiU2vM8C0og==", "dev": true, "license": "MIT", "dependencies": { @@ -10670,9 +10683,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz", + "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==", "dev": true, "license": "MIT" }, @@ -15110,9 +15123,9 @@ "license": "MIT" }, "node_modules/nodemon": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.6.tgz", - "integrity": "sha512-C8ymJbXpTTinxjWuMfMxw0rZhTn/r7ypSGldQyqPEgDEaVwAthqC0aodsMwontnAInN9TuPwRLeBoyhmfv+iSA==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.7.tgz", + "integrity": "sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15884,9 +15897,9 @@ } }, "node_modules/ordered-binary": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz", - "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.2.tgz", + "integrity": "sha512-JTo+4+4Fw7FreyAvlSLjb1BBVaxEQAacmjD3jjuyPZclpbEghTvQZbXBb2qPd2LeIMxiHwXBZUcpmG2Gl/mDEA==", "dev": true, "license": "MIT" }, @@ -16016,9 +16029,9 @@ } }, "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, "license": "BlueOak-1.0.0" }, @@ -17307,9 +17320,9 @@ "license": "Unlicense" }, "node_modules/rollup": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz", - "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "dev": true, "license": "MIT", "dependencies": { @@ -17323,22 +17336,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.20.0", - "@rollup/rollup-android-arm64": "4.20.0", - "@rollup/rollup-darwin-arm64": "4.20.0", - "@rollup/rollup-darwin-x64": "4.20.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", - "@rollup/rollup-linux-arm-musleabihf": "4.20.0", - "@rollup/rollup-linux-arm64-gnu": "4.20.0", - "@rollup/rollup-linux-arm64-musl": "4.20.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", - "@rollup/rollup-linux-riscv64-gnu": "4.20.0", - "@rollup/rollup-linux-s390x-gnu": "4.20.0", - "@rollup/rollup-linux-x64-gnu": "4.20.0", - "@rollup/rollup-linux-x64-musl": "4.20.0", - "@rollup/rollup-win32-arm64-msvc": "4.20.0", - "@rollup/rollup-win32-ia32-msvc": "4.20.0", - "@rollup/rollup-win32-x64-msvc": "4.20.0", + "@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", "fsevents": "~2.3.2" } }, @@ -18011,9 +18024,9 @@ } }, "node_modules/socket.io": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", - "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", + "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", "dev": true, "license": "MIT", "dependencies": { @@ -18021,7 +18034,7 @@ "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.2", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, @@ -19263,9 +19276,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -19283,8 +19296,8 @@ ], "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" diff --git a/package.json b/package.json index 4716c82b5..36313fdfc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gloomhavensecretariat", - "version": "0.100.3", + "version": "0.100.4", "license": "AGPL3", "description": "Gloomhaven Secretariat is a Gloomhaven/Frosthaven Companion app.", "homepage": "https://gloomhaven-secretariat.de", @@ -75,16 +75,16 @@ }, "private": true, "dependencies": { - "@angular/animations": "^18.2.5", - "@angular/cdk": "^18.2.4", - "@angular/common": "^18.2.5", - "@angular/compiler": "^18.2.5", - "@angular/core": "^18.2.5", - "@angular/forms": "^18.2.5", - "@angular/platform-browser": "^18.2.5", - "@angular/platform-browser-dynamic": "^18.2.5", - "@angular/router": "^18.2.5", - "@angular/service-worker": "^18.2.5", + "@angular/animations": "^18.2.6", + "@angular/cdk": "^18.2.6", + "@angular/common": "^18.2.6", + "@angular/compiler": "^18.2.6", + "@angular/core": "^18.2.6", + "@angular/forms": "^18.2.6", + "@angular/platform-browser": "^18.2.6", + "@angular/platform-browser-dynamic": "^18.2.6", + "@angular/router": "^18.2.6", + "@angular/service-worker": "^18.2.6", "autocompleter": "^9.3.2", "leaflet": "^1.9.4", "mermaid": "^10.9.1", @@ -95,16 +95,16 @@ "zone.js": "~0.14.10" }, "devDependencies": { - "@angular-devkit/build-angular": "^18.2.5", - "@angular/cli": "^18.2.5", - "@angular/compiler-cli": "^18.2.5", + "@angular-devkit/build-angular": "^18.2.6", + "@angular/cli": "^18.2.6", + "@angular/compiler-cli": "^18.2.6", "@types/d3": "^7.4.3", "@types/dom-screen-wake-lock": "1.0.3", "@types/dompurify": "^3.0.5", "@types/jasmine": "~5.1.4", "@types/leaflet": "^1.9.12", "@types/uuid": "^10.0.0", - "electron": "^32.1.1", + "electron": "^32.1.2", "electron-builder": "^25.0.5", "http-server": "^14.1.1", "husky": "^9.1.6", @@ -114,7 +114,7 @@ "karma-coverage": "~2.2.1", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", - "nodemon": "^3.1.6", + "nodemon": "^3.1.7", "typescript": "~5.5.4" } } diff --git a/src/app/game/businesslogic/LootManager.ts b/src/app/game/businesslogic/LootManager.ts index aadc81846..e1cce088e 100644 --- a/src/app/game/businesslogic/LootManager.ts +++ b/src/app/game/businesslogic/LootManager.ts @@ -91,7 +91,7 @@ export class LootManager { let rewardResults: string[][] = []; const editionData = gameManager.editionData.find((editionData) => editionData.edition == edition); if (editionData && editionData.treasures) { - index = index - (editionData.treasureOffset || 0); + index = index < 0 ? index : index - (editionData.treasureOffset || 0); if (index >= 0 && index < editionData.treasures.length) { const tresureString = editionData.treasures[index]; const treasure = new TreasureData(tresureString, index); @@ -100,6 +100,14 @@ export class LootManager { rewardResults.push(this.applyTreasureReward(character, reward, edition)); }); } + } else if (index < 0 && editionData.treasures.length + index + 1 > 0) { + const tresureString = editionData.treasures[editionData.treasures.length + index + 1]; + const treasure = new TreasureData(tresureString, index); + if (treasure.rewards) { + treasure.rewards.forEach((reward) => { + rewardResults.push(this.applyTreasureReward(character, reward, edition)); + }); + } } else { console.warn("Invalid treasure index: '" + index + "' for Edition " + edition); } diff --git a/src/app/ui/figures/standee/standee.ts b/src/app/ui/figures/standee/standee.ts index 8c7171a4e..bb02fc998 100644 --- a/src/app/ui/figures/standee/standee.ts +++ b/src/app/ui/figures/standee/standee.ts @@ -235,6 +235,7 @@ export class StandeeComponent implements OnInit, OnDestroy { next: () => { if ((this.entity instanceof MonsterEntity || this.entity instanceof ObjectiveEntity) && this.entity.dead) { this.element.nativeElement.classList.add('dead'); + gameManager.uiChange.emit(); } } }) diff --git a/src/app/ui/footer/scenario-rules/scenario-rule.ts b/src/app/ui/footer/scenario-rules/scenario-rule.ts index 11fcdb50d..da09bd57b 100644 --- a/src/app/ui/footer/scenario-rules/scenario-rule.ts +++ b/src/app/ui/footer/scenario-rules/scenario-rule.ts @@ -1,4 +1,4 @@ -import { Component, Input } from "@angular/core"; +import { Component, Input, OnInit } from "@angular/core"; import { GameManager, gameManager } from "src/app/game/businesslogic/GameManager"; import { SettingsManager, settingsManager } from "src/app/game/businesslogic/SettingsManager"; import { Character } from "src/app/game/model/Character"; @@ -16,7 +16,7 @@ import { HiddenScenarioFigureRuleTypes, ScenarioFigureRule, ScenarioFigureRuleId templateUrl: './scenario-rule.html', styleUrls: ['./scenario-rule.scss'] }) -export class ScenarioRuleComponent { +export class ScenarioRuleComponent implements OnInit { @Input() rule!: ScenarioRule; @Input() identifier!: ScenarioRuleIdentifier; @@ -25,6 +25,14 @@ export class ScenarioRuleComponent { settingsManager: SettingsManager = settingsManager; EntityValueFunction = EntityValueFunction; + ngOnInit(): void { + if (this.rule.figures) { + this.rule.figures.forEach((figureRule) => { + figureRule.value = '' + figureRule.value; + }) + } + } + randomDungeonsMonsterLabel(rule: ScenarioRule): string[] { if (!rule.randomDungeon || !rule.randomDungeon.monsterCards || !rule.randomDungeon.monsterCards.length) { return []; diff --git a/src/app/ui/footer/scenario/summary/scenario-summary.html b/src/app/ui/footer/scenario/summary/scenario-summary.html index b24b16eb2..67add91a0 100644 --- a/src/app/ui/footer/scenario/summary/scenario-summary.html +++ b/src/app/ui/footer/scenario/summary/scenario-summary.html @@ -178,9 +178,10 @@
- 0{{('' + - treasure).startsWith('G-') ? 'G' : ('' - +treasure).split(':')[0]}} + + 0{{('' + + treasure).startsWith('G-') ? 'G' : ('' +treasure).split(':')[0]}} + ??? editionData.edition == this.edition); if (editionData && editionData.treasures) { - const index = this.index - (editionData.treasureOffset || 0); + const index = this.index < 0 ? this.index : this.index - (editionData.treasureOffset || 0); if (index >= 0 && index < editionData.treasures.length) { const tresureString = editionData.treasures[index]; this.treasure = new TreasureData(tresureString, this.index); + } else if (index < 0 && editionData.treasures.length + index + 1 > 0) { + const tresureString = editionData.treasures[index + 1 + editionData.treasures.length]; + this.treasure = new TreasureData(tresureString, this.index); } else { - console.warn("Invalid treasure index: '" + this.index + "' for Edition " + this.edition); + console.warn("Invalid treasure index: '" + this.index + "' for Edition " + this.edition, editionData.treasures.length); } } } else { diff --git a/src/app/ui/footer/scenario/treasures/treasures-dialog.html b/src/app/ui/footer/scenario/treasures/treasures-dialog.html index 61ef9ea5f..4001fd9c5 100644 --- a/src/app/ui/footer/scenario/treasures/treasures-dialog.html +++ b/src/app/ui/footer/scenario/treasures/treasures-dialog.html @@ -6,7 +6,9 @@
- 0{{treasure}} + 0{{treasure}} + ???
@@ -21,9 +23,14 @@
-
- 0{{('' + treasure).startsWith('G-') ? 'G' : ('' - +treasure).split(':')[0]}} +
+ + 0{{('' + + treasure).startsWith('G-') ? 'G' : ('' + +treasure).split(':')[0]}} + + ???
-

+

+

@@ -49,8 +57,8 @@

+ [ghs-label-args]="[('' + treasures[treasureIndex]).startsWith('G-') ? 'G' : (+treasures[treasureIndex] >= 0 ? '' + +treasures[treasureIndex] : '\'???\'')]">

diff --git a/src/app/ui/footer/scenario/treasures/treasures-dialog.ts b/src/app/ui/footer/scenario/treasures/treasures-dialog.ts index bb168d63b..3415f6ebe 100644 --- a/src/app/ui/footer/scenario/treasures/treasures-dialog.ts +++ b/src/app/ui/footer/scenario/treasures/treasures-dialog.ts @@ -105,13 +105,16 @@ export class ScenarioTreasuresDialogComponent implements OnInit, OnDestroy { removeTreasure(character: Character, treasure: string | number) { if (typeof treasure === 'number') { - gameManager.stateManager.before('removeCharTresure', '' + treasure, this.edition, gameManager.characterManager.characterName(character)); + gameManager.stateManager.before('removeCharTresure', treasure >= 0 ? '' + treasure : '???', this.edition, gameManager.characterManager.characterName(character)); this.looted.splice(this.treasures.indexOf(treasure), 1); } else { gameManager.stateManager.before('removeCharTresure', 'G', this.edition); this.looted.splice(+treasure.replace('G-', ''), 1); } character.treasures.splice(character.treasures.indexOf(treasure), 1); + if (typeof treasure === 'number') { + gameManager.game.party.treasures = gameManager.game.party.treasures.filter((value) => value.edition != this.edition || value.name != '' + treasure); + } gameManager.stateManager.after(); } @@ -121,7 +124,7 @@ export class ScenarioTreasuresDialogComponent implements OnInit, OnDestroy { this.rewardResults = []; const treasure = this.treasures[this.treasureIndex]; if (this.character && treasure && this.character.treasures.indexOf(treasure == 'G' ? 'G-' + this.treasureIndex : treasure) == -1) { - gameManager.stateManager.before('lootCharTreasure', '' + treasure, this.edition, gameManager.characterManager.characterName(this.character)); + gameManager.stateManager.before('lootCharTreasure', ('' + treasure).startsWith('G') || +treasure >= 0 ? '' + treasure : '???', this.edition, gameManager.characterManager.characterName(this.character)); this.looted.push(this.treasureIndex); if (treasure != 'G' && settingsManager.settings.treasuresLoot) { this.rewardResults = gameManager.lootManager.lootTreasure(this.character, treasure - 1, this.edition); diff --git a/src/app/ui/helper/EntityAnimation.ts b/src/app/ui/helper/EntityAnimation.ts index 9e3d45622..40741325a 100644 --- a/src/app/ui/helper/EntityAnimation.ts +++ b/src/app/ui/helper/EntityAnimation.ts @@ -1,4 +1,5 @@ import { Directive, ElementRef, Input, OnChanges, SimpleChanges } from '@angular/core'; +import { gameManager } from 'src/app/game/businesslogic/GameManager'; import { settingsManager } from 'src/app/game/businesslogic/SettingsManager'; @@ -19,11 +20,13 @@ export class EntityAnimationDirective implements OnChanges { this.el.nativeElement.classList.add("entity-dead"); setTimeout(() => { this.el.nativeElement.classList.remove("entity-dead"); + gameManager.uiChange.emit(); }, !settingsManager.settings.animations ? 0 : 1500); } else if (!change.currentValue) { this.el.nativeElement.classList.add("entity-alive"); setTimeout(() => { this.el.nativeElement.classList.remove("entity-alive"); + gameManager.uiChange.emit(); }, !settingsManager.settings.animations ? 0 : 1500); } }