@strixit/storyscript 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env +1 -0
- package/CodeSnippets/StoryScriptSnippets.code-snippets +573 -0
- package/LICENSE.txt +21 -0
- package/LiveTemplates/StoryScript.xml +271 -0
- package/README.md +9 -2
- package/baseViteConfig.js +112 -0
- package/clientFiles/currentGameName.js +1 -0
- package/clientFiles/gitignore +12 -0
- package/clientFiles/tsconfig.json +34 -0
- package/clientFiles/vite.config.ts +14 -0
- package/clientFiles/vitest.config.ts +29 -0
- package/dist/src/Engine/Actions/index.d.ts +2 -0
- package/dist/src/Engine/Actions/open.d.ts +6 -0
- package/dist/src/Engine/Actions/openWithKey.d.ts +7 -0
- package/dist/src/Engine/EntityCreatorFunctions.d.ts +18 -0
- package/dist/src/Engine/Interfaces/action.d.ts +37 -0
- package/dist/src/Engine/Interfaces/autoplayStep.d.ts +11 -0
- package/dist/src/Engine/Interfaces/barrier.d.ts +16 -0
- package/dist/src/Engine/Interfaces/barrierAction.d.ts +19 -0
- package/dist/src/Engine/Interfaces/character.d.ts +48 -0
- package/dist/src/Engine/Interfaces/combatSetup.d.ts +9 -0
- package/dist/src/Engine/Interfaces/combatTurn.d.ts +37 -0
- package/dist/src/Engine/Interfaces/combatWinnings.d.ts +6 -0
- package/dist/src/Engine/Interfaces/combinations/activeCombination.d.ts +14 -0
- package/dist/src/Engine/Interfaces/combinations/combinable.d.ts +18 -0
- package/dist/src/Engine/Interfaces/combinations/combinationAction.d.ts +41 -0
- package/dist/src/Engine/Interfaces/combinations/combinationMatchResult.d.ts +14 -0
- package/dist/src/Engine/Interfaces/combinations/combinations.d.ts +17 -0
- package/dist/src/Engine/Interfaces/combinations/combine.d.ts +22 -0
- package/dist/src/Engine/Interfaces/combinations/combineResult.d.ts +18 -0
- package/dist/src/Engine/Interfaces/combinations/gameCombinations.d.ts +40 -0
- package/dist/src/Engine/Interfaces/compiledLocation.d.ts +33 -0
- package/dist/src/Engine/Interfaces/conversations/conversation.d.ts +44 -0
- package/dist/src/Engine/Interfaces/conversations/conversationLogEntry.d.ts +13 -0
- package/dist/src/Engine/Interfaces/conversations/conversationNode.d.ts +22 -0
- package/dist/src/Engine/Interfaces/conversations/conversationReply.d.ts +49 -0
- package/dist/src/Engine/Interfaces/createCharacter/createCharacter.d.ts +20 -0
- package/dist/src/Engine/Interfaces/createCharacter/createCharacterAttribute.d.ts +18 -0
- package/dist/src/Engine/Interfaces/createCharacter/createCharacterAttributeEntry.d.ts +18 -0
- package/dist/src/Engine/Interfaces/createCharacter/createCharacterQuestion.d.ts +18 -0
- package/dist/src/Engine/Interfaces/createCharacter/createCharacterQuestionEntry.d.ts +22 -0
- package/dist/src/Engine/Interfaces/createCharacter/createCharacterStep.d.ts +40 -0
- package/dist/src/Engine/Interfaces/customCursor.d.ts +8 -0
- package/dist/src/Engine/Interfaces/defaultEquipment.d.ts +19 -0
- package/dist/src/Engine/Interfaces/definitions.d.ts +40 -0
- package/dist/src/Engine/Interfaces/destination.d.ts +31 -0
- package/dist/src/Engine/Interfaces/dynamicStyle.d.ts +10 -0
- package/dist/src/Engine/Interfaces/enemy.d.ts +46 -0
- package/dist/src/Engine/Interfaces/enumerations/actionStatus.d.ts +18 -0
- package/dist/src/Engine/Interfaces/enumerations/actionType.d.ts +9 -0
- package/dist/src/Engine/Interfaces/enumerations/equipmentType.d.ts +51 -0
- package/dist/src/Engine/Interfaces/enumerations/gameState.d.ts +11 -0
- package/dist/src/Engine/Interfaces/enumerations/playState.d.ts +10 -0
- package/dist/src/Engine/Interfaces/enumerations/targetType.d.ts +9 -0
- package/dist/src/Engine/Interfaces/equipment.d.ts +43 -0
- package/dist/src/Engine/Interfaces/feature.d.ts +37 -0
- package/dist/src/Engine/Interfaces/featureCollection.d.ts +7 -0
- package/dist/src/Engine/Interfaces/game.d.ts +148 -0
- package/dist/src/Engine/Interfaces/gameEvents.d.ts +7 -0
- package/dist/src/Engine/Interfaces/groupableItem.d.ts +32 -0
- package/dist/src/Engine/Interfaces/helpers.d.ts +50 -0
- package/dist/src/Engine/Interfaces/index.d.ts +78 -0
- package/dist/src/Engine/Interfaces/interfaceTexts.d.ts +140 -0
- package/dist/src/Engine/Interfaces/item.d.ts +96 -0
- package/dist/src/Engine/Interfaces/key.d.ts +16 -0
- package/dist/src/Engine/Interfaces/location.d.ts +78 -0
- package/dist/src/Engine/Interfaces/maps/map.d.ts +45 -0
- package/dist/src/Engine/Interfaces/maps/mapLocation.d.ts +23 -0
- package/dist/src/Engine/Interfaces/party.d.ts +33 -0
- package/dist/src/Engine/Interfaces/person.d.ts +25 -0
- package/dist/src/Engine/Interfaces/quest.d.ts +51 -0
- package/dist/src/Engine/Interfaces/rules/characterRules.d.ts +84 -0
- package/dist/src/Engine/Interfaces/rules/combatRules.d.ts +46 -0
- package/dist/src/Engine/Interfaces/rules/combinationRules.d.ts +15 -0
- package/dist/src/Engine/Interfaces/rules/demoMode.d.ts +15 -0
- package/dist/src/Engine/Interfaces/rules/encounterRules.d.ts +4 -0
- package/dist/src/Engine/Interfaces/rules/explorationRules.d.ts +42 -0
- package/dist/src/Engine/Interfaces/rules/generalRules.d.ts +62 -0
- package/dist/src/Engine/Interfaces/rules/rules.d.ts +31 -0
- package/dist/src/Engine/Interfaces/rules/setupRules.d.ts +56 -0
- package/dist/src/Engine/Interfaces/rules/titleScreen.d.ts +16 -0
- package/dist/src/Engine/Interfaces/saveGame.d.ts +33 -0
- package/dist/src/Engine/Interfaces/scoreEntry.d.ts +13 -0
- package/dist/src/Engine/Interfaces/services/autoplayService.d.ts +19 -0
- package/dist/src/Engine/Interfaces/services/characterService.d.ts +17 -0
- package/dist/src/Engine/Interfaces/services/combatService.d.ts +26 -0
- package/dist/src/Engine/Interfaces/services/combinationService.d.ts +9 -0
- package/dist/src/Engine/Interfaces/services/commandService.d.ts +64 -0
- package/dist/src/Engine/Interfaces/services/conversationService.d.ts +5 -0
- package/dist/src/Engine/Interfaces/services/dataSerializer.d.ts +4 -0
- package/dist/src/Engine/Interfaces/services/dataService.d.ts +33 -0
- package/dist/src/Engine/Interfaces/services/dataSynchronizer.d.ts +3 -0
- package/dist/src/Engine/Interfaces/services/gameService.d.ts +10 -0
- package/dist/src/Engine/Interfaces/services/index.d.ts +16 -0
- package/dist/src/Engine/Interfaces/services/itemService.d.ts +14 -0
- package/dist/src/Engine/Interfaces/services/localStorageService.d.ts +6 -0
- package/dist/src/Engine/Interfaces/services/locationService.d.ts +8 -0
- package/dist/src/Engine/Interfaces/services/soundService.d.ts +5 -0
- package/dist/src/Engine/Interfaces/services/tradeService.d.ts +9 -0
- package/dist/src/Engine/Interfaces/soundPlayer.d.ts +30 -0
- package/dist/src/Engine/Interfaces/sprite.d.ts +23 -0
- package/dist/src/Engine/Interfaces/stateList.d.ts +9 -0
- package/dist/src/Engine/Interfaces/statistics.d.ts +13 -0
- package/dist/src/Engine/Interfaces/stock.d.ts +39 -0
- package/dist/src/Engine/Interfaces/trade.d.ts +62 -0
- package/dist/src/Engine/ServiceFactory.d.ts +52 -0
- package/dist/src/Engine/Services/AutoplayService.d.ts +11 -0
- package/dist/src/Engine/Services/CharacterService.d.ts +21 -0
- package/dist/src/Engine/Services/CombatService.d.ts +16 -0
- package/dist/src/Engine/Services/CombinationService.d.ts +15 -0
- package/dist/src/Engine/Services/CommandService.d.ts +24 -0
- package/dist/src/Engine/Services/ConversationService.d.ts +26 -0
- package/dist/src/Engine/Services/DataSerializer.d.ts +17 -0
- package/dist/src/Engine/Services/DataService.d.ts +16 -0
- package/dist/src/Engine/Services/DataSynchronizer.d.ts +12 -0
- package/dist/src/Engine/Services/GameService.d.ts +28 -0
- package/dist/src/Engine/Services/HelperService.d.ts +18 -0
- package/dist/src/Engine/Services/ItemService.d.ts +21 -0
- package/dist/src/Engine/Services/LocalStorageService.d.ts +7 -0
- package/dist/src/Engine/Services/LocationService.d.ts +25 -0
- package/dist/src/Engine/Services/SoundService.d.ts +13 -0
- package/dist/src/Engine/Services/TradeService.d.ts +17 -0
- package/dist/src/Engine/Services/index.d.ts +17 -0
- package/dist/src/Engine/Services/serializationData.d.ts +8 -0
- package/dist/src/Engine/Services/sharedFunctions.d.ts +21 -0
- package/dist/src/Engine/arrayAndFunctionExtensions.d.ts +3 -0
- package/dist/src/Engine/defaultTexts.d.ts +7 -0
- package/dist/src/Engine/gameEvents.d.ts +10 -0
- package/dist/src/Engine/index.d.ts +8 -0
- package/dist/src/Engine/stateProperties.d.ts +6 -0
- package/dist/src/Engine/utilityFunctions.d.ts +25 -0
- package/dist/src/UI/Composables/CustomCursor.d.ts +2 -0
- package/dist/src/UI/Composables/LocationMap.d.ts +26 -0
- package/dist/src/UI/Composables/Sound.d.ts +7 -0
- package/dist/src/UI/Composables/TextFeatures.d.ts +8 -0
- package/dist/src/UI/Composables/VisualFeatures.d.ts +7 -0
- package/dist/src/UI/Composables/index.d.ts +7 -0
- package/dist/src/UI/Composables/playStateWatch.d.ts +2 -0
- package/dist/src/UI/StateStore.d.ts +14256 -0
- package/dist/src/UI/error.d.ts +6 -0
- package/dist/src/UI/helpers.d.ts +3 -0
- package/dist/src/UI/index.d.ts +6 -0
- package/dist/src/UI/main.d.ts +1 -0
- package/dist/src/UI/startup.d.ts +2 -0
- package/dist/src/constants.d.ts +17 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/storyscript.css +9566 -0
- package/dist/storyscript.js +9659 -0
- package/dist/storyscript.js.map +1 -0
- package/dist/storyscript.mjs +9569 -0
- package/dist/storyscript.mjs.map +1 -0
- package/electron.cjs +44 -0
- package/index.html +14 -0
- package/package.json +118 -4
- package/scripts/cli.js +268 -0
- package/scripts/createAsset.js +117 -0
- package/scripts/createGame.js +40 -0
- package/scripts/helpers.js +21 -0
- package/scripts/postbuild.js +179 -0
- package/scripts/setupTesting.js +17 -0
- package/shims-vue.d.ts +1 -0
- package/src/Engine/Actions/index.ts +2 -0
- package/src/Engine/Actions/open.ts +12 -0
- package/src/Engine/Actions/openWithKey.ts +23 -0
- package/src/Engine/EntityCreatorFunctions.ts +602 -0
- package/src/Engine/Interfaces/action.ts +43 -0
- package/src/Engine/Interfaces/autoplayStep.ts +13 -0
- package/src/Engine/Interfaces/barrier.ts +18 -0
- package/src/Engine/Interfaces/barrierAction.ts +21 -0
- package/src/Engine/Interfaces/character.ts +58 -0
- package/src/Engine/Interfaces/combatSetup.ts +10 -0
- package/src/Engine/Interfaces/combatTurn.ts +45 -0
- package/src/Engine/Interfaces/combatWinnings.ts +7 -0
- package/src/Engine/Interfaces/combinations/activeCombination.ts +16 -0
- package/src/Engine/Interfaces/combinations/combinable.ts +21 -0
- package/src/Engine/Interfaces/combinations/combinationAction.ts +45 -0
- package/src/Engine/Interfaces/combinations/combinationMatchResult.ts +16 -0
- package/src/Engine/Interfaces/combinations/combinations.ts +19 -0
- package/src/Engine/Interfaces/combinations/combine.ts +25 -0
- package/src/Engine/Interfaces/combinations/combineResult.ts +21 -0
- package/src/Engine/Interfaces/combinations/gameCombinations.ts +48 -0
- package/src/Engine/Interfaces/compiledLocation.ts +37 -0
- package/src/Engine/Interfaces/conversations/conversation.ts +47 -0
- package/src/Engine/Interfaces/conversations/conversationLogEntry.ts +14 -0
- package/src/Engine/Interfaces/conversations/conversationNode.ts +26 -0
- package/src/Engine/Interfaces/conversations/conversationReply.ts +59 -0
- package/src/Engine/Interfaces/createCharacter/createCharacter.ts +23 -0
- package/src/Engine/Interfaces/createCharacter/createCharacterAttribute.ts +21 -0
- package/src/Engine/Interfaces/createCharacter/createCharacterAttributeEntry.ts +21 -0
- package/src/Engine/Interfaces/createCharacter/createCharacterQuestion.ts +21 -0
- package/src/Engine/Interfaces/createCharacter/createCharacterQuestionEntry.ts +25 -0
- package/src/Engine/Interfaces/createCharacter/createCharacterStep.ts +47 -0
- package/src/Engine/Interfaces/customCursor.ts +5 -0
- package/src/Engine/Interfaces/defaultEquipment.ts +32 -0
- package/src/Engine/Interfaces/definitions.ts +48 -0
- package/src/Engine/Interfaces/destination.ts +37 -0
- package/src/Engine/Interfaces/dynamicStyle.ts +11 -0
- package/src/Engine/Interfaces/enemy.ts +54 -0
- package/src/Engine/Interfaces/enumerations/actionStatus.ts +20 -0
- package/src/Engine/Interfaces/enumerations/actionType.ts +9 -0
- package/src/Engine/Interfaces/enumerations/equipmentType.ts +61 -0
- package/src/Engine/Interfaces/enumerations/gameState.ts +11 -0
- package/src/Engine/Interfaces/enumerations/playState.ts +10 -0
- package/src/Engine/Interfaces/enumerations/targetType.ts +9 -0
- package/src/Engine/Interfaces/equipment.ts +44 -0
- package/src/Engine/Interfaces/feature.ts +43 -0
- package/src/Engine/Interfaces/featureCollection.ts +8 -0
- package/src/Engine/Interfaces/game.ts +201 -0
- package/src/Engine/Interfaces/gameEvents.ts +11 -0
- package/src/Engine/Interfaces/groupableItem.ts +37 -0
- package/src/Engine/Interfaces/helpers.ts +55 -0
- package/src/Engine/Interfaces/index.ts +158 -0
- package/src/Engine/Interfaces/interfaceTexts.ts +142 -0
- package/src/Engine/Interfaces/item.ts +111 -0
- package/src/Engine/Interfaces/key.ts +18 -0
- package/src/Engine/Interfaces/location.ts +92 -0
- package/src/Engine/Interfaces/maps/map.ts +55 -0
- package/src/Engine/Interfaces/maps/mapLocation.ts +28 -0
- package/src/Engine/Interfaces/party.ts +40 -0
- package/src/Engine/Interfaces/person.ts +29 -0
- package/src/Engine/Interfaces/quest.ts +60 -0
- package/src/Engine/Interfaces/rules/characterRules.ts +96 -0
- package/src/Engine/Interfaces/rules/combatRules.ts +52 -0
- package/src/Engine/Interfaces/rules/combinationRules.ts +17 -0
- package/src/Engine/Interfaces/rules/demoMode.ts +18 -0
- package/src/Engine/Interfaces/rules/encounterRules.ts +5 -0
- package/src/Engine/Interfaces/rules/explorationRules.ts +47 -0
- package/src/Engine/Interfaces/rules/generalRules.ts +80 -0
- package/src/Engine/Interfaces/rules/rules.ts +46 -0
- package/src/Engine/Interfaces/rules/setupRules.ts +65 -0
- package/src/Engine/Interfaces/rules/titleScreen.ts +19 -0
- package/src/Engine/Interfaces/saveGame.ts +39 -0
- package/src/Engine/Interfaces/scoreEntry.ts +14 -0
- package/src/Engine/Interfaces/services/autoplayService.ts +23 -0
- package/src/Engine/Interfaces/services/characterService.ts +35 -0
- package/src/Engine/Interfaces/services/combatService.ts +30 -0
- package/src/Engine/Interfaces/services/combinationService.ts +10 -0
- package/src/Engine/Interfaces/services/commandService.ts +75 -0
- package/src/Engine/Interfaces/services/conversationService.ts +7 -0
- package/src/Engine/Interfaces/services/dataSerializer.ts +4 -0
- package/src/Engine/Interfaces/services/dataService.ts +39 -0
- package/src/Engine/Interfaces/services/dataSynchronizer.ts +9 -0
- package/src/Engine/Interfaces/services/gameService.ts +17 -0
- package/src/Engine/Interfaces/services/index.ts +33 -0
- package/src/Engine/Interfaces/services/itemService.ts +25 -0
- package/src/Engine/Interfaces/services/localStorageService.ts +6 -0
- package/src/Engine/Interfaces/services/locationService.ts +13 -0
- package/src/Engine/Interfaces/services/soundService.ts +7 -0
- package/src/Engine/Interfaces/services/tradeService.ts +15 -0
- package/src/Engine/Interfaces/soundPlayer.ts +30 -0
- package/src/Engine/Interfaces/sprite.ts +27 -0
- package/src/Engine/Interfaces/stateList.ts +13 -0
- package/src/Engine/Interfaces/statistics.ts +14 -0
- package/src/Engine/Interfaces/stock.ts +46 -0
- package/src/Engine/Interfaces/trade.ts +72 -0
- package/src/Engine/ServiceFactory.ts +167 -0
- package/src/Engine/Services/AutoplayService.ts +59 -0
- package/src/Engine/Services/CharacterService.ts +291 -0
- package/src/Engine/Services/CombatService.ts +266 -0
- package/src/Engine/Services/CombinationService.ts +197 -0
- package/src/Engine/Services/CommandService.ts +197 -0
- package/src/Engine/Services/ConversationService.ts +406 -0
- package/src/Engine/Services/DataSerializer.ts +326 -0
- package/src/Engine/Services/DataService.ts +93 -0
- package/src/Engine/Services/DataSynchronizer.ts +216 -0
- package/src/Engine/Services/GameService.ts +554 -0
- package/src/Engine/Services/HelperService.ts +94 -0
- package/src/Engine/Services/ItemService.ts +294 -0
- package/src/Engine/Services/LocalStorageService.ts +24 -0
- package/src/Engine/Services/LocationService.ts +380 -0
- package/src/Engine/Services/SoundService.ts +54 -0
- package/src/Engine/Services/TradeService.ts +176 -0
- package/src/Engine/Services/index.ts +17 -0
- package/src/Engine/Services/serializationData.ts +8 -0
- package/src/Engine/Services/sharedFunctions.ts +296 -0
- package/src/Engine/arrayAndFunctionExtensions.ts +269 -0
- package/src/Engine/defaultTexts.ts +162 -0
- package/src/Engine/gameEvents.ts +51 -0
- package/src/Engine/index.ts +9 -0
- package/src/Engine/stateProperties.ts +9 -0
- package/src/Engine/utilityFunctions.ts +238 -0
- package/src/Games/_GameTemplate/character.ts +31 -0
- package/src/Games/_GameTemplate/customTexts.ts +8 -0
- package/src/Games/_GameTemplate/interfaces/action.ts +5 -0
- package/src/Games/_GameTemplate/interfaces/combatSetup.ts +7 -0
- package/src/Games/_GameTemplate/interfaces/combatTurn.ts +8 -0
- package/src/Games/_GameTemplate/interfaces/destination.ts +5 -0
- package/src/Games/_GameTemplate/interfaces/enemy.ts +11 -0
- package/src/Games/_GameTemplate/interfaces/equipment.ts +5 -0
- package/src/Games/_GameTemplate/interfaces/feature.ts +9 -0
- package/src/Games/_GameTemplate/interfaces/game.ts +22 -0
- package/src/Games/_GameTemplate/interfaces/interfaceTexts.ts +5 -0
- package/src/Games/_GameTemplate/interfaces/item.ts +18 -0
- package/src/Games/_GameTemplate/interfaces/key.ts +10 -0
- package/src/Games/_GameTemplate/interfaces/location.ts +22 -0
- package/src/Games/_GameTemplate/interfaces/map.ts +16 -0
- package/src/Games/_GameTemplate/interfaces/party.ts +8 -0
- package/src/Games/_GameTemplate/interfaces/person.ts +11 -0
- package/src/Games/_GameTemplate/interfaces/quest.ts +9 -0
- package/src/Games/_GameTemplate/locations/Start.html +5 -0
- package/src/Games/_GameTemplate/locations/start.ts +12 -0
- package/src/Games/_GameTemplate/rules.ts +60 -0
- package/src/Games/_GameTemplate/types.ts +55 -0
- package/src/Games/_GameTemplate/ui/styles/game.css +3 -0
- package/src/Games/_GameTemplate/webroot/favicon.ico +0 -0
- package/src/Games/_GameTemplate/webroot/gameinfo.json +10 -0
- package/src/Games/_GameTemplate/webroot/logo192.png +0 -0
- package/src/Games/_GameTemplate/webroot/logo512.png +0 -0
- package/src/Tests/Games/_GameTemplate/specs/rules.test.ts +9 -0
- package/src/UI/Components/AppShell.vue +43 -0
- package/src/UI/Components/Autoplay.vue +32 -0
- package/src/UI/Components/Combinations.vue +37 -0
- package/src/UI/Components/Common/Collapsible.vue +50 -0
- package/src/UI/Components/Common/ModalDialog.vue +54 -0
- package/src/UI/Components/Common/Sprite.vue +53 -0
- package/src/UI/Components/Description.vue +23 -0
- package/src/UI/Components/Encounter/Combat/Combat.vue +89 -0
- package/src/UI/Components/Encounter/Combat/CombatActions.vue +26 -0
- package/src/UI/Components/Encounter/Combat/CombatParticipant.vue +22 -0
- package/src/UI/Components/Encounter/Combat/CombatTargetSelect.vue +55 -0
- package/src/UI/Components/Encounter/Combat/CombatWin.vue +33 -0
- package/src/UI/Components/Encounter/Conversation.vue +66 -0
- package/src/UI/Components/Encounter/Encounter.vue +39 -0
- package/src/UI/Components/Encounter/Enemy.vue +30 -0
- package/src/UI/Components/Encounter/Trade/Stock.vue +58 -0
- package/src/UI/Components/Encounter/Trade/Trade.vue +24 -0
- package/src/UI/Components/Exploration/ActionLog.vue +17 -0
- package/src/UI/Components/Exploration/Destination.vue +66 -0
- package/src/UI/Components/Exploration/Exploration.vue +67 -0
- package/src/UI/Components/Exploration/Ground.vue +22 -0
- package/src/UI/Components/Exploration/LocationMap.vue +42 -0
- package/src/UI/Components/Exploration/LocationText.vue +39 -0
- package/src/UI/Components/Exploration/LocationVisual.vue +38 -0
- package/src/UI/Components/GameContainer.vue +49 -0
- package/src/UI/Components/GameMenu.vue +111 -0
- package/src/UI/Components/GameState/GameOver.vue +20 -0
- package/src/UI/Components/GameState/HighScores.vue +22 -0
- package/src/UI/Components/GameState/Intro.vue +17 -0
- package/src/UI/Components/GameState/TitleScreen.vue +42 -0
- package/src/UI/Components/GameState/Victory.vue +28 -0
- package/src/UI/Components/Navigation.vue +94 -0
- package/src/UI/Components/Party/Backpack.vue +68 -0
- package/src/UI/Components/Party/BuildCharacter.vue +64 -0
- package/src/UI/Components/Party/CharacterSheet.vue +57 -0
- package/src/UI/Components/Party/CreateCharacter.vue +46 -0
- package/src/UI/Components/Party/Equipment.vue +48 -0
- package/src/UI/Components/Party/EquipmentSlot.vue +31 -0
- package/src/UI/Components/Party/LevelUp.vue +27 -0
- package/src/UI/Components/Party/Party.vue +29 -0
- package/src/UI/Components/Party/Quests.vue +48 -0
- package/src/UI/Components/Sound.vue +42 -0
- package/src/UI/Composables/CustomCursor.ts +60 -0
- package/src/UI/Composables/LocationMap.ts +315 -0
- package/src/UI/Composables/Sound.ts +111 -0
- package/src/UI/Composables/TextFeatures.ts +148 -0
- package/src/UI/Composables/VisualFeatures.ts +220 -0
- package/src/UI/Composables/index.ts +15 -0
- package/src/UI/Composables/playStateWatch.ts +31 -0
- package/src/UI/StateStore.ts +237 -0
- package/src/UI/error.ts +6 -0
- package/src/UI/helpers.ts +62 -0
- package/src/UI/index.ts +13 -0
- package/src/UI/main.ts +62 -0
- package/src/UI/startup.ts +58 -0
- package/src/UI/styles/bootstrap-storyscript.scss +31 -0
- package/src/UI/styles/empty.css +3 -0
- package/src/UI/styles/lookinglass.png +0 -0
- package/src/UI/styles/storyscript.css +735 -0
- package/typeExtensions.d.ts +25 -0
- package/vite-env.d.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storyscript.mjs","names":["find","__create","__defProp","__getOwnPropDesc","__getOwnPropNames","__getProtoOf","__hasOwnProp","__commonJSMin","__copyProps","__toESM","isReadonly","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_resolveComponent","_openBlock","_createElementBlock","_createVNode","_createElementVNode","_unref","_createBlock","_createCommentVNode","_toDisplayString","_sfc_main","AppShell","_openBlock","_createElementBlock","_unref","_createElementVNode","_toDisplayString","_createCommentVNode","_renderSlot","_sfc_main"],"sources":["../src/Engine/stateProperties.ts","../src/Engine/utilityFunctions.ts","../src/constants.ts","../src/Engine/arrayAndFunctionExtensions.ts","../src/Engine/Services/AutoplayService.ts","../src/Engine/Services/CharacterService.ts","../src/Engine/Services/CombatService.ts","../src/Engine/Services/CombinationService.ts","../src/Engine/Services/CommandService.ts","../src/Engine/EntityCreatorFunctions.ts","../src/Engine/Services/sharedFunctions.ts","../src/Engine/Services/ConversationService.ts","../src/Engine/Services/DataSerializer.ts","../src/Engine/Services/DataService.ts","../src/Engine/Services/DataSynchronizer.ts","../src/Engine/Services/GameService.ts","../src/Engine/Services/HelperService.ts","../src/Engine/Services/ItemService.ts","../src/Engine/Services/LocalStorageService.ts","../src/Engine/Services/LocationService.ts","../src/Engine/Services/SoundService.ts","../src/Engine/Services/TradeService.ts","../src/Engine/ServiceFactory.ts","../src/Engine/Interfaces/defaultEquipment.ts","../src/Engine/Interfaces/enumerations/equipmentType.ts","../src/Engine/Interfaces/enumerations/playState.ts","../src/Engine/Interfaces/enumerations/gameState.ts","../src/Engine/Interfaces/enumerations/actionType.ts","../src/Engine/Interfaces/enumerations/actionStatus.ts","../src/Engine/Interfaces/enumerations/targetType.ts","../src/Engine/Interfaces/scoreEntry.ts","../src/Engine/Interfaces/stateList.ts","../src/Engine/Actions/open.ts","../src/Engine/Actions/openWithKey.ts","../src/Engine/gameEvents.ts","../src/Engine/defaultTexts.ts","../node_modules/nostics/dist/index.mjs","../node_modules/@vue/devtools-shared/dist/index.js","../node_modules/perfect-debounce/dist/index.mjs","../node_modules/hookable/dist/index.mjs","../node_modules/@vue/devtools-kit/dist/index.js","../node_modules/pinia/dist/pinia.js","../src/UI/StateStore.ts","../src/UI/Components/AppShell.vue","../src/UI/Components/AppShell.vue","../src/StartupLogger.ts","../src/UI/helpers.ts","../src/UI/startup.ts","../src/UI/Components/Common/ModalDialog.vue","../src/UI/Components/Common/ModalDialog.vue","../src/UI/Composables/CustomCursor.ts","../src/UI/Composables/LocationMap.ts","../src/UI/Composables/playStateWatch.ts","../src/UI/Composables/Sound.ts","../src/UI/Composables/TextFeatures.ts","../src/UI/Composables/VisualFeatures.ts"],"sourcesContent":["export const enum StateProperties {\n Id = 'ss_uniqueId',\n Added = 'ss_added',\n Deleted = 'ss_deleted',\n \n // A marker to see that actions have been performed and should not be repeated.\n // This is used for e.g. initializing trader stock on a first visit.\n Triggered = 'ss_triggered'\n}","import {EquipmentType, IItem, ILocation, IParty}from 'storyScript';\nimport {StateProperties} from \"./stateProperties\";\n\nconst functionRenameRegex = /\\$.+/i;\n\nexport function compareString(left: string, right: string): boolean {\n if ((left === undefined && right === undefined) || (left === null && right === null)) {\n return true;\n } else if ((left === null || left === undefined) || (right === null || right === undefined)) {\n return false;\n }\n\n return left.toLowerCase() === right.toLowerCase();\n}\n\nexport function getId(id: Function | string) {\n let actualId: string;\n\n if (typeof id === 'function') {\n // This is a workaround with function names changing when building for production.\n // With Vite 7, we have e.g. Start becoming Start$2.\n /* v8 ignore next 3 */\n actualId = id.name.replace(functionRenameRegex, '');\n } else {\n actualId = id;\n }\n\n return actualId?.toLowerCase();\n}\n\nexport function isDataRecord(item: any[]): boolean {\n // Check for either object or function values, as tuples are used to store actions as objects and functions now.\n return item?.length && item.length === 2 && typeof (item[0]) === 'string' && (typeof (item[1]) === 'object' || typeof (item[1]) === 'function');\n}\n\nexport function getKeyPropertyNames(item: any, includeUniqueIds?: boolean): { first: string, second: string } {\n if (item === undefined) {\n return {first: null, second: null};\n }\n\n if (isDataRecord(item)) {\n return {first: '0', second: null};\n }\n\n let firstKeyProperty = includeUniqueIds && item[StateProperties.Id] !== undefined ? <string>StateProperties.Id : null;\n firstKeyProperty ??= item.id !== undefined ? 'id' : null;\n firstKeyProperty ??= item.target !== undefined ? 'target' : null;\n firstKeyProperty ??= item.tool !== undefined ? 'tool' : null;\n let secondKeyProperty = item.type !== undefined ? 'type' : null;\n secondKeyProperty ??= item.combinationType !== undefined ? 'combinationType' : null;\n\n return {first: firstKeyProperty, second: secondKeyProperty};\n}\n\nexport function propertyMatch(first: any, second: any): boolean {\n if (first === undefined || second === undefined) {\n return false;\n }\n\n let {first: firstProperty, second: secondProperty} = getKeyProperties(first, second);\n\n if (firstProperty && secondProperty) {\n return getValue(first[firstProperty]) === getValue(second[firstProperty])\n && getValue(first[secondProperty]) === getValue(second[secondProperty]);\n }\n\n if (firstProperty || secondProperty) {\n return (firstProperty && getValue(first[firstProperty]) === getValue(second[firstProperty])) ||\n (secondProperty && getValue(first[secondProperty]) === getValue(second[secondProperty]));\n }\n\n return false;\n}\n\nexport function getPlural(name: string): string {\n let plural: string;\n\n if (name.endsWith('y')) {\n plural = name.substring(0, name.length - 1) + 'ies';\n } else if (name.endsWith('s')) {\n plural = name;\n } else {\n plural = name + 's';\n }\n\n return plural;\n}\n\nexport function getSingular(name: string): string {\n let singular: string;\n\n if (name.endsWith('ies')) {\n singular = name.substring(0, name.length - 3) + 'y';\n } else if (name.endsWith('e')) {\n singular = name\n } else {\n singular = name.substring(0, name.length - 1);\n }\n\n return singular;\n}\n\nexport function parseHtmlDocumentFromString(document: string) {\n const parser = new DOMParser();\n return parser.parseFromString(document, 'text/html');\n}\n\nexport function addHtmlSpaces(text: string): string {\n if (!text) {\n return null;\n }\n\n if (text.substring(0, 1).trim() !== '' && !text.startsWith(' ')) {\n text = ' ' + text;\n }\n\n if (text.substring(text.length - 1, 1).trim() !== '' && text.substring(text.length - 6, 6) !== ' ') {\n text = text + ' ';\n }\n\n return text;\n}\n\nexport function isEmpty(object: any, property?: string) {\n const objectToCheck = property ? object[property] : object;\n\n if (objectToCheck) {\n return Array.isArray(objectToCheck) ? objectToCheck.length === 0 : Object.keys(objectToCheck).length === 0;\n }\n\n return true;\n}\n\nexport function equals<T extends { id?: string } | ILocation>(entity: T | string, definition: () => T): boolean {\n const id = (entity as { id?: string })?.id ?? getId(entity as Function);\n return id ? compareString(id, definition.name) : false;\n}\n\nexport function hasItem(party: IParty, item: IItem | string): boolean {\n let hasItem = false;\n\n // Check item available. Item list first, equipment second.\n party.characters.forEach(c => {\n if (hasItem) {\n return;\n }\n\n hasItem = c.items.get(item) !== undefined;\n\n if (hasItem) {\n return;\n }\n \n for (const i in c.equipment) {\n const slotItem = <IItem>c.equipment[i];\n hasItem = slotItem && compareString(slotItem.id, (item as IItem)?.id ?? item as string);\n\n if (hasItem) {\n return;\n }\n }\n });\n \n return hasItem;\n}\n\nexport function createPromiseForCallback<T>(callBack: Function): { promise: Promise<T>, promiseCallback: () => void } {\n let resolveFunc = null;\n\n const promiseCallback = () => {\n const callBackResult = callBack();\n Promise.resolve(callBackResult).then(() => {\n resolveFunc?.();\n });\n }\n\n const promiseFunc = function (resolve: any) {\n resolveFunc = resolve;\n }\n\n const promise = new Promise<T>(promiseFunc);\n\n return {promise, promiseCallback};\n}\n\nexport function wait(timeInMs: number, callBack: Function): Promise<void> {\n const {promise, promiseCallback} = createPromiseForCallback<void>(callBack);\n\n setTimeout(() => {\n promiseCallback();\n }, timeInMs);\n\n return promise;\n}\n\nexport function interval(intervalTimeInMs: number, repeat: number, intervalCallback: Function, finalCallback?: Function): Promise<void> {\n const {promise, promiseCallback} = createPromiseForCallback<void>(finalCallback ?? (() => {\n }));\n\n let count = 0;\n\n const interval = setInterval(() => {\n count++;\n intervalCallback();\n\n if (count >= repeat) {\n clearInterval(interval);\n\n if (finalCallback) {\n setTimeout(() => {\n promiseCallback();\n }, intervalTimeInMs);\n } else {\n promiseCallback();\n }\n }\n }, intervalTimeInMs);\n\n return promise;\n}\n\nexport function getEquipmentType(slot: EquipmentType | string): string {\n const type = EquipmentType[slot] ?? slot;\n return type.substring(0, 1).toLowerCase() + type.substring(1);\n}\n\nfunction getKeyProperties(pristine: any, current: any): { first?: string, second?: string } {\n const {first: pristineFirst, second: pristineSecond} = getKeyPropertyNames(pristine, true);\n const {first: currentFirst, second: currentSecond} = getKeyPropertyNames(current, true);\n return {\n first: pristineFirst && currentFirst ? pristineFirst : null,\n second: pristineSecond && currentSecond ? pristineSecond : null\n };\n}\n\nfunction getValue(value: any): string {\n return typeof value === 'function' ? value.name.toLowerCase() : value;\n}","export const isDevelopment = process.env.NODE_ENV !== 'production';\n\nexport const isTouchDevice = navigator.maxTouchPoints > 0;\n\nexport const entityTypeRegex = /(actions|enemies|features|items|locations|maps|persons|quests)/;\nexport const IdProperty: string = 'id';\nexport const TypeProperty: string = 'type';\nexport const Features: string = 'features';\nexport const Quests: string = 'quests';\nexport const Items: string = 'items';\nexport const Enemies: string = 'enemies';\nexport const Persons: string = 'persons';\nexport const Locations: string = 'locations';\nexport const Maps: string = 'maps';\nexport const Characters: string = 'characters';\nexport const GameStateSave: string = \"gameState\";\nexport const SaveGamePrefix: string = \"SaveGame_\";\nexport const HighScores: string = 'highScores';\nexport const DescriptionProperty: string = 'description';","import {StateProperties} from \"./stateProperties\";\nimport {compareString, getId, getKeyPropertyNames, isDataRecord, propertyMatch} from \"./utilityFunctions\";\nimport {TypeProperty} from 'src/constants';\n\nconst deletedCollection: string = '_deleted';\n\nif (Function.prototype.proxy === undefined) {\n // This code has to be outside the addFunctionExtensions to have the correct function scope for the proxy.\n Function.prototype.proxy = function (proxyFunction: Function, ...params: any[]) {\n const originalFunction = this;\n\n return (function () {\n // Creating an object to attach the function to is a workaround to not\n // trigger the TypeScript error TS2683: 'this' implicitly has type 'any'.\n const func = {\n func: function () {\n const args = [].slice.call(arguments);\n\n if (originalFunction) {\n args.splice(0, 0, this);\n args.splice(1, 0, originalFunction);\n }\n\n return proxyFunction.apply(this, args.concat(...params));\n }\n };\n\n func.func.isProxy = true;\n return func.func;\n })();\n };\n}\n\nexport function addFunctionExtensions() {\n /* v8 ignore start */\n if (Function.prototype.name === undefined) {\n // This is only used by legacy browsers\n Object.defineProperty(Function.prototype, 'name', {\n get: function () {\n return /function ([^(]*)/.exec(this + '')[1];\n }\n });\n }\n /* v8 ignore stop */\n}\n\nexport function addUniqueId(entity: any) {\n if (entity[TypeProperty] && !entity[StateProperties.Id]) {\n entity[StateProperties.Id] = crypto.randomUUID();\n }\n}\n\nexport function addArrayExtensions() {\n if ((<any>Array.prototype).get === undefined) {\n Object.defineProperty(Array.prototype, 'get', {\n enumerable: false,\n value: function (id: any) {\n let result: any;\n\n if (id) {\n result = find(id, this, false)[0];\n } else {\n result = this[0];\n }\n \n return result;\n }\n });\n }\n\n if ((<any>Array.prototype).all === undefined) {\n Object.defineProperty(Array.prototype, 'all', {\n enumerable: false,\n value: function (id: any) {\n return find(id, this, false).filter(r => !r[StateProperties.Deleted]);\n }\n });\n }\n\n if ((<any>Array.prototype).getDeleted === undefined) {\n Object.defineProperty(Array.prototype, 'getDeleted', {\n enumerable: false,\n value: function () {\n return this[deletedCollection] ?? [];\n }\n });\n }\n\n if ((<any>Array.prototype).add === undefined) {\n Object.defineProperty(Array.prototype, 'add', {\n enumerable: false,\n writable: true,\n value: function (entity: any) {\n if (entity === undefined) {\n return;\n }\n\n let deleted: any;\n\n // Add a unique id to identify the add record if it doesn't have one yet, so we can\n // match it to a delete record when appropriate. Otherwise, try and get a matching \n // delete record to see whether the record originally came from this array.\n if (entity[StateProperties.Id]) {\n deleted = this.getDeleted()?.find((e: {\n [StateProperties.Id]: string;\n }) => e[StateProperties.Id] === entity[StateProperties.Id]);\n } else {\n addUniqueId(entity);\n }\n\n // If an existing delete record is found, the item was originally removed from this array.\n // Remove the deleted record, the added flag and unique id so the original situation is\n // restored. Otherwise, add the added flag.\n if (deleted) {\n const deletedItems = this[deletedCollection];\n deletedItems.splice(deletedItems.indexOf(deleted), 1);\n delete entity[StateProperties.Id];\n delete entity[StateProperties.Added];\n } else if (isDataRecord(entity)) {\n entity[1][StateProperties.Added] = true;\n }\n else {\n entity[StateProperties.Added] = true;\n }\n\n Array.prototype.push.call(this, entity);\n }\n });\n }\n\n if ((<any>Array.prototype).delete === undefined) {\n Object.defineProperty(Array.prototype, 'delete', {\n enumerable: false,\n writable: true,\n value: function (item: any) {\n if (item === undefined) {\n return;\n }\n\n const collection = this;\n const firstCollectionItem = collection[0];\n \n if (firstCollectionItem \n && Array.isArray(firstCollectionItem) \n && firstCollectionItem.length === 2 \n && typeof firstCollectionItem[0] === 'string') {\n item = collection.get(item);\n }\n \n const index = findIndex(collection, item);\n\n if (index === -1) {\n return;\n }\n \n // When an id was passed in, replace the item with the actual entity so we \n // have the information we need to create the deletion record.\n if (typeof item === 'string') {\n item = collection[index];\n }\n\n Array.prototype.splice.call(this, index, 1);\n collection[deletedCollection] = collection[deletedCollection] || [];\n\n // If a deletion record is deleted, simply move it to the deleted collection.\n if (item[StateProperties.Deleted]) {\n collection[deletedCollection].push(item);\n return item;\n }\n\n // Only add a deletion record when the item is removed from the array and the\n // item does not have the 'added' flag. Otherwise, it came from another array\n // that has the deletion record for this item.\n if (!item[StateProperties.Added]) {\n // Add a unique id to the item to track it if it doesn't have one yet.\n addUniqueId(item);\n\n const {first, second} = getKeyPropertyNames(item);\n let keyProps: { [x: string]: any; };\n\n if (first && second) {\n keyProps = {[first]: item[first], [second]: item[second]};\n } else if (first) {\n keyProps = {[first]: item[first]}\n } else {\n keyProps = {[second]: item[second]};\n }\n\n if (item[StateProperties.Id]) {\n collection[deletedCollection].push({\n ...keyProps,\n [StateProperties.Deleted]: true,\n [StateProperties.Id]: item[StateProperties.Id]\n });\n } else {\n collection[deletedCollection].push({\n ...keyProps,\n [StateProperties.Deleted]: true\n });\n }\n }\n\n return item;\n }\n });\n }\n\n if ((<any>Array.prototype).clear === undefined) {\n Object.defineProperty(Array.prototype, 'clear', {\n enumerable: false,\n value: function () {\n const collection = [...this];\n\n collection.forEach(e => {\n this.delete(e);\n });\n }\n });\n }\n}\n\nfunction findIndex(collection: any[], item: any) {\n let entry: any;\n\n if (isDataRecord(item)) {\n entry = collection.find(e => e[0] === item[0]);\n } else {\n entry = find(item, collection, false)[0];\n }\n\n let index: number;\n\n if (entry === undefined) {\n index = collection.indexOf(item);\n } else {\n index = collection.indexOf(entry);\n }\n \n return index;\n}\n\nfunction find(id: any, array: any[], usePropertyMatch: boolean): any[] {\n if (typeof id === 'object') {\n let result = Array.prototype.filter.call(array, (x: any) => x === id);\n\n if (result.length === 0 && usePropertyMatch) {\n result = Array.prototype.filter.call(array, p => propertyMatch(id, p));\n }\n\n return result;\n }\n\n id = getId(id);\n\n return Array.prototype.filter.call(array, (x: { id: string, target: Function | string } | Function) => {\n let currentId: string | Function;\n \n if (typeof x === 'function') {\n currentId = x;\n } else if (Array.isArray(x) && x.length === 2) {\n currentId = x[0];\n \n } else {\n currentId = x.target ?? x.id;\n }\n\n return compareString(getId(currentId), id) || (x[StateProperties.Id] && compareString(x[StateProperties.Id], id));\n });\n}","import {IAutoplayService, IAutoplayStep, IDemoMode, IGame, IRules}from 'storyScript';\n\nexport class AutoplayService implements IAutoplayService {\n\n private _demoTimer: NodeJS.Timeout;\n\n constructor(private _game: IGame, private _rules: IRules) {\n }\n\n start = (steps: IAutoplayStep[], callback?: () => void): void => {\n this._game.autoplaying = true;\n this.runAutoplayStep(steps, 0, callback);\n }\n\n stop = (): void => {\n this._game.autoplaying = false;\n clearTimeout(this._demoTimer);\n }\n\n startDemoMode = (demoConfig: IDemoMode, restartCallback: () => void): void => {\n this._game.autoplaying = false;\n\n this._demoTimer = setTimeout(() => {\n this._game.autoplaying = true;\n const delay = this._rules.setup?.titleScreen?.transitionDelay ?? 0;\n const transitionDelay = (typeof delay === 'number' ? delay : parseFloat(delay)) * 1000;\n\n const delayedCallback = () => {\n setTimeout(() => {\n restartCallback();\n }, transitionDelay);\n }\n\n this._demoTimer = setTimeout(() => {\n this.runAutoplayStep(demoConfig.steps, 0, delayedCallback);\n }, transitionDelay);\n }, demoConfig.startDelay)\n }\n\n private runAutoplayStep = (steps: IAutoplayStep[], stepNumber: number, restartCallback: () => void): void => {\n if (stepNumber >= steps.length) {\n this._demoTimer = setTimeout(() => {\n this._game.autoplaying = false;\n clearTimeout(this._demoTimer);\n restartCallback();\n }, steps[stepNumber - 1].delay);\n\n return;\n }\n\n const currentStep = steps[stepNumber];\n\n this._demoTimer = setTimeout(() => {\n currentStep.action(this._game);\n stepNumber++;\n this.runAutoplayStep(steps, stepNumber, restartCallback);\n }, currentStep.delay);\n }\n}","import {\n GameState,\n ICharacter,\n ICharacterService,\n ICreateCharacter,\n ICreateCharacterAttribute,\n ICreateCharacterAttributeEntry,\n ICreateCharacterStep,\n IDataService,\n IGame,\n IItem,\n IQuest,\n IRules\n} from 'storyScript';\nimport {getEquipmentType} from '../utilityFunctions';\n\nexport class CharacterService implements ICharacterService {\n constructor(private readonly _dataService: IDataService, private readonly _game: IGame, private readonly _rules: IRules) {\n }\n\n getSheetAttributes = (): string[] => this._rules.character.getSheetAttributes?.() || [];\n\n setupCharacter = (): ICreateCharacter => {\n const sheet = (this._rules.character.getCreateCharacterSheet?.()) || {steps: []};\n this.prepareSheet(sheet);\n this._game.createCharacterSheet = sheet;\n return sheet;\n }\n\n limitSheetInput = (value: number, attribute: ICreateCharacterAttribute, entry: ICreateCharacterAttributeEntry): void => {\n if (!isNaN(value)) {\n let totalAssigned = 0;\n\n attribute.entries.forEach((innerEntry, index) => {\n if (index !== attribute.entries.indexOf(entry)) {\n totalAssigned += <number>innerEntry.value || 1;\n }\n });\n\n if (totalAssigned + value > attribute.numberOfPointsToDistribute) {\n value = attribute.numberOfPointsToDistribute - totalAssigned;\n }\n\n entry.value = value;\n\n if (entry.value > entry.max) {\n entry.value = entry.max;\n } else if (entry.value < entry.min) {\n entry.value = entry.min;\n }\n } else {\n entry.value = entry.min;\n }\n }\n\n distributionDone = (sheet: ICreateCharacter, step?: ICreateCharacterStep): boolean => {\n let done = true;\n\n if (step) {\n done = this.checkStep(step);\n } else if (sheet?.steps) {\n sheet.steps.forEach(step => {\n done = this.checkStep(step);\n });\n }\n\n return done;\n }\n\n createCharacter = (game: IGame, characterData: ICreateCharacter): ICharacter => {\n let character: ICharacter;\n\n if (this._rules.character.createCharacter) {\n\n character = this._rules.character.createCharacter(game, characterData);\n character.currentHitpoints = character.hitpoints;\n this.processDefaultSettings(character, characterData);\n } else {\n // Set a placeholder character to keep the game logic functional when no character is used.\n character = <any>{\n name: null\n };\n }\n\n return character;\n }\n\n setupLevelUp = (): ICreateCharacter => {\n const sheet = this._rules.character.getLevelUpSheet?.();\n\n if (sheet) {\n this.prepareSheet(sheet);\n this._game.createCharacterSheet = sheet;\n }\n\n return sheet;\n }\n\n levelUp = (character: ICharacter): ICharacter => {\n const sheet = this._game.createCharacterSheet;\n\n if (this._rules.character.levelUp?.(character, sheet)) {\n this.processDefaultSettings(character, sheet);\n this._dataService.saveGame(this._game);\n }\n\n this._game.state = GameState.Play;\n return character;\n }\n\n isSlotUsed = (character: ICharacter, slot: string): boolean => {\n if (character?.equipment) {\n if (character.equipment[slot] === undefined) {\n return false;\n }\n\n return this._rules.character?.isSlotUsed ? this._rules.character.isSlotUsed(character, slot) : true;\n }\n\n return false;\n }\n\n questStatus = (quest: IQuest): string => typeof quest.status === 'function' ? (<any>quest).status(this._game, quest, quest.checkDone(this._game, quest)) : quest.status;\n\n checkEquipment = (): void => {\n this._game.party.characters.forEach(c => {\n if (c.equipment) {\n Object.keys(c.equipment).forEach(k => {\n const item = <IItem>c.equipment[k];\n\n if (!item?.equipmentType) {\n return;\n }\n\n const itemType = Array.isArray(item.equipmentType) ? item.equipmentType : [item.equipmentType];\n let valid = true;\n\n if (!item.usesMultipleSlots) {\n valid = itemType.find(t => getEquipmentType(t) === k) !== undefined;\n } else {\n for (const i in itemType) {\n const slot = getEquipmentType(itemType[i]);\n const slotItem = c.equipment[slot];\n\n if (slotItem && (slotItem === item || slotItem.id === item.id)) {\n // When restoring data, a single item occupying multiple slots will be duplicated,\n // so each slot contains a separate item of the same kind. Remove the duplicates here.\n c.equipment[slot] = item;\n } else {\n valid = false;\n }\n }\n }\n\n if (!valid) {\n c.equipment[k] = null;\n c.items.push(item);\n }\n });\n }\n })\n }\n\n private readonly prepareSheet = (sheet: ICreateCharacter): void => {\n if (sheet.steps.length == 0) {\n return;\n }\n\n sheet.currentStep = 0;\n\n if (sheet.steps[0].questions?.[0]?.entries.length > 0) {\n sheet.steps[0].questions[0].selectedEntry = sheet.steps[0].questions[0].entries[0];\n }\n\n if (sheet.steps[0].initStep) {\n sheet.steps[0].initStep(this._game.party, sheet, sheet.steps[0], undefined);\n }\n\n this.setFinish(sheet);\n\n sheet.nextStep = (data: ICreateCharacter, next: boolean) => {\n if (next !== undefined && next !== null && !next) {\n this.setFinish(data);\n return;\n }\n\n const selector = data.steps[data.currentStep].nextStepSelector;\n const previousStep = data.currentStep;\n\n if (selector) {\n data.currentStep = typeof selector === 'function' ? (<any>selector)(this._game.party, data, data.steps[data.currentStep]) : selector;\n } else {\n data.currentStep++;\n }\n\n const currentStep = data.steps[data.currentStep];\n\n if (currentStep.initStep) {\n currentStep.initStep(this._game.party, data, currentStep, previousStep);\n }\n\n if (currentStep.attributes) {\n currentStep.attributes.forEach(attr => {\n attr.entries.forEach(entry => {\n if (entry.min) {\n entry.value = entry.min;\n }\n });\n });\n }\n\n if (currentStep.questions) {\n currentStep.questions.forEach(question => {\n if (question.entries?.length) {\n question.selectedEntry = question.entries[0];\n }\n });\n }\n };\n }\n\n private readonly checkStep = (step: ICreateCharacterStep): boolean => {\n let done = true;\n\n if (step.attributes) {\n let totalAssignedAll = 0;\n\n step.attributes.forEach(attr => {\n let totalAssigned = 0;\n let textChoicesFilled = 0;\n\n attr.entries.forEach((entry) => {\n if (!entry.max) {\n if (entry.value) {\n textChoicesFilled += 1;\n }\n } else {\n totalAssigned += <number>entry.value || 0;\n }\n });\n\n totalAssignedAll += totalAssigned;\n done = totalAssigned === attr.numberOfPointsToDistribute || textChoicesFilled === attr.entries.length;\n });\n\n if (step.numberOfAttributePoints) {\n done = totalAssignedAll === step.numberOfAttributePoints;\n }\n }\n\n return done;\n }\n\n private readonly processDefaultSettings = (character: ICharacter, characterData: ICreateCharacter): void => {\n if (!characterData.steps) {\n return;\n }\n\n characterData.steps.forEach(step => {\n if (step.attributes) {\n step.attributes.forEach(attribute => {\n attribute.entries.forEach(entry => {\n if (character.hasOwnProperty(entry.attribute)) {\n character[entry.attribute] = entry.value;\n }\n });\n });\n }\n });\n\n characterData.steps.forEach(step => {\n if (step.questions) {\n step.questions.forEach(question => {\n if (question.selectedEntry && character.hasOwnProperty(question.selectedEntry.value)) {\n character[question.selectedEntry.value] += question.selectedEntry.bonus;\n }\n });\n }\n });\n }\n\n private readonly setFinish = (data: ICreateCharacter): void => {\n if (data?.steps) {\n const activeStep = data.steps[data.currentStep];\n\n if (activeStep.questions) {\n activeStep.finish = activeStep.questions.filter(q => q.selectedEntry.finish).length > 0;\n }\n }\n }\n}","import {\n GameState,\n ICharacter,\n ICombatService,\n ICombatSetup,\n ICombatTurn,\n IEnemy,\n IGame,\n IInterfaceTexts,\n IItem,\n IRules,\n PlayState,\n TargetType,\n} from 'storyScript';\nimport {StateProperties} from \"src/Engine/stateProperties\";\nimport {addUniqueId} from \"src/Engine/arrayAndFunctionExtensions\";\n\nexport class CombatService implements ICombatService {\n constructor(private readonly _game: IGame, private readonly _rules: IRules, private readonly _texts: IInterfaceTexts) {\n }\n\n initCombat = (): void => {\n this._game.combatLog.length = 0;\n this._rules.combat?.initCombat?.(this._game, this._game.currentLocation);\n this.initCombatRound(true);\n this._game.playState = PlayState.Combat;\n this._game.combat.enemies.forEach(enemy => enemy.onAttack?.(this._game, enemy));\n }\n\n fight = (combat: ICombatSetup<ICombatTurn>, retaliate?: boolean): Promise<void> | void => {\n if (!this._rules.combat?.fight) {\n return;\n }\n\n const promise = this._rules.combat.fight(this._game, combat, retaliate);\n\n return Promise.resolve(promise).then(() => {\n combat.forEach((s, i) => {\n const defeated = (s.item?.targetType === TargetType.Enemy || (<any>s.target)?.type === TargetType.Enemy.toLowerCase())\n && s.target?.currentHitpoints <= 0\n && (s.targetDefeated === undefined || s.targetDefeated);\n\n if (defeated) {\n this.enemyDefeated(combat, this._game.party.characters[i], s.target);\n }\n });\n\n if (this._game.party.characters.filter(c => c.currentHitpoints > 0).length == 0) {\n this._game.playState = null;\n this._game.state = GameState.GameOver;\n }\n\n if (combat.enemies.filter(c => c.currentHitpoints >= 0).length == 0) {\n return;\n }\n\n this.initCombatRound(false);\n });\n }\n\n isSelectable = (item: IItem): boolean => item?.selectable || item?.selectable === undefined;\n\n canTarget = (item: IItem, target: IEnemy | ICharacter, character: ICharacter) => {\n const type = (<any>target).type;\n let canTarget = false;\n\n if (type === 'enemy') {\n canTarget = item.targetType === TargetType.Enemy;\n } else {\n switch (item.targetType) {\n case TargetType.Ally:\n canTarget = target !== character;\n break;\n case TargetType.Self:\n canTarget = target === character;\n break;\n case TargetType.AllyOrSelf:\n canTarget = true;\n break;\n }\n }\n\n if (!canTarget || !item.canTarget) {\n return canTarget;\n }\n\n return item.canTarget(this._game, item, target);\n }\n\n private readonly initCombatRound = (newFight: boolean) => {\n this._game.combat = newFight ? <ICombatSetup<ICombatTurn>>[] : this._game.combat;\n\n if (!this._game.combat.enemies) {\n this._game.combat.enemies = [];\n\n const enemiesPerType = <Record<string, number[]>>{};\n const activeEnemies = this._game.currentLocation.enemies.filter(e => !e.inactive);\n\n activeEnemies.forEach((e: any, i) => {\n enemiesPerType[e.id] ??= [];\n e.index = enemiesPerType[e.id].length + 1;\n enemiesPerType[e.id].push(i);\n });\n\n activeEnemies.forEach(e => {\n // Add a unique id here so we can track multiple enemies of the same type.\n // Combat will end only when the enemies are defeated, at which point they will\n // be assigned a unique id anyway.\n addUniqueId(e);\n const name = this.getTargetName(enemiesPerType, e);\n const copy = {...e};\n copy.name = name;\n copy.currentHitpoints = copy.hitpoints;\n this._game.combat.enemies.push(copy);\n });\n }\n\n this._game.combat.round = newFight ? 1 : ++this._game.combat.round;\n this._game.combat.roundHeader = this._texts.format(this._texts.combatRound, [this._game.combat.round.toString()]);\n this._game.combat.noActionText = this._texts.noCombatAction;\n const enemies = this._game.combat.enemies = this._game.combat.enemies.filter(e => e.currentHitpoints > 0);\n const characters = this._game.combat.characters = this._game.party.characters;\n\n characters.forEach((c, i) => {\n const allies = characters.filter(a => a != c);\n const items = this.getItems(c, enemies, allies);\n\n // Remember the last item used and enemy attacked and select them when they are still valid.\n let previousItem = this._game.combat[i]?.item;\n previousItem = this.isSelectable(previousItem) ? previousItem : undefined;\n const previousTarget = this._game.combat[i]?.target;\n let newItem = (previousItem && items.find(i => i === previousItem)) ?? items.filter(i => this.isSelectable(i))[0];\n let {targets, newTarget} = this.getTarget(newItem, enemies, allies, previousTarget, previousItem);\n\n if (!newTarget) {\n newItem = items.filter(i => this.isSelectable(i) && (!i.canTarget || (newTarget && i.canTarget(this._game, newItem, newTarget))))[0];\n ({\n targets,\n newTarget\n } = this.getTarget(newItem, enemies, allies, this._game.combat[i]?.target, previousItem));\n newTarget ??= targets[0];\n }\n\n this._game.combat[i] = <ICombatTurn>{\n character: c,\n targetsAvailable: enemies.concat(allies),\n previousTarget: previousTarget,\n target: newTarget,\n itemsAvailable: items,\n previousItem: previousItem,\n item: newItem\n };\n });\n\n this._rules.combat?.initCombatRound?.(this._game, this._game.combat);\n }\n\n private readonly getItems = (character: ICharacter, enemies: IEnemy[], allies: ICharacter[]) => {\n const items = character.combatItems ?? [];\n\n Object.keys(character.equipment).forEach(k => {\n const item = <IItem>character.equipment[k];\n\n if ((item?.useInCombat || item?.targetType) && items.indexOf(item) === -1) {\n items.push(item)\n }\n });\n\n items.forEach(i => {\n if (this._rules.combat.itemIsSelectable) {\n i.selectable = this._rules.combat.itemIsSelectable(this._game, i);\n }\n\n if (!i.canTarget) {\n return;\n }\n\n i.selectable = false;\n let targets;\n\n switch (i.targetType) {\n case TargetType.Enemy: {\n targets = enemies;\n break;\n }\n case TargetType.Ally: {\n targets = allies;\n break;\n }\n case TargetType.AllyOrSelf: {\n targets = allies.concat([character]);\n break;\n }\n case TargetType.Self: {\n targets = [character];\n break;\n }\n }\n\n for (let x = 0; x < targets.length; x++) {\n const target = targets[x];\n if (i.canTarget(this._game, i, target)) {\n i.selectable = true;\n return;\n }\n }\n });\n\n items.sort((a: IItem, b: IItem) => b.targetType?.localeCompare(a.targetType) || a.name.localeCompare(b.name));\n return items;\n }\n\n private readonly getTarget =\n (newItem: IItem, enemies: IEnemy[], allies: ICharacter[], previousTarget: IEnemy | ICharacter, previousItem?: IItem):\n { targets: IEnemy[] | ICharacter[], newTarget?: IEnemy | ICharacter } => {\n let targetType = newItem?.targetType ?? TargetType.Enemy;\n let targets = targetType === TargetType.Enemy ? enemies : allies;\n let newTarget = newItem === previousItem && previousTarget ?\n targets.find(i => i === previousTarget && (!newItem?.canTarget || newItem.canTarget(this._game, newItem, i)))\n : undefined;\n return {targets, newTarget};\n }\n\n private readonly getTargetName = (enemiesPerType: Record<string, number[]>, target: any): string => {\n const ofSameType = enemiesPerType[target.id];\n\n if (ofSameType.length === 1) {\n return target.name;\n }\n\n return this._texts.format(this._texts.enemyCombatName, [target.name, target.index.toString()]);\n }\n\n private readonly enemyDefeated = (combat: ICombatSetup<ICombatTurn>, character: ICharacter, enemy: IEnemy): void => {\n combat.winnings ??= {\n currency: 0,\n itemsWon: [],\n enemiesDefeated: []\n };\n\n if (enemy.items) {\n const items = [...enemy.items];\n\n items.forEach((item: IItem) => {\n if (!this._rules.combat?.beforeDrop || this._rules.combat.beforeDrop(this._game, character, enemy, item)) {\n enemy.items.delete(item);\n this._game.currentLocation.items.add(item);\n combat.winnings.itemsWon.push(item);\n }\n });\n }\n\n if (enemy.currency) {\n this._game.party.currency ??= 0;\n this._game.party.currency += enemy.currency || 0;\n combat.winnings.currency += enemy.currency || 0;\n }\n\n this._game.statistics.enemiesDefeated ??= 0;\n this._game.statistics.enemiesDefeated += 1;\n combat.winnings.enemiesDefeated.push(enemy);\n this._game.currentLocation.enemies.delete(enemy[StateProperties.Id]);\n this._rules.combat?.enemyDefeated?.(this._game, character, enemy);\n enemy.onDefeat?.(this._game, enemy);\n }\n}","import {\n IActiveCombination,\n ICombinable,\n ICombinationAction,\n ICombinationService,\n ICombineResult,\n IEnemy,\n IFeature,\n IGame,\n IInterfaceTexts,\n IItem,\n IPerson,\n IRules,\n removeItemFromParty\n} from 'storyScript';\nimport {compareString, getId} from 'src/Engine/utilityFunctions';\n\nexport class CombinationService implements ICombinationService {\n\n private readonly _combinationActions: ICombinationAction[] = [];\n\n constructor(private readonly _game: IGame, private readonly _rules: IRules, private readonly _texts: IInterfaceTexts) {\n this._combinationActions = this._rules.combinations?.combinationActions ?? [];\n }\n\n get combinationActions(): ICombinationAction[] {\n return this._combinationActions;\n }\n\n getCombineClass = (tool: ICombinable): string => {\n let className: string;\n\n if (tool) {\n className = this._game.combinations.activeCombination ?\n this._game.combinations.activeCombination.selectedTool && this._game.combinations.activeCombination.selectedTool.id === tool.id ?\n 'combine-active-selected'\n : 'combine-selectable' : '';\n } else {\n className = this._game.combinations.activeCombination ? 'combine-active-hide' : '';\n }\n\n return className;\n }\n\n setActiveCombination = (combination: ICombinationAction): void => {\n this._game.combinations.combinationResult.reset();\n\n if (!combination) {\n return;\n }\n\n if (this._game.combinations.activeCombination && this._game.combinations.activeCombination.selectedCombinationAction === combination) {\n this._game.combinations.activeCombination = null;\n return;\n }\n\n combination.requiresTool = (combination.requiresTool === undefined) || combination.requiresTool === true;\n\n this._game.combinations.activeCombination = {\n selectedCombinationAction: combination,\n selectedTool: null\n };\n\n this._game.combinations.combinationResult.text = combination.requiresTool ? combination.text : combination.text + ' ' + (combination.preposition || '');\n }\n\n tryCombination = (target: ICombinable): ICombineResult => {\n let combo = this._game.combinations.activeCombination;\n let result = <ICombineResult>{\n success: false,\n text: ''\n };\n\n if (!target || (target as IFeature).interactive === false) {\n return result;\n }\n\n if (!combo) {\n const defaultAction = this.combinationActions.filter(c => c.isDefault)[0];\n\n if (defaultAction) {\n combo = {\n selectedCombinationAction: defaultAction,\n selectedTool: null\n }\n }\n }\n\n if (!combo?.selectedCombinationAction) {\n return result;\n }\n\n combo.selectedCombinationAction.preposition = combo.selectedCombinationAction.preposition || '';\n\n if (combo.selectedCombinationAction.requiresTool && !combo.selectedTool) {\n this._game.combinations.combinationResult.text = combo.selectedCombinationAction.text + ' ' + target.name + ' ' + combo.selectedCombinationAction.preposition;\n combo.selectedTool = target;\n return result;\n }\n\n result = this.performCombination(target, combo);\n\n if (result.success) {\n this._rules.combinations?.success?.(this._game, combo, target);\n\n if (result.removeTarget) {\n this.removeFeature(target);\n }\n\n if (result.removeTool && combo.selectedTool.id != target.id) {\n this.removeFeature(combo.selectedTool);\n }\n }\n\n this._game.combinations.combinationResult.text = result.text;\n this._game.combinations.combinationResult.done = true;\n\n return result;\n }\n\n private readonly performCombination = (target: ICombinable, combo: IActiveCombination): ICombineResult => {\n const tool = combo.selectedTool;\n const type = combo.selectedCombinationAction;\n const prepositionText = combo.selectedCombinationAction.preposition ? ' ' + combo.selectedCombinationAction.preposition + ' ' : ' '\n const text = combo.selectedCombinationAction.requiresTool ? combo.selectedCombinationAction.text + ' ' + tool.name + prepositionText + target.name :\n combo.selectedCombinationAction.text + prepositionText + target.name;\n\n this._game.combinations.activeCombination = null;\n\n let combination = target.combinations?.combine ? target.combinations.combine.filter(c => {\n const toolMatch = type.requiresTool && c.tool && this.isMatch(c.tool, tool);\n return c.combinationType === type.text && (!type.requiresTool || toolMatch);\n })[0] : null;\n\n if (!combination) {\n // For items, the order in which the combination is tried shouldn't matter.\n const anyTool = <any>tool;\n\n if (anyTool && anyTool.type === 'item' && target && anyTool.type === 'item') {\n combination = tool.combinations?.combine ? tool.combinations.combine.filter(c => c.combinationType === type.text && this.isMatch(c.tool, target))[0] : null;\n }\n }\n\n const result = <ICombineResult>{\n success: false,\n text: ''\n };\n\n if (combination) {\n const matchResult = combination.match ? combination.match(this._game, target, tool)\n : combo.selectedCombinationAction.defaultMatch ? combo.selectedCombinationAction.defaultMatch(this._game, target, tool)\n : undefined;\n\n if (matchResult === undefined) {\n const entity = <any>target;\n throw new Error(`No match function specified for ${entity.type} ${entity.id} for action ${combination.combinationType}. Neither was a default action specified. Add one or both.`)\n }\n\n result.success = true;\n result.text = typeof matchResult === 'string' ? matchResult : matchResult.text;\n result.removeTarget = typeof matchResult !== 'string' && matchResult.removeTarget;\n result.removeTool = typeof matchResult !== 'string' && matchResult.removeTool;\n } else if (target.combinations?.failText) {\n result.text = typeof target.combinations.failText === 'function' ? target.combinations.failText(this._game, target, tool) : target.combinations.failText;\n } else if (type.failText) {\n result.text = typeof type.failText === 'function' ? type.failText(this._game, target, tool) : type.failText;\n } else {\n result.text = tool ? this._texts.format(this._texts.noCombination, [tool.name, target.name, type.text, type.preposition]) : this._texts.format(this._texts.noCombinationNoTool, [target.name, type.text, type.preposition]);\n }\n\n result.text = text + (result.text ? ': ' + result.text : '')\n return result;\n }\n\n private readonly isMatch = (combineTool: ICombinable, tool: ICombinable): boolean => {\n const combineId = getId(combineTool.id ?? <any>combineTool);\n return compareString(tool.id, combineId);\n }\n\n private readonly removeFeature = (feature: IFeature): void => {\n // Remove the feature from all possible locations. As we use the object\n // reference, objects of the same type should be left alone.\n this._game.currentLocation.features?.delete(feature);\n this._game.currentLocation.destinations?.forEach(d => {\n d.barriers.forEach(([k, b]) => {\n if (b === feature) {\n d.barriers.delete([k, b]);\n }\n })\n });\n\n removeItemFromParty(this._game.party, <IItem>feature);\n this._game.currentLocation.items?.delete(<IItem>feature);\n this._game.currentLocation.enemies?.delete(<IEnemy>feature);\n this._game.currentLocation.persons?.delete(<IPerson>feature);\n }\n}","import {\n IAction,\n IBarrier,\n IBarrierAction,\n ICombinationAction,\n ICombinationService,\n ICommandService,\n IConversationService,\n IDataService,\n IDestination,\n IFeature,\n IGame,\n IItem,\n ILocation,\n ILocationService,\n IPerson,\n ITradeService,\n getItemFromParty\n} from 'storyScript';\n\nexport class CommandService implements ICommandService {\n\n private _combinationActions: ICombinationAction[] = [];\n\n constructor(\n private _locationService: ILocationService,\n private _conversationService: IConversationService,\n private _tradeService: ITradeService,\n private _combinationService: ICombinationService,\n private _dataService: IDataService,\n private _game: IGame) {\n this._combinationActions = this._combinationService.combinationActions;\n }\n\n go = (location: (() => ILocation) | string, saveProgress?: boolean): void => {\n const travel = saveProgress !== false;\n\n this._locationService.changeLocation(location, travel, this._game);\n\n if (travel) {\n this._dataService.saveGame(this._game);\n }\n }\n\n talk = (person: () => IPerson): void => {\n const partner = this._game.currentLocation.persons.get(person);\n\n if (!partner) {\n throw new Error(`No person ${person.name} present at location ${this._game.currentLocation.name}!`);\n }\n\n this._conversationService.talk(partner);\n }\n\n answer = (node: string, reply?: string): void => {\n node ??= 'default';\n const selectedNode = this._game.person.conversation.nodes.find(n => n.node?.toLowerCase() === node);\n\n if (!selectedNode) {\n throw new Error(`No node ${node} exists on the conversation with person ${this._game.person.name}!`);\n }\n\n reply = reply?.toLowerCase();\n const selectedReply = selectedNode.replies.find(r => r.linkToNode?.toLowerCase() == reply || (r.defaultReply && !reply));\n\n if (!selectedReply) {\n throw new Error(`No reply ${reply} exists on conversation node ${node} of person ${this._game.person.name}!`);\n }\n\n this._conversationService.answer(selectedNode, selectedReply);\n }\n\n selectCombination = (combination: string): void => {\n const selectedCombination = this.getCombination(combination);\n this._combinationService.setActiveCombination(selectedCombination);\n }\n\n setTool = (feature: (() => IFeature) | string): void => {\n const selectedTool = this.getFeature(feature);\n\n if (!selectedTool) {\n throw new Error(`No feature ${typeof feature === 'function' ? feature.name : feature} was found to set as tool!`);\n }\n\n this._combinationService.tryCombination(selectedTool);\n }\n\n combine = (combination: string, target: (() => IFeature) | string, tool?: (() => IFeature) | string): void => {\n const selectedCombination = this.getCombination(combination);\n const selectedTarget = this.getFeature(target);\n\n if (!selectedTarget) {\n throw new Error(`No target feature ${typeof target === 'function' ? target.name : target} was found to try combination ${combination}!`);\n }\n\n const selectedTool = tool ? this.getFeature(tool) : null;\n\n if (tool && !selectedTool) {\n throw new Error(`No tool feature ${typeof tool === 'function' ? tool.name : tool} was found to try combination ${combination}!`);\n }\n\n this._game.combinations.activeCombination = {\n selectedCombinationAction: selectedCombination,\n selectedTool: selectedTool\n }\n\n this._game.combinations.tryCombine(selectedTarget);\n }\n\n useAction = (action: string | [string, IAction]): void => {\n const selectedAction = typeof action === 'string' ? this._game.currentLocation.actions.get(action) : action;\n\n if (!selectedAction) {\n throw new Error(`Action ${action} is not present at location ${this._game.currentLocation.name}!`);\n }\n\n this._locationService.executeAction(selectedAction);\n this._dataService.saveGame(this._game)\n }\n\n useBarrierAction = (destination: string | IDestination, barrier: string | [string, IBarrier], action: string | [string, IBarrierAction]): void => {\n const selectedDestination = typeof destination === 'string' ? this._game.currentLocation.destinations.get(destination) : destination;\n\n if (!selectedDestination) {\n throw new Error(`Destination ${destination} is not present at location ${this._game.currentLocation.name}!`);\n }\n\n const selectedBarrier = typeof barrier === 'string' ? selectedDestination.barriers.get(barrier) : barrier;\n\n if (!selectedBarrier) {\n throw new Error(`Barrier ${barrier} is not present on destination ${selectedDestination.name}!`);\n }\n\n const selectedAction = typeof action === 'string' ? selectedBarrier[1].actions.get(action) : action;\n\n if (!selectedAction) {\n throw new Error(`Action ${action} is not present at barrier ${selectedBarrier[0]}!`);\n }\n\n selectedAction[1].execute(this._game, selectedBarrier, selectedDestination);\n selectedBarrier[1].actions.delete(selectedBarrier[1].actions.find(([k, _]) => k === action[0]));\n this._dataService.saveGame(this._game)\n }\n\n trade = (trade: string | (() => IPerson)): void => {\n const partner = this._game.currentLocation.trade.get(trade);\n\n if (!partner) {\n const tradeName = typeof trade === 'string' ? trade : trade.name;\n throw new Error(`No trade ${tradeName} present at location ${this._game.currentLocation.name}!`);\n }\n\n this._tradeService.trade(partner);\n }\n\n buy = (item: (() => IItem)): void => {\n const selectedItem = this._game.trade.buy.items.get(item);\n\n if (!selectedItem) {\n throw new Error(`Trader ${this._game.trade.name} does not have item ${item.name} for sale!`);\n }\n\n this._tradeService.buy(selectedItem, this._game.trade);\n }\n\n sell = (item: (() => IItem)): void => {\n const selectedItem = this._game.trade.sell.items.get(item);\n\n if (!selectedItem) {\n throw new Error(`Item ${item.name} is not available or cannot be sold to ${this._game.trade.name}!`);\n }\n\n this._tradeService.sell(selectedItem, this._game.trade);\n }\n\n private getFeature(feature: (() => IFeature) | string) {\n if (typeof feature === 'string') {\n feature = feature.toLowerCase().replace(/\\s/g, '');\n }\n\n let selectedFeature = this._game.currentLocation.features.get(feature);\n selectedFeature ??= this._game.currentLocation.persons.get(<any>feature);\n selectedFeature ??= this._game.currentLocation.enemies.get(<any>feature);\n selectedFeature ??= getItemFromParty(this._game.party, <any>feature);\n return selectedFeature;\n }\n\n private getCombination = (combination: string) => {\n const selectedCombination = this._combinationActions.find(c => c.text.toLowerCase() === combination.toLowerCase());\n\n if (!selectedCombination) {\n throw new Error(`Combination ${combination} is not defined!`);\n }\n\n return selectedCombination;\n }\n}","import {\n gameEvents,\n ICombinable,\n ICombine,\n ICompiledLocation,\n IDefinitions,\n IDestination,\n IEnemy,\n IFeature,\n IGroupableItem,\n IItem,\n IKey,\n ILocation,\n IMap,\n IPerson,\n IQuest\n} from 'storyScript';\nimport {getId, getPlural, getSingular, parseHtmlDocumentFromString} from './utilityFunctions';\nimport {DescriptionProperty, Enemies, Features, Items, Locations, Maps, Persons, Quests} from 'src/constants';\n\nconst _entityCollections: string[] = [\n 'features',\n 'items',\n 'enemies',\n 'persons',\n 'quests'\n];\n\nconst _gameCollections: string[] = _entityCollections.concat([\n 'actions',\n 'barriers',\n 'combatActions',\n 'enterEvents',\n 'leaveEvents',\n 'triggeredEvents',\n 'trade',\n 'destinations',\n 'combine'\n]);\n\n// The dictionary containing all registered entity keys and their corresponding ids.\nlet _registeredIds: Map<string, string> = new Map<string, string>();\n\n// A record to keep all the entities available, fully build.\nconst _registeredEntities: Record<string, Record<string, any>> = {};\n\nexport function Location(entity: ILocation): ILocation {\n return Create('location', entity);\n}\n\nexport function LocationMap(entity: IMap): IMap {\n return Create('map', entity);\n}\n\nexport function Enemy<T extends IEnemy>(entity: T): T {\n return Create('enemy', entity);\n}\n\nexport function Person<T extends IPerson>(entity: T): T {\n return Create('person', entity);\n}\n\nexport function Item<T extends IItem>(entity: T): T {\n return Create('item', entity);\n}\n\nexport function Key<T extends IKey>(entity: T): T {\n return Create('item', entity);\n}\n\nexport function Feature<T extends IFeature>(entity: T): IFeature {\n return Create('feature', entity);\n}\n\nexport function Quest<T extends IQuest>(entity: T): T {\n return Create('quest', entity);\n}\n\nexport function DynamicEntity<T>(entityFunction: () => T, id?: string): T {\n const compiledEntity = <any>entityFunction();\n const entityKey = getEntityKey(compiledEntity);\n id ??= getId(entityFunction);\n\n if (!id) {\n throw new Error('A dynamic entity needs an id! Either use a named function or specify an id!');\n }\n\n compiledEntity.id = id;\n _registeredIds.set(entityKey, compiledEntity.id);\n return compiledEntity;\n}\n\nexport function customEntity<T, C extends { name: string }>(definition: () => T, customData: C): T {\n if (!customData.name) {\n throw new Error('A custom entity needs a custom name!');\n }\n\n const customEntity = <any>extend(definition(), customData);\n const customEntityKey = getEntityKey(customEntity);\n\n if (!_registeredIds.has(customEntityKey)) {\n _registeredIds.set(customEntityKey, getIdFromName(customEntity));\n }\n\n customEntity.id = _registeredIds.get(customEntityKey);\n return customEntity;\n}\n\nexport function buildEntities(definitions: IDefinitions): Record<string, Record<string, any>> {\n // Build all entities and register them and their ids. The order in which the definitions are read\n // is very important! Entities that can contain other entities should be built AFTER the entities \n // they may contain. Otherwise, the entity id will not be resolved and actions depending on the id\n // to be present cannot be carried out.\n const allDefinitions = [\n Features,\n Quests,\n Items,\n Enemies,\n Persons,\n Locations,\n Maps\n ];\n\n allDefinitions.forEach(p => {\n definitions[p]?.forEach((f: Function) => {\n const compiledEntity = f();\n const entityKey = getEntityKey(compiledEntity);\n const actualId = getId(f);\n\n if (compiledEntity.id && compiledEntity.id !== actualId) {\n throw new Error(`Entity type '${compiledEntity.type}' with id '${actualId}' and \n name '${compiledEntity.name}' has a non-unique entityKey! This means you have two or more \n entities of type '${compiledEntity.type}' that are too similar. The easiest way to avoid\n this issue is to use unique names for your entities.`);\n }\n\n compiledEntity.id = actualId;\n _registeredIds.set(entityKey, compiledEntity.id);\n parseDescriptionData(compiledEntity);\n registerEntity(compiledEntity);\n });\n });\n\n return _registeredEntities;\n}\n\nexport function InitEntityCollection(entity: any, property: string) {\n if (_gameCollections.indexOf(property) === -1) {\n return;\n }\n\n const collection = entity[property] || [];\n\n Object.defineProperty(entity, property, {\n enumerable: true,\n get: function () {\n return collection;\n },\n set: function () {\n const message = entity.type ? `Cannot set collection ${property} on type ${entity.type}!` : `Cannot set collection ${property}!`;\n throw new Error(message);\n }\n });\n\n if (_entityCollections.indexOf(property) > -1 && !collection.add.isProxy) {\n Object.defineProperty(collection, 'add', {\n writable: true,\n value: collection.add.proxy((originalScope: any, originalFunction: any, addedEntity: any) =>\n pushEntity(originalScope, originalFunction, entity, property, addedEntity))\n });\n\n Object.defineProperty(collection, 'delete', {\n writable: true,\n value: collection.delete.proxy((originalScope: any, originalFunction: any, deletedEntity: any) =>\n removeEntity(originalScope, originalFunction, entity, property, deletedEntity))\n });\n\n gameEvents.register(`add-${entity.type}-${property}`);\n gameEvents.register(`delete-${entity.type}-${property}`);\n }\n}\n\nexport function setDestination(destination: IDestination) {\n // Set the barrier selected actions to the first one available for each barrier.\n // Further, replace combine functions with their target ids.\n destination.target = getId(destination.target);\n\n if (destination.barriers) {\n destination.barriers.forEach(([_, b]) => {\n if (b.key) {\n const key = b.key;\n b.key = getId(key);\n }\n\n if (b.combinations?.combine) {\n for (const n in b.combinations.combine) {\n const combination = b.combinations.combine[n];\n combination.tool = <any>getId(<any>combination.tool);\n }\n }\n });\n }\n}\n\nexport function getBasicFeatureData(location: ICompiledLocation, node: HTMLElement): IFeature {\n const nameAttribute = node.attributes['name']?.nodeValue?.toLowerCase();\n\n if (!nameAttribute) {\n throw new Error('There is no name attribute for a feature node for location ' + location.id + '.');\n }\n\n // The second part of this line is a workaround for features that are initialized inline. When building locations \n // from the location definitions, their ids get set only after the location's visual features have been processed.\n const feature = location.features.get(nameAttribute) ?? location.features.filter(f => getIdFromName(f) === nameAttribute)[0];\n\n // This is a workaround to restore the description for features that originally have only a placeholder in the \n // location description and are added later to the location's feature collection. As descriptions are not saved,\n // the description is lost when the browser refreshes.\n if (feature && !feature.description && _registeredEntities.features) {\n const pristineFeature = Object.values(_registeredEntities.features).get(feature.id);\n\n if (pristineFeature?.description) {\n feature.description = pristineFeature.description;\n\n }\n }\n\n return feature;\n}\n\nexport function getParsedDocument(tag: string, value?: string, wrapIfNotFound?: boolean) {\n if (!value) {\n return null;\n }\n\n let htmlDoc = parseHtmlDocumentFromString(value);\n let elements = htmlDoc.getElementsByTagName(tag);\n\n if (!elements.length && wrapIfNotFound) {\n value = `<${tag}>${value}</${tag}>`;\n htmlDoc = parseHtmlDocumentFromString(value);\n elements = htmlDoc.getElementsByTagName(tag);\n }\n\n return elements;\n}\n\nfunction registerEntity(entity: any): void {\n const type = getPlural(entity.type);\n _registeredEntities[type] ??= {};\n\n if (!_registeredEntities[type][entity.id]) {\n _registeredEntities[type][entity.id] = entity;\n }\n}\n\nfunction Create(type: string, entity: any, id?: string) {\n switch (type) {\n case 'location':\n return createLocation(entity);\n case 'map':\n return createMap(entity);\n case 'enemy':\n return EnemyBase(entity, 'enemy', id);\n case 'person':\n return createPerson(entity, id);\n case 'item':\n return createItem(entity, id);\n case 'feature':\n return createFeature(entity, id);\n case 'quest':\n return CreateObject(entity, 'quest', id);\n case 'trade':\n return CreateObject(entity, 'trade', id);\n }\n}\n\nfunction createLocation(entity: ILocation) {\n const location = CreateObject(entity, 'location');\n\n if (location.destinations) {\n location.destinations.forEach(d => {\n d.barriers?.forEach(([_, b]) => {\n if (b.key) {\n b.key = getId(b.key);\n }\n\n d.target = getId(d.target);\n });\n });\n }\n\n if (!location.destinations) {\n console.log('No destinations specified for location ' + location.name);\n }\n\n initCollection(location, 'actions');\n initCollection(location, 'combatActions');\n initCollection(location, 'destinations');\n initCollection(location, 'features');\n initCollection(location, 'trade');\n initCollection(location, 'items');\n initCollection(location, 'enemies');\n initCollection(location, 'persons');\n initCollection(location, 'enterEvents');\n initCollection(location, 'leaveEvents');\n initCollection(location, 'triggeredEvents');\n return location;\n}\n\nfunction createMap(entity: IMap, id?: string) {\n const map = CreateObject(entity, 'map', id);\n\n map.locations.forEach(l => {\n l.location = getId(l.location);\n });\n\n return map;\n}\n\nfunction createPerson(entity: IPerson, id?: string) {\n const person = EnemyBase(entity, 'person', id);\n initCollection(person, 'quests');\n return person;\n}\n\nfunction createItem(entity: IItem, id?: string) {\n const item = CreateObject(entity, 'item', id);\n compileCombinations(item);\n\n const groupableItem = item as IGroupableItem<IItem>;\n\n if (groupableItem.groupTypes) {\n groupableItem.groupTypes = groupableItem.groupTypes.map(t => getId(t));\n }\n\n return item;\n}\n\nfunction createFeature(entity: IFeature, id?: string) {\n const feature = CreateObject(entity, 'feature', id);\n compileCombinations(feature);\n return feature;\n}\n\nfunction EnemyBase<T extends IEnemy>(entity: T, type: string, id?: string): T {\n const enemy = CreateObject(entity, type, id);\n compileCombinations(enemy);\n initCollection(enemy, 'items');\n return enemy;\n}\n\nfunction CreateObject<T>(entity: T, type: string, id?: string) {\n if (typeof entity === 'function') {\n id = getId(entity);\n }\n\n const compiledEntity = getCompiledEntity(entity, type);\n const entityKey = getEntityKey(compiledEntity);\n\n checkInlineConflict(id, entityKey);\n\n if (!id && _registeredIds.has(entityKey)) {\n id = _registeredIds.get(entityKey);\n }\n\n if (id) {\n compiledEntity.id = id;\n parseDescriptionData(compiledEntity);\n }\n\n return <T><unknown>compiledEntity;\n}\n\nfunction parseDescriptionData(entity: any) {\n if (entity.description) {\n loadPictureFromDescription(entity, entity.description);\n }\n\n if (entity.type === 'location') {\n processVisualFeatures(entity);\n loadDescriptions(entity);\n setDestinations(entity);\n }\n}\n\nfunction loadPictureFromDescription(entity: any, description: string): void {\n const htmlDoc = parseHtmlDocumentFromString(description);\n const pictureElement = htmlDoc.getElementsByClassName('picture')[0];\n const pictureSrc = pictureElement?.getAttribute('src');\n\n if (pictureSrc) {\n entity.picture = pictureSrc;\n }\n}\n\nfunction loadDescriptions(location: ICompiledLocation): void {\n location.descriptions = {};\n const nodes = getParsedDocument(DescriptionProperty, location.description);\n\n for (const element of nodes) {\n const nameAttribute = element.attributes['name']?.nodeValue;\n const name = nameAttribute || 'default';\n\n if (location.descriptions[name]) {\n throw new Error('There is already a description with name ' + name + ' for location ' + location.id + '.');\n }\n\n location.descriptions[name] = element.innerHTML;\n }\n\n location.description = null;\n}\n\nfunction processVisualFeatures(location: ICompiledLocation): void {\n const visualFeatureNode = getParsedDocument('visual-features', location.description)[0]\n\n if (visualFeatureNode) {\n location.features ??= [];\n location.features.collectionPicture = visualFeatureNode.attributes['img']?.nodeValue;\n\n if (location.features.length > 0) {\n const areaNodes = visualFeatureNode.getElementsByTagName('area');\n\n for (const element of areaNodes) {\n const feature = getBasicFeatureData(location, element);\n\n if (feature) {\n feature.coords ??= element.attributes['coords']?.nodeValue;\n feature.shape ??= element.attributes['shape']?.nodeValue;\n feature.picture ??= element.attributes['img']?.nodeValue;\n }\n }\n }\n\n visualFeatureNode.parentNode.removeChild(visualFeatureNode);\n }\n}\n\nfunction setDestinations(location: ICompiledLocation): void {\n if (location.destinations) {\n location.destinations.forEach(destination => {\n setDestination(destination);\n });\n }\n}\n\nfunction initCollection(entity: any, property: string) {\n if (_gameCollections.indexOf(property) === -1) {\n return;\n }\n\n const collection = entity[property] || [];\n\n if ((property === 'features' || property === 'trade') && collection.length) {\n const inlineCollection = collection.map((e: { type: string, name: string }) => {\n // Initialize features that have been declared inline. Check for the existence of a \n // type property to determine whether the object is already initialized.\n if (e.type) {\n return e;\n }\n\n const typeName = getSingular(property);\n return Create(typeName, e, getIdFromName(e));\n });\n\n collection.length = 0;\n\n inlineCollection.forEach((e: any) => {\n collection.push(e);\n\n if (e.id) {\n registerEntity(e);\n }\n });\n }\n\n InitEntityCollection(entity, property);\n}\n\nfunction checkInlineConflict(id: string, entityKey: string) {\n let inlineConflict = false;\n\n if (id) {\n _registeredIds.forEach((v, k) => {\n if (v === id && entityKey !== k) {\n inlineConflict = true;\n }\n });\n\n if (inlineConflict) {\n throw new Error('Duplicate id detected: ' + id + '. You cannot use names for entities declared inline that are the same as the names of stand-alone entities.');\n }\n }\n}\n\nfunction getCompiledEntity(entity: any, type: string): { id: string, type: string, description?: string } {\n let compiledEntity: { id: string, type: string };\n\n if (typeof entity === 'function') {\n compiledEntity = entity();\n } else {\n compiledEntity = entity;\n }\n\n if (compiledEntity.id) {\n throw new Error('Property \\'id\\' is used by StoryScript. Don\\'t use it on your own types.');\n }\n\n if (compiledEntity.type && compiledEntity.type !== type) {\n throw new Error('Property \\'type\\' is used by StoryScript. Don\\'t use it on your own types.');\n }\n\n // Add the type to the object, so we can distinguish between them in the combine functionality.\n compiledEntity.type = type;\n return compiledEntity;\n}\n\nfunction getEntityKey(entity: object): string {\n return Object.getOwnPropertyNames(entity).sort((a, b) => a.localeCompare(b)).map(p => {\n const value = entity[p];\n const type = typeof value;\n let text: string;\n\n if (p === DescriptionProperty || Array.isArray(value)) {\n text = undefined;\n } else if (type === 'object') {\n text = p.toString();\n } else if (type === 'function') {\n text = getId(entity[p]);\n } else if (type !== \"undefined\") {\n text = p.toString() + '|' + entity[p].toString();\n }\n\n return text;\n }).filter(e => e).join('|');\n}\n\nfunction compileCombinations(entry: ICombinable) {\n if (entry.combinations) {\n const combines = <ICombine<ICombinable>[]>[];\n const failText = entry.combinations.failText;\n\n entry.combinations.combine.forEach((combine: ICombine<ICombinable>) => {\n const compiled = combine;\n (<any>compiled).tool = compiled.tool?.name;\n combines.push(compiled);\n });\n\n entry.combinations.combine = combines;\n entry.combinations.failText = failText;\n initCollection(entry.combinations, 'combine');\n }\n}\n\nfunction pushEntity(originalScope: any, originalFunction: any, entity: any, property: string, addedEntity: any) {\n addedEntity = typeof addedEntity === 'function' ? addedEntity() : addedEntity;\n\n if (!addedEntity.id && addedEntity.name) {\n addedEntity.id = getIdFromName(addedEntity);\n }\n\n originalFunction.apply(originalScope, [addedEntity]);\n gameEvents.publish(`add-${entity.type}-${property}`, {\n type: `add-${addedEntity.type}`,\n [entity.type]: entity,\n [addedEntity.type]: addedEntity\n });\n}\n\nfunction removeEntity(originalScope: any, originalFunction: any, entity: any, property: string, deletedEntity: any) {\n let deleted = originalFunction.apply(originalScope, [deletedEntity]);\n deleted ??= deletedEntity;\n gameEvents.publish(`delete-${entity.type}-${property}`, {\n type: `delete-${deleted.type}`,\n [entity.type]: entity,\n [deleted.type]: deleted\n });\n}\n\nfunction getIdFromName<T extends { name: string, id?: string }>(entity: T): string {\n return entity.name.toLowerCase().replace(/\\s/g, '');\n}\n\nfunction extend<T>(target: T, source: {}) {\n const keys = Object.keys(source);\n\n for (const key of keys) {\n const value = source[key];\n const isArray = Array.isArray(value);\n\n if (isArray) {\n value.forEach(e => target[key].push(e));\n } else if (typeof value === 'object') {\n target[key] = extend(target[key], value);\n } else {\n target[key] = value;\n }\n }\n\n return target;\n}","import {\n GameState,\n ICharacter,\n IDefinitions,\n IGame,\n IItem,\n ILocation,\n IParty,\n PlayState,\n StateList,\n StateListEntry\n} from 'storyScript';\nimport {compareString} from \"src/Engine/utilityFunctions\";\nimport {getParsedDocument} from \"src/Engine/EntityCreatorFunctions\";\nimport {DescriptionProperty} from 'src/constants';\n\nconst parsedDescriptions = new Map<string, boolean>();\n\nexport function hasDescription(entity: { id?: string, description?: string }): boolean {\n if (!entity.description) {\n return false;\n }\n\n if (!parsedDescriptions.get(entity.id)) {\n const descriptionNode = getParsedDocument(DescriptionProperty, entity.description)[0];\n parsedDescriptions.set(entity.id, descriptionNode?.innerHTML?.trim() !== '');\n }\n\n return parsedDescriptions.get(entity.id);\n}\n\nexport function random<T>(type: string, definitions: IDefinitions, selector?: (item: T) => boolean): T {\n const collection = definitions[type];\n\n if (!collection) {\n return null;\n }\n\n const selection = getFilteredInstantiatedCollection<T>(collection, selector);\n\n if (selection.length == 0) {\n return null;\n }\n\n const index = Math.floor(Math.random() * selection.length);\n return selection[index];\n}\n\nexport function randomList<T>(collection: T[] | ([() => T]), count: number, selector?: (item: T) => boolean): T[] {\n const selection = getFilteredInstantiatedCollection<T>(collection, selector);\n const results = <T[]>[];\n\n if (count === undefined) {\n count = selection.length;\n }\n\n if (selection.length > 0) {\n while (results.length < count && results.length < selection.length) {\n const index = Math.floor(Math.random() * selection.length);\n\n if (results.indexOf(selection[index]) == -1) {\n results.push(selection[index]);\n }\n }\n }\n\n return results;\n}\n\n// This allows deserializing functions added at runtime without using eval.\n// Found at https://stackoverflow.com/questions/7650071/is-there-a-way-to-create-a-function-from-a-string-with-javascript\nexport function parseFunction<T extends Function>(text: string) {\n const funcReg = /function[\\s]*([a-z\\d]*)(\\([\\s\\w\\d,]*\\))[\\s]*({[\\S\\s]*})/gmi;\n const match = funcReg.exec(text);\n\n if (match) {\n const args = match[2].substring(1, match[2].length - 1);\n return <T>(new Function(args, match[3]));\n }\n\n return null;\n}\n\n/**\n * This function creates a new function with the callback embedded. This makes the new function safe for serialization.\n * @param functionDefinition The main function to make safe for serialization.\n * @param callback The callback function to embed.\n * @returns The main function with the callback embedded.\n */\nexport function makeSerializeSafe<T extends Function>(functionDefinition: T, callback: Function): T {\n let serialized = serializeFunction(functionDefinition);\n\n if (callback) {\n const functionSignature = /function(\\((?:[a-zA-Z]+[, )]+)*)/.exec(serialized);\n const functionParams = functionSignature[1];\n const callbackSignature = Array.from(serialized.matchAll(new RegExp('([a-zA-z]+)[\\?\\.]{0,2}\\\\(' + functionParams + '\\\\)', 'gm')))[1];\n\n if (callbackSignature) {\n const callbackName = callbackSignature[1];\n const startIndex = serialized.indexOf('{') + 1;\n serialized = serialized.substring(0, startIndex) + `const ${callbackName} = ${serializeFunction(callback)};` + serialized.substring(startIndex);\n }\n }\n\n return parseFunction<T>(serialized);\n}\n\nexport function serializeFunction(value: Function) {\n const _functionArgumentRegex = /\\([a-z-A-Z0-9:, ]+\\)/;\n\n // Functions added during runtime must be serialized using the function() notation in order to be deserialized back\n // to a function. Convert values that have an arrow notation.\n let functionString = value.toString();\n const argumentString = functionString.substring(0, functionString.indexOf('{'));\n\n if (argumentString.indexOf('function') == -1) {\n const arrowIndex = argumentString.indexOf('=>');\n\n // The arguments regex will fail when no arguments are used in production mode. Use empty brackets in that case.\n const args = _functionArgumentRegex.exec(functionString)?.[0] || '()';\n\n functionString = 'function' + args + functionString.substring(arrowIndex + 2).trim();\n }\n\n return functionString;\n}\n\nexport function parseGamePropertiesInTemplate(lines: string, game?: IGame): string {\n const propertyRegex = /{(?:[a-zA-Z\\[\\]0-9]+[.]?)+}/g;\n const indexRegex = /\\[\\d+]/g;\n let result = lines;\n let parseMatch = null;\n\n while ((parseMatch = propertyRegex.exec(lines)) !== null) {\n let property = <unknown>game;\n let replacement = parseMatch[0];\n let index = null;\n let propertyFound = false;\n\n parseMatch[0].replace(/{|}/g, '').split('.').forEach((e: string) => {\n index = indexRegex.exec(e);\n\n if (index) {\n e = e.replace(index, '');\n index = parseInt(index[0].replace(/\\[|\\]/g, ''));\n }\n\n if (property.hasOwnProperty(e)) {\n property = property[e];\n propertyFound = true;\n } else {\n propertyFound = false;\n }\n\n if (!isNaN(index) && Array.isArray(property)) {\n property = property[index];\n }\n });\n\n if (propertyFound) {\n replacement = property;\n }\n\n lines = lines.replace(`${parseMatch[0]}`, '');\n result = result.replace(`${parseMatch[0]}`, replacement);\n }\n\n return result;\n}\n\nexport function selectStateListEntry(game: IGame, stateList: StateList) {\n // Evaluate custom functions first.\n const customFunctions = stateList[''];\n let result = null;\n\n customFunctions?.filter(f => typeof f === 'function').forEach(f => {\n result = f(game);\n })\n\n if (result) {\n return result;\n }\n\n // Next, get the entries in this order: Location, PlayState, GameState.\n const filteredEntries = Object.keys(stateList)\n .map(e => mapPlaylistEntries(game, e, stateList[e]))\n .filter(e => e);\n\n result = filteredEntries.map(e => selectCandidate(game, e.key, e.item))\n .filter(i => i.order > 0)\n .sort((a, b) => a.order - b.order)[0];\n\n return result?.key;\n}\n\nfunction mapPlaylistEntries(game: IGame, key: string, entry: StateListEntry) {\n return entry.map(i => selectCandidate(game, key, i))\n .filter(i => i.order > 0)\n .sort((a, b) => a.order - b.order)[0];\n}\n\nexport function getItemFromParty(party: IParty, item: string | (() => IItem)): IItem {\n let foundItem: IItem;\n\n party.characters.forEach(c => {\n foundItem = foundItem ?? getItemFromItemsAndEquipment(c, item);\n });\n\n return foundItem;\n}\n\nexport function removeItemFromParty(party: IParty, item: IItem | (() => IItem)) {\n let deleted = false;\n\n party.characters.forEach(c => {\n if (deleted) {\n return;\n }\n\n deleted = removeItemFromItemsAndEquipment(c, item);\n });\n}\n\nexport function removeItemFromItemsAndEquipment(character: ICharacter, item: IItem | (() => IItem)): boolean {\n let deleted = false;\n\n if (character.items.get(item)) {\n character.items.delete(item);\n deleted = true;\n }\n\n if (character.equipment) {\n for (const n in character.equipment) {\n if (item === character.equipment[n]) {\n character.equipment[n] = null;\n deleted = true;\n }\n\n if (deleted) {\n break;\n }\n }\n }\n\n return deleted;\n}\n\nfunction getItemFromItemsAndEquipment(character: ICharacter, item: string | (() => IItem)): IItem {\n let foundItem = character.items.get(item);\n\n if (foundItem) {\n return foundItem;\n }\n\n if (character.equipment) {\n for (const n in character.equipment) {\n const currentItem = character.equipment[n] as IItem;\n\n if ((typeof item === 'function' && currentItem.id == item.name) || (currentItem.id == item)) {\n return character.equipment[n];\n }\n }\n }\n\n return null;\n}\n\nfunction getFilteredInstantiatedCollection<T>(collection: T[] | (() => T)[], selector?: (item: T) => boolean) {\n let collectionToFilter = <T[]>[];\n\n if (typeof collection[0] === 'function') {\n (<[() => T]>collection).forEach((def: () => T) => {\n collectionToFilter.push(def());\n });\n } else {\n collectionToFilter = <T[]>collection;\n }\n\n return selector ? collectionToFilter.filter(selector) : collectionToFilter;\n}\n\nfunction selectCandidate(game: IGame, key: string, item: (GameState | PlayState | (() => ILocation) | ((game: IGame) => string) | string)) {\n const functionName = (<Function>item)?.name;\n const currentLocationId = game.currentLocation?.id;\n let order: number;\n\n if (item === game.state) {\n order = 3;\n } else if (item === game.playState) {\n order = 2;\n } else {\n order = functionName && currentLocationId && compareString(functionName, currentLocationId) ? 1 : 0\n }\n\n return {key, item, order};\n}","import {\n IConversation,\n IConversationNode,\n IConversationReply,\n IConversationService,\n IGame,\n IPerson,\n IQuest,\n IRules,\n PlayState\n} from 'storyScript';\nimport {parseGamePropertiesInTemplate} from './sharedFunctions';\nimport {compareString, hasItem} from \"../utilityFunctions\";\nimport {getParsedDocument} from \"../EntityCreatorFunctions\";\n\nexport class ConversationService implements IConversationService {\n constructor(private readonly _game: IGame, private readonly _rules: IRules) {\n }\n\n talk = (person: IPerson): void => {\n this.loadConversation(person);\n this.initConversation(person);\n this._game.playState = PlayState.Conversation;\n }\n\n answer = (node: IConversationNode, reply: IConversationReply): void => {\n const person = this._game.person;\n\n person.conversation.conversationLog ??= [];\n\n person.conversation.conversationLog.push({\n lines: node.lines,\n reply: reply.lines\n });\n\n if (reply.questStart) {\n this.questProgress('questStart', person, reply);\n }\n\n if (reply.questComplete) {\n this.questProgress('questComplete', person, reply);\n }\n\n this.processReply(person, reply);\n }\n\n private readonly loadConversation = (person: IPerson): void => {\n if (person.conversation && !person.conversation.nodes) {\n person.conversation.actions ??= [];\n const conversationElement = getParsedDocument('conversation', person.description)[0];\n const defaultReply = this.getDefaultReply(conversationElement, person);\n const conversationNodes = conversationElement.getElementsByTagName('node');\n\n person.conversation.nodes = [];\n this.processConversationNodes(conversationNodes, person, defaultReply);\n this.checkNodes(person);\n\n const nodeToSelect = person.conversation.nodes.filter(n => person.conversation.activeNode && n.node === person.conversation.activeNode.node);\n person.conversation.activeNode = nodeToSelect.length === 1 ? nodeToSelect[0] : null;\n }\n }\n\n private readonly initConversation = (person: IPerson): void => {\n this._game.person = person;\n const activeNode = this.getActiveNode(person);\n\n if (!activeNode) {\n return;\n }\n\n person.conversation.activeNode = activeNode;\n\n this.initReplies(person);\n this.setReplyStatus(person.conversation, activeNode);\n this.executeAction(activeNode.trigger, person);\n }\n\n private readonly getDefaultReply = (conversationElement: Element, person: IPerson): string => {\n const defaultReplyNodes = conversationElement.getElementsByTagName('default-reply');\n let defaultReply: string = null;\n\n if (defaultReplyNodes.length > 1) {\n throw new Error('More than one default reply in conversation for person ' + person.id + '.');\n } else if (defaultReplyNodes.length === 1) {\n defaultReply = defaultReplyNodes[0].innerHTML.trim();\n }\n\n return defaultReply;\n }\n\n private readonly processConversationNodes = (conversationNodes: HTMLCollectionOf<Element>, person: IPerson, defaultReply: string) => {\n for (const element of conversationNodes) {\n const newNode = this.getNewNode(person, element);\n this.processReplyNodes(person, element, newNode, defaultReply);\n\n if (!newNode.replies && defaultReply) {\n newNode.replies = [\n {\n defaultReply: true,\n lines: defaultReply\n }\n ]\n }\n\n newNode.lines = parseGamePropertiesInTemplate(element.innerHTML.trim(), this._game);\n person.conversation.nodes.push(newNode);\n }\n }\n\n private readonly getNewNode = (person: IPerson, node: Element): IConversationNode => {\n let nameAttribute = this.GetNodeValue(node, 'name');\n\n if (!nameAttribute && console) {\n console.log('Missing name attribute on node for conversation for person ' + person.id + '. Using \\'default\\' as default name');\n nameAttribute = 'default';\n }\n\n if (person.conversation.nodes.some((node) => {\n return node.node == nameAttribute;\n })) {\n throw new Error('Duplicate nodes with name ' + nameAttribute + ' for conversation for person ' + person.id + '.');\n }\n\n return <IConversationNode>{\n node: nameAttribute,\n trigger: this.GetNodeValue(node, 'trigger'),\n lines: '',\n replies: null\n };\n }\n\n private readonly processReplyNodes = (person: IPerson, node: Element, newNode: IConversationNode, defaultReply: string): void => {\n for (const replies of node.childNodes) {\n if (compareString(replies.nodeName, 'replies')) {\n newNode.replies = [];\n const addDefaultValue = this.GetNodeValue(replies, 'default-reply');\n const addDefaultReply = !compareString(addDefaultValue, 'false');\n this.buildReplies(person, newNode, replies);\n node.removeChild(replies);\n\n if (defaultReply && addDefaultReply) {\n newNode.replies.push(<IConversationReply>{\n lines: parseGamePropertiesInTemplate(defaultReply, this._game)\n });\n }\n }\n }\n }\n\n private readonly buildReplies = (person: IPerson, newNode: IConversationNode, replies: ChildNode): void => {\n for (const replyNode of replies.childNodes) {\n if (compareString(replyNode.nodeName, 'reply')) {\n const requires = this.GetNodeValue(replyNode, 'requires');\n const linkToNode = this.GetNodeValue(replyNode, 'node');\n const trigger = this.GetNodeValue(replyNode, 'trigger');\n const questStart = this.GetNodeValue(replyNode, 'quest-start');\n const questComplete = this.GetNodeValue(replyNode, 'quest-complete');\n const setStart = this.GetNodeValue(replyNode, 'set-start');\n const once = this.GetNodeValue(replyNode, 'once') === 'true';\n\n if (trigger && !person.conversation.actions.some(([k, _]) => k === trigger)) {\n console.log('No action ' + trigger + ' for node ' + newNode.node + ' found.');\n }\n\n const reply = <IConversationReply>{\n requires: requires,\n linkToNode: linkToNode,\n trigger: trigger,\n questStart: questStart,\n questComplete: questComplete,\n setStart: setStart,\n once: once,\n lines: parseGamePropertiesInTemplate((<any>replyNode).innerHTML.trim(), this._game)\n };\n\n newNode.replies.push(reply);\n }\n }\n }\n\n private readonly checkNodes = (person: IPerson): void => {\n person.conversation.nodes.forEach(n => {\n if (n.replies) {\n n.replies.forEach(r => {\n if (r.linkToNode && !person.conversation.nodes.some(n => n.node === r.linkToNode)) {\n console.log('No node ' + r.linkToNode + ' to link to found for node ' + n.node + '.');\n }\n\n if (r.setStart && !person.conversation.nodes.some(n => n.node === r.setStart)) {\n console.log('No new start node ' + r.setStart + ' found for node ' + n.node + '.');\n }\n });\n }\n });\n }\n\n private readonly GetNodeValue = (node: Node, attribute: string): string => (<any>node).attributes[attribute]?.value\n\n private readonly getActiveNode = (person: IPerson): IConversationNode => {\n if (!person?.conversation) {\n return null;\n }\n\n const conversation = person.conversation;\n let activeNode = conversation.activeNode;\n\n if (!activeNode) {\n activeNode = conversation.selectActiveNode ? conversation.selectActiveNode(this._game, person) : null;\n }\n\n if (!activeNode) {\n activeNode = conversation.nodes.filter((node) => {\n return compareString(node.node, person.conversation.startNode);\n })[0];\n }\n\n if (!activeNode) {\n activeNode = conversation.nodes[0];\n }\n\n return activeNode;\n }\n\n private readonly initReplies = (person: IPerson): void => {\n const activeNode = person.conversation.activeNode;\n\n activeNode.replies = activeNode.replies.filter(r =>\n !r.once || !person.conversation.singleRepliesChosen?.includes(this.getReplyId(activeNode, r)));\n\n activeNode.replies.forEach(reply => {\n if (reply.linkToNode) {\n if (!person.conversation.nodes.some((node) => {\n return node.node === reply.linkToNode;\n })) {\n console.log('No node ' + reply.linkToNode + ' found to link to for reply ' + reply.lines + '!');\n }\n }\n\n if (reply.requires) {\n reply.available = this.checkReplyAvailability(activeNode, reply);\n }\n });\n\n this._rules.encounters?.initReplies?.(this._game, activeNode);\n }\n\n private readonly processReply = (person: IPerson, reply: IConversationReply) => {\n this.executeAction(reply.trigger, person);\n const conversation = person.conversation;\n\n if (reply.setStart) {\n const startNode = conversation.nodes.filter((node) => {\n return node.node == reply.setStart;\n })[0];\n conversation.startNode = startNode.node;\n }\n\n let activeNode = null;\n\n if (reply.linkToNode) {\n if (reply.once) {\n conversation.singleRepliesChosen = !conversation.singleRepliesChosen ? '' : conversation.singleRepliesChosen + ';';\n conversation.singleRepliesChosen += this.getReplyId(conversation.activeNode, reply);\n }\n\n activeNode = conversation.nodes.filter((node) => {\n return node.node == reply.linkToNode;\n })[0];\n\n conversation.activeNode = activeNode;\n this.executeAction(activeNode.trigger, person);\n this.setReplyStatus(conversation, activeNode);\n } else {\n conversation.activeNode = null;\n }\n }\n\n private readonly executeAction = (key: string, person: IPerson) => {\n const action = key ? person.conversation.actions.find(([k, _]) => k === key)?.[1] : null;\n action?.(this._game, person);\n }\n\n private readonly checkReplyAvailability = (activeNode: IConversationNode, reply: IConversationReply): boolean => {\n let isAvailable = true;\n const requirements = reply.requires.split(',');\n\n for (const m in requirements) {\n const requirement = requirements[m];\n const values = requirement.toLowerCase().trim().split('=');\n const type = values[0];\n const value = values[1];\n\n if (!type || !value) {\n console.log('Invalid reply requirement for node ' + activeNode.node + '!');\n }\n\n isAvailable = this.checkReplyRequirements(activeNode, type, value);\n\n if (!isAvailable) {\n break;\n }\n }\n\n return isAvailable;\n }\n\n private readonly checkReplyRequirements = (activeNode: IConversationNode, type: string, value: string): boolean => {\n let isAvailable: boolean;\n\n switch (type) {\n case 'item': {\n isAvailable = !!hasItem(this._game.party, value);\n }\n break;\n case 'location': {\n // Check location visited\n const location = this._game.locations.get(value);\n\n if (!location) {\n console.log('Invalid location ' + value + ' for reply requirement for node ' + activeNode.node + '!');\n }\n\n isAvailable = location.hasVisited === true;\n }\n break;\n case 'quest-start':\n case 'quest-done':\n case 'quest-complete': {\n // Check quest start, quest done or quest complete.\n const quest = this._game.party.quests.get(value);\n\n if (quest) {\n if (type === 'quest-start') {\n isAvailable = true;\n } else if (type === 'quest-done') {\n isAvailable = quest.checkDone(this._game, quest);\n } else {\n isAvailable = quest.completed;\n }\n }\n }\n break;\n default: {\n // Check attributes\n const attribute = this._game.activeCharacter[type];\n\n if (!attribute) {\n console.log('Invalid attribute ' + type + ' for reply requirement for node ' + activeNode.node + '!');\n }\n\n isAvailable = isNaN(attribute) ? attribute === value : parseInt(attribute) >= parseInt(value);\n }\n break;\n }\n\n return isAvailable;\n }\n\n private readonly setReplyStatus = (conversation: IConversation, node: IConversationNode): void => {\n node.replies?.forEach(reply => {\n if (reply.available === undefined) {\n reply.available = true;\n }\n if (reply.showWhenUnavailable === undefined) {\n reply.showWhenUnavailable = conversation.showUnavailableReplies;\n }\n });\n }\n\n private readonly questProgress = (type: string, person: IPerson, reply: IConversationReply): void => {\n let quest: IQuest;\n const start = type === 'questStart';\n\n if (start) {\n quest = person.quests.get(reply[type]);\n\n if (!quest.started) {\n quest.issuedBy = person.id;\n person.quests.delete(quest);\n this._game.party.quests.add(quest);\n quest.progress = quest.progress || {};\n\n if (quest.start) {\n quest.start(this._game, quest, person);\n }\n\n quest.started = true;\n quest.completed = false;\n }\n } else {\n quest = this._game.party.quests.get(reply[type]);\n\n if (!quest.completed) {\n if (quest.complete) {\n quest.complete(this._game, quest, person);\n }\n\n quest.completed = true;\n }\n }\n }\n\n private readonly getReplyId = (node: IConversationNode, reply: IConversationReply): string => {\n return `${node.node}_${reply.linkToNode}`;\n }\n}","import {IDataSerializer, IFeature, parseFunction, serializeFunction} from 'storyScript';\nimport {InitEntityCollection} from \"src/Engine/EntityCreatorFunctions\";\nimport {StateProperties} from \"src/Engine/stateProperties\";\nimport {SerializationData} from \"./serializationData\";\nimport {getKeyPropertyNames, getPlural, isDataRecord} from \"src/Engine/utilityFunctions\";\nimport {DescriptionProperty, IdProperty} from 'src/constants';\n\nexport class DataSerializer implements IDataSerializer {\n private conversationPropertiesToSerialize = [\n 'actions',\n 'startNode',\n 'singleRepliesChosen'\n ]\n\n constructor(private readonly _pristineEntities: Record<string, Record<string, any>>) {\n }\n\n createSerializableClone = (original: any): any => {\n return this.buildStructureForSerialization(undefined, original, undefined);\n }\n\n restoreObjects = (\n loaded: any\n ): any => {\n for (const key in loaded) {\n if (!loaded.hasOwnProperty(key)) {\n continue;\n }\n\n const value = loaded[key];\n\n if (this.restoreArray(value, loaded, key)) {\n continue;\n }\n\n if (typeof value === 'object') {\n this.restoreObjects(value);\n } else if (typeof value === 'string' && value.indexOf('function') > -1) {\n loaded[key] = parseFunction(value);\n }\n }\n\n return loaded;\n }\n\n private readonly buildStructureForSerialization = (clone: any, original: any, pristine: any, parentKey?: string): any => {\n clone ??= this.createClone(original);\n\n if (clone == original) {\n return clone;\n }\n\n for (const key in original) {\n if (!original.hasOwnProperty(key)) {\n continue;\n }\n\n let originalValue = original[key];\n let pristineValue: any;\n\n if (original.type && original.id) {\n pristine = this._pristineEntities[getPlural(original.type)]?.[original.id];\n }\n\n pristineValue = pristine?.[key];\n\n // When we haven't found a pristine entity even though we checked the pristine collection,\n // we may be dealing with an entity that is added as a feature, such as an item. These are\n // not in the pristine features entities but in their own set. Try to find the pristine\n // entity by checking the features of the pristine locations.\n if (!pristineValue && original.type && original.id) {\n let feature: IFeature;\n\n for (const location in this._pristineEntities.locations) {\n feature = this._pristineEntities.locations[location].features?.find(f => f.id === original.id);\n\n if (feature) {\n pristineValue = feature[key];\n break;\n }\n }\n }\n\n // Do add NULL values to the clone for equipment, as these can be used as placeholders.\n // This is used by the engine to determine which equipment slots are available.\n if (originalValue === null) {\n if (parentKey === 'equipment') {\n clone[key] = null;\n }\n\n continue;\n }\n\n if (this.skipProperty(original, originalValue, key, parentKey)) {\n continue;\n }\n\n let newValue = this.processArrayDeletedValuesAndProperties(originalValue);\n\n this.getClonedValue({\n clone: clone,\n key: key,\n original: original,\n originalValue: newValue,\n pristine: pristine,\n pristineValue: pristineValue\n });\n }\n\n return clone;\n }\n\n private processArrayDeletedValuesAndProperties(originalValue: any,): any {\n let newValue: any = originalValue;\n\n // Add deleted entries to the array. Create a new array for this to prevent changing\n // the one used at runtime. Also copy over additional properties that may be there,\n // except for the array of deleted entities. This is handled differently.\n if (Array.isArray(originalValue)) {\n const deletedEntries = originalValue.getDeleted();\n newValue = [...originalValue];\n deletedEntries.forEach(e => newValue.push(e));\n const additionalProperties = Object.keys(originalValue).filter(k => k !== '_deleted' && !newValue[k]);\n additionalProperties.forEach(p => {\n newValue[p] = originalValue[p];\n });\n }\n\n return newValue;\n }\n\n private readonly restoreArray = (value: any, loaded: any, key: string): boolean => {\n if (!Array.isArray(value)) {\n return false;\n }\n\n InitEntityCollection(loaded, key);\n this.restoreObjects(value);\n const entriesToDelete = value.filter(e => e?.[StateProperties.Deleted]);\n\n entriesToDelete.forEach(e => {\n value.delete(e);\n });\n\n const arrayPropertyKey = `${key}_arrProps`;\n const additionalArrayProperties = loaded[arrayPropertyKey];\n\n if (additionalArrayProperties) {\n Object.keys(additionalArrayProperties).forEach(k => {\n // Use a cast to any to suppress the warning that named properties should be used\n // with objects and numeric indexes with arrays.\n (<any>value)[k] = additionalArrayProperties[k];\n });\n\n delete loaded[arrayPropertyKey];\n }\n\n return true;\n }\n\n private readonly createClone = (values: any): any => {\n let clone: any;\n\n if (Array.isArray(values)) {\n clone = [];\n } else {\n clone = typeof values === 'object' ? {} : values;\n }\n\n return clone;\n }\n\n private readonly getClonedValue = (data: SerializationData): void => {\n if (this.processDataRecord(data)) {\n return;\n }\n\n if (this.processArray(data)) {\n return;\n }\n\n if (typeof data.originalValue === 'object') {\n if (Array.isArray(data.clone)) {\n data.clone.push({});\n } else {\n data.clone[data.key] = {};\n }\n\n const createdObject = data.clone[data.key];\n this.buildStructureForSerialization(createdObject, data.originalValue, data.pristineValue, data.key);\n\n // Do not include empty objects in the serialized data.\n if (!Array.isArray(data.clone) && typeof (createdObject) === 'object' && Object.keys(createdObject).length === 0) {\n delete data.clone[data.key];\n }\n\n return;\n }\n\n if (typeof data.originalValue === 'function') {\n if (!data.originalValue.isProxy && data.originalValue.toString() !== data.pristineValue?.toString()) {\n data.clone[data.key] = serializeFunction(data.originalValue);\n }\n return;\n }\n\n // Store only values that are different from the pristine value, values that are needed to create a\n // traversable world structure, and the key values of deleted array records.\n if (data.originalValue != data.pristineValue || this.isKeyProperty(data.pristine, data.key) || data.original[StateProperties.Deleted] === true) {\n data.clone[data.key] = data.originalValue;\n }\n }\n\n private readonly processDataRecord = (data: SerializationData): boolean => {\n if (!isDataRecord(data.originalValue)) {\n return false;\n }\n\n data.clone[data.key] = [];\n const record = data.clone[data.key];\n const match = data.pristine?.find((p: any[]) => p[0] === data.originalValue[0]);\n\n if (!match) {\n const value = data.originalValue[1];\n\n if (value[StateProperties.Deleted]) {\n record[0] = data.pristineValue[0];\n record[1] = {[StateProperties.Deleted]: true};\n return true;\n } else if (typeof value === 'function' && value[StateProperties.Added]) {\n record[0] = data.originalValue[0];\n record[1] = {'function': serializeFunction(value), [StateProperties.Added]: true};\n return true;\n }\n }\n\n record[0] = data.originalValue[0];\n\n this.getClonedValue(<SerializationData>{\n clone: data.clone[data.key],\n key: '1',\n original: data.originalValue,\n originalValue: data.originalValue[1],\n pristine: match,\n pristineValue: match?.[1]\n });\n\n // Delete empty objects from the record.\n if (record[1] && !Object.keys(record[1]).length) {\n record.splice(1, 1);\n }\n\n return true;\n }\n\n private readonly processArray = (data: SerializationData): boolean => {\n if (!Array.isArray(data.originalValue)) {\n return false;\n }\n\n // Do not include empty arrays in the serialized data when we have a pristine value to compare\n // to. Otherwise, keep empty arrays as they are needed to correctly reconstruct the object.\n if (data.pristine && !data.originalValue.length) {\n return false;\n }\n\n data.clone[data.key] = [];\n const resultArray = data.clone[data.key];\n this.buildStructureForSerialization(resultArray, data.originalValue, data.pristineValue);\n\n // Delete empty objects from the array. Only remove objects that have no properties or\n // only properties with no values.\n const emptyItems = resultArray.filter(e => {\n if (typeof e !== 'object') {\n return false;\n }\n return !Object.values(e).filter(v => v !== undefined && v !== null && v !== '').length;\n });\n emptyItems.forEach(e => resultArray.splice(resultArray.indexOf(e), 1));\n\n const additionalArrayProperties = Object.keys(data.originalValue).filter(v => {\n let isAdditionalProperty = isNaN(parseInt(v));\n\n if (isAdditionalProperty) {\n // add and delete proxies are used for location destinations, these are added in the LocationService.\n // Ignore these proxies.\n if (v === 'add' || v === 'delete') {\n isAdditionalProperty = false;\n }\n }\n\n return isAdditionalProperty;\n });\n\n additionalArrayProperties.forEach(p => {\n const arrayPropertyKey = `${data.key}_arrProps`;\n data.clone[arrayPropertyKey] = data.clone[arrayPropertyKey] || {};\n this.getClonedValue({\n clone: data.clone[arrayPropertyKey],\n key: p,\n original: data.originalValue,\n originalValue: data.originalValue[p],\n pristine: data.pristine,\n pristineValue: data.pristineValue\n });\n });\n\n return true;\n }\n\n private readonly skipProperty = (original: any, originalValue: any, key: string, parentKey: string): boolean => {\n return (\n originalValue === undefined\n || originalValue.isProxy\n // Exclude descriptions and conversation nodes from the save data, these are not present on the pristine data.\n // Use an additional property to identify them, as their names are quite generic.\n || (original[IdProperty] && (key === DescriptionProperty || key === 'descriptions'))\n || (parentKey === 'conversation' && !this.conversationPropertiesToSerialize.includes(key))\n );\n }\n\n private readonly isKeyProperty = (item: any, propertyName: string): boolean => {\n const keyProperties = getKeyPropertyNames(item);\n return keyProperties.first === propertyName || keyProperties.second === propertyName;\n }\n}","import {isEmpty} from '../utilityFunctions';\nimport {\n IDataSerializer,\n IDataService,\n IDataSynchronizer,\n IGame,\n ILocalStorageService,\n IRules,\n ISaveGame,\n PlayState\n}from 'storyScript';\nimport {GameStateSave, SaveGamePrefix} from \"src/constants\";\n\nexport class DataService implements IDataService {\n\n constructor(\n private _localStorageService: ILocalStorageService,\n private serializer: IDataSerializer,\n private synchronizer: IDataSynchronizer,\n private _rules: IRules,\n private _gameNameSpace: string) {\n }\n\n save = <T>(key: string, value: T): void => {\n const clone = this.serializer.createSerializableClone(value);\n this._localStorageService.set(this.getKey(key), JSON.stringify({data: clone}));\n }\n\n load = <T>(key: string): T => {\n try {\n const jsonData = this._localStorageService.get(this.getKey(key));\n\n if (jsonData) {\n const data = JSON.parse(jsonData).data;\n\n if (isEmpty(data)) {\n return null;\n }\n\n const result = this.serializer.restoreObjects(data);\n this.synchronizer.synchronizeEntityData(result);\n return result;\n }\n\n return null;\n } catch (exception: any) {\n console.log('No data loaded for key ' + key + '. Error: ' + exception.message);\n }\n\n return null;\n }\n\n remove = (key: string): void => {\n this._localStorageService.remove(this.getKey(key));\n }\n\n saveGame = (game: IGame, name?: string): void => {\n if (!game.started) {\n return;\n }\n\n name = name ? SaveGamePrefix + name : GameStateSave;\n this._rules.general?.beforeSave?.(game);\n\n const saveGame = <ISaveGame>{\n party: game.party,\n world: game.locations,\n maps: game.maps,\n worldProperties: game.worldProperties,\n statistics: game.statistics,\n playedAudio: game.sounds.playedAudio\n };\n\n this.save(name, saveGame);\n\n if (game.playState === PlayState.Menu) {\n game.playState = null;\n }\n\n this._rules.general.afterSave?.(game);\n }\n\n getSaveKeys = (): string[] => this._localStorageService.getKeys(this.getKey(SaveGamePrefix));\n\n hasGameState = (): boolean => {\n const state = this._localStorageService.get(this.getKey(GameStateSave));\n return state !== null;\n }\n\n private getKey = (key?: string): string => {\n return key ? `${this._gameNameSpace}_${key}` : this._gameNameSpace;\n }\n}","import {IDataSynchronizer}from 'storyScript';\nimport {StateProperties} from \"src/Engine/stateProperties\";\nimport {getPlural, isDataRecord, propertyMatch} from \"src/Engine/utilityFunctions\";\nimport {InitEntityCollection} from \"src/Engine/EntityCreatorFunctions\";\n\nexport class DataSynchronizer implements IDataSynchronizer {\n constructor(private _pristineEntities: Record<string, Record<string, any>>) {\n }\n\n synchronizeEntityData = (\n entity: any,\n pristineEntity?: any,\n parentEntity?: any,\n pristineParentEntity?: any,\n parentProperty?: string\n ): void => {\n if (this.updateDataRecord(entity, pristineEntity)) {\n return;\n }\n\n if (this.updateArray(entity, pristineEntity, parentEntity, pristineParentEntity, parentProperty)) {\n return;\n }\n\n if (this.isEntity(entity)) {\n if (pristineEntity === undefined) {\n pristineEntity = this._pristineEntities[getPlural(entity.type)][entity.id];\n }\n }\n\n // We don't have pristine entities for the 'world' and 'maps' properties of saved games.\n // Use the pristine collections for these. When location and map files are deleted from\n // the game, we need to remove them from the stored data as well.\n if (parentProperty === 'world') {\n pristineEntity = this._pristineEntities['locations'];\n this.deleteRemovedEntities(entity, pristineEntity);\n } else if (parentProperty === 'maps') {\n pristineEntity = this._pristineEntities['maps'];\n this.deleteRemovedEntities(entity, pristineEntity);\n }\n\n // Use the properties of both the entity and the pristine entity, but only\n // process them once.\n let propertyNames = [...new Set(\n ((pristineEntity && Object.keys(pristineEntity)) ?? [])\n .concat((entity && Object.keys(entity)) ?? []))];\n\n propertyNames.forEach(p => {\n let currentProperty = entity[p];\n\n // If there is no pristine entity, recurse down the object to find entities to synchronize.\n if (pristineEntity === undefined) {\n if (Array.isArray(currentProperty) || typeof currentProperty === 'object') {\n this.synchronizeEntityData(currentProperty, undefined, entity, pristineEntity, p);\n }\n return;\n }\n\n let pristineProperty = pristineEntity[p];\n\n if (currentProperty === undefined) {\n if (Array.isArray(pristineProperty)) {\n entity[p] = [];\n } else if (typeof pristineProperty === 'object' && pristineProperty !== null) {\n entity[p] = {};\n } else {\n // If there is no value for this property on the object yet, \n // it wasn't changed during runtime. Set it now.\n entity[p] = pristineProperty;\n return;\n }\n }\n\n currentProperty = entity[p];\n\n if (pristineProperty === undefined) {\n if (Array.isArray(currentProperty)) {\n pristineProperty = [];\n } else if (typeof currentProperty === 'object') {\n pristineProperty = {};\n }\n }\n\n if (Array.isArray(pristineProperty) || typeof pristineProperty === 'object') {\n this.synchronizeEntityData(currentProperty, pristineProperty, entity, pristineEntity, p);\n }\n\n // Either the property is the same on the entity and the pristine entity (a key value)\n // or the value was changed at runtime. Either way, do nothing.\n });\n }\n\n private updateDataRecord = (entity: any, pristineEntity: any): boolean => {\n if (!isDataRecord(pristineEntity?.[0]) && !isDataRecord(entity?.[0])) {\n return false;\n }\n\n pristineEntity.forEach((p: any[]) => {\n const match = entity.concat(entity.getDeleted()).find((e: any[]) => e[0] === p[0]);\n\n if (!match) {\n // If there is no match, it means the record was added during design-time.\n // Add it to the entity as well.\n entity.push(p);\n } else if (match[StateProperties.Deleted]) {\n return;\n } else if (typeof (p[1]) === 'function') {\n match[1] = p[1];\n } else {\n if (!match[1]) {\n match.push(p?.[1] && Array.isArray(p[1]) ? [] : {});\n }\n\n this.synchronizeEntityData(match[1], p[1], entity, pristineEntity, '1');\n }\n });\n\n const newRecords = entity.filter((e: any[]) => !pristineEntity.find(p => p[0] === e[0]));\n const recordsToRemove = newRecords.filter((e: any[]) => !e[1]?.[StateProperties.Added]);\n recordsToRemove.forEach(r => entity.splice(entity.indexOf(r), 1));\n const recordsToKeep = newRecords.filter((e: any[]) => e[1]?.[StateProperties.Added]);\n recordsToKeep.forEach(r => {\n if (r[1].function) {\n r[1] = r[1].function;\n r[1][StateProperties.Added] = true;\n }\n })\n\n this.markEntriesAsDeleted(entity);\n return true;\n }\n\n private updateArray(\n entity: any[],\n pristineEntity: any[],\n parentEntity?: any,\n pristineParentEntity?: any,\n parentProperty?: string\n ): boolean {\n if (!Array.isArray(entity) || !Array.isArray(pristineEntity)) {\n return false;\n }\n\n if (entity.length == 0 && pristineEntity.length == 0) {\n // Empty arrays weren't included in the serialized data. Call InitEntityCollection\n // on them now to properly restore entities.\n InitEntityCollection(parentEntity, parentProperty);\n return true;\n }\n\n const existingItems = entity.filter(e => e[StateProperties.Added] && !pristineEntity.find(p => propertyMatch(e, p)));\n const matchedItems = pristineEntity.filter(e => entity.find(p => propertyMatch(e, p)));\n const itemsToAdd = pristineEntity.filter(e => !entity.concat(entity.getDeleted()).find(p => propertyMatch(e, p)));\n const finalItems = [];\n\n // matched and existing items need to be recursively checked. Added items aren't in the stored data yet, so they\n // can be added straight away. The order is very important! Matched items are in both and need to go first. Added \n // items second, as these are now part of the design. Existing items have been added at runtime and should go last.\n matchedItems.forEach(e => {\n finalItems.push(this.updateArrayElement(e, entity, parentEntity, pristineParentEntity, parentProperty));\n });\n\n itemsToAdd.forEach(i => finalItems.push(i));\n\n existingItems.forEach(e => {\n finalItems.push(this.updateArrayElement(e, entity, parentEntity, pristineParentEntity, parentProperty));\n });\n\n entity.length = 0;\n\n finalItems.forEach(i => {\n entity.push(typeof i === 'object' ? {...i} : i);\n });\n\n this.markEntriesAsDeleted(entity);\n return true;\n }\n\n private updateArrayElement = (element: any, entity: any, parentEntity, pristineParentEntity, parentProperty) => {\n const currentValue = entity.filter(p => propertyMatch(element, p))[0];\n\n // In case of an entity with the 'added' flag, 'i' is a skeleton value. Set the pristine entity to 'undefined' \n // so it will be looked up again later on.\n const pristineValue = element[StateProperties.Added] && this.isEntity(element) ? undefined : element;\n\n if (!currentValue[StateProperties.Deleted]) {\n this.synchronizeEntityData(currentValue, pristineValue, parentEntity, pristineParentEntity, parentProperty);\n }\n\n return currentValue;\n }\n\n private isEntity = (entity: any): boolean => {\n return entity?.type !== undefined && entity?.id !== undefined;\n }\n\n private markEntriesAsDeleted = (item: any[]) => {\n const itemsToDelete = item.filter(i => i[StateProperties.Deleted]);\n itemsToDelete.forEach(i => item.delete(i));\n }\n\n private deleteRemovedEntities = (entity: any, pristineEntity: any): void => {\n if (!pristineEntity) {\n return;\n }\n\n const entityKeys = Object.keys(entity);\n const pristineKeys = Object.keys(pristineEntity);\n\n entityKeys.forEach(k => {\n if (pristineKeys.indexOf(k) < 0) {\n delete entity[k];\n }\n });\n }\n}","import {\n DefaultTexts,\n GameState,\n ICharacterService,\n ICombinable,\n ICombinationService,\n ICombineResult,\n ICreateCharacter,\n IDataService,\n IDemoMode,\n IEquipment,\n IFeature,\n IGame,\n IGameService,\n IInterfaceTexts,\n IItem,\n ILocationService,\n IParty,\n IRules,\n ISaveGame,\n ISoundService,\n PlayState,\n ScoreEntry,\n InitEntityCollection\n} from 'storyScript';\nimport {Characters, GameStateSave, HighScores, Items, Quests, SaveGamePrefix} from 'src/constants';\n\nexport class GameService implements IGameService {\n constructor\n (\n private readonly _dataService: IDataService,\n private readonly _locationService: ILocationService,\n private readonly _characterService: ICharacterService,\n private readonly _combinationService: ICombinationService,\n private readonly _soundService: ISoundService,\n private readonly _rules: IRules,\n private readonly _game: IGame,\n private readonly _texts: IInterfaceTexts,\n ) {\n }\n\n initDemo = (demoConfig: IDemoMode) => {\n const party = structuredClone(demoConfig.party);\n\n this._game.statistics = {};\n this._game.worldProperties = {};\n this._game.locations = null;\n this._game.maps = null;\n this._game.party = party;\n\n this._rules.setup?.initGame?.(this._game);\n this.initGame([]);\n this.initTexts();\n this.resume('Start');\n\n this._game.autoplay.startDemoMode(demoConfig, () => this.initDemo(demoConfig));\n }\n\n init = (restart?: boolean, skipIntro?: boolean): void => {\n this._game.started = true;\n\n const gameState = this._dataService.load<ISaveGame>(GameStateSave);\n this._game.highScores = this._dataService.load<ScoreEntry[]>(HighScores);\n this._game.party = gameState?.party;\n this._game.locations = gameState?.world;\n this._game.maps = gameState?.maps;\n this._game.worldProperties = gameState?.worldProperties ?? {};\n this._game.statistics = gameState?.statistics ?? this._game.statistics ?? {};\n const playedAudio = gameState?.playedAudio ?? [];\n\n if (restart) {\n this._game.statistics = {};\n this._game.worldProperties = {};\n }\n\n this._rules.setup?.initGame?.(this._game);\n this.initGame(playedAudio);\n this.initTexts();\n\n // Use the afterSave hook here to combine the initialized world with other saved data.\n if (gameState && this._rules.general?.afterSave) {\n this._rules.general.afterSave(this._game);\n }\n\n if (!this._game.party && this._rules.setup.intro && !skipIntro) {\n this._game.state = GameState.Intro;\n return;\n }\n\n if (this._game.party) {\n const locationName = this._game.party?.currentLocationId ?? 'Start';\n this.resume(locationName);\n\n if (this._rules.setup.continueGame) {\n this._rules.setup.continueGame(this._game);\n }\n\n return;\n }\n\n const characterSheet = this._rules.character.getCreateCharacterSheet?.();\n const hasCreateCharacterSteps = characterSheet?.steps?.length > 0;\n\n this._game.party = <IParty>{\n type: 'party',\n characters: [],\n quests: [],\n score: 0\n };\n\n if (!hasCreateCharacterSteps) {\n this.startNewGame(<ICreateCharacter>{});\n } else {\n this._characterService.setupCharacter();\n this._game.state = GameState.CreateCharacter;\n }\n }\n\n reset = (): void => {\n const emptySave = <ISaveGame>{\n party: this._game.party,\n statistics: this._game.statistics\n };\n\n this._dataService.save(GameStateSave, emptySave);\n this._game.locations = null;\n this._game.maps = null;\n this._locationService.init();\n\n // Save here to use the before and after save hooks after refreshing the world,\n // if there is a beforeSave hook defined.\n if (this._rules.general?.beforeSave) {\n this._dataService.saveGame(this._game);\n }\n\n if (this._game.party?.currentLocationId) {\n this._game.commands.go(this._game.party.currentLocationId, false);\n }\n }\n\n startNewGame = (characterData: ICreateCharacter): void => {\n this.createCharacter(characterData);\n\n if (this._rules.setup.numberOfCharacters > 1 && this._rules.setup.numberOfCharacters > this._game.party.characters.length) {\n this._characterService.setupCharacter();\n return;\n }\n\n this._game.party.characters[0].isActiveCharacter = true;\n this._rules.setup.gameStart?.(this._game);\n\n if (!this._game.currentLocation) {\n this._game.commands.go('Start', false);\n }\n\n this.setInterceptors();\n this._game.state = GameState.Play;\n this._dataService.saveGame(this._game);\n }\n\n restart = (skipIntro?: boolean): void => {\n this._dataService.remove(GameStateSave);\n this.init(true, skipIntro);\n }\n\n loadGame = (name: string): void => {\n const saveGame = this._dataService.load<ISaveGame>(SaveGamePrefix + name);\n\n if (saveGame) {\n this._game.loading = true;\n this._game.party = saveGame.party;\n this._game.locations = saveGame.world;\n this._game.maps = saveGame.maps;\n this._game.worldProperties = saveGame.worldProperties ?? {};\n this._game.statistics = saveGame.statistics;\n this._game.sounds.playedAudio = saveGame.playedAudio;\n this._locationService.init();\n this._game.currentLocation = this._game.locations.get(saveGame.party.currentLocationId);\n\n // Use the afterSave hook here to combine the loaded world with other saved data.\n this._rules.general?.afterSave?.(this._game);\n\n if (saveGame.party.previousLocationId) {\n this._game.previousLocation = this._game.locations.get(saveGame.party.previousLocationId);\n }\n\n this._game.actionLog = [];\n this.setInterceptors();\n\n if (this._game.playState === PlayState.Menu) {\n this._game.playState = null;\n }\n\n this._game.combinations.combinationResult.reset();\n this._locationService.processDestinations(this._game);\n this._locationService.loadLocationDescriptions(this._game);\n this._rules.setup.continueGame?.(this._game);\n this._game.loading = false;\n this._game.state = GameState.Play;\n }\n }\n\n watchPlayState(callBack: (game: IGame, newPlayState: PlayState, oldPlayState: PlayState) => void): void {\n this.watchState<PlayState>('playState', callBack);\n }\n\n private readonly resume = (locationName: string): void => {\n if (!this._game.party.characters.some(c => c.currentHitpoints === undefined || c.currentHitpoints > 0)) {\n this._game.state = GameState.GameOver;\n return;\n }\n\n this.setInterceptors();\n this._characterService.checkEquipment();\n const lastLocation = locationName && this._game.locations.get(locationName) || this._game.locations.start;\n const previousLocationName = this._game.party.previousLocationId;\n\n if (previousLocationName) {\n this._game.previousLocation = this._game.locations.get(previousLocationName);\n }\n\n this._game.commands.go(lastLocation.id, false);\n this._game.state = GameState.Play;\n }\n\n private watchState<T>(stateName: string, callBack: (game: IGame, newState: T, oldState: T) => void) {\n const watcherNames = `_${stateName}Watchers`;\n const watchers = this[watcherNames] ?? [];\n this[watcherNames] = watchers;\n\n if (watchers.length === 0) {\n let state = this._game[stateName];\n\n Object.defineProperty(this._game, stateName, {\n enumerable: true,\n configurable: true,\n get: () => {\n return state;\n },\n set: value => {\n const oldState = state;\n state = value;\n watchers.forEach(w => w(this._game, state, oldState));\n }\n });\n }\n\n if (watchers.indexOf(callBack) < 0) {\n watchers.push(callBack);\n }\n }\n\n private readonly initTexts = (): void => {\n const defaultTexts = new DefaultTexts();\n\n for (const n in defaultTexts.texts) {\n this._texts[n] = this._texts[n] ? this._texts[n] : defaultTexts.texts[n];\n }\n\n this._texts.format = defaultTexts.format;\n this._texts.titleCase = defaultTexts.titleCase;\n }\n\n private readonly createCharacter = (characterData: ICreateCharacter): void => {\n const character = this._characterService.createCharacter(this._game, characterData);\n (<any>character).type = 'character';\n character.items = character.items || [];\n this._game.party.characters.push(character);\n }\n\n private readonly initGame = (playedAudio: string[]): void => {\n this.initLogs();\n\n Object.defineProperty(this._game, 'activeCharacter', {\n configurable: true,\n get: () => {\n const characters = this._game.party.characters;\n let character = characters.filter(c => c.isActiveCharacter)[0]\n ?? characters.filter(c => c.currentHitpoints > 0)[0]\n ?? characters[0];\n\n if (!character.isActiveCharacter) {\n character.isActiveCharacter = true;\n }\n\n return character;\n\n },\n set: value => {\n if (!value || value.currentHitpoints <= 0) {\n return;\n }\n\n this._game.party.characters.forEach(c => c.isActiveCharacter = false);\n value.isActiveCharacter = true;\n }\n });\n\n this._game.sounds = this._soundService.getSounds();\n this._game.sounds.playedAudio = playedAudio;\n\n this.initCombinations();\n this._locationService.init();\n\n Object.defineProperty(this._game, 'currentMap', {\n configurable: true,\n get: () => {\n let result = null;\n\n if (this._game.maps) {\n for (const key in this._game.maps) {\n const map = this._game.maps[key];\n const location = map.locations.find(l => l.location === this._game.currentLocation.id);\n\n if (location) {\n result = map;\n break;\n }\n }\n }\n\n return result;\n }\n });\n\n if (this._rules.general?.gameStateChange) {\n this.watchState<GameState>('state', this._rules.general.gameStateChange);\n }\n\n if (this._rules.general?.playStateChange) {\n this.watchState<PlayState>('playState', this._rules.general.playStateChange);\n }\n }\n\n private readonly setInterceptors = (): void => {\n const defaultPartyName = this._game.party.name ?? '';\n let score = this._game.party.score || 0;\n let gameState = this._game.state;\n let currentDescription = this._game.currentDescription;\n let currentHitpoints: Map<string, number> = new Map<string, number>();\n\n InitEntityCollection(this._game.party, Quests);\n InitEntityCollection(this._game.party, Characters);\n\n Object.defineProperty(this._game.party, 'name', {\n configurable: true,\n get: () => {\n let partyName = defaultPartyName;\n\n if (!partyName) {\n this._game.party.characters.forEach((c, i) => {\n const separator = i == this._game.party.characters.length - 1 ? ' & ' : ', ';\n\n if (partyName) {\n partyName += separator;\n }\n\n partyName += c.name;\n });\n }\n\n return partyName;\n\n }\n });\n\n this._game.party.characters.forEach(c => {\n InitEntityCollection(c, Items);\n currentHitpoints[c.name] = c.currentHitpoints ?? c.hitpoints;\n\n Object.defineProperty(c, 'currentHitpoints', {\n configurable: true,\n get: () => {\n return currentHitpoints[c.name];\n },\n set: value => {\n const change = value - currentHitpoints[c.name];\n currentHitpoints[c.name] = value;\n this._rules.character.hitpointsChange?.(this._game, c, change);\n\n if (currentHitpoints[c.name] <= 0) {\n this._game.activeCharacter = this._game.party.characters.find(c => c.currentHitpoints > 0);\n }\n }\n });\n\n Object.defineProperty(c, 'combatItems', {\n get: function () {\n const result = c.items.filter(i => {\n return canUseInCombat(i.useInCombat, i, c.equipment);\n });\n\n for (const n in c.equipment) {\n const item = <IItem>c.equipment[n];\n\n if (item && canUseInCombat(item.useInCombat, item, c.equipment)) {\n result.push(item);\n }\n }\n\n return result;\n }\n });\n });\n\n Object.defineProperty(this._game.party, 'score', {\n configurable: true,\n get: () => {\n return score;\n },\n set: value => {\n const change = value - score;\n score = value;\n\n // Todo: separate score and xp(?)\n // Change when xp can be lost.\n if (change > 0) {\n const levelUp = this._rules.general?.scoreChange?.(this._game, change);\n\n if (levelUp) {\n this._game.playState = null;\n this._game.state = GameState.LevelUp;\n this._characterService.setupLevelUp();\n }\n }\n }\n });\n\n Object.defineProperty(this._game, 'state', {\n configurable: true,\n get: () => {\n return gameState;\n },\n set: state => {\n if (state === GameState.GameOver || state === GameState.Victory) {\n this._game.playState = null;\n this._rules.general?.determineFinalScore?.(this._game);\n this.updateHighScore();\n this._dataService.save(HighScores, this._game.highScores);\n }\n\n gameState = state;\n }\n });\n\n Object.defineProperty(this._game, 'currentDescription', {\n configurable: true,\n get: () => {\n return currentDescription;\n },\n set: (value: { title: string, type: string, item: IFeature }) => {\n currentDescription = value;\n this._game.playState = PlayState.Description;\n }\n });\n }\n\n private readonly initLogs = (): void => {\n this._game.actionLog = [];\n this._game.combatLog = [];\n\n this._game.logToLocationLog = (message: string) => {\n this._game.currentLocation.log ??= [];\n this._game.currentLocation.log.push(message);\n }\n\n this._game.logToActionLog = (message: string) => {\n this._game.actionLog.splice(0, 0, message);\n }\n\n this._game.logToCombatLog = (message: string) => {\n this._game.combatLog.splice(0, 0, message);\n }\n }\n\n private readonly initCombinations = (): void => {\n this._game.combinations = {\n combinationResult: {\n done: false,\n text: null,\n featuresToRemove: [],\n reset: (): void => {\n const result = this._game.combinations.combinationResult;\n result.done = false;\n result.text = null;\n result.featuresToRemove.length = 0;\n }\n },\n activeCombination: null,\n tryCombine: (target: ICombinable): ICombineResult => {\n const activeCombo = this._game.combinations.activeCombination;\n const result = this._combinationService.tryCombination(target);\n\n if (result.text) {\n let featuresToRemove: string[] = [];\n\n if (result.success) {\n if (result.removeTarget) {\n featuresToRemove.push(target.id);\n }\n\n if (result.removeTool) {\n featuresToRemove.push(activeCombo.selectedTool.id);\n }\n\n this._game.combinations.combinationResult.featuresToRemove = featuresToRemove;\n this._dataService.saveGame(this._game);\n }\n }\n\n return result;\n },\n getCombineClass: (tool: ICombinable): string => {\n return this._combinationService.getCombineClass(tool);\n }\n };\n }\n\n private readonly updateHighScore = (): void => {\n const scoreEntry = {name: this._game.party.name, score: this._game.party.score};\n this._game.highScores ??= [];\n let scoreAdded = false;\n\n this._game.highScores.forEach((entry) => {\n if (this._game.party.score > entry.score && !scoreAdded) {\n const index = this._game.highScores.indexOf(entry);\n\n if (this._game.highScores.length >= 5) {\n this._game.highScores.splice(index, 1, scoreEntry);\n } else {\n this._game.highScores.splice(index, 0, scoreEntry);\n }\n\n scoreAdded = true;\n }\n });\n\n if (this._game.highScores.length < 5 && !scoreAdded) {\n this._game.highScores.push(scoreEntry);\n }\n\n this._dataService.save(HighScores, this._game.highScores);\n }\n}\n\nfunction canUseInCombat(flagOrFunction: boolean | ((item: IItem, equipment: IEquipment) => boolean), item: IItem, equipment: {}) {\n const canUse = (typeof flagOrFunction === \"function\") ? flagOrFunction(item, equipment) : flagOrFunction;\n\n if (canUse && !item.use) {\n console.log(`Item ${item.name} declares it can be used in combat but has no use function.`)\n }\n\n return canUse;\n}\n","import {getItemFromParty, IDefinitions, IEnemy, IGame, IHelpers, IItem, random, removeItemFromParty} from 'storyScript';\nimport {compareString} from 'src/Engine/utilityFunctions';\n\nexport class HelperService implements IHelpers {\n constructor(private _game: IGame, private _definitions: IDefinitions) {\n }\n\n randomEnemy = (selector?: (enemy: IEnemy) => boolean): IEnemy => random<IEnemy>('enemies', this._definitions, <(enemy: IEnemy) => boolean>selector);\n\n randomItem = (selector?: (item: IItem) => boolean): IItem => random<IItem>('items', this._definitions, <(item: IItem) => boolean>selector);\n\n getItem = (selector: string): IItem => this.find<IItem>(selector, 'items', this._definitions);\n\n getEnemy = (selector: string): IEnemy => this.find<IEnemy>(selector, 'enemies', this._definitions);\n\n rollDice = (compositeOrSides: string | number, dieNumber: number = 1, bonus: number = 0): number => {\n let sides: number;\n\n if (typeof compositeOrSides !== 'number') {\n const dieResult = compositeOrSides.split(/d/i).map(e => e.trim());\n const bonusResult = dieResult[1]?.split(/[+-]/i).map(e => e.trim());\n\n if (dieResult.length === 1) {\n // Fixed damage, e.g. 6.\n sides = parseInt(dieResult[0]);\n } else {\n // Random damage, 'XdY+/-Z'\n dieNumber = parseInt(dieResult[0]);\n sides = parseInt(bonusResult[0]);\n bonus = bonusResult[1] === undefined ? 0 : parseInt(bonusResult[1]);\n const modifier = compositeOrSides.match(/[+-]/i);\n bonus = bonus > 0 ? modifier?.[0] === '+' ? bonus : bonus * -1 : 0;\n }\n } else {\n sides = compositeOrSides;\n }\n\n let result = 0;\n\n for (let i = 0; i < dieNumber; i++) {\n result += Math.floor(Math.random() * sides + 1);\n }\n\n result += bonus;\n return result;\n }\n\n calculateBonus = (person: { items?: IItem[], equipment?: {} }, type: string) => {\n let bonus = 0;\n\n if (person[type]) {\n bonus += person[type];\n }\n\n if (person.equipment) {\n for (const n in person.equipment) {\n const item = person.equipment[n];\n if (item?.[type] && !isNaN(item[type])) {\n bonus += parseInt(item[type]);\n }\n }\n } else if (person.items) {\n person.items.forEach(item => {\n if (item?.[type] && !isNaN(item[type])) {\n bonus += parseInt(item[type]);\n }\n });\n }\n\n return bonus;\n }\n\n getItemFromParty = (item: string | (() => IItem)): IItem => {\n return getItemFromParty(this._game.party, item);\n };\n\n removeItemFromParty = (item: IItem | (() => IItem)): void => {\n removeItemFromParty(this._game.party, item);\n };\n\n private find<T>(selector: string, type: string, definitions: IDefinitions): T {\n const collection = definitions[type];\n\n if (!collection && !selector) {\n return null;\n }\n\n const match = (<[() => T]>collection).filter((definition: () => T) => {\n return compareString(definition.name, selector);\n });\n\n return match[0] ? match[0]() : null;\n }\n}","import {\n EquipmentType,\n ICharacter,\n IEnemy,\n IGame,\n IGroupableItem,\n IInterfaceTexts,\n IItem,\n IItemService,\n IRules,\n removeItemFromItemsAndEquipment\n} from 'storyScript';\nimport {getEquipmentType} from \"src/Engine/utilityFunctions\";\n\nexport class ItemService implements IItemService {\n\n constructor(private _game: IGame, private _rules: IRules, private _texts: IInterfaceTexts) {\n }\n\n getItemName = (item: IItem): string => {\n if (!item) {\n return undefined;\n }\n\n if (this._rules.general.getItemName) {\n return this._rules.general.getItemName(item, this._texts);\n }\n\n const groupableItem = item as IGroupableItem<IItem>\n\n if (!groupableItem.members?.length) {\n return item.name;\n }\n\n return this._texts.format(groupableItem.groupName, [(groupableItem.members.length + 1).toString()]);\n }\n\n pickupItem = (character: ICharacter, item: IItem): boolean => {\n const isCombining = this._game.combinations?.activeCombination;\n\n if (isCombining) {\n this._game.combinations.tryCombine(item)\n return false;\n }\n\n if (this._rules.character.beforePickup && !this._rules.character.beforePickup(this._game, character, item)) {\n return false;\n }\n\n this._game.currentLocation.items.delete(item);\n character.items.add(item);\n\n return true;\n }\n\n canGroupItem = (character: ICharacter, group: IGroupableItem<IItem>, item: IGroupableItem<IItem>): boolean => {\n if (!item || !item.isGroupable || item.members?.length) {\n return false;\n }\n\n if (group) {\n if (!group.isGroupable) {\n return false;\n }\n\n if ((group.members?.length ?? 0) >= group.maxSize - 1) {\n return false;\n }\n\n if (group.id !== item.id && (!group.groupTypes || group.groupTypes.indexOf(item.id) === -1)) {\n return false;\n }\n }\n\n const anyGroupableItem = character.items.find(i => {\n if (i === item) {\n return false;\n }\n\n const groupable = i as IGroupableItem<IItem>;\n return groupable.isGroupable && (!groupable.maxSize || ((groupable.members?.length ?? 0) < groupable.maxSize - 1))\n });\n\n if (!anyGroupableItem) {\n return false;\n }\n\n if (this._rules.general.canGroupItem) {\n return this._rules.general.canGroupItem(character, group, item);\n }\n\n return true;\n };\n\n groupItem = (character: ICharacter, group: IGroupableItem<IItem>, item: IGroupableItem<IItem>): boolean => {\n if (group && group !== item) {\n group.members ??= [];\n group.members.add(item);\n character.items.delete(item);\n return true;\n }\n\n return false;\n }\n\n splitItemGroup = (character: ICharacter, item: IGroupableItem<IItem>): void => {\n if (item?.members?.length > 0) {\n item.members.forEach((item: IItem) => {\n character.items.add(item);\n });\n\n item.members = undefined;\n }\n }\n\n useItem = (character: ICharacter, item: IItem, target?: IEnemy): Promise<void> | void => {\n const useItem = (this._rules.exploration?.onUseItem?.(this._game, character, item) && item.use) ?? item.use;\n\n if (useItem) {\n const promise = item.use(this._game, character, item, target);\n\n return Promise.resolve(promise).then(() => {\n if (item.charges !== undefined) {\n if (!isNaN(item.charges)) {\n item.charges--;\n }\n\n if (item.charges <= 0) {\n removeItemFromItemsAndEquipment(character, item);\n }\n }\n });\n }\n }\n\n isEquippable = (item: IItem, character?: ICharacter): boolean => {\n if (item.equipmentType === EquipmentType.Miscellaneous) {\n return false;\n }\n\n if (this._rules.character.canEquip) {\n return this._rules.character.canEquip(item, character);\n }\n\n return true;\n };\n\n equipItem = (character: ICharacter, item: IItem): boolean => {\n const equipmentTypes = Array.isArray(item.equipmentType) ? <EquipmentType[]>item.equipmentType : [<EquipmentType>item.equipmentType];\n\n const slotsAvailable = this.makeSlotAvailable(character, item, equipmentTypes);\n\n if (slotsAvailable.length === 0) {\n return false;\n }\n\n if (this._rules.character.beforeEquip) {\n if (!this._rules.character.beforeEquip(this._game, character, item)) {\n return false;\n }\n }\n\n if (item.equip) {\n if (!item.equip(character, item, this._game)) {\n return false;\n }\n }\n\n for (const n in slotsAvailable) {\n character.equipment[slotsAvailable[n]] = item;\n }\n\n character.items.splice(character.items.indexOf(item), 1);\n return true;\n }\n\n unequipItem = (character: ICharacter, item: IItem): boolean => {\n return this.unequip(character, item);\n }\n\n canDrop = (item: IItem): boolean => {\n let canDrop: boolean;\n\n if (typeof item.canDrop === 'function') {\n canDrop = item.canDrop(this._game, item);\n } else if (item.canDrop === undefined) {\n canDrop = true;\n } else {\n canDrop = item.canDrop;\n }\n\n return canDrop\n };\n\n dropItem = (character: ICharacter, item: IItem): void => {\n if (!item) {\n return;\n }\n\n let drop = true;\n\n if (this._rules.character.beforeDrop) {\n drop = this._rules.character.beforeDrop(this._game, character, item);\n }\n\n if (drop) {\n character.items.delete(item);\n this._game.currentLocation.items.add(item);\n }\n }\n\n private makeSlotAvailable(character: ICharacter, item: IItem, equipmentTypes: EquipmentType[]): string[] {\n if (!item.usesMultipleSlots) {\n return this.findAvailableSlot(character, equipmentTypes);\n }\n\n const availableSlots: string[] = [];\n\n for (const n in equipmentTypes) {\n const type = getEquipmentType(equipmentTypes[n]);\n const slotItem = character.equipment[type];\n\n if (slotItem) {\n const unequipped = this.unequip(character, slotItem);\n\n if (!unequipped) {\n return [];\n }\n }\n\n availableSlots.push(type);\n }\n\n return availableSlots;\n }\n\n private findAvailableSlot(character: ICharacter, equipmentTypes: EquipmentType[]) {\n // If the item uses only one of the slots specified, see if a slot is available first.\n const occupiedSlots: string[] = [];\n const emptySlots: string[] = [];\n\n for (const n in equipmentTypes) {\n const type = getEquipmentType(equipmentTypes[n]);\n\n if (character.equipment[type]) {\n occupiedSlots.push(type);\n } else {\n emptySlots.push(type);\n }\n }\n\n if (emptySlots.length === 0) {\n const slotToUnequip = occupiedSlots[occupiedSlots.length - 1];\n const unequipped = this.unequip(character, character.equipment[slotToUnequip]);\n return !unequipped ? [] : [slotToUnequip];\n }\n\n return [emptySlots[0]];\n }\n\n private unequip = (character: ICharacter, equippedItem: IItem): boolean => {\n if (!equippedItem) {\n return true;\n }\n\n if (this._rules.character.beforeUnequip) {\n if (!this._rules.character.beforeUnequip(this._game, character, equippedItem)) {\n return false;\n }\n }\n\n if (equippedItem.unequip) {\n if (!equippedItem.unequip(character, equippedItem, this._game)) {\n return false;\n }\n }\n\n if (equippedItem?.equipmentType && character.items.indexOf(equippedItem) < 0) {\n character.items.push(equippedItem);\n }\n\n const slotsToUnEquip = Array.isArray(equippedItem.equipmentType)\n ? equippedItem.equipmentType\n : [equippedItem.equipmentType];\n\n slotsToUnEquip.forEach(t => {\n const itemType = getEquipmentType(t);\n const slotItem = character.equipment[itemType];\n character.equipment[itemType] = slotItem === equippedItem ? null : slotItem;\n });\n\n return true;\n }\n}","import {ILocalStorageService} from 'storyScript';\n\nconst StoryScriptPrefix: string = 'StoryScript_';\n\nexport class LocalStorageService implements ILocalStorageService {\n get = (key: string): any => localStorage.getItem(StoryScriptPrefix + key);\n\n set = (key: string, value: any): void => localStorage.setItem(StoryScriptPrefix + key, value);\n\n remove = (key: string): void => localStorage.removeItem(StoryScriptPrefix + key);\n\n getKeys = (prefix: string): string[] => {\n const result = [];\n prefix = StoryScriptPrefix + prefix;\n\n Object.keys(localStorage).forEach(k => {\n if (k.startsWith(prefix)) {\n result.push(k.replace(prefix, ''));\n }\n });\n\n return result;\n }\n}","import {\n ActionType,\n gameEvents,\n IAction,\n ICompiledLocation,\n IDefinitions,\n IDestination,\n IGame,\n IGameEvents,\n IKey,\n ILocation,\n ILocationService,\n IRules,\n parseGamePropertiesInTemplate\n} from 'storyScript';\nimport {addHtmlSpaces, getId, parseHtmlDocumentFromString} from 'src/Engine/utilityFunctions';\nimport {getBasicFeatureData, setDestination} from \"src/Engine/EntityCreatorFunctions\";\n\nexport class LocationService implements ILocationService {\n constructor(\n private readonly _definitions: IDefinitions,\n private readonly _rules: IRules,\n private readonly _game: IGame,\n private readonly _gameEvents: IGameEvents,\n ) {\n }\n\n init = (): void => {\n this._game.currentLocation = null;\n this._game.previousLocation = null;\n\n if (!this._game.locations) {\n // When we don't have any locations yet, we're starting a new game. Use the definitions to build\n // all the locations. Also build the maps, if present.\n this._game.locations = {};\n this._definitions.locations.forEach(l => this._game.locations[getId(l)] = <ICompiledLocation>l());\n }\n\n if (!this._game.maps && this._definitions.maps) {\n this._game.maps = {};\n // When we have no maps, it could be that maps were added later and that they are not in the saved\n // data yet. Add the maps available now.\n this._definitions.maps?.forEach(m => this._game.maps[getId(m)] = m());\n }\n\n this.setupLocations();\n\n this._gameEvents.subscribe(['add-character-items', 'delete-character-items', 'add-location-items'], (game: IGame, _) => {\n game.currentLocation?.destinations.forEach(d => {\n this.addKeyAction(game, d);\n })\n }, false);\n }\n\n changeLocation = (location: string | (() => ILocation), travel: boolean, game: IGame): void => {\n // Clear the play state on travel.\n game.playState = null;\n this._rules.exploration?.leaveLocation?.(game, game.currentLocation, getId(location), travel);\n this.playEvents(game, 'leaveEvents');\n\n // If there is no location, we are starting a new game. We're done here.\n if (!this.switchLocation(game, location)) {\n return;\n }\n\n this.processDestinations(game);\n this._game.party.currentLocationId = game.currentLocation.id;\n this._game.party.previousLocationId = game.previousLocation?.id;\n this._rules.exploration?.enterLocation?.(game, game.currentLocation, game.previousLocation?.id, travel);\n this.loadLocationDescriptions(game);\n this.initTrade(game);\n this.playEvents(game, 'enterEvents');\n this.markCurrentLocationAsVisited(game);\n }\n\n executeAction = (action: [string, IAction]): void => {\n const execute = action[1]?.execute;\n\n if (execute) {\n let result = true;\n\n if (typeof execute === 'function') {\n const actionResult = execute(this._game);\n result = actionResult === true;\n } else {\n gameEvents.publish(execute, action);\n }\n\n const typeAndIndex = this.getActionIndex(this._game, action);\n\n if (!result && typeAndIndex.index !== -1) {\n if (typeAndIndex.type === ActionType.Regular && this._game.currentLocation.actions) {\n const currentAction = this._game.currentLocation.actions[typeAndIndex.index];\n this._game.currentLocation.actions.delete(currentAction);\n } else if (typeAndIndex.type === ActionType.Combat && this._game.currentLocation.combatActions) {\n const currentCombatAction = this._game.currentLocation.combatActions[typeAndIndex.index];\n this._game.currentLocation.combatActions.delete(currentCombatAction);\n }\n }\n }\n }\n\n loadLocationDescriptions = (game: IGame): void => {\n if (this.selectLocationDescription(game)) {\n parseGamePropertiesInTemplate(game.currentLocation.description, this._game);\n this.processTextFeatures(game.currentLocation);\n }\n }\n\n initDestinations = (location: ICompiledLocation): void => {\n // Add a proxy to the destination collection add and delete functions, to replace the target function pointers\n // with the target id when adding or deleting destinations at runtime.\n location.destinations.add = location.destinations.add.proxy(this.addDestination, this._game);\n\n Object.defineProperty(location, 'activeDestinations', {\n get: function () {\n return location.destinations.filter(e => {\n return !e.inactive;\n });\n }\n });\n }\n\n processDestinations = (game: IGame) => {\n if (game.previousLocation?.destinations.length) {\n // Remove the isPreviousLocation and visited markers from the previous location's destinations.\n game.previousLocation.destinations.forEach((d: any) => {\n delete d.isPreviousLocation;\n delete d.visited;\n });\n }\n\n if (game.currentLocation.destinations.length) {\n // 1. Mark the previous location in the current location's destinations to allow\n // the player to more easily backtrack his last step.\n // 2. Mark the destination as visited when the player has already visited the location it leads to.\n // 3. Check if the user has the key for one or more barriers at this location, and add the key actions\n // if that is the case.\n game.currentLocation.destinations.forEach((d: any) => {\n if (d.target == game.previousLocation?.id) {\n d.isPreviousLocation = true;\n }\n\n const targetLocation = game.locations[d.target];\n const visitedRule = this._rules.exploration?.hasVisitedLocation;\n\n if (targetLocation && visitedRule) {\n d.visited = visitedRule(game, targetLocation);\n } else {\n d.visited = targetLocation?.hasVisited;\n }\n\n this.addKeyAction(game, d);\n });\n }\n }\n\n private readonly setupLocations = () => {\n Object.values(this._game.locations).forEach(l => {\n const compiledLocation = <ICompiledLocation>l;\n this.initDestinations(compiledLocation);\n let selector = compiledLocation.descriptionSelector;\n\n Object.defineProperty(compiledLocation, 'descriptionSelector', {\n enumerable: true,\n get: () => selector,\n set: (value) => {\n selector = value;\n this.selectLocationDescription(this._game);\n }\n });\n });\n\n this.addLocationGet(this._game.locations);\n }\n\n private readonly addLocationGet = (locations: Record<string, ICompiledLocation>) => {\n Object.defineProperty(locations, 'get', {\n enumerable: false,\n value: function (id?: string | (() => ILocation) | ICompiledLocation): ICompiledLocation {\n if (!id) {\n return undefined;\n }\n\n if (typeof id === 'string') {\n return locations[id.toLowerCase()];\n } else if (typeof id === 'function') {\n return locations[id.name.toLowerCase()];\n } else {\n return locations[id.id]\n }\n }\n });\n }\n\n private readonly switchLocation = (game: IGame, location: string | (() => ILocation)): boolean => {\n let presentLocation: ICompiledLocation;\n\n // If no location is specified, go to the previous location.\n if (!location) {\n const tempLocation = game.currentLocation;\n game.currentLocation = game.previousLocation;\n game.previousLocation = tempLocation;\n presentLocation = game.currentLocation;\n }\n // If currently at a location, make this the previous location.\n else if (game.currentLocation) {\n game.previousLocation = game.currentLocation;\n }\n\n if (!location && !presentLocation) {\n return false;\n }\n\n const key = getId(location) ?? presentLocation.id;\n game.currentLocation = game.locations.get(key);\n return true;\n }\n\n private readonly markCurrentLocationAsVisited = (game: IGame): void => {\n if (!game.currentLocation.hasVisited) {\n game.currentLocation.hasVisited = true;\n game.statistics.LocationsVisited = game.statistics.LocationsVisited || 0;\n game.statistics.LocationsVisited += 1;\n }\n }\n\n private readonly initTrade = (game: IGame): void => {\n if (game.currentLocation.trade?.length > 0) {\n game.currentLocation.trade.forEach(t => {\n if (!game.currentLocation.actions.find(([k, v]) => v.actionType === ActionType.Trade && k === t.id)) {\n game.currentLocation.actions.add([t.id, {\n text: t.name,\n actionType: ActionType.Trade,\n execute: 'trade'\n }]);\n }\n });\n }\n }\n\n private readonly addDestination = (originalScope: any, originalFunction: Function, destination: IDestination, game: IGame): void => {\n setDestination(destination);\n this.addKeyAction(game, destination);\n originalFunction.call(originalScope, destination);\n }\n\n private readonly playEvents = (game: IGame, eventProperty: string): void => {\n if (!game.currentLocation?.[eventProperty]) {\n return;\n }\n\n // Keep a reference to the location being processed. When the location is changed in the\n // event, we want to still update the events in the originating location.\n const location = game.currentLocation;\n const events = [...location[eventProperty]];\n\n events.forEach(e => {\n const result = e[1]?.(game);\n\n if (!result) {\n location[eventProperty].delete(e);\n }\n });\n }\n\n private readonly processTextFeatures = (location: ICompiledLocation): void => {\n if (!location.description) {\n return;\n }\n\n const htmlDoc = parseHtmlDocumentFromString(location.description);\n const featureNodes = <HTMLCollectionOf<HTMLElement>>htmlDoc.getElementsByTagName('feature');\n\n for (const element of featureNodes) {\n const feature = getBasicFeatureData(location, element);\n\n // If the feature is not present in code, clean the node html as the feature is either\n // not yet added (the feature tag is a placeholder for a feature added at runtime) or it\n // was deleted. Clean the node html to not show the feature text in case it was deleted.\n if (!feature) {\n element.innerHTML = '';\n } else {\n feature.description = element.innerHTML || feature.description;\n element.innerHTML = addHtmlSpaces(feature.description);\n }\n }\n\n location.description = htmlDoc.body.innerHTML;\n }\n\n\n private readonly selectLocationDescription = (game: IGame): boolean => {\n let selector = null;\n\n if (!game.currentLocation.descriptions) {\n game.currentLocation.description = null;\n return false;\n }\n\n let description: string;\n const defaultDescription = game.currentLocation.descriptions['default'] || game.currentLocation.descriptions[Object.keys(game.currentLocation.descriptions)[0]];\n\n // A location can specify how to select the proper selection using a descriptor selection function. If it is not specified,\n // use the default description selector function.\n if (game.currentLocation.descriptionSelector) {\n selector = typeof game.currentLocation.descriptionSelector == 'function' ? game.currentLocation.descriptionSelector(game) : game.currentLocation.descriptionSelector;\n description = game.currentLocation.descriptions[selector];\n }\n\n if (!description && this._rules.exploration?.descriptionSelector && (selector = this._rules.exploration.descriptionSelector(game))) {\n description = game.currentLocation.descriptions[selector];\n }\n\n description ??= defaultDescription;\n game.currentLocation.description = description;\n return true;\n }\n\n private readonly addKeyAction = (game: IGame, destination: IDestination) => {\n destination.barriers?.forEach(([_, b]) => {\n if (b.key) {\n const key = typeof b.key === 'function' ?\n b.key()\n : <IKey>this._definitions.items.get(b.key)();\n\n let existingAction = null;\n\n if (b.actions) {\n b.actions.forEach(([k, v]) => {\n if (k === key.id) {\n existingAction = v;\n }\n });\n } else {\n b.actions = [];\n }\n\n if (existingAction) {\n b.actions.splice(b.actions.indexOf(existingAction), 1);\n }\n\n let partyKey = null;\n\n game.party.characters.forEach(c => {\n partyKey = partyKey ?? c.items.get(key.id);\n });\n\n const barrierKey = <IKey>(partyKey || game.currentLocation.items.get(key.id));\n\n if (barrierKey) {\n b.actions.push([barrierKey.id, barrierKey.open]);\n }\n }\n });\n }\n\n private getActionIndex = (game: IGame, action: [string, IAction]): { type: ActionType, index: number } => {\n let index = -1;\n let type = ActionType.Regular;\n\n game.currentLocation.actions.forEach(([k, v], i) => {\n if (k === action[0]) {\n index = i;\n type = ActionType.Regular;\n }\n });\n\n if (index == -1) {\n game.currentLocation.combatActions.forEach(([k, v], i) => {\n if (k === action[0]) {\n index = i;\n type = ActionType.Combat;\n }\n });\n }\n\n return {type, index};\n }\n}","import {IGame, IRules, ISoundPlayer, ISoundService, selectStateListEntry} from 'storyScript';\n\nexport class SoundService implements ISoundService {\n private _musicStopped: boolean = false;\n\n constructor(private _game: IGame, private _rules: IRules) {\n }\n\n getSounds = (): ISoundPlayer => {\n return {\n startMusic: this.startMusic,\n stopMusic: this.stopMusic,\n playSound: this.playSound,\n soundQueue: new Map<number, { value: string, playing: boolean, completeCallBack?: () => void }>,\n playedAudio: []\n }\n }\n\n getCurrentMusic = (): string => {\n if (this._musicStopped || !this._rules.setup?.playList || Object.keys(this._rules.setup.playList).length === undefined) {\n return null;\n }\n\n return selectStateListEntry(this._game, this._rules.setup.playList);\n }\n\n private startMusic = (): boolean => this._musicStopped = false;\n\n private stopMusic = (): boolean => this._musicStopped = true;\n\n private playSound = (fileName: string, completeCallBack?: () => void): void => {\n this._game.sounds.soundQueue.set(this.createHash(fileName + Math.floor(Math.random() * 1000)), {\n value: fileName,\n playing: false,\n completeCallBack: completeCallBack\n });\n }\n\n private createHash(value: string): number {\n let hash = 0;\n\n if (!value || value.length == 0) {\n return hash;\n }\n\n for (let i = 0; i < value.length; i++) {\n const char = value.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n\n return hash;\n }\n}","import {\n gameEvents,\n IAction,\n ICharacter,\n IDefinitions,\n IGame,\n IGroupableItem,\n IInterfaceTexts,\n IItem,\n IItemService,\n IPerson,\n IRules,\n ITrade,\n ITradeService,\n PlayState,\n randomList\n} from 'storyScript';\nimport {StateProperties} from \"src/Engine/stateProperties\";\n\nconst tradeEvent = 'trade';\n\nexport class TradeService implements ITradeService {\n private _activeTrader: IPerson;\n\n constructor(private readonly _itemService: IItemService, private readonly _game: IGame, private readonly _rules: IRules, private readonly _texts: IInterfaceTexts, private readonly _definitions: IDefinitions) {\n gameEvents.register(tradeEvent);\n gameEvents.subscribe(tradeEvent, (game, data: [string, IAction]) => {\n const trader = game.currentLocation.trade.find(t => t.id === data[0]);\n this.trade(trader);\n });\n }\n\n trade = (trade: IPerson | ITrade): void => {\n const isPerson = trade && trade['type'] === 'person';\n const person = <IPerson>trade;\n\n if (isPerson) {\n this._activeTrader = this._game.person = person;\n this._game.trade = person.trade;\n this._game.trade.currency = person.currency ?? 0;\n\n if (!this._game.trade.name) {\n this._game.trade.name = this._texts.format(this._texts.trade, [person.name]);\n }\n } else {\n trade.currency ??= 0;\n this._activeTrader = <IPerson>{currency: trade.currency};\n this._game.trade = trade;\n this._game.trade.ownItemsOnly = false;\n }\n\n this.initTrade();\n this._game.playState = PlayState.Trade;\n }\n\n canPay = (item: IItem, buyer: ITrade | ICharacter, seller: ITrade | ICharacter): boolean => {\n if (this._rules.general.canBuyItem && !this._rules.general.canBuyItem(this._game, item, buyer)) {\n return false;\n }\n\n const trader = buyer as ITrade;\n const currency = trader.buy ? trader.currency : this._game.party.currency;\n const price = this.actualPrice(item, buyer, seller);\n return (price !== undefined && currency !== undefined && currency >= price) || price === 0;\n };\n\n actualPrice = (item: IItem, buyer: ITrade | ICharacter, seller: ITrade | ICharacter): number => {\n let resolvedModifier: number;\n const buyerTrade = buyer as ITrade;\n const sellerTrade = seller as ITrade;\n const modifier = buyerTrade.sell?.priceModifier ?? sellerTrade.buy?.priceModifier;\n\n if (modifier === undefined) {\n resolvedModifier = 1;\n } else if (typeof modifier === 'function') {\n resolvedModifier = (<((game: IGame) => number)>modifier)(this._game)\n } else {\n resolvedModifier = modifier;\n }\n\n const members = <IItem[]>(item as IGroupableItem<IItem>).members;\n const values = members ? members.concat([item]).map(m => m.value) : [item.value];\n const totalValue = values.reduce((t, c) => t + c, 0);\n return Math.round(totalValue * resolvedModifier);\n }\n\n displayPrice = (item: IItem, actualPrice: number): string => actualPrice > 0 ? this._texts.format(this._texts.stockItemDisplayText, [this._itemService.getItemName(item), actualPrice.toString(), this._texts.currency]) : this._itemService.getItemName(item);\n\n buy = (item: IItem, trade: ITrade): boolean => {\n if (!this.canPay(item, this._game.activeCharacter, trade)) {\n return false;\n }\n\n const price = this.actualPrice(item, this._game.activeCharacter, trade);\n trade.currency += price;\n this._game.party.currency -= price;\n this._activeTrader.currency = trade.currency;\n trade.buy.items.delete(item);\n this._game.activeCharacter.items.add(item);\n\n if (trade.onBuy) {\n trade.onBuy(this._game, item);\n }\n\n return true;\n }\n\n sell = (item: IItem, trade: ITrade): boolean => {\n if (!this.canPay(item, trade, this._game.activeCharacter)) {\n return false;\n }\n\n const price = this.actualPrice(item, trade, this._game.activeCharacter);\n trade.currency -= price;\n this._game.party.currency += price;\n this._activeTrader.currency = trade.currency;\n this._game.activeCharacter.items.delete(item);\n trade.sell.items.delete(item);\n trade.buy.items.add(item);\n\n if (trade.onSell) {\n trade.onSell(this._game, item);\n }\n\n return true;\n }\n\n private initTrade = (): ITrade => {\n const trader = this._game.trade;\n\n if (!trader) {\n return null;\n }\n\n let itemsForSale: IItem[];\n\n if (trader.buy.items) {\n itemsForSale = trader.buy.items.slice();\n } else if (trader[StateProperties.Triggered]) {\n itemsForSale = []\n }\n\n const buySelector = (item: IItem) => {\n return trader.buy.itemSelector(this._game, item);\n };\n\n // When visiting a trader for the first time and he has an initCollection function set, set the items for sale.\n if (trader.buy.initCollection?.(this._game, trader) || !itemsForSale) {\n const collection = <any>(trader.ownItemsOnly ? this._game.person.items : this._definitions.items);\n itemsForSale = randomList<IItem>(collection, trader.buy.maxItems, buySelector);\n trader[StateProperties.Triggered] = true;\n }\n\n const sellSelector = (item: IItem) => {\n return trader.sell.itemSelector(this._game, item);\n };\n\n const itemsToSell = randomList<IItem>(this._game.activeCharacter.items, trader.sell.maxItems, sellSelector);\n trader.buy.items ??= []\n\n // Filter existing items using the buy selector, also when edits are made, so items that were \n // added before but should not be available from the trader anymore are removed. Also do apply\n // the maxItems property on edits as well.\n trader.buy.items.length = 0;\n itemsForSale?.filter(buySelector).slice(0, trader.buy.maxItems).forEach(i => trader.buy.items.add(i));\n\n trader.sell.items ??= [];\n trader.sell.items.length = 0;\n itemsToSell.forEach(i => trader.sell.items.push(i));\n\n trader.buy.confirmationText ??= this._texts.buyConfirmationText;\n trader.sell.confirmationText ??= this._texts.sellConfirmationText;\n\n return trader;\n }\n}","import {\n AutoplayService,\n CharacterService,\n CombatService,\n CombinationService,\n CommandService,\n ConversationService,\n DataSerializer,\n DataService,\n DataSynchronizer,\n GameService,\n HelperService,\n ItemService,\n LocalStorageService,\n LocationService,\n SoundService,\n TradeService\n} from './Services/index';\n\nimport {\n gameEvents,\n IAutoplayService,\n ICharacterService,\n ICombatService,\n ICombinationService,\n ICommandService,\n IConversationService,\n IDataSerializer,\n IDataService,\n IDataSynchronizer,\n IDefinitions,\n IGame,\n IGameService,\n IInterfaceTexts,\n IItemService,\n IRules,\n ISoundService,\n ITradeService\n} from 'storyScript';\n\nexport class ServiceFactory {\n private static _instance: ServiceFactory;\n private static _initialized: boolean = false;\n private readonly _texts: IInterfaceTexts;\n private readonly _rules: IRules;\n private readonly _definitions: IDefinitions\n private readonly _registeredEntities: Record<string, Record<string, any>>;\n private readonly _dataSerializer: IDataSerializer;\n private readonly _dataSynchronizer: IDataSynchronizer;\n private readonly _dataService: IDataService;\n private _game: IGame = <IGame>{};\n private _gameService: IGameService;\n private _conversationService: IConversationService;\n private _combinationService: ICombinationService;\n private _combatService: ICombatService;\n private _soundService: ISoundService;\n private _characterService: ICharacterService;\n private _itemService: IItemService;\n private _tradeService: ITradeService;\n private _autoPlayService: IAutoplayService;\n private _commandService: ICommandService;\n\n constructor(\n nameSpace: string,\n definitions: IDefinitions,\n registeredEntities: Record<string, Record<string, any>>,\n rules: IRules,\n texts: IInterfaceTexts\n ) {\n this._texts = texts;\n this._rules = rules;\n this._definitions = definitions;\n this._registeredEntities = registeredEntities;\n const localStorageService = new LocalStorageService();\n this._dataSerializer = new DataSerializer(this._registeredEntities);\n this._dataSynchronizer = new DataSynchronizer(this._registeredEntities);\n this._dataService = new DataService(localStorageService, this._dataSerializer, this._dataSynchronizer, this._rules, nameSpace);\n ServiceFactory._instance = this;\n }\n\n get AvailableLocations() {\n return Object.values(this._registeredEntities.locations).map(l => {\n return {id: l.id, name: l.name}\n });\n };\n\n static readonly GetInstance = () => ServiceFactory._instance;\n\n /**\n * Initialize the game object and the services. Pass in a game object when it should be controlled\n * by the UI framework. Vue needs this.\n * @param game The game object.\n */\n init = (game?: IGame) => {\n this._game = game ?? <IGame>{};\n this._itemService = new ItemService(this._game, this._rules, this._texts);\n this._tradeService = new TradeService(this._itemService, this._game, this._rules, this._texts, this._definitions);\n this._conversationService = new ConversationService(this._game, this._rules);\n this._combatService = new CombatService(this._game, this._rules, this._texts);\n\n this._soundService = new SoundService(this._game, this._rules);\n this._characterService = new CharacterService(this._dataService, this._game, this._rules);\n const locationService = new LocationService(this._definitions, this._rules, this._game, gameEvents);\n this._combinationService = new CombinationService(this._game, this._rules, this._texts);\n this._autoPlayService = new AutoplayService(this._game, this._rules);\n this._commandService = new CommandService(locationService, this._conversationService, this._tradeService, this._combinationService, this._dataService, this._game);\n\n this._gameService = new GameService\n (\n this._dataService,\n locationService,\n this._characterService,\n this._combinationService,\n this._soundService,\n this._rules,\n this._game,\n this._texts\n );\n\n gameEvents.setGame(this._game);\n this._game.autoplay = this._autoPlayService;\n this._game.commands = this._commandService;\n this._game.helpers = new HelperService(this._game, this._definitions);\n\n ServiceFactory._initialized = true;\n }\n\n GetGame = (): IGame => this.Get(this._game);\n\n GetRules = (): IRules => this.Get(this._rules);\n\n GetTexts = (): IInterfaceTexts => this.Get(this._texts);\n\n GetGameService = (): IGameService => this.Get(this._gameService);\n\n GetTradeService = (): ITradeService => this.Get(this._tradeService);\n\n GetConversationService = (): IConversationService => this.Get(this._conversationService);\n\n GetCharacterService = (): ICharacterService => this.Get(this._characterService);\n\n GetCombinationService = (): ICombinationService => this.Get(this._combinationService);\n\n GetDataService = (): IDataService => this.Get(this._dataService);\n\n GetDataSerializer = (): IDataSerializer => this.Get(this._dataSerializer);\n\n GetDataSynchronizer = (): IDataSynchronizer => this.Get(this._dataSynchronizer);\n\n GetCombatService = (): ICombatService => this.Get(this._combatService);\n\n GetSoundService = (): ISoundService => this.Get(this._soundService);\n\n GetItemService = (): IItemService => this.Get(this._itemService);\n\n GetAutoplayService = (): IAutoplayService => this.Get(this._autoPlayService);\n\n GetCommandService = (): ICommandService => this.Get(this._commandService);\n\n private Get<T>(service: T): T {\n if (!ServiceFactory._initialized) {\n throw new Error('ServiceFactory is not initialized!');\n }\n\n return service;\n }\n}","import { IEquipment } from './equipment';\nimport { IItem } from './item';\n\n/**\n * This class is for internal StoryScript use only, to determine which equipment slots belong\n * to the default ones and which are custom for a game.\n */\nexport class DefaultEquipment implements IEquipment {\n constructor() {\n this.head = null;\n this.amulet = null;\n this.body = null;\n this.hands = null;\n this.leftHand = null;\n this.leftRing = null;\n this.rightHand = null;\n this.rightRing = null;\n this.legs = null;\n this.feet = null;\n }\n\n head: IItem;\n amulet: IItem;\n body: IItem;\n hands: IItem;\n leftHand: IItem;\n leftRing: IItem;\n rightHand: IItem;\n rightRing: IItem;\n legs: IItem;\n feet: IItem;\n}","/**\n * Used to specify what part of the player body the item is meant for, if any. You can specify the equipment slots used in your game as an object\n * on the character class of your game. Note that items may belong to more than one type, e.g. two-handed weapons that require both the left and \n * right hand to use.\n */\nexport enum EquipmentType {\n /**\n * Items worn on the head, ranging from diadem to helmets covering the entire head.\n */\n Head = 'Head',\n\n /**\n * Items worn around the neck, like amulets.\n */\n Amulet = 'Amulet',\n\n /**\n * Items worn on the torso and upper arms.\n */\n Body = 'Body',\n\n /**\n * Items worn on the hands, like gloves.\n */\n Hands = 'Hands',\n\n /**\n * Items that can be used in the non-dominant hand.\n */\n LeftHand = 'LeftHand',\n\n /**\n * Small items worn around the finger on the non-dominant hand.\n */\n LeftRing = 'LeftRing',\n\n /**\n * Items that can be used in the dominant hand.\n */\n RightHand = 'RightHand',\n\n /**\n * Small items worn around the finger on the dominant hand.\n */\n RightRing = 'RightRing',\n\n /**\n * Items worn on the legs.\n */\n Legs = 'Legs',\n\n /**\n * Items like boots that are used for walking but may also offer additional protection.\n */\n Feet = 'Feet',\n\n /**\n * All other type of items. Miscellaneous items cannot be equipped.\n */\n Miscellaneous = 'Miscellaneous'\n}","/**\n * Used to determine the situational UI to show to the player, e.g. the menu or trade screen.\n */\nexport enum PlayState {\n Menu = 'Menu',\n Combat = 'Combat',\n Trade = 'Trade',\n Conversation = 'Conversation',\n Description = 'Description'\n}","/**\n * Used to determine the UI to show to the player, e.g. the intro or exploration screen.\n */\nexport enum GameState {\n Intro = 'Intro',\n CreateCharacter = 'CreateCharacter',\n Play = 'Play',\n LevelUp = 'LevelUp',\n GameOver = 'GameOver',\n Victory = 'Victory'\n}","/**\n * Used to differentiate between actions visually (e.g. color).\n */\nexport enum ActionType {\n Regular = 'Regular',\n Check = 'Check',\n Combat = 'Combat',\n Trade = 'Trade'\n}","/**\n * Used to set the availability of actions to the player.\n */\nexport enum ActionStatus {\n /**\n * The action shows up for the player and is selectable.\n */\n Available = 'Available',\n\n /**\n * The action shows up for the player but is not selectable. Useful to show actions that could be performed if additional criteria\n * had been met (e.g. the character needs to be stronger to break down a door).\n */\n Disabled = 'Disabled',\n\n /**\n * The action is not shown to the player. Useful for actions that are only conditionally available.\n */\n Unavailable = 'Unavailable'\n}","/**\n * Used to determine whether an item usable in combat can be used on enemies or party characters.\n */\nexport enum TargetType {\n Ally = 'Ally',\n AllyOrSelf = 'AllyOrSelf',\n Enemy = 'Enemy',\n Self = 'Self'\n}","/**\n * An entry in the high score log.\n */\nexport class ScoreEntry {\n /**\n * The name of the player achieving the score.\n */\n name: string;\n\n /**\n * The total player score.\n */\n score: number;\n}","import { GameState } from \"./enumerations/gameState\";\nimport { PlayState } from \"./enumerations/playState\";\nimport { IGame } from \"./game\";\nimport { ILocation } from \"./location\";\n\nexport class StateList implements Record<string, StateListEntry>\n{\n [key: string]: (GameState | PlayState | (() => ILocation) | ((game: IGame) => string) | string)[]; \n}\n\nexport class StateListEntry extends Array<(GameState | PlayState | (() => ILocation) | ((game: IGame) => string) | string)>\n{\n}","import {IBarrier, IDestination, IGame, makeSerializeSafe} from 'storyScript';\n\n/**\n * A basic function to remove a barrier and then execute a callback function.\n * @param callback\n */\nexport function Open(callback?: (game: IGame, barrier: [string, IBarrier], destination: IDestination) => void) {\n return makeSerializeSafe((game: IGame, barrier: [string, IBarrier], destination: IDestination): void => {\n destination.barriers.delete(barrier);\n callback?.(game, barrier, destination);\n }, callback);\n}","import {IBarrier, IDestination, IGame, IKey, makeSerializeSafe} from 'storyScript';\n\n/**\n * A basic function to remove a barrier using a key and then execute a callback function. When it is not specified that the player\n * should keep the key after using it, it is removed from his item list.\n * @param callback The callback function to invoke after the barrier is removed.\n */\nexport function OpenWithKey(callback?: (game: IGame, barrier: [string, IBarrier], destination: IDestination) => void) {\n return makeSerializeSafe((game: IGame, barrier: [string, IBarrier], destination: IDestination) => {\n const key = typeof barrier[1].key === 'function' ? barrier[1].key() : <IKey>game.helpers.getItem(barrier[1].key);\n\n if (key.keepAfterUse === undefined || key.keepAfterUse !== true) {\n game.party.characters.forEach(c => {\n c.items.delete(barrier[1].key);\n });\n\n game.currentLocation.items.delete(barrier[1].key);\n }\n\n destination.barriers.delete(barrier);\n callback?.(game, barrier, destination);\n }, callback);\n}","import {IGame, IGameEvents}from 'storyScript';\n\nexport class GameEvents implements IGameEvents {\n private readonly _eventHandlers = new Map<string, ((game: IGame, eventArguments: any) => void)[]>();\n private _game: IGame;\n \n register = (eventName: string): void => {\n if (this._eventHandlers.has(eventName)) {\n return;\n }\n \n this._eventHandlers.set(eventName, []);\n }\n subscribe = (eventName: string | string[], handler: (game: IGame, eventArguments: any) => void, throwIfUnknown?: boolean): void => {\n const eventNames = Array.isArray(eventName) ? eventName : [eventName];\n \n eventNames.forEach(e => {\n if (!this._eventHandlers.has(e)) {\n if (throwIfUnknown === undefined || throwIfUnknown) {\n throw new Error(`Event ${e} has not been registered!`);\n }\n else {\n this._eventHandlers.set(e, []);\n }\n }\n \n const handlers = this._eventHandlers.get(e);\n handlers.push(handler);\n });\n }\n \n publish = (eventName: string, eventData?: any): void => {\n if (!this._eventHandlers.has(eventName)) {\n throw new Error(`Event ${eventName} has not been registered!`);\n }\n\n const handlers = this._eventHandlers.get(eventName);\n \n if (this._game) {\n handlers.forEach(handler => handler(this._game, eventData));\n } else {\n console.log(`setGame has not been called for gameEvents, or it was called without passing in a game object!`);\n }\n }\n \n setGame = (game: IGame): void => {\n this._game = game;\n }\n}\n\nexport const gameEvents = new GameEvents();","import {IInterfaceTexts} from 'storyScript';\n\nexport class DefaultTexts {\n texts: IInterfaceTexts = {\n equipmentHeader: 'Equipment',\n head: 'Head',\n amulet: 'Amulet',\n rightHand: 'Right hand',\n leftHand: 'Left hand',\n body: 'Body',\n legs: 'Legs',\n feet: 'Feet',\n backpack: 'Backpack',\n equip: 'Equip',\n use: 'Use',\n groupItem: 'Group',\n splitItemGroup: 'Split',\n drop: 'Drop',\n enemies: 'Enemies',\n enemyHitpoints: 'Health: {0} / {1}',\n enemyCombatName: \"{0} {1}\",\n characterHitpoints: 'Health: {0} / {1}',\n fight: 'Fight!',\n noWeapon: 'No weapon!',\n attack: 'Attack ',\n attackWith: 'with ',\n aid: 'Aid',\n aidWith: 'with ',\n useCombatItem: 'Use item',\n newGame: 'New game',\n firstCharacter: 'Create your first character',\n secondCharacter: 'Create your second character',\n thirdCharacter: 'Create your third character',\n nthCharacter: 'Create your {0}th character',\n nextCharacter: 'Next character',\n nextQuestion: 'Next question',\n startAdventure: 'Start adventure',\n actions: 'Actions',\n destinations: 'Destinations',\n back: 'Back: ',\n onTheGround: 'On the ground',\n youLost: 'You lost...',\n questFailed: 'You have failed your quest!',\n finalScore: 'Your score: ',\n tryAgain: 'Try again',\n highScores: 'High Scores',\n youWon: 'You won!',\n congratulations: 'Congratulations! You have won the game!',\n playAgain: 'Play again',\n startOver: 'Start over',\n resetWorld: 'Reset world',\n gameName: 'Game template',\n save: 'Save',\n saveGame: 'Save game',\n load: 'Load',\n loadGame: 'Load game',\n loading: 'Loading...',\n youAreHere: 'You are at {0}',\n messages: 'Messages',\n hitpoints: 'Health',\n currency: 'Money',\n partyCurrency: 'Money:',\n trade: 'Trade with {0}',\n talk: 'Talk to {0}',\n examine: 'Examine {0}',\n encounters: 'Encounters',\n closeModal: 'Close',\n combatTitle: 'Combat',\n combatRound: 'Combat round {0}',\n value: 'value',\n traderCurrency: 'Trader money: {0} {1}',\n startCombat: 'Start combat',\n combatWin: 'You are victorious!',\n enemiesToFight: 'You face these foes: ',\n useInCombat: 'Use {0}',\n noCombatAction: 'No Combat Actions',\n view: 'View',\n quests: 'Quests',\n currentQuests: 'Current',\n completedQuests: 'Completed',\n hands: 'Hands',\n leftRing: 'Left ring',\n rightRing: 'Right ring',\n yourName: 'Name',\n combinations: 'Combinations',\n tryCombination: 'Try',\n noCombination: 'You {2} the {0} {3} the {1}. Nothing happens.',\n noCombinationNoTool: 'You {1} {2} the {0}. Nothing happens.',\n levelUp: 'Level up',\n completeLevelUp: 'Accept',\n levelUpDescription: 'You reached level {0}.',\n newSaveGame: 'New save game',\n existingSaveGames: 'Saved games',\n overwriteSaveGame: 'Overwrite saved game {0}?',\n loadSaveGame: 'Load saved game {0}?',\n characterSheet: 'Character sheet',\n skipIntro: 'Skip intro',\n mainMenu: 'Main menu',\n mainMenuShort: 'Menu',\n confirmRestart: 'Really restart?',\n restartCancelled: 'No',\n restartConfirmed: 'Yes',\n cancel: 'Cancel',\n confirmAction: 'Ok',\n cancelAction: 'Cancel',\n stockItemDisplayText: '{0}: {1} {2}',\n buyConfirmationText: 'Are you sure you want to buy the {0} for {1} {2}?',\n confirmBuy: 'Ok',\n cancelBuy: 'Cancel',\n sellConfirmationText: 'Are you sure you want to sell the {0} for {1} {2}?',\n confirmSell: 'Ok',\n cancelSell: 'Cancel',\n currencyWon: 'Currency gained: {0}',\n itemsTaken: 'Items taken',\n enemiesDefeated: 'Enemies defeated',\n backToGame: 'Back to the game',\n conversationEnded: 'Your conversation has ended.',\n openFullScreenMap: '>',\n closeFullScreenMap: '<',\n pressToShowMarkers: 'Press {0} to show location markers',\n touchToShowMarkers: 'Press here to show location markers',\n startGame: 'Start',\n continueGame: 'Continue',\n autoplayText: \"Auto-playing\",\n noPlayWarning: \"Please interact with the page to allow media playback!\"\n }\n\n format = format;\n\n titleCase = (text: string): string => text.substring(0, 1).toUpperCase() + text.substring(1);\n}\n\nexport function format(template: string, tokens: string | string[]): string {\n if (template && tokens) {\n if (!Array.isArray(tokens)) {\n tokens = [tokens];\n }\n\n tokens.forEach((t, i) => {\n if (t === undefined) {\n (<string[]>tokens)[i] = \"{undefined}\";\n }\n })\n\n for (let i = 0; i < tokens.length; i++) {\n const pattern = '[ ]{0,1}\\\\{' + i + '\\\\}[ ]{0,1}';\n const match = new RegExp(pattern).exec(template);\n\n if (match) {\n const matchReplacement = match[0].replace('{' + i + '}', '');\n\n if (tokens[i].trim && tokens[i].trim().length == 0 && matchReplacement.length > 1) {\n template = template.replace(match[0], ' ');\n } else {\n template = template.replace('{' + i + '}', tokens[i]);\n }\n }\n }\n }\n\n return template;\n}","//#region src/formatters/plain.ts\n/**\n* Renders a diagnostic into a multi-line, unicode-decorated string suitable\n* for terminal output. The first line is `[<name>] <message>`; optional\n* details (`fix`, `sources`, `docs`) follow with `├▶`/`╰▶` connectors.\n*/\nfunction formatDiagnostic(diagnostic) {\n\tconst header = `[${diagnostic.name}] ${diagnostic.message}`;\n\tconst details = [];\n\tif (diagnostic.fix) details.push(`fix: ${diagnostic.fix}`);\n\tif (diagnostic.sources?.length) details.push(`sources: ${diagnostic.sources.join(\", \")}`);\n\tif (diagnostic.docs) details.push(`see: ${diagnostic.docs}`);\n\tif (details.length === 0) return header;\n\treturn [header, ...details.map((detail, i) => {\n\t\treturn `${i < details.length - 1 ? \"├▶\" : \"╰▶\"} ${detail}`;\n\t})].join(\"\\n\");\n}\n//#endregion\n//#region src/utils.ts\n/**\n* Transforms a value or a function that returns a value to a value.\n*\n* @param valFn either a value or a function that returns a value\n* @param args arguments to pass to the function if `valFn` is a function\n*\n* @internal\n*/\nfunction toValueWithArgs(valFn, ...args) {\n\treturn typeof valFn === \"function\" ? valFn(...args) : valFn;\n}\n//#endregion\n//#region src/diagnostic.ts\n/**\n* Creates a console reporter that renders each diagnostic with `formatter` and\n* prints the result via `console[method]`. Both default sensibly (`'warn'` and\n* {@link formatDiagnostic}); `method` can also be overridden per call through\n* the reporter options.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction createConsoleReporter({ method: defaultMethod = \"warn\", formatter = formatDiagnostic } = {}) {\n\treturn (diagnostic, { method = defaultMethod } = {}) => {\n\t\tconsole[method](formatter(diagnostic));\n\t};\n}\nconst captureStackTrace = Error.captureStackTrace;\nvar Diagnostic = class Diagnostic extends Error {\n\tname;\n\t/**\n\t* The diagnostic code, e.g. `MATH_E001`.\n\t* Also appears as the `name` property.\n\t*/\n\tcode;\n\t/**\n\t* URL to extended documentation for this diagnostic code.\n\t* Auto-generated from {@link DefineDiagnosticsOptions.docsBase}.\n\t*/\n\tdocs;\n\t/**\n\t* Optional actionable instructions on how to resolve the problem.\n\t*/\n\tfix;\n\t/**\n\t* Locations in user code that contributed to this diagnostic, in\n\t* `file:line:column` format. Relevant when the stack trace doesn't reflect\n\t* the user's source (e.g. compilers, bundlers), otherwise redundant with the\n\t* stack and should be omitted.\n\t*/\n\tsources;\n\t/**\n\t* Structured information associated with this diagnostic code.\n\t*/\n\tdata;\n\t/**\n\t* Alias for {@link Error.message}: the reason this diagnostic was raised.\n\t*/\n\tget why() {\n\t\treturn this.message;\n\t}\n\t/**\n\t* @param init structured initializer; `why` is required\n\t* @param captureFrom V8 stack-cutoff frame. Defaults to {@link Diagnostic}\n\t* so the top of the trace is the `new Diagnostic(...)` call site.\n\t* `defineDiagnostics` passes its action method to strip its own frames too.\n\t* Ignored on engines without `Error.captureStackTrace`.\n\t*/\n\tconstructor(init, captureFrom = Diagnostic) {\n\t\tsuper(init.why, { cause: init.cause });\n\t\tthis.code = this.name = init.code;\n\t\tthis.fix = init.fix;\n\t\tthis.docs = init.docs;\n\t\tthis.sources = init.sources;\n\t\tthis.data = init.data;\n\t\tcaptureStackTrace?.(this, captureFrom);\n\t}\n\t/**\n\t* Converts the diagnostic into a serializable structured object.\n\t*/\n\ttoJSON() {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\twhy: this.why,\n\t\t\tfix: this.fix,\n\t\t\tdocs: this.docs,\n\t\t\tsources: this.sources,\n\t\t\tcause: this.cause,\n\t\t\tdata: this.data,\n\t\t\tstack: this.stack\n\t\t};\n\t}\n};\n/**\n* Resolves the docs URL for a code from a `docsBase` (string template or\n* resolver function). Shared by {@link defineDiagnostics} and\n* {@link defineProdDiagnostics}. Per-code `docs` overrides are handled by the\n* caller; this only covers the `docsBase`-derived case.\n*\n* @internal\n*/\nfunction deriveDocs(docsBase, code) {\n\treturn typeof docsBase === \"string\" ? `${docsBase}/${code.toLowerCase()}` : docsBase?.(code);\n}\n/**\n* Creates a typed diagnostics object from a set of code definitions. Each\n* code becomes a callable {@link DiagnosticHandle}: invoke to report, or\n* `throw` the result to raise. No `new` required, no proxy.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction defineDiagnostics(options) {\n\tconst reporters = options.reporters ?? [];\n\tconst result = {};\n\tconst { docsBase } = options;\n\tfor (const code of Object.keys(options.codes)) {\n\t\tconst def = options.codes[code];\n\t\tconst docs = def.docs === false ? void 0 : def.docs || deriveDocs(docsBase, code);\n\t\tconst handle = (params = {}, reporterOptions = {}) => {\n\t\t\tconst diagnostic = new Diagnostic({\n\t\t\t\tcode,\n\t\t\t\twhy: toValueWithArgs(def.why, params),\n\t\t\t\tfix: toValueWithArgs(def.fix, params),\n\t\t\t\tdocs,\n\t\t\t\tcause: params.cause,\n\t\t\t\tsources: params.sources,\n\t\t\t\tdata: toValueWithArgs(def.data, params)\n\t\t\t}, handle);\n\t\t\tfor (const reporter of reporters) reporter(diagnostic, reporterOptions);\n\t\t\treturn diagnostic;\n\t\t};\n\t\tresult[code] = handle;\n\t}\n\treturn result;\n}\n//#endregion\n//#region src/prod-diagnostics.ts\n/**\n* Production counterpart to {@link defineDiagnostics}. Returns a `Proxy` that\n* builds a minimal {@link Diagnostic} for any accessed code: the code becomes\n* the instance `name`, `docs` is derived from `docsBase`, and `why` points to\n* the docs URL when one exists (empty otherwise, so the thrown header is just\n* the code). It carries no catalog text or data, so it stays tiny in a bundle.\n*\n* The strip plugin (`@nostics/unplugin`) can rewrite a `defineDiagnostics()`\n* call into a `process.env.NODE_ENV === 'production'` ternary that selects this\n* factory in production, dropping every `why`/`fix` string from the bundle.\n*\n* @example\n* ```ts\n* const diagnostics = defineProdDiagnostics({ docsBase: 'https://docs.example.com' })\n* throw diagnostics.NUXT_B2011() // NUXT_B2011: https://docs.example.com/nuxt_b2011\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction defineProdDiagnostics(options = {}) {\n\tconst { docsBase, reporters = [] } = options;\n\treturn new Proxy({}, { get(_target, code) {\n\t\tif (typeof code !== \"string\") return void 0;\n\t\tconst handle = (params = {}, reporterOptions = {}) => {\n\t\t\tconst docs = deriveDocs(docsBase, code);\n\t\t\tconst diagnostic = new Diagnostic({\n\t\t\t\tcode,\n\t\t\t\twhy: docs ?? \"\",\n\t\t\t\tdocs,\n\t\t\t\tcause: params.cause,\n\t\t\t\tsources: params.sources\n\t\t\t}, handle);\n\t\t\tfor (const reporter of reporters) reporter(diagnostic, reporterOptions);\n\t\t\treturn diagnostic;\n\t\t};\n\t\treturn handle;\n\t} });\n}\n//#endregion\nexport { Diagnostic, createConsoleReporter, defineDiagnostics, defineProdDiagnostics, formatDiagnostic };\n\n//# sourceMappingURL=index.mjs.map","//#region \\0rolldown/runtime.js\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\tkey = keys[i];\n\t\tif (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {\n\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t});\n\t}\n\treturn to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", {\n\tvalue: mod,\n\tenumerable: true\n}) : target, mod));\n//#endregion\n//#region src/constants.ts\nconst VIEW_MODE_STORAGE_KEY = \"__vue-devtools-view-mode__\";\nconst VITE_PLUGIN_DETECTED_STORAGE_KEY = \"__vue-devtools-vite-plugin-detected__\";\nconst VITE_PLUGIN_CLIENT_URL_STORAGE_KEY = \"__vue-devtools-vite-plugin-client-url__\";\nconst BROADCAST_CHANNEL_NAME = \"__vue-devtools-broadcast-channel__\";\n//#endregion\n//#region src/env.ts\nconst isBrowser = typeof navigator !== \"undefined\";\nconst target = typeof window !== \"undefined\" ? window : typeof globalThis !== \"undefined\" ? globalThis : typeof global !== \"undefined\" ? global : {};\nconst isInChromePanel = typeof target.chrome !== \"undefined\" && !!target.chrome.devtools;\nconst isInIframe = isBrowser && target.self !== target.top;\nconst isInElectron = typeof navigator !== \"undefined\" && navigator.userAgent?.toLowerCase().includes(\"electron\");\nconst isNuxtApp = typeof window !== \"undefined\" && !!window.__NUXT__;\nconst isInSeparateWindow = !isInIframe && !isInChromePanel && !isInElectron;\n//#endregion\n//#region src/general.ts\nvar import_rfdc = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tmodule.exports = rfdc;\n\tfunction copyBuffer(cur) {\n\t\tif (cur instanceof Buffer) return Buffer.from(cur);\n\t\treturn new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length);\n\t}\n\tfunction rfdc(opts) {\n\t\topts = opts || {};\n\t\tif (opts.circles) return rfdcCircles(opts);\n\t\tconst constructorHandlers = /* @__PURE__ */ new Map();\n\t\tconstructorHandlers.set(Date, (o) => new Date(o));\n\t\tconstructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn)));\n\t\tconstructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn)));\n\t\tif (opts.constructorHandlers) for (const handler of opts.constructorHandlers) constructorHandlers.set(handler[0], handler[1]);\n\t\tlet handler = null;\n\t\treturn opts.proto ? cloneProto : clone;\n\t\tfunction cloneArray(a, fn) {\n\t\t\tconst keys = Object.keys(a);\n\t\t\tconst a2 = new Array(keys.length);\n\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\tconst k = keys[i];\n\t\t\t\tconst cur = a[k];\n\t\t\t\tif (typeof cur !== \"object\" || cur === null) a2[k] = cur;\n\t\t\t\telse if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) a2[k] = handler(cur, fn);\n\t\t\t\telse if (ArrayBuffer.isView(cur)) a2[k] = copyBuffer(cur);\n\t\t\t\telse a2[k] = fn(cur);\n\t\t\t}\n\t\t\treturn a2;\n\t\t}\n\t\tfunction clone(o) {\n\t\t\tif (typeof o !== \"object\" || o === null) return o;\n\t\t\tif (Array.isArray(o)) return cloneArray(o, clone);\n\t\t\tif (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) return handler(o, clone);\n\t\t\tconst o2 = {};\n\t\t\tfor (const k in o) {\n\t\t\t\tif (Object.hasOwnProperty.call(o, k) === false) continue;\n\t\t\t\tconst cur = o[k];\n\t\t\t\tif (typeof cur !== \"object\" || cur === null) o2[k] = cur;\n\t\t\t\telse if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) o2[k] = handler(cur, clone);\n\t\t\t\telse if (ArrayBuffer.isView(cur)) o2[k] = copyBuffer(cur);\n\t\t\t\telse o2[k] = clone(cur);\n\t\t\t}\n\t\t\treturn o2;\n\t\t}\n\t\tfunction cloneProto(o) {\n\t\t\tif (typeof o !== \"object\" || o === null) return o;\n\t\t\tif (Array.isArray(o)) return cloneArray(o, cloneProto);\n\t\t\tif (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) return handler(o, cloneProto);\n\t\t\tconst o2 = {};\n\t\t\tfor (const k in o) {\n\t\t\t\tconst cur = o[k];\n\t\t\t\tif (typeof cur !== \"object\" || cur === null) o2[k] = cur;\n\t\t\t\telse if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) o2[k] = handler(cur, cloneProto);\n\t\t\t\telse if (ArrayBuffer.isView(cur)) o2[k] = copyBuffer(cur);\n\t\t\t\telse o2[k] = cloneProto(cur);\n\t\t\t}\n\t\t\treturn o2;\n\t\t}\n\t}\n\tfunction rfdcCircles(opts) {\n\t\tconst refs = [];\n\t\tconst refsNew = [];\n\t\tconst constructorHandlers = /* @__PURE__ */ new Map();\n\t\tconstructorHandlers.set(Date, (o) => new Date(o));\n\t\tconstructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn)));\n\t\tconstructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn)));\n\t\tif (opts.constructorHandlers) for (const handler of opts.constructorHandlers) constructorHandlers.set(handler[0], handler[1]);\n\t\tlet handler = null;\n\t\treturn opts.proto ? cloneProto : clone;\n\t\tfunction cloneArray(a, fn) {\n\t\t\tconst keys = Object.keys(a);\n\t\t\tconst a2 = new Array(keys.length);\n\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\tconst k = keys[i];\n\t\t\t\tconst cur = a[k];\n\t\t\t\tif (typeof cur !== \"object\" || cur === null) a2[k] = cur;\n\t\t\t\telse if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) a2[k] = handler(cur, fn);\n\t\t\t\telse if (ArrayBuffer.isView(cur)) a2[k] = copyBuffer(cur);\n\t\t\t\telse {\n\t\t\t\t\tconst index = refs.indexOf(cur);\n\t\t\t\t\tif (index !== -1) a2[k] = refsNew[index];\n\t\t\t\t\telse a2[k] = fn(cur);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn a2;\n\t\t}\n\t\tfunction clone(o) {\n\t\t\tif (typeof o !== \"object\" || o === null) return o;\n\t\t\tif (Array.isArray(o)) return cloneArray(o, clone);\n\t\t\tif (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) return handler(o, clone);\n\t\t\tconst o2 = {};\n\t\t\trefs.push(o);\n\t\t\trefsNew.push(o2);\n\t\t\tfor (const k in o) {\n\t\t\t\tif (Object.hasOwnProperty.call(o, k) === false) continue;\n\t\t\t\tconst cur = o[k];\n\t\t\t\tif (typeof cur !== \"object\" || cur === null) o2[k] = cur;\n\t\t\t\telse if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) o2[k] = handler(cur, clone);\n\t\t\t\telse if (ArrayBuffer.isView(cur)) o2[k] = copyBuffer(cur);\n\t\t\t\telse {\n\t\t\t\t\tconst i = refs.indexOf(cur);\n\t\t\t\t\tif (i !== -1) o2[k] = refsNew[i];\n\t\t\t\t\telse o2[k] = clone(cur);\n\t\t\t\t}\n\t\t\t}\n\t\t\trefs.pop();\n\t\t\trefsNew.pop();\n\t\t\treturn o2;\n\t\t}\n\t\tfunction cloneProto(o) {\n\t\t\tif (typeof o !== \"object\" || o === null) return o;\n\t\t\tif (Array.isArray(o)) return cloneArray(o, cloneProto);\n\t\t\tif (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) return handler(o, cloneProto);\n\t\t\tconst o2 = {};\n\t\t\trefs.push(o);\n\t\t\trefsNew.push(o2);\n\t\t\tfor (const k in o) {\n\t\t\t\tconst cur = o[k];\n\t\t\t\tif (typeof cur !== \"object\" || cur === null) o2[k] = cur;\n\t\t\t\telse if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) o2[k] = handler(cur, cloneProto);\n\t\t\t\telse if (ArrayBuffer.isView(cur)) o2[k] = copyBuffer(cur);\n\t\t\t\telse {\n\t\t\t\t\tconst i = refs.indexOf(cur);\n\t\t\t\t\tif (i !== -1) o2[k] = refsNew[i];\n\t\t\t\t\telse o2[k] = cloneProto(cur);\n\t\t\t\t}\n\t\t\t}\n\t\t\trefs.pop();\n\t\t\trefsNew.pop();\n\t\t\treturn o2;\n\t\t}\n\t}\n})))(), 1);\nfunction NOOP() {}\nconst isNumeric = (str) => `${+str}` === str;\nconst isMacOS = () => navigator?.platform ? navigator?.platform.toLowerCase().includes(\"mac\") : /Macintosh/.test(navigator.userAgent);\nconst classifyRE = /(?:^|[-_/])(\\w)/g;\nconst camelizeRE = /-(\\w)/g;\nconst kebabizeRE = /([a-z0-9])([A-Z])/g;\nfunction toUpper(_, c) {\n\treturn c ? c.toUpperCase() : \"\";\n}\nfunction classify(str) {\n\treturn str && `${str}`.replace(classifyRE, toUpper);\n}\nfunction camelize(str) {\n\treturn str && str.replace(camelizeRE, toUpper);\n}\nfunction kebabize(str) {\n\treturn str && str.replace(kebabizeRE, (_, lowerCaseCharacter, upperCaseLetter) => {\n\t\treturn `${lowerCaseCharacter}-${upperCaseLetter}`;\n\t}).toLowerCase();\n}\nfunction basename(filename, ext) {\n\tlet normalizedFilename = filename.replace(/^[a-z]:/i, \"\").replace(/\\\\/g, \"/\");\n\tif (normalizedFilename.endsWith(`index${ext}`)) normalizedFilename = normalizedFilename.replace(`/index${ext}`, ext);\n\tconst lastSlashIndex = normalizedFilename.lastIndexOf(\"/\");\n\tconst baseNameWithExt = normalizedFilename.substring(lastSlashIndex + 1);\n\tif (ext) {\n\t\tconst extIndex = baseNameWithExt.lastIndexOf(ext);\n\t\treturn baseNameWithExt.substring(0, extIndex);\n\t}\n\treturn \"\";\n}\nfunction sortByKey(state) {\n\treturn state && state.slice().sort((a, b) => {\n\t\tif (a.key < b.key) return -1;\n\t\tif (a.key > b.key) return 1;\n\t\treturn 0;\n\t});\n}\nconst HTTP_URL_RE = /^https?:\\/\\//;\n/**\n* Check a string is start with `/` or a valid http url\n*/\nfunction isUrlString(str) {\n\treturn str.startsWith(\"/\") || HTTP_URL_RE.test(str);\n}\n/**\n* @copyright [rfdc](https://github.com/davidmarkclements/rfdc)\n* @description A really fast deep clone alternative\n*/\nconst deepClone = (0, import_rfdc.default)({ circles: true });\nfunction randomStr() {\n\treturn Math.random().toString(36).slice(2);\n}\nfunction isObject(value) {\n\treturn typeof value === \"object\" && !Array.isArray(value) && value !== null;\n}\nfunction isArray(value) {\n\treturn Array.isArray(value);\n}\nfunction isSet(value) {\n\treturn value instanceof Set;\n}\nfunction isMap(value) {\n\treturn value instanceof Map;\n}\n//#endregion\nexport { BROADCAST_CHANNEL_NAME, NOOP, VIEW_MODE_STORAGE_KEY, VITE_PLUGIN_CLIENT_URL_STORAGE_KEY, VITE_PLUGIN_DETECTED_STORAGE_KEY, basename, camelize, classify, deepClone, isArray, isBrowser, isInChromePanel, isInElectron, isInIframe, isInSeparateWindow, isMacOS, isMap, isNumeric, isNuxtApp, isObject, isSet, isUrlString, kebabize, randomStr, sortByKey, target };\n","//#region src/index.ts\nconst DEBOUNCE_DEFAULTS = { trailing: true };\n/**\nDebounce functions\n@param fn - Promise-returning/async function to debounce.\n@param wait - Milliseconds to wait before calling `fn`. Default value is 25ms\n@returns A function that delays calling `fn` until after `wait` milliseconds have elapsed since the last time it was called.\n@example\n```\nimport { debounce } from 'perfect-debounce';\nconst expensiveCall = async input => input;\nconst debouncedFn = debounce(expensiveCall, 200);\nfor (const number of [1, 2, 3]) {\nconsole.log(await debouncedFn(number));\n}\n//=> 1\n//=> 2\n//=> 3\n```\n*/\nfunction debounce(fn, wait = 25, options = {}) {\n\toptions = {\n\t\t...DEBOUNCE_DEFAULTS,\n\t\t...options\n\t};\n\tif (!Number.isFinite(wait)) throw new TypeError(\"Expected `wait` to be a finite number\");\n\tlet leadingValue;\n\tlet timeout;\n\tlet resolveList = [];\n\tlet currentPromise;\n\tlet trailingArgs;\n\tconst applyFn = (_this, args) => {\n\t\tcurrentPromise = _applyPromised(fn, _this, args);\n\t\tcurrentPromise.finally(() => {\n\t\t\tcurrentPromise = null;\n\t\t\tif (options.trailing && trailingArgs && !timeout) {\n\t\t\t\tconst promise = applyFn(_this, trailingArgs);\n\t\t\t\ttrailingArgs = null;\n\t\t\t\treturn promise;\n\t\t\t}\n\t\t});\n\t\treturn currentPromise;\n\t};\n\tconst debounced = function(...args) {\n\t\tif (options.trailing) trailingArgs = args;\n\t\tif (currentPromise) return currentPromise;\n\t\treturn new Promise((resolve) => {\n\t\t\tconst shouldCallNow = !timeout && options.leading;\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(() => {\n\t\t\t\ttimeout = null;\n\t\t\t\tconst promise = options.leading ? leadingValue : applyFn(this, args);\n\t\t\t\ttrailingArgs = null;\n\t\t\t\tfor (const _resolve of resolveList) _resolve(promise);\n\t\t\t\tresolveList = [];\n\t\t\t}, wait);\n\t\t\tif (shouldCallNow) {\n\t\t\t\tleadingValue = applyFn(this, args);\n\t\t\t\tresolve(leadingValue);\n\t\t\t} else resolveList.push(resolve);\n\t\t});\n\t};\n\tconst _clearTimeout = (timer) => {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimeout = null;\n\t\t}\n\t};\n\tdebounced.isPending = () => !!timeout;\n\tdebounced.cancel = () => {\n\t\t_clearTimeout(timeout);\n\t\tresolveList = [];\n\t\ttrailingArgs = null;\n\t};\n\tdebounced.flush = () => {\n\t\t_clearTimeout(timeout);\n\t\tif (!trailingArgs || currentPromise) return;\n\t\tconst args = trailingArgs;\n\t\ttrailingArgs = null;\n\t\treturn applyFn(this, args);\n\t};\n\treturn debounced;\n}\nasync function _applyPromised(fn, _this, args) {\n\treturn await fn.apply(_this, args);\n}\n\n//#endregion\nexport { debounce };","function flatHooks(configHooks, hooks = {}, parentName) {\n for (const key in configHooks) {\n const subHook = configHooks[key];\n const name = parentName ? `${parentName}:${key}` : key;\n if (typeof subHook === \"object\" && subHook !== null) {\n flatHooks(subHook, hooks, name);\n } else if (typeof subHook === \"function\") {\n hooks[name] = subHook;\n }\n }\n return hooks;\n}\nfunction mergeHooks(...hooks) {\n const finalHooks = {};\n for (const hook of hooks) {\n const flatenHook = flatHooks(hook);\n for (const key in flatenHook) {\n if (finalHooks[key]) {\n finalHooks[key].push(flatenHook[key]);\n } else {\n finalHooks[key] = [flatenHook[key]];\n }\n }\n }\n for (const key in finalHooks) {\n if (finalHooks[key].length > 1) {\n const array = finalHooks[key];\n finalHooks[key] = (...arguments_) => serial(array, (function_) => function_(...arguments_));\n } else {\n finalHooks[key] = finalHooks[key][0];\n }\n }\n return finalHooks;\n}\nfunction serial(tasks, function_) {\n return tasks.reduce(\n (promise, task) => promise.then(() => function_(task)),\n Promise.resolve()\n );\n}\nconst defaultTask = { run: (function_) => function_() };\nconst _createTask = () => defaultTask;\nconst createTask = typeof console.createTask !== \"undefined\" ? console.createTask : _createTask;\nfunction serialTaskCaller(hooks, args) {\n const name = args.shift();\n const task = createTask(name);\n return hooks.reduce(\n (promise, hookFunction) => promise.then(() => task.run(() => hookFunction(...args))),\n Promise.resolve()\n );\n}\nfunction parallelTaskCaller(hooks, args) {\n const name = args.shift();\n const task = createTask(name);\n return Promise.all(hooks.map((hook) => task.run(() => hook(...args))));\n}\nfunction serialCaller(hooks, arguments_) {\n return hooks.reduce(\n (promise, hookFunction) => promise.then(() => hookFunction(...arguments_ || [])),\n Promise.resolve()\n );\n}\nfunction parallelCaller(hooks, args) {\n return Promise.all(hooks.map((hook) => hook(...args || [])));\n}\nfunction callEachWith(callbacks, arg0) {\n for (const callback of [...callbacks]) {\n callback(arg0);\n }\n}\n\nclass Hookable {\n constructor() {\n this._hooks = {};\n this._before = void 0;\n this._after = void 0;\n this._deprecatedMessages = void 0;\n this._deprecatedHooks = {};\n this.hook = this.hook.bind(this);\n this.callHook = this.callHook.bind(this);\n this.callHookWith = this.callHookWith.bind(this);\n }\n hook(name, function_, options = {}) {\n if (!name || typeof function_ !== \"function\") {\n return () => {\n };\n }\n const originalName = name;\n let dep;\n while (this._deprecatedHooks[name]) {\n dep = this._deprecatedHooks[name];\n name = dep.to;\n }\n if (dep && !options.allowDeprecated) {\n let message = dep.message;\n if (!message) {\n message = `${originalName} hook has been deprecated` + (dep.to ? `, please use ${dep.to}` : \"\");\n }\n if (!this._deprecatedMessages) {\n this._deprecatedMessages = /* @__PURE__ */ new Set();\n }\n if (!this._deprecatedMessages.has(message)) {\n console.warn(message);\n this._deprecatedMessages.add(message);\n }\n }\n if (!function_.name) {\n try {\n Object.defineProperty(function_, \"name\", {\n get: () => \"_\" + name.replace(/\\W+/g, \"_\") + \"_hook_cb\",\n configurable: true\n });\n } catch {\n }\n }\n this._hooks[name] = this._hooks[name] || [];\n this._hooks[name].push(function_);\n return () => {\n if (function_) {\n this.removeHook(name, function_);\n function_ = void 0;\n }\n };\n }\n hookOnce(name, function_) {\n let _unreg;\n let _function = (...arguments_) => {\n if (typeof _unreg === \"function\") {\n _unreg();\n }\n _unreg = void 0;\n _function = void 0;\n return function_(...arguments_);\n };\n _unreg = this.hook(name, _function);\n return _unreg;\n }\n removeHook(name, function_) {\n if (this._hooks[name]) {\n const index = this._hooks[name].indexOf(function_);\n if (index !== -1) {\n this._hooks[name].splice(index, 1);\n }\n if (this._hooks[name].length === 0) {\n delete this._hooks[name];\n }\n }\n }\n deprecateHook(name, deprecated) {\n this._deprecatedHooks[name] = typeof deprecated === \"string\" ? { to: deprecated } : deprecated;\n const _hooks = this._hooks[name] || [];\n delete this._hooks[name];\n for (const hook of _hooks) {\n this.hook(name, hook);\n }\n }\n deprecateHooks(deprecatedHooks) {\n Object.assign(this._deprecatedHooks, deprecatedHooks);\n for (const name in deprecatedHooks) {\n this.deprecateHook(name, deprecatedHooks[name]);\n }\n }\n addHooks(configHooks) {\n const hooks = flatHooks(configHooks);\n const removeFns = Object.keys(hooks).map(\n (key) => this.hook(key, hooks[key])\n );\n return () => {\n for (const unreg of removeFns.splice(0, removeFns.length)) {\n unreg();\n }\n };\n }\n removeHooks(configHooks) {\n const hooks = flatHooks(configHooks);\n for (const key in hooks) {\n this.removeHook(key, hooks[key]);\n }\n }\n removeAllHooks() {\n for (const key in this._hooks) {\n delete this._hooks[key];\n }\n }\n callHook(name, ...arguments_) {\n arguments_.unshift(name);\n return this.callHookWith(serialTaskCaller, name, ...arguments_);\n }\n callHookParallel(name, ...arguments_) {\n arguments_.unshift(name);\n return this.callHookWith(parallelTaskCaller, name, ...arguments_);\n }\n callHookWith(caller, name, ...arguments_) {\n const event = this._before || this._after ? { name, args: arguments_, context: {} } : void 0;\n if (this._before) {\n callEachWith(this._before, event);\n }\n const result = caller(\n name in this._hooks ? [...this._hooks[name]] : [],\n arguments_\n );\n if (result instanceof Promise) {\n return result.finally(() => {\n if (this._after && event) {\n callEachWith(this._after, event);\n }\n });\n }\n if (this._after && event) {\n callEachWith(this._after, event);\n }\n return result;\n }\n beforeEach(function_) {\n this._before = this._before || [];\n this._before.push(function_);\n return () => {\n if (this._before !== void 0) {\n const index = this._before.indexOf(function_);\n if (index !== -1) {\n this._before.splice(index, 1);\n }\n }\n };\n }\n afterEach(function_) {\n this._after = this._after || [];\n this._after.push(function_);\n return () => {\n if (this._after !== void 0) {\n const index = this._after.indexOf(function_);\n if (index !== -1) {\n this._after.splice(index, 1);\n }\n }\n };\n }\n}\nfunction createHooks() {\n return new Hookable();\n}\n\nconst isBrowser = typeof window !== \"undefined\";\nfunction createDebugger(hooks, _options = {}) {\n const options = {\n inspect: isBrowser,\n group: isBrowser,\n filter: () => true,\n ..._options\n };\n const _filter = options.filter;\n const filter = typeof _filter === \"string\" ? (name) => name.startsWith(_filter) : _filter;\n const _tag = options.tag ? `[${options.tag}] ` : \"\";\n const logPrefix = (event) => _tag + event.name + \"\".padEnd(event._id, \"\\0\");\n const _idCtr = {};\n const unsubscribeBefore = hooks.beforeEach((event) => {\n if (filter !== void 0 && !filter(event.name)) {\n return;\n }\n _idCtr[event.name] = _idCtr[event.name] || 0;\n event._id = _idCtr[event.name]++;\n console.time(logPrefix(event));\n });\n const unsubscribeAfter = hooks.afterEach((event) => {\n if (filter !== void 0 && !filter(event.name)) {\n return;\n }\n if (options.group) {\n console.groupCollapsed(event.name);\n }\n if (options.inspect) {\n console.timeLog(logPrefix(event), event.args);\n } else {\n console.timeEnd(logPrefix(event));\n }\n if (options.group) {\n console.groupEnd();\n }\n _idCtr[event.name]--;\n });\n return {\n /** Stop debugging and remove listeners */\n close: () => {\n unsubscribeBefore();\n unsubscribeAfter();\n }\n };\n}\n\nexport { Hookable, createDebugger, createHooks, flatHooks, mergeHooks, parallelCaller, serial, serialCaller };\n","import { basename, camelize, classify, deepClone, isBrowser, isNuxtApp, isUrlString, kebabize, target } from \"@vue/devtools-shared\";\nimport { debounce } from \"perfect-debounce\";\nimport { createHooks } from \"hookable\";\nimport { createBirpc, createBirpcGroup } from \"birpc\";\n//#region \\0rolldown/runtime.js\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\tkey = keys[i];\n\t\tif (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {\n\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t});\n\t}\n\treturn to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", {\n\tvalue: mod,\n\tenumerable: true\n}) : target, mod));\n//#endregion\n//#region src/compat/index.ts\nfunction onLegacyDevToolsPluginApiAvailable(cb) {\n\tif (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__) {\n\t\tcb();\n\t\treturn;\n\t}\n\tObject.defineProperty(target, \"__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__\", {\n\t\tset(value) {\n\t\t\tif (value) cb();\n\t\t},\n\t\tconfigurable: true\n\t});\n}\n//#endregion\n//#region src/core/component/utils/index.ts\nfunction getComponentTypeName(options) {\n\tif (typeof options === \"function\") return options.displayName || options.name || options.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__ || \"\";\n\tconst name = options.name || options._componentTag || options.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__ || options.__name;\n\tif (name === \"index\" && options.__file?.endsWith(\"index.vue\")) return \"\";\n\treturn name;\n}\nfunction getComponentFileName(options) {\n\tconst file = options.__file;\n\tif (file) return classify(basename(file, \".vue\"));\n}\nfunction getComponentName(options) {\n\tconst name = options.displayName || options.name || options._componentTag;\n\tif (name) return name;\n\treturn getComponentFileName(options);\n}\nfunction saveComponentGussedName(instance, name) {\n\tinstance.type.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__ = name;\n\treturn name;\n}\nfunction getAppRecord(instance) {\n\tif (instance.__VUE_DEVTOOLS_NEXT_APP_RECORD__) return instance.__VUE_DEVTOOLS_NEXT_APP_RECORD__;\n\telse if (instance.root) return instance.appContext.app.__VUE_DEVTOOLS_NEXT_APP_RECORD__;\n}\nasync function getComponentId(options) {\n\tconst { app, uid, instance } = options;\n\ttry {\n\t\tif (instance.__VUE_DEVTOOLS_NEXT_UID__) return instance.__VUE_DEVTOOLS_NEXT_UID__;\n\t\tconst appRecord = await getAppRecord(app);\n\t\tif (!appRecord) return null;\n\t\tconst isRoot = appRecord.rootInstance === instance;\n\t\treturn `${appRecord.id}:${isRoot ? \"root\" : uid}`;\n\t} catch (e) {}\n}\nfunction isFragment(instance) {\n\tconst subTreeType = instance.subTree?.type;\n\tconst appRecord = getAppRecord(instance);\n\tif (appRecord) return appRecord?.types?.Fragment === subTreeType;\n\treturn false;\n}\nfunction isBeingDestroyed(instance) {\n\treturn instance._isBeingDestroyed || instance.isUnmounted;\n}\n/**\n* Get the appropriate display name for an instance.\n*\n* @param {Vue} instance\n* @return {string}\n*/\nfunction getInstanceName(instance) {\n\tconst name = getComponentTypeName(instance?.type || {});\n\tif (name) return name;\n\tif (instance?.root === instance) return \"Root\";\n\tfor (const key in instance.parent?.type?.components) if (instance.parent.type.components[key] === instance?.type) return saveComponentGussedName(instance, key);\n\tfor (const key in instance.appContext?.components) if (instance.appContext.components[key] === instance?.type) return saveComponentGussedName(instance, key);\n\tconst fileName = getComponentFileName(instance?.type || {});\n\tif (fileName) return fileName;\n\treturn \"Anonymous Component\";\n}\n/**\n* Returns a devtools unique id for instance.\n* @param {Vue} instance\n*/\nfunction getUniqueComponentId(instance) {\n\treturn `${instance?.appContext?.app?.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__ ?? 0}:${instance === instance?.root ? \"root\" : instance.uid}`;\n}\nfunction getRenderKey(value) {\n\tif (value == null) return \"\";\n\tif (typeof value === \"number\") return value;\n\telse if (typeof value === \"string\") return `'${value}'`;\n\telse if (Array.isArray(value)) return \"Array\";\n\telse return \"Object\";\n}\nfunction returnError(cb) {\n\ttry {\n\t\treturn cb();\n\t} catch (e) {\n\t\treturn e;\n\t}\n}\nfunction getComponentInstance(appRecord, instanceId) {\n\tinstanceId = instanceId || `${appRecord.id}:root`;\n\treturn appRecord.instanceMap.get(instanceId) || appRecord.instanceMap.get(\":root\");\n}\nfunction ensurePropertyExists(obj, key, skipObjCheck = false) {\n\treturn skipObjCheck ? key in obj : typeof obj === \"object\" && obj !== null ? key in obj : false;\n}\n//#endregion\n//#region src/core/component/state/bounding-rect.ts\nfunction createRect() {\n\tconst rect = {\n\t\ttop: 0,\n\t\tbottom: 0,\n\t\tleft: 0,\n\t\tright: 0,\n\t\tget width() {\n\t\t\treturn rect.right - rect.left;\n\t\t},\n\t\tget height() {\n\t\t\treturn rect.bottom - rect.top;\n\t\t}\n\t};\n\treturn rect;\n}\nlet range;\nfunction getTextRect(node) {\n\tif (!range) range = document.createRange();\n\trange.selectNode(node);\n\treturn range.getBoundingClientRect();\n}\nfunction getFragmentRect(vnode) {\n\tconst rect = createRect();\n\tif (!vnode.children) return rect;\n\tfor (let i = 0, l = vnode.children.length; i < l; i++) {\n\t\tconst childVnode = vnode.children[i];\n\t\tlet childRect;\n\t\tif (childVnode.component) childRect = getComponentBoundingRect(childVnode.component);\n\t\telse if (childVnode.el) {\n\t\t\tconst el = childVnode.el;\n\t\t\tif (el.nodeType === 1 || el.getBoundingClientRect) childRect = el.getBoundingClientRect();\n\t\t\telse if (el.nodeType === 3 && el.data.trim()) childRect = getTextRect(el);\n\t\t}\n\t\tif (childRect) mergeRects(rect, childRect);\n\t}\n\treturn rect;\n}\nfunction mergeRects(a, b) {\n\tif (!a.top || b.top < a.top) a.top = b.top;\n\tif (!a.bottom || b.bottom > a.bottom) a.bottom = b.bottom;\n\tif (!a.left || b.left < a.left) a.left = b.left;\n\tif (!a.right || b.right > a.right) a.right = b.right;\n\treturn a;\n}\nconst DEFAULT_RECT = {\n\ttop: 0,\n\tleft: 0,\n\tright: 0,\n\tbottom: 0,\n\twidth: 0,\n\theight: 0\n};\nfunction getComponentBoundingRect(instance) {\n\tconst el = instance.subTree.el;\n\tif (typeof window === \"undefined\") return DEFAULT_RECT;\n\tif (isFragment(instance)) return getFragmentRect(instance.subTree);\n\telse if (el?.nodeType === 1) return el?.getBoundingClientRect();\n\telse if (instance.subTree.component) return getComponentBoundingRect(instance.subTree.component);\n\telse return DEFAULT_RECT;\n}\n//#endregion\n//#region src/core/component/tree/el.ts\nfunction getRootElementsFromComponentInstance(instance) {\n\tif (isFragment(instance)) return getFragmentRootElements(instance.subTree);\n\tif (!instance.subTree) return [];\n\treturn [instance.subTree.el];\n}\nfunction getFragmentRootElements(vnode) {\n\tif (!vnode.children) return [];\n\tconst list = [];\n\tvnode.children.forEach((childVnode) => {\n\t\tif (childVnode.component) list.push(...getRootElementsFromComponentInstance(childVnode.component));\n\t\telse if (childVnode?.el) list.push(childVnode.el);\n\t});\n\treturn list;\n}\n//#endregion\n//#region src/core/component-highlighter/index.ts\nconst CONTAINER_ELEMENT_ID = \"__vue-devtools-component-inspector__\";\nconst CARD_ELEMENT_ID = \"__vue-devtools-component-inspector__card__\";\nconst COMPONENT_NAME_ELEMENT_ID = \"__vue-devtools-component-inspector__name__\";\nconst INDICATOR_ELEMENT_ID = \"__vue-devtools-component-inspector__indicator__\";\nconst containerStyles = {\n\tdisplay: \"block\",\n\tzIndex: 2147483640,\n\tposition: \"fixed\",\n\tbackgroundColor: \"#42b88325\",\n\tborder: \"1px solid #42b88350\",\n\tborderRadius: \"5px\",\n\ttransition: \"all 0.1s ease-in\",\n\tpointerEvents: \"none\"\n};\nconst cardStyles = {\n\tfontFamily: \"Arial, Helvetica, sans-serif\",\n\tpadding: \"5px 8px\",\n\tborderRadius: \"4px\",\n\ttextAlign: \"left\",\n\tposition: \"absolute\",\n\tleft: 0,\n\tcolor: \"#e9e9e9\",\n\tfontSize: \"14px\",\n\tfontWeight: 600,\n\tlineHeight: \"24px\",\n\tbackgroundColor: \"#42b883\",\n\tboxShadow: \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)\"\n};\nconst indicatorStyles = {\n\tdisplay: \"inline-block\",\n\tfontWeight: 400,\n\tfontStyle: \"normal\",\n\tfontSize: \"12px\",\n\topacity: .7\n};\nfunction getContainerElement() {\n\treturn document.getElementById(CONTAINER_ELEMENT_ID);\n}\nfunction getCardElement() {\n\treturn document.getElementById(CARD_ELEMENT_ID);\n}\nfunction getIndicatorElement() {\n\treturn document.getElementById(INDICATOR_ELEMENT_ID);\n}\nfunction getNameElement() {\n\treturn document.getElementById(COMPONENT_NAME_ELEMENT_ID);\n}\nfunction getStyles(bounds) {\n\treturn {\n\t\tleft: `${Math.round(bounds.left * 100) / 100}px`,\n\t\ttop: `${Math.round(bounds.top * 100) / 100}px`,\n\t\twidth: `${Math.round(bounds.width * 100) / 100}px`,\n\t\theight: `${Math.round(bounds.height * 100) / 100}px`\n\t};\n}\nfunction create(options) {\n\tconst containerEl = document.createElement(\"div\");\n\tcontainerEl.id = options.elementId ?? CONTAINER_ELEMENT_ID;\n\tObject.assign(containerEl.style, {\n\t\t...containerStyles,\n\t\t...getStyles(options.bounds),\n\t\t...options.style\n\t});\n\tconst cardEl = document.createElement(\"span\");\n\tcardEl.id = CARD_ELEMENT_ID;\n\tObject.assign(cardEl.style, {\n\t\t...cardStyles,\n\t\ttop: options.bounds.top < 35 ? 0 : \"-35px\"\n\t});\n\tconst nameEl = document.createElement(\"span\");\n\tnameEl.id = COMPONENT_NAME_ELEMENT_ID;\n\tnameEl.innerHTML = `<${options.name}> `;\n\tconst indicatorEl = document.createElement(\"i\");\n\tindicatorEl.id = INDICATOR_ELEMENT_ID;\n\tindicatorEl.innerHTML = `${Math.round(options.bounds.width * 100) / 100} x ${Math.round(options.bounds.height * 100) / 100}`;\n\tObject.assign(indicatorEl.style, indicatorStyles);\n\tcardEl.appendChild(nameEl);\n\tcardEl.appendChild(indicatorEl);\n\tcontainerEl.appendChild(cardEl);\n\tdocument.body.appendChild(containerEl);\n\treturn containerEl;\n}\nfunction update(options) {\n\tconst containerEl = getContainerElement();\n\tconst cardEl = getCardElement();\n\tconst nameEl = getNameElement();\n\tconst indicatorEl = getIndicatorElement();\n\tif (containerEl) {\n\t\tObject.assign(containerEl.style, {\n\t\t\t...containerStyles,\n\t\t\t...getStyles(options.bounds)\n\t\t});\n\t\tObject.assign(cardEl.style, { top: options.bounds.top < 35 ? 0 : \"-35px\" });\n\t\tnameEl.innerHTML = `<${options.name}> `;\n\t\tindicatorEl.innerHTML = `${Math.round(options.bounds.width * 100) / 100} x ${Math.round(options.bounds.height * 100) / 100}`;\n\t}\n}\nfunction highlight(instance) {\n\tconst bounds = getComponentBoundingRect(instance);\n\tif (!bounds.width && !bounds.height) return;\n\tconst name = getInstanceName(instance);\n\tgetContainerElement() ? update({\n\t\tbounds,\n\t\tname\n\t}) : create({\n\t\tbounds,\n\t\tname\n\t});\n}\nfunction unhighlight() {\n\tconst el = getContainerElement();\n\tif (el) el.style.display = \"none\";\n}\nlet inspectInstance = null;\nfunction inspectFn(e) {\n\tconst target = e.target;\n\tif (target) {\n\t\tconst instance = target.__vueParentComponent;\n\t\tif (instance) {\n\t\t\tinspectInstance = instance;\n\t\t\tif (instance.vnode.el) {\n\t\t\t\tconst bounds = getComponentBoundingRect(instance);\n\t\t\t\tconst name = getInstanceName(instance);\n\t\t\t\tgetContainerElement() ? update({\n\t\t\t\t\tbounds,\n\t\t\t\t\tname\n\t\t\t\t}) : create({\n\t\t\t\t\tbounds,\n\t\t\t\t\tname\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\nfunction selectComponentFn(e, cb) {\n\te.preventDefault();\n\te.stopPropagation();\n\tif (inspectInstance) cb(getUniqueComponentId(inspectInstance));\n}\nlet inspectComponentHighLighterSelectFn = null;\nfunction cancelInspectComponentHighLighter() {\n\tunhighlight();\n\twindow.removeEventListener(\"mouseover\", inspectFn);\n\twindow.removeEventListener(\"click\", inspectComponentHighLighterSelectFn, true);\n\tinspectComponentHighLighterSelectFn = null;\n}\nfunction inspectComponentHighLighter() {\n\twindow.addEventListener(\"mouseover\", inspectFn);\n\treturn new Promise((resolve) => {\n\t\tfunction onSelect(e) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tselectComponentFn(e, (id) => {\n\t\t\t\twindow.removeEventListener(\"click\", onSelect, true);\n\t\t\t\tinspectComponentHighLighterSelectFn = null;\n\t\t\t\twindow.removeEventListener(\"mouseover\", inspectFn);\n\t\t\t\tconst el = getContainerElement();\n\t\t\t\tif (el) el.style.display = \"none\";\n\t\t\t\tresolve(JSON.stringify({ id }));\n\t\t\t});\n\t\t}\n\t\tinspectComponentHighLighterSelectFn = onSelect;\n\t\twindow.addEventListener(\"click\", onSelect, true);\n\t});\n}\nfunction scrollToComponent(options) {\n\tconst instance = getComponentInstance(activeAppRecord.value, options.id);\n\tif (instance) {\n\t\tconst [el] = getRootElementsFromComponentInstance(instance);\n\t\tif (typeof el.scrollIntoView === \"function\") el.scrollIntoView({ behavior: \"smooth\" });\n\t\telse {\n\t\t\tconst bounds = getComponentBoundingRect(instance);\n\t\t\tconst scrollTarget = document.createElement(\"div\");\n\t\t\tconst styles = {\n\t\t\t\t...getStyles(bounds),\n\t\t\t\tposition: \"absolute\"\n\t\t\t};\n\t\t\tObject.assign(scrollTarget.style, styles);\n\t\t\tdocument.body.appendChild(scrollTarget);\n\t\t\tscrollTarget.scrollIntoView({ behavior: \"smooth\" });\n\t\t\tsetTimeout(() => {\n\t\t\t\tdocument.body.removeChild(scrollTarget);\n\t\t\t}, 2e3);\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tconst bounds = getComponentBoundingRect(instance);\n\t\t\tif (bounds.width || bounds.height) {\n\t\t\t\tconst name = getInstanceName(instance);\n\t\t\t\tconst el = getContainerElement();\n\t\t\t\tel ? update({\n\t\t\t\t\t...options,\n\t\t\t\t\tname,\n\t\t\t\t\tbounds\n\t\t\t\t}) : create({\n\t\t\t\t\t...options,\n\t\t\t\t\tname,\n\t\t\t\t\tbounds\n\t\t\t\t});\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (el) el.style.display = \"none\";\n\t\t\t\t}, 1500);\n\t\t\t}\n\t\t}, 1200);\n\t}\n}\n//#endregion\n//#region src/core/component-inspector/index.ts\ntarget.__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__ ??= true;\nfunction toggleComponentInspectorEnabled(enabled) {\n\ttarget.__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__ = enabled;\n}\nfunction waitForInspectorInit(cb) {\n\tlet total = 0;\n\tconst timer = setInterval(() => {\n\t\tif (target.__VUE_INSPECTOR__) {\n\t\t\tclearInterval(timer);\n\t\t\ttotal += 30;\n\t\t\tcb();\n\t\t}\n\t\tif (total >= 5e3) clearInterval(timer);\n\t}, 30);\n}\nfunction setupInspector() {\n\tconst inspector = target.__VUE_INSPECTOR__;\n\tconst _openInEditor = inspector.openInEditor;\n\tinspector.openInEditor = async (...params) => {\n\t\tinspector.disable();\n\t\t_openInEditor(...params);\n\t};\n}\nfunction getComponentInspector() {\n\treturn new Promise((resolve) => {\n\t\tfunction setup() {\n\t\t\tsetupInspector();\n\t\t\tresolve(target.__VUE_INSPECTOR__);\n\t\t}\n\t\tif (!target.__VUE_INSPECTOR__) waitForInspectorInit(() => {\n\t\t\tsetup();\n\t\t});\n\t\telse setup();\n\t});\n}\n//#endregion\n//#region src/shared/stub-vue.ts\n/**\n* To prevent include a **HUGE** vue package in the final bundle of chrome ext / electron\n* we stub the necessary vue module.\n* This implementation is based on the 1c3327a0fa5983aa9078e3f7bb2330f572435425 commit\n*/\n/**\n* @from [@vue/reactivity](https://github.com/vuejs/core/blob/1c3327a0fa5983aa9078e3f7bb2330f572435425/packages/reactivity/src/constants.ts#L17-L23)\n*/\nlet ReactiveFlags = /* @__PURE__ */ function(ReactiveFlags) {\n\tReactiveFlags[\"SKIP\"] = \"__v_skip\";\n\tReactiveFlags[\"IS_REACTIVE\"] = \"__v_isReactive\";\n\tReactiveFlags[\"IS_READONLY\"] = \"__v_isReadonly\";\n\tReactiveFlags[\"IS_SHALLOW\"] = \"__v_isShallow\";\n\tReactiveFlags[\"RAW\"] = \"__v_raw\";\n\treturn ReactiveFlags;\n}({});\n/**\n* @from [@vue/reactivity](https://github.com/vuejs/core/blob/1c3327a0fa5983aa9078e3f7bb2330f572435425/packages/reactivity/src/reactive.ts#L330-L332)\n*/\nfunction isReadonly(value) {\n\treturn !!(value && value[ReactiveFlags.IS_READONLY]);\n}\n/**\n* @from [@vue/reactivity](https://github.com/vuejs/core/blob/1c3327a0fa5983aa9078e3f7bb2330f572435425/packages/reactivity/src/reactive.ts#L312-L317)\n*/\nfunction isReactive$1(value) {\n\tif (isReadonly(value)) return isReactive$1(value[ReactiveFlags.RAW]);\n\treturn !!(value && value[ReactiveFlags.IS_REACTIVE]);\n}\nfunction isRef$1(r) {\n\treturn !!(r && r.__v_isRef === true);\n}\n/**\n* @from [@vue/reactivity](https://github.com/vuejs/core/blob/1c3327a0fa5983aa9078e3f7bb2330f572435425/packages/reactivity/src/reactive.ts#L372-L375)\n*/\nfunction toRaw$1(observed) {\n\tconst raw = observed && observed[ReactiveFlags.RAW];\n\treturn raw ? toRaw$1(raw) : observed;\n}\n//#endregion\n//#region src/core/component/state/editor.ts\nvar StateEditor = class {\n\tconstructor() {\n\t\tthis.refEditor = new RefStateEditor();\n\t}\n\tset(object, path, value, cb) {\n\t\tconst sections = Array.isArray(path) ? path : path.split(\".\");\n\t\twhile (sections.length > 1) {\n\t\t\tconst section = sections.shift();\n\t\t\tif (object instanceof Map) object = object.get(section);\n\t\t\telse if (object instanceof Set) object = Array.from(object.values())[section];\n\t\t\telse object = object[section];\n\t\t\tif (this.refEditor.isRef(object)) object = this.refEditor.get(object);\n\t\t}\n\t\tconst field = sections[0];\n\t\tconst item = this.refEditor.get(object)[field];\n\t\tif (cb) cb(object, field, value);\n\t\telse if (this.refEditor.isRef(item)) this.refEditor.set(item, value);\n\t\telse object[field] = value;\n\t}\n\tget(object, path) {\n\t\tconst sections = Array.isArray(path) ? path : path.split(\".\");\n\t\tfor (let i = 0; i < sections.length; i++) {\n\t\t\tif (object instanceof Map) object = object.get(sections[i]);\n\t\t\telse object = object[sections[i]];\n\t\t\tif (this.refEditor.isRef(object)) object = this.refEditor.get(object);\n\t\t\tif (!object) return void 0;\n\t\t}\n\t\treturn object;\n\t}\n\thas(object, path, parent = false) {\n\t\tif (typeof object === \"undefined\") return false;\n\t\tconst sections = Array.isArray(path) ? path.slice() : path.split(\".\");\n\t\tconst size = !parent ? 1 : 2;\n\t\twhile (object && sections.length > size) {\n\t\t\tconst section = sections.shift();\n\t\t\tobject = object[section];\n\t\t\tif (this.refEditor.isRef(object)) object = this.refEditor.get(object);\n\t\t}\n\t\treturn object != null && Object.prototype.hasOwnProperty.call(object, sections[0]);\n\t}\n\tcreateDefaultSetCallback(state) {\n\t\treturn (object, field, value) => {\n\t\t\tif (state.remove || state.newKey) if (Array.isArray(object)) object.splice(field, 1);\n\t\t\telse if (toRaw$1(object) instanceof Map) object.delete(field);\n\t\t\telse if (toRaw$1(object) instanceof Set) object.delete(Array.from(object.values())[field]);\n\t\t\telse Reflect.deleteProperty(object, field);\n\t\t\tif (!state.remove) {\n\t\t\t\tconst target = object[state.newKey || field];\n\t\t\t\tif (this.refEditor.isRef(target)) this.refEditor.set(target, value);\n\t\t\t\telse if (toRaw$1(object) instanceof Map) object.set(state.newKey || field, value);\n\t\t\t\telse if (toRaw$1(object) instanceof Set) object.add(value);\n\t\t\t\telse object[state.newKey || field] = value;\n\t\t\t}\n\t\t};\n\t}\n};\nvar RefStateEditor = class {\n\tset(ref, value) {\n\t\tif (isRef$1(ref)) ref.value = value;\n\t\telse {\n\t\t\tif (ref instanceof Set && Array.isArray(value)) {\n\t\t\t\tref.clear();\n\t\t\t\tvalue.forEach((v) => ref.add(v));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst currentKeys = Object.keys(value);\n\t\t\tif (ref instanceof Map) {\n\t\t\t\tconst previousKeysSet = new Set(ref.keys());\n\t\t\t\tcurrentKeys.forEach((key) => {\n\t\t\t\t\tref.set(key, Reflect.get(value, key));\n\t\t\t\t\tpreviousKeysSet.delete(key);\n\t\t\t\t});\n\t\t\t\tpreviousKeysSet.forEach((key) => ref.delete(key));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst previousKeysSet = new Set(Object.keys(ref));\n\t\t\tcurrentKeys.forEach((key) => {\n\t\t\t\tReflect.set(ref, key, Reflect.get(value, key));\n\t\t\t\tpreviousKeysSet.delete(key);\n\t\t\t});\n\t\t\tpreviousKeysSet.forEach((key) => Reflect.deleteProperty(ref, key));\n\t\t}\n\t}\n\tget(ref) {\n\t\treturn isRef$1(ref) ? ref.value : ref;\n\t}\n\tisRef(ref) {\n\t\treturn isRef$1(ref) || isReactive$1(ref);\n\t}\n};\nasync function editComponentState(payload, stateEditor) {\n\tconst { path, nodeId, state, type } = payload;\n\tconst instance = getComponentInstance(activeAppRecord.value, nodeId);\n\tif (!instance) return;\n\tconst targetPath = path.slice();\n\tlet target;\n\tif (Object.keys(instance.props).includes(path[0])) target = instance.props;\n\telse if (instance.devtoolsRawSetupState && Object.keys(instance.devtoolsRawSetupState).includes(path[0])) target = instance.devtoolsRawSetupState;\n\telse if (instance.data && Object.keys(instance.data).includes(path[0])) target = instance.data;\n\telse target = instance.proxy;\n\tif (target && targetPath) {\n\t\tif (state.type === \"object\" && type === \"reactive\") {}\n\t\tstateEditor.set(target, targetPath, state.value, stateEditor.createDefaultSetCallback(state));\n\t}\n}\nconst stateEditor = new StateEditor();\nasync function editState(payload) {\n\teditComponentState(payload, stateEditor);\n}\n//#endregion\n//#region src/core/timeline/storage.ts\nconst TIMELINE_LAYERS_STATE_STORAGE_ID = \"__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS_STATE__\";\nfunction addTimelineLayersStateToStorage(state) {\n\tif (!isBrowser || typeof localStorage === \"undefined\" || localStorage === null) return;\n\tlocalStorage.setItem(TIMELINE_LAYERS_STATE_STORAGE_ID, JSON.stringify(state));\n}\nfunction getTimelineLayersStateFromStorage() {\n\tif (typeof window === \"undefined\" || !isBrowser || typeof localStorage === \"undefined\" || localStorage === null) return {\n\t\trecordingState: false,\n\t\tmouseEventEnabled: false,\n\t\tkeyboardEventEnabled: false,\n\t\tcomponentEventEnabled: false,\n\t\tperformanceEventEnabled: false,\n\t\tselected: \"\"\n\t};\n\tconst state = typeof localStorage.getItem !== \"undefined\" ? localStorage.getItem(TIMELINE_LAYERS_STATE_STORAGE_ID) : null;\n\treturn state ? JSON.parse(state) : {\n\t\trecordingState: false,\n\t\tmouseEventEnabled: false,\n\t\tkeyboardEventEnabled: false,\n\t\tcomponentEventEnabled: false,\n\t\tperformanceEventEnabled: false,\n\t\tselected: \"\"\n\t};\n}\n//#endregion\n//#region src/ctx/timeline.ts\ntarget.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS ??= [];\nconst devtoolsTimelineLayers = new Proxy(target.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS, { get(target, prop, receiver) {\n\treturn Reflect.get(target, prop, receiver);\n} });\nfunction addTimelineLayer(options, descriptor) {\n\tdevtoolsState.timelineLayersState[descriptor.id] = false;\n\tdevtoolsTimelineLayers.push({\n\t\t...options,\n\t\tdescriptorId: descriptor.id,\n\t\tappRecord: getAppRecord(descriptor.app)\n\t});\n}\nfunction updateTimelineLayersState(state) {\n\tconst updatedState = {\n\t\t...devtoolsState.timelineLayersState,\n\t\t...state\n\t};\n\taddTimelineLayersStateToStorage(updatedState);\n\tupdateDevToolsState({ timelineLayersState: updatedState });\n}\n//#endregion\n//#region src/ctx/inspector.ts\ntarget.__VUE_DEVTOOLS_KIT_INSPECTOR__ ??= [];\nconst devtoolsInspector = new Proxy(target.__VUE_DEVTOOLS_KIT_INSPECTOR__, { get(target, prop, receiver) {\n\treturn Reflect.get(target, prop, receiver);\n} });\nconst callInspectorUpdatedHook = debounce(() => {\n\tdevtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.SEND_INSPECTOR_TO_CLIENT, getActiveInspectors());\n});\nfunction addInspector(inspector, descriptor) {\n\tdevtoolsInspector.push({\n\t\toptions: inspector,\n\t\tdescriptor,\n\t\ttreeFilterPlaceholder: inspector.treeFilterPlaceholder ?? \"Search tree...\",\n\t\tstateFilterPlaceholder: inspector.stateFilterPlaceholder ?? \"Search state...\",\n\t\ttreeFilter: \"\",\n\t\tselectedNodeId: \"\",\n\t\tappRecord: getAppRecord(descriptor.app)\n\t});\n\tcallInspectorUpdatedHook();\n}\nfunction getActiveInspectors() {\n\treturn devtoolsInspector.filter((inspector) => inspector.descriptor.app === activeAppRecord.value.app).filter((inspector) => inspector.descriptor.id !== \"components\").map((inspector) => {\n\t\tconst descriptor = inspector.descriptor;\n\t\tconst options = inspector.options;\n\t\treturn {\n\t\t\tid: options.id,\n\t\t\tlabel: options.label,\n\t\t\tlogo: descriptor.logo,\n\t\t\ticon: `custom-ic-baseline-${options?.icon?.replace(/_/g, \"-\")}`,\n\t\t\tpackageName: descriptor.packageName,\n\t\t\thomepage: descriptor.homepage,\n\t\t\tpluginId: descriptor.id\n\t\t};\n\t});\n}\nfunction getInspectorInfo(id) {\n\tconst inspector = getInspector(id, activeAppRecord.value.app);\n\tif (!inspector) return;\n\tconst descriptor = inspector.descriptor;\n\tconst options = inspector.options;\n\tconst timelineLayers = devtoolsTimelineLayers.filter((layer) => layer.descriptorId === descriptor.id).map((item) => ({\n\t\tid: item.id,\n\t\tlabel: item.label,\n\t\tcolor: item.color\n\t}));\n\treturn {\n\t\tid: options.id,\n\t\tlabel: options.label,\n\t\tlogo: descriptor.logo,\n\t\tpackageName: descriptor.packageName,\n\t\thomepage: descriptor.homepage,\n\t\ttimelineLayers,\n\t\ttreeFilterPlaceholder: inspector.treeFilterPlaceholder,\n\t\tstateFilterPlaceholder: inspector.stateFilterPlaceholder\n\t};\n}\nfunction getInspector(id, app) {\n\treturn devtoolsInspector.find((inspector) => inspector.options.id === id && (app ? inspector.descriptor.app === app : true));\n}\nfunction getInspectorActions(id) {\n\treturn getInspector(id)?.options.actions;\n}\nfunction getInspectorNodeActions(id) {\n\treturn getInspector(id)?.options.nodeActions;\n}\n//#endregion\n//#region src/ctx/hook.ts\nlet DevToolsV6PluginAPIHookKeys = /* @__PURE__ */ function(DevToolsV6PluginAPIHookKeys) {\n\tDevToolsV6PluginAPIHookKeys[\"VISIT_COMPONENT_TREE\"] = \"visitComponentTree\";\n\tDevToolsV6PluginAPIHookKeys[\"INSPECT_COMPONENT\"] = \"inspectComponent\";\n\tDevToolsV6PluginAPIHookKeys[\"EDIT_COMPONENT_STATE\"] = \"editComponentState\";\n\tDevToolsV6PluginAPIHookKeys[\"GET_INSPECTOR_TREE\"] = \"getInspectorTree\";\n\tDevToolsV6PluginAPIHookKeys[\"GET_INSPECTOR_STATE\"] = \"getInspectorState\";\n\tDevToolsV6PluginAPIHookKeys[\"EDIT_INSPECTOR_STATE\"] = \"editInspectorState\";\n\tDevToolsV6PluginAPIHookKeys[\"INSPECT_TIMELINE_EVENT\"] = \"inspectTimelineEvent\";\n\tDevToolsV6PluginAPIHookKeys[\"TIMELINE_CLEARED\"] = \"timelineCleared\";\n\tDevToolsV6PluginAPIHookKeys[\"SET_PLUGIN_SETTINGS\"] = \"setPluginSettings\";\n\treturn DevToolsV6PluginAPIHookKeys;\n}({});\nlet DevToolsContextHookKeys = /* @__PURE__ */ function(DevToolsContextHookKeys) {\n\tDevToolsContextHookKeys[\"ADD_INSPECTOR\"] = \"addInspector\";\n\tDevToolsContextHookKeys[\"SEND_INSPECTOR_TREE\"] = \"sendInspectorTree\";\n\tDevToolsContextHookKeys[\"SEND_INSPECTOR_STATE\"] = \"sendInspectorState\";\n\tDevToolsContextHookKeys[\"CUSTOM_INSPECTOR_SELECT_NODE\"] = \"customInspectorSelectNode\";\n\tDevToolsContextHookKeys[\"TIMELINE_LAYER_ADDED\"] = \"timelineLayerAdded\";\n\tDevToolsContextHookKeys[\"TIMELINE_EVENT_ADDED\"] = \"timelineEventAdded\";\n\tDevToolsContextHookKeys[\"GET_COMPONENT_INSTANCES\"] = \"getComponentInstances\";\n\tDevToolsContextHookKeys[\"GET_COMPONENT_BOUNDS\"] = \"getComponentBounds\";\n\tDevToolsContextHookKeys[\"GET_COMPONENT_NAME\"] = \"getComponentName\";\n\tDevToolsContextHookKeys[\"COMPONENT_HIGHLIGHT\"] = \"componentHighlight\";\n\tDevToolsContextHookKeys[\"COMPONENT_UNHIGHLIGHT\"] = \"componentUnhighlight\";\n\treturn DevToolsContextHookKeys;\n}({});\nlet DevToolsMessagingHookKeys = /* @__PURE__ */ function(DevToolsMessagingHookKeys) {\n\tDevToolsMessagingHookKeys[\"SEND_INSPECTOR_TREE_TO_CLIENT\"] = \"sendInspectorTreeToClient\";\n\tDevToolsMessagingHookKeys[\"SEND_INSPECTOR_STATE_TO_CLIENT\"] = \"sendInspectorStateToClient\";\n\tDevToolsMessagingHookKeys[\"SEND_TIMELINE_EVENT_TO_CLIENT\"] = \"sendTimelineEventToClient\";\n\tDevToolsMessagingHookKeys[\"SEND_INSPECTOR_TO_CLIENT\"] = \"sendInspectorToClient\";\n\tDevToolsMessagingHookKeys[\"SEND_ACTIVE_APP_UNMOUNTED_TO_CLIENT\"] = \"sendActiveAppUpdatedToClient\";\n\tDevToolsMessagingHookKeys[\"DEVTOOLS_STATE_UPDATED\"] = \"devtoolsStateUpdated\";\n\tDevToolsMessagingHookKeys[\"DEVTOOLS_CONNECTED_UPDATED\"] = \"devtoolsConnectedUpdated\";\n\tDevToolsMessagingHookKeys[\"ROUTER_INFO_UPDATED\"] = \"routerInfoUpdated\";\n\treturn DevToolsMessagingHookKeys;\n}({});\nfunction createDevToolsCtxHooks() {\n\tconst hooks = createHooks();\n\thooks.hook(DevToolsContextHookKeys.ADD_INSPECTOR, ({ inspector, plugin }) => {\n\t\taddInspector(inspector, plugin.descriptor);\n\t});\n\tconst debounceSendInspectorTree = debounce(async ({ inspectorId, plugin }) => {\n\t\tif (!inspectorId || !plugin?.descriptor?.app || devtoolsState.highPerfModeEnabled) return;\n\t\tconst inspector = getInspector(inspectorId, plugin.descriptor.app);\n\t\tconst _payload = {\n\t\t\tapp: plugin.descriptor.app,\n\t\t\tinspectorId,\n\t\t\tfilter: inspector?.treeFilter || \"\",\n\t\t\trootNodes: []\n\t\t};\n\t\tawait new Promise((resolve) => {\n\t\t\thooks.callHookWith(async (callbacks) => {\n\t\t\t\tawait Promise.all(callbacks.map((cb) => cb(_payload)));\n\t\t\t\tresolve();\n\t\t\t}, DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_TREE);\n\t\t});\n\t\thooks.callHookWith(async (callbacks) => {\n\t\t\tawait Promise.all(callbacks.map((cb) => cb({\n\t\t\t\tinspectorId,\n\t\t\t\trootNodes: _payload.rootNodes\n\t\t\t})));\n\t\t}, DevToolsMessagingHookKeys.SEND_INSPECTOR_TREE_TO_CLIENT);\n\t}, 120);\n\thooks.hook(DevToolsContextHookKeys.SEND_INSPECTOR_TREE, debounceSendInspectorTree);\n\tconst debounceSendInspectorState = debounce(async ({ inspectorId, plugin }) => {\n\t\tif (!inspectorId || !plugin?.descriptor?.app || devtoolsState.highPerfModeEnabled) return;\n\t\tconst inspector = getInspector(inspectorId, plugin.descriptor.app);\n\t\tconst _payload = {\n\t\t\tapp: plugin.descriptor.app,\n\t\t\tinspectorId,\n\t\t\tnodeId: inspector?.selectedNodeId || \"\",\n\t\t\tstate: null\n\t\t};\n\t\tconst ctx = { currentTab: `custom-inspector:${inspectorId}` };\n\t\tif (_payload.nodeId) await new Promise((resolve) => {\n\t\t\thooks.callHookWith(async (callbacks) => {\n\t\t\t\tawait Promise.all(callbacks.map((cb) => cb(_payload, ctx)));\n\t\t\t\tresolve();\n\t\t\t}, DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_STATE);\n\t\t});\n\t\thooks.callHookWith(async (callbacks) => {\n\t\t\tawait Promise.all(callbacks.map((cb) => cb({\n\t\t\t\tinspectorId,\n\t\t\t\tnodeId: _payload.nodeId,\n\t\t\t\tstate: _payload.state\n\t\t\t})));\n\t\t}, DevToolsMessagingHookKeys.SEND_INSPECTOR_STATE_TO_CLIENT);\n\t}, 120);\n\thooks.hook(DevToolsContextHookKeys.SEND_INSPECTOR_STATE, debounceSendInspectorState);\n\thooks.hook(DevToolsContextHookKeys.CUSTOM_INSPECTOR_SELECT_NODE, ({ inspectorId, nodeId, plugin }) => {\n\t\tconst inspector = getInspector(inspectorId, plugin.descriptor.app);\n\t\tif (!inspector) return;\n\t\tinspector.selectedNodeId = nodeId;\n\t});\n\thooks.hook(DevToolsContextHookKeys.TIMELINE_LAYER_ADDED, ({ options, plugin }) => {\n\t\taddTimelineLayer(options, plugin.descriptor);\n\t});\n\thooks.hook(DevToolsContextHookKeys.TIMELINE_EVENT_ADDED, ({ options, plugin }) => {\n\t\tif (devtoolsState.highPerfModeEnabled || !devtoolsState.timelineLayersState?.[plugin.descriptor.id] && ![\n\t\t\t\"performance\",\n\t\t\t\"component-event\",\n\t\t\t\"keyboard\",\n\t\t\t\"mouse\"\n\t\t].includes(options.layerId)) return;\n\t\thooks.callHookWith(async (callbacks) => {\n\t\t\tawait Promise.all(callbacks.map((cb) => cb(options)));\n\t\t}, DevToolsMessagingHookKeys.SEND_TIMELINE_EVENT_TO_CLIENT);\n\t});\n\thooks.hook(DevToolsContextHookKeys.GET_COMPONENT_INSTANCES, async ({ app }) => {\n\t\tconst appRecord = app.__VUE_DEVTOOLS_NEXT_APP_RECORD__;\n\t\tif (!appRecord) return null;\n\t\tconst appId = appRecord.id.toString();\n\t\treturn [...appRecord.instanceMap].filter(([key]) => key.split(\":\")[0] === appId).map(([, instance]) => instance);\n\t});\n\thooks.hook(DevToolsContextHookKeys.GET_COMPONENT_BOUNDS, async ({ instance }) => {\n\t\treturn getComponentBoundingRect(instance);\n\t});\n\thooks.hook(DevToolsContextHookKeys.GET_COMPONENT_NAME, ({ instance }) => {\n\t\treturn getInstanceName(instance);\n\t});\n\thooks.hook(DevToolsContextHookKeys.COMPONENT_HIGHLIGHT, ({ uid }) => {\n\t\tconst instance = activeAppRecord.value.instanceMap.get(uid);\n\t\tif (instance) highlight(instance);\n\t});\n\thooks.hook(DevToolsContextHookKeys.COMPONENT_UNHIGHLIGHT, () => {\n\t\tunhighlight();\n\t});\n\treturn hooks;\n}\n//#endregion\n//#region src/ctx/state.ts\ntarget.__VUE_DEVTOOLS_KIT_APP_RECORDS__ ??= [];\ntarget.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__ ??= {};\ntarget.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__ ??= \"\";\ntarget.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__ ??= [];\ntarget.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__ ??= [];\nconst STATE_KEY = \"__VUE_DEVTOOLS_KIT_GLOBAL_STATE__\";\nfunction initStateFactory() {\n\treturn {\n\t\tconnected: false,\n\t\tclientConnected: false,\n\t\tvitePluginDetected: true,\n\t\tappRecords: [],\n\t\tactiveAppRecordId: \"\",\n\t\ttabs: [],\n\t\tcommands: [],\n\t\thighPerfModeEnabled: true,\n\t\tdevtoolsClientDetected: {},\n\t\tperfUniqueGroupId: 0,\n\t\ttimelineLayersState: getTimelineLayersStateFromStorage()\n\t};\n}\ntarget[STATE_KEY] ??= initStateFactory();\nconst callStateUpdatedHook = debounce((state) => {\n\tdevtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.DEVTOOLS_STATE_UPDATED, { state });\n});\nconst callConnectedUpdatedHook = debounce((state, oldState) => {\n\tdevtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.DEVTOOLS_CONNECTED_UPDATED, {\n\t\tstate,\n\t\toldState\n\t});\n});\nconst devtoolsAppRecords = new Proxy(target.__VUE_DEVTOOLS_KIT_APP_RECORDS__, { get(_target, prop, receiver) {\n\tif (prop === \"value\") return target.__VUE_DEVTOOLS_KIT_APP_RECORDS__;\n\treturn target.__VUE_DEVTOOLS_KIT_APP_RECORDS__[prop];\n} });\nconst addDevToolsAppRecord = (app) => {\n\ttarget.__VUE_DEVTOOLS_KIT_APP_RECORDS__ = [...target.__VUE_DEVTOOLS_KIT_APP_RECORDS__, app];\n};\nconst removeDevToolsAppRecord = (app) => {\n\ttarget.__VUE_DEVTOOLS_KIT_APP_RECORDS__ = devtoolsAppRecords.value.filter((record) => record.app !== app);\n};\nconst activeAppRecord = new Proxy(target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__, { get(_target, prop, receiver) {\n\tif (prop === \"value\") return target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__;\n\telse if (prop === \"id\") return target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__;\n\treturn target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__[prop];\n} });\nfunction updateAllStates() {\n\tcallStateUpdatedHook({\n\t\t...target[STATE_KEY],\n\t\tappRecords: devtoolsAppRecords.value,\n\t\tactiveAppRecordId: activeAppRecord.id,\n\t\ttabs: target.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__,\n\t\tcommands: target.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__\n\t});\n}\nfunction setActiveAppRecord(app) {\n\ttarget.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__ = app;\n\tupdateAllStates();\n}\nfunction setActiveAppRecordId(id) {\n\ttarget.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__ = id;\n\tupdateAllStates();\n}\nconst devtoolsState = new Proxy(target[STATE_KEY], {\n\tget(target$3, property) {\n\t\tif (property === \"appRecords\") return devtoolsAppRecords;\n\t\telse if (property === \"activeAppRecordId\") return activeAppRecord.id;\n\t\telse if (property === \"tabs\") return target.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__;\n\t\telse if (property === \"commands\") return target.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__;\n\t\treturn target[STATE_KEY][property];\n\t},\n\tdeleteProperty(target, property) {\n\t\tdelete target[property];\n\t\treturn true;\n\t},\n\tset(target$4, property, value) {\n\t\ttarget$4[property] = value;\n\t\ttarget[STATE_KEY][property] = value;\n\t\treturn true;\n\t}\n});\nfunction resetDevToolsState() {\n\tObject.assign(target[STATE_KEY], initStateFactory());\n}\nfunction updateDevToolsState(state) {\n\tconst oldState = {\n\t\t...target[STATE_KEY],\n\t\tappRecords: devtoolsAppRecords.value,\n\t\tactiveAppRecordId: activeAppRecord.id\n\t};\n\tif (oldState.connected !== state.connected && state.connected || oldState.clientConnected !== state.clientConnected && state.clientConnected) callConnectedUpdatedHook(target[STATE_KEY], oldState);\n\tObject.assign(target[STATE_KEY], state);\n\tupdateAllStates();\n}\nfunction onDevToolsConnected(fn) {\n\treturn new Promise((resolve) => {\n\t\tif (devtoolsState.connected) {\n\t\t\tfn();\n\t\t\tresolve();\n\t\t}\n\t\tdevtoolsContext.hooks.hook(DevToolsMessagingHookKeys.DEVTOOLS_CONNECTED_UPDATED, ({ state }) => {\n\t\t\tif (state.connected) {\n\t\t\t\tfn();\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\t});\n}\nconst resolveIcon = (icon) => {\n\tif (!icon) return;\n\tif (icon.startsWith(\"baseline-\")) return `custom-ic-${icon}`;\n\tif (icon.startsWith(\"i-\") || isUrlString(icon)) return icon;\n\treturn `custom-ic-baseline-${icon}`;\n};\nfunction addCustomTab(tab) {\n\tconst tabs = target.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__;\n\tif (tabs.some((t) => t.name === tab.name)) return;\n\ttabs.push({\n\t\t...tab,\n\t\ticon: resolveIcon(tab.icon)\n\t});\n\tupdateAllStates();\n}\nfunction addCustomCommand(action) {\n\tconst commands = target.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__;\n\tif (commands.some((t) => t.id === action.id)) return;\n\tcommands.push({\n\t\t...action,\n\t\ticon: resolveIcon(action.icon),\n\t\tchildren: action.children ? action.children.map((child) => ({\n\t\t\t...child,\n\t\t\ticon: resolveIcon(child.icon)\n\t\t})) : void 0\n\t});\n\tupdateAllStates();\n}\nfunction removeCustomCommand(actionId) {\n\tconst commands = target.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__;\n\tconst index = commands.findIndex((t) => t.id === actionId);\n\tif (index === -1) return;\n\tcommands.splice(index, 1);\n\tupdateAllStates();\n}\nfunction toggleClientConnected(state) {\n\tupdateDevToolsState({ clientConnected: state });\n}\n//#endregion\n//#region src/core/open-in-editor/index.ts\nfunction setOpenInEditorBaseUrl(url) {\n\ttarget.__VUE_DEVTOOLS_OPEN_IN_EDITOR_BASE_URL__ = url;\n}\nfunction openInEditor(options = {}) {\n\tconst { file, host, baseUrl = window.location.origin, line = 0, column = 0 } = options;\n\tif (file) {\n\t\tif (host === \"chrome-extension\") {\n\t\t\tconst fileName = file.replace(/\\\\/g, \"\\\\\\\\\");\n\t\t\tconst _baseUrl = window.VUE_DEVTOOLS_CONFIG?.openInEditorHost ?? \"/\";\n\t\t\tfetch(`${_baseUrl}__open-in-editor?file=${encodeURI(file)}`).then((response) => {\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tconst msg = `Opening component ${fileName} failed`;\n\t\t\t\t\tconsole.log(`%c${msg}`, \"color:red\");\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (devtoolsState.vitePluginDetected) {\n\t\t\tconst _baseUrl = target.__VUE_DEVTOOLS_OPEN_IN_EDITOR_BASE_URL__ ?? baseUrl;\n\t\t\ttarget.__VUE_INSPECTOR__.openInEditor(_baseUrl, file, line, column);\n\t\t}\n\t}\n}\n//#endregion\n//#region src/ctx/plugin.ts\ntarget.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__ ??= [];\nconst devtoolsPluginBuffer = new Proxy(target.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__, { get(target, prop, receiver) {\n\treturn Reflect.get(target, prop, receiver);\n} });\nfunction addDevToolsPluginToBuffer(pluginDescriptor, setupFn) {\n\tdevtoolsPluginBuffer.push([pluginDescriptor, setupFn]);\n}\n//#endregion\n//#region src/core/plugin/plugin-settings.ts\nfunction _getSettings(settings) {\n\tconst _settings = {};\n\tObject.keys(settings).forEach((key) => {\n\t\t_settings[key] = settings[key].defaultValue;\n\t});\n\treturn _settings;\n}\nfunction getPluginLocalKey(pluginId) {\n\treturn `__VUE_DEVTOOLS_NEXT_PLUGIN_SETTINGS__${pluginId}__`;\n}\nfunction getPluginSettingsOptions(pluginId) {\n\treturn (devtoolsPluginBuffer.find((item) => item[0].id === pluginId && !!item[0]?.settings)?.[0] ?? null)?.settings ?? null;\n}\nfunction getPluginSettings(pluginId, fallbackValue) {\n\tconst localKey = getPluginLocalKey(pluginId);\n\tif (localKey) {\n\t\tconst localSettings = localStorage.getItem(localKey);\n\t\tif (localSettings) return JSON.parse(localSettings);\n\t}\n\tif (pluginId) return _getSettings((devtoolsPluginBuffer.find((item) => item[0].id === pluginId)?.[0] ?? null)?.settings ?? {});\n\treturn _getSettings(fallbackValue);\n}\nfunction initPluginSettings(pluginId, settings) {\n\tconst localKey = getPluginLocalKey(pluginId);\n\tif (!localStorage.getItem(localKey)) localStorage.setItem(localKey, JSON.stringify(_getSettings(settings)));\n}\nfunction setPluginSettings(pluginId, key, value) {\n\tconst localKey = getPluginLocalKey(pluginId);\n\tconst localSettings = localStorage.getItem(localKey);\n\tconst parsedLocalSettings = JSON.parse(localSettings || \"{}\");\n\tconst updated = {\n\t\t...parsedLocalSettings,\n\t\t[key]: value\n\t};\n\tlocalStorage.setItem(localKey, JSON.stringify(updated));\n\tdevtoolsContext.hooks.callHookWith((callbacks) => {\n\t\tcallbacks.forEach((cb) => cb({\n\t\t\tpluginId,\n\t\t\tkey,\n\t\t\toldValue: parsedLocalSettings[key],\n\t\t\tnewValue: value,\n\t\t\tsettings: updated\n\t\t}));\n\t}, DevToolsV6PluginAPIHookKeys.SET_PLUGIN_SETTINGS);\n}\n//#endregion\n//#region src/types/hook.ts\nlet DevToolsHooks = /* @__PURE__ */ function(DevToolsHooks) {\n\tDevToolsHooks[\"APP_INIT\"] = \"app:init\";\n\tDevToolsHooks[\"APP_UNMOUNT\"] = \"app:unmount\";\n\tDevToolsHooks[\"COMPONENT_UPDATED\"] = \"component:updated\";\n\tDevToolsHooks[\"COMPONENT_ADDED\"] = \"component:added\";\n\tDevToolsHooks[\"COMPONENT_REMOVED\"] = \"component:removed\";\n\tDevToolsHooks[\"COMPONENT_EMIT\"] = \"component:emit\";\n\tDevToolsHooks[\"PERFORMANCE_START\"] = \"perf:start\";\n\tDevToolsHooks[\"PERFORMANCE_END\"] = \"perf:end\";\n\tDevToolsHooks[\"ADD_ROUTE\"] = \"router:add-route\";\n\tDevToolsHooks[\"REMOVE_ROUTE\"] = \"router:remove-route\";\n\tDevToolsHooks[\"RENDER_TRACKED\"] = \"render:tracked\";\n\tDevToolsHooks[\"RENDER_TRIGGERED\"] = \"render:triggered\";\n\tDevToolsHooks[\"APP_CONNECTED\"] = \"app:connected\";\n\tDevToolsHooks[\"SETUP_DEVTOOLS_PLUGIN\"] = \"devtools-plugin:setup\";\n\treturn DevToolsHooks;\n}({});\n//#endregion\n//#region src/hook/index.ts\nconst devtoolsHooks = target.__VUE_DEVTOOLS_HOOK ??= createHooks();\nconst on = {\n\tvueAppInit(fn) {\n\t\tdevtoolsHooks.hook(DevToolsHooks.APP_INIT, fn);\n\t},\n\tvueAppUnmount(fn) {\n\t\tdevtoolsHooks.hook(DevToolsHooks.APP_UNMOUNT, fn);\n\t},\n\tvueAppConnected(fn) {\n\t\tdevtoolsHooks.hook(DevToolsHooks.APP_CONNECTED, fn);\n\t},\n\tcomponentAdded(fn) {\n\t\treturn devtoolsHooks.hook(DevToolsHooks.COMPONENT_ADDED, fn);\n\t},\n\tcomponentEmit(fn) {\n\t\treturn devtoolsHooks.hook(DevToolsHooks.COMPONENT_EMIT, fn);\n\t},\n\tcomponentUpdated(fn) {\n\t\treturn devtoolsHooks.hook(DevToolsHooks.COMPONENT_UPDATED, fn);\n\t},\n\tcomponentRemoved(fn) {\n\t\treturn devtoolsHooks.hook(DevToolsHooks.COMPONENT_REMOVED, fn);\n\t},\n\tsetupDevtoolsPlugin(fn) {\n\t\tdevtoolsHooks.hook(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, fn);\n\t},\n\tperfStart(fn) {\n\t\treturn devtoolsHooks.hook(DevToolsHooks.PERFORMANCE_START, fn);\n\t},\n\tperfEnd(fn) {\n\t\treturn devtoolsHooks.hook(DevToolsHooks.PERFORMANCE_END, fn);\n\t}\n};\nfunction createDevToolsHook() {\n\treturn {\n\t\tid: \"vue-devtools-next\",\n\t\tdevtoolsVersion: \"7.0\",\n\t\tenabled: false,\n\t\tappRecords: [],\n\t\tapps: [],\n\t\tevents: /* @__PURE__ */ new Map(),\n\t\ton(event, fn) {\n\t\t\tif (!this.events.has(event)) this.events.set(event, []);\n\t\t\tthis.events.get(event)?.push(fn);\n\t\t\treturn () => this.off(event, fn);\n\t\t},\n\t\tonce(event, fn) {\n\t\t\tconst onceFn = (...args) => {\n\t\t\t\tthis.off(event, onceFn);\n\t\t\t\tfn(...args);\n\t\t\t};\n\t\t\tthis.on(event, onceFn);\n\t\t\treturn [event, onceFn];\n\t\t},\n\t\toff(event, fn) {\n\t\t\tif (this.events.has(event)) {\n\t\t\t\tconst eventCallbacks = this.events.get(event);\n\t\t\t\tconst index = eventCallbacks.indexOf(fn);\n\t\t\t\tif (index !== -1) eventCallbacks.splice(index, 1);\n\t\t\t}\n\t\t},\n\t\temit(event, ...payload) {\n\t\t\tif (this.events.has(event)) this.events.get(event).forEach((fn) => fn(...payload));\n\t\t}\n\t};\n}\nfunction subscribeDevToolsHook(hook) {\n\thook.on(DevToolsHooks.APP_INIT, (app, version, types) => {\n\t\tif (app?._instance?.type?.devtools?.hide) return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.APP_INIT, app, version, types);\n\t});\n\thook.on(DevToolsHooks.APP_UNMOUNT, (app) => {\n\t\tdevtoolsHooks.callHook(DevToolsHooks.APP_UNMOUNT, app);\n\t});\n\thook.on(DevToolsHooks.COMPONENT_ADDED, async (app, uid, parentUid, component) => {\n\t\tif (app?._instance?.type?.devtools?.hide || devtoolsState.highPerfModeEnabled) return;\n\t\tif (!app || typeof uid !== \"number\" && !uid || !component) return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.COMPONENT_ADDED, app, uid, parentUid, component);\n\t});\n\thook.on(DevToolsHooks.COMPONENT_UPDATED, (app, uid, parentUid, component) => {\n\t\tif (!app || typeof uid !== \"number\" && !uid || !component || devtoolsState.highPerfModeEnabled) return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.COMPONENT_UPDATED, app, uid, parentUid, component);\n\t});\n\thook.on(DevToolsHooks.COMPONENT_REMOVED, async (app, uid, parentUid, component) => {\n\t\tif (!app || typeof uid !== \"number\" && !uid || !component || devtoolsState.highPerfModeEnabled) return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.COMPONENT_REMOVED, app, uid, parentUid, component);\n\t});\n\thook.on(DevToolsHooks.COMPONENT_EMIT, async (app, instance, event, params) => {\n\t\tif (!app || !instance || devtoolsState.highPerfModeEnabled) return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.COMPONENT_EMIT, app, instance, event, params);\n\t});\n\thook.on(DevToolsHooks.PERFORMANCE_START, (app, uid, vm, type, time) => {\n\t\tif (!app || devtoolsState.highPerfModeEnabled) return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.PERFORMANCE_START, app, uid, vm, type, time);\n\t});\n\thook.on(DevToolsHooks.PERFORMANCE_END, (app, uid, vm, type, time) => {\n\t\tif (!app || devtoolsState.highPerfModeEnabled) return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.PERFORMANCE_END, app, uid, vm, type, time);\n\t});\n\thook.on(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, (pluginDescriptor, setupFn, options) => {\n\t\tif (options?.target === \"legacy\") return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, pluginDescriptor, setupFn);\n\t});\n}\nconst hook = {\n\ton,\n\tsetupDevToolsPlugin(pluginDescriptor, setupFn) {\n\t\treturn devtoolsHooks.callHook(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, pluginDescriptor, setupFn);\n\t}\n};\n//#endregion\n//#region src/api/v6/index.ts\nvar DevToolsV6PluginAPI = class {\n\tconstructor({ plugin, ctx }) {\n\t\tthis.hooks = ctx.hooks;\n\t\tthis.plugin = plugin;\n\t}\n\tget on() {\n\t\treturn {\n\t\t\tvisitComponentTree: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.VISIT_COMPONENT_TREE, handler);\n\t\t\t},\n\t\t\tinspectComponent: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.INSPECT_COMPONENT, handler);\n\t\t\t},\n\t\t\teditComponentState: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.EDIT_COMPONENT_STATE, handler);\n\t\t\t},\n\t\t\tgetInspectorTree: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_TREE, handler);\n\t\t\t},\n\t\t\tgetInspectorState: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_STATE, handler);\n\t\t\t},\n\t\t\teditInspectorState: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.EDIT_INSPECTOR_STATE, handler);\n\t\t\t},\n\t\t\tinspectTimelineEvent: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.INSPECT_TIMELINE_EVENT, handler);\n\t\t\t},\n\t\t\ttimelineCleared: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.TIMELINE_CLEARED, handler);\n\t\t\t},\n\t\t\tsetPluginSettings: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.SET_PLUGIN_SETTINGS, handler);\n\t\t\t}\n\t\t};\n\t}\n\tnotifyComponentUpdate(instance) {\n\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\tconst inspector = getActiveInspectors().find((i) => i.packageName === this.plugin.descriptor.packageName);\n\t\tif (inspector?.id) {\n\t\t\tif (instance) {\n\t\t\t\tconst args = [\n\t\t\t\t\tinstance.appContext.app,\n\t\t\t\t\tinstance.uid,\n\t\t\t\t\tinstance.parent?.uid,\n\t\t\t\t\tinstance\n\t\t\t\t];\n\t\t\t\tdevtoolsHooks.callHook(DevToolsHooks.COMPONENT_UPDATED, ...args);\n\t\t\t} else devtoolsHooks.callHook(DevToolsHooks.COMPONENT_UPDATED);\n\t\t\tthis.hooks.callHook(DevToolsContextHookKeys.SEND_INSPECTOR_STATE, {\n\t\t\t\tinspectorId: inspector.id,\n\t\t\t\tplugin: this.plugin\n\t\t\t});\n\t\t}\n\t}\n\taddInspector(options) {\n\t\tthis.hooks.callHook(DevToolsContextHookKeys.ADD_INSPECTOR, {\n\t\t\tinspector: options,\n\t\t\tplugin: this.plugin\n\t\t});\n\t\tif (this.plugin.descriptor.settings) initPluginSettings(options.id, this.plugin.descriptor.settings);\n\t}\n\tsendInspectorTree(inspectorId) {\n\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\tthis.hooks.callHook(DevToolsContextHookKeys.SEND_INSPECTOR_TREE, {\n\t\t\tinspectorId,\n\t\t\tplugin: this.plugin\n\t\t});\n\t}\n\tsendInspectorState(inspectorId) {\n\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\tthis.hooks.callHook(DevToolsContextHookKeys.SEND_INSPECTOR_STATE, {\n\t\t\tinspectorId,\n\t\t\tplugin: this.plugin\n\t\t});\n\t}\n\tselectInspectorNode(inspectorId, nodeId) {\n\t\tthis.hooks.callHook(DevToolsContextHookKeys.CUSTOM_INSPECTOR_SELECT_NODE, {\n\t\t\tinspectorId,\n\t\t\tnodeId,\n\t\t\tplugin: this.plugin\n\t\t});\n\t}\n\tvisitComponentTree(payload) {\n\t\treturn this.hooks.callHook(DevToolsV6PluginAPIHookKeys.VISIT_COMPONENT_TREE, payload);\n\t}\n\tnow() {\n\t\tif (devtoolsState.highPerfModeEnabled) return 0;\n\t\treturn Date.now();\n\t}\n\taddTimelineLayer(options) {\n\t\tthis.hooks.callHook(DevToolsContextHookKeys.TIMELINE_LAYER_ADDED, {\n\t\t\toptions,\n\t\t\tplugin: this.plugin\n\t\t});\n\t}\n\taddTimelineEvent(options) {\n\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\tthis.hooks.callHook(DevToolsContextHookKeys.TIMELINE_EVENT_ADDED, {\n\t\t\toptions,\n\t\t\tplugin: this.plugin\n\t\t});\n\t}\n\tgetSettings(pluginId) {\n\t\treturn getPluginSettings(pluginId ?? this.plugin.descriptor.id, this.plugin.descriptor.settings);\n\t}\n\tgetComponentInstances(app) {\n\t\treturn this.hooks.callHook(DevToolsContextHookKeys.GET_COMPONENT_INSTANCES, { app });\n\t}\n\tgetComponentBounds(instance) {\n\t\treturn this.hooks.callHook(DevToolsContextHookKeys.GET_COMPONENT_BOUNDS, { instance });\n\t}\n\tgetComponentName(instance) {\n\t\treturn this.hooks.callHook(DevToolsContextHookKeys.GET_COMPONENT_NAME, { instance });\n\t}\n\thighlightElement(instance) {\n\t\tconst uid = instance.__VUE_DEVTOOLS_NEXT_UID__;\n\t\treturn this.hooks.callHook(DevToolsContextHookKeys.COMPONENT_HIGHLIGHT, { uid });\n\t}\n\tunhighlightElement() {\n\t\treturn this.hooks.callHook(DevToolsContextHookKeys.COMPONENT_UNHIGHLIGHT);\n\t}\n};\n//#endregion\n//#region src/api/index.ts\nconst DevToolsPluginAPI = DevToolsV6PluginAPI;\n//#endregion\n//#region src/core/component/state/constants.ts\nconst vueBuiltins = new Set([\n\t\"nextTick\",\n\t\"defineComponent\",\n\t\"defineAsyncComponent\",\n\t\"defineCustomElement\",\n\t\"ref\",\n\t\"computed\",\n\t\"reactive\",\n\t\"readonly\",\n\t\"watchEffect\",\n\t\"watchPostEffect\",\n\t\"watchSyncEffect\",\n\t\"watch\",\n\t\"isRef\",\n\t\"unref\",\n\t\"toRef\",\n\t\"toRefs\",\n\t\"isProxy\",\n\t\"isReactive\",\n\t\"isReadonly\",\n\t\"shallowRef\",\n\t\"triggerRef\",\n\t\"customRef\",\n\t\"shallowReactive\",\n\t\"shallowReadonly\",\n\t\"toRaw\",\n\t\"markRaw\",\n\t\"effectScope\",\n\t\"getCurrentScope\",\n\t\"onScopeDispose\",\n\t\"onMounted\",\n\t\"onUpdated\",\n\t\"onUnmounted\",\n\t\"onBeforeMount\",\n\t\"onBeforeUpdate\",\n\t\"onBeforeUnmount\",\n\t\"onErrorCaptured\",\n\t\"onRenderTracked\",\n\t\"onRenderTriggered\",\n\t\"onActivated\",\n\t\"onDeactivated\",\n\t\"onServerPrefetch\",\n\t\"provide\",\n\t\"inject\",\n\t\"h\",\n\t\"mergeProps\",\n\t\"cloneVNode\",\n\t\"isVNode\",\n\t\"resolveComponent\",\n\t\"resolveDirective\",\n\t\"withDirectives\",\n\t\"withModifiers\"\n]);\nconst symbolRE = /^\\[native Symbol Symbol\\((.*)\\)\\]$/;\nconst rawTypeRE = /^\\[object (\\w+)\\]$/;\nconst specialTypeRE = /^\\[native (\\w+) (.*?)(<>(([\\s\\S])*))?\\]$/;\nconst fnTypeRE = /^(?:function|class) (\\w+)/;\nconst MAX_STRING_SIZE = 1e4;\nconst MAX_ARRAY_SIZE = 5e3;\nconst UNDEFINED = \"__vue_devtool_undefined__\";\nconst INFINITY = \"__vue_devtool_infinity__\";\nconst NEGATIVE_INFINITY = \"__vue_devtool_negative_infinity__\";\nconst NAN = \"__vue_devtool_nan__\";\nconst ESC = {\n\t\"<\": \"<\",\n\t\">\": \">\",\n\t\"\\\"\": \""\",\n\t\"&\": \"&\"\n};\n//#endregion\n//#region src/core/component/state/is.ts\nfunction isVueInstance(value) {\n\tif (!ensurePropertyExists(value, \"_\")) return false;\n\tif (!isPlainObject(value._)) return false;\n\treturn Object.keys(value._).includes(\"vnode\");\n}\nfunction isPlainObject(obj) {\n\treturn Object.prototype.toString.call(obj) === \"[object Object]\";\n}\nfunction isPrimitive$1(data) {\n\tif (data == null) return true;\n\tconst type = typeof data;\n\treturn type === \"string\" || type === \"number\" || type === \"boolean\";\n}\nfunction isRef(raw) {\n\treturn !!raw.__v_isRef;\n}\nfunction isComputed(raw) {\n\treturn isRef(raw) && !!raw.effect;\n}\nfunction isReactive(raw) {\n\treturn !!raw.__v_isReactive;\n}\nfunction isReadOnly(raw) {\n\treturn !!raw.__v_isReadonly;\n}\n//#endregion\n//#region src/core/component/state/util.ts\nconst tokenMap = {\n\t[UNDEFINED]: \"undefined\",\n\t[NAN]: \"NaN\",\n\t[INFINITY]: \"Infinity\",\n\t[NEGATIVE_INFINITY]: \"-Infinity\"\n};\nconst reversedTokenMap = Object.entries(tokenMap).reduce((acc, [key, value]) => {\n\tacc[value] = key;\n\treturn acc;\n}, {});\nfunction internalStateTokenToString(value) {\n\tif (value === null) return \"null\";\n\treturn typeof value === \"string\" && tokenMap[value] || false;\n}\nfunction replaceTokenToString(value) {\n\tconst replaceRegex = new RegExp(`\"(${Object.keys(tokenMap).join(\"|\")})\"`, \"g\");\n\treturn value.replace(replaceRegex, (_, g1) => tokenMap[g1]);\n}\nfunction replaceStringToToken(value) {\n\tconst literalValue = reversedTokenMap[value.trim()];\n\tif (literalValue) return `\"${literalValue}\"`;\n\tconst replaceRegex = new RegExp(`:\\\\s*(${Object.keys(reversedTokenMap).join(\"|\")})`, \"g\");\n\treturn value.replace(replaceRegex, (_, g1) => `:\"${reversedTokenMap[g1]}\"`);\n}\n/**\n* Convert prop type constructor to string.\n*/\nfunction getPropType(type) {\n\tif (Array.isArray(type)) return type.map((t) => getPropType(t)).join(\" or \");\n\tif (type == null) return \"null\";\n\tconst match = type.toString().match(fnTypeRE);\n\treturn typeof type === \"function\" ? match && match[1] || \"any\" : \"any\";\n}\n/**\n* Sanitize data to be posted to the other side.\n* Since the message posted is sent with structured clone,\n* we need to filter out any types that might cause an error.\n*/\nfunction sanitize(data) {\n\tif (!isPrimitive$1(data) && !Array.isArray(data) && !isPlainObject(data)) return Object.prototype.toString.call(data);\n\telse return data;\n}\nfunction getSetupStateType(raw) {\n\ttry {\n\t\treturn {\n\t\t\tref: isRef(raw),\n\t\t\tcomputed: isComputed(raw),\n\t\t\treactive: isReactive(raw),\n\t\t\treadonly: isReadOnly(raw)\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tref: false,\n\t\t\tcomputed: false,\n\t\t\treactive: false,\n\t\t\treadonly: false\n\t\t};\n\t}\n}\nfunction toRaw(value) {\n\tif (value?.__v_raw) return value.__v_raw;\n\treturn value;\n}\nfunction escape(s) {\n\treturn s.replace(/[<>\"&]/g, (s) => {\n\t\treturn ESC[s] || s;\n\t});\n}\n//#endregion\n//#region src/core/component/state/process.ts\nfunction mergeOptions(to, from, instance) {\n\tif (typeof from === \"function\") from = from.options;\n\tif (!from) return to;\n\tconst { mixins, extends: extendsOptions } = from;\n\textendsOptions && mergeOptions(to, extendsOptions, instance);\n\tmixins && mixins.forEach((m) => mergeOptions(to, m, instance));\n\tfor (const key of [\"computed\", \"inject\"]) if (Object.prototype.hasOwnProperty.call(from, key)) {\n\t\tto[key] ??= {};\n\t\tObject.assign(to[key], from[key]);\n\t}\n\treturn to;\n}\nfunction resolveMergedOptions(instance) {\n\tconst raw = instance?.type;\n\tif (!raw) return {};\n\tconst { mixins, extends: extendsOptions } = raw;\n\tconst globalMixins = instance.appContext.mixins;\n\tif (!globalMixins.length && !mixins && !extendsOptions) return raw;\n\tconst options = {};\n\tglobalMixins.forEach((m) => mergeOptions(options, m, instance));\n\tmergeOptions(options, raw, instance);\n\treturn options;\n}\n/**\n* Process the props of an instance.\n* Make sure return a plain object because window.postMessage()\n* will throw an Error if the passed object contains Functions.\n*\n*/\nfunction processProps(instance) {\n\tconst props = [];\n\tconst propDefinitions = instance?.type?.props;\n\tfor (const key in instance?.props) {\n\t\tconst propDefinition = propDefinitions ? propDefinitions[key] : null;\n\t\tconst camelizeKey = camelize(key);\n\t\tprops.push({\n\t\t\ttype: \"props\",\n\t\t\tkey: camelizeKey,\n\t\t\tvalue: returnError(() => instance.props[key]),\n\t\t\teditable: true,\n\t\t\tmeta: propDefinition ? {\n\t\t\t\ttype: propDefinition.type ? getPropType(propDefinition.type) : \"any\",\n\t\t\t\trequired: !!propDefinition.required,\n\t\t\t\t...propDefinition.default ? { default: propDefinition.default.toString() } : {}\n\t\t\t} : { type: \"invalid\" }\n\t\t});\n\t}\n\treturn props;\n}\n/**\n* Process state, filtering out props and \"clean\" the result\n* with a JSON dance. This removes functions which can cause\n* errors during structured clone used by window.postMessage.\n*\n*/\nfunction processState(instance) {\n\tconst type = instance.type;\n\tconst props = type?.props;\n\tconst getters = type.vuex && type.vuex.getters;\n\tconst computedDefs = type.computed;\n\tconst data = {\n\t\t...instance.data,\n\t\t...instance.renderContext\n\t};\n\treturn Object.keys(data).filter((key) => !(props && key in props) && !(getters && key in getters) && !(computedDefs && key in computedDefs)).map((key) => ({\n\t\tkey,\n\t\ttype: \"data\",\n\t\tvalue: returnError(() => data[key]),\n\t\teditable: true\n\t}));\n}\nfunction getStateTypeAndName(info) {\n\tconst stateType = info.computed ? \"computed\" : info.ref ? \"ref\" : info.reactive ? \"reactive\" : null;\n\treturn {\n\t\tstateType,\n\t\tstateTypeName: stateType ? `${stateType.charAt(0).toUpperCase()}${stateType.slice(1)}` : null\n\t};\n}\nfunction processSetupState(instance) {\n\tconst raw = instance.devtoolsRawSetupState || {};\n\treturn Object.keys(instance.setupState).filter((key) => !vueBuiltins.has(key) && key.split(/(?=[A-Z])/)[0] !== \"use\").map((key) => {\n\t\tconst value = returnError(() => toRaw(instance.setupState[key]));\n\t\tconst accessError = value instanceof Error;\n\t\tconst rawData = raw[key];\n\t\tlet result;\n\t\tlet isOtherType = accessError || typeof value === \"function\" || ensurePropertyExists(value, \"render\") && typeof value.render === \"function\" || ensurePropertyExists(value, \"__asyncLoader\") && typeof value.__asyncLoader === \"function\" || typeof value === \"object\" && value && (\"setup\" in value || \"props\" in value) || /^v[A-Z]/.test(key);\n\t\tif (rawData && !accessError) {\n\t\t\tconst info = getSetupStateType(rawData);\n\t\t\tconst { stateType, stateTypeName } = getStateTypeAndName(info);\n\t\t\tconst isState = info.ref || info.computed || info.reactive;\n\t\t\tconst raw = ensurePropertyExists(rawData, \"effect\") ? rawData.effect?.raw?.toString() || rawData.effect?.fn?.toString() : null;\n\t\t\tif (stateType) isOtherType = false;\n\t\t\tresult = {\n\t\t\t\t...stateType ? {\n\t\t\t\t\tstateType,\n\t\t\t\t\tstateTypeName\n\t\t\t\t} : {},\n\t\t\t\t...raw ? { raw } : {},\n\t\t\t\teditable: isState && !info.readonly\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\ttype: isOtherType ? \"setup (other)\" : \"setup\",\n\t\t\t...result\n\t\t};\n\t});\n}\n/**\n* Process the computed properties of an instance.\n*/\nfunction processComputed(instance, mergedType) {\n\tconst type = mergedType;\n\tconst computed = [];\n\tconst defs = type.computed || {};\n\tfor (const key in defs) {\n\t\tconst def = defs[key];\n\t\tconst type = typeof def === \"function\" && def.vuex ? \"vuex bindings\" : \"computed\";\n\t\tcomputed.push({\n\t\t\ttype,\n\t\t\tkey,\n\t\t\tvalue: returnError(() => instance?.proxy?.[key]),\n\t\t\teditable: typeof def.set === \"function\"\n\t\t});\n\t}\n\treturn computed;\n}\nfunction processAttrs(instance) {\n\treturn Object.keys(instance.attrs).map((key) => ({\n\t\ttype: \"attrs\",\n\t\tkey,\n\t\tvalue: returnError(() => instance.attrs[key])\n\t}));\n}\nfunction processProvide(instance) {\n\treturn Reflect.ownKeys(instance.provides).map((key) => ({\n\t\ttype: \"provided\",\n\t\tkey: key.toString(),\n\t\tvalue: returnError(() => instance.provides[key])\n\t}));\n}\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nfunction processInject(instance, mergedType) {\n\tif (!mergedType?.inject) return [];\n\tlet keys;\n\tif (Array.isArray(mergedType.inject)) keys = mergedType.inject.map((key) => ({\n\t\tkey,\n\t\toriginalKey: key\n\t}));\n\telse keys = Reflect.ownKeys(mergedType.inject).map((key) => {\n\t\tconst value = mergedType.inject[key];\n\t\tlet originalKey;\n\t\tif (typeof value === \"string\" || typeof value === \"symbol\") originalKey = value;\n\t\telse originalKey = value.from ?? key;\n\t\treturn {\n\t\t\tkey,\n\t\t\toriginalKey\n\t\t};\n\t});\n\treturn keys.map(({ key, originalKey }) => ({\n\t\ttype: \"injected\",\n\t\tkey: key !== originalKey ? `${String(originalKey)} ➞ ${String(key)}` : String(key),\n\t\tvalue: returnError(() => hasOwn(instance.ctx, key) ? instance.ctx[key] : void 0)\n\t}));\n}\nfunction processRefs(instance) {\n\treturn Object.keys(instance.refs).map((key) => ({\n\t\ttype: \"template refs\",\n\t\tkey,\n\t\tvalue: returnError(() => instance.refs[key])\n\t}));\n}\nconst vnodeEvents = new Set([\n\t\"vnode-before-mount\",\n\t\"vnode-mounted\",\n\t\"vnode-before-update\",\n\t\"vnode-updated\",\n\t\"vnode-before-unmount\",\n\t\"vnode-unmounted\"\n]);\nfunction processEventListeners(instance) {\n\tconst emitsDefinition = instance.type.emits;\n\tconst declaredEmits = Array.isArray(emitsDefinition) ? emitsDefinition : Object.keys(emitsDefinition ?? {});\n\tconst keys = Object.keys(instance?.vnode?.props ?? {});\n\tconst result = [];\n\tfor (const key of keys) {\n\t\tconst [prefix, ...eventNameParts] = key.split(/(?=[A-Z])/);\n\t\tif (prefix === \"on\") {\n\t\t\tconst eventName = eventNameParts.join(\"-\").toLowerCase();\n\t\t\tconst isBuiltIn = vnodeEvents.has(eventName);\n\t\t\tconst isDeclared = declaredEmits.includes(eventName) || declaredEmits.includes(camelize(eventName));\n\t\t\tconst text = isBuiltIn ? \"✅ Built-in\" : isDeclared ? \"✅ Declared\" : \"⚠️ Not declared\";\n\t\t\tresult.push({\n\t\t\t\ttype: \"event listeners\",\n\t\t\t\tkey: eventName,\n\t\t\t\tvalue: { _custom: {\n\t\t\t\t\tdisplayText: text,\n\t\t\t\t\tkey: text,\n\t\t\t\t\tvalue: text,\n\t\t\t\t\ttooltipText: isBuiltIn ? `The event <code>${escape(eventName)}</code> is part of Vue and doesn't need to be declared by the component` : !isDeclared ? `The event <code>${escape(eventName)}</code> is not declared in the <code>emits</code> option. It will leak into the component's attributes (<code>$attrs</code>).` : null\n\t\t\t\t} }\n\t\t\t});\n\t\t}\n\t}\n\treturn result;\n}\nfunction processInstanceState(instance) {\n\tconst mergedType = resolveMergedOptions(instance);\n\treturn processProps(instance).concat(processState(instance), processSetupState(instance), processComputed(instance, mergedType), processAttrs(instance), processProvide(instance), processInject(instance, mergedType), processRefs(instance), processEventListeners(instance));\n}\n//#endregion\n//#region src/core/component/state/index.ts\nfunction getInstanceState(params) {\n\tconst instance = getComponentInstance(activeAppRecord.value, params.instanceId);\n\treturn {\n\t\tid: getUniqueComponentId(instance),\n\t\tname: getInstanceName(instance),\n\t\tfile: instance?.type?.__file,\n\t\tstate: processInstanceState(instance),\n\t\tinstance\n\t};\n}\n//#endregion\n//#region src/core/component/tree/filter.ts\nvar ComponentFilter = class {\n\tconstructor(filter) {\n\t\tthis.filter = filter || \"\";\n\t}\n\t/**\n\t* Check if an instance is qualified.\n\t*\n\t* @param {Vue|Vnode} instance\n\t* @return {boolean}\n\t*/\n\tisQualified(instance) {\n\t\tconst name = getInstanceName(instance);\n\t\treturn classify(name).toLowerCase().includes(this.filter) || kebabize(name).toLowerCase().includes(this.filter);\n\t}\n};\nfunction createComponentFilter(filterText) {\n\treturn new ComponentFilter(filterText);\n}\n//#endregion\n//#region src/core/component/tree/walker.ts\nvar ComponentWalker = class {\n\tconstructor(options) {\n\t\tthis.captureIds = /* @__PURE__ */ new Map();\n\t\tconst { filterText = \"\", maxDepth, recursively, api } = options;\n\t\tthis.componentFilter = createComponentFilter(filterText);\n\t\tthis.maxDepth = maxDepth;\n\t\tthis.recursively = recursively;\n\t\tthis.api = api;\n\t}\n\tgetComponentTree(instance) {\n\t\tthis.captureIds = /* @__PURE__ */ new Map();\n\t\treturn this.findQualifiedChildren(instance, 0);\n\t}\n\tgetComponentParents(instance) {\n\t\tthis.captureIds = /* @__PURE__ */ new Map();\n\t\tconst parents = [];\n\t\tthis.captureId(instance);\n\t\tlet parent = instance;\n\t\twhile (parent = parent.parent) {\n\t\t\tthis.captureId(parent);\n\t\t\tparents.push(parent);\n\t\t}\n\t\treturn parents;\n\t}\n\tcaptureId(instance) {\n\t\tif (!instance) return null;\n\t\tconst id = instance.__VUE_DEVTOOLS_NEXT_UID__ != null ? instance.__VUE_DEVTOOLS_NEXT_UID__ : getUniqueComponentId(instance);\n\t\tinstance.__VUE_DEVTOOLS_NEXT_UID__ = id;\n\t\tif (this.captureIds.has(id)) return null;\n\t\telse this.captureIds.set(id, void 0);\n\t\tthis.mark(instance);\n\t\treturn id;\n\t}\n\t/**\n\t* Capture the meta information of an instance. (recursive)\n\t*\n\t* @param {Vue} instance\n\t* @return {object}\n\t*/\n\tasync capture(instance, depth) {\n\t\tif (!instance) return null;\n\t\tconst id = this.captureId(instance);\n\t\tconst name = getInstanceName(instance);\n\t\tconst children = this.getInternalInstanceChildren(instance.subTree).filter((child) => !isBeingDestroyed(child));\n\t\tconst parents = this.getComponentParents(instance) || [];\n\t\tconst inactive = !!instance.isDeactivated || parents.some((parent) => parent.isDeactivated);\n\t\tconst treeNode = {\n\t\t\tuid: instance.uid,\n\t\t\tid,\n\t\t\tname,\n\t\t\trenderKey: getRenderKey(instance.vnode ? instance.vnode.key : null),\n\t\t\tinactive,\n\t\t\tchildren: [],\n\t\t\thasChildren: !!children.length,\n\t\t\tisFragment: isFragment(instance),\n\t\t\ttags: typeof instance.type !== \"function\" ? [] : [{\n\t\t\t\tlabel: \"functional\",\n\t\t\t\ttextColor: 5592405,\n\t\t\t\tbackgroundColor: 15658734\n\t\t\t}],\n\t\t\tautoOpen: this.recursively,\n\t\t\tfile: instance.type.__file || \"\"\n\t\t};\n\t\tif (depth < this.maxDepth || instance.type.__isKeepAlive || parents.some((parent) => parent.type.__isKeepAlive)) treeNode.children = await Promise.all(children.map((child) => this.capture(child, depth + 1)).filter(Boolean));\n\t\tif (this.isKeepAlive(instance)) {\n\t\t\tconst cachedComponents = this.getKeepAliveCachedInstances(instance);\n\t\t\tconst childrenIds = children.map((child) => child.__VUE_DEVTOOLS_NEXT_UID__);\n\t\t\tfor (const cachedChild of cachedComponents) if (!childrenIds.includes(cachedChild.__VUE_DEVTOOLS_NEXT_UID__)) {\n\t\t\t\tconst node = await this.capture({\n\t\t\t\t\t...cachedChild,\n\t\t\t\t\tisDeactivated: true\n\t\t\t\t}, depth + 1);\n\t\t\t\tif (node) treeNode.children.push(node);\n\t\t\t}\n\t\t}\n\t\tconst firstElement = getRootElementsFromComponentInstance(instance)[0];\n\t\tif (firstElement?.parentElement) {\n\t\t\tconst parentInstance = instance.parent;\n\t\t\tconst parentRootElements = parentInstance ? getRootElementsFromComponentInstance(parentInstance) : [];\n\t\t\tlet el = firstElement;\n\t\t\tconst indexList = [];\n\t\t\tdo {\n\t\t\t\tindexList.push(Array.from(el.parentElement.childNodes).indexOf(el));\n\t\t\t\tel = el.parentElement;\n\t\t\t} while (el.parentElement && parentRootElements.length && !parentRootElements.includes(el));\n\t\t\ttreeNode.domOrder = indexList.reverse();\n\t\t} else treeNode.domOrder = [-1];\n\t\tif (instance.suspense?.suspenseKey) {\n\t\t\ttreeNode.tags.push({\n\t\t\t\tlabel: instance.suspense.suspenseKey,\n\t\t\t\tbackgroundColor: 14979812,\n\t\t\t\ttextColor: 16777215\n\t\t\t});\n\t\t\tthis.mark(instance, true);\n\t\t}\n\t\tthis.api.visitComponentTree({\n\t\t\ttreeNode,\n\t\t\tcomponentInstance: instance,\n\t\t\tapp: instance.appContext.app,\n\t\t\tfilter: this.componentFilter.filter\n\t\t});\n\t\treturn treeNode;\n\t}\n\t/**\n\t* Find qualified children from a single instance.\n\t* If the instance itself is qualified, just return itself.\n\t* This is ok because [].concat works in both cases.\n\t*\n\t* @param {Vue|Vnode} instance\n\t* @return {Vue|Array}\n\t*/\n\tasync findQualifiedChildren(instance, depth) {\n\t\tif (this.componentFilter.isQualified(instance) && !instance.type.devtools?.hide) return [await this.capture(instance, depth)];\n\t\telse if (instance.subTree) {\n\t\t\tconst list = this.isKeepAlive(instance) ? this.getKeepAliveCachedInstances(instance) : this.getInternalInstanceChildren(instance.subTree);\n\t\t\treturn this.findQualifiedChildrenFromList(list, depth);\n\t\t} else return [];\n\t}\n\t/**\n\t* Iterate through an array of instances and flatten it into\n\t* an array of qualified instances. This is a depth-first\n\t* traversal - e.g. if an instance is not matched, we will\n\t* recursively go deeper until a qualified child is found.\n\t*\n\t* @param {Array} instances\n\t* @return {Array}\n\t*/\n\tasync findQualifiedChildrenFromList(instances, depth) {\n\t\tinstances = instances.filter((child) => !isBeingDestroyed(child) && !child.type.devtools?.hide);\n\t\tif (!this.componentFilter.filter) return Promise.all(instances.map((child) => this.capture(child, depth)));\n\t\telse return Array.prototype.concat.apply([], await Promise.all(instances.map((i) => this.findQualifiedChildren(i, depth))));\n\t}\n\t/**\n\t* Get children from a component instance.\n\t*/\n\tgetInternalInstanceChildren(subTree, suspense = null) {\n\t\tconst list = [];\n\t\tif (subTree) {\n\t\t\tif (subTree.component) !suspense ? list.push(subTree.component) : list.push({\n\t\t\t\t...subTree.component,\n\t\t\t\tsuspense\n\t\t\t});\n\t\t\telse if (subTree.suspense) {\n\t\t\t\tconst suspenseKey = !subTree.suspense.isInFallback ? \"suspense default\" : \"suspense fallback\";\n\t\t\t\tlist.push(...this.getInternalInstanceChildren(subTree.suspense.activeBranch, {\n\t\t\t\t\t...subTree.suspense,\n\t\t\t\t\tsuspenseKey\n\t\t\t\t}));\n\t\t\t} else if (Array.isArray(subTree.children)) subTree.children.forEach((childSubTree) => {\n\t\t\t\tif (childSubTree.component) !suspense ? list.push(childSubTree.component) : list.push({\n\t\t\t\t\t...childSubTree.component,\n\t\t\t\t\tsuspense\n\t\t\t\t});\n\t\t\t\telse list.push(...this.getInternalInstanceChildren(childSubTree, suspense));\n\t\t\t});\n\t\t}\n\t\treturn list.filter((child) => !isBeingDestroyed(child) && !child.type.devtools?.hide);\n\t}\n\t/**\n\t* Mark an instance as captured and store it in the instance map.\n\t*\n\t* @param {Vue} instance\n\t*/\n\tmark(instance, force = false) {\n\t\tconst instanceMap = getAppRecord(instance).instanceMap;\n\t\tif (force || !instanceMap.has(instance.__VUE_DEVTOOLS_NEXT_UID__)) {\n\t\t\tinstanceMap.set(instance.__VUE_DEVTOOLS_NEXT_UID__, instance);\n\t\t\tactiveAppRecord.value.instanceMap = instanceMap;\n\t\t}\n\t}\n\tisKeepAlive(instance) {\n\t\treturn instance.type.__isKeepAlive && instance.__v_cache;\n\t}\n\tgetKeepAliveCachedInstances(instance) {\n\t\treturn Array.from(instance.__v_cache.values()).map((vnode) => vnode.component).filter(Boolean);\n\t}\n};\n//#endregion\n//#region src/core/timeline/perf.ts\nconst markEndQueue = /* @__PURE__ */ new Map();\nconst PERFORMANCE_EVENT_LAYER_ID = \"performance\";\nasync function performanceMarkStart(api, app, uid, vm, type, time) {\n\tconst appRecord = await getAppRecord(app);\n\tif (!appRecord) return;\n\tconst componentName = getInstanceName(vm) || \"Unknown Component\";\n\tconst groupId = devtoolsState.perfUniqueGroupId++;\n\tconst groupKey = `${uid}-${type}`;\n\tappRecord.perfGroupIds.set(groupKey, {\n\t\tgroupId,\n\t\ttime\n\t});\n\tawait api.addTimelineEvent({\n\t\tlayerId: PERFORMANCE_EVENT_LAYER_ID,\n\t\tevent: {\n\t\t\ttime: Date.now(),\n\t\t\tdata: {\n\t\t\t\tcomponent: componentName,\n\t\t\t\ttype,\n\t\t\t\tmeasure: \"start\"\n\t\t\t},\n\t\t\ttitle: componentName,\n\t\t\tsubtitle: type,\n\t\t\tgroupId\n\t\t}\n\t});\n\tif (markEndQueue.has(groupKey)) {\n\t\tconst { app, uid, instance, type, time } = markEndQueue.get(groupKey);\n\t\tmarkEndQueue.delete(groupKey);\n\t\tawait performanceMarkEnd(api, app, uid, instance, type, time);\n\t}\n}\nfunction performanceMarkEnd(api, app, uid, vm, type, time) {\n\tconst appRecord = getAppRecord(app);\n\tif (!appRecord) return;\n\tconst componentName = getInstanceName(vm) || \"Unknown Component\";\n\tconst groupKey = `${uid}-${type}`;\n\tconst groupInfo = appRecord.perfGroupIds.get(groupKey);\n\tif (groupInfo) {\n\t\tconst groupId = groupInfo.groupId;\n\t\tconst duration = time - groupInfo.time;\n\t\tapi.addTimelineEvent({\n\t\t\tlayerId: PERFORMANCE_EVENT_LAYER_ID,\n\t\t\tevent: {\n\t\t\t\ttime: Date.now(),\n\t\t\t\tdata: {\n\t\t\t\t\tcomponent: componentName,\n\t\t\t\t\ttype,\n\t\t\t\t\tmeasure: \"end\",\n\t\t\t\t\tduration: { _custom: {\n\t\t\t\t\t\ttype: \"Duration\",\n\t\t\t\t\t\tvalue: duration,\n\t\t\t\t\t\tdisplay: `${duration} ms`\n\t\t\t\t\t} }\n\t\t\t\t},\n\t\t\t\ttitle: componentName,\n\t\t\t\tsubtitle: type,\n\t\t\t\tgroupId\n\t\t\t}\n\t\t});\n\t} else markEndQueue.set(groupKey, {\n\t\tapp,\n\t\tuid,\n\t\tinstance: vm,\n\t\ttype,\n\t\ttime\n\t});\n}\n//#endregion\n//#region src/core/timeline/index.ts\nconst COMPONENT_EVENT_LAYER_ID = \"component-event\";\nfunction setupBuiltinTimelineLayers(api) {\n\tif (!isBrowser) return;\n\tapi.addTimelineLayer({\n\t\tid: \"mouse\",\n\t\tlabel: \"Mouse\",\n\t\tcolor: 10768815\n\t});\n\t[\n\t\t\"mousedown\",\n\t\t\"mouseup\",\n\t\t\"click\",\n\t\t\"dblclick\"\n\t].forEach((eventType) => {\n\t\tif (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.mouseEventEnabled) return;\n\t\twindow.addEventListener(eventType, async (event) => {\n\t\t\tawait api.addTimelineEvent({\n\t\t\t\tlayerId: \"mouse\",\n\t\t\t\tevent: {\n\t\t\t\t\ttime: Date.now(),\n\t\t\t\t\tdata: {\n\t\t\t\t\t\ttype: eventType,\n\t\t\t\t\t\tx: event.clientX,\n\t\t\t\t\t\ty: event.clientY\n\t\t\t\t\t},\n\t\t\t\t\ttitle: eventType\n\t\t\t\t}\n\t\t\t});\n\t\t}, {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t});\n\t});\n\tapi.addTimelineLayer({\n\t\tid: \"keyboard\",\n\t\tlabel: \"Keyboard\",\n\t\tcolor: 8475055\n\t});\n\t[\n\t\t\"keyup\",\n\t\t\"keydown\",\n\t\t\"keypress\"\n\t].forEach((eventType) => {\n\t\twindow.addEventListener(eventType, async (event) => {\n\t\t\tif (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.keyboardEventEnabled) return;\n\t\t\tawait api.addTimelineEvent({\n\t\t\t\tlayerId: \"keyboard\",\n\t\t\t\tevent: {\n\t\t\t\t\ttime: Date.now(),\n\t\t\t\t\tdata: {\n\t\t\t\t\t\ttype: eventType,\n\t\t\t\t\t\tkey: event.key,\n\t\t\t\t\t\tctrlKey: event.ctrlKey,\n\t\t\t\t\t\tshiftKey: event.shiftKey,\n\t\t\t\t\t\taltKey: event.altKey,\n\t\t\t\t\t\tmetaKey: event.metaKey\n\t\t\t\t\t},\n\t\t\t\t\ttitle: event.key\n\t\t\t\t}\n\t\t\t});\n\t\t}, {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t});\n\t});\n\tapi.addTimelineLayer({\n\t\tid: COMPONENT_EVENT_LAYER_ID,\n\t\tlabel: \"Component events\",\n\t\tcolor: 5226637\n\t});\n\thook.on.componentEmit(async (app, instance, event, params) => {\n\t\tif (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.componentEventEnabled) return;\n\t\tconst appRecord = await getAppRecord(app);\n\t\tif (!appRecord) return;\n\t\tconst componentId = `${appRecord.id}:${instance.uid}`;\n\t\tconst componentName = getInstanceName(instance) || \"Unknown Component\";\n\t\tapi.addTimelineEvent({\n\t\t\tlayerId: COMPONENT_EVENT_LAYER_ID,\n\t\t\tevent: {\n\t\t\t\ttime: Date.now(),\n\t\t\t\tdata: {\n\t\t\t\t\tcomponent: { _custom: {\n\t\t\t\t\t\ttype: \"component-definition\",\n\t\t\t\t\t\tdisplay: componentName\n\t\t\t\t\t} },\n\t\t\t\t\tevent,\n\t\t\t\t\tparams\n\t\t\t\t},\n\t\t\t\ttitle: event,\n\t\t\t\tsubtitle: `by ${componentName}`,\n\t\t\t\tmeta: { componentId }\n\t\t\t}\n\t\t});\n\t});\n\tapi.addTimelineLayer({\n\t\tid: \"performance\",\n\t\tlabel: PERFORMANCE_EVENT_LAYER_ID,\n\t\tcolor: 4307050\n\t});\n\thook.on.perfStart((app, uid, vm, type, time) => {\n\t\tif (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.performanceEventEnabled) return;\n\t\tperformanceMarkStart(api, app, uid, vm, type, time);\n\t});\n\thook.on.perfEnd((app, uid, vm, type, time) => {\n\t\tif (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.performanceEventEnabled) return;\n\t\tperformanceMarkEnd(api, app, uid, vm, type, time);\n\t});\n}\n//#endregion\n//#region src/core/vm/index.ts\nconst MAX_$VM = 10;\nconst $vmQueue = [];\nfunction exposeInstanceToWindow(componentInstance) {\n\tif (typeof window === \"undefined\") return;\n\tconst win = window;\n\tif (!componentInstance) return;\n\twin.$vm = componentInstance;\n\tif ($vmQueue[0] !== componentInstance) {\n\t\tif ($vmQueue.length >= MAX_$VM) $vmQueue.pop();\n\t\tfor (let i = $vmQueue.length; i > 0; i--) win[`$vm${i}`] = $vmQueue[i] = $vmQueue[i - 1];\n\t\twin.$vm0 = $vmQueue[0] = componentInstance;\n\t}\n}\n//#endregion\n//#region src/core/plugin/components.ts\nconst INSPECTOR_ID = \"components\";\nfunction createComponentsDevToolsPlugin(app) {\n\tconst descriptor = {\n\t\tid: INSPECTOR_ID,\n\t\tlabel: \"Components\",\n\t\tapp\n\t};\n\tconst setupFn = (api) => {\n\t\tapi.addInspector({\n\t\t\tid: INSPECTOR_ID,\n\t\t\tlabel: \"Components\",\n\t\t\ttreeFilterPlaceholder: \"Search components\"\n\t\t});\n\t\tsetupBuiltinTimelineLayers(api);\n\t\tapi.on.getInspectorTree(async (payload) => {\n\t\t\tif (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n\t\t\t\tconst instance = getComponentInstance(activeAppRecord.value, payload.instanceId);\n\t\t\t\tif (instance) payload.rootNodes = await new ComponentWalker({\n\t\t\t\t\tfilterText: payload.filter,\n\t\t\t\t\tmaxDepth: 100,\n\t\t\t\t\trecursively: false,\n\t\t\t\t\tapi\n\t\t\t\t}).getComponentTree(instance);\n\t\t\t}\n\t\t});\n\t\tapi.on.getInspectorState(async (payload) => {\n\t\t\tif (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n\t\t\t\tconst result = getInstanceState({ instanceId: payload.nodeId });\n\t\t\t\tconst componentInstance = result.instance;\n\t\t\t\tconst _payload = {\n\t\t\t\t\tcomponentInstance,\n\t\t\t\t\tapp: result.instance?.appContext.app,\n\t\t\t\t\tinstanceData: result\n\t\t\t\t};\n\t\t\t\tdevtoolsContext.hooks.callHookWith((callbacks) => {\n\t\t\t\t\tcallbacks.forEach((cb) => cb(_payload));\n\t\t\t\t}, DevToolsV6PluginAPIHookKeys.INSPECT_COMPONENT);\n\t\t\t\tpayload.state = result;\n\t\t\t\texposeInstanceToWindow(componentInstance);\n\t\t\t}\n\t\t});\n\t\tapi.on.editInspectorState(async (payload) => {\n\t\t\tif (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n\t\t\t\teditState(payload);\n\t\t\t\tawait api.sendInspectorState(\"components\");\n\t\t\t}\n\t\t});\n\t\tconst debounceSendInspectorTree = debounce(() => {\n\t\t\tapi.sendInspectorTree(INSPECTOR_ID);\n\t\t}, 120);\n\t\tconst debounceSendInspectorState = debounce(() => {\n\t\t\tapi.sendInspectorState(INSPECTOR_ID);\n\t\t}, 120);\n\t\thook.on.componentAdded(async (app, uid, parentUid, component) => {\n\t\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\t\tif (app?._instance?.type?.devtools?.hide) return;\n\t\t\tif (!app || typeof uid !== \"number\" && !uid || !component) return;\n\t\t\tconst id = await getComponentId({\n\t\t\t\tapp,\n\t\t\t\tuid,\n\t\t\t\tinstance: component\n\t\t\t});\n\t\t\tconst appRecord = await getAppRecord(app);\n\t\t\tif (component) {\n\t\t\t\tif (component.__VUE_DEVTOOLS_NEXT_UID__ == null) component.__VUE_DEVTOOLS_NEXT_UID__ = id;\n\t\t\t\tif (!appRecord?.instanceMap.has(id)) {\n\t\t\t\t\tappRecord?.instanceMap.set(id, component);\n\t\t\t\t\tif (activeAppRecord.value.id === appRecord?.id) activeAppRecord.value.instanceMap = appRecord.instanceMap;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!appRecord) return;\n\t\t\tdebounceSendInspectorTree();\n\t\t});\n\t\thook.on.componentUpdated(async (app, uid, parentUid, component) => {\n\t\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\t\tif (app?._instance?.type?.devtools?.hide) return;\n\t\t\tif (!app || typeof uid !== \"number\" && !uid || !component) return;\n\t\t\tconst id = await getComponentId({\n\t\t\t\tapp,\n\t\t\t\tuid,\n\t\t\t\tinstance: component\n\t\t\t});\n\t\t\tconst appRecord = await getAppRecord(app);\n\t\t\tif (component) {\n\t\t\t\tif (component.__VUE_DEVTOOLS_NEXT_UID__ == null) component.__VUE_DEVTOOLS_NEXT_UID__ = id;\n\t\t\t\tif (!appRecord?.instanceMap.has(id)) {\n\t\t\t\t\tappRecord?.instanceMap.set(id, component);\n\t\t\t\t\tif (activeAppRecord.value.id === appRecord?.id) activeAppRecord.value.instanceMap = appRecord.instanceMap;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!appRecord) return;\n\t\t\tdebounceSendInspectorTree();\n\t\t\tdebounceSendInspectorState();\n\t\t});\n\t\thook.on.componentRemoved(async (app, uid, parentUid, component) => {\n\t\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\t\tif (app?._instance?.type?.devtools?.hide) return;\n\t\t\tif (!app || typeof uid !== \"number\" && !uid || !component) return;\n\t\t\tconst appRecord = await getAppRecord(app);\n\t\t\tif (!appRecord) return;\n\t\t\tconst id = await getComponentId({\n\t\t\t\tapp,\n\t\t\t\tuid,\n\t\t\t\tinstance: component\n\t\t\t});\n\t\t\tappRecord?.instanceMap.delete(id);\n\t\t\tif (activeAppRecord.value.id === appRecord?.id) activeAppRecord.value.instanceMap = appRecord.instanceMap;\n\t\t\tdebounceSendInspectorTree();\n\t\t});\n\t};\n\treturn [descriptor, setupFn];\n}\n//#endregion\n//#region src/core/plugin/index.ts\ntarget.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__ ??= /* @__PURE__ */ new Set();\nfunction setupDevToolsPlugin(pluginDescriptor, setupFn) {\n\treturn hook.setupDevToolsPlugin(pluginDescriptor, setupFn);\n}\nfunction callDevToolsPluginSetupFn(plugin, app) {\n\tconst [pluginDescriptor, setupFn] = plugin;\n\tif (pluginDescriptor.app !== app) return;\n\tconst api = new DevToolsPluginAPI({\n\t\tplugin: {\n\t\t\tsetupFn,\n\t\t\tdescriptor: pluginDescriptor\n\t\t},\n\t\tctx: devtoolsContext\n\t});\n\tif (pluginDescriptor.packageName === \"vuex\") api.on.editInspectorState((payload) => {\n\t\tapi.sendInspectorState(payload.inspectorId);\n\t});\n\tsetupFn(api);\n}\nfunction removeRegisteredPluginApp(app) {\n\ttarget.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.delete(app);\n}\nfunction registerDevToolsPlugin(app, options) {\n\tif (target.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.has(app)) return;\n\tif (devtoolsState.highPerfModeEnabled && !options?.inspectingComponent) return;\n\ttarget.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.add(app);\n\tdevtoolsPluginBuffer.forEach((plugin) => {\n\t\tcallDevToolsPluginSetupFn(plugin, app);\n\t});\n}\n//#endregion\n//#region src/ctx/router.ts\nconst ROUTER_KEY = \"__VUE_DEVTOOLS_ROUTER__\";\nconst ROUTER_INFO_KEY = \"__VUE_DEVTOOLS_ROUTER_INFO__\";\ntarget[ROUTER_INFO_KEY] ??= {\n\tcurrentRoute: null,\n\troutes: []\n};\ntarget[ROUTER_KEY] ??= {};\nconst devtoolsRouterInfo = new Proxy(target[ROUTER_INFO_KEY], { get(target$1, property) {\n\treturn target[ROUTER_INFO_KEY][property];\n} });\nconst devtoolsRouter = new Proxy(target[ROUTER_KEY], { get(target$2, property) {\n\tif (property === \"value\") return target[ROUTER_KEY];\n} });\n//#endregion\n//#region src/core/router/index.ts\nfunction getRoutes(router) {\n\tconst routesMap = /* @__PURE__ */ new Map();\n\treturn (router?.getRoutes() || []).filter((i) => !routesMap.has(i.path) && routesMap.set(i.path, 1));\n}\nfunction filterRoutes(routes) {\n\treturn routes.map((item) => {\n\t\tlet { path, name, children, meta } = item;\n\t\tif (children?.length) children = filterRoutes(children);\n\t\treturn {\n\t\t\tpath,\n\t\t\tname,\n\t\t\tchildren,\n\t\t\tmeta\n\t\t};\n\t});\n}\nfunction filterCurrentRoute(route) {\n\tif (route) {\n\t\tconst { fullPath, hash, href, path, name, matched, params, query } = route;\n\t\treturn {\n\t\t\tfullPath,\n\t\t\thash,\n\t\t\thref,\n\t\t\tpath,\n\t\t\tname,\n\t\t\tparams,\n\t\t\tquery,\n\t\t\tmatched: filterRoutes(matched)\n\t\t};\n\t}\n\treturn route;\n}\nfunction normalizeRouterInfo(appRecord, activeAppRecord) {\n\tfunction init() {\n\t\tconst router = appRecord.app?.config.globalProperties.$router;\n\t\tconst currentRoute = filterCurrentRoute(router?.currentRoute.value);\n\t\tconst routes = filterRoutes(getRoutes(router));\n\t\tconst c = console.warn;\n\t\tconsole.warn = () => {};\n\t\ttarget[ROUTER_INFO_KEY] = {\n\t\t\tcurrentRoute: currentRoute ? deepClone(currentRoute) : {},\n\t\t\troutes: deepClone(routes)\n\t\t};\n\t\ttarget[ROUTER_KEY] = router;\n\t\tconsole.warn = c;\n\t}\n\tinit();\n\thook.on.componentUpdated(debounce(() => {\n\t\tif (activeAppRecord.value?.app !== appRecord.app) return;\n\t\tinit();\n\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\tdevtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.ROUTER_INFO_UPDATED, { state: target[ROUTER_INFO_KEY] });\n\t}, 200));\n}\n//#endregion\n//#region src/ctx/api.ts\nfunction createDevToolsApi(hooks) {\n\treturn {\n\t\tasync getInspectorTree(payload) {\n\t\t\tconst _payload = {\n\t\t\t\t...payload,\n\t\t\t\tapp: activeAppRecord.value.app,\n\t\t\t\trootNodes: []\n\t\t\t};\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\thooks.callHookWith(async (callbacks) => {\n\t\t\t\t\tawait Promise.all(callbacks.map((cb) => cb(_payload)));\n\t\t\t\t\tresolve();\n\t\t\t\t}, DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_TREE);\n\t\t\t});\n\t\t\treturn _payload.rootNodes;\n\t\t},\n\t\tasync getInspectorState(payload) {\n\t\t\tconst _payload = {\n\t\t\t\t...payload,\n\t\t\t\tapp: activeAppRecord.value.app,\n\t\t\t\tstate: null\n\t\t\t};\n\t\t\tconst ctx = { currentTab: `custom-inspector:${payload.inspectorId}` };\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\thooks.callHookWith(async (callbacks) => {\n\t\t\t\t\tawait Promise.all(callbacks.map((cb) => cb(_payload, ctx)));\n\t\t\t\t\tresolve();\n\t\t\t\t}, DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_STATE);\n\t\t\t});\n\t\t\treturn _payload.state;\n\t\t},\n\t\teditInspectorState(payload) {\n\t\t\tconst stateEditor = new StateEditor();\n\t\t\tconst _payload = {\n\t\t\t\t...payload,\n\t\t\t\tapp: activeAppRecord.value.app,\n\t\t\t\tset: (obj, path = payload.path, value = payload.state.value, cb) => {\n\t\t\t\t\tstateEditor.set(obj, path, value, cb || stateEditor.createDefaultSetCallback(payload.state));\n\t\t\t\t}\n\t\t\t};\n\t\t\thooks.callHookWith((callbacks) => {\n\t\t\t\tcallbacks.forEach((cb) => cb(_payload));\n\t\t\t}, DevToolsV6PluginAPIHookKeys.EDIT_INSPECTOR_STATE);\n\t\t},\n\t\tsendInspectorState(inspectorId) {\n\t\t\tconst inspector = getInspector(inspectorId);\n\t\t\thooks.callHook(DevToolsContextHookKeys.SEND_INSPECTOR_STATE, {\n\t\t\t\tinspectorId,\n\t\t\t\tplugin: {\n\t\t\t\t\tdescriptor: inspector.descriptor,\n\t\t\t\t\tsetupFn: () => ({})\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tinspectComponentInspector() {\n\t\t\treturn inspectComponentHighLighter();\n\t\t},\n\t\tcancelInspectComponentInspector() {\n\t\t\treturn cancelInspectComponentHighLighter();\n\t\t},\n\t\tgetComponentRenderCode(id) {\n\t\t\tconst instance = getComponentInstance(activeAppRecord.value, id);\n\t\t\tif (instance) return !(typeof instance?.type === \"function\") ? instance.render.toString() : instance.type.toString();\n\t\t},\n\t\tscrollToComponent(id) {\n\t\t\treturn scrollToComponent({ id });\n\t\t},\n\t\topenInEditor,\n\t\tgetVueInspector: getComponentInspector,\n\t\ttoggleApp(id, options) {\n\t\t\tconst appRecord = devtoolsAppRecords.value.find((record) => record.id === id);\n\t\t\tif (appRecord) {\n\t\t\t\tsetActiveAppRecordId(id);\n\t\t\t\tsetActiveAppRecord(appRecord);\n\t\t\t\tnormalizeRouterInfo(appRecord, activeAppRecord);\n\t\t\t\tcallInspectorUpdatedHook();\n\t\t\t\tregisterDevToolsPlugin(appRecord.app, options);\n\t\t\t}\n\t\t},\n\t\tinspectDOM(instanceId) {\n\t\t\tconst instance = getComponentInstance(activeAppRecord.value, instanceId);\n\t\t\tif (instance) {\n\t\t\t\tconst [el] = getRootElementsFromComponentInstance(instance);\n\t\t\t\tif (el) target.__VUE_DEVTOOLS_INSPECT_DOM_TARGET__ = el;\n\t\t\t}\n\t\t},\n\t\tupdatePluginSettings(pluginId, key, value) {\n\t\t\tsetPluginSettings(pluginId, key, value);\n\t\t},\n\t\tgetPluginSettings(pluginId) {\n\t\t\treturn {\n\t\t\t\toptions: getPluginSettingsOptions(pluginId),\n\t\t\t\tvalues: getPluginSettings(pluginId)\n\t\t\t};\n\t\t}\n\t};\n}\n//#endregion\n//#region src/ctx/env.ts\ntarget.__VUE_DEVTOOLS_ENV__ ??= { vitePluginDetected: false };\nfunction getDevToolsEnv() {\n\treturn target.__VUE_DEVTOOLS_ENV__;\n}\nfunction setDevToolsEnv(env) {\n\ttarget.__VUE_DEVTOOLS_ENV__ = {\n\t\t...target.__VUE_DEVTOOLS_ENV__,\n\t\t...env\n\t};\n}\n//#endregion\n//#region src/ctx/index.ts\nconst hooks = createDevToolsCtxHooks();\ntarget.__VUE_DEVTOOLS_KIT_CONTEXT__ ??= {\n\thooks,\n\tget state() {\n\t\treturn {\n\t\t\t...devtoolsState,\n\t\t\tactiveAppRecordId: activeAppRecord.id,\n\t\t\tactiveAppRecord: activeAppRecord.value,\n\t\t\tappRecords: devtoolsAppRecords.value\n\t\t};\n\t},\n\tapi: createDevToolsApi(hooks)\n};\nconst devtoolsContext = target.__VUE_DEVTOOLS_KIT_CONTEXT__;\n//#endregion\n//#region ../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/lib/speakingurl.js\nvar require_speakingurl$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\t(function(root) {\n\t\t\"use strict\";\n\t\t/**\n\t\t* charMap\n\t\t* @type {Object}\n\t\t*/\n\t\tvar charMap = {\n\t\t\t\"À\": \"A\",\n\t\t\t\"Á\": \"A\",\n\t\t\t\"Â\": \"A\",\n\t\t\t\"Ã\": \"A\",\n\t\t\t\"Ä\": \"Ae\",\n\t\t\t\"Å\": \"A\",\n\t\t\t\"Æ\": \"AE\",\n\t\t\t\"Ç\": \"C\",\n\t\t\t\"È\": \"E\",\n\t\t\t\"É\": \"E\",\n\t\t\t\"Ê\": \"E\",\n\t\t\t\"Ë\": \"E\",\n\t\t\t\"Ì\": \"I\",\n\t\t\t\"Í\": \"I\",\n\t\t\t\"Î\": \"I\",\n\t\t\t\"Ï\": \"I\",\n\t\t\t\"Ð\": \"D\",\n\t\t\t\"Ñ\": \"N\",\n\t\t\t\"Ò\": \"O\",\n\t\t\t\"Ó\": \"O\",\n\t\t\t\"Ô\": \"O\",\n\t\t\t\"Õ\": \"O\",\n\t\t\t\"Ö\": \"Oe\",\n\t\t\t\"Ő\": \"O\",\n\t\t\t\"Ø\": \"O\",\n\t\t\t\"Ù\": \"U\",\n\t\t\t\"Ú\": \"U\",\n\t\t\t\"Û\": \"U\",\n\t\t\t\"Ü\": \"Ue\",\n\t\t\t\"Ű\": \"U\",\n\t\t\t\"Ý\": \"Y\",\n\t\t\t\"Þ\": \"TH\",\n\t\t\t\"ß\": \"ss\",\n\t\t\t\"à\": \"a\",\n\t\t\t\"á\": \"a\",\n\t\t\t\"â\": \"a\",\n\t\t\t\"ã\": \"a\",\n\t\t\t\"ä\": \"ae\",\n\t\t\t\"å\": \"a\",\n\t\t\t\"æ\": \"ae\",\n\t\t\t\"ç\": \"c\",\n\t\t\t\"è\": \"e\",\n\t\t\t\"é\": \"e\",\n\t\t\t\"ê\": \"e\",\n\t\t\t\"ë\": \"e\",\n\t\t\t\"ì\": \"i\",\n\t\t\t\"í\": \"i\",\n\t\t\t\"î\": \"i\",\n\t\t\t\"ï\": \"i\",\n\t\t\t\"ð\": \"d\",\n\t\t\t\"ñ\": \"n\",\n\t\t\t\"ò\": \"o\",\n\t\t\t\"ó\": \"o\",\n\t\t\t\"ô\": \"o\",\n\t\t\t\"õ\": \"o\",\n\t\t\t\"ö\": \"oe\",\n\t\t\t\"ő\": \"o\",\n\t\t\t\"ø\": \"o\",\n\t\t\t\"ù\": \"u\",\n\t\t\t\"ú\": \"u\",\n\t\t\t\"û\": \"u\",\n\t\t\t\"ü\": \"ue\",\n\t\t\t\"ű\": \"u\",\n\t\t\t\"ý\": \"y\",\n\t\t\t\"þ\": \"th\",\n\t\t\t\"ÿ\": \"y\",\n\t\t\t\"ẞ\": \"SS\",\n\t\t\t\"ا\": \"a\",\n\t\t\t\"أ\": \"a\",\n\t\t\t\"إ\": \"i\",\n\t\t\t\"آ\": \"aa\",\n\t\t\t\"ؤ\": \"u\",\n\t\t\t\"ئ\": \"e\",\n\t\t\t\"ء\": \"a\",\n\t\t\t\"ب\": \"b\",\n\t\t\t\"ت\": \"t\",\n\t\t\t\"ث\": \"th\",\n\t\t\t\"ج\": \"j\",\n\t\t\t\"ح\": \"h\",\n\t\t\t\"خ\": \"kh\",\n\t\t\t\"د\": \"d\",\n\t\t\t\"ذ\": \"th\",\n\t\t\t\"ر\": \"r\",\n\t\t\t\"ز\": \"z\",\n\t\t\t\"س\": \"s\",\n\t\t\t\"ش\": \"sh\",\n\t\t\t\"ص\": \"s\",\n\t\t\t\"ض\": \"dh\",\n\t\t\t\"ط\": \"t\",\n\t\t\t\"ظ\": \"z\",\n\t\t\t\"ع\": \"a\",\n\t\t\t\"غ\": \"gh\",\n\t\t\t\"ف\": \"f\",\n\t\t\t\"ق\": \"q\",\n\t\t\t\"ك\": \"k\",\n\t\t\t\"ل\": \"l\",\n\t\t\t\"م\": \"m\",\n\t\t\t\"ن\": \"n\",\n\t\t\t\"ه\": \"h\",\n\t\t\t\"و\": \"w\",\n\t\t\t\"ي\": \"y\",\n\t\t\t\"ى\": \"a\",\n\t\t\t\"ة\": \"h\",\n\t\t\t\"ﻻ\": \"la\",\n\t\t\t\"ﻷ\": \"laa\",\n\t\t\t\"ﻹ\": \"lai\",\n\t\t\t\"ﻵ\": \"laa\",\n\t\t\t\"گ\": \"g\",\n\t\t\t\"چ\": \"ch\",\n\t\t\t\"پ\": \"p\",\n\t\t\t\"ژ\": \"zh\",\n\t\t\t\"ک\": \"k\",\n\t\t\t\"ی\": \"y\",\n\t\t\t\"َ\": \"a\",\n\t\t\t\"ً\": \"an\",\n\t\t\t\"ِ\": \"e\",\n\t\t\t\"ٍ\": \"en\",\n\t\t\t\"ُ\": \"u\",\n\t\t\t\"ٌ\": \"on\",\n\t\t\t\"ْ\": \"\",\n\t\t\t\"٠\": \"0\",\n\t\t\t\"١\": \"1\",\n\t\t\t\"٢\": \"2\",\n\t\t\t\"٣\": \"3\",\n\t\t\t\"٤\": \"4\",\n\t\t\t\"٥\": \"5\",\n\t\t\t\"٦\": \"6\",\n\t\t\t\"٧\": \"7\",\n\t\t\t\"٨\": \"8\",\n\t\t\t\"٩\": \"9\",\n\t\t\t\"۰\": \"0\",\n\t\t\t\"۱\": \"1\",\n\t\t\t\"۲\": \"2\",\n\t\t\t\"۳\": \"3\",\n\t\t\t\"۴\": \"4\",\n\t\t\t\"۵\": \"5\",\n\t\t\t\"۶\": \"6\",\n\t\t\t\"۷\": \"7\",\n\t\t\t\"۸\": \"8\",\n\t\t\t\"۹\": \"9\",\n\t\t\t\"က\": \"k\",\n\t\t\t\"ခ\": \"kh\",\n\t\t\t\"ဂ\": \"g\",\n\t\t\t\"ဃ\": \"ga\",\n\t\t\t\"င\": \"ng\",\n\t\t\t\"စ\": \"s\",\n\t\t\t\"ဆ\": \"sa\",\n\t\t\t\"ဇ\": \"z\",\n\t\t\t\"စျ\": \"za\",\n\t\t\t\"ည\": \"ny\",\n\t\t\t\"ဋ\": \"t\",\n\t\t\t\"ဌ\": \"ta\",\n\t\t\t\"ဍ\": \"d\",\n\t\t\t\"ဎ\": \"da\",\n\t\t\t\"ဏ\": \"na\",\n\t\t\t\"တ\": \"t\",\n\t\t\t\"ထ\": \"ta\",\n\t\t\t\"ဒ\": \"d\",\n\t\t\t\"ဓ\": \"da\",\n\t\t\t\"န\": \"n\",\n\t\t\t\"ပ\": \"p\",\n\t\t\t\"ဖ\": \"pa\",\n\t\t\t\"ဗ\": \"b\",\n\t\t\t\"ဘ\": \"ba\",\n\t\t\t\"မ\": \"m\",\n\t\t\t\"ယ\": \"y\",\n\t\t\t\"ရ\": \"ya\",\n\t\t\t\"လ\": \"l\",\n\t\t\t\"ဝ\": \"w\",\n\t\t\t\"သ\": \"th\",\n\t\t\t\"ဟ\": \"h\",\n\t\t\t\"ဠ\": \"la\",\n\t\t\t\"အ\": \"a\",\n\t\t\t\"ြ\": \"y\",\n\t\t\t\"ျ\": \"ya\",\n\t\t\t\"ွ\": \"w\",\n\t\t\t\"ြွ\": \"yw\",\n\t\t\t\"ျွ\": \"ywa\",\n\t\t\t\"ှ\": \"h\",\n\t\t\t\"ဧ\": \"e\",\n\t\t\t\"၏\": \"-e\",\n\t\t\t\"ဣ\": \"i\",\n\t\t\t\"ဤ\": \"-i\",\n\t\t\t\"ဉ\": \"u\",\n\t\t\t\"ဦ\": \"-u\",\n\t\t\t\"ဩ\": \"aw\",\n\t\t\t\"သြော\": \"aw\",\n\t\t\t\"ဪ\": \"aw\",\n\t\t\t\"၀\": \"0\",\n\t\t\t\"၁\": \"1\",\n\t\t\t\"၂\": \"2\",\n\t\t\t\"၃\": \"3\",\n\t\t\t\"၄\": \"4\",\n\t\t\t\"၅\": \"5\",\n\t\t\t\"၆\": \"6\",\n\t\t\t\"၇\": \"7\",\n\t\t\t\"၈\": \"8\",\n\t\t\t\"၉\": \"9\",\n\t\t\t\"္\": \"\",\n\t\t\t\"့\": \"\",\n\t\t\t\"း\": \"\",\n\t\t\t\"č\": \"c\",\n\t\t\t\"ď\": \"d\",\n\t\t\t\"ě\": \"e\",\n\t\t\t\"ň\": \"n\",\n\t\t\t\"ř\": \"r\",\n\t\t\t\"š\": \"s\",\n\t\t\t\"ť\": \"t\",\n\t\t\t\"ů\": \"u\",\n\t\t\t\"ž\": \"z\",\n\t\t\t\"Č\": \"C\",\n\t\t\t\"Ď\": \"D\",\n\t\t\t\"Ě\": \"E\",\n\t\t\t\"Ň\": \"N\",\n\t\t\t\"Ř\": \"R\",\n\t\t\t\"Š\": \"S\",\n\t\t\t\"Ť\": \"T\",\n\t\t\t\"Ů\": \"U\",\n\t\t\t\"Ž\": \"Z\",\n\t\t\t\"ހ\": \"h\",\n\t\t\t\"ށ\": \"sh\",\n\t\t\t\"ނ\": \"n\",\n\t\t\t\"ރ\": \"r\",\n\t\t\t\"ބ\": \"b\",\n\t\t\t\"ޅ\": \"lh\",\n\t\t\t\"ކ\": \"k\",\n\t\t\t\"އ\": \"a\",\n\t\t\t\"ވ\": \"v\",\n\t\t\t\"މ\": \"m\",\n\t\t\t\"ފ\": \"f\",\n\t\t\t\"ދ\": \"dh\",\n\t\t\t\"ތ\": \"th\",\n\t\t\t\"ލ\": \"l\",\n\t\t\t\"ގ\": \"g\",\n\t\t\t\"ޏ\": \"gn\",\n\t\t\t\"ސ\": \"s\",\n\t\t\t\"ޑ\": \"d\",\n\t\t\t\"ޒ\": \"z\",\n\t\t\t\"ޓ\": \"t\",\n\t\t\t\"ޔ\": \"y\",\n\t\t\t\"ޕ\": \"p\",\n\t\t\t\"ޖ\": \"j\",\n\t\t\t\"ޗ\": \"ch\",\n\t\t\t\"ޘ\": \"tt\",\n\t\t\t\"ޙ\": \"hh\",\n\t\t\t\"ޚ\": \"kh\",\n\t\t\t\"ޛ\": \"th\",\n\t\t\t\"ޜ\": \"z\",\n\t\t\t\"ޝ\": \"sh\",\n\t\t\t\"ޞ\": \"s\",\n\t\t\t\"ޟ\": \"d\",\n\t\t\t\"ޠ\": \"t\",\n\t\t\t\"ޡ\": \"z\",\n\t\t\t\"ޢ\": \"a\",\n\t\t\t\"ޣ\": \"gh\",\n\t\t\t\"ޤ\": \"q\",\n\t\t\t\"ޥ\": \"w\",\n\t\t\t\"ަ\": \"a\",\n\t\t\t\"ާ\": \"aa\",\n\t\t\t\"ި\": \"i\",\n\t\t\t\"ީ\": \"ee\",\n\t\t\t\"ު\": \"u\",\n\t\t\t\"ޫ\": \"oo\",\n\t\t\t\"ެ\": \"e\",\n\t\t\t\"ޭ\": \"ey\",\n\t\t\t\"ޮ\": \"o\",\n\t\t\t\"ޯ\": \"oa\",\n\t\t\t\"ް\": \"\",\n\t\t\t\"ა\": \"a\",\n\t\t\t\"ბ\": \"b\",\n\t\t\t\"გ\": \"g\",\n\t\t\t\"დ\": \"d\",\n\t\t\t\"ე\": \"e\",\n\t\t\t\"ვ\": \"v\",\n\t\t\t\"ზ\": \"z\",\n\t\t\t\"თ\": \"t\",\n\t\t\t\"ი\": \"i\",\n\t\t\t\"კ\": \"k\",\n\t\t\t\"ლ\": \"l\",\n\t\t\t\"მ\": \"m\",\n\t\t\t\"ნ\": \"n\",\n\t\t\t\"ო\": \"o\",\n\t\t\t\"პ\": \"p\",\n\t\t\t\"ჟ\": \"zh\",\n\t\t\t\"რ\": \"r\",\n\t\t\t\"ს\": \"s\",\n\t\t\t\"ტ\": \"t\",\n\t\t\t\"უ\": \"u\",\n\t\t\t\"ფ\": \"p\",\n\t\t\t\"ქ\": \"k\",\n\t\t\t\"ღ\": \"gh\",\n\t\t\t\"ყ\": \"q\",\n\t\t\t\"შ\": \"sh\",\n\t\t\t\"ჩ\": \"ch\",\n\t\t\t\"ც\": \"ts\",\n\t\t\t\"ძ\": \"dz\",\n\t\t\t\"წ\": \"ts\",\n\t\t\t\"ჭ\": \"ch\",\n\t\t\t\"ხ\": \"kh\",\n\t\t\t\"ჯ\": \"j\",\n\t\t\t\"ჰ\": \"h\",\n\t\t\t\"α\": \"a\",\n\t\t\t\"β\": \"v\",\n\t\t\t\"γ\": \"g\",\n\t\t\t\"δ\": \"d\",\n\t\t\t\"ε\": \"e\",\n\t\t\t\"ζ\": \"z\",\n\t\t\t\"η\": \"i\",\n\t\t\t\"θ\": \"th\",\n\t\t\t\"ι\": \"i\",\n\t\t\t\"κ\": \"k\",\n\t\t\t\"λ\": \"l\",\n\t\t\t\"μ\": \"m\",\n\t\t\t\"ν\": \"n\",\n\t\t\t\"ξ\": \"ks\",\n\t\t\t\"ο\": \"o\",\n\t\t\t\"π\": \"p\",\n\t\t\t\"ρ\": \"r\",\n\t\t\t\"σ\": \"s\",\n\t\t\t\"τ\": \"t\",\n\t\t\t\"υ\": \"y\",\n\t\t\t\"φ\": \"f\",\n\t\t\t\"χ\": \"x\",\n\t\t\t\"ψ\": \"ps\",\n\t\t\t\"ω\": \"o\",\n\t\t\t\"ά\": \"a\",\n\t\t\t\"έ\": \"e\",\n\t\t\t\"ί\": \"i\",\n\t\t\t\"ό\": \"o\",\n\t\t\t\"ύ\": \"y\",\n\t\t\t\"ή\": \"i\",\n\t\t\t\"ώ\": \"o\",\n\t\t\t\"ς\": \"s\",\n\t\t\t\"ϊ\": \"i\",\n\t\t\t\"ΰ\": \"y\",\n\t\t\t\"ϋ\": \"y\",\n\t\t\t\"ΐ\": \"i\",\n\t\t\t\"Α\": \"A\",\n\t\t\t\"Β\": \"B\",\n\t\t\t\"Γ\": \"G\",\n\t\t\t\"Δ\": \"D\",\n\t\t\t\"Ε\": \"E\",\n\t\t\t\"Ζ\": \"Z\",\n\t\t\t\"Η\": \"I\",\n\t\t\t\"Θ\": \"TH\",\n\t\t\t\"Ι\": \"I\",\n\t\t\t\"Κ\": \"K\",\n\t\t\t\"Λ\": \"L\",\n\t\t\t\"Μ\": \"M\",\n\t\t\t\"Ν\": \"N\",\n\t\t\t\"Ξ\": \"KS\",\n\t\t\t\"Ο\": \"O\",\n\t\t\t\"Π\": \"P\",\n\t\t\t\"Ρ\": \"R\",\n\t\t\t\"Σ\": \"S\",\n\t\t\t\"Τ\": \"T\",\n\t\t\t\"Υ\": \"Y\",\n\t\t\t\"Φ\": \"F\",\n\t\t\t\"Χ\": \"X\",\n\t\t\t\"Ψ\": \"PS\",\n\t\t\t\"Ω\": \"O\",\n\t\t\t\"Ά\": \"A\",\n\t\t\t\"Έ\": \"E\",\n\t\t\t\"Ί\": \"I\",\n\t\t\t\"Ό\": \"O\",\n\t\t\t\"Ύ\": \"Y\",\n\t\t\t\"Ή\": \"I\",\n\t\t\t\"Ώ\": \"O\",\n\t\t\t\"Ϊ\": \"I\",\n\t\t\t\"Ϋ\": \"Y\",\n\t\t\t\"ā\": \"a\",\n\t\t\t\"ē\": \"e\",\n\t\t\t\"ģ\": \"g\",\n\t\t\t\"ī\": \"i\",\n\t\t\t\"ķ\": \"k\",\n\t\t\t\"ļ\": \"l\",\n\t\t\t\"ņ\": \"n\",\n\t\t\t\"ū\": \"u\",\n\t\t\t\"Ā\": \"A\",\n\t\t\t\"Ē\": \"E\",\n\t\t\t\"Ģ\": \"G\",\n\t\t\t\"Ī\": \"I\",\n\t\t\t\"Ķ\": \"k\",\n\t\t\t\"Ļ\": \"L\",\n\t\t\t\"Ņ\": \"N\",\n\t\t\t\"Ū\": \"U\",\n\t\t\t\"Ќ\": \"Kj\",\n\t\t\t\"ќ\": \"kj\",\n\t\t\t\"Љ\": \"Lj\",\n\t\t\t\"љ\": \"lj\",\n\t\t\t\"Њ\": \"Nj\",\n\t\t\t\"њ\": \"nj\",\n\t\t\t\"Тс\": \"Ts\",\n\t\t\t\"тс\": \"ts\",\n\t\t\t\"ą\": \"a\",\n\t\t\t\"ć\": \"c\",\n\t\t\t\"ę\": \"e\",\n\t\t\t\"ł\": \"l\",\n\t\t\t\"ń\": \"n\",\n\t\t\t\"ś\": \"s\",\n\t\t\t\"ź\": \"z\",\n\t\t\t\"ż\": \"z\",\n\t\t\t\"Ą\": \"A\",\n\t\t\t\"Ć\": \"C\",\n\t\t\t\"Ę\": \"E\",\n\t\t\t\"Ł\": \"L\",\n\t\t\t\"Ń\": \"N\",\n\t\t\t\"Ś\": \"S\",\n\t\t\t\"Ź\": \"Z\",\n\t\t\t\"Ż\": \"Z\",\n\t\t\t\"Є\": \"Ye\",\n\t\t\t\"І\": \"I\",\n\t\t\t\"Ї\": \"Yi\",\n\t\t\t\"Ґ\": \"G\",\n\t\t\t\"є\": \"ye\",\n\t\t\t\"і\": \"i\",\n\t\t\t\"ї\": \"yi\",\n\t\t\t\"ґ\": \"g\",\n\t\t\t\"ă\": \"a\",\n\t\t\t\"Ă\": \"A\",\n\t\t\t\"ș\": \"s\",\n\t\t\t\"Ș\": \"S\",\n\t\t\t\"ț\": \"t\",\n\t\t\t\"Ț\": \"T\",\n\t\t\t\"ţ\": \"t\",\n\t\t\t\"Ţ\": \"T\",\n\t\t\t\"а\": \"a\",\n\t\t\t\"б\": \"b\",\n\t\t\t\"в\": \"v\",\n\t\t\t\"г\": \"g\",\n\t\t\t\"д\": \"d\",\n\t\t\t\"е\": \"e\",\n\t\t\t\"ё\": \"yo\",\n\t\t\t\"ж\": \"zh\",\n\t\t\t\"з\": \"z\",\n\t\t\t\"и\": \"i\",\n\t\t\t\"й\": \"i\",\n\t\t\t\"к\": \"k\",\n\t\t\t\"л\": \"l\",\n\t\t\t\"м\": \"m\",\n\t\t\t\"н\": \"n\",\n\t\t\t\"о\": \"o\",\n\t\t\t\"п\": \"p\",\n\t\t\t\"р\": \"r\",\n\t\t\t\"с\": \"s\",\n\t\t\t\"т\": \"t\",\n\t\t\t\"у\": \"u\",\n\t\t\t\"ф\": \"f\",\n\t\t\t\"х\": \"kh\",\n\t\t\t\"ц\": \"c\",\n\t\t\t\"ч\": \"ch\",\n\t\t\t\"ш\": \"sh\",\n\t\t\t\"щ\": \"sh\",\n\t\t\t\"ъ\": \"\",\n\t\t\t\"ы\": \"y\",\n\t\t\t\"ь\": \"\",\n\t\t\t\"э\": \"e\",\n\t\t\t\"ю\": \"yu\",\n\t\t\t\"я\": \"ya\",\n\t\t\t\"А\": \"A\",\n\t\t\t\"Б\": \"B\",\n\t\t\t\"В\": \"V\",\n\t\t\t\"Г\": \"G\",\n\t\t\t\"Д\": \"D\",\n\t\t\t\"Е\": \"E\",\n\t\t\t\"Ё\": \"Yo\",\n\t\t\t\"Ж\": \"Zh\",\n\t\t\t\"З\": \"Z\",\n\t\t\t\"И\": \"I\",\n\t\t\t\"Й\": \"I\",\n\t\t\t\"К\": \"K\",\n\t\t\t\"Л\": \"L\",\n\t\t\t\"М\": \"M\",\n\t\t\t\"Н\": \"N\",\n\t\t\t\"О\": \"O\",\n\t\t\t\"П\": \"P\",\n\t\t\t\"Р\": \"R\",\n\t\t\t\"С\": \"S\",\n\t\t\t\"Т\": \"T\",\n\t\t\t\"У\": \"U\",\n\t\t\t\"Ф\": \"F\",\n\t\t\t\"Х\": \"Kh\",\n\t\t\t\"Ц\": \"C\",\n\t\t\t\"Ч\": \"Ch\",\n\t\t\t\"Ш\": \"Sh\",\n\t\t\t\"Щ\": \"Sh\",\n\t\t\t\"Ъ\": \"\",\n\t\t\t\"Ы\": \"Y\",\n\t\t\t\"Ь\": \"\",\n\t\t\t\"Э\": \"E\",\n\t\t\t\"Ю\": \"Yu\",\n\t\t\t\"Я\": \"Ya\",\n\t\t\t\"ђ\": \"dj\",\n\t\t\t\"ј\": \"j\",\n\t\t\t\"ћ\": \"c\",\n\t\t\t\"џ\": \"dz\",\n\t\t\t\"Ђ\": \"Dj\",\n\t\t\t\"Ј\": \"j\",\n\t\t\t\"Ћ\": \"C\",\n\t\t\t\"Џ\": \"Dz\",\n\t\t\t\"ľ\": \"l\",\n\t\t\t\"ĺ\": \"l\",\n\t\t\t\"ŕ\": \"r\",\n\t\t\t\"Ľ\": \"L\",\n\t\t\t\"Ĺ\": \"L\",\n\t\t\t\"Ŕ\": \"R\",\n\t\t\t\"ş\": \"s\",\n\t\t\t\"Ş\": \"S\",\n\t\t\t\"ı\": \"i\",\n\t\t\t\"İ\": \"I\",\n\t\t\t\"ğ\": \"g\",\n\t\t\t\"Ğ\": \"G\",\n\t\t\t\"ả\": \"a\",\n\t\t\t\"Ả\": \"A\",\n\t\t\t\"ẳ\": \"a\",\n\t\t\t\"Ẳ\": \"A\",\n\t\t\t\"ẩ\": \"a\",\n\t\t\t\"Ẩ\": \"A\",\n\t\t\t\"đ\": \"d\",\n\t\t\t\"Đ\": \"D\",\n\t\t\t\"ẹ\": \"e\",\n\t\t\t\"Ẹ\": \"E\",\n\t\t\t\"ẽ\": \"e\",\n\t\t\t\"Ẽ\": \"E\",\n\t\t\t\"ẻ\": \"e\",\n\t\t\t\"Ẻ\": \"E\",\n\t\t\t\"ế\": \"e\",\n\t\t\t\"Ế\": \"E\",\n\t\t\t\"ề\": \"e\",\n\t\t\t\"Ề\": \"E\",\n\t\t\t\"ệ\": \"e\",\n\t\t\t\"Ệ\": \"E\",\n\t\t\t\"ễ\": \"e\",\n\t\t\t\"Ễ\": \"E\",\n\t\t\t\"ể\": \"e\",\n\t\t\t\"Ể\": \"E\",\n\t\t\t\"ỏ\": \"o\",\n\t\t\t\"ọ\": \"o\",\n\t\t\t\"Ọ\": \"o\",\n\t\t\t\"ố\": \"o\",\n\t\t\t\"Ố\": \"O\",\n\t\t\t\"ồ\": \"o\",\n\t\t\t\"Ồ\": \"O\",\n\t\t\t\"ổ\": \"o\",\n\t\t\t\"Ổ\": \"O\",\n\t\t\t\"ộ\": \"o\",\n\t\t\t\"Ộ\": \"O\",\n\t\t\t\"ỗ\": \"o\",\n\t\t\t\"Ỗ\": \"O\",\n\t\t\t\"ơ\": \"o\",\n\t\t\t\"Ơ\": \"O\",\n\t\t\t\"ớ\": \"o\",\n\t\t\t\"Ớ\": \"O\",\n\t\t\t\"ờ\": \"o\",\n\t\t\t\"Ờ\": \"O\",\n\t\t\t\"ợ\": \"o\",\n\t\t\t\"Ợ\": \"O\",\n\t\t\t\"ỡ\": \"o\",\n\t\t\t\"Ỡ\": \"O\",\n\t\t\t\"Ở\": \"o\",\n\t\t\t\"ở\": \"o\",\n\t\t\t\"ị\": \"i\",\n\t\t\t\"Ị\": \"I\",\n\t\t\t\"ĩ\": \"i\",\n\t\t\t\"Ĩ\": \"I\",\n\t\t\t\"ỉ\": \"i\",\n\t\t\t\"Ỉ\": \"i\",\n\t\t\t\"ủ\": \"u\",\n\t\t\t\"Ủ\": \"U\",\n\t\t\t\"ụ\": \"u\",\n\t\t\t\"Ụ\": \"U\",\n\t\t\t\"ũ\": \"u\",\n\t\t\t\"Ũ\": \"U\",\n\t\t\t\"ư\": \"u\",\n\t\t\t\"Ư\": \"U\",\n\t\t\t\"ứ\": \"u\",\n\t\t\t\"Ứ\": \"U\",\n\t\t\t\"ừ\": \"u\",\n\t\t\t\"Ừ\": \"U\",\n\t\t\t\"ự\": \"u\",\n\t\t\t\"Ự\": \"U\",\n\t\t\t\"ữ\": \"u\",\n\t\t\t\"Ữ\": \"U\",\n\t\t\t\"ử\": \"u\",\n\t\t\t\"Ử\": \"ư\",\n\t\t\t\"ỷ\": \"y\",\n\t\t\t\"Ỷ\": \"y\",\n\t\t\t\"ỳ\": \"y\",\n\t\t\t\"Ỳ\": \"Y\",\n\t\t\t\"ỵ\": \"y\",\n\t\t\t\"Ỵ\": \"Y\",\n\t\t\t\"ỹ\": \"y\",\n\t\t\t\"Ỹ\": \"Y\",\n\t\t\t\"ạ\": \"a\",\n\t\t\t\"Ạ\": \"A\",\n\t\t\t\"ấ\": \"a\",\n\t\t\t\"Ấ\": \"A\",\n\t\t\t\"ầ\": \"a\",\n\t\t\t\"Ầ\": \"A\",\n\t\t\t\"ậ\": \"a\",\n\t\t\t\"Ậ\": \"A\",\n\t\t\t\"ẫ\": \"a\",\n\t\t\t\"Ẫ\": \"A\",\n\t\t\t\"ắ\": \"a\",\n\t\t\t\"Ắ\": \"A\",\n\t\t\t\"ằ\": \"a\",\n\t\t\t\"Ằ\": \"A\",\n\t\t\t\"ặ\": \"a\",\n\t\t\t\"Ặ\": \"A\",\n\t\t\t\"ẵ\": \"a\",\n\t\t\t\"Ẵ\": \"A\",\n\t\t\t\"⓪\": \"0\",\n\t\t\t\"①\": \"1\",\n\t\t\t\"②\": \"2\",\n\t\t\t\"③\": \"3\",\n\t\t\t\"④\": \"4\",\n\t\t\t\"⑤\": \"5\",\n\t\t\t\"⑥\": \"6\",\n\t\t\t\"⑦\": \"7\",\n\t\t\t\"⑧\": \"8\",\n\t\t\t\"⑨\": \"9\",\n\t\t\t\"⑩\": \"10\",\n\t\t\t\"⑪\": \"11\",\n\t\t\t\"⑫\": \"12\",\n\t\t\t\"⑬\": \"13\",\n\t\t\t\"⑭\": \"14\",\n\t\t\t\"⑮\": \"15\",\n\t\t\t\"⑯\": \"16\",\n\t\t\t\"⑰\": \"17\",\n\t\t\t\"⑱\": \"18\",\n\t\t\t\"⑲\": \"18\",\n\t\t\t\"⑳\": \"18\",\n\t\t\t\"⓵\": \"1\",\n\t\t\t\"⓶\": \"2\",\n\t\t\t\"⓷\": \"3\",\n\t\t\t\"⓸\": \"4\",\n\t\t\t\"⓹\": \"5\",\n\t\t\t\"⓺\": \"6\",\n\t\t\t\"⓻\": \"7\",\n\t\t\t\"⓼\": \"8\",\n\t\t\t\"⓽\": \"9\",\n\t\t\t\"⓾\": \"10\",\n\t\t\t\"⓿\": \"0\",\n\t\t\t\"⓫\": \"11\",\n\t\t\t\"⓬\": \"12\",\n\t\t\t\"⓭\": \"13\",\n\t\t\t\"⓮\": \"14\",\n\t\t\t\"⓯\": \"15\",\n\t\t\t\"⓰\": \"16\",\n\t\t\t\"⓱\": \"17\",\n\t\t\t\"⓲\": \"18\",\n\t\t\t\"⓳\": \"19\",\n\t\t\t\"⓴\": \"20\",\n\t\t\t\"Ⓐ\": \"A\",\n\t\t\t\"Ⓑ\": \"B\",\n\t\t\t\"Ⓒ\": \"C\",\n\t\t\t\"Ⓓ\": \"D\",\n\t\t\t\"Ⓔ\": \"E\",\n\t\t\t\"Ⓕ\": \"F\",\n\t\t\t\"Ⓖ\": \"G\",\n\t\t\t\"Ⓗ\": \"H\",\n\t\t\t\"Ⓘ\": \"I\",\n\t\t\t\"Ⓙ\": \"J\",\n\t\t\t\"Ⓚ\": \"K\",\n\t\t\t\"Ⓛ\": \"L\",\n\t\t\t\"Ⓜ\": \"M\",\n\t\t\t\"Ⓝ\": \"N\",\n\t\t\t\"Ⓞ\": \"O\",\n\t\t\t\"Ⓟ\": \"P\",\n\t\t\t\"Ⓠ\": \"Q\",\n\t\t\t\"Ⓡ\": \"R\",\n\t\t\t\"Ⓢ\": \"S\",\n\t\t\t\"Ⓣ\": \"T\",\n\t\t\t\"Ⓤ\": \"U\",\n\t\t\t\"Ⓥ\": \"V\",\n\t\t\t\"Ⓦ\": \"W\",\n\t\t\t\"Ⓧ\": \"X\",\n\t\t\t\"Ⓨ\": \"Y\",\n\t\t\t\"Ⓩ\": \"Z\",\n\t\t\t\"ⓐ\": \"a\",\n\t\t\t\"ⓑ\": \"b\",\n\t\t\t\"ⓒ\": \"c\",\n\t\t\t\"ⓓ\": \"d\",\n\t\t\t\"ⓔ\": \"e\",\n\t\t\t\"ⓕ\": \"f\",\n\t\t\t\"ⓖ\": \"g\",\n\t\t\t\"ⓗ\": \"h\",\n\t\t\t\"ⓘ\": \"i\",\n\t\t\t\"ⓙ\": \"j\",\n\t\t\t\"ⓚ\": \"k\",\n\t\t\t\"ⓛ\": \"l\",\n\t\t\t\"ⓜ\": \"m\",\n\t\t\t\"ⓝ\": \"n\",\n\t\t\t\"ⓞ\": \"o\",\n\t\t\t\"ⓟ\": \"p\",\n\t\t\t\"ⓠ\": \"q\",\n\t\t\t\"ⓡ\": \"r\",\n\t\t\t\"ⓢ\": \"s\",\n\t\t\t\"ⓣ\": \"t\",\n\t\t\t\"ⓤ\": \"u\",\n\t\t\t\"ⓦ\": \"v\",\n\t\t\t\"ⓥ\": \"w\",\n\t\t\t\"ⓧ\": \"x\",\n\t\t\t\"ⓨ\": \"y\",\n\t\t\t\"ⓩ\": \"z\",\n\t\t\t\"“\": \"\\\"\",\n\t\t\t\"”\": \"\\\"\",\n\t\t\t\"‘\": \"'\",\n\t\t\t\"’\": \"'\",\n\t\t\t\"∂\": \"d\",\n\t\t\t\"ƒ\": \"f\",\n\t\t\t\"™\": \"(TM)\",\n\t\t\t\"©\": \"(C)\",\n\t\t\t\"œ\": \"oe\",\n\t\t\t\"Œ\": \"OE\",\n\t\t\t\"®\": \"(R)\",\n\t\t\t\"†\": \"+\",\n\t\t\t\"℠\": \"(SM)\",\n\t\t\t\"…\": \"...\",\n\t\t\t\"˚\": \"o\",\n\t\t\t\"º\": \"o\",\n\t\t\t\"ª\": \"a\",\n\t\t\t\"•\": \"*\",\n\t\t\t\"၊\": \",\",\n\t\t\t\"။\": \".\",\n\t\t\t\"$\": \"USD\",\n\t\t\t\"€\": \"EUR\",\n\t\t\t\"₢\": \"BRN\",\n\t\t\t\"₣\": \"FRF\",\n\t\t\t\"£\": \"GBP\",\n\t\t\t\"₤\": \"ITL\",\n\t\t\t\"₦\": \"NGN\",\n\t\t\t\"₧\": \"ESP\",\n\t\t\t\"₩\": \"KRW\",\n\t\t\t\"₪\": \"ILS\",\n\t\t\t\"₫\": \"VND\",\n\t\t\t\"₭\": \"LAK\",\n\t\t\t\"₮\": \"MNT\",\n\t\t\t\"₯\": \"GRD\",\n\t\t\t\"₱\": \"ARS\",\n\t\t\t\"₲\": \"PYG\",\n\t\t\t\"₳\": \"ARA\",\n\t\t\t\"₴\": \"UAH\",\n\t\t\t\"₵\": \"GHS\",\n\t\t\t\"¢\": \"cent\",\n\t\t\t\"¥\": \"CNY\",\n\t\t\t\"元\": \"CNY\",\n\t\t\t\"円\": \"YEN\",\n\t\t\t\"﷼\": \"IRR\",\n\t\t\t\"₠\": \"EWE\",\n\t\t\t\"฿\": \"THB\",\n\t\t\t\"₨\": \"INR\",\n\t\t\t\"₹\": \"INR\",\n\t\t\t\"₰\": \"PF\",\n\t\t\t\"₺\": \"TRY\",\n\t\t\t\"؋\": \"AFN\",\n\t\t\t\"₼\": \"AZN\",\n\t\t\t\"лв\": \"BGN\",\n\t\t\t\"៛\": \"KHR\",\n\t\t\t\"₡\": \"CRC\",\n\t\t\t\"₸\": \"KZT\",\n\t\t\t\"ден\": \"MKD\",\n\t\t\t\"zł\": \"PLN\",\n\t\t\t\"₽\": \"RUB\",\n\t\t\t\"₾\": \"GEL\"\n\t\t};\n\t\t/**\n\t\t* special look ahead character array\n\t\t* These characters form with consonants to become 'single'/consonant combo\n\t\t* @type [Array]\n\t\t*/\n\t\tvar lookAheadCharArray = [\"်\", \"ް\"];\n\t\t/**\n\t\t* diatricMap for languages where transliteration changes entirely as more diatrics are added\n\t\t* @type {Object}\n\t\t*/\n\t\tvar diatricMap = {\n\t\t\t\"ာ\": \"a\",\n\t\t\t\"ါ\": \"a\",\n\t\t\t\"ေ\": \"e\",\n\t\t\t\"ဲ\": \"e\",\n\t\t\t\"ိ\": \"i\",\n\t\t\t\"ီ\": \"i\",\n\t\t\t\"ို\": \"o\",\n\t\t\t\"ု\": \"u\",\n\t\t\t\"ူ\": \"u\",\n\t\t\t\"ေါင်\": \"aung\",\n\t\t\t\"ော\": \"aw\",\n\t\t\t\"ော်\": \"aw\",\n\t\t\t\"ေါ\": \"aw\",\n\t\t\t\"ေါ်\": \"aw\",\n\t\t\t\"်\": \"်\",\n\t\t\t\"က်\": \"et\",\n\t\t\t\"ိုက်\": \"aik\",\n\t\t\t\"ောက်\": \"auk\",\n\t\t\t\"င်\": \"in\",\n\t\t\t\"ိုင်\": \"aing\",\n\t\t\t\"ောင်\": \"aung\",\n\t\t\t\"စ်\": \"it\",\n\t\t\t\"ည်\": \"i\",\n\t\t\t\"တ်\": \"at\",\n\t\t\t\"ိတ်\": \"eik\",\n\t\t\t\"ုတ်\": \"ok\",\n\t\t\t\"ွတ်\": \"ut\",\n\t\t\t\"ေတ်\": \"it\",\n\t\t\t\"ဒ်\": \"d\",\n\t\t\t\"ိုဒ်\": \"ok\",\n\t\t\t\"ုဒ်\": \"ait\",\n\t\t\t\"န်\": \"an\",\n\t\t\t\"ာန်\": \"an\",\n\t\t\t\"ိန်\": \"ein\",\n\t\t\t\"ုန်\": \"on\",\n\t\t\t\"ွန်\": \"un\",\n\t\t\t\"ပ်\": \"at\",\n\t\t\t\"ိပ်\": \"eik\",\n\t\t\t\"ုပ်\": \"ok\",\n\t\t\t\"ွပ်\": \"ut\",\n\t\t\t\"န်ုပ်\": \"nub\",\n\t\t\t\"မ်\": \"an\",\n\t\t\t\"ိမ်\": \"ein\",\n\t\t\t\"ုမ်\": \"on\",\n\t\t\t\"ွမ်\": \"un\",\n\t\t\t\"ယ်\": \"e\",\n\t\t\t\"ိုလ်\": \"ol\",\n\t\t\t\"ဉ်\": \"in\",\n\t\t\t\"ံ\": \"an\",\n\t\t\t\"ိံ\": \"ein\",\n\t\t\t\"ုံ\": \"on\",\n\t\t\t\"ައް\": \"ah\",\n\t\t\t\"ަށް\": \"ah\"\n\t\t};\n\t\t/**\n\t\t* langCharMap language specific characters translations\n\t\t* @type {Object}\n\t\t*/\n\t\tvar langCharMap = {\n\t\t\t\"en\": {},\n\t\t\t\"az\": {\n\t\t\t\t\"ç\": \"c\",\n\t\t\t\t\"ə\": \"e\",\n\t\t\t\t\"ğ\": \"g\",\n\t\t\t\t\"ı\": \"i\",\n\t\t\t\t\"ö\": \"o\",\n\t\t\t\t\"ş\": \"s\",\n\t\t\t\t\"ü\": \"u\",\n\t\t\t\t\"Ç\": \"C\",\n\t\t\t\t\"Ə\": \"E\",\n\t\t\t\t\"Ğ\": \"G\",\n\t\t\t\t\"İ\": \"I\",\n\t\t\t\t\"Ö\": \"O\",\n\t\t\t\t\"Ş\": \"S\",\n\t\t\t\t\"Ü\": \"U\"\n\t\t\t},\n\t\t\t\"cs\": {\n\t\t\t\t\"č\": \"c\",\n\t\t\t\t\"ď\": \"d\",\n\t\t\t\t\"ě\": \"e\",\n\t\t\t\t\"ň\": \"n\",\n\t\t\t\t\"ř\": \"r\",\n\t\t\t\t\"š\": \"s\",\n\t\t\t\t\"ť\": \"t\",\n\t\t\t\t\"ů\": \"u\",\n\t\t\t\t\"ž\": \"z\",\n\t\t\t\t\"Č\": \"C\",\n\t\t\t\t\"Ď\": \"D\",\n\t\t\t\t\"Ě\": \"E\",\n\t\t\t\t\"Ň\": \"N\",\n\t\t\t\t\"Ř\": \"R\",\n\t\t\t\t\"Š\": \"S\",\n\t\t\t\t\"Ť\": \"T\",\n\t\t\t\t\"Ů\": \"U\",\n\t\t\t\t\"Ž\": \"Z\"\n\t\t\t},\n\t\t\t\"fi\": {\n\t\t\t\t\"ä\": \"a\",\n\t\t\t\t\"Ä\": \"A\",\n\t\t\t\t\"ö\": \"o\",\n\t\t\t\t\"Ö\": \"O\"\n\t\t\t},\n\t\t\t\"hu\": {\n\t\t\t\t\"ä\": \"a\",\n\t\t\t\t\"Ä\": \"A\",\n\t\t\t\t\"ö\": \"o\",\n\t\t\t\t\"Ö\": \"O\",\n\t\t\t\t\"ü\": \"u\",\n\t\t\t\t\"Ü\": \"U\",\n\t\t\t\t\"ű\": \"u\",\n\t\t\t\t\"Ű\": \"U\"\n\t\t\t},\n\t\t\t\"lt\": {\n\t\t\t\t\"ą\": \"a\",\n\t\t\t\t\"č\": \"c\",\n\t\t\t\t\"ę\": \"e\",\n\t\t\t\t\"ė\": \"e\",\n\t\t\t\t\"į\": \"i\",\n\t\t\t\t\"š\": \"s\",\n\t\t\t\t\"ų\": \"u\",\n\t\t\t\t\"ū\": \"u\",\n\t\t\t\t\"ž\": \"z\",\n\t\t\t\t\"Ą\": \"A\",\n\t\t\t\t\"Č\": \"C\",\n\t\t\t\t\"Ę\": \"E\",\n\t\t\t\t\"Ė\": \"E\",\n\t\t\t\t\"Į\": \"I\",\n\t\t\t\t\"Š\": \"S\",\n\t\t\t\t\"Ų\": \"U\",\n\t\t\t\t\"Ū\": \"U\"\n\t\t\t},\n\t\t\t\"lv\": {\n\t\t\t\t\"ā\": \"a\",\n\t\t\t\t\"č\": \"c\",\n\t\t\t\t\"ē\": \"e\",\n\t\t\t\t\"ģ\": \"g\",\n\t\t\t\t\"ī\": \"i\",\n\t\t\t\t\"ķ\": \"k\",\n\t\t\t\t\"ļ\": \"l\",\n\t\t\t\t\"ņ\": \"n\",\n\t\t\t\t\"š\": \"s\",\n\t\t\t\t\"ū\": \"u\",\n\t\t\t\t\"ž\": \"z\",\n\t\t\t\t\"Ā\": \"A\",\n\t\t\t\t\"Č\": \"C\",\n\t\t\t\t\"Ē\": \"E\",\n\t\t\t\t\"Ģ\": \"G\",\n\t\t\t\t\"Ī\": \"i\",\n\t\t\t\t\"Ķ\": \"k\",\n\t\t\t\t\"Ļ\": \"L\",\n\t\t\t\t\"Ņ\": \"N\",\n\t\t\t\t\"Š\": \"S\",\n\t\t\t\t\"Ū\": \"u\",\n\t\t\t\t\"Ž\": \"Z\"\n\t\t\t},\n\t\t\t\"pl\": {\n\t\t\t\t\"ą\": \"a\",\n\t\t\t\t\"ć\": \"c\",\n\t\t\t\t\"ę\": \"e\",\n\t\t\t\t\"ł\": \"l\",\n\t\t\t\t\"ń\": \"n\",\n\t\t\t\t\"ó\": \"o\",\n\t\t\t\t\"ś\": \"s\",\n\t\t\t\t\"ź\": \"z\",\n\t\t\t\t\"ż\": \"z\",\n\t\t\t\t\"Ą\": \"A\",\n\t\t\t\t\"Ć\": \"C\",\n\t\t\t\t\"Ę\": \"e\",\n\t\t\t\t\"Ł\": \"L\",\n\t\t\t\t\"Ń\": \"N\",\n\t\t\t\t\"Ó\": \"O\",\n\t\t\t\t\"Ś\": \"S\",\n\t\t\t\t\"Ź\": \"Z\",\n\t\t\t\t\"Ż\": \"Z\"\n\t\t\t},\n\t\t\t\"sv\": {\n\t\t\t\t\"ä\": \"a\",\n\t\t\t\t\"Ä\": \"A\",\n\t\t\t\t\"ö\": \"o\",\n\t\t\t\t\"Ö\": \"O\"\n\t\t\t},\n\t\t\t\"sk\": {\n\t\t\t\t\"ä\": \"a\",\n\t\t\t\t\"Ä\": \"A\"\n\t\t\t},\n\t\t\t\"sr\": {\n\t\t\t\t\"љ\": \"lj\",\n\t\t\t\t\"њ\": \"nj\",\n\t\t\t\t\"Љ\": \"Lj\",\n\t\t\t\t\"Њ\": \"Nj\",\n\t\t\t\t\"đ\": \"dj\",\n\t\t\t\t\"Đ\": \"Dj\"\n\t\t\t},\n\t\t\t\"tr\": {\n\t\t\t\t\"Ü\": \"U\",\n\t\t\t\t\"Ö\": \"O\",\n\t\t\t\t\"ü\": \"u\",\n\t\t\t\t\"ö\": \"o\"\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t* symbolMap language specific symbol translations\n\t\t* translations must be transliterated already\n\t\t* @type {Object}\n\t\t*/\n\t\tvar symbolMap = {\n\t\t\t\"ar\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"la-nihaya\",\n\t\t\t\t\"♥\": \"hob\",\n\t\t\t\t\"&\": \"wa\",\n\t\t\t\t\"|\": \"aw\",\n\t\t\t\t\"<\": \"aqal-men\",\n\t\t\t\t\">\": \"akbar-men\",\n\t\t\t\t\"∑\": \"majmou\",\n\t\t\t\t\"¤\": \"omla\"\n\t\t\t},\n\t\t\t\"az\": {},\n\t\t\t\"ca\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"infinit\",\n\t\t\t\t\"♥\": \"amor\",\n\t\t\t\t\"&\": \"i\",\n\t\t\t\t\"|\": \"o\",\n\t\t\t\t\"<\": \"menys que\",\n\t\t\t\t\">\": \"mes que\",\n\t\t\t\t\"∑\": \"suma dels\",\n\t\t\t\t\"¤\": \"moneda\"\n\t\t\t},\n\t\t\t\"cs\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"nekonecno\",\n\t\t\t\t\"♥\": \"laska\",\n\t\t\t\t\"&\": \"a\",\n\t\t\t\t\"|\": \"nebo\",\n\t\t\t\t\"<\": \"mensi nez\",\n\t\t\t\t\">\": \"vetsi nez\",\n\t\t\t\t\"∑\": \"soucet\",\n\t\t\t\t\"¤\": \"mena\"\n\t\t\t},\n\t\t\t\"de\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"unendlich\",\n\t\t\t\t\"♥\": \"Liebe\",\n\t\t\t\t\"&\": \"und\",\n\t\t\t\t\"|\": \"oder\",\n\t\t\t\t\"<\": \"kleiner als\",\n\t\t\t\t\">\": \"groesser als\",\n\t\t\t\t\"∑\": \"Summe von\",\n\t\t\t\t\"¤\": \"Waehrung\"\n\t\t\t},\n\t\t\t\"dv\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"kolunulaa\",\n\t\t\t\t\"♥\": \"loabi\",\n\t\t\t\t\"&\": \"aai\",\n\t\t\t\t\"|\": \"noonee\",\n\t\t\t\t\"<\": \"ah vure kuda\",\n\t\t\t\t\">\": \"ah vure bodu\",\n\t\t\t\t\"∑\": \"jumula\",\n\t\t\t\t\"¤\": \"faisaa\"\n\t\t\t},\n\t\t\t\"en\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"infinity\",\n\t\t\t\t\"♥\": \"love\",\n\t\t\t\t\"&\": \"and\",\n\t\t\t\t\"|\": \"or\",\n\t\t\t\t\"<\": \"less than\",\n\t\t\t\t\">\": \"greater than\",\n\t\t\t\t\"∑\": \"sum\",\n\t\t\t\t\"¤\": \"currency\"\n\t\t\t},\n\t\t\t\"es\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"infinito\",\n\t\t\t\t\"♥\": \"amor\",\n\t\t\t\t\"&\": \"y\",\n\t\t\t\t\"|\": \"u\",\n\t\t\t\t\"<\": \"menos que\",\n\t\t\t\t\">\": \"mas que\",\n\t\t\t\t\"∑\": \"suma de los\",\n\t\t\t\t\"¤\": \"moneda\"\n\t\t\t},\n\t\t\t\"fa\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"bi-nahayat\",\n\t\t\t\t\"♥\": \"eshgh\",\n\t\t\t\t\"&\": \"va\",\n\t\t\t\t\"|\": \"ya\",\n\t\t\t\t\"<\": \"kamtar-az\",\n\t\t\t\t\">\": \"bishtar-az\",\n\t\t\t\t\"∑\": \"majmooe\",\n\t\t\t\t\"¤\": \"vahed\"\n\t\t\t},\n\t\t\t\"fi\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"aarettomyys\",\n\t\t\t\t\"♥\": \"rakkaus\",\n\t\t\t\t\"&\": \"ja\",\n\t\t\t\t\"|\": \"tai\",\n\t\t\t\t\"<\": \"pienempi kuin\",\n\t\t\t\t\">\": \"suurempi kuin\",\n\t\t\t\t\"∑\": \"summa\",\n\t\t\t\t\"¤\": \"valuutta\"\n\t\t\t},\n\t\t\t\"fr\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"infiniment\",\n\t\t\t\t\"♥\": \"Amour\",\n\t\t\t\t\"&\": \"et\",\n\t\t\t\t\"|\": \"ou\",\n\t\t\t\t\"<\": \"moins que\",\n\t\t\t\t\">\": \"superieure a\",\n\t\t\t\t\"∑\": \"somme des\",\n\t\t\t\t\"¤\": \"monnaie\"\n\t\t\t},\n\t\t\t\"ge\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"usasruloba\",\n\t\t\t\t\"♥\": \"siqvaruli\",\n\t\t\t\t\"&\": \"da\",\n\t\t\t\t\"|\": \"an\",\n\t\t\t\t\"<\": \"naklebi\",\n\t\t\t\t\">\": \"meti\",\n\t\t\t\t\"∑\": \"jami\",\n\t\t\t\t\"¤\": \"valuta\"\n\t\t\t},\n\t\t\t\"gr\": {},\n\t\t\t\"hu\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"vegtelen\",\n\t\t\t\t\"♥\": \"szerelem\",\n\t\t\t\t\"&\": \"es\",\n\t\t\t\t\"|\": \"vagy\",\n\t\t\t\t\"<\": \"kisebb mint\",\n\t\t\t\t\">\": \"nagyobb mint\",\n\t\t\t\t\"∑\": \"szumma\",\n\t\t\t\t\"¤\": \"penznem\"\n\t\t\t},\n\t\t\t\"it\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"infinito\",\n\t\t\t\t\"♥\": \"amore\",\n\t\t\t\t\"&\": \"e\",\n\t\t\t\t\"|\": \"o\",\n\t\t\t\t\"<\": \"minore di\",\n\t\t\t\t\">\": \"maggiore di\",\n\t\t\t\t\"∑\": \"somma\",\n\t\t\t\t\"¤\": \"moneta\"\n\t\t\t},\n\t\t\t\"lt\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"begalybe\",\n\t\t\t\t\"♥\": \"meile\",\n\t\t\t\t\"&\": \"ir\",\n\t\t\t\t\"|\": \"ar\",\n\t\t\t\t\"<\": \"maziau nei\",\n\t\t\t\t\">\": \"daugiau nei\",\n\t\t\t\t\"∑\": \"suma\",\n\t\t\t\t\"¤\": \"valiuta\"\n\t\t\t},\n\t\t\t\"lv\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"bezgaliba\",\n\t\t\t\t\"♥\": \"milestiba\",\n\t\t\t\t\"&\": \"un\",\n\t\t\t\t\"|\": \"vai\",\n\t\t\t\t\"<\": \"mazak neka\",\n\t\t\t\t\">\": \"lielaks neka\",\n\t\t\t\t\"∑\": \"summa\",\n\t\t\t\t\"¤\": \"valuta\"\n\t\t\t},\n\t\t\t\"my\": {\n\t\t\t\t\"∆\": \"kwahkhyaet\",\n\t\t\t\t\"∞\": \"asaonasme\",\n\t\t\t\t\"♥\": \"akhyait\",\n\t\t\t\t\"&\": \"nhin\",\n\t\t\t\t\"|\": \"tho\",\n\t\t\t\t\"<\": \"ngethaw\",\n\t\t\t\t\">\": \"kyithaw\",\n\t\t\t\t\"∑\": \"paungld\",\n\t\t\t\t\"¤\": \"ngwekye\"\n\t\t\t},\n\t\t\t\"mk\": {},\n\t\t\t\"nl\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"oneindig\",\n\t\t\t\t\"♥\": \"liefde\",\n\t\t\t\t\"&\": \"en\",\n\t\t\t\t\"|\": \"of\",\n\t\t\t\t\"<\": \"kleiner dan\",\n\t\t\t\t\">\": \"groter dan\",\n\t\t\t\t\"∑\": \"som\",\n\t\t\t\t\"¤\": \"valuta\"\n\t\t\t},\n\t\t\t\"pl\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"nieskonczonosc\",\n\t\t\t\t\"♥\": \"milosc\",\n\t\t\t\t\"&\": \"i\",\n\t\t\t\t\"|\": \"lub\",\n\t\t\t\t\"<\": \"mniejsze niz\",\n\t\t\t\t\">\": \"wieksze niz\",\n\t\t\t\t\"∑\": \"suma\",\n\t\t\t\t\"¤\": \"waluta\"\n\t\t\t},\n\t\t\t\"pt\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"infinito\",\n\t\t\t\t\"♥\": \"amor\",\n\t\t\t\t\"&\": \"e\",\n\t\t\t\t\"|\": \"ou\",\n\t\t\t\t\"<\": \"menor que\",\n\t\t\t\t\">\": \"maior que\",\n\t\t\t\t\"∑\": \"soma\",\n\t\t\t\t\"¤\": \"moeda\"\n\t\t\t},\n\t\t\t\"ro\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"infinit\",\n\t\t\t\t\"♥\": \"dragoste\",\n\t\t\t\t\"&\": \"si\",\n\t\t\t\t\"|\": \"sau\",\n\t\t\t\t\"<\": \"mai mic ca\",\n\t\t\t\t\">\": \"mai mare ca\",\n\t\t\t\t\"∑\": \"suma\",\n\t\t\t\t\"¤\": \"valuta\"\n\t\t\t},\n\t\t\t\"ru\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"beskonechno\",\n\t\t\t\t\"♥\": \"lubov\",\n\t\t\t\t\"&\": \"i\",\n\t\t\t\t\"|\": \"ili\",\n\t\t\t\t\"<\": \"menshe\",\n\t\t\t\t\">\": \"bolshe\",\n\t\t\t\t\"∑\": \"summa\",\n\t\t\t\t\"¤\": \"valjuta\"\n\t\t\t},\n\t\t\t\"sk\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"nekonecno\",\n\t\t\t\t\"♥\": \"laska\",\n\t\t\t\t\"&\": \"a\",\n\t\t\t\t\"|\": \"alebo\",\n\t\t\t\t\"<\": \"menej ako\",\n\t\t\t\t\">\": \"viac ako\",\n\t\t\t\t\"∑\": \"sucet\",\n\t\t\t\t\"¤\": \"mena\"\n\t\t\t},\n\t\t\t\"sr\": {},\n\t\t\t\"tr\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"sonsuzluk\",\n\t\t\t\t\"♥\": \"ask\",\n\t\t\t\t\"&\": \"ve\",\n\t\t\t\t\"|\": \"veya\",\n\t\t\t\t\"<\": \"kucuktur\",\n\t\t\t\t\">\": \"buyuktur\",\n\t\t\t\t\"∑\": \"toplam\",\n\t\t\t\t\"¤\": \"para birimi\"\n\t\t\t},\n\t\t\t\"uk\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"bezkinechnist\",\n\t\t\t\t\"♥\": \"lubov\",\n\t\t\t\t\"&\": \"i\",\n\t\t\t\t\"|\": \"abo\",\n\t\t\t\t\"<\": \"menshe\",\n\t\t\t\t\">\": \"bilshe\",\n\t\t\t\t\"∑\": \"suma\",\n\t\t\t\t\"¤\": \"valjuta\"\n\t\t\t},\n\t\t\t\"vn\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"vo cuc\",\n\t\t\t\t\"♥\": \"yeu\",\n\t\t\t\t\"&\": \"va\",\n\t\t\t\t\"|\": \"hoac\",\n\t\t\t\t\"<\": \"nho hon\",\n\t\t\t\t\">\": \"lon hon\",\n\t\t\t\t\"∑\": \"tong\",\n\t\t\t\t\"¤\": \"tien te\"\n\t\t\t}\n\t\t};\n\t\tvar uricChars = [\n\t\t\t\";\",\n\t\t\t\"?\",\n\t\t\t\":\",\n\t\t\t\"@\",\n\t\t\t\"&\",\n\t\t\t\"=\",\n\t\t\t\"+\",\n\t\t\t\"$\",\n\t\t\t\",\",\n\t\t\t\"/\"\n\t\t].join(\"\");\n\t\tvar uricNoSlashChars = [\n\t\t\t\";\",\n\t\t\t\"?\",\n\t\t\t\":\",\n\t\t\t\"@\",\n\t\t\t\"&\",\n\t\t\t\"=\",\n\t\t\t\"+\",\n\t\t\t\"$\",\n\t\t\t\",\"\n\t\t].join(\"\");\n\t\tvar markChars = [\n\t\t\t\".\",\n\t\t\t\"!\",\n\t\t\t\"~\",\n\t\t\t\"*\",\n\t\t\t\"'\",\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t].join(\"\");\n\t\t/**\n\t\t* getSlug\n\t\t* @param {string} input input string\n\t\t* @param {object|string} opts config object or separator string/char\n\t\t* @api public\n\t\t* @return {string} sluggified string\n\t\t*/\n\t\tvar getSlug = function getSlug(input, opts) {\n\t\t\tvar separator = \"-\";\n\t\t\tvar result = \"\";\n\t\t\tvar diatricString = \"\";\n\t\t\tvar convertSymbols = true;\n\t\t\tvar customReplacements = {};\n\t\t\tvar maintainCase;\n\t\t\tvar titleCase;\n\t\t\tvar truncate;\n\t\t\tvar uricFlag;\n\t\t\tvar uricNoSlashFlag;\n\t\t\tvar markFlag;\n\t\t\tvar symbol;\n\t\t\tvar langChar;\n\t\t\tvar lucky;\n\t\t\tvar i;\n\t\t\tvar ch;\n\t\t\tvar l;\n\t\t\tvar lastCharWasSymbol;\n\t\t\tvar lastCharWasDiatric;\n\t\t\tvar allowedChars = \"\";\n\t\t\tif (typeof input !== \"string\") return \"\";\n\t\t\tif (typeof opts === \"string\") separator = opts;\n\t\t\tsymbol = symbolMap.en;\n\t\t\tlangChar = langCharMap.en;\n\t\t\tif (typeof opts === \"object\") {\n\t\t\t\tmaintainCase = opts.maintainCase || false;\n\t\t\t\tcustomReplacements = opts.custom && typeof opts.custom === \"object\" ? opts.custom : customReplacements;\n\t\t\t\ttruncate = +opts.truncate > 1 && opts.truncate || false;\n\t\t\t\turicFlag = opts.uric || false;\n\t\t\t\turicNoSlashFlag = opts.uricNoSlash || false;\n\t\t\t\tmarkFlag = opts.mark || false;\n\t\t\t\tconvertSymbols = opts.symbols === false || opts.lang === false ? false : true;\n\t\t\t\tseparator = opts.separator || separator;\n\t\t\t\tif (uricFlag) allowedChars += uricChars;\n\t\t\t\tif (uricNoSlashFlag) allowedChars += uricNoSlashChars;\n\t\t\t\tif (markFlag) allowedChars += markChars;\n\t\t\t\tsymbol = opts.lang && symbolMap[opts.lang] && convertSymbols ? symbolMap[opts.lang] : convertSymbols ? symbolMap.en : {};\n\t\t\t\tlangChar = opts.lang && langCharMap[opts.lang] ? langCharMap[opts.lang] : opts.lang === false || opts.lang === true ? {} : langCharMap.en;\n\t\t\t\tif (opts.titleCase && typeof opts.titleCase.length === \"number\" && Array.prototype.toString.call(opts.titleCase)) {\n\t\t\t\t\topts.titleCase.forEach(function(v) {\n\t\t\t\t\t\tcustomReplacements[v + \"\"] = v + \"\";\n\t\t\t\t\t});\n\t\t\t\t\ttitleCase = true;\n\t\t\t\t} else titleCase = !!opts.titleCase;\n\t\t\t\tif (opts.custom && typeof opts.custom.length === \"number\" && Array.prototype.toString.call(opts.custom)) opts.custom.forEach(function(v) {\n\t\t\t\t\tcustomReplacements[v + \"\"] = v + \"\";\n\t\t\t\t});\n\t\t\t\tObject.keys(customReplacements).forEach(function(v) {\n\t\t\t\t\tvar r;\n\t\t\t\t\tif (v.length > 1) r = new RegExp(\"\\\\b\" + escapeChars(v) + \"\\\\b\", \"gi\");\n\t\t\t\t\telse r = new RegExp(escapeChars(v), \"gi\");\n\t\t\t\t\tinput = input.replace(r, customReplacements[v]);\n\t\t\t\t});\n\t\t\t\tfor (ch in customReplacements) allowedChars += ch;\n\t\t\t}\n\t\t\tallowedChars += separator;\n\t\t\tallowedChars = escapeChars(allowedChars);\n\t\t\tinput = input.replace(/(^\\s+|\\s+$)/g, \"\");\n\t\t\tlastCharWasSymbol = false;\n\t\t\tlastCharWasDiatric = false;\n\t\t\tfor (i = 0, l = input.length; i < l; i++) {\n\t\t\t\tch = input[i];\n\t\t\t\tif (isReplacedCustomChar(ch, customReplacements)) lastCharWasSymbol = false;\n\t\t\t\telse if (langChar[ch]) {\n\t\t\t\t\tch = lastCharWasSymbol && langChar[ch].match(/[A-Za-z0-9]/) ? \" \" + langChar[ch] : langChar[ch];\n\t\t\t\t\tlastCharWasSymbol = false;\n\t\t\t\t} else if (ch in charMap) {\n\t\t\t\t\tif (i + 1 < l && lookAheadCharArray.indexOf(input[i + 1]) >= 0) {\n\t\t\t\t\t\tdiatricString += ch;\n\t\t\t\t\t\tch = \"\";\n\t\t\t\t\t} else if (lastCharWasDiatric === true) {\n\t\t\t\t\t\tch = diatricMap[diatricString] + charMap[ch];\n\t\t\t\t\t\tdiatricString = \"\";\n\t\t\t\t\t} else ch = lastCharWasSymbol && charMap[ch].match(/[A-Za-z0-9]/) ? \" \" + charMap[ch] : charMap[ch];\n\t\t\t\t\tlastCharWasSymbol = false;\n\t\t\t\t\tlastCharWasDiatric = false;\n\t\t\t\t} else if (ch in diatricMap) {\n\t\t\t\t\tdiatricString += ch;\n\t\t\t\t\tch = \"\";\n\t\t\t\t\tif (i === l - 1) ch = diatricMap[diatricString];\n\t\t\t\t\tlastCharWasDiatric = true;\n\t\t\t\t} else if (symbol[ch] && !(uricFlag && uricChars.indexOf(ch) !== -1) && !(uricNoSlashFlag && uricNoSlashChars.indexOf(ch) !== -1)) {\n\t\t\t\t\tch = lastCharWasSymbol || result.substr(-1).match(/[A-Za-z0-9]/) ? separator + symbol[ch] : symbol[ch];\n\t\t\t\t\tch += input[i + 1] !== void 0 && input[i + 1].match(/[A-Za-z0-9]/) ? separator : \"\";\n\t\t\t\t\tlastCharWasSymbol = true;\n\t\t\t\t} else {\n\t\t\t\t\tif (lastCharWasDiatric === true) {\n\t\t\t\t\t\tch = diatricMap[diatricString] + ch;\n\t\t\t\t\t\tdiatricString = \"\";\n\t\t\t\t\t\tlastCharWasDiatric = false;\n\t\t\t\t\t} else if (lastCharWasSymbol && (/[A-Za-z0-9]/.test(ch) || result.substr(-1).match(/A-Za-z0-9]/))) ch = \" \" + ch;\n\t\t\t\t\tlastCharWasSymbol = false;\n\t\t\t\t}\n\t\t\t\tresult += ch.replace(new RegExp(\"[^\\\\w\\\\s\" + allowedChars + \"_-]\", \"g\"), separator);\n\t\t\t}\n\t\t\tif (titleCase) result = result.replace(/(\\w)(\\S*)/g, function(_, i, r) {\n\t\t\t\tvar j = i.toUpperCase() + (r !== null ? r : \"\");\n\t\t\t\treturn Object.keys(customReplacements).indexOf(j.toLowerCase()) < 0 ? j : j.toLowerCase();\n\t\t\t});\n\t\t\tresult = result.replace(/\\s+/g, separator).replace(new RegExp(\"\\\\\" + separator + \"+\", \"g\"), separator).replace(new RegExp(\"(^\\\\\" + separator + \"+|\\\\\" + separator + \"+$)\", \"g\"), \"\");\n\t\t\tif (truncate && result.length > truncate) {\n\t\t\t\tlucky = result.charAt(truncate) === separator;\n\t\t\t\tresult = result.slice(0, truncate);\n\t\t\t\tif (!lucky) result = result.slice(0, result.lastIndexOf(separator));\n\t\t\t}\n\t\t\tif (!maintainCase && !titleCase) result = result.toLowerCase();\n\t\t\treturn result;\n\t\t};\n\t\t/**\n\t\t* createSlug curried(opts)(input)\n\t\t* @param {object|string} opts config object or input string\n\t\t* @return {Function} function getSlugWithConfig()\n\t\t**/\n\t\tvar createSlug = function createSlug(opts) {\n\t\t\t/**\n\t\t\t* getSlugWithConfig\n\t\t\t* @param {string} input string\n\t\t\t* @return {string} slug string\n\t\t\t*/\n\t\t\treturn function getSlugWithConfig(input) {\n\t\t\t\treturn getSlug(input, opts);\n\t\t\t};\n\t\t};\n\t\t/**\n\t\t* escape Chars\n\t\t* @param {string} input string\n\t\t*/\n\t\tvar escapeChars = function escapeChars(input) {\n\t\t\treturn input.replace(/[-\\\\^$*+?.()|[\\]{}\\/]/g, \"\\\\$&\");\n\t\t};\n\t\t/**\n\t\t* check if the char is an already converted char from custom list\n\t\t* @param {char} ch character to check\n\t\t* @param {object} customReplacements custom translation map\n\t\t*/\n\t\tvar isReplacedCustomChar = function(ch, customReplacements) {\n\t\t\tfor (var c in customReplacements) if (customReplacements[c] === ch) return true;\n\t\t};\n\t\tif (typeof module !== \"undefined\" && module.exports) {\n\t\t\tmodule.exports = getSlug;\n\t\t\tmodule.exports.createSlug = createSlug;\n\t\t} else if (typeof define !== \"undefined\" && define.amd) define([], function() {\n\t\t\treturn getSlug;\n\t\t});\n\t\telse try {\n\t\t\tif (root.getSlug || root.createSlug) throw \"speakingurl: globals exists /(getSlug|createSlug)/\";\n\t\t\telse {\n\t\t\t\troot.getSlug = getSlug;\n\t\t\t\troot.createSlug = createSlug;\n\t\t\t}\n\t\t} catch (e) {}\n\t})(exports);\n}));\n//#endregion\n//#region src/core/app/index.ts\nvar import_speakingurl = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tmodule.exports = require_speakingurl$1();\n})))(), 1);\nconst appRecordInfo = target.__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__ ??= {\n\tid: 0,\n\tappIds: /* @__PURE__ */ new Set()\n};\nfunction getAppRecordName(app, fallbackName) {\n\treturn app?._component?.name || `App ${fallbackName}`;\n}\nfunction getAppRootInstance(app) {\n\tif (app._instance) return app._instance;\n\telse if (app._container?._vnode?.component) return app._container?._vnode?.component;\n}\nfunction removeAppRecordId(app) {\n\tconst id = app.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__;\n\tif (id != null) {\n\t\tappRecordInfo.appIds.delete(id);\n\t\tappRecordInfo.id--;\n\t}\n}\nfunction getAppRecordId(app, defaultId) {\n\tif (app.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__ != null) return app.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__;\n\tlet id = defaultId ?? (appRecordInfo.id++).toString();\n\tif (defaultId && appRecordInfo.appIds.has(id)) {\n\t\tlet count = 1;\n\t\twhile (appRecordInfo.appIds.has(`${defaultId}_${count}`)) count++;\n\t\tid = `${defaultId}_${count}`;\n\t}\n\tappRecordInfo.appIds.add(id);\n\tapp.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__ = id;\n\treturn id;\n}\nfunction createAppRecord(app, types) {\n\tconst rootInstance = getAppRootInstance(app);\n\tif (rootInstance) {\n\t\tappRecordInfo.id++;\n\t\tconst name = getAppRecordName(app, appRecordInfo.id.toString());\n\t\tconst id = getAppRecordId(app, (0, import_speakingurl.default)(name));\n\t\tconst [el] = getRootElementsFromComponentInstance(rootInstance);\n\t\tconst record = {\n\t\t\tid,\n\t\t\tname,\n\t\t\ttypes,\n\t\t\tinstanceMap: /* @__PURE__ */ new Map(),\n\t\t\tperfGroupIds: /* @__PURE__ */ new Map(),\n\t\t\trootInstance,\n\t\t\tiframe: isBrowser && document !== el?.ownerDocument ? el?.ownerDocument?.location?.pathname : void 0\n\t\t};\n\t\tapp.__VUE_DEVTOOLS_NEXT_APP_RECORD__ = record;\n\t\tconst rootId = `${record.id}:root`;\n\t\trecord.instanceMap.set(rootId, record.rootInstance);\n\t\trecord.rootInstance.__VUE_DEVTOOLS_NEXT_UID__ = rootId;\n\t\treturn record;\n\t} else return {};\n}\n//#endregion\n//#region src/core/iframe/index.ts\nfunction detectIframeApp(target, inIframe = false) {\n\tif (inIframe) {\n\t\tfunction sendEventToParent(cb) {\n\t\t\ttry {\n\t\t\t\tconst hook = window.parent.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\t\t\t\tif (hook) cb(hook);\n\t\t\t} catch (e) {}\n\t\t}\n\t\tconst hook = {\n\t\t\tid: \"vue-devtools-next\",\n\t\t\tdevtoolsVersion: \"7.0\",\n\t\t\ton: (event, cb) => {\n\t\t\t\tsendEventToParent((hook) => {\n\t\t\t\t\thook.on(event, cb);\n\t\t\t\t});\n\t\t\t},\n\t\t\tonce: (event, cb) => {\n\t\t\t\tsendEventToParent((hook) => {\n\t\t\t\t\thook.once(event, cb);\n\t\t\t\t});\n\t\t\t},\n\t\t\toff: (event, cb) => {\n\t\t\t\tsendEventToParent((hook) => {\n\t\t\t\t\thook.off(event, cb);\n\t\t\t\t});\n\t\t\t},\n\t\t\temit: (event, ...payload) => {\n\t\t\t\tsendEventToParent((hook) => {\n\t\t\t\t\thook.emit(event, ...payload);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\tObject.defineProperty(target, \"__VUE_DEVTOOLS_GLOBAL_HOOK__\", {\n\t\t\tget() {\n\t\t\t\treturn hook;\n\t\t\t},\n\t\t\tconfigurable: true\n\t\t});\n\t}\n\tfunction injectVueHookToIframe(iframe) {\n\t\tif (iframe.__vdevtools__injected) return;\n\t\ttry {\n\t\t\tiframe.__vdevtools__injected = true;\n\t\t\tconst inject = () => {\n\t\t\t\ttry {\n\t\t\t\t\tiframe.contentWindow.__VUE_DEVTOOLS_IFRAME__ = iframe;\n\t\t\t\t\tconst script = iframe.contentDocument.createElement(\"script\");\n\t\t\t\t\tscript.textContent = `;(${detectIframeApp.toString()})(window, true)`;\n\t\t\t\t\tiframe.contentDocument.documentElement.appendChild(script);\n\t\t\t\t\tscript.parentNode.removeChild(script);\n\t\t\t\t} catch (e) {}\n\t\t\t};\n\t\t\tinject();\n\t\t\tiframe.addEventListener(\"load\", () => inject());\n\t\t} catch (e) {}\n\t}\n\tfunction injectVueHookToIframes() {\n\t\tif (typeof window === \"undefined\") return;\n\t\tconst iframes = Array.from(document.querySelectorAll(\"iframe:not([data-vue-devtools-ignore])\"));\n\t\tfor (const iframe of iframes) injectVueHookToIframe(iframe);\n\t}\n\tinjectVueHookToIframes();\n\tlet iframeAppChecks = 0;\n\tconst iframeAppCheckTimer = setInterval(() => {\n\t\tinjectVueHookToIframes();\n\t\tiframeAppChecks++;\n\t\tif (iframeAppChecks >= 5) clearInterval(iframeAppCheckTimer);\n\t}, 1e3);\n}\n//#endregion\n//#region src/core/index.ts\nfunction initDevTools() {\n\tdetectIframeApp(target);\n\tupdateDevToolsState({ vitePluginDetected: getDevToolsEnv().vitePluginDetected });\n\tconst isDevToolsNext = target.__VUE_DEVTOOLS_GLOBAL_HOOK__?.id === \"vue-devtools-next\";\n\tif (target.__VUE_DEVTOOLS_GLOBAL_HOOK__ && isDevToolsNext) return;\n\tconst _devtoolsHook = createDevToolsHook();\n\tif (target.__VUE_DEVTOOLS_HOOK_REPLAY__) try {\n\t\ttarget.__VUE_DEVTOOLS_HOOK_REPLAY__.forEach((cb) => cb(_devtoolsHook));\n\t\ttarget.__VUE_DEVTOOLS_HOOK_REPLAY__ = [];\n\t} catch (e) {\n\t\tconsole.error(\"[vue-devtools] Error during hook replay\", e);\n\t}\n\t_devtoolsHook.once(\"init\", (Vue) => {\n\t\ttarget.__VUE_DEVTOOLS_VUE2_APP_DETECTED__ = true;\n\t\tconsole.log(\"%c[_____Vue DevTools v7 log_____]\", \"color: red; font-bold: 600; font-size: 16px;\");\n\t\tconsole.log(\"%cVue DevTools v7 detected in your Vue2 project. v7 only supports Vue3 and will not work.\", \"font-bold: 500; font-size: 14px;\");\n\t\tconst legacyChromeUrl = \"https://chromewebstore.google.com/detail/vuejs-devtools/iaajmlceplecbljialhhkmedjlpdblhp\";\n\t\tconst legacyFirefoxUrl = \"https://addons.mozilla.org/firefox/addon/vue-js-devtools-v6-legacy\";\n\t\tconsole.log(`%cThe legacy version of chrome extension that supports both Vue 2 and Vue 3 has been moved to %c ${legacyChromeUrl}`, \"font-size: 14px;\", \"text-decoration: underline; cursor: pointer;font-size: 14px;\");\n\t\tconsole.log(`%cThe legacy version of firefox extension that supports both Vue 2 and Vue 3 has been moved to %c ${legacyFirefoxUrl}`, \"font-size: 14px;\", \"text-decoration: underline; cursor: pointer;font-size: 14px;\");\n\t\tconsole.log(\"%cPlease install and enable only the legacy version for your Vue2 app.\", \"font-bold: 500; font-size: 14px;\");\n\t\tconsole.log(\"%c[_____Vue DevTools v7 log_____]\", \"color: red; font-bold: 600; font-size: 16px;\");\n\t});\n\thook.on.setupDevtoolsPlugin((pluginDescriptor, setupFn) => {\n\t\taddDevToolsPluginToBuffer(pluginDescriptor, setupFn);\n\t\tconst { app } = activeAppRecord ?? {};\n\t\tif (pluginDescriptor.settings) initPluginSettings(pluginDescriptor.id, pluginDescriptor.settings);\n\t\tif (!app) return;\n\t\tcallDevToolsPluginSetupFn([pluginDescriptor, setupFn], app);\n\t});\n\tonLegacyDevToolsPluginApiAvailable(() => {\n\t\tdevtoolsPluginBuffer.filter(([item]) => item.id !== \"components\").forEach(([pluginDescriptor, setupFn]) => {\n\t\t\t_devtoolsHook.emit(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, pluginDescriptor, setupFn, { target: \"legacy\" });\n\t\t});\n\t});\n\thook.on.vueAppInit(async (app, version, types) => {\n\t\tconst normalizedAppRecord = {\n\t\t\t...createAppRecord(app, types),\n\t\t\tapp,\n\t\t\tversion\n\t\t};\n\t\taddDevToolsAppRecord(normalizedAppRecord);\n\t\tif (devtoolsAppRecords.value.length === 1) {\n\t\t\tsetActiveAppRecord(normalizedAppRecord);\n\t\t\tsetActiveAppRecordId(normalizedAppRecord.id);\n\t\t\tnormalizeRouterInfo(normalizedAppRecord, activeAppRecord);\n\t\t\tregisterDevToolsPlugin(normalizedAppRecord.app);\n\t\t}\n\t\tsetupDevToolsPlugin(...createComponentsDevToolsPlugin(normalizedAppRecord.app));\n\t\tupdateDevToolsState({ connected: true });\n\t\t_devtoolsHook.apps.push(app);\n\t});\n\thook.on.vueAppUnmount(async (app) => {\n\t\tconst activeRecords = devtoolsAppRecords.value.filter((appRecord) => appRecord.app !== app);\n\t\tif (activeRecords.length === 0) updateDevToolsState({ connected: false });\n\t\tremoveDevToolsAppRecord(app);\n\t\tremoveAppRecordId(app);\n\t\tif (activeAppRecord.value.app === app) {\n\t\t\tsetActiveAppRecord(activeRecords[0]);\n\t\t\tdevtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.SEND_ACTIVE_APP_UNMOUNTED_TO_CLIENT);\n\t\t}\n\t\ttarget.__VUE_DEVTOOLS_GLOBAL_HOOK__.apps.splice(target.__VUE_DEVTOOLS_GLOBAL_HOOK__.apps.indexOf(app), 1);\n\t\tremoveRegisteredPluginApp(app);\n\t});\n\tsubscribeDevToolsHook(_devtoolsHook);\n\tif (!target.__VUE_DEVTOOLS_GLOBAL_HOOK__) Object.defineProperty(target, \"__VUE_DEVTOOLS_GLOBAL_HOOK__\", {\n\t\tget() {\n\t\t\treturn _devtoolsHook;\n\t\t},\n\t\tconfigurable: true\n\t});\n\telse if (!isNuxtApp) Object.assign(__VUE_DEVTOOLS_GLOBAL_HOOK__, _devtoolsHook);\n}\nfunction onDevToolsClientConnected(fn) {\n\treturn new Promise((resolve) => {\n\t\tif (devtoolsState.connected && devtoolsState.clientConnected) {\n\t\t\tfn();\n\t\t\tresolve();\n\t\t\treturn;\n\t\t}\n\t\tdevtoolsContext.hooks.hook(DevToolsMessagingHookKeys.DEVTOOLS_CONNECTED_UPDATED, ({ state }) => {\n\t\t\tif (state.connected && state.clientConnected) {\n\t\t\t\tfn();\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\t});\n}\n//#endregion\n//#region src/core/high-perf-mode/index.ts\nfunction toggleHighPerfMode(state) {\n\tdevtoolsState.highPerfModeEnabled = state ?? !devtoolsState.highPerfModeEnabled;\n\tif (!state && activeAppRecord.value) registerDevToolsPlugin(activeAppRecord.value.app);\n}\n//#endregion\n//#region src/core/component/state/reviver.ts\nfunction reviveSet(val) {\n\tconst result = /* @__PURE__ */ new Set();\n\tconst list = val._custom.value;\n\tfor (let i = 0; i < list.length; i++) {\n\t\tconst value = list[i];\n\t\tresult.add(revive(value));\n\t}\n\treturn result;\n}\nfunction reviveMap(val) {\n\tconst result = /* @__PURE__ */ new Map();\n\tconst list = val._custom.value;\n\tfor (let i = 0; i < list.length; i++) {\n\t\tconst { key, value } = list[i];\n\t\tresult.set(key, revive(value));\n\t}\n\treturn result;\n}\nfunction revive(val) {\n\tif (val === \"__vue_devtool_undefined__\") return;\n\telse if (val === \"__vue_devtool_infinity__\") return Number.POSITIVE_INFINITY;\n\telse if (val === \"__vue_devtool_negative_infinity__\") return Number.NEGATIVE_INFINITY;\n\telse if (val === \"__vue_devtool_nan__\") return NaN;\n\telse if (val && val._custom) {\n\t\tconst { _custom: custom } = val;\n\t\tif (custom.type === \"component\") return activeAppRecord.value.instanceMap.get(custom.id);\n\t\telse if (custom.type === \"map\") return reviveMap(val);\n\t\telse if (custom.type === \"set\") return reviveSet(val);\n\t\telse if (custom.type === \"bigint\") return BigInt(custom.value);\n\t\telse return revive(custom.value);\n\t} else if (symbolRE.test(val)) {\n\t\tconst [, string] = symbolRE.exec(val);\n\t\treturn Symbol.for(string);\n\t} else if (specialTypeRE.test(val)) {\n\t\tconst [, type, string, , details] = specialTypeRE.exec(val);\n\t\tconst result = new target[type](string);\n\t\tif (type === \"Error\" && details) result.stack = details;\n\t\treturn result;\n\t} else return val;\n}\nfunction reviver(key, value) {\n\treturn revive(value);\n}\n//#endregion\n//#region src/core/component/state/format.ts\nfunction getInspectorStateValueType(value, raw = true) {\n\tconst type = typeof value;\n\tif (value == null || value === \"__vue_devtool_undefined__\" || value === \"undefined\") return \"null\";\n\telse if (type === \"boolean\" || type === \"number\" || value === \"__vue_devtool_infinity__\" || value === \"__vue_devtool_negative_infinity__\" || value === \"__vue_devtool_nan__\") return \"literal\";\n\telse if (value?._custom) if (raw || value._custom.display != null || value._custom.displayText != null) return \"custom\";\n\telse return getInspectorStateValueType(value._custom.value);\n\telse if (typeof value === \"string\") {\n\t\tconst typeMatch = specialTypeRE.exec(value);\n\t\tif (typeMatch) {\n\t\t\tconst [, type] = typeMatch;\n\t\t\treturn `native ${type}`;\n\t\t} else return \"string\";\n\t} else if (Array.isArray(value) || value?._isArray) return \"array\";\n\telse if (isPlainObject(value)) return \"plain-object\";\n\telse return \"unknown\";\n}\nfunction formatInspectorStateValue(value, quotes = false, options) {\n\tconst { customClass } = options ?? {};\n\tlet result;\n\tconst type = getInspectorStateValueType(value, false);\n\tif (type !== \"custom\" && value?._custom) value = value._custom.value;\n\tif (result = internalStateTokenToString(value)) return result;\n\telse if (type === \"custom\") return value._custom.value?._custom && formatInspectorStateValue(value._custom.value, quotes, options) || value._custom.displayText || value._custom.display;\n\telse if (type === \"array\") return `Array[${value.length}]`;\n\telse if (type === \"plain-object\") return `Object${Object.keys(value).length ? \"\" : \" (empty)\"}`;\n\telse if (type?.includes(\"native\")) return escape(specialTypeRE.exec(value)?.[2]);\n\telse if (typeof value === \"string\") {\n\t\tconst typeMatch = value.match(rawTypeRE);\n\t\tif (typeMatch) value = escapeString(typeMatch[1]);\n\t\telse if (quotes) value = `<span>\"</span>${customClass?.string ? `<span class=${customClass.string}>${escapeString(value)}</span>` : escapeString(value)}<span>\"</span>`;\n\t\telse value = customClass?.string ? `<span class=\"${customClass?.string ?? \"\"}\">${escapeString(value)}</span>` : escapeString(value);\n\t}\n\treturn value;\n}\nfunction escapeString(value) {\n\treturn escape(value).replace(/ /g, \" \").replace(/\\n/g, \"<span>\\\\n</span>\");\n}\nfunction getRaw(value) {\n\tlet customType;\n\tconst isCustom = getInspectorStateValueType(value) === \"custom\";\n\tlet inherit = {};\n\tif (isCustom) {\n\t\tconst data = value;\n\t\tconst customValue = data._custom?.value;\n\t\tconst currentCustomType = data._custom?.type;\n\t\tconst nestedCustom = typeof customValue === \"object\" && customValue !== null && \"_custom\" in customValue ? getRaw(customValue) : {\n\t\t\tinherit: void 0,\n\t\t\tvalue: void 0,\n\t\t\tcustomType: void 0\n\t\t};\n\t\tinherit = nestedCustom.inherit || data._custom?.fields || {};\n\t\tvalue = nestedCustom.value || customValue;\n\t\tcustomType = nestedCustom.customType || currentCustomType;\n\t}\n\tif (value && value._isArray) value = value.items;\n\treturn {\n\t\tvalue,\n\t\tinherit,\n\t\tcustomType\n\t};\n}\nfunction toEdit(value, customType) {\n\tif (customType === \"bigint\") return value;\n\tif (customType === \"date\") return value;\n\treturn replaceTokenToString(JSON.stringify(value));\n}\nfunction toSubmit(value, customType) {\n\tif (customType === \"bigint\") return BigInt(value);\n\tif (customType === \"date\") return new Date(value);\n\treturn JSON.parse(replaceStringToToken(value), reviver);\n}\n//#endregion\n//#region src/core/devtools-client/detected.ts\nfunction updateDevToolsClientDetected(params) {\n\tdevtoolsState.devtoolsClientDetected = {\n\t\t...devtoolsState.devtoolsClientDetected,\n\t\t...params\n\t};\n\ttoggleHighPerfMode(!Object.values(devtoolsState.devtoolsClientDetected).some(Boolean));\n}\ntarget.__VUE_DEVTOOLS_UPDATE_CLIENT_DETECTED__ ??= updateDevToolsClientDetected;\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/double-indexed-kv.js\nvar DoubleIndexedKV = class {\n\tconstructor() {\n\t\tthis.keyToValue = /* @__PURE__ */ new Map();\n\t\tthis.valueToKey = /* @__PURE__ */ new Map();\n\t}\n\tset(key, value) {\n\t\tthis.keyToValue.set(key, value);\n\t\tthis.valueToKey.set(value, key);\n\t}\n\tgetByKey(key) {\n\t\treturn this.keyToValue.get(key);\n\t}\n\tgetByValue(value) {\n\t\treturn this.valueToKey.get(value);\n\t}\n\tclear() {\n\t\tthis.keyToValue.clear();\n\t\tthis.valueToKey.clear();\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/registry.js\nvar Registry = class {\n\tconstructor(generateIdentifier) {\n\t\tthis.generateIdentifier = generateIdentifier;\n\t\tthis.kv = new DoubleIndexedKV();\n\t}\n\tregister(value, identifier) {\n\t\tif (this.kv.getByValue(value)) return;\n\t\tif (!identifier) identifier = this.generateIdentifier(value);\n\t\tthis.kv.set(identifier, value);\n\t}\n\tclear() {\n\t\tthis.kv.clear();\n\t}\n\tgetIdentifier(value) {\n\t\treturn this.kv.getByValue(value);\n\t}\n\tgetValue(identifier) {\n\t\treturn this.kv.getByKey(identifier);\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/class-registry.js\nvar ClassRegistry = class extends Registry {\n\tconstructor() {\n\t\tsuper((c) => c.name);\n\t\tthis.classToAllowedProps = /* @__PURE__ */ new Map();\n\t}\n\tregister(value, options) {\n\t\tif (typeof options === \"object\") {\n\t\t\tif (options.allowProps) this.classToAllowedProps.set(value, options.allowProps);\n\t\t\tsuper.register(value, options.identifier);\n\t\t} else super.register(value, options);\n\t}\n\tgetAllowedProps(value) {\n\t\treturn this.classToAllowedProps.get(value);\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/util.js\nfunction valuesOfObj(record) {\n\tif (\"values\" in Object) return Object.values(record);\n\tconst values = [];\n\tfor (const key in record) if (record.hasOwnProperty(key)) values.push(record[key]);\n\treturn values;\n}\nfunction find(record, predicate) {\n\tconst values = valuesOfObj(record);\n\tif (\"find\" in values) return values.find(predicate);\n\tconst valuesNotNever = values;\n\tfor (let i = 0; i < valuesNotNever.length; i++) {\n\t\tconst value = valuesNotNever[i];\n\t\tif (predicate(value)) return value;\n\t}\n}\nfunction forEach(record, run) {\n\tObject.entries(record).forEach(([key, value]) => run(value, key));\n}\nfunction includes(arr, value) {\n\treturn arr.indexOf(value) !== -1;\n}\nfunction findArr(record, predicate) {\n\tfor (let i = 0; i < record.length; i++) {\n\t\tconst value = record[i];\n\t\tif (predicate(value)) return value;\n\t}\n}\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/custom-transformer-registry.js\nvar CustomTransformerRegistry = class {\n\tconstructor() {\n\t\tthis.transfomers = {};\n\t}\n\tregister(transformer) {\n\t\tthis.transfomers[transformer.name] = transformer;\n\t}\n\tfindApplicable(v) {\n\t\treturn find(this.transfomers, (transformer) => transformer.isApplicable(v));\n\t}\n\tfindByName(name) {\n\t\treturn this.transfomers[name];\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/is.js\nconst getType$1 = (payload) => Object.prototype.toString.call(payload).slice(8, -1);\nconst isUndefined$1 = (payload) => typeof payload === \"undefined\";\nconst isNull$1 = (payload) => payload === null;\nconst isPlainObject$2 = (payload) => {\n\tif (typeof payload !== \"object\" || payload === null) return false;\n\tif (payload === Object.prototype) return false;\n\tif (Object.getPrototypeOf(payload) === null) return true;\n\treturn Object.getPrototypeOf(payload) === Object.prototype;\n};\nconst isEmptyObject = (payload) => isPlainObject$2(payload) && Object.keys(payload).length === 0;\nconst isArray$2 = (payload) => Array.isArray(payload);\nconst isString = (payload) => typeof payload === \"string\";\nconst isNumber = (payload) => typeof payload === \"number\" && !isNaN(payload);\nconst isBoolean = (payload) => typeof payload === \"boolean\";\nconst isRegExp = (payload) => payload instanceof RegExp;\nconst isMap = (payload) => payload instanceof Map;\nconst isSet = (payload) => payload instanceof Set;\nconst isSymbol = (payload) => getType$1(payload) === \"Symbol\";\nconst isDate = (payload) => payload instanceof Date && !isNaN(payload.valueOf());\nconst isError = (payload) => payload instanceof Error;\nconst isNaNValue = (payload) => typeof payload === \"number\" && isNaN(payload);\nconst isPrimitive = (payload) => isBoolean(payload) || isNull$1(payload) || isUndefined$1(payload) || isNumber(payload) || isString(payload) || isSymbol(payload);\nconst isBigint = (payload) => typeof payload === \"bigint\";\nconst isInfinite = (payload) => payload === Infinity || payload === -Infinity;\nconst isTypedArray = (payload) => ArrayBuffer.isView(payload) && !(payload instanceof DataView);\nconst isURL = (payload) => payload instanceof URL;\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/pathstringifier.js\nconst escapeKey = (key) => key.replace(/\\./g, \"\\\\.\");\nconst stringifyPath = (path) => path.map(String).map(escapeKey).join(\".\");\nconst parsePath = (string) => {\n\tconst result = [];\n\tlet segment = \"\";\n\tfor (let i = 0; i < string.length; i++) {\n\t\tlet char = string.charAt(i);\n\t\tif (char === \"\\\\\" && string.charAt(i + 1) === \".\") {\n\t\t\tsegment += \".\";\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === \".\") {\n\t\t\tresult.push(segment);\n\t\t\tsegment = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tsegment += char;\n\t}\n\tconst lastSegment = segment;\n\tresult.push(lastSegment);\n\treturn result;\n};\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/transformer.js\nfunction simpleTransformation(isApplicable, annotation, transform, untransform) {\n\treturn {\n\t\tisApplicable,\n\t\tannotation,\n\t\ttransform,\n\t\tuntransform\n\t};\n}\nconst simpleRules = [\n\tsimpleTransformation(isUndefined$1, \"undefined\", () => null, () => void 0),\n\tsimpleTransformation(isBigint, \"bigint\", (v) => v.toString(), (v) => {\n\t\tif (typeof BigInt !== \"undefined\") return BigInt(v);\n\t\tconsole.error(\"Please add a BigInt polyfill.\");\n\t\treturn v;\n\t}),\n\tsimpleTransformation(isDate, \"Date\", (v) => v.toISOString(), (v) => new Date(v)),\n\tsimpleTransformation(isError, \"Error\", (v, superJson) => {\n\t\tconst baseError = {\n\t\t\tname: v.name,\n\t\t\tmessage: v.message\n\t\t};\n\t\tsuperJson.allowedErrorProps.forEach((prop) => {\n\t\t\tbaseError[prop] = v[prop];\n\t\t});\n\t\treturn baseError;\n\t}, (v, superJson) => {\n\t\tconst e = new Error(v.message);\n\t\te.name = v.name;\n\t\te.stack = v.stack;\n\t\tsuperJson.allowedErrorProps.forEach((prop) => {\n\t\t\te[prop] = v[prop];\n\t\t});\n\t\treturn e;\n\t}),\n\tsimpleTransformation(isRegExp, \"regexp\", (v) => \"\" + v, (regex) => {\n\t\tconst body = regex.slice(1, regex.lastIndexOf(\"/\"));\n\t\tconst flags = regex.slice(regex.lastIndexOf(\"/\") + 1);\n\t\treturn new RegExp(body, flags);\n\t}),\n\tsimpleTransformation(isSet, \"set\", (v) => [...v.values()], (v) => new Set(v)),\n\tsimpleTransformation(isMap, \"map\", (v) => [...v.entries()], (v) => new Map(v)),\n\tsimpleTransformation((v) => isNaNValue(v) || isInfinite(v), \"number\", (v) => {\n\t\tif (isNaNValue(v)) return \"NaN\";\n\t\tif (v > 0) return \"Infinity\";\n\t\telse return \"-Infinity\";\n\t}, Number),\n\tsimpleTransformation((v) => v === 0 && 1 / v === -Infinity, \"number\", () => {\n\t\treturn \"-0\";\n\t}, Number),\n\tsimpleTransformation(isURL, \"URL\", (v) => v.toString(), (v) => new URL(v))\n];\nfunction compositeTransformation(isApplicable, annotation, transform, untransform) {\n\treturn {\n\t\tisApplicable,\n\t\tannotation,\n\t\ttransform,\n\t\tuntransform\n\t};\n}\nconst symbolRule = compositeTransformation((s, superJson) => {\n\tif (isSymbol(s)) return !!superJson.symbolRegistry.getIdentifier(s);\n\treturn false;\n}, (s, superJson) => {\n\treturn [\"symbol\", superJson.symbolRegistry.getIdentifier(s)];\n}, (v) => v.description, (_, a, superJson) => {\n\tconst value = superJson.symbolRegistry.getValue(a[1]);\n\tif (!value) throw new Error(\"Trying to deserialize unknown symbol\");\n\treturn value;\n});\nconst constructorToName = [\n\tInt8Array,\n\tUint8Array,\n\tInt16Array,\n\tUint16Array,\n\tInt32Array,\n\tUint32Array,\n\tFloat32Array,\n\tFloat64Array,\n\tUint8ClampedArray\n].reduce((obj, ctor) => {\n\tobj[ctor.name] = ctor;\n\treturn obj;\n}, {});\nconst typedArrayRule = compositeTransformation(isTypedArray, (v) => [\"typed-array\", v.constructor.name], (v) => [...v], (v, a) => {\n\tconst ctor = constructorToName[a[1]];\n\tif (!ctor) throw new Error(\"Trying to deserialize unknown typed array\");\n\treturn new ctor(v);\n});\nfunction isInstanceOfRegisteredClass(potentialClass, superJson) {\n\tif (potentialClass?.constructor) return !!superJson.classRegistry.getIdentifier(potentialClass.constructor);\n\treturn false;\n}\nconst classRule = compositeTransformation(isInstanceOfRegisteredClass, (clazz, superJson) => {\n\treturn [\"class\", superJson.classRegistry.getIdentifier(clazz.constructor)];\n}, (clazz, superJson) => {\n\tconst allowedProps = superJson.classRegistry.getAllowedProps(clazz.constructor);\n\tif (!allowedProps) return { ...clazz };\n\tconst result = {};\n\tallowedProps.forEach((prop) => {\n\t\tresult[prop] = clazz[prop];\n\t});\n\treturn result;\n}, (v, a, superJson) => {\n\tconst clazz = superJson.classRegistry.getValue(a[1]);\n\tif (!clazz) throw new Error(`Trying to deserialize unknown class '${a[1]}' - check https://github.com/blitz-js/superjson/issues/116#issuecomment-773996564`);\n\treturn Object.assign(Object.create(clazz.prototype), v);\n});\nconst customRule = compositeTransformation((value, superJson) => {\n\treturn !!superJson.customTransformerRegistry.findApplicable(value);\n}, (value, superJson) => {\n\treturn [\"custom\", superJson.customTransformerRegistry.findApplicable(value).name];\n}, (value, superJson) => {\n\treturn superJson.customTransformerRegistry.findApplicable(value).serialize(value);\n}, (v, a, superJson) => {\n\tconst transformer = superJson.customTransformerRegistry.findByName(a[1]);\n\tif (!transformer) throw new Error(\"Trying to deserialize unknown custom value\");\n\treturn transformer.deserialize(v);\n});\nconst compositeRules = [\n\tclassRule,\n\tsymbolRule,\n\tcustomRule,\n\ttypedArrayRule\n];\nconst transformValue = (value, superJson) => {\n\tconst applicableCompositeRule = findArr(compositeRules, (rule) => rule.isApplicable(value, superJson));\n\tif (applicableCompositeRule) return {\n\t\tvalue: applicableCompositeRule.transform(value, superJson),\n\t\ttype: applicableCompositeRule.annotation(value, superJson)\n\t};\n\tconst applicableSimpleRule = findArr(simpleRules, (rule) => rule.isApplicable(value, superJson));\n\tif (applicableSimpleRule) return {\n\t\tvalue: applicableSimpleRule.transform(value, superJson),\n\t\ttype: applicableSimpleRule.annotation\n\t};\n};\nconst simpleRulesByAnnotation = {};\nsimpleRules.forEach((rule) => {\n\tsimpleRulesByAnnotation[rule.annotation] = rule;\n});\nconst untransformValue = (json, type, superJson) => {\n\tif (isArray$2(type)) switch (type[0]) {\n\t\tcase \"symbol\": return symbolRule.untransform(json, type, superJson);\n\t\tcase \"class\": return classRule.untransform(json, type, superJson);\n\t\tcase \"custom\": return customRule.untransform(json, type, superJson);\n\t\tcase \"typed-array\": return typedArrayRule.untransform(json, type, superJson);\n\t\tdefault: throw new Error(\"Unknown transformation: \" + type);\n\t}\n\telse {\n\t\tconst transformation = simpleRulesByAnnotation[type];\n\t\tif (!transformation) throw new Error(\"Unknown transformation: \" + type);\n\t\treturn transformation.untransform(json, superJson);\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/accessDeep.js\nconst getNthKey = (value, n) => {\n\tif (n > value.size) throw new Error(\"index out of bounds\");\n\tconst keys = value.keys();\n\twhile (n > 0) {\n\t\tkeys.next();\n\t\tn--;\n\t}\n\treturn keys.next().value;\n};\nfunction validatePath(path) {\n\tif (includes(path, \"__proto__\")) throw new Error(\"__proto__ is not allowed as a property\");\n\tif (includes(path, \"prototype\")) throw new Error(\"prototype is not allowed as a property\");\n\tif (includes(path, \"constructor\")) throw new Error(\"constructor is not allowed as a property\");\n}\nconst getDeep = (object, path) => {\n\tvalidatePath(path);\n\tfor (let i = 0; i < path.length; i++) {\n\t\tconst key = path[i];\n\t\tif (isSet(object)) object = getNthKey(object, +key);\n\t\telse if (isMap(object)) {\n\t\t\tconst row = +key;\n\t\t\tconst type = +path[++i] === 0 ? \"key\" : \"value\";\n\t\t\tconst keyOfRow = getNthKey(object, row);\n\t\t\tswitch (type) {\n\t\t\t\tcase \"key\":\n\t\t\t\t\tobject = keyOfRow;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"value\":\n\t\t\t\t\tobject = object.get(keyOfRow);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} else object = object[key];\n\t}\n\treturn object;\n};\nconst setDeep = (object, path, mapper) => {\n\tvalidatePath(path);\n\tif (path.length === 0) return mapper(object);\n\tlet parent = object;\n\tfor (let i = 0; i < path.length - 1; i++) {\n\t\tconst key = path[i];\n\t\tif (isArray$2(parent)) {\n\t\t\tconst index = +key;\n\t\t\tparent = parent[index];\n\t\t} else if (isPlainObject$2(parent)) parent = parent[key];\n\t\telse if (isSet(parent)) {\n\t\t\tconst row = +key;\n\t\t\tparent = getNthKey(parent, row);\n\t\t} else if (isMap(parent)) {\n\t\t\tif (i === path.length - 2) break;\n\t\t\tconst row = +key;\n\t\t\tconst type = +path[++i] === 0 ? \"key\" : \"value\";\n\t\t\tconst keyOfRow = getNthKey(parent, row);\n\t\t\tswitch (type) {\n\t\t\t\tcase \"key\":\n\t\t\t\t\tparent = keyOfRow;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"value\":\n\t\t\t\t\tparent = parent.get(keyOfRow);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tconst lastKey = path[path.length - 1];\n\tif (isArray$2(parent)) parent[+lastKey] = mapper(parent[+lastKey]);\n\telse if (isPlainObject$2(parent)) parent[lastKey] = mapper(parent[lastKey]);\n\tif (isSet(parent)) {\n\t\tconst oldValue = getNthKey(parent, +lastKey);\n\t\tconst newValue = mapper(oldValue);\n\t\tif (oldValue !== newValue) {\n\t\t\tparent.delete(oldValue);\n\t\t\tparent.add(newValue);\n\t\t}\n\t}\n\tif (isMap(parent)) {\n\t\tconst row = +path[path.length - 2];\n\t\tconst keyToRow = getNthKey(parent, row);\n\t\tswitch (+lastKey === 0 ? \"key\" : \"value\") {\n\t\t\tcase \"key\": {\n\t\t\t\tconst newKey = mapper(keyToRow);\n\t\t\t\tparent.set(newKey, parent.get(keyToRow));\n\t\t\t\tif (newKey !== keyToRow) parent.delete(keyToRow);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"value\":\n\t\t\t\tparent.set(keyToRow, mapper(parent.get(keyToRow)));\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn object;\n};\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/plainer.js\nfunction traverse(tree, walker, origin = []) {\n\tif (!tree) return;\n\tif (!isArray$2(tree)) {\n\t\tforEach(tree, (subtree, key) => traverse(subtree, walker, [...origin, ...parsePath(key)]));\n\t\treturn;\n\t}\n\tconst [nodeValue, children] = tree;\n\tif (children) forEach(children, (child, key) => {\n\t\ttraverse(child, walker, [...origin, ...parsePath(key)]);\n\t});\n\twalker(nodeValue, origin);\n}\nfunction applyValueAnnotations(plain, annotations, superJson) {\n\ttraverse(annotations, (type, path) => {\n\t\tplain = setDeep(plain, path, (v) => untransformValue(v, type, superJson));\n\t});\n\treturn plain;\n}\nfunction applyReferentialEqualityAnnotations(plain, annotations) {\n\tfunction apply(identicalPaths, path) {\n\t\tconst object = getDeep(plain, parsePath(path));\n\t\tidenticalPaths.map(parsePath).forEach((identicalObjectPath) => {\n\t\t\tplain = setDeep(plain, identicalObjectPath, () => object);\n\t\t});\n\t}\n\tif (isArray$2(annotations)) {\n\t\tconst [root, other] = annotations;\n\t\troot.forEach((identicalPath) => {\n\t\t\tplain = setDeep(plain, parsePath(identicalPath), () => plain);\n\t\t});\n\t\tif (other) forEach(other, apply);\n\t} else forEach(annotations, apply);\n\treturn plain;\n}\nconst isDeep = (object, superJson) => isPlainObject$2(object) || isArray$2(object) || isMap(object) || isSet(object) || isInstanceOfRegisteredClass(object, superJson);\nfunction addIdentity(object, path, identities) {\n\tconst existingSet = identities.get(object);\n\tif (existingSet) existingSet.push(path);\n\telse identities.set(object, [path]);\n}\nfunction generateReferentialEqualityAnnotations(identitites, dedupe) {\n\tconst result = {};\n\tlet rootEqualityPaths = void 0;\n\tidentitites.forEach((paths) => {\n\t\tif (paths.length <= 1) return;\n\t\tif (!dedupe) paths = paths.map((path) => path.map(String)).sort((a, b) => a.length - b.length);\n\t\tconst [representativePath, ...identicalPaths] = paths;\n\t\tif (representativePath.length === 0) rootEqualityPaths = identicalPaths.map(stringifyPath);\n\t\telse result[stringifyPath(representativePath)] = identicalPaths.map(stringifyPath);\n\t});\n\tif (rootEqualityPaths) if (isEmptyObject(result)) return [rootEqualityPaths];\n\telse return [rootEqualityPaths, result];\n\telse return isEmptyObject(result) ? void 0 : result;\n}\nconst walker = (object, identities, superJson, dedupe, path = [], objectsInThisPath = [], seenObjects = /* @__PURE__ */ new Map()) => {\n\tconst primitive = isPrimitive(object);\n\tif (!primitive) {\n\t\taddIdentity(object, path, identities);\n\t\tconst seen = seenObjects.get(object);\n\t\tif (seen) return dedupe ? { transformedValue: null } : seen;\n\t}\n\tif (!isDeep(object, superJson)) {\n\t\tconst transformed = transformValue(object, superJson);\n\t\tconst result = transformed ? {\n\t\t\ttransformedValue: transformed.value,\n\t\t\tannotations: [transformed.type]\n\t\t} : { transformedValue: object };\n\t\tif (!primitive) seenObjects.set(object, result);\n\t\treturn result;\n\t}\n\tif (includes(objectsInThisPath, object)) return { transformedValue: null };\n\tconst transformationResult = transformValue(object, superJson);\n\tconst transformed = transformationResult?.value ?? object;\n\tconst transformedValue = isArray$2(transformed) ? [] : {};\n\tconst innerAnnotations = {};\n\tforEach(transformed, (value, index) => {\n\t\tif (index === \"__proto__\" || index === \"constructor\" || index === \"prototype\") throw new Error(`Detected property ${index}. This is a prototype pollution risk, please remove it from your object.`);\n\t\tconst recursiveResult = walker(value, identities, superJson, dedupe, [...path, index], [...objectsInThisPath, object], seenObjects);\n\t\ttransformedValue[index] = recursiveResult.transformedValue;\n\t\tif (isArray$2(recursiveResult.annotations)) innerAnnotations[index] = recursiveResult.annotations;\n\t\telse if (isPlainObject$2(recursiveResult.annotations)) forEach(recursiveResult.annotations, (tree, key) => {\n\t\t\tinnerAnnotations[escapeKey(index) + \".\" + key] = tree;\n\t\t});\n\t});\n\tconst result = isEmptyObject(innerAnnotations) ? {\n\t\ttransformedValue,\n\t\tannotations: !!transformationResult ? [transformationResult.type] : void 0\n\t} : {\n\t\ttransformedValue,\n\t\tannotations: !!transformationResult ? [transformationResult.type, innerAnnotations] : innerAnnotations\n\t};\n\tif (!primitive) seenObjects.set(object, result);\n\treturn result;\n};\n//#endregion\n//#region ../../node_modules/.pnpm/is-what@4.1.16/node_modules/is-what/dist/index.js\nfunction getType(payload) {\n\treturn Object.prototype.toString.call(payload).slice(8, -1);\n}\nfunction isArray$1(payload) {\n\treturn getType(payload) === \"Array\";\n}\nfunction isPlainObject$1(payload) {\n\tif (getType(payload) !== \"Object\") return false;\n\tconst prototype = Object.getPrototypeOf(payload);\n\treturn !!prototype && prototype.constructor === Object && prototype === Object.prototype;\n}\nfunction isNull(payload) {\n\treturn getType(payload) === \"Null\";\n}\nfunction isOneOf(a, b, c, d, e) {\n\treturn (value) => a(value) || b(value) || !!c && c(value) || !!d && d(value) || !!e && e(value);\n}\nfunction isUndefined(payload) {\n\treturn getType(payload) === \"Undefined\";\n}\nisOneOf(isNull, isUndefined);\n//#endregion\n//#region ../../node_modules/.pnpm/copy-anything@3.0.5/node_modules/copy-anything/dist/index.js\nfunction assignProp(carry, key, newVal, originalObject, includeNonenumerable) {\n\tconst propType = {}.propertyIsEnumerable.call(originalObject, key) ? \"enumerable\" : \"nonenumerable\";\n\tif (propType === \"enumerable\") carry[key] = newVal;\n\tif (includeNonenumerable && propType === \"nonenumerable\") Object.defineProperty(carry, key, {\n\t\tvalue: newVal,\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true\n\t});\n}\nfunction copy(target, options = {}) {\n\tif (isArray$1(target)) return target.map((item) => copy(item, options));\n\tif (!isPlainObject$1(target)) return target;\n\tconst props = Object.getOwnPropertyNames(target);\n\tconst symbols = Object.getOwnPropertySymbols(target);\n\treturn [...props, ...symbols].reduce((carry, key) => {\n\t\tif (isArray$1(options.props) && !options.props.includes(key)) return carry;\n\t\tconst val = target[key];\n\t\tassignProp(carry, key, copy(val, options), target, options.nonenumerable);\n\t\treturn carry;\n\t}, {});\n}\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/index.js\nvar SuperJSON = class {\n\t/**\n\t* @param dedupeReferentialEqualities If true, SuperJSON will make sure only one instance of referentially equal objects are serialized and the rest are replaced with `null`.\n\t*/\n\tconstructor({ dedupe = false } = {}) {\n\t\tthis.classRegistry = new ClassRegistry();\n\t\tthis.symbolRegistry = new Registry((s) => s.description ?? \"\");\n\t\tthis.customTransformerRegistry = new CustomTransformerRegistry();\n\t\tthis.allowedErrorProps = [];\n\t\tthis.dedupe = dedupe;\n\t}\n\tserialize(object) {\n\t\tconst identities = /* @__PURE__ */ new Map();\n\t\tconst output = walker(object, identities, this, this.dedupe);\n\t\tconst res = { json: output.transformedValue };\n\t\tif (output.annotations) res.meta = {\n\t\t\t...res.meta,\n\t\t\tvalues: output.annotations\n\t\t};\n\t\tconst equalityAnnotations = generateReferentialEqualityAnnotations(identities, this.dedupe);\n\t\tif (equalityAnnotations) res.meta = {\n\t\t\t...res.meta,\n\t\t\treferentialEqualities: equalityAnnotations\n\t\t};\n\t\treturn res;\n\t}\n\tdeserialize(payload) {\n\t\tconst { json, meta } = payload;\n\t\tlet result = copy(json);\n\t\tif (meta?.values) result = applyValueAnnotations(result, meta.values, this);\n\t\tif (meta?.referentialEqualities) result = applyReferentialEqualityAnnotations(result, meta.referentialEqualities);\n\t\treturn result;\n\t}\n\tstringify(object) {\n\t\treturn JSON.stringify(this.serialize(object));\n\t}\n\tparse(string) {\n\t\treturn this.deserialize(JSON.parse(string));\n\t}\n\tregisterClass(v, options) {\n\t\tthis.classRegistry.register(v, options);\n\t}\n\tregisterSymbol(v, identifier) {\n\t\tthis.symbolRegistry.register(v, identifier);\n\t}\n\tregisterCustom(transformer, name) {\n\t\tthis.customTransformerRegistry.register({\n\t\t\tname,\n\t\t\t...transformer\n\t\t});\n\t}\n\tallowErrorProps(...props) {\n\t\tthis.allowedErrorProps.push(...props);\n\t}\n};\nSuperJSON.defaultInstance = new SuperJSON();\nSuperJSON.serialize = SuperJSON.defaultInstance.serialize.bind(SuperJSON.defaultInstance);\nSuperJSON.deserialize = SuperJSON.defaultInstance.deserialize.bind(SuperJSON.defaultInstance);\nSuperJSON.stringify = SuperJSON.defaultInstance.stringify.bind(SuperJSON.defaultInstance);\nSuperJSON.parse = SuperJSON.defaultInstance.parse.bind(SuperJSON.defaultInstance);\nSuperJSON.registerClass = SuperJSON.defaultInstance.registerClass.bind(SuperJSON.defaultInstance);\nSuperJSON.registerSymbol = SuperJSON.defaultInstance.registerSymbol.bind(SuperJSON.defaultInstance);\nSuperJSON.registerCustom = SuperJSON.defaultInstance.registerCustom.bind(SuperJSON.defaultInstance);\nSuperJSON.allowErrorProps = SuperJSON.defaultInstance.allowErrorProps.bind(SuperJSON.defaultInstance);\nSuperJSON.serialize;\nSuperJSON.deserialize;\nSuperJSON.stringify;\nSuperJSON.parse;\nSuperJSON.registerClass;\nSuperJSON.registerCustom;\nSuperJSON.registerSymbol;\nSuperJSON.allowErrorProps;\n//#endregion\n//#region src/messaging/presets/broadcast-channel/context.ts\nconst __DEVTOOLS_KIT_BROADCAST_MESSAGING_EVENT_KEY = \"__devtools-kit-broadcast-messaging-event-key__\";\n//#endregion\n//#region src/messaging/presets/broadcast-channel/index.ts\nconst BROADCAST_CHANNEL_NAME = \"__devtools-kit:broadcast-channel__\";\nfunction createBroadcastChannel() {\n\tconst channel = new BroadcastChannel(BROADCAST_CHANNEL_NAME);\n\treturn {\n\t\tpost: (data) => {\n\t\t\tchannel.postMessage(SuperJSON.stringify({\n\t\t\t\tevent: __DEVTOOLS_KIT_BROADCAST_MESSAGING_EVENT_KEY,\n\t\t\t\tdata\n\t\t\t}));\n\t\t},\n\t\ton: (handler) => {\n\t\t\tchannel.onmessage = (event) => {\n\t\t\t\tconst parsed = SuperJSON.parse(event.data);\n\t\t\t\tif (parsed.event === \"__devtools-kit-broadcast-messaging-event-key__\") handler(parsed.data);\n\t\t\t};\n\t\t}\n\t};\n}\n//#endregion\n//#region src/messaging/presets/electron/context.ts\nconst __ELECTRON_CLIENT_CONTEXT__ = \"electron:client-context\";\nconst __ELECTRON_RPOXY_CONTEXT__ = \"electron:proxy-context\";\nconst __ELECTRON_SERVER_CONTEXT__ = \"electron:server-context\";\nconst __DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__ = {\n\tCLIENT_TO_PROXY: \"client->proxy\",\n\tPROXY_TO_CLIENT: \"proxy->client\",\n\tPROXY_TO_SERVER: \"proxy->server\",\n\tSERVER_TO_PROXY: \"server->proxy\"\n};\nfunction getElectronClientContext() {\n\treturn target[__ELECTRON_CLIENT_CONTEXT__];\n}\nfunction setElectronClientContext(context) {\n\ttarget[__ELECTRON_CLIENT_CONTEXT__] = context;\n}\nfunction getElectronProxyContext() {\n\treturn target[__ELECTRON_RPOXY_CONTEXT__];\n}\nfunction setElectronProxyContext(context) {\n\ttarget[__ELECTRON_RPOXY_CONTEXT__] = context;\n}\nfunction getElectronServerContext() {\n\treturn target[__ELECTRON_SERVER_CONTEXT__];\n}\nfunction setElectronServerContext(context) {\n\ttarget[__ELECTRON_SERVER_CONTEXT__] = context;\n}\n//#endregion\n//#region src/messaging/presets/electron/client.ts\nfunction createElectronClientChannel() {\n\tconst socket = getElectronClientContext();\n\treturn {\n\t\tpost: (data) => {\n\t\t\tsocket.emit(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.CLIENT_TO_PROXY, SuperJSON.stringify(data));\n\t\t},\n\t\ton: (handler) => {\n\t\t\tsocket.on(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.PROXY_TO_CLIENT, (e) => {\n\t\t\t\thandler(SuperJSON.parse(e));\n\t\t\t});\n\t\t}\n\t};\n}\n//#endregion\n//#region src/messaging/presets/electron/proxy.ts\nfunction createElectronProxyChannel() {\n\tconst socket = getElectronProxyContext();\n\treturn {\n\t\tpost: (data) => {},\n\t\ton: (handler) => {\n\t\t\tsocket.on(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.SERVER_TO_PROXY, (data) => {\n\t\t\t\tsocket.broadcast.emit(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.PROXY_TO_CLIENT, data);\n\t\t\t});\n\t\t\tsocket.on(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.CLIENT_TO_PROXY, (data) => {\n\t\t\t\tsocket.broadcast.emit(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.PROXY_TO_SERVER, data);\n\t\t\t});\n\t\t}\n\t};\n}\n//#endregion\n//#region src/messaging/presets/electron/server.ts\nfunction createElectronServerChannel() {\n\tconst socket = getElectronServerContext();\n\treturn {\n\t\tpost: (data) => {\n\t\t\tsocket.emit(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.SERVER_TO_PROXY, SuperJSON.stringify(data));\n\t\t},\n\t\ton: (handler) => {\n\t\t\tsocket.on(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.PROXY_TO_SERVER, (data) => {\n\t\t\t\thandler(SuperJSON.parse(data));\n\t\t\t});\n\t\t}\n\t};\n}\n//#endregion\n//#region src/messaging/presets/extension/context.ts\nconst __EXTENSION_CLIENT_CONTEXT__ = \"electron:client-context\";\nconst __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__ = {\n\tCLIENT_TO_PROXY: \"client->proxy\",\n\tPROXY_TO_CLIENT: \"proxy->client\",\n\tPROXY_TO_SERVER: \"proxy->server\",\n\tSERVER_TO_PROXY: \"server->proxy\"\n};\nfunction getExtensionClientContext() {\n\treturn target[__EXTENSION_CLIENT_CONTEXT__];\n}\nfunction setExtensionClientContext(context) {\n\ttarget[__EXTENSION_CLIENT_CONTEXT__] = context;\n}\n//#endregion\n//#region src/messaging/presets/extension/client.ts\nfunction createExtensionClientChannel() {\n\tlet disconnected = false;\n\tlet port = null;\n\tlet reconnectTimer = null;\n\tlet onMessageHandler = null;\n\tfunction connect() {\n\t\ttry {\n\t\t\tclearTimeout(reconnectTimer);\n\t\t\tport = chrome.runtime.connect({ name: `${chrome.devtools.inspectedWindow.tabId}` });\n\t\t\tsetExtensionClientContext(port);\n\t\t\tdisconnected = false;\n\t\t\tport?.onMessage.addListener(onMessageHandler);\n\t\t\tport.onDisconnect.addListener(() => {\n\t\t\t\tdisconnected = true;\n\t\t\t\tport?.onMessage.removeListener(onMessageHandler);\n\t\t\t\treconnectTimer = setTimeout(connect, 1e3);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tdisconnected = true;\n\t\t}\n\t}\n\tconnect();\n\treturn {\n\t\tpost: (data) => {\n\t\t\tif (disconnected) return;\n\t\t\tport?.postMessage(SuperJSON.stringify(data));\n\t\t},\n\t\ton: (handler) => {\n\t\t\tonMessageHandler = (data) => {\n\t\t\t\tif (disconnected) return;\n\t\t\t\thandler(SuperJSON.parse(data));\n\t\t\t};\n\t\t\tport?.onMessage.addListener(onMessageHandler);\n\t\t}\n\t};\n}\n//#endregion\n//#region src/messaging/presets/extension/proxy.ts\nfunction createExtensionProxyChannel() {\n\tconst port = chrome.runtime.connect({ name: \"content-script\" });\n\tfunction sendMessageToUserApp(payload) {\n\t\twindow.postMessage({\n\t\t\tsource: __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__.PROXY_TO_SERVER,\n\t\t\tpayload\n\t\t}, \"*\");\n\t}\n\tfunction sendMessageToDevToolsClient(e) {\n\t\tif (e.data && e.data.source === __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__.SERVER_TO_PROXY) try {\n\t\t\tport.postMessage(e.data.payload);\n\t\t} catch (e) {}\n\t}\n\tport.onMessage.addListener(sendMessageToUserApp);\n\twindow.addEventListener(\"message\", sendMessageToDevToolsClient);\n\tport.onDisconnect.addListener(() => {\n\t\twindow.removeEventListener(\"message\", sendMessageToDevToolsClient);\n\t\tsendMessageToUserApp(SuperJSON.stringify({ event: \"shutdown\" }));\n\t});\n\tsendMessageToUserApp(SuperJSON.stringify({ event: \"init\" }));\n\treturn {\n\t\tpost: (data) => {},\n\t\ton: (handler) => {}\n\t};\n}\n//#endregion\n//#region src/messaging/presets/extension/server.ts\nfunction createExtensionServerChannel() {\n\treturn {\n\t\tpost: (data) => {\n\t\t\twindow.postMessage({\n\t\t\t\tsource: __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__.SERVER_TO_PROXY,\n\t\t\t\tpayload: SuperJSON.stringify(data)\n\t\t\t}, \"*\");\n\t\t},\n\t\ton: (handler) => {\n\t\t\tconst listener = (event) => {\n\t\t\t\tif (event.data.source === __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__.PROXY_TO_SERVER && event.data.payload) handler(SuperJSON.parse(event.data.payload));\n\t\t\t};\n\t\t\twindow.addEventListener(\"message\", listener);\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"message\", listener);\n\t\t\t};\n\t\t}\n\t};\n}\n//#endregion\n//#region src/messaging/presets/iframe/context.ts\nconst __DEVTOOLS_KIT_IFRAME_MESSAGING_EVENT_KEY = \"__devtools-kit-iframe-messaging-event-key__\";\nconst __IFRAME_SERVER_CONTEXT__ = \"iframe:server-context\";\nfunction getIframeServerContext() {\n\treturn target[__IFRAME_SERVER_CONTEXT__];\n}\nfunction setIframeServerContext(context) {\n\ttarget[__IFRAME_SERVER_CONTEXT__] = context;\n}\n//#endregion\n//#region src/messaging/presets/iframe/client.ts\nfunction createIframeClientChannel() {\n\tif (!isBrowser) return {\n\t\tpost: (data) => {},\n\t\ton: (handler) => {}\n\t};\n\treturn {\n\t\tpost: (data) => window.parent.postMessage(SuperJSON.stringify({\n\t\t\tevent: __DEVTOOLS_KIT_IFRAME_MESSAGING_EVENT_KEY,\n\t\t\tdata\n\t\t}), \"*\"),\n\t\ton: (handler) => window.addEventListener(\"message\", (event) => {\n\t\t\ttry {\n\t\t\t\tconst parsed = SuperJSON.parse(event.data);\n\t\t\t\tif (event.source === window.parent && parsed.event === \"__devtools-kit-iframe-messaging-event-key__\") handler(parsed.data);\n\t\t\t} catch (e) {}\n\t\t})\n\t};\n}\n//#endregion\n//#region src/messaging/presets/iframe/server.ts\nfunction createIframeServerChannel() {\n\tif (!isBrowser) return {\n\t\tpost: (data) => {},\n\t\ton: (handler) => {}\n\t};\n\treturn {\n\t\tpost: (data) => {\n\t\t\tgetIframeServerContext()?.contentWindow?.postMessage(SuperJSON.stringify({\n\t\t\t\tevent: __DEVTOOLS_KIT_IFRAME_MESSAGING_EVENT_KEY,\n\t\t\t\tdata\n\t\t\t}), \"*\");\n\t\t},\n\t\ton: (handler) => {\n\t\t\twindow.addEventListener(\"message\", (event) => {\n\t\t\t\tconst iframe = getIframeServerContext();\n\t\t\t\ttry {\n\t\t\t\t\tconst parsed = SuperJSON.parse(event.data);\n\t\t\t\t\tif (event.source === iframe?.contentWindow && parsed.event === \"__devtools-kit-iframe-messaging-event-key__\") handler(parsed.data);\n\t\t\t\t} catch (e) {}\n\t\t\t});\n\t\t}\n\t};\n}\n//#endregion\n//#region src/messaging/presets/vite/context.ts\nconst __DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY = \"__devtools-kit-vite-messaging-event-key__\";\nconst __VITE_CLIENT_CONTEXT__ = \"vite:client-context\";\nconst __VITE_SERVER_CONTEXT__ = \"vite:server-context\";\nfunction getViteClientContext() {\n\treturn target[__VITE_CLIENT_CONTEXT__];\n}\nfunction setViteClientContext(context) {\n\ttarget[__VITE_CLIENT_CONTEXT__] = context;\n}\nfunction getViteServerContext() {\n\treturn target[__VITE_SERVER_CONTEXT__];\n}\nfunction setViteServerContext(context) {\n\ttarget[__VITE_SERVER_CONTEXT__] = context;\n}\n//#endregion\n//#region src/messaging/presets/vite/client.ts\nfunction createViteClientChannel() {\n\tconst client = getViteClientContext();\n\treturn {\n\t\tpost: (data) => {\n\t\t\tclient?.send(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, SuperJSON.stringify(data));\n\t\t},\n\t\ton: (handler) => {\n\t\t\tclient?.on(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, (event) => {\n\t\t\t\thandler(SuperJSON.parse(event));\n\t\t\t});\n\t\t}\n\t};\n}\n//#endregion\n//#region src/messaging/presets/vite/server.ts\nfunction createViteServerChannel() {\n\tconst viteServer = getViteServerContext();\n\tconst ws = viteServer.hot ?? viteServer.ws;\n\treturn {\n\t\tpost: (data) => ws?.send(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, SuperJSON.stringify(data)),\n\t\ton: (handler) => ws?.on(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, (event) => {\n\t\t\thandler(SuperJSON.parse(event));\n\t\t})\n\t};\n}\n//#endregion\n//#region src/messaging/index.ts\ntarget.__VUE_DEVTOOLS_KIT_MESSAGE_CHANNELS__ ??= [];\ntarget.__VUE_DEVTOOLS_KIT_RPC_CLIENT__ ??= null;\ntarget.__VUE_DEVTOOLS_KIT_RPC_SERVER__ ??= null;\ntarget.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__ ??= null;\ntarget.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__ ??= null;\ntarget.__VUE_DEVTOOLS_KIT_BROADCAST_RPC_SERVER__ ??= null;\nfunction setRpcClientToGlobal(rpc) {\n\ttarget.__VUE_DEVTOOLS_KIT_RPC_CLIENT__ = rpc;\n}\nfunction setRpcServerToGlobal(rpc) {\n\ttarget.__VUE_DEVTOOLS_KIT_RPC_SERVER__ = rpc;\n}\nfunction getRpcClient() {\n\treturn target.__VUE_DEVTOOLS_KIT_RPC_CLIENT__;\n}\nfunction getRpcServer() {\n\treturn target.__VUE_DEVTOOLS_KIT_RPC_SERVER__;\n}\nfunction setViteRpcClientToGlobal(rpc) {\n\ttarget.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__ = rpc;\n}\nfunction setViteRpcServerToGlobal(rpc) {\n\ttarget.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__ = rpc;\n}\nfunction getViteRpcClient() {\n\treturn target.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__;\n}\nfunction getViteRpcServer() {\n\treturn target.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__;\n}\nfunction getChannel(preset, host = \"client\") {\n\tconst channel = {\n\t\tiframe: {\n\t\t\tclient: createIframeClientChannel,\n\t\t\tserver: createIframeServerChannel\n\t\t}[host],\n\t\telectron: {\n\t\t\tclient: createElectronClientChannel,\n\t\t\tproxy: createElectronProxyChannel,\n\t\t\tserver: createElectronServerChannel\n\t\t}[host],\n\t\tvite: {\n\t\t\tclient: createViteClientChannel,\n\t\t\tserver: createViteServerChannel\n\t\t}[host],\n\t\tbroadcast: {\n\t\t\tclient: createBroadcastChannel,\n\t\t\tserver: createBroadcastChannel\n\t\t}[host],\n\t\textension: {\n\t\t\tclient: createExtensionClientChannel,\n\t\t\tproxy: createExtensionProxyChannel,\n\t\t\tserver: createExtensionServerChannel\n\t\t}[host]\n\t}[preset];\n\treturn channel();\n}\nfunction createRpcClient(functions, options = {}) {\n\tconst { channel: _channel, options: _options, preset } = options;\n\tconst channel = preset ? getChannel(preset) : _channel;\n\tconst rpc = createBirpc(functions, {\n\t\t..._options,\n\t\t...channel,\n\t\ttimeout: -1\n\t});\n\tif (preset === \"vite\") {\n\t\tsetViteRpcClientToGlobal(rpc);\n\t\treturn;\n\t}\n\tsetRpcClientToGlobal(rpc);\n\treturn rpc;\n}\nfunction createRpcServer(functions, options = {}) {\n\tconst { channel: _channel, options: _options, preset } = options;\n\tconst channel = preset ? getChannel(preset, \"server\") : _channel;\n\tconst rpcServer = getRpcServer();\n\tif (!rpcServer) {\n\t\tconst group = createBirpcGroup(functions, [channel], {\n\t\t\t..._options,\n\t\t\ttimeout: -1\n\t\t});\n\t\tif (preset === \"vite\") {\n\t\t\tsetViteRpcServerToGlobal(group);\n\t\t\treturn;\n\t\t}\n\t\tsetRpcServerToGlobal(group);\n\t} else rpcServer.updateChannels((channels) => {\n\t\tchannels.push(channel);\n\t});\n}\nfunction createRpcProxy(options = {}) {\n\tconst { channel: _channel, options: _options, preset } = options;\n\tconst channel = preset ? getChannel(preset, \"proxy\") : _channel;\n\treturn createBirpc({}, {\n\t\t..._options,\n\t\t...channel,\n\t\ttimeout: -1\n\t});\n}\n//#endregion\n//#region src/core/component/state/custom.ts\nfunction getFunctionDetails(func) {\n\tlet string = \"\";\n\tlet matches = null;\n\ttry {\n\t\tstring = Function.prototype.toString.call(func);\n\t\tmatches = String.prototype.match.call(string, /\\([\\s\\S]*?\\)/);\n\t} catch (e) {}\n\tconst match = matches && matches[0];\n\tconst args = typeof match === \"string\" ? match : \"(?)\";\n\treturn { _custom: {\n\t\ttype: \"function\",\n\t\tdisplayText: `<span style=\"opacity:.8;margin-right:5px;\">function</span> <span style=\"white-space:nowrap;\">${escape(typeof func.name === \"string\" ? func.name : \"\")}${args}</span>`,\n\t\ttooltipText: string.trim() ? `<pre>${escape(string)}</pre>` : null\n\t} };\n}\nfunction getBigIntDetails(val) {\n\tconst stringifiedBigInt = BigInt.prototype.toString.call(val);\n\treturn { _custom: {\n\t\ttype: \"bigint\",\n\t\tdisplayText: `BigInt(${stringifiedBigInt})`,\n\t\tvalue: stringifiedBigInt\n\t} };\n}\nfunction getDateDetails(val) {\n\tconst date = new Date(val.getTime());\n\tdate.setMinutes(date.getMinutes() - date.getTimezoneOffset());\n\treturn { _custom: {\n\t\ttype: \"date\",\n\t\tdisplayText: Date.prototype.toString.call(val),\n\t\tvalue: date.toISOString().slice(0, -1)\n\t} };\n}\nfunction getMapDetails(val) {\n\treturn { _custom: {\n\t\ttype: \"map\",\n\t\tdisplayText: \"Map\",\n\t\tvalue: Object.fromEntries(val),\n\t\treadOnly: true,\n\t\tfields: { abstract: true }\n\t} };\n}\nfunction getSetDetails(val) {\n\tconst list = Array.from(val);\n\treturn { _custom: {\n\t\ttype: \"set\",\n\t\tdisplayText: `Set[${list.length}]`,\n\t\tvalue: list,\n\t\treadOnly: true\n\t} };\n}\nfunction getCaughtGetters(store) {\n\tconst getters = {};\n\tconst origGetters = store.getters || {};\n\tconst keys = Object.keys(origGetters);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key = keys[i];\n\t\tObject.defineProperty(getters, key, {\n\t\t\tenumerable: true,\n\t\t\tget: () => {\n\t\t\t\ttry {\n\t\t\t\t\treturn origGetters[key];\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn e;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn getters;\n}\nfunction reduceStateList(list) {\n\tif (!list.length) return void 0;\n\treturn list.reduce((map, item) => {\n\t\tconst key = item.type || \"data\";\n\t\tconst obj = map[key] = map[key] || {};\n\t\tobj[item.key] = item.value;\n\t\treturn map;\n\t}, {});\n}\nfunction namedNodeMapToObject(map) {\n\tconst result = {};\n\tconst l = map.length;\n\tfor (let i = 0; i < l; i++) {\n\t\tconst node = map.item(i);\n\t\tresult[node.name] = node.value;\n\t}\n\treturn result;\n}\nfunction getStoreDetails(store) {\n\treturn { _custom: {\n\t\ttype: \"store\",\n\t\tdisplayText: \"Store\",\n\t\tvalue: {\n\t\t\tstate: store.state,\n\t\t\tgetters: getCaughtGetters(store)\n\t\t},\n\t\tfields: { abstract: true }\n\t} };\n}\nfunction getInstanceDetails(instance) {\n\tif (instance._) instance = instance._;\n\tconst state = processInstanceState(instance);\n\treturn { _custom: {\n\t\ttype: \"component\",\n\t\tid: instance.__VUE_DEVTOOLS_NEXT_UID__,\n\t\tdisplayText: getInstanceName(instance),\n\t\ttooltipText: \"Component instance\",\n\t\tvalue: reduceStateList(state),\n\t\tfields: { abstract: true }\n\t} };\n}\nfunction getComponentDefinitionDetails(definition) {\n\tlet display = getComponentName(definition);\n\tif (display) {\n\t\tif (definition.name && definition.__file) display += ` <span>(${definition.__file})</span>`;\n\t} else display = \"<i>Unknown Component</i>\";\n\treturn { _custom: {\n\t\ttype: \"component-definition\",\n\t\tdisplayText: display,\n\t\ttooltipText: \"Component definition\",\n\t\t...definition.__file ? { file: definition.__file } : {}\n\t} };\n}\nfunction getHTMLElementDetails(value) {\n\ttry {\n\t\treturn { _custom: {\n\t\t\ttype: \"HTMLElement\",\n\t\t\tdisplayText: `<span class=\"opacity-30\"><</span><span class=\"text-blue-500\">${value.tagName.toLowerCase()}</span><span class=\"opacity-30\">></span>`,\n\t\t\tvalue: namedNodeMapToObject(value.attributes)\n\t\t} };\n\t} catch (e) {\n\t\treturn { _custom: {\n\t\t\ttype: \"HTMLElement\",\n\t\t\tdisplayText: `<span class=\"text-blue-500\">${String(value)}</span>`\n\t\t} };\n\t}\n}\n/**\n* - ObjectRefImpl, toRef({ foo: 'foo' }, 'foo'), `_value` is the actual value, (since 3.5.0)\n* - GetterRefImpl, toRef(() => state.foo), `_value` is the actual value, (since 3.5.0)\n* - RefImpl, ref('foo') / computed(() => 'foo'), `_value` is the actual value\n*/\nfunction tryGetRefValue(ref) {\n\tif (ensurePropertyExists(ref, \"_value\", true)) return ref._value;\n\tif (ensurePropertyExists(ref, \"value\", true)) return ref.value;\n}\nfunction getObjectDetails(object) {\n\tconst info = getSetupStateType(object);\n\tif (info.ref || info.computed || info.reactive) {\n\t\tconst stateTypeName = info.computed ? \"Computed\" : info.ref ? \"Ref\" : info.reactive ? \"Reactive\" : null;\n\t\tconst value = toRaw(info.reactive ? object : tryGetRefValue(object));\n\t\tconst raw = ensurePropertyExists(object, \"effect\") ? object.effect?.raw?.toString() || object.effect?.fn?.toString() : null;\n\t\treturn { _custom: {\n\t\t\ttype: stateTypeName?.toLowerCase(),\n\t\t\tstateTypeName,\n\t\t\tvalue,\n\t\t\t...raw ? { tooltipText: `<pre>${escape(raw)}</pre>` } : {}\n\t\t} };\n\t}\n\tif (ensurePropertyExists(object, \"__asyncLoader\") && typeof object.__asyncLoader === \"function\") return { _custom: {\n\t\ttype: \"component-definition\",\n\t\tdisplay: \"Async component definition\"\n\t} };\n}\n//#endregion\n//#region src/core/component/state/replacer.ts\nfunction stringifyReplacer(key, _value, depth, seenInstance) {\n\tif (key === \"compilerOptions\") return;\n\tconst val = this[key];\n\tconst type = typeof val;\n\tif (Array.isArray(val)) {\n\t\tconst l = val.length;\n\t\tif (l > 5e3) return {\n\t\t\t_isArray: true,\n\t\t\tlength: l,\n\t\t\titems: val.slice(0, MAX_ARRAY_SIZE)\n\t\t};\n\t\treturn val;\n\t} else if (typeof val === \"string\") if (val.length > 1e4) return `${val.substring(0, MAX_STRING_SIZE)}... (${val.length} total length)`;\n\telse return val;\n\telse if (type === \"undefined\") return UNDEFINED;\n\telse if (val === Number.POSITIVE_INFINITY) return INFINITY;\n\telse if (val === Number.NEGATIVE_INFINITY) return NEGATIVE_INFINITY;\n\telse if (typeof val === \"function\") return getFunctionDetails(val);\n\telse if (type === \"symbol\") return `[native Symbol ${Symbol.prototype.toString.call(val)}]`;\n\telse if (typeof val === \"bigint\") return getBigIntDetails(val);\n\telse if (val !== null && typeof val === \"object\") {\n\t\tconst proto = Object.prototype.toString.call(val);\n\t\tif (proto === \"[object Map]\") return getMapDetails(val);\n\t\telse if (proto === \"[object Set]\") return getSetDetails(val);\n\t\telse if (proto === \"[object RegExp]\") return `[native RegExp ${RegExp.prototype.toString.call(val)}]`;\n\t\telse if (proto === \"[object Date]\") return getDateDetails(val);\n\t\telse if (proto === \"[object Error]\") return `[native Error ${val.message}<>${val.stack}]`;\n\t\telse if (ensurePropertyExists(val, \"state\", true) && ensurePropertyExists(val, \"_vm\", true)) return getStoreDetails(val);\n\t\telse if (isVueInstance(val)) {\n\t\t\tconst componentVal = getInstanceDetails(val);\n\t\t\tconst parentInstanceDepth = seenInstance?.get(val);\n\t\t\tif (parentInstanceDepth && parentInstanceDepth < depth) return `[[CircularRef]] <${componentVal._custom.displayText}>`;\n\t\t\tseenInstance?.set(val, depth);\n\t\t\treturn componentVal;\n\t\t} else if (ensurePropertyExists(val, \"render\", true) && typeof val.render === \"function\") return getComponentDefinitionDetails(val);\n\t\telse if (val.constructor && val.constructor.name === \"VNode\") return `[native VNode <${val.tag}>]`;\n\t\telse if (typeof HTMLElement !== \"undefined\" && val instanceof HTMLElement) return getHTMLElementDetails(val);\n\t\telse if (val.constructor?.name === \"Store\" && \"_wrappedGetters\" in val) return \"[object Store]\";\n\t\tconst customDetails = getObjectDetails(val);\n\t\tif (customDetails != null) return customDetails;\n\t} else if (Number.isNaN(val)) return NAN;\n\treturn sanitize(val);\n}\n//#endregion\n//#region src/shared/transfer.ts\nconst MAX_SERIALIZED_SIZE = 2 * 1024 * 1024;\nfunction isObject(_data, proto) {\n\treturn proto === \"[object Object]\";\n}\nfunction isArray(_data, proto) {\n\treturn proto === \"[object Array]\";\n}\nfunction isVueReactiveLinkNode(node) {\n\tconst constructorName = node?.constructor?.name;\n\treturn constructorName === \"Dep\" && \"activeLink\" in node || constructorName === \"Link\" && \"dep\" in node;\n}\n/**\n* This function is used to serialize object with handling circular references.\n*\n* ```ts\n* const obj = { a: 1, b: { c: 2 }, d: obj }\n* const result = stringifyCircularAutoChunks(obj) // call `encode` inside\n* console.log(result) // [{\"a\":1,\"b\":2,\"d\":0},1,{\"c\":4},2]\n* ```\n*\n* Each object is stored in a list and the index is used to reference the object.\n* With seen map, we can check if the object is already stored in the list to avoid circular references.\n*\n* Note: here we have a special case for Vue instance.\n* We check if a vue instance includes itself in its properties and skip it\n* by using `seenVueInstance` and `depth` to avoid infinite loop.\n*/\nfunction encode(data, replacer, list, seen, depth = 0, seenVueInstance = /* @__PURE__ */ new Map()) {\n\tlet stored;\n\tlet key;\n\tlet value;\n\tlet i;\n\tlet l;\n\tconst seenIndex = seen.get(data);\n\tif (seenIndex != null) return seenIndex;\n\tconst index = list.length;\n\tconst proto = Object.prototype.toString.call(data);\n\tif (isObject(data, proto)) {\n\t\tif (isVueReactiveLinkNode(data)) return index;\n\t\tstored = {};\n\t\tseen.set(data, index);\n\t\tlist.push(stored);\n\t\tconst keys = Object.keys(data);\n\t\tfor (i = 0, l = keys.length; i < l; i++) {\n\t\t\tkey = keys[i];\n\t\t\tif (key === \"compilerOptions\") return index;\n\t\t\tvalue = data[key];\n\t\t\tconst isVm = value != null && isObject(value, Object.prototype.toString.call(data)) && isVueInstance(value);\n\t\t\ttry {\n\t\t\t\tif (replacer) value = replacer.call(data, key, value, depth, seenVueInstance);\n\t\t\t} catch (e) {\n\t\t\t\tvalue = e;\n\t\t\t}\n\t\t\tstored[key] = encode(value, replacer, list, seen, depth + 1, seenVueInstance);\n\t\t\tif (isVm) seenVueInstance.delete(value);\n\t\t}\n\t} else if (isArray(data, proto)) {\n\t\tstored = [];\n\t\tseen.set(data, index);\n\t\tlist.push(stored);\n\t\tfor (i = 0, l = data.length; i < l; i++) {\n\t\t\ttry {\n\t\t\t\tvalue = data[i];\n\t\t\t\tif (replacer) value = replacer.call(data, i, value, depth, seenVueInstance);\n\t\t\t} catch (e) {\n\t\t\t\tvalue = e;\n\t\t\t}\n\t\t\tstored[i] = encode(value, replacer, list, seen, depth + 1, seenVueInstance);\n\t\t}\n\t} else list.push(data);\n\treturn index;\n}\nfunction decode(list, reviver = null) {\n\tlet i = list.length;\n\tlet j, k, data, key, value, proto;\n\twhile (i--) {\n\t\tdata = list[i];\n\t\tproto = Object.prototype.toString.call(data);\n\t\tif (proto === \"[object Object]\") {\n\t\t\tconst keys = Object.keys(data);\n\t\t\tfor (j = 0, k = keys.length; j < k; j++) {\n\t\t\t\tkey = keys[j];\n\t\t\t\tvalue = list[data[key]];\n\t\t\t\tif (reviver) value = reviver.call(data, key, value);\n\t\t\t\tdata[key] = value;\n\t\t\t}\n\t\t} else if (proto === \"[object Array]\") for (j = 0, k = data.length; j < k; j++) {\n\t\t\tvalue = list[data[j]];\n\t\t\tif (reviver) value = reviver.call(data, j, value);\n\t\t\tdata[j] = value;\n\t\t}\n\t}\n}\nfunction stringifyCircularAutoChunks(data, replacer = null, space = null) {\n\tlet result;\n\ttry {\n\t\tresult = arguments.length === 1 ? JSON.stringify(data) : JSON.stringify(data, (k, v) => replacer?.(k, v)?.call(this), space);\n\t} catch (e) {\n\t\tresult = stringifyStrictCircularAutoChunks(data, replacer, space);\n\t}\n\tif (result.length > MAX_SERIALIZED_SIZE) {\n\t\tconst chunkCount = Math.ceil(result.length / MAX_SERIALIZED_SIZE);\n\t\tconst chunks = [];\n\t\tfor (let i = 0; i < chunkCount; i++) chunks.push(result.slice(i * MAX_SERIALIZED_SIZE, (i + 1) * MAX_SERIALIZED_SIZE));\n\t\treturn chunks;\n\t}\n\treturn result;\n}\nfunction stringifyStrictCircularAutoChunks(data, replacer = null, space = null) {\n\tconst list = [];\n\tencode(data, replacer, list, /* @__PURE__ */ new Map());\n\treturn space ? ` ${JSON.stringify(list, null, space)}` : ` ${JSON.stringify(list)}`;\n}\nfunction parseCircularAutoChunks(data, reviver = null) {\n\tif (Array.isArray(data)) data = data.join(\"\");\n\tif (!/^\\s/.test(data)) return arguments.length === 1 ? JSON.parse(data) : JSON.parse(data, reviver);\n\telse {\n\t\tconst list = JSON.parse(data);\n\t\tdecode(list, reviver);\n\t\treturn list[0];\n\t}\n}\n//#endregion\n//#region src/shared/util.ts\nfunction stringify(data) {\n\treturn stringifyCircularAutoChunks(data, stringifyReplacer);\n}\nfunction parse(data, revive = false) {\n\tif (data == void 0) return {};\n\treturn revive ? parseCircularAutoChunks(data, reviver) : parseCircularAutoChunks(data);\n}\n//#endregion\n//#region src/index.ts\nconst devtools = {\n\thook,\n\tinit: () => {\n\t\tinitDevTools();\n\t},\n\tget ctx() {\n\t\treturn devtoolsContext;\n\t},\n\tget api() {\n\t\treturn devtoolsContext.api;\n\t}\n};\n//#endregion\nexport { DevToolsContextHookKeys, DevToolsMessagingHookKeys, DevToolsV6PluginAPIHookKeys, INFINITY, NAN, NEGATIVE_INFINITY, ROUTER_INFO_KEY, ROUTER_KEY, UNDEFINED, activeAppRecord, addCustomCommand, addCustomTab, addDevToolsAppRecord, addDevToolsPluginToBuffer, addInspector, callConnectedUpdatedHook, callDevToolsPluginSetupFn, callInspectorUpdatedHook, callStateUpdatedHook, createComponentsDevToolsPlugin, createDevToolsApi, createDevToolsCtxHooks, createRpcClient, createRpcProxy, createRpcServer, devtools, devtoolsAppRecords, devtoolsContext, devtoolsInspector, devtoolsPluginBuffer, devtoolsRouter, devtoolsRouterInfo, devtoolsState, escape, formatInspectorStateValue, getActiveInspectors, getDevToolsEnv, getExtensionClientContext, getInspector, getInspectorActions, getInspectorInfo, getInspectorNodeActions, getInspectorStateValueType, getRaw, getRpcClient, getRpcServer, getViteRpcClient, getViteRpcServer, initDevTools, isPlainObject, onDevToolsClientConnected, onDevToolsConnected, parse, registerDevToolsPlugin, removeCustomCommand, removeDevToolsAppRecord, removeRegisteredPluginApp, resetDevToolsState, setActiveAppRecord, setActiveAppRecordId, setDevToolsEnv, setElectronClientContext, setElectronProxyContext, setElectronServerContext, setExtensionClientContext, setIframeServerContext, setOpenInEditorBaseUrl, setRpcServerToGlobal, setViteClientContext, setViteRpcClientToGlobal, setViteRpcServerToGlobal, setViteServerContext, setupDevToolsPlugin, stringify, toEdit, toSubmit, toggleClientConnected, toggleComponentInspectorEnabled, toggleHighPerfMode, updateDevToolsClientDetected, updateDevToolsState, updateTimelineLayersState };\n","/*!\n * pinia v4.0.3\n * (c) 2026 Eduardo San Martin Morote\n * @license MIT\n */\nimport { computed, effectScope, getCurrentInstance, getCurrentScope, hasInjectionContext, inject, isReactive, isReadonly, isRef, markRaw, nextTick, onScopeDispose, reactive, ref, toRaw, toRef, toRefs, unref, watch } from \"vue\";\nimport { createConsoleReporter, defineDiagnostics } from \"nostics\";\nimport { setupDevtoolsPlugin } from \"@vue/devtools-api\";\n//#region src/env.ts\nconst IS_CLIENT = typeof window !== \"undefined\";\n//#endregion\n//#region src/diagnostics.ts\n/**\n* Catalog of user-facing Pinia diagnostics. Each handle builds a diagnostic\n* and runs the reporters. All call sites are dev-only (`__DEV__` guarded or\n* HMR), so production builds drop the calls and tree-shake this catalog.\n*/\nconst diagnostics = /*#__PURE__*/ defineDiagnostics({\n\treporters: [/*#__PURE__*/ createConsoleReporter()],\n\tcodes: {\n\t\tPINIA_R1001: {\n\t\t\twhy: \"Directly pass all stores to \\\"mapStores()\\\" without putting them in an array. This will fail in production.\",\n\t\t\tfix: \"Replace mapStores([useAuthStore, useCartStore]) with mapStores(useAuthStore, useCartStore).\",\n\t\t\tdocs: \"https://pinia.vuejs.org/cookbook/options-api.html#Giving-access-to-the-whole-store\"\n\t\t},\n\t\tPINIA_R1002: {\n\t\t\twhy: (p) => `A getter cannot have the same name as another state property. Found \"${p.name}\" in store \"${p.id}\".`,\n\t\t\tfix: \"Rename either the getter or the state property.\",\n\t\t\tdocs: \"https://pinia.vuejs.org/core-concepts/getters.html#Accessing-other-getters\"\n\t\t},\n\t\tPINIA_R1003: {\n\t\t\twhy: (p) => `The \"state\" must be a plain object. Found in store \"${p.id}\".`,\n\t\t\tfix: \"Return a plain object, e.g. avoid state: () => new MyClass().\",\n\t\t\tdocs: \"https://pinia.vuejs.org/core-concepts/state.html#State\"\n\t\t},\n\t\tPINIA_R1004: {\n\t\t\twhy: \"Pinia instance not found in context. This falls back to the global activePinia, which exposes you to cross-request pollution on the server.\",\n\t\t\tfix: \"\\\"useStore()\\\" is a composable and follows the same rules: call it at the top of setup() (or another composable), or pass the pinia instance explicitly when used outside of a component.\",\n\t\t\tdocs: \"https://pinia.vuejs.org/ssr/#Using-the-store-outside-of-setup-\"\n\t\t},\n\t\tPINIA_R1005: {\n\t\t\twhy: (p) => `The store id changed from \"${p.from}\" to \"${p.to}\", forcing a reload.`,\n\t\t\tdocs: \"https://pinia.vuejs.org/cookbook/hot-module-replacement.html#HMR-Hot-Module-Replacement-\"\n\t\t},\n\t\tPINIA_R1006: {\n\t\t\twhy: (p) => `Property \"${p.key}\" of store \"${p.id}\" is not reactive (not a ref, reactive object, or shallowRef), so storeToRefs() ignores it.`,\n\t\t\tfix: \"If it should be reactive state, wrap it with ref(), reactive(), or shallowRef(). If it is an intentional non-reactive property, wrap it with markRaw() so storeToRefs() skips it explicitly.\",\n\t\t\tdocs: \"https://pinia.vuejs.org/core-concepts/plugins.html#Adding-new-external-properties\"\n\t\t},\n\t\tPINIA_R1007: {\n\t\t\twhy: (p) => `The same callback was passed to \"$subscribe()\" of store \"${p.id}\" more than once. Subscriptions are deduplicated, so the duplicate is ignored.`,\n\t\t\tfix: \"Subscribe each callback only once. If you need to resubscribe, call the returned function to remove the previous subscription first, or create a new function.\",\n\t\t\tdocs: \"https://pinia.vuejs.org/core-concepts/state.html#Subscribing-to-the-state\"\n\t\t}\n\t}\n});\n//#endregion\n//#region src/rootStore.ts\n/**\n* setActivePinia must be called to handle SSR at the top of functions like\n* `fetch`, `setup`, `serverPrefetch` and others\n*/\nlet activePinia;\n/**\n* Sets or unsets the active pinia. Used in SSR and internally when calling\n* actions and getters\n*\n* @param pinia - Pinia instance\n*/\nconst setActivePinia = (pinia) => activePinia = pinia;\n/**\n* Get the currently active pinia if there is any.\n*/\nconst getActivePinia = process.env.NODE_ENV !== \"production\" ? () => {\n\tconst pinia = hasInjectionContext() && inject(piniaSymbol);\n\tif (!pinia && !IS_CLIENT) diagnostics.PINIA_R1004({}, { method: \"error\" });\n\treturn pinia || activePinia;\n} : () => hasInjectionContext() && inject(piniaSymbol) || activePinia;\n/**\n* Symbol used to provide/inject the pinia instance in the app. Used internally\n* and exposed for testing purposes and edge cases like storybook. Could break\n* in a minor, **USE AT YOUR OWN RISK**.\n*\n* For context, see:\n* - https://github.com/vuejs/pinia/issues/870\n* - https://github.com/vuejs/pinia/pull/2973\n*\n* @internal\n*/\nconst piniaSymbol = process.env.NODE_ENV !== \"production\" ? Symbol(\"pinia\") : /* istanbul ignore next */ Symbol();\n//#endregion\n//#region src/types.ts\nfunction isPlainObject(o) {\n\treturn o && typeof o === \"object\" && Object.prototype.toString.call(o) === \"[object Object]\" && typeof o.toJSON !== \"function\";\n}\n/**\n* Possible types for SubscriptionCallback\n*/\nlet MutationType = /* @__PURE__ */ function(MutationType) {\n\t/**\n\t* Direct mutation of the state:\n\t*\n\t* - `store.name = 'new name'`\n\t* - `store.$state.name = 'new name'`\n\t* - `store.list.push('new item')`\n\t*/\n\tMutationType[\"direct\"] = \"direct\";\n\t/**\n\t* Mutated the state with `$patch` and an object\n\t*\n\t* - `store.$patch({ name: 'newName' })`\n\t*/\n\tMutationType[\"patchObject\"] = \"patch object\";\n\t/**\n\t* Mutated the state with `$patch` and a function\n\t*\n\t* - `store.$patch(state => state.name = 'newName')`\n\t*/\n\tMutationType[\"patchFunction\"] = \"patch function\";\n\treturn MutationType;\n}({});\n//#endregion\n//#region src/devtools/file-saver.ts\nconst _global = /*#__PURE__*/ (() => typeof window === \"object\" && window.window === window ? window : typeof self === \"object\" && self.self === self ? self : typeof global === \"object\" && global.global === global ? global : typeof globalThis === \"object\" ? globalThis : { HTMLElement: null })();\nfunction bom(blob, { autoBom = false } = {}) {\n\tif (autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) return new Blob([String.fromCharCode(65279), blob], { type: blob.type });\n\treturn blob;\n}\nfunction download(url, name, opts) {\n\tconst xhr = new XMLHttpRequest();\n\txhr.open(\"GET\", url);\n\txhr.responseType = \"blob\";\n\txhr.onload = function() {\n\t\tsaveAs(xhr.response, name, opts);\n\t};\n\txhr.onerror = function() {\n\t\tconsole.error(\"could not download file\");\n\t};\n\txhr.send();\n}\nfunction corsEnabled(url) {\n\tconst xhr = new XMLHttpRequest();\n\txhr.open(\"HEAD\", url, false);\n\ttry {\n\t\txhr.send();\n\t} catch (e) {}\n\treturn xhr.status >= 200 && xhr.status <= 299;\n}\nfunction click(node) {\n\ttry {\n\t\tnode.dispatchEvent(new MouseEvent(\"click\"));\n\t} catch (e) {\n\t\tconst evt = new MouseEvent(\"click\", {\n\t\t\tbubbles: true,\n\t\t\tcancelable: true,\n\t\t\tview: window,\n\t\t\tdetail: 0,\n\t\t\tscreenX: 80,\n\t\t\tscreenY: 20,\n\t\t\tclientX: 80,\n\t\t\tclientY: 20,\n\t\t\tctrlKey: false,\n\t\t\taltKey: false,\n\t\t\tshiftKey: false,\n\t\t\tmetaKey: false,\n\t\t\tbutton: 0,\n\t\t\trelatedTarget: null\n\t\t});\n\t\tnode.dispatchEvent(evt);\n\t}\n}\nconst _navigator = typeof navigator === \"object\" ? navigator : { userAgent: \"\" };\nconst isMacOSWebView = /*#__PURE__*/ (() => /Macintosh/.test(_navigator.userAgent) && /AppleWebKit/.test(_navigator.userAgent) && !/Safari/.test(_navigator.userAgent))();\nconst saveAs = !IS_CLIENT ? () => {} : typeof HTMLAnchorElement !== \"undefined\" && \"download\" in HTMLAnchorElement.prototype && !isMacOSWebView ? downloadSaveAs : \"msSaveOrOpenBlob\" in _navigator ? msSaveAs : fileSaverSaveAs;\nfunction downloadSaveAs(blob, name = \"download\", opts) {\n\tconst a = document.createElement(\"a\");\n\ta.download = name;\n\ta.rel = \"noopener\";\n\tif (typeof blob === \"string\") {\n\t\ta.href = blob;\n\t\tif (a.origin !== location.origin) if (corsEnabled(a.href)) download(blob, name, opts);\n\t\telse {\n\t\t\ta.target = \"_blank\";\n\t\t\tclick(a);\n\t\t}\n\t\telse click(a);\n\t} else {\n\t\ta.href = URL.createObjectURL(blob);\n\t\tsetTimeout(function() {\n\t\t\tURL.revokeObjectURL(a.href);\n\t\t}, 4e4);\n\t\tsetTimeout(function() {\n\t\t\tclick(a);\n\t\t}, 0);\n\t}\n}\nfunction msSaveAs(blob, name = \"download\", opts) {\n\tif (typeof blob === \"string\") if (corsEnabled(blob)) download(blob, name, opts);\n\telse {\n\t\tconst a = document.createElement(\"a\");\n\t\ta.href = blob;\n\t\ta.target = \"_blank\";\n\t\tsetTimeout(function() {\n\t\t\tclick(a);\n\t\t});\n\t}\n\telse navigator.msSaveOrOpenBlob(bom(blob, opts), name);\n}\nfunction fileSaverSaveAs(blob, name, opts, popup) {\n\tpopup = popup || open(\"\", \"_blank\");\n\tif (popup) popup.document.title = popup.document.body.innerText = \"downloading...\";\n\tif (typeof blob === \"string\") return download(blob, name, opts);\n\tconst force = blob.type === \"application/octet-stream\";\n\tconst isSafari = /constructor/i.test(String(_global.HTMLElement)) || \"safari\" in _global;\n\tconst isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\n\tif ((isChromeIOS || force && isSafari || isMacOSWebView) && typeof FileReader !== \"undefined\") {\n\t\tconst reader = new FileReader();\n\t\treader.onloadend = function() {\n\t\t\tlet url = reader.result;\n\t\t\tif (typeof url !== \"string\") {\n\t\t\t\tpopup = null;\n\t\t\t\tthrow new Error(\"Wrong reader.result type\");\n\t\t\t}\n\t\t\turl = isChromeIOS ? url : url.replace(/^data:[^;]*;/, \"data:attachment/file;\");\n\t\t\tif (popup) popup.location.href = url;\n\t\t\telse location.assign(url);\n\t\t\tpopup = null;\n\t\t};\n\t\treader.readAsDataURL(blob);\n\t} else {\n\t\tconst url = URL.createObjectURL(blob);\n\t\tif (popup) popup.location.assign(url);\n\t\telse location.href = url;\n\t\tpopup = null;\n\t\tsetTimeout(function() {\n\t\t\tURL.revokeObjectURL(url);\n\t\t}, 4e4);\n\t}\n}\n//#endregion\n//#region src/devtools/utils.ts\n/**\n* Shows a toast or console.log\n*\n* @param message - message to log\n* @param type - different color of the tooltip\n*/\nfunction toastMessage(message, type) {\n\tconst piniaMessage = \"🍍 \" + message;\n\tif (type === \"error\") console.error(piniaMessage);\n\telse if (type === \"warn\") console.warn(piniaMessage);\n\telse console.debug(piniaMessage);\n}\nfunction isPinia(o) {\n\treturn \"_a\" in o && \"install\" in o;\n}\n/**\n* Detects if a store getter is a writable computed (has a setter) so it can be\n* edited from devtools.\n*/\nfunction isWritableComputed(store, key) {\n\tconst rawProp = toRaw(store)[key];\n\treturn isRef(rawProp) && !isReadonly(rawProp);\n}\n//#endregion\n//#region src/devtools/actions.ts\n/**\n* This file contain devtools actions, they are not Pinia actions.\n*/\nfunction checkClipboardAccess() {\n\tif (!(\"clipboard\" in navigator)) {\n\t\ttoastMessage(`Your browser doesn't support the Clipboard API`, \"error\");\n\t\treturn true;\n\t}\n}\nfunction checkNotFocusedError(error) {\n\tif (error instanceof Error && error.message.toLowerCase().includes(\"document is not focused\")) {\n\t\ttoastMessage(\"You need to activate the \\\"Emulate a focused page\\\" setting in the \\\"Rendering\\\" panel of devtools.\", \"warn\");\n\t\treturn true;\n\t}\n\treturn false;\n}\nasync function actionGlobalCopyState(pinia) {\n\tif (checkClipboardAccess()) return;\n\ttry {\n\t\tawait navigator.clipboard.writeText(JSON.stringify(pinia.state.value));\n\t\ttoastMessage(\"Global state copied to clipboard.\");\n\t} catch (error) {\n\t\tif (checkNotFocusedError(error)) return;\n\t\ttoastMessage(`Failed to serialize the state. Check the console for more details.`, \"error\");\n\t\tconsole.error(error);\n\t}\n}\nasync function actionGlobalPasteState(pinia) {\n\tif (checkClipboardAccess()) return;\n\ttry {\n\t\tloadStoresState(pinia, JSON.parse(await navigator.clipboard.readText()));\n\t\ttoastMessage(\"Global state pasted from clipboard.\");\n\t} catch (error) {\n\t\tif (checkNotFocusedError(error)) return;\n\t\ttoastMessage(`Failed to deserialize the state from clipboard. Check the console for more details.`, \"error\");\n\t\tconsole.error(error);\n\t}\n}\nasync function actionGlobalSaveState(pinia) {\n\ttry {\n\t\tsaveAs(new Blob([JSON.stringify(pinia.state.value)], { type: \"text/plain;charset=utf-8\" }), \"pinia-state.json\");\n\t} catch (error) {\n\t\ttoastMessage(`Failed to export the state as JSON. Check the console for more details.`, \"error\");\n\t\tconsole.error(error);\n\t}\n}\nlet fileInput;\nfunction getFileOpener() {\n\tif (!fileInput) {\n\t\tfileInput = document.createElement(\"input\");\n\t\tfileInput.type = \"file\";\n\t\tfileInput.accept = \".json\";\n\t}\n\tfunction openFile() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tfileInput.onchange = async () => {\n\t\t\t\tconst files = fileInput.files;\n\t\t\t\tif (!files) return resolve(null);\n\t\t\t\tconst file = files.item(0);\n\t\t\t\tif (!file) return resolve(null);\n\t\t\t\treturn resolve({\n\t\t\t\t\ttext: await file.text(),\n\t\t\t\t\tfile\n\t\t\t\t});\n\t\t\t};\n\t\t\tfileInput.oncancel = () => resolve(null);\n\t\t\tfileInput.onerror = reject;\n\t\t\tfileInput.click();\n\t\t});\n\t}\n\treturn openFile;\n}\nasync function actionGlobalOpenStateFile(pinia) {\n\ttry {\n\t\tconst result = await getFileOpener()();\n\t\tif (!result) return;\n\t\tconst { text, file } = result;\n\t\tloadStoresState(pinia, JSON.parse(text));\n\t\ttoastMessage(`Global state imported from \"${file.name}\".`);\n\t} catch (error) {\n\t\ttoastMessage(`Failed to import the state from JSON. Check the console for more details.`, \"error\");\n\t\tconsole.error(error);\n\t}\n}\nfunction loadStoresState(pinia, state) {\n\tfor (const key in state) {\n\t\tconst storeState = pinia.state.value[key];\n\t\tif (storeState) Object.assign(storeState, state[key]);\n\t\telse pinia.state.value[key] = state[key];\n\t}\n}\n//#endregion\n//#region src/devtools/formatting.ts\nfunction formatDisplay(display) {\n\treturn { _custom: { display } };\n}\nconst PINIA_ROOT_LABEL = \"🍍 Pinia (root)\";\nconst PINIA_ROOT_ID = \"_root\";\nfunction formatStoreForInspectorTree(store) {\n\treturn isPinia(store) ? {\n\t\tid: PINIA_ROOT_ID,\n\t\tlabel: PINIA_ROOT_LABEL\n\t} : {\n\t\tid: store.$id,\n\t\tlabel: store.$id\n\t};\n}\nfunction formatStoreForInspectorState(store) {\n\tif (isPinia(store)) {\n\t\tconst storeNames = Array.from(store._s.keys());\n\t\tconst storeMap = store._s;\n\t\treturn {\n\t\t\tstate: storeNames.map((storeId) => ({\n\t\t\t\teditable: true,\n\t\t\t\tkey: storeId,\n\t\t\t\tvalue: store.state.value[storeId]\n\t\t\t})),\n\t\t\tgetters: storeNames.filter((id) => storeMap.get(id)._getters).map((id) => {\n\t\t\t\tconst store = storeMap.get(id);\n\t\t\t\treturn {\n\t\t\t\t\teditable: false,\n\t\t\t\t\tkey: id,\n\t\t\t\t\tvalue: store._getters.reduce((getters, key) => {\n\t\t\t\t\t\tgetters[key] = store[key];\n\t\t\t\t\t\treturn getters;\n\t\t\t\t\t}, {})\n\t\t\t\t};\n\t\t\t})\n\t\t};\n\t}\n\tconst state = { state: Object.keys(store.$state).map((key) => ({\n\t\teditable: true,\n\t\tkey,\n\t\tvalue: store.$state[key]\n\t})) };\n\tif (store._getters && store._getters.length) state.getters = store._getters.map((getterName) => ({\n\t\teditable: isWritableComputed(store, getterName),\n\t\tkey: getterName,\n\t\tvalue: store[getterName]\n\t}));\n\tif (store._customProperties.size) state.customProperties = Array.from(store._customProperties).map((key) => ({\n\t\teditable: true,\n\t\tkey,\n\t\tvalue: store[key]\n\t}));\n\treturn state;\n}\nfunction formatEventData(events) {\n\tif (!events) return {};\n\tif (Array.isArray(events)) return events.reduce((data, event) => {\n\t\tdata.keys.push(event.key);\n\t\tdata.operations.push(event.type);\n\t\tdata.oldValue[event.key] = event.oldValue;\n\t\tdata.newValue[event.key] = event.newValue;\n\t\treturn data;\n\t}, {\n\t\toldValue: {},\n\t\tkeys: [],\n\t\toperations: [],\n\t\tnewValue: {}\n\t});\n\telse return {\n\t\toperation: formatDisplay(events.type),\n\t\tkey: formatDisplay(events.key),\n\t\toldValue: events.oldValue,\n\t\tnewValue: events.newValue\n\t};\n}\nfunction formatMutationType(type) {\n\tswitch (type) {\n\t\tcase \"direct\": return \"mutation\";\n\t\tcase \"patch function\": return \"$patch\";\n\t\tcase \"patch object\": return \"$patch\";\n\t\tdefault: return \"unknown\";\n\t}\n}\n//#endregion\n//#region src/devtools/plugin.ts\nlet isTimelineActive = true;\nconst componentStateTypes = [];\nconst MUTATIONS_LAYER_ID = \"pinia:mutations\";\nconst INSPECTOR_ID = \"pinia\";\nconst { assign: assign$1 } = Object;\n/**\n* Gets the displayed name of a store in devtools\n*\n* @param id - id of the store\n* @returns a formatted string\n*/\nconst getStoreType = (id) => \"🍍 \" + id;\n/**\n* Add the pinia plugin without any store. Allows displaying a Pinia plugin tab\n* as soon as it is added to the application.\n*\n* @param app - Vue application\n* @param pinia - pinia instance\n*/\nfunction registerPiniaDevtools(app, pinia) {\n\tsetupDevtoolsPlugin({\n\t\tid: \"dev.esm.pinia\",\n\t\tlabel: \"Pinia 🍍\",\n\t\tlogo: \"https://pinia.vuejs.org/logo.svg\",\n\t\tpackageName: \"pinia\",\n\t\thomepage: \"https://pinia.vuejs.org\",\n\t\tcomponentStateTypes,\n\t\tapp\n\t}, (api) => {\n\t\tif (typeof api.now !== \"function\") toastMessage(\"You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.\");\n\t\tapi.addTimelineLayer({\n\t\t\tid: MUTATIONS_LAYER_ID,\n\t\t\tlabel: `Pinia 🍍`,\n\t\t\tcolor: 15064968\n\t\t});\n\t\tapi.addInspector({\n\t\t\tid: INSPECTOR_ID,\n\t\t\tlabel: \"Pinia 🍍\",\n\t\t\ticon: \"storage\",\n\t\t\ttreeFilterPlaceholder: \"Search stores\",\n\t\t\tactions: [\n\t\t\t\t{\n\t\t\t\t\ticon: \"content_copy\",\n\t\t\t\t\taction: () => {\n\t\t\t\t\t\tactionGlobalCopyState(pinia);\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: \"Serialize and copy the state\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: \"content_paste\",\n\t\t\t\t\taction: async () => {\n\t\t\t\t\t\tawait actionGlobalPasteState(pinia);\n\t\t\t\t\t\tapi.sendInspectorTree(INSPECTOR_ID);\n\t\t\t\t\t\tapi.sendInspectorState(INSPECTOR_ID);\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: \"Replace the state with the content of your clipboard\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: \"save\",\n\t\t\t\t\taction: () => {\n\t\t\t\t\t\tactionGlobalSaveState(pinia);\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: \"Save the state as a JSON file\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: \"folder_open\",\n\t\t\t\t\taction: async () => {\n\t\t\t\t\t\tawait actionGlobalOpenStateFile(pinia);\n\t\t\t\t\t\tapi.sendInspectorTree(INSPECTOR_ID);\n\t\t\t\t\t\tapi.sendInspectorState(INSPECTOR_ID);\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: \"Import the state from a JSON file\"\n\t\t\t\t}\n\t\t\t],\n\t\t\tnodeActions: [{\n\t\t\t\ticon: \"restore\",\n\t\t\t\ttooltip: \"Reset the state (with \\\"$reset\\\")\",\n\t\t\t\taction: (nodeId) => {\n\t\t\t\t\tconst store = pinia._s.get(nodeId);\n\t\t\t\t\tif (!store) toastMessage(`Cannot reset \"${nodeId}\" store because it wasn't found.`, \"warn\");\n\t\t\t\t\telse if (typeof store.$reset !== \"function\") toastMessage(`Cannot reset \"${nodeId}\" store because it doesn't have a \"$reset\" method implemented.`, \"warn\");\n\t\t\t\t\telse {\n\t\t\t\t\t\tstore.$reset();\n\t\t\t\t\t\ttoastMessage(`Store \"${nodeId}\" reset.`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tapi.on.inspectComponent((payload) => {\n\t\t\tconst proxy = payload.componentInstance && payload.componentInstance.proxy;\n\t\t\tif (proxy && proxy._pStores) {\n\t\t\t\tconst piniaStores = payload.componentInstance.proxy._pStores;\n\t\t\t\tObject.values(piniaStores).forEach((store) => {\n\t\t\t\t\tpayload.instanceData.state.push({\n\t\t\t\t\t\ttype: getStoreType(store.$id),\n\t\t\t\t\t\tkey: \"state\",\n\t\t\t\t\t\teditable: true,\n\t\t\t\t\t\tvalue: store._isOptionsAPI ? { _custom: {\n\t\t\t\t\t\t\tvalue: toRaw(store.$state),\n\t\t\t\t\t\t\tactions: [{\n\t\t\t\t\t\t\t\ticon: \"restore\",\n\t\t\t\t\t\t\t\ttooltip: \"Reset the state of this store\",\n\t\t\t\t\t\t\t\taction: () => store.$reset()\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t} } : Object.keys(store.$state).reduce((state, key) => {\n\t\t\t\t\t\t\tstate[key] = store.$state[key];\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t}, {})\n\t\t\t\t\t});\n\t\t\t\t\tif (store._getters && store._getters.length) payload.instanceData.state.push({\n\t\t\t\t\t\ttype: getStoreType(store.$id),\n\t\t\t\t\t\tkey: \"getters\",\n\t\t\t\t\t\teditable: false,\n\t\t\t\t\t\tvalue: store._getters.reduce((getters, key) => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tgetters[key] = store[key];\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tgetters[key] = error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn getters;\n\t\t\t\t\t\t}, {})\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tapi.on.getInspectorTree((payload) => {\n\t\t\tif (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n\t\t\t\tlet stores = [pinia];\n\t\t\t\tstores = stores.concat(Array.from(pinia._s.values()));\n\t\t\t\tpayload.rootNodes = (payload.filter ? stores.filter((store) => \"$id\" in store ? store.$id.toLowerCase().includes(payload.filter.toLowerCase()) : PINIA_ROOT_LABEL.toLowerCase().includes(payload.filter.toLowerCase())) : stores).map(formatStoreForInspectorTree);\n\t\t\t}\n\t\t});\n\t\tglobalThis.$pinia = pinia;\n\t\tapi.on.getInspectorState((payload) => {\n\t\t\tif (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n\t\t\t\tconst inspectedStore = payload.nodeId === \"_root\" ? pinia : pinia._s.get(payload.nodeId);\n\t\t\t\tif (!inspectedStore) return;\n\t\t\t\tif (inspectedStore) {\n\t\t\t\t\tif (payload.nodeId !== \"_root\") globalThis.$store = toRaw(inspectedStore);\n\t\t\t\t\tpayload.state = formatStoreForInspectorState(inspectedStore);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tapi.on.editInspectorState((payload) => {\n\t\t\tif (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n\t\t\t\tconst inspectedStore = payload.nodeId === \"_root\" ? pinia : pinia._s.get(payload.nodeId);\n\t\t\t\tif (!inspectedStore) return toastMessage(`store \"${payload.nodeId}\" not found`, \"error\");\n\t\t\t\tconst { path } = payload;\n\t\t\t\tif (!isPinia(inspectedStore)) {\n\t\t\t\t\tif (path.length !== 1 || !inspectedStore._customProperties.has(path[0]) && !isWritableComputed(inspectedStore, path[0]) || path[0] in inspectedStore.$state) path.unshift(\"$state\");\n\t\t\t\t} else path.unshift(\"state\");\n\t\t\t\tisTimelineActive = false;\n\t\t\t\tpayload.set(inspectedStore, path, payload.state.value);\n\t\t\t\tisTimelineActive = true;\n\t\t\t}\n\t\t});\n\t\tapi.on.editComponentState((payload) => {\n\t\t\tif (payload.type.startsWith(\"🍍\")) {\n\t\t\t\tconst storeId = payload.type.replace(/^🍍\\s*/, \"\");\n\t\t\t\tconst store = pinia._s.get(storeId);\n\t\t\t\tif (!store) return toastMessage(`store \"${storeId}\" not found`, \"error\");\n\t\t\t\tconst { path } = payload;\n\t\t\t\tif (path[0] !== \"state\") return toastMessage(`Invalid path for store \"${storeId}\":\\n${path}\\nOnly state can be modified.`);\n\t\t\t\tpath[0] = \"$state\";\n\t\t\t\tisTimelineActive = false;\n\t\t\t\tpayload.set(store, path, payload.state.value);\n\t\t\t\tisTimelineActive = true;\n\t\t\t}\n\t\t});\n\t});\n}\nfunction addStoreToDevtools(app, store) {\n\tif (!componentStateTypes.includes(getStoreType(store.$id))) componentStateTypes.push(getStoreType(store.$id));\n\tsetupDevtoolsPlugin({\n\t\tid: \"dev.esm.pinia\",\n\t\tlabel: \"Pinia 🍍\",\n\t\tlogo: \"https://pinia.vuejs.org/logo.svg\",\n\t\tpackageName: \"pinia\",\n\t\thomepage: \"https://pinia.vuejs.org\",\n\t\tcomponentStateTypes,\n\t\tapp,\n\t\tsettings: { logStoreChanges: {\n\t\t\tlabel: \"Notify about new/deleted stores\",\n\t\t\ttype: \"boolean\",\n\t\t\tdefaultValue: true\n\t\t} }\n\t}, (api) => {\n\t\tconst now = typeof api.now === \"function\" ? api.now.bind(api) : Date.now;\n\t\tstore.$onAction(({ after, onError, name, args }) => {\n\t\t\tconst groupId = runningActionId++;\n\t\t\tapi.addTimelineEvent({\n\t\t\t\tlayerId: MUTATIONS_LAYER_ID,\n\t\t\t\tevent: {\n\t\t\t\t\ttime: now(),\n\t\t\t\t\ttitle: \"🛫 \" + name,\n\t\t\t\t\tsubtitle: \"start\",\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tstore: formatDisplay(store.$id),\n\t\t\t\t\t\taction: formatDisplay(name),\n\t\t\t\t\t\targs\n\t\t\t\t\t},\n\t\t\t\t\tgroupId\n\t\t\t\t}\n\t\t\t});\n\t\t\tafter((result) => {\n\t\t\t\tactiveAction = void 0;\n\t\t\t\tapi.addTimelineEvent({\n\t\t\t\t\tlayerId: MUTATIONS_LAYER_ID,\n\t\t\t\t\tevent: {\n\t\t\t\t\t\ttime: now(),\n\t\t\t\t\t\ttitle: \"🛬 \" + name,\n\t\t\t\t\t\tsubtitle: \"end\",\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tstore: formatDisplay(store.$id),\n\t\t\t\t\t\t\taction: formatDisplay(name),\n\t\t\t\t\t\t\targs,\n\t\t\t\t\t\t\tresult\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgroupId\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t\tonError((error) => {\n\t\t\t\tactiveAction = void 0;\n\t\t\t\tapi.addTimelineEvent({\n\t\t\t\t\tlayerId: MUTATIONS_LAYER_ID,\n\t\t\t\t\tevent: {\n\t\t\t\t\t\ttime: now(),\n\t\t\t\t\t\tlogType: \"error\",\n\t\t\t\t\t\ttitle: \"💥 \" + name,\n\t\t\t\t\t\tsubtitle: \"end\",\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tstore: formatDisplay(store.$id),\n\t\t\t\t\t\t\taction: formatDisplay(name),\n\t\t\t\t\t\t\targs,\n\t\t\t\t\t\t\terror\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgroupId\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}, true);\n\t\tstore._customProperties.forEach((name) => {\n\t\t\twatch(() => unref(store[name]), (newValue, oldValue) => {\n\t\t\t\tapi.notifyComponentUpdate();\n\t\t\t\tapi.sendInspectorState(INSPECTOR_ID);\n\t\t\t\tif (isTimelineActive) api.addTimelineEvent({\n\t\t\t\t\tlayerId: MUTATIONS_LAYER_ID,\n\t\t\t\t\tevent: {\n\t\t\t\t\t\ttime: now(),\n\t\t\t\t\t\ttitle: \"Change\",\n\t\t\t\t\t\tsubtitle: name,\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t\toldValue\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgroupId: activeAction\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, { deep: true });\n\t\t});\n\t\tstore.$subscribe(({ events, type }, state) => {\n\t\t\tapi.notifyComponentUpdate();\n\t\t\tapi.sendInspectorState(INSPECTOR_ID);\n\t\t\tif (!isTimelineActive) return;\n\t\t\tconst eventData = {\n\t\t\t\ttime: now(),\n\t\t\t\ttitle: formatMutationType(type),\n\t\t\t\tdata: assign$1({ store: formatDisplay(store.$id) }, formatEventData(events)),\n\t\t\t\tgroupId: activeAction\n\t\t\t};\n\t\t\tif (type === \"patch function\") eventData.subtitle = \"⤵️\";\n\t\t\telse if (type === \"patch object\") eventData.subtitle = \"🧩\";\n\t\t\telse if (events && !Array.isArray(events)) eventData.subtitle = events.type;\n\t\t\tif (events) eventData.data[\"rawEvent(s)\"] = { _custom: {\n\t\t\t\tdisplay: \"DebuggerEvent\",\n\t\t\t\ttype: \"object\",\n\t\t\t\ttooltip: \"raw DebuggerEvent[]\",\n\t\t\t\tvalue: events\n\t\t\t} };\n\t\t\tapi.addTimelineEvent({\n\t\t\t\tlayerId: MUTATIONS_LAYER_ID,\n\t\t\t\tevent: eventData\n\t\t\t});\n\t\t}, {\n\t\t\tdetached: true,\n\t\t\tflush: \"sync\"\n\t\t});\n\t\tconst hotUpdate = store._hotUpdate;\n\t\tstore._hotUpdate = markRaw((newStore) => {\n\t\t\thotUpdate(newStore);\n\t\t\tapi.addTimelineEvent({\n\t\t\t\tlayerId: MUTATIONS_LAYER_ID,\n\t\t\t\tevent: {\n\t\t\t\t\ttime: now(),\n\t\t\t\t\ttitle: \"🔥 \" + store.$id,\n\t\t\t\t\tsubtitle: \"HMR update\",\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tstore: formatDisplay(store.$id),\n\t\t\t\t\t\tinfo: formatDisplay(`HMR update`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tapi.notifyComponentUpdate();\n\t\t\tapi.sendInspectorTree(INSPECTOR_ID);\n\t\t\tapi.sendInspectorState(INSPECTOR_ID);\n\t\t});\n\t\tconst { $dispose } = store;\n\t\tstore.$dispose = () => {\n\t\t\t$dispose();\n\t\t\tapi.notifyComponentUpdate();\n\t\t\tapi.sendInspectorTree(INSPECTOR_ID);\n\t\t\tapi.sendInspectorState(INSPECTOR_ID);\n\t\t\tapi.getSettings().logStoreChanges && toastMessage(`Disposed \"${store.$id}\" store 🗑`);\n\t\t};\n\t\tapi.notifyComponentUpdate();\n\t\tapi.sendInspectorTree(INSPECTOR_ID);\n\t\tapi.sendInspectorState(INSPECTOR_ID);\n\t\tapi.getSettings().logStoreChanges && toastMessage(`\"${store.$id}\" store installed 🆕`);\n\t});\n}\nlet runningActionId = 0;\nlet activeAction;\n/**\n* Patches a store to enable action grouping in devtools by wrapping the store with a Proxy that is passed as the\n* context of all actions, allowing us to set `runningAction` on each access and effectively associating any state\n* mutation to the action.\n*\n* @param store - store to patch\n* @param actionNames - list of actionst to patch\n*/\nfunction patchActionForGrouping(store, actionNames, wrapWithProxy) {\n\tconst actions = actionNames.reduce((storeActions, actionName) => {\n\t\tstoreActions[actionName] = toRaw(store)[actionName];\n\t\treturn storeActions;\n\t}, {});\n\tfor (const actionName in actions) store[actionName] = function() {\n\t\tconst _actionId = runningActionId;\n\t\tconst trackedStore = wrapWithProxy ? new Proxy(store, {\n\t\t\tget(...args) {\n\t\t\t\tactiveAction = _actionId;\n\t\t\t\treturn Reflect.get(...args);\n\t\t\t},\n\t\t\tset(...args) {\n\t\t\t\tactiveAction = _actionId;\n\t\t\t\treturn Reflect.set(...args);\n\t\t\t}\n\t\t}) : store;\n\t\tactiveAction = _actionId;\n\t\tconst retValue = actions[actionName].apply(trackedStore, arguments);\n\t\tactiveAction = void 0;\n\t\treturn retValue;\n\t};\n}\n/**\n* pinia.use(devtoolsPlugin)\n*/\nfunction devtoolsPlugin({ app, store, options }) {\n\tif (store.$id.startsWith(\"__hot:\")) return;\n\tstore._isOptionsAPI = !!options.state;\n\tif (!store._p._testing) {\n\t\tpatchActionForGrouping(store, Object.keys(options.actions), store._isOptionsAPI);\n\t\tconst originalHotUpdate = store._hotUpdate;\n\t\ttoRaw(store)._hotUpdate = function(newStore) {\n\t\t\toriginalHotUpdate.apply(this, arguments);\n\t\t\tpatchActionForGrouping(store, Object.keys(newStore._hmrPayload.actions), !!store._isOptionsAPI);\n\t\t};\n\t}\n\taddStoreToDevtools(app, store);\n}\n//#endregion\n//#region src/createPinia.ts\n/**\n* Creates a Pinia instance to be used by the application\n*/\nfunction createPinia() {\n\tconst scope = effectScope(true);\n\tconst state = scope.run(() => ref({}));\n\tlet _p = [];\n\tlet toBeInstalled = [];\n\tconst pinia = markRaw({\n\t\tinstall(app) {\n\t\t\tsetActivePinia(pinia);\n\t\t\tpinia._a = app;\n\t\t\tapp.provide(piniaSymbol, pinia);\n\t\t\tapp.config.globalProperties.$pinia = pinia;\n\t\t\t/* istanbul ignore else */\n\t\t\tif ((process.env.NODE_ENV !== \"production\" || typeof __VUE_PROD_DEVTOOLS__ !== \"undefined\" && __VUE_PROD_DEVTOOLS__) && !(process.env.NODE_ENV === \"test\") && IS_CLIENT) registerPiniaDevtools(app, pinia);\n\t\t\ttoBeInstalled.forEach((plugin) => _p.push(plugin));\n\t\t\ttoBeInstalled = [];\n\t\t},\n\t\tuse(plugin) {\n\t\t\tif (!this._a) toBeInstalled.push(plugin);\n\t\t\telse _p.push(plugin);\n\t\t\treturn this;\n\t\t},\n\t\t_p,\n\t\t_a: null,\n\t\t_e: scope,\n\t\t_s: /* @__PURE__ */ new Map(),\n\t\tstate\n\t});\n\tif ((process.env.NODE_ENV !== \"production\" || typeof __VUE_PROD_DEVTOOLS__ !== \"undefined\" && __VUE_PROD_DEVTOOLS__) && !(process.env.NODE_ENV === \"test\") && IS_CLIENT && typeof Proxy !== \"undefined\") pinia.use(devtoolsPlugin);\n\treturn pinia;\n}\n/**\n* Dispose a Pinia instance by stopping its effectScope and removing the state, plugins and stores. This is mostly\n* useful in tests, with both a testing pinia or a regular pinia and in applications that use multiple pinia instances.\n* Once disposed, the pinia instance cannot be used anymore.\n*\n* @param pinia - pinia instance\n*/\nfunction disposePinia(pinia) {\n\tpinia._e.stop();\n\tpinia._s.clear();\n\tpinia._p.splice(0);\n\tpinia.state.value = {};\n\tpinia._a = null;\n}\n//#endregion\n//#region src/hmr.ts\n/**\n* Checks if a function is a `StoreDefinition`.\n*\n* @param fn - object to test\n* @returns true if `fn` is a StoreDefinition\n*/\nconst isUseStore = (fn) => {\n\treturn typeof fn === \"function\" && typeof fn.$id === \"string\";\n};\n/**\n* Mutates in place `newState` with `oldState` to _hot update_ it. It will\n* remove any key not existing in `newState` and recursively merge plain\n* objects.\n*\n* @param newState - new state object to be patched\n* @param oldState - old state that should be used to patch newState\n* @returns - newState\n*/\nfunction patchObject(newState, oldState) {\n\tfor (const key in oldState) {\n\t\tconst subPatch = oldState[key];\n\t\tif (!(key in newState)) continue;\n\t\tconst targetValue = newState[key];\n\t\tif (isPlainObject(targetValue) && isPlainObject(subPatch) && !isRef(subPatch) && !isReactive(subPatch)) newState[key] = patchObject(targetValue, subPatch);\n\t\telse newState[key] = subPatch;\n\t}\n\treturn newState;\n}\n/**\n* Creates an _accept_ function to pass to `import.meta.hot` in Vite applications.\n*\n* @example\n* ```js\n* const useUser = defineStore(...)\n* if (import.meta.hot) {\n* import.meta.hot.accept(acceptHMRUpdate(useUser, import.meta.hot))\n* }\n* ```\n*\n* @param initialUseStore - return of the defineStore to hot update\n* @param hot - `import.meta.hot`\n*/\nfunction acceptHMRUpdate(initialUseStore, hot) {\n\tif (!(process.env.NODE_ENV !== \"production\")) return () => {};\n\treturn (newModule) => {\n\t\tconst pinia = hot.data.pinia || initialUseStore._pinia;\n\t\tif (!pinia) return;\n\t\thot.data.pinia = pinia;\n\t\tfor (const exportName in newModule) {\n\t\t\tconst useStore = newModule[exportName];\n\t\t\tif (isUseStore(useStore) && pinia._s.has(useStore.$id)) {\n\t\t\t\tconst id = useStore.$id;\n\t\t\t\tif (id !== initialUseStore.$id) {\n\t\t\t\t\tdiagnostics.PINIA_R1005({\n\t\t\t\t\t\tfrom: initialUseStore.$id,\n\t\t\t\t\t\tto: id\n\t\t\t\t\t});\n\t\t\t\t\treturn hot.invalidate();\n\t\t\t\t}\n\t\t\t\tconst existingStore = pinia._s.get(id);\n\t\t\t\tif (!existingStore) {\n\t\t\t\t\tconsole.log(`[Pinia]: skipping hmr because store doesn't exist yet`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tuseStore(pinia, existingStore);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/subscriptions.ts\nconst noop = () => {};\nfunction addSubscription(subscriptions, callback, detached, onCleanup = noop) {\n\tsubscriptions.add(callback);\n\tconst removeSubscription = () => {\n\t\tsubscriptions.delete(callback) && onCleanup();\n\t};\n\tif (!detached && getCurrentScope()) onScopeDispose(removeSubscription);\n\treturn removeSubscription;\n}\nfunction triggerSubscriptions(subscriptions, ...args) {\n\tsubscriptions.forEach((callback) => {\n\t\tcallback(...args);\n\t});\n}\n//#endregion\n//#region src/store.ts\nconst fallbackRunWithContext = (fn) => fn();\n/**\n* Marks a function as an action for `$onAction`\n* @internal\n*/\nconst ACTION_MARKER = Symbol();\n/**\n* Action name symbol. Allows to add a name to an action after defining it\n* @internal\n*/\nconst ACTION_NAME = Symbol();\nfunction mergeReactiveObjects(target, patchToApply) {\n\tif (target instanceof Map && patchToApply instanceof Map) patchToApply.forEach((value, key) => target.set(key, value));\n\telse if (target instanceof Set && patchToApply instanceof Set) patchToApply.forEach(target.add, target);\n\tfor (const key in patchToApply) {\n\t\tif (!Object.hasOwn(patchToApply, key)) continue;\n\t\tconst subPatch = patchToApply[key];\n\t\tconst targetValue = target[key];\n\t\tif (isPlainObject(targetValue) && isPlainObject(subPatch) && Object.hasOwn(target, key) && !isRef(subPatch) && !isReactive(subPatch)) target[key] = mergeReactiveObjects(targetValue, subPatch);\n\t\telse target[key] = subPatch;\n\t}\n\treturn target;\n}\nconst skipHydrateSymbol = process.env.NODE_ENV !== \"production\" ? Symbol(\"pinia:skipHydration\") : /* istanbul ignore next */ Symbol();\n/**\n* Tells Pinia to skip the hydration process of a given object. This is useful in setup stores (only) when you return a\n* stateful object in the store but it isn't really state. e.g. returning a router instance in a setup store.\n*\n* @param obj - target object\n* @returns obj\n*/\nfunction skipHydrate(obj) {\n\treturn Object.defineProperty(obj, skipHydrateSymbol, {});\n}\n/**\n* Returns whether a value should be hydrated\n*\n* @param obj - target variable\n* @returns true if `obj` should be hydrated\n*/\nfunction shouldHydrate(obj) {\n\treturn !obj || typeof obj !== \"object\" || !Object.hasOwn(obj, skipHydrateSymbol);\n}\nconst { assign } = Object;\nfunction isComputed(o) {\n\treturn !!(isRef(o) && o.effect);\n}\nfunction createOptionsStore(id, options, pinia, hot) {\n\tconst { state, actions, getters } = options;\n\tconst initialState = pinia.state.value[id];\n\tlet store;\n\tfunction setup() {\n\t\tif (!initialState && (!(process.env.NODE_ENV !== \"production\") || !hot))\n /* istanbul ignore if */\n\t\tpinia.state.value[id] = state ? state() : {};\n\t\tconst localState = process.env.NODE_ENV !== \"production\" && hot ? toRefs(ref(state ? state() : {}).value) : toRefs(pinia.state.value[id]);\n\t\treturn assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {\n\t\t\tif (process.env.NODE_ENV !== \"production\" && name in localState) diagnostics.PINIA_R1002({\n\t\t\t\tname,\n\t\t\t\tid\n\t\t\t});\n\t\t\tcomputedGetters[name] = markRaw(computed(() => {\n\t\t\t\tsetActivePinia(pinia);\n\t\t\t\tconst store = pinia._s.get(id);\n\t\t\t\treturn getters[name].call(store, store);\n\t\t\t}));\n\t\t\treturn computedGetters;\n\t\t}, {}));\n\t}\n\tstore = createSetupStore(id, setup, options, pinia, hot, true);\n\treturn store;\n}\nfunction createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {\n\tlet scope;\n\tconst optionsForPlugin = assign({ actions: {} }, options);\n\t/* istanbul ignore if */\n\tif (process.env.NODE_ENV !== \"production\" && !pinia._e.active) throw new Error(\"Pinia destroyed\");\n\tconst $subscribeOptions = { deep: true };\n\t/* istanbul ignore else */\n\tif (process.env.NODE_ENV !== \"production\") $subscribeOptions.onTrigger = (event) => {\n\t\t/* istanbul ignore else */\n\t\tif (isListening) debuggerEvents = event;\n\t\telse if (isListening === false && !store._hotUpdating)\n /* istanbul ignore else */\n\t\tif (Array.isArray(debuggerEvents)) debuggerEvents.push(event);\n\t\telse console.error(\"🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.\");\n\t};\n\tlet isListening;\n\tlet isSyncListening;\n\tlet subscriptions = /* @__PURE__ */ new Set();\n\tlet actionSubscriptions = /* @__PURE__ */ new Set();\n\tlet debuggerEvents;\n\tconst initialState = pinia.state.value[$id];\n\tif (!isOptionsStore && !initialState && (!(process.env.NODE_ENV !== \"production\") || !hot))\n /* istanbul ignore if */\n\tpinia.state.value[$id] = {};\n\tconst hotState = /*#__PURE__*/ ref({});\n\tlet activeListener;\n\tfunction $patch(partialStateOrMutator) {\n\t\tlet subscriptionMutation;\n\t\tisListening = isSyncListening = false;\n\t\t/* istanbul ignore else */\n\t\tif (process.env.NODE_ENV !== \"production\") debuggerEvents = [];\n\t\tif (typeof partialStateOrMutator === \"function\") {\n\t\t\tpartialStateOrMutator(pinia.state.value[$id]);\n\t\t\tsubscriptionMutation = {\n\t\t\t\ttype: \"patch function\",\n\t\t\t\tstoreId: $id,\n\t\t\t\tevents: debuggerEvents\n\t\t\t};\n\t\t} else {\n\t\t\tmergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);\n\t\t\tsubscriptionMutation = {\n\t\t\t\ttype: \"patch object\",\n\t\t\t\tpayload: partialStateOrMutator,\n\t\t\t\tstoreId: $id,\n\t\t\t\tevents: debuggerEvents\n\t\t\t};\n\t\t}\n\t\tconst myListenerId = activeListener = Symbol();\n\t\tnextTick().then(() => {\n\t\t\tif (activeListener === myListenerId) isListening = true;\n\t\t});\n\t\tisSyncListening = true;\n\t\ttriggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);\n\t}\n\tconst $reset = isOptionsStore ? function $reset() {\n\t\tconst { state } = options;\n\t\tconst newState = state ? state() : {};\n\t\tthis.$patch(($state) => {\n\t\t\tassign($state, newState);\n\t\t});\n\t} : process.env.NODE_ENV !== \"production\" ? () => {\n\t\tthrow new Error(`🍍: Store \"${$id}\" is built using the setup syntax and does not implement $reset().`);\n\t} : noop;\n\tfunction $dispose() {\n\t\tscope.stop();\n\t\tsubscriptions.clear();\n\t\tactionSubscriptions.clear();\n\t\tpinia._s.delete($id);\n\t}\n\t/**\n\t* Helper that wraps function so it can be tracked with $onAction\n\t* @param fn - action to wrap\n\t* @param name - name of the action\n\t*/\n\tconst action = (fn, name = \"\") => {\n\t\tif (ACTION_MARKER in fn) {\n\t\t\tfn[ACTION_NAME] = name;\n\t\t\treturn fn;\n\t\t}\n\t\tconst wrappedAction = function() {\n\t\t\tsetActivePinia(pinia);\n\t\t\tconst args = Array.from(arguments);\n\t\t\tconst afterCallbackSet = /* @__PURE__ */ new Set();\n\t\t\tconst onErrorCallbackSet = /* @__PURE__ */ new Set();\n\t\t\tfunction after(callback) {\n\t\t\t\tafterCallbackSet.add(callback);\n\t\t\t}\n\t\t\tfunction onError(callback) {\n\t\t\t\tonErrorCallbackSet.add(callback);\n\t\t\t}\n\t\t\ttriggerSubscriptions(actionSubscriptions, {\n\t\t\t\targs,\n\t\t\t\tname: wrappedAction[ACTION_NAME],\n\t\t\t\tstore,\n\t\t\t\tafter,\n\t\t\t\tonError\n\t\t\t});\n\t\t\tlet ret;\n\t\t\ttry {\n\t\t\t\tret = fn.apply(this && this.$id === $id ? this : store, args);\n\t\t\t} catch (error) {\n\t\t\t\ttriggerSubscriptions(onErrorCallbackSet, error);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tif (ret instanceof Promise) return ret.then((value) => {\n\t\t\t\ttriggerSubscriptions(afterCallbackSet, value);\n\t\t\t\treturn value;\n\t\t\t}).catch((error) => {\n\t\t\t\ttriggerSubscriptions(onErrorCallbackSet, error);\n\t\t\t\treturn Promise.reject(error);\n\t\t\t});\n\t\t\ttriggerSubscriptions(afterCallbackSet, ret);\n\t\t\treturn ret;\n\t\t};\n\t\twrappedAction[ACTION_MARKER] = true;\n\t\twrappedAction[ACTION_NAME] = name;\n\t\treturn wrappedAction;\n\t};\n\tconst _hmrPayload = /*#__PURE__*/ markRaw({\n\t\tactions: {},\n\t\tgetters: {},\n\t\tstate: [],\n\t\thotState\n\t});\n\tconst partialStore = {\n\t\t_p: pinia,\n\t\t$id,\n\t\t$onAction: addSubscription.bind(null, actionSubscriptions),\n\t\t$patch,\n\t\t$reset,\n\t\t$subscribe(callback, options = {}) {\n\t\t\tif (subscriptions.has(callback)) {\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") diagnostics.PINIA_R1007({ id: $id });\n\t\t\t\treturn noop;\n\t\t\t}\n\t\t\tconst removeSubscription = addSubscription(subscriptions, callback, options.detached, () => stopWatcher());\n\t\t\tconst stopWatcher = scope.run(() => watch(() => pinia.state.value[$id], (state) => {\n\t\t\t\tif (options.flush === \"sync\" ? isSyncListening : isListening) callback({\n\t\t\t\t\tstoreId: $id,\n\t\t\t\t\ttype: \"direct\",\n\t\t\t\t\tevents: debuggerEvents\n\t\t\t\t}, state);\n\t\t\t}, assign({}, $subscribeOptions, options)));\n\t\t\treturn removeSubscription;\n\t\t},\n\t\t$dispose\n\t};\n\tconst store = reactive(process.env.NODE_ENV !== \"production\" || (process.env.NODE_ENV !== \"production\" || typeof __VUE_PROD_DEVTOOLS__ !== \"undefined\" && __VUE_PROD_DEVTOOLS__) && !(process.env.NODE_ENV === \"test\") && IS_CLIENT ? assign({\n\t\t_hmrPayload,\n\t\t_customProperties: markRaw(/* @__PURE__ */ new Set())\n\t}, partialStore) : partialStore);\n\tpinia._s.set($id, store);\n\tconst setupStore = (pinia._a && pinia._a.runWithContext || fallbackRunWithContext)(() => pinia._e.run(() => (scope = effectScope()).run(() => setup({ action }))));\n\tfor (const key in setupStore) {\n\t\tconst prop = setupStore[key];\n\t\tif (isRef(prop) && !isComputed(prop) || isReactive(prop)) {\n\t\t\tif (process.env.NODE_ENV !== \"production\" && hot) hotState.value[key] = toRef(setupStore, key);\n\t\t\telse if (!isOptionsStore) {\n\t\t\t\tif (initialState && shouldHydrate(prop)) if (isRef(prop)) prop.value = initialState[key];\n\t\t\t\telse {\n\t\t\t\t\tif (prop instanceof Set || prop instanceof Map) prop.clear();\n\t\t\t\t\tmergeReactiveObjects(prop, initialState[key]);\n\t\t\t\t}\n\t\t\t\tpinia.state.value[$id][key] = prop;\n\t\t\t}\n\t\t\t/* istanbul ignore else */\n\t\t\tif (process.env.NODE_ENV !== \"production\") _hmrPayload.state.push(key);\n\t\t} else if (typeof prop === \"function\") {\n\t\t\tsetupStore[key] = process.env.NODE_ENV !== \"production\" && hot ? prop : action(prop, key);\n\t\t\t/* istanbul ignore else */\n\t\t\tif (process.env.NODE_ENV !== \"production\") _hmrPayload.actions[key] = prop;\n\t\t\toptionsForPlugin.actions[key] = prop;\n\t\t} else if (process.env.NODE_ENV !== \"production\") {\n\t\t\tif (isComputed(prop)) {\n\t\t\t\t_hmrPayload.getters[key] = isOptionsStore ? options.getters[key] : prop;\n\t\t\t\tif (IS_CLIENT) (setupStore._getters || (setupStore._getters = markRaw([]))).push(key);\n\t\t\t}\n\t\t}\n\t}\n\t/* istanbul ignore if */\n\tassign(store, setupStore);\n\tassign(toRaw(store), setupStore);\n\tObject.defineProperty(store, \"$state\", {\n\t\tget: () => process.env.NODE_ENV !== \"production\" && hot ? hotState.value : pinia.state.value[$id],\n\t\tset: (state) => {\n\t\t\t/* istanbul ignore if */\n\t\t\tif (process.env.NODE_ENV !== \"production\" && hot) throw new Error(\"cannot set hotState\");\n\t\t\t$patch(($state) => {\n\t\t\t\tassign($state, state);\n\t\t\t});\n\t\t}\n\t});\n\t/* istanbul ignore else */\n\tif (process.env.NODE_ENV !== \"production\") store._hotUpdate = markRaw((newStore) => {\n\t\tstore._hotUpdating = true;\n\t\tnewStore._hmrPayload.state.forEach((stateKey) => {\n\t\t\tif (stateKey in store.$state) {\n\t\t\t\tconst newStateTarget = newStore.$state[stateKey];\n\t\t\t\tconst oldStateSource = store.$state[stateKey];\n\t\t\t\tif (isOptionsStore && typeof newStateTarget === \"object\" && isPlainObject(newStateTarget) && isPlainObject(oldStateSource)) patchObject(newStateTarget, oldStateSource);\n\t\t\t\telse newStore.$state[stateKey] = oldStateSource;\n\t\t\t}\n\t\t\tstore[stateKey] = toRef(newStore.$state, stateKey);\n\t\t});\n\t\tObject.keys(store.$state).forEach((stateKey) => {\n\t\t\tif (!(stateKey in newStore.$state)) delete store[stateKey];\n\t\t});\n\t\tisListening = false;\n\t\tisSyncListening = false;\n\t\tpinia.state.value[$id] = toRef(newStore._hmrPayload, \"hotState\");\n\t\tisSyncListening = true;\n\t\tnextTick().then(() => {\n\t\t\tisListening = true;\n\t\t});\n\t\tfor (const actionName in newStore._hmrPayload.actions) {\n\t\t\tconst actionFn = newStore[actionName];\n\t\t\tstore[actionName] = action(actionFn, actionName);\n\t\t}\n\t\tfor (const getterName in newStore._hmrPayload.getters) {\n\t\t\tconst getter = newStore._hmrPayload.getters[getterName];\n\t\t\tconst getterValue = isOptionsStore ? computed(() => {\n\t\t\t\tsetActivePinia(pinia);\n\t\t\t\treturn getter.call(store, store);\n\t\t\t}) : getter;\n\t\t\tstore[getterName] = getterValue;\n\t\t}\n\t\tObject.keys(store._hmrPayload.getters).forEach((key) => {\n\t\t\tif (!(key in newStore._hmrPayload.getters)) delete store[key];\n\t\t});\n\t\tObject.keys(store._hmrPayload.actions).forEach((key) => {\n\t\t\tif (!(key in newStore._hmrPayload.actions)) delete store[key];\n\t\t});\n\t\tstore._hmrPayload = newStore._hmrPayload;\n\t\tstore._getters = newStore._getters;\n\t\tstore._hotUpdating = false;\n\t});\n\tif ((process.env.NODE_ENV !== \"production\" || typeof __VUE_PROD_DEVTOOLS__ !== \"undefined\" && __VUE_PROD_DEVTOOLS__) && !(process.env.NODE_ENV === \"test\") && IS_CLIENT) {\n\t\tconst nonEnumerable = {\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false\n\t\t};\n\t\t[\n\t\t\t\"_p\",\n\t\t\t\"_hmrPayload\",\n\t\t\t\"_getters\",\n\t\t\t\"_customProperties\"\n\t\t].forEach((p) => {\n\t\t\tObject.defineProperty(store, p, assign({ value: store[p] }, nonEnumerable));\n\t\t});\n\t}\n\tpinia._p.forEach((extender) => {\n\t\tconst extensions = scope.run(() => extender({\n\t\t\tstore,\n\t\t\tapp: pinia._a,\n\t\t\tpinia,\n\t\t\toptions: optionsForPlugin\n\t\t}));\n\t\t/* istanbul ignore else */\n\t\tif ((process.env.NODE_ENV !== \"production\" || typeof __VUE_PROD_DEVTOOLS__ !== \"undefined\" && __VUE_PROD_DEVTOOLS__) && !(process.env.NODE_ENV === \"test\") && IS_CLIENT) Object.keys(extensions || {}).forEach((key) => store._customProperties.add(key));\n\t\tif (process.env.NODE_ENV !== \"production\") for (const key in extensions) {\n\t\t\tconst value = extensions[key];\n\t\t\tif (typeof value === \"object\" && !isRef(value) && !isReactive(value) && !value?.__v_skip) diagnostics.PINIA_R1006({\n\t\t\t\tkey,\n\t\t\t\tid: $id\n\t\t\t});\n\t\t}\n\t\tassign(store, extensions);\n\t});\n\tif (process.env.NODE_ENV !== \"production\" && store.$state && typeof store.$state === \"object\" && typeof store.$state.constructor === \"function\" && !store.$state.constructor.toString().includes(\"[native code]\")) diagnostics.PINIA_R1003({ id: store.$id });\n\tif (initialState && isOptionsStore && options.hydrate) options.hydrate(store.$state, initialState);\n\tisListening = true;\n\tisSyncListening = true;\n\treturn store;\n}\n/*! #__NO_SIDE_EFFECTS__ */\nfunction defineStore(id, setup, setupOptions) {\n\tlet options;\n\tconst isSetupStore = typeof setup === \"function\";\n\toptions = isSetupStore ? setupOptions : setup;\n\tfunction useStore(pinia, hot) {\n\t\tconst hasContext = hasInjectionContext();\n\t\tpinia = (process.env.NODE_ENV === \"test\" && activePinia && activePinia._testing ? null : pinia) || (hasContext ? inject(piniaSymbol, null) : null);\n\t\tif (pinia) setActivePinia(pinia);\n\t\tif (process.env.NODE_ENV !== \"production\" && !activePinia) throw new Error(\"[🍍]: \\\"getActivePinia()\\\" was called but there was no active Pinia. Are you trying to use a store before calling \\\"app.use(pinia)\\\"?\\nSee https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help.\\nThis will fail in production.\");\n\t\tpinia = activePinia;\n\t\tif (!pinia._s.has(id)) {\n\t\t\tif (isSetupStore) createSetupStore(id, setup, options, pinia);\n\t\t\telse createOptionsStore(id, options, pinia);\n\t\t\t/* istanbul ignore else */\n\t\t\tif (process.env.NODE_ENV !== \"production\") useStore._pinia = pinia;\n\t\t}\n\t\tconst store = pinia._s.get(id);\n\t\tif (process.env.NODE_ENV !== \"production\" && hot) {\n\t\t\tconst hotId = \"__hot:\" + id;\n\t\t\tconst newStore = isSetupStore ? createSetupStore(hotId, setup, options, pinia, true) : createOptionsStore(hotId, assign({}, options), pinia, true);\n\t\t\thot._hotUpdate(newStore);\n\t\t\tdelete pinia.state.value[hotId];\n\t\t\tpinia._s.delete(hotId);\n\t\t}\n\t\tif (process.env.NODE_ENV !== \"production\" && IS_CLIENT) {\n\t\t\tconst currentInstance = getCurrentInstance();\n\t\t\tif (currentInstance && currentInstance.proxy && !hot) {\n\t\t\t\tconst vm = currentInstance.proxy;\n\t\t\t\tconst cache = \"_pStores\" in vm ? vm._pStores : vm._pStores = {};\n\t\t\t\tcache[id] = store;\n\t\t\t}\n\t\t}\n\t\treturn store;\n\t}\n\tuseStore.$id = id;\n\treturn useStore;\n}\n//#endregion\n//#region src/mapHelpers.ts\nlet mapStoreSuffix = \"Store\";\n/**\n* Changes the suffix added by `mapStores()`. Can be set to an empty string.\n* Defaults to `\"Store\"`. Make sure to extend the MapStoresCustomization\n* interface if you are using TypeScript.\n*\n* @param suffix - new suffix\n*/\nfunction setMapStoreSuffix(suffix) {\n\tmapStoreSuffix = suffix;\n}\n/**\n* Allows using stores without the composition API (`setup()`) by generating an\n* object to be spread in the `computed` field of a component. It accepts a list\n* of store definitions.\n*\n* @example\n* ```js\n* export default {\n* computed: {\n* // other computed properties\n* ...mapStores(useUserStore, useCartStore)\n* },\n*\n* created() {\n* this.userStore // store with id \"user\"\n* this.cartStore // store with id \"cart\"\n* }\n* }\n* ```\n*\n* @param stores - list of stores to map to an object\n*/\nfunction mapStores(...stores) {\n\tif (process.env.NODE_ENV !== \"production\" && Array.isArray(stores[0])) {\n\t\tdiagnostics.PINIA_R1001();\n\t\tstores = stores[0];\n\t}\n\treturn stores.reduce((reduced, useStore) => {\n\t\treduced[useStore.$id + mapStoreSuffix] = function() {\n\t\t\treturn useStore(this.$pinia);\n\t\t};\n\t\treturn reduced;\n\t}, {});\n}\n/**\n* Allows using state and getters from one store without using the composition\n* API (`setup()`) by generating an object to be spread in the `computed` field\n* of a component.\n*\n* @param useStore - store to map from\n* @param keysOrMapper - array or object\n*/\nfunction mapState(useStore, keysOrMapper) {\n\treturn Array.isArray(keysOrMapper) ? keysOrMapper.reduce((reduced, key) => {\n\t\treduced[key] = function() {\n\t\t\treturn useStore(this.$pinia)[key];\n\t\t};\n\t\treturn reduced;\n\t}, {}) : Object.keys(keysOrMapper).reduce((reduced, key) => {\n\t\treduced[key] = function() {\n\t\t\tconst store = useStore(this.$pinia);\n\t\t\tconst storeKey = keysOrMapper[key];\n\t\t\treturn typeof storeKey === \"function\" ? storeKey.call(this, store) : store[storeKey];\n\t\t};\n\t\treturn reduced;\n\t}, {});\n}\n/**\n* Alias for `mapState()`. You should use `mapState()` instead.\n* @deprecated use `mapState()` instead.\n*/\nconst mapGetters = mapState;\n/**\n* Allows directly using actions from your store without using the composition\n* API (`setup()`) by generating an object to be spread in the `methods` field\n* of a component.\n*\n* @param useStore - store to map from\n* @param keysOrMapper - array or object\n*/\nfunction mapActions(useStore, keysOrMapper) {\n\treturn Array.isArray(keysOrMapper) ? keysOrMapper.reduce((reduced, key) => {\n\t\treduced[key] = function(...args) {\n\t\t\treturn useStore(this.$pinia)[key](...args);\n\t\t};\n\t\treturn reduced;\n\t}, {}) : Object.keys(keysOrMapper).reduce((reduced, key) => {\n\t\treduced[key] = function(...args) {\n\t\t\treturn useStore(this.$pinia)[keysOrMapper[key]](...args);\n\t\t};\n\t\treturn reduced;\n\t}, {});\n}\n/**\n* Allows using state and getters from one store without using the composition\n* API (`setup()`) by generating an object to be spread in the `computed` field\n* of a component.\n*\n* @param useStore - store to map from\n* @param keysOrMapper - array or object\n*/\nfunction mapWritableState(useStore, keysOrMapper) {\n\treturn Array.isArray(keysOrMapper) ? keysOrMapper.reduce((reduced, key) => {\n\t\treduced[key] = {\n\t\t\tget() {\n\t\t\t\treturn useStore(this.$pinia)[key];\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\treturn useStore(this.$pinia)[key] = value;\n\t\t\t}\n\t\t};\n\t\treturn reduced;\n\t}, {}) : Object.keys(keysOrMapper).reduce((reduced, key) => {\n\t\treduced[key] = {\n\t\t\tget() {\n\t\t\t\treturn useStore(this.$pinia)[keysOrMapper[key]];\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\treturn useStore(this.$pinia)[keysOrMapper[key]] = value;\n\t\t\t}\n\t\t};\n\t\treturn reduced;\n\t}, {});\n}\n//#endregion\n//#region src/storeToRefs.ts\n/**\n* Creates an object of references with all the state, getters, and plugin-added\n* state properties of the store. Similar to `toRefs()` but specifically\n* designed for Pinia stores so methods and non reactive properties are\n* completely ignored.\n*\n* @param store - store to extract the refs from\n*/\nfunction storeToRefs(store) {\n\tconst rawStore = toRaw(store);\n\tconst refs = {};\n\tfor (const key in rawStore) {\n\t\tconst value = rawStore[key];\n\t\tif (value?.effect) refs[key] = computed({\n\t\t\tget: () => store[key],\n\t\t\tset(value) {\n\t\t\t\tstore[key] = value;\n\t\t\t}\n\t\t});\n\t\telse if (isRef(value) || isReactive(value)) refs[key] = toRef(store, key);\n\t}\n\treturn refs;\n}\n//#endregion\nexport { MutationType, acceptHMRUpdate, createPinia, defineStore, disposePinia, getActivePinia, mapActions, mapGetters, mapState, mapStores, mapWritableState, piniaSymbol, setActivePinia, setMapStoreSuffix, shouldHydrate, skipHydrate, storeToRefs };\n","import {defineStore} from \"pinia\";\nimport {App, computed, Ref, ref} from 'vue';\n\nimport {ServiceFactory} from \"src/Engine/ServiceFactory\";\nimport {Error} from \"ui/error\";\nimport {isDevelopment} from 'src/constants';\nimport {\n ActionType,\n IAction,\n ICharacter,\n ICombinationAction,\n ICompiledLocation,\n ICustomCursor,\n IGame,\n IInterfaceTexts,\n IPerson,\n IRules,\n ITrade\n} from \"src/Engine\";\nimport {\n IAutoplayService,\n ICharacterService,\n ICombatService,\n ICombinationService,\n ICommandService,\n IConversationService,\n IDataService,\n IGameService,\n IItemService,\n ISoundService,\n ITradeService\n} from \"src/Engine/Interfaces/services\";\n\nexport const useStateStore = defineStore('appState', () => {\n let serviceFactory: ServiceFactory;\n\n const error = ref<Error>(null);\n const availableLocations = ref<{ id: string, name: string }[]>();\n\n const game = ref<IGame>(<IGame>{});\n\n const useBackpack = ref(false);\n const useGround = ref(false);\n const useEquipment = ref(false);\n const useCharacterSheet = ref(false);\n const useQuests = ref(false);\n\n const enemiesPresent = computed(() => game.value.currentLocation?.enemies.filter(e => !e.inactive).length > 0);\n const activePersons = computed(() => game.value.currentLocation?.persons.filter(e => !e.inactive) || []);\n const activeEnemies = computed(() => game.value.currentLocation?.enemies.filter(e => !e.inactive) || []);\n const activeItems = computed(() => game.value.currentLocation?.items.filter(e => !e.inactive) || []);\n const activeActions = computed(() => game.value.currentLocation?.actions.filter(i => !i[1].inactive) || []);\n const activeDestinations = computed(() => game.value.currentLocation?.destinations.filter(e => !e.inactive) || []);\n\n const defaultCombination = ref<ICombinationAction>(null);\n const customCursor = ref<ICustomCursor>(null);\n const combinationCursor = ref<ICustomCursor>(null);\n\n const services = {\n soundService: <ISoundService>null,\n itemService: <IItemService>null,\n combatService: <ICombatService>null,\n characterService: <ICharacterService>null,\n combinationService: <ICombinationService>null,\n gameService: <IGameService>null,\n conversationService: <IConversationService>null,\n tradeService: <ITradeService>null,\n dataService: <IDataService>null,\n autoplayService: <IAutoplayService>null,\n commandService: <ICommandService>null,\n texts: <IInterfaceTexts>null,\n rules: <IRules>null\n };\n\n const initErrorHandling = (app: App<Element>) => {\n addEventListener(\"error\", event => {\n error.value = {message: event.message, stackTrace: event.error.stack};\n event.stopPropagation();\n });\n addEventListener(\"unhandledrejection\", event => {\n error.value = {message: event.reason.message, stackTrace: event.reason.stack};\n event.stopPropagation();\n });\n\n if (!isDevelopment) {\n app.config.errorHandler = (e: any, vm, info) => error.value = {\n message: e.message,\n info: info,\n stackTrace: e.stack\n };\n }\n }\n\n const setStoreData = (factory: ServiceFactory) => {\n serviceFactory = factory;\n\n // THIS LINE IS CRUCIAL! It ensures the proxy object created by Vue is used throughout the application.\n // Without this, reactivity doesn't work!\n serviceFactory.init(game.value);\n\n services.texts = serviceFactory.GetTexts();\n services.rules = serviceFactory.GetRules();\n services.soundService = serviceFactory.GetSoundService();\n services.itemService = serviceFactory.GetItemService();\n services.combatService = serviceFactory.GetCombatService();\n services.characterService = serviceFactory.GetCharacterService();\n services.combinationService = serviceFactory.GetCombinationService();\n services.gameService = serviceFactory.GetGameService();\n services.conversationService = serviceFactory.GetConversationService();\n services.tradeService = serviceFactory.GetTradeService();\n services.dataService = serviceFactory.GetDataService();\n services.autoplayService = serviceFactory.GetAutoplayService();\n services.commandService = serviceFactory.GetCommandService();\n availableLocations.value = serviceFactory.AvailableLocations.sort((a, b) => a.name.localeCompare(b.name));\n\n initCombinations();\n\n if (services.rules.setup?.customCursorImage) {\n initCustomCursor(services.rules.setup.customCursorImage, customCursor)\n }\n }\n\n const setActiveCharacter = (character: ICharacter) => {\n game.value.activeCharacter = character;\n }\n\n const trade = (location: ICompiledLocation, trade: IPerson | ITrade): boolean => {\n const locationTrade = <ITrade>trade;\n\n if (locationTrade && !(<any>locationTrade).type && Array.isArray(locationTrade)) {\n trade = location.trade.find(t => t.id === locationTrade[0]);\n }\n\n services.tradeService.trade(trade);\n\n // Return true to keep the action button for trade locations.\n return true;\n };\n\n const showEquipment = (character: ICharacter): boolean =>\n useEquipment\n && character?.equipment\n && Object.keys(character.equipment)\n .some(k => (<any>character.equipment)[k] !== undefined);\n\n const showDescription = (type: string, item: any, title: string): void => {\n game.value.currentDescription = {title: title, type: type, item: item};\n }\n\n const startCombat = (location: ICompiledLocation, person?: IPerson): void => {\n if (person) {\n // The person becomes an enemy when attacked!\n location.persons.delete(person);\n location.enemies.add(person);\n }\n\n services.combatService.initCombat();\n }\n\n const getButtonClass = (action: [string, IAction]): string => {\n const type = action[1].actionType || ActionType.Regular;\n let buttonClass = 'btn-';\n\n switch (type) {\n case ActionType.Regular:\n buttonClass += 'info'\n break;\n case ActionType.Check:\n buttonClass += 'warning';\n break;\n case ActionType.Combat:\n buttonClass += 'danger';\n break;\n case ActionType.Trade:\n buttonClass += 'secondary';\n break;\n }\n\n return buttonClass;\n }\n\n const initCombinations = () => {\n const combinations = services.rules.combinations;\n\n if (!combinations) {\n return;\n }\n\n defaultCombination.value = combinations.combinationActions.find(c => c.isDefault);\n const defaultCombinationSymbol = combinations.combinationActions.find(c => c.picture)?.picture?.toLowerCase();\n\n if (defaultCombinationSymbol) {\n initCustomCursor(defaultCombinationSymbol, combinationCursor, 'default.png');\n }\n };\n\n const initCustomCursor = (cursorImage: string, cursorRef: Ref<ICustomCursor>, placeholder?: string): void => {\n const image = document.createElement('img');\n image.src = `resources/${cursorImage}`;\n image.onload = () => {\n cursorRef.value = {\n image: cursorImage,\n dimensions: {width: image.naturalWidth, height: image.naturalHeight},\n style: `url(resources/${placeholder ?? cursorImage}) ${image.naturalWidth / 2} ${image.naturalHeight / 2}, auto`\n }\n }\n }\n\n return {\n error,\n game,\n useGround,\n useBackpack,\n useEquipment,\n useCharacterSheet,\n useQuests,\n services,\n availableLocations,\n enemiesPresent,\n activePersons,\n activeEnemies,\n activeItems,\n activeActions,\n activeDestinations,\n defaultCombination,\n combinationCursor,\n customCursor,\n initErrorHandling,\n setStoreData,\n setActiveCharacter,\n showEquipment,\n showDescription,\n getButtonClass,\n trade,\n startCombat\n }\n});","<template>\n <div ref=\"ui-root\">\n <sound></sound>\n <autoplay></autoplay>\n <title-screen></title-screen>\n <div>\n <game-menu v-if=\"game.playState === PlayState.Menu\"></game-menu>\n <conversation v-if=\"game.playState === PlayState.Conversation\"></conversation>\n <trade v-if=\"game.playState === PlayState.Trade\"></trade>\n <combat v-if=\"game.playState === PlayState.Combat\"></combat>\n <description v-if=\"game.playState === PlayState.Description\"></description>\n <div v-if=\"error\" id=\"error-alert\">\n <div class=\"error-alert-body alert alert-danger\">\n <h2 class=\"danger\">{{ `An unhandled error occurred: ${error.message}!` }}</h2>\n <p>{{ error.stackTrace }}</p>\n <button class=\"btn btn-primary\" @click=\"reload\">Reload</button>\n </div>\n </div>\n <div>\n <navigation></navigation>\n <game-container></game-container>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {storeToRefs} from \"pinia\";\nimport {useTemplateRef} from \"vue\";\nimport {PlayState, useCustomCursor, usePlayStateWatch, useStateStore} from 'storyScript';\n\nconst store = useStateStore();\nconst {game, error} = storeToRefs(store);\nconst uiRoot = useTemplateRef('ui-root');\n\nuseCustomCursor(uiRoot);\nusePlayStateWatch(uiRoot);\n\nconst reload = () => {\n window.location.reload();\n}\n\n</script>","<template>\n <div ref=\"ui-root\">\n <sound></sound>\n <autoplay></autoplay>\n <title-screen></title-screen>\n <div>\n <game-menu v-if=\"game.playState === PlayState.Menu\"></game-menu>\n <conversation v-if=\"game.playState === PlayState.Conversation\"></conversation>\n <trade v-if=\"game.playState === PlayState.Trade\"></trade>\n <combat v-if=\"game.playState === PlayState.Combat\"></combat>\n <description v-if=\"game.playState === PlayState.Description\"></description>\n <div v-if=\"error\" id=\"error-alert\">\n <div class=\"error-alert-body alert alert-danger\">\n <h2 class=\"danger\">{{ `An unhandled error occurred: ${error.message}!` }}</h2>\n <p>{{ error.stackTrace }}</p>\n <button class=\"btn btn-primary\" @click=\"reload\">Reload</button>\n </div>\n </div>\n <div>\n <navigation></navigation>\n <game-container></game-container>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {storeToRefs} from \"pinia\";\nimport {useTemplateRef} from \"vue\";\nimport {PlayState, useCustomCursor, usePlayStateWatch, useStateStore} from 'storyScript';\n\nconst store = useStateStore();\nconst {game, error} = storeToRefs(store);\nconst uiRoot = useTemplateRef('ui-root');\n\nuseCustomCursor(uiRoot);\nusePlayStateWatch(uiRoot);\n\nconst reload = () => {\n window.location.reload();\n}\n\n</script>","export const logTime = (eventName: string, action: Function): void => {\n console.time(eventName);\n action();\n console.timeEnd(eventName)\n}","import {entityTypeRegex, IDefinitions, IGame} from 'storyScript';\nimport {parseHtmlDocumentFromString} from \"src/Engine/utilityFunctions\";\n\nexport function getDefinitions(assets: Record<string, unknown>){\n const definitions = <IDefinitions>{};\n \n // Loop over all found files to register the assets with the proper type.\n for (const path in assets) {\n const asset = assets[path];\n const entityType = entityTypeRegex.exec(path)?.[0];\n\n if (!entityType) {\n throw new Error(`'${path}' is not a valid entity type path!`);\n }\n\n const property = Object.getOwnPropertyNames(asset)[0];\n const entityFunc = asset[property];\n\n // Add the entity function to the definitions object for creating entities at run-time.\n definitions[entityType] = definitions[entityType] || [];\n\n if (definitions[entityType].indexOf(entityFunc) === -1) {\n definitions[entityType].push(entityFunc);\n }\n }\n\n return definitions;\n}\n\nexport function checkAutoplay(game: IGame, value: string) {\n if (!value) {\n return;\n }\n\n const htmlDocumentFromString = parseHtmlDocumentFromString(value).body;\n value = htmlDocumentFromString.innerHTML;\n value = checkAutoplayProperties(value, htmlDocumentFromString.getElementsByTagName('audio'), game.sounds.playedAudio);\n value = checkAutoplayProperties(value, htmlDocumentFromString.getElementsByTagName('video'), game.sounds.playedAudio);\n return value;\n}\n\nconst autoplayAttribute = 'autoplay';\nconst sourceAttribute = 'src';\n\nfunction checkAutoplayProperties(value: string, elements: HTMLCollectionOf<HTMLElement>, playedAudio: string[]) {\n Array.from(elements).forEach(e => {\n const originalText = e.outerHTML;\n const source = e.getElementsByTagName('source')[0]?.getAttribute(sourceAttribute)?.toLowerCase()\n ?? e.getAttribute(sourceAttribute)?.toLowerCase();\n\n if (originalText && source && e.hasAttribute(autoplayAttribute)) {\n if (playedAudio.indexOf(source) < 0) {\n playedAudio.push(source);\n } else {\n e.removeAttribute(autoplayAttribute);\n value = value.replace(originalText, e.outerHTML);\n }\n }\n });\n\n return value;\n}","import {App, createApp} from 'vue';\nimport {createPinia, Pinia} from 'pinia';\nimport AppShell from 'ui/Components/AppShell.vue';\nimport {ServiceFactory} from \"src/Engine/ServiceFactory\";\nimport {logTime} from \"../StartupLogger\";\nimport {buildEntities, IInterfaceTexts, IRules, useStateStore} from 'storyScript';\nimport {getDefinitions} from \"ui/helpers\";\n\nimport 'ui/styles/bootstrap-storyscript.scss';\nimport 'ui/styles/storyscript.css';\n\nexport const startup = (components: Map<string, any>, assets: Record<string, unknown>, gameName: string, rules: IRules, texts: IInterfaceTexts) => {\n let pinia: Pinia;\n let application: App<Element>;\n\n if (!ServiceFactory.GetInstance()) {\n const definitions = getDefinitions(assets);\n const registeredEntities = buildEntities(definitions);\n new ServiceFactory(gameName, definitions, registeredEntities, rules, texts);\n }\n\n logTime('Start Vue', () => {\n pinia = createPinia();\n application = createApp(AppShell);\n application.use(pinia);\n });\n\n logTime('Import components', async () => {\n for (const [componentName, component] of components) {\n application.component(componentName, (component as any)?.default);\n }\n });\n\n const store = useStateStore();\n store.initErrorHandling(application);\n let serviceFactory: ServiceFactory;\n\n logTime('Create ServiceFactory', () => {\n serviceFactory = ServiceFactory.GetInstance();\n store.setStoreData(serviceFactory);\n });\n\n logTime('Init game', () => {\n const rules = serviceFactory.GetRules();\n const gameService = serviceFactory.GetGameService();\n\n if (rules.setup?.titleScreen?.getDemoMode) {\n const demoConfig = rules.setup.titleScreen.getDemoMode();\n gameService.initDemo(demoConfig);\n } else {\n gameService.init();\n }\n });\n\n logTime('Mount app', () => {\n application.mount('#app');\n });\n};","<template>\n <dialog :open=\"game.playState === openState\">\n <div aria-hidden=\"true\" class=\"modal-backdrop show\"></div>\n <div class=\"d-block modal\" @click=\"e => closeModal(e)\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h4 class=\"model-title\">\n {{ title }}\n </h4>\n <button v-if=\"canClose\" aria-label=\"Close\" class=\"close\" type=\"button\" @click=\"closeModal()\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <slot></slot>\n </div>\n <div class=\"modal-footer\">\n <button v-if=\"closeButton && canClose\" class=\"btn btn-primary\" type=\"button\" @click=\"closeModal()\">\n {{ closeText ?? texts.closeModal }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </dialog>\n</template>\n<script lang=\"ts\" setup>\nimport {storeToRefs} from \"pinia\";\nimport {PlayState, useStateStore}from 'storyScript';\n\nconst store = useStateStore();\nconst {game} = storeToRefs(store);\nconst {texts} = store.services;\n\nconst {openState, canClose} = defineProps<{\n openState: PlayState,\n canClose: boolean,\n title: string,\n closeButton: boolean,\n closeText?: string,\n}>();\n\nconst closeModal = (event?: PointerEvent) => {\n if (event) {\n if (canClose === false || !(<HTMLElement>event.target).classList.contains(\"modal\")) {\n return;\n }\n }\n\n game.value.playState = null;\n}\n\n</script>","<template>\n <dialog :open=\"game.playState === openState\">\n <div aria-hidden=\"true\" class=\"modal-backdrop show\"></div>\n <div class=\"d-block modal\" @click=\"e => closeModal(e)\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h4 class=\"model-title\">\n {{ title }}\n </h4>\n <button v-if=\"canClose\" aria-label=\"Close\" class=\"close\" type=\"button\" @click=\"closeModal()\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <slot></slot>\n </div>\n <div class=\"modal-footer\">\n <button v-if=\"closeButton && canClose\" class=\"btn btn-primary\" type=\"button\" @click=\"closeModal()\">\n {{ closeText ?? texts.closeModal }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </dialog>\n</template>\n<script lang=\"ts\" setup>\nimport {storeToRefs} from \"pinia\";\nimport {PlayState, useStateStore}from 'storyScript';\n\nconst store = useStateStore();\nconst {game} = storeToRefs(store);\nconst {texts} = store.services;\n\nconst {openState, canClose} = defineProps<{\n openState: PlayState,\n canClose: boolean,\n title: string,\n closeButton: boolean,\n closeText?: string,\n}>();\n\nconst closeModal = (event?: PointerEvent) => {\n if (event) {\n if (canClose === false || !(<HTMLElement>event.target).classList.contains(\"modal\")) {\n return;\n }\n }\n\n game.value.playState = null;\n}\n\n</script>","import {onMounted, Ref, watch} from \"vue\";\nimport {useStateStore} from \"ui/StateStore\";\nimport {storeToRefs} from \"pinia\";\nimport {isTouchDevice} from 'src/constants';\nimport {IActiveCombination, ICustomCursor} from 'storyScript';\n\nexport function useCustomCursor(uiRoot: Ref<HTMLElement>) {\n const cursorRegex = /resources\\/[\\w-]*\\.[a-zA-Z]{3,4}/;\n const rootElement = uiRoot;\n\n const store = useStateStore();\n const {game, customCursor, combinationCursor} = storeToRefs(store);\n\n watch(() => customCursor.value, (newVal?: ICustomCursor) => {\n if (newVal?.style) {\n game.value.UIRootElement.style.cursor = customCursor.value.style;\n }\n });\n\n watch(() => game.value.combinations.activeCombination, (newVal?: IActiveCombination) => {\n if (!newVal) {\n Array.from<HTMLElement>(game.value.UIRootElement.querySelectorAll('.feature-cursor')).forEach(e => {\n e.style.cursor = customCursor.value?.style || null;\n });\n }\n });\n\n onMounted(() => {\n game.value.UIRootElement = rootElement.value.closest('body');\n\n game.value.UIRootElement.addEventListener('mouseover', e => {\n setCursorStyle(e.target as HTMLElement);\n });\n });\n\n const setCursorStyle = (element: HTMLElement) => {\n if (isTouchDevice) {\n return;\n }\n\n let isDefaultPointer = getComputedStyle(element)?.cursor === 'pointer';\n let cursorStyle = null;\n\n if (element.classList.contains('feature-cursor')) {\n const combinationPicture = game.value.combinations.activeCombination?.selectedCombinationAction?.picture;\n\n if (combinationPicture) {\n cursorStyle = combinationCursor.value.style.replace(cursorRegex, `resources/${combinationPicture}`);\n } else {\n cursorStyle = customCursor.value?.style || null;\n }\n } else if (isDefaultPointer && customCursor.value) {\n cursorStyle = customCursor.value.style;\n }\n\n if (cursorStyle) {\n element.style.cursor = cursorStyle;\n }\n }\n}","import {useStateStore} from \"ui/StateStore\";\nimport {storeToRefs} from \"pinia\";\nimport {computed, onMounted, onUpdated, Ref, ref, watch} from \"vue\";\nimport {IMap} from 'storyScript';\nimport {isTouchDevice} from 'src/constants';\n\nexport function useLocationMap(mapImageRef: Ref<HTMLImageElement>, mapDialogRef: Ref<HTMLDialogElement>) {\n const visible: string = 'visible';\n const hidden: string = 'hidden';\n const reachable: string = 'reachable';\n const visited: string = 'visited';\n const labelClass: string = 'map-location-label';\n const imageClass: string = 'map-location-image';\n\n const store = useStateStore();\n const {game} = storeToRefs(store);\n const {texts} = store.services;\n\n const map = computed(() => game.value.currentMap);\n const location = computed(() => game.value.currentLocation);\n\n const fullScreen = ref(false);\n const firstShowFullScreen = ref(true);\n const touchMarkersVisible = ref(false);\n const mapDialog = mapDialogRef;\n const currentMap = mapImageRef;\n const currentFullScreenMap = ref<HTMLImageElement>(null);\n\n watch(() => location.value, () => {\n navigateMap(map.value, currentMap.value, false);\n\n if (fullScreen.value) {\n navigateMap(map.value, currentFullScreenMap.value, false);\n }\n });\n\n onMounted(() => {\n prepareMap(map.value, false);\n });\n\n onUpdated(() => {\n prepareMap(map.value, true);\n });\n\n const toggleTouchMarkersVisible = () => {\n if (!isTouchDevice) {\n return;\n }\n \n touchMarkersVisible.value = !touchMarkersVisible.value;\n\n if (map.value.showMarkersOnKeyPress) {\n const mapContainer = (fullScreen.value ? currentFullScreenMap.value : currentMap.value).parentElement;\n const labelElements = mapContainer.getElementsByClassName(labelClass);\n const markerElements = mapContainer.getElementsByClassName(imageClass);\n setMarkerVisibility(labelElements, markerElements, touchMarkersVisible.value ? visible : hidden);\n }\n }\n\n function toggleFullScreen() {\n fullScreen.value = !fullScreen.value;\n\n if (fullScreen.value) {\n mapDialog.value.showModal();\n navigateMap(map.value, currentFullScreenMap.value, firstShowFullScreen.value);\n firstShowFullScreen.value = false;\n currentFullScreenMap.value.focus();\n } else {\n mapDialog.value.close();\n }\n }\n\n function prepareMap(newMap: IMap, cleanup: boolean) {\n if (!newMap) {\n return;\n }\n\n const mapContainer = currentMap.value.parentElement;\n\n if (cleanup) {\n firstShowFullScreen.value = true;\n currentMap.value.onload = null;\n mapContainer.onkeydown = null;\n mapContainer.onkeyup = null;\n const labelElements = Array.prototype.slice.call(mapContainer.getElementsByClassName(labelClass));\n labelElements.forEach(l => l.remove());\n const markerElements = Array.prototype.slice.call(mapContainer.getElementsByClassName(imageClass));\n markerElements.forEach(l => l.remove());\n mapDialog.value.onkeydown = null;\n mapDialog.value.onkeyup = null;\n mapDialog.value.replaceChildren();\n }\n\n if (newMap.toggleFullScreen === true) {\n let fullScreenMap = getMapElement(mapDialog.value);\n\n if (!fullScreenMap) {\n for (const n in Object.keys(mapContainer.children)) {\n const child = mapContainer.children[n];\n mapDialog.value.appendChild(child.cloneNode(true));\n }\n\n const closeToggle = mapDialog.value.getElementsByClassName('map-full-screen-toggle')[0] as HTMLSpanElement;\n closeToggle.innerText = texts.closeFullScreenMap;\n closeToggle.onclick = () => toggleFullScreen();\n \n const showMarkersToggle = (mapDialog.value.querySelector('.show-marker-instructions') as HTMLElement);\n showMarkersToggle.onclick = () => toggleTouchMarkersVisible();\n }\n\n currentFullScreenMap.value = getMapElement(mapDialog.value);\n initMap(currentFullScreenMap.value);\n }\n\n initMap(currentMap.value);\n }\n\n function initMap(mapElement: HTMLElement) {\n if (!map) {\n return;\n }\n\n mapElement.onkeydown = null;\n mapElement.onkeyup = null;\n\n map.value.locations.forEach(l => {\n const textLabel = l.markerImage ? null : l.textLabel ?? (map.value.locationNamesAsTextMarkers ? game.value.locations[l.location as string].name : null);\n const id = l.location as string;\n\n if (textLabel) {\n l.markerElement = addElement(mapElement, l.coords, id, labelClass, 'span', textLabel);\n }\n\n const markerImage = l.markerImage ?? map.value.locationMarkerImage;\n\n if (markerImage) {\n l.markerElement = addElement(mapElement, l.coords, id, imageClass, 'img', markerImage);\n }\n });\n\n if (map.value.showMarkersOnKeyPress) {\n const mapContainer = mapElement.parentElement;\n const labelElements = mapElement.parentElement.getElementsByClassName(labelClass);\n const markerElements = mapElement.parentElement.getElementsByClassName(imageClass);\n\n mapContainer.onkeydown = e => {\n if (e.key === map.value.showMarkersOnKeyPress) {\n setMarkerVisibility(labelElements, markerElements, visible);\n }\n };\n\n mapContainer.onkeyup = e => {\n if (e.key === map.value.showMarkersOnKeyPress) {\n setMarkerVisibility(labelElements, markerElements, hidden);\n }\n }\n }\n }\n\n function showMap() {\n navigateMap(map.value, currentMap.value, true);\n }\n\n function navigateMap(map: IMap, mapElement: HTMLElement, show: boolean) {\n const parentElement = mapElement.parentElement;\n const coordString = map.locations.find(l => l.location === location.value.id)?.coords;\n const avatar = parentElement.getElementsByClassName('avatar-image')[0] as HTMLImageElement;\n let mapMargins: { x: number, y: number };\n\n if (coordString) {\n const coords = getCoords(coordString);\n mapMargins = {\n x: getMapMargin(mapElement, coords.x, 'width'),\n y: getMapMargin(mapElement, coords.y, 'height')\n };\n mapElement.style.marginLeft = `-${mapMargins.x}px`;\n mapElement.style.marginTop = `-${mapMargins.y}px`;\n\n if (avatar) {\n const avatarLeft = coords.x - mapMargins.x - avatar.width / 2;\n const avatarTop = coords.y - mapMargins.y - avatar.height / 2;\n setCoordinates(avatar, avatarLeft, avatarTop);\n }\n }\n\n const labelElements = parentElement.getElementsByClassName(labelClass);\n const markerElements = parentElement.getElementsByClassName(imageClass);\n moveMarker(labelElements, mapMargins);\n moveMarker(markerElements, mapMargins);\n\n if (show) {\n showElements(avatar, labelElements, markerElements);\n }\n\n parentElement.focus();\n }\n\n function setCoordinates(element: HTMLElement, left: number, top: number) {\n element.style.top = `${top}px`;\n element.style.left = `${left}px`;\n }\n\n function addElement(mapElement: HTMLElement, coordsString: string, location: string, className: string, elementType: string, elementValue: string): HTMLElement {\n const coords = getCoords(coordsString);\n const labelElement = document.createElement(\"div\");\n labelElement.setAttribute(\"class\", className);\n labelElement.style.visibility = hidden;\n labelElement.setAttribute(\"data-top\", coords.x.toString());\n labelElement.setAttribute(\"data-left\", coords.y.toString());\n labelElement.setAttribute(\"data-locationid\", location);\n const valueElement = document.createElement(elementType);\n\n if (elementType === 'span') {\n (<HTMLSpanElement>valueElement).innerText = elementValue;\n } else if (elementType === 'img') {\n (<HTMLImageElement>valueElement).src = `resources/${elementValue}`;\n }\n\n labelElement.appendChild(valueElement);\n mapElement.parentElement.appendChild(labelElement);\n return labelElement;\n }\n\n function moveMarker(markerElements: HTMLCollection, mapMargins: { x: number, y: number }) {\n if (!mapMargins) {\n return;\n }\n\n for (const n in Object.keys(markerElements)) {\n const markerElement = markerElements[n] as HTMLElement;\n const currentLeft = parseInt(markerElement.dataset.top) - markerElement.clientWidth / 2 - mapMargins.x;\n const currentTop = parseInt(markerElement.dataset.left) - markerElement.clientHeight / 2 - mapMargins.y;\n const locationId = markerElement.dataset.locationid;\n setCoordinates(markerElement, currentLeft, currentTop);\n\n const isVisited = game.value.locations.get(locationId)?.hasVisited;\n markerElement.classList.remove(visited);\n\n if (isVisited) {\n markerElement.classList.add(visited);\n }\n\n if (map.value.clickable === true) {\n const isReachable = location.value.destinations.find(d => d.target === locationId);\n\n markerElement.onclick = null;\n markerElement.classList.remove(reachable);\n\n if (isReachable) {\n markerElement.classList.add(reachable);\n markerElement.onclick = () => {\n game.value.commands.go(locationId);\n }\n } else if (location.value.id === locationId) {\n markerElement.classList.add(reachable);\n }\n }\n }\n }\n\n function showElements(avatar: HTMLElement, labelElements: HTMLCollection, markerElements: HTMLCollection) {\n setTimeout(() => {\n if (avatar) {\n avatar.style.visibility = visible;\n }\n\n if (!map.value.showMarkersOnKeyPress) {\n setMarkerVisibility(labelElements, markerElements, visible);\n }\n\n }, map.value.transitionTime ?? 1000);\n }\n\n function setMarkerVisibility(labelElements: HTMLCollection, markerElements: HTMLCollection, visibility: string) {\n for (const n in Object.keys(labelElements)) {\n const labelElement = labelElements[n] as HTMLElement;\n labelElement.style.visibility = visibility;\n }\n\n for (const n in Object.keys(markerElements)) {\n const markerElement = markerElements[n] as HTMLElement;\n markerElement.style.visibility = visibility;\n }\n }\n\n function getCoords(coordString: string) {\n const coords = coordString.split(',');\n const coordLeft = parseInt(coords[0]);\n const coordTop = parseInt(coords[1]);\n return {x: coordLeft, y: coordTop};\n }\n\n function getMapMargin(mapImage: any, coord: number, dimension: string): number {\n const mapContainer = mapImage.parentElement;\n const clientDimension = 'client' + dimension.substring(0, 1).toUpperCase() + dimension.substring(1)\n const mapDimension = mapContainer[clientDimension];\n const viewPortCenter = mapDimension / 2;\n const maxMargin = mapImage[dimension] - mapDimension;\n let mapMargin = coord > viewPortCenter ? coord - viewPortCenter : 0;\n mapMargin = mapMargin > maxMargin ? maxMargin : mapMargin;\n return mapMargin;\n }\n\n function getMapElement(parentElement: HTMLElement): HTMLImageElement {\n return parentElement.getElementsByClassName('map-image')[0] as HTMLImageElement;\n }\n\n return {\n map,\n prepareMap,\n showMap,\n toggleFullScreen,\n toggleTouchMarkersVisible\n }\n}","import {Ref} from \"vue\";\nimport {useStateStore} from \"ui/StateStore\";\nimport {storeToRefs} from \"pinia\";\nimport {PlayState} from 'storyScript';\n\nconst saveStates = [PlayState.Combat, PlayState.Conversation, PlayState.Trade];\n\nexport function usePlayStateWatch(uiRoot: Ref<HTMLElement>) {\n const rootElement = uiRoot;\n const store = useStateStore();\n const {game} = storeToRefs(store);\n const {gameService, dataService} = store.services;\n\n gameService.watchPlayState((_, newState, oldState) => {\n stopAutoplay();\n\n if (newState === null && saveStates.includes(oldState)) {\n // Save the game after finishing conversations, trade and combat.\n dataService.saveGame(game.value);\n }\n });\n\n const stopAutoplay = () => {\n if (!rootElement.value) {\n return;\n }\n \n const mediaElements = rootElement.value.querySelectorAll('audio:not(.storyscript-player), video:not(.storyscript-player)');\n mediaElements.forEach((m: Element) => (m as HTMLMediaElement).pause());\n }\n}","import {useStateStore} from \"ui/StateStore\";\nimport {Ref, ref, watch} from \"vue\";\nimport {storeToRefs} from \"pinia\";\n\nexport function useSound(musicPlayerRef: Ref<HTMLAudioElement>) {\n const store = useStateStore();\n const {game} = storeToRefs(store);\n const {rules, soundService} = store.services;\n\n const musicPlayer = musicPlayerRef;\n\n const canPlay = ref<boolean>(null);\n const fadeInterval = ref<NodeJS.Timeout>(null);\n const fadingMusic = ref(false);\n const currentMusic = ref<string>(null);\n const currentVolume = ref(1);\n\n let audioContext: AudioContext;\n const soundQueue: [number, string][] = [];\n\n document.addEventListener('click', async () => {\n if (!audioContext) {\n audioContext = new window.AudioContext();\n canPlay.value = true;\n \n if (musicPlayer.value) {\n await musicPlayer.value.play();\n }\n }\n }, { once: true });\n \n watch(musicPlayerRef, (newValue) => {\n if (newValue && canPlay.value === null) {\n canPlay.value = Boolean(audioContext);\n }\n }, { immediate: true });\n\n const getSoundQueue = (): [number, string][] => {\n Array.from(game.value.sounds.soundQueue).forEach(e => {\n if (!e[1].playing) {\n soundQueue.push([e[0], e[1].value]);\n e[1].playing = true;\n }\n });\n\n return soundQueue;\n }\n\n const getCurrentMusic = (): string => {\n const music = soundService.getCurrentMusic();\n\n if (rules.setup.fadeMusicInterval) {\n\n if (!currentMusic.value) {\n currentMusic.value = music;\n }\n\n if (!fadingMusic.value && music != currentMusic.value) {\n fadingMusic.value = true;\n fadeInterval.value = setInterval(() => fade(music), rules.setup.fadeMusicInterval);\n }\n\n return currentMusic.value;\n }\n\n return music;\n }\n\n const soundCompleted = (soundKey: number) => {\n const sound = game.value.sounds.soundQueue.get(soundKey);\n\n if (sound) {\n sound.completeCallBack?.();\n game.value.sounds.soundQueue.delete(soundKey);\n }\n\n const queueEntry = soundQueue.find(([k, _]) => soundKey === k);\n\n if (!queueEntry) {\n return;\n }\n\n const index = soundQueue.indexOf(queueEntry);\n\n if (index > -1) {\n soundQueue.splice(index, 1);\n }\n }\n\n const fade = (newMusic: string) => {\n const newVolume = currentVolume.value - 0.1;\n\n if (newVolume >= 0) {\n currentVolume.value = newVolume;\n } else {\n clearInterval(fadeInterval.value);\n currentVolume.value = 1;\n currentMusic.value = newMusic;\n fadingMusic.value = false;\n }\n\n musicPlayer.value.volume = currentVolume.value;\n }\n\n return {\n canPlay,\n getSoundQueue,\n getCurrentMusic,\n soundCompleted\n }\n}","import {addHtmlSpaces} from \"src/Engine/utilityFunctions\";\nimport {IFeature} from 'storyScript';\nimport {useStateStore} from \"ui/StateStore\";\nimport {Ref, watch} from \"vue\";\nimport {storeToRefs} from \"pinia\";\nimport {isTouchDevice} from 'src/constants';\n\nexport function useTextFeatures(descriptionRef: Ref<HTMLDivElement>) {\n const activeTriggerClass = 'trigger-active';\n\n const store = useStateStore();\n const {game} = storeToRefs(store);\n const {combinationService} = store.services;\n\n const description = descriptionRef;\n\n watch(() => game.value.combinations.activeCombination?.selectedTool, () => {\n refreshFeatures();\n });\n\n const refreshFeatures = () => {\n // Show the text of added features.\n const featureArray = Array.from(description.value?.getElementsByTagName('feature'));\n\n if (featureArray.length === 0) {\n return;\n }\n\n featureArray.filter(e => e.innerHTML.trim() === '')\n .forEach((e) => {\n const feature = game.value.currentLocation.features.get(e.getAttribute('name'));\n\n if (feature) {\n game.value.currentLocation.description = game.value.currentLocation.description.replace(new RegExp('<feature name=\"' + feature.id + '\">\\s*<\\/feature>', 'i'), '<feature name=\"' + feature.id + '\">' + addHtmlSpaces(feature.description) + '<\\/feature>');\n }\n });\n\n // Remove the text of deleted features.\n featureArray.filter(e => e.innerHTML.trim() !== '')\n .forEach((e) => {\n const featureName = e.getAttribute('name')?.toLowerCase();\n\n if (featureName && game.value.combinations.combinationResult.featuresToRemove.find(f => f === featureName)) {\n e.innerHTML = '';\n }\n });\n\n featureArray.forEach((e) => {\n const feature = game.value.currentLocation.features.get(e.getAttribute('name'));\n\n if (feature && game.value.combinations.activeCombination?.selectedTool?.id === feature.id) {\n return;\n }\n\n e.classList.remove('combine-active-selected', 'combine-selectable', 'feature-cursor');\n e.classList.add('feature-cursor');\n\n if (game.value.combinations.activeCombination) {\n e.classList.add('combine-selectable');\n }\n });\n };\n\n const click = (ev: PointerEvent) => {\n const triggerElement = getTriggerElement(ev.target as HTMLElement);\n\n if (triggerElement && isTouchDevice) {\n const activate = !triggerElement.classList.contains(activeTriggerClass);\n\n Array.from(description.value.querySelectorAll('[data-trigger]')).forEach((el) => {\n toggleTrigger(el as any, false);\n });\n\n toggleTrigger(triggerElement, activate);\n }\n\n const feature = getFeature(ev);\n\n if (feature) {\n const result = game.value.combinations.tryCombine(feature);\n const className = combinationService.getCombineClass(feature);\n\n if (className) {\n const featureElement = getFeatureElement(ev);\n featureElement.classList.add(className);\n }\n\n if (result.success) {\n refreshFeatures();\n }\n }\n }\n\n const mouseOver = (ev: MouseEvent) => {\n if (isTouchDevice) {\n return;\n }\n\n toggleTrigger(getTriggerElement(ev?.target as HTMLElement), true);\n };\n\n const mouseOut = (ev: MouseEvent) => {\n if (isTouchDevice) {\n return;\n }\n\n toggleTrigger(getTriggerElement(ev?.target as HTMLElement), false);\n };\n\n const toggleTrigger = (element: HTMLElement, active: boolean) => {\n if (!element) {\n return;\n }\n\n const data = element.dataset\n const event = game.value.currentLocation.triggeredActions?.find(([k, _]) => k === data.trigger)?.[1];\n\n if (active) {\n element.classList.add(activeTriggerClass);\n event?.(game.value, active, data);\n } else {\n element.classList.remove(activeTriggerClass);\n event?.(game.value, active, data);\n }\n }\n\n const getTriggerElement = (element: HTMLElement): HTMLElement => {\n return element?.closest('[data-trigger]') as HTMLElement;\n }\n\n const getFeatureElement = (ev: MouseEvent) => {\n return (ev.target as HTMLElement).closest('feature');\n }\n\n const getFeature = (ev: MouseEvent): IFeature => {\n const featureElement = getFeatureElement(ev);\n const featureName = featureElement?.getAttribute('name');\n return featureName ? game.value.currentLocation.features.get(featureName) : null;\n }\n\n return {\n description,\n refreshFeatures,\n click,\n mouseOver,\n mouseOut\n }\n}","import {computed, onUpdated, Ref, ref, watch} from \"vue\";\nimport {useStateStore} from \"ui/StateStore\";\nimport {storeToRefs} from \"pinia\";\nimport {isTouchDevice} from 'src/constants';\n\nconst prepareLoadedImages = (locationImagesRef: HTMLImageElement[]) => {\n const loadedImages: { element: HTMLImageElement, loadPromise: Promise<void> }[] = [];\n\n locationImagesRef.forEach(l => {\n let promiseResolve: () => {};\n\n const loadPromise = new Promise<void>((r: any): void => {\n promiseResolve = r;\n });\n\n l.onload = promiseResolve;\n\n if (l.naturalWidth > 0) {\n promiseResolve();\n }\n\n loadedImages.push({\n element: l,\n loadPromise: loadPromise\n });\n });\n\n return loadedImages;\n}\n\nexport function useVisualFeatures(imageRef: Ref<HTMLDivElement>) {\n const store = useStateStore();\n const {\n game,\n defaultCombination,\n combinationCursor\n } = storeToRefs(store);\n\n const locationFeatures = imageRef;\n const locationImageOriginalWidth = new Map<string, number>();\n const featureImageOriginalDimensions = new Map<string, [number, number]>();\n const areaOriginalCoordinates = new Map<string, string>();\n const factor = ref(1);\n const locationId = computed(() => game.value.currentLocation.id);\n const combinationPicture = computed(() => game.value.combinations.activeCombination?.selectedCombinationAction?.picture ?? defaultCombination.value?.picture);\n\n const calculateFactor = () => {\n if (!locationFeatures.value) {\n return;\n }\n\n const mainImage = locationFeatures.value.querySelector('img');\n factor.value = mainImage.width / locationImageOriginalWidth.get(game.value.currentLocation.id);\n }\n\n window.onresize = () => {\n const oldFactor = factor.value;\n calculateFactor();\n \n if (factor.value !== oldFactor) {\n prepareFeatures();\n }\n };\n\n onUpdated(() => {\n prepareFeatures();\n });\n\n watch(() => game.value.combinations.activeCombination, () => setCombinationSymbols());\n\n const initFeatures = () => {\n const mainImage = locationFeatures.value?.querySelector('img');\n\n if (!locationImageOriginalWidth.has(locationId.value)) {\n locationImageOriginalWidth.set(locationId.value, mainImage.naturalWidth);\n }\n\n calculateFactor();\n prepareFeatures();\n }\n\n const prepareFeatures = () => {\n if (!locationFeatures.value) {\n return;\n }\n\n const locationImages = Array.from(locationFeatures.value.querySelectorAll('img.feature-picture') ?? []) as HTMLImageElement[];\n const loadedImages = prepareLoadedImages(locationImages);\n const allPromises = loadedImages.map(i => i.loadPromise);\n\n Promise.all(allPromises).then(() => {\n // Resize item images\n loadedImages.map(l => l.element).forEach(i => {\n const featureId = i.id.split('-')[1];\n const imageKey = `${locationId.value}-${featureId}`;\n\n if (!featureImageOriginalDimensions.has(imageKey)) {\n featureImageOriginalDimensions.set(imageKey, [i.naturalWidth, i.naturalHeight]);\n }\n\n const originalDimensions = featureImageOriginalDimensions.get(imageKey);\n i.width = i.dataset.spriteWidth ? Number.parseInt(i.dataset.spriteWidth) * factor.value : Math.round(originalDimensions[0] * factor.value);\n i.height = i.dataset.spriteHeight ? Number.parseInt(i.dataset.spriteHeight) * factor.value : Math.round(originalDimensions[1] * factor.value);\n });\n\n // Reposition areas and images for features and add symbols for active combination.\n const areas = Array.from(locationFeatures.value.querySelectorAll('area'));\n\n areas.forEach(a => {\n const featureId = a.id.split('-')[2];\n const areaKey = `${locationId.value}-${featureId}`;\n\n if (!areaOriginalCoordinates.has(areaKey)) {\n areaOriginalCoordinates.set(areaKey, a.coords);\n }\n\n const originalCoords = areaOriginalCoordinates.get(areaKey);\n const calculatedCoords = originalCoords.split(',').map(c => Math.round(parseInt(c.trim()) * factor.value));\n a.coords = calculatedCoords.join(',');\n\n // Calculate the center of the area to place a symbol later on.\n let totalX = 0, totalY = 0;\n\n calculatedCoords.forEach((c, i) => {\n (i + 1) % 2 !== 0 ? totalX += c : totalY += c;\n })\n\n const avgX = Math.round(totalX / (calculatedCoords.length / 2));\n const avgY = Math.round(totalY / (calculatedCoords.length / 2));\n a.dataset.imageCoords = `${avgX},${avgY}`;\n positionFeatureImage(featureId, avgX, avgY);\n });\n\n // We need a timeout here to allow the DOM to update so we can get the updated coordinates for\n // the symbols from the area data attributes.\n setTimeout(() => {\n setCombinationSymbols();\n });\n });\n }\n\n const positionFeatureImage = (featureId: string, x: number, y: number) => {\n const feature = game.value.currentLocation.features.get(featureId);\n \n if (!feature?.picture && !feature?.animation) {\n return;\n }\n\n const featureImage = Array.from(locationFeatures.value.querySelectorAll('img.feature-picture'))\n .find(a => a.id.split('-')[1] === featureId) as HTMLImageElement;\n\n if (!featureImage) {\n return;\n }\n\n const featureHeight = feature.animation ? feature.animation.height * factor.value : featureImage.height;\n const featureWidth = feature.animation ? feature.animation.width * factor.value : featureImage.width;\n const top = Math.round(y - featureHeight / 2);\n const left = Math.round(x - featureWidth / 2);\n featureImage.style.top = top + 'px';\n featureImage.style.left = left + 'px';\n }\n\n const setCombinationSymbols = () => {\n if (!isTouchDevice) {\n return;\n }\n\n const areas = Array.from(locationFeatures.value?.querySelectorAll('area'));\n const existingSymbols = Array.from(imageRef.value?.querySelectorAll('.combination-symbol'));\n\n existingSymbols?.forEach(s => {\n const symbolImage = s as HTMLImageElement;\n symbolImage.onclick = null;\n imageRef.value.removeChild(symbolImage);\n });\n\n if (!combinationPicture.value) {\n return;\n }\n\n areas?.forEach(a => {\n const coords = a.dataset.imageCoords?.split(',').map(c => parseInt(c));\n\n if (!coords || !coords.length) {\n return;\n }\n\n const featureId = a.id.split('-')[2];\n const feature = game.value.currentLocation.features.get(featureId);\n\n if (!feature || feature.interactive === false) {\n return;\n }\n\n const image = document.createElement('img');\n image.src = `resources/${combinationPicture.value}`;\n const imageWidth = Math.round(combinationCursor.value.dimensions.width * factor.value);\n const imageHeight = Math.round(combinationCursor.value.dimensions.height * factor.value);\n const imagePosX = Math.round(coords[0] - imageWidth / 2);\n const imagePosY = Math.round(coords[1] - imageHeight / 2);\n\n image.style.position = 'absolute';\n image.style.width = imageWidth + 'px';\n image.style.height = imageHeight + 'px';\n image.style.top = `${imagePosY}px`;\n image.style.left = `${imagePosX}px`;\n image.classList.add('combination-symbol');\n image.onclick = () => game.value.combinations.tryCombine(feature);\n imageRef.value.appendChild(image);\n });\n }\n\n return {\n locationFeatures,\n factor,\n initFeatures,\n prepareFeatures\n }\n}"],"ignoreList":[36,37,38,39,40,41],"mappings":"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;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,MAAM;GACN,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,MAAM;GACN,MAAM;GACN,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,QAAQ;GACR,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,MAAM;GACN,MAAM;GACN,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,MAAM;GACN,KAAK;GACL,KAAK;GACL,KAAK;GACL,OAAO;GACP,MAAM;GACN,KAAK;GACL,KAAK;EACN;;;;;;EAMA,IAAI,qBAAqB,CAAC,KAAK,GAAG;;;;;EAKlC,IAAI,aAAa;GAChB,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,MAAM;GACN,KAAK;GACL,KAAK;GACL,QAAQ;GACR,MAAM;GACN,OAAO;GACP,MAAM;GACN,OAAO;GACP,KAAK;GACL,MAAM;GACN,QAAQ;GACR,QAAQ;GACR,MAAM;GACN,QAAQ;GACR,QAAQ;GACR,MAAM;GACN,MAAM;GACN,MAAM;GACN,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,MAAM;GACN,QAAQ;GACR,OAAO;GACP,MAAM;GACN,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,MAAM;GACN,OAAO;GACP,OAAO;GACP,OAAO;GACP,SAAS;GACT,MAAM;GACN,OAAO;GACP,OAAO;GACP,OAAO;GACP,MAAM;GACN,QAAQ;GACR,MAAM;GACN,KAAK;GACL,MAAM;GACN,MAAM;GACN,OAAO;GACP,OAAO;EACR;;;;;EAKA,IAAI,cAAc;GACjB,MAAM,CAAC;GACP,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;EACD;;;;;;EAMA,IAAI,YAAY;GACf,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM,CAAC;GACP,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM,CAAC;GACP,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM,CAAC;GACP,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;GACN;GACA,MAAM,CAAC;GACP,MAAM;IACL,K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"}
|