idlerpg.sh 0.1.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/README.md +171 -0
- package/dist/affix/AffixRegistry.d.ts +68 -0
- package/dist/affix/AffixRegistry.d.ts.map +1 -0
- package/dist/affix/AffixRegistry.js +245 -0
- package/dist/affix/AffixRegistry.js.map +1 -0
- package/dist/affix/PluginLoader.d.ts +66 -0
- package/dist/affix/PluginLoader.d.ts.map +1 -0
- package/dist/affix/PluginLoader.js +321 -0
- package/dist/affix/PluginLoader.js.map +1 -0
- package/dist/affix/builtin.d.ts +6 -0
- package/dist/affix/builtin.d.ts.map +1 -0
- package/dist/affix/builtin.js +311 -0
- package/dist/affix/builtin.js.map +1 -0
- package/dist/affix/index.d.ts +8 -0
- package/dist/affix/index.d.ts.map +1 -0
- package/dist/affix/index.js +11 -0
- package/dist/affix/index.js.map +1 -0
- package/dist/affix/types.d.ts +152 -0
- package/dist/affix/types.d.ts.map +1 -0
- package/dist/affix/types.js +8 -0
- package/dist/affix/types.js.map +1 -0
- package/dist/ai/PlayKitClient.d.ts +208 -0
- package/dist/ai/PlayKitClient.d.ts.map +1 -0
- package/dist/ai/PlayKitClient.js +721 -0
- package/dist/ai/PlayKitClient.js.map +1 -0
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +8 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/app/App.d.ts +85 -0
- package/dist/app/App.d.ts.map +1 -0
- package/dist/app/App.js +296 -0
- package/dist/app/App.js.map +1 -0
- package/dist/app/EventBus.d.ts +222 -0
- package/dist/app/EventBus.d.ts.map +1 -0
- package/dist/app/EventBus.js +88 -0
- package/dist/app/EventBus.js.map +1 -0
- package/dist/app/Keybind.d.ts +83 -0
- package/dist/app/Keybind.d.ts.map +1 -0
- package/dist/app/Keybind.js +184 -0
- package/dist/app/Keybind.js.map +1 -0
- package/dist/app/Router.d.ts +123 -0
- package/dist/app/Router.d.ts.map +1 -0
- package/dist/app/Router.js +142 -0
- package/dist/app/Router.js.map +1 -0
- package/dist/app/ScreenManager.d.ts +97 -0
- package/dist/app/ScreenManager.d.ts.map +1 -0
- package/dist/app/ScreenManager.js +216 -0
- package/dist/app/ScreenManager.js.map +1 -0
- package/dist/app/index.d.ts +14 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +19 -0
- package/dist/app/index.js.map +1 -0
- package/dist/app/screens/BaseScreen.d.ts +101 -0
- package/dist/app/screens/BaseScreen.d.ts.map +1 -0
- package/dist/app/screens/BaseScreen.js +132 -0
- package/dist/app/screens/BaseScreen.js.map +1 -0
- package/dist/app/screens/CharacterCreationScreen.d.ts +42 -0
- package/dist/app/screens/CharacterCreationScreen.d.ts.map +1 -0
- package/dist/app/screens/CharacterCreationScreen.js +467 -0
- package/dist/app/screens/CharacterCreationScreen.js.map +1 -0
- package/dist/app/screens/CombatScreen.d.ts +30 -0
- package/dist/app/screens/CombatScreen.d.ts.map +1 -0
- package/dist/app/screens/CombatScreen.js +309 -0
- package/dist/app/screens/CombatScreen.js.map +1 -0
- package/dist/app/screens/DialogScreen.d.ts +29 -0
- package/dist/app/screens/DialogScreen.d.ts.map +1 -0
- package/dist/app/screens/DialogScreen.js +295 -0
- package/dist/app/screens/DialogScreen.js.map +1 -0
- package/dist/app/screens/ExploreScreen.d.ts +50 -0
- package/dist/app/screens/ExploreScreen.d.ts.map +1 -0
- package/dist/app/screens/ExploreScreen.js +308 -0
- package/dist/app/screens/ExploreScreen.js.map +1 -0
- package/dist/app/screens/HelpScreen.d.ts +12 -0
- package/dist/app/screens/HelpScreen.d.ts.map +1 -0
- package/dist/app/screens/HelpScreen.js +155 -0
- package/dist/app/screens/HelpScreen.js.map +1 -0
- package/dist/app/screens/InventoryScreen.d.ts +27 -0
- package/dist/app/screens/InventoryScreen.d.ts.map +1 -0
- package/dist/app/screens/InventoryScreen.js +326 -0
- package/dist/app/screens/InventoryScreen.js.map +1 -0
- package/dist/app/screens/PrologueScreen.d.ts +24 -0
- package/dist/app/screens/PrologueScreen.d.ts.map +1 -0
- package/dist/app/screens/PrologueScreen.js +176 -0
- package/dist/app/screens/PrologueScreen.js.map +1 -0
- package/dist/app/screens/TitleScreen.d.ts +42 -0
- package/dist/app/screens/TitleScreen.d.ts.map +1 -0
- package/dist/app/screens/TitleScreen.js +380 -0
- package/dist/app/screens/TitleScreen.js.map +1 -0
- package/dist/app/screens/TravelScreen.d.ts +22 -0
- package/dist/app/screens/TravelScreen.d.ts.map +1 -0
- package/dist/app/screens/TravelScreen.js +122 -0
- package/dist/app/screens/TravelScreen.js.map +1 -0
- package/dist/app/screens/index.d.ts +14 -0
- package/dist/app/screens/index.d.ts.map +1 -0
- package/dist/app/screens/index.js +17 -0
- package/dist/app/screens/index.js.map +1 -0
- package/dist/commands/CommandRegistry.d.ts +91 -0
- package/dist/commands/CommandRegistry.d.ts.map +1 -0
- package/dist/commands/CommandRegistry.js +159 -0
- package/dist/commands/CommandRegistry.js.map +1 -0
- package/dist/commands/index.d.ts +7 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +10 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/core/Actor.d.ts +103 -0
- package/dist/core/Actor.d.ts.map +1 -0
- package/dist/core/Actor.js +409 -0
- package/dist/core/Actor.js.map +1 -0
- package/dist/core/Combat.d.ts +37 -0
- package/dist/core/Combat.d.ts.map +1 -0
- package/dist/core/Combat.js +294 -0
- package/dist/core/Combat.js.map +1 -0
- package/dist/core/DungeonRunner.d.ts +169 -0
- package/dist/core/DungeonRunner.d.ts.map +1 -0
- package/dist/core/DungeonRunner.js +627 -0
- package/dist/core/DungeonRunner.js.map +1 -0
- package/dist/core/Game.d.ts +133 -0
- package/dist/core/Game.d.ts.map +1 -0
- package/dist/core/Game.js +644 -0
- package/dist/core/Game.js.map +1 -0
- package/dist/core/IdleCombat.d.ts +61 -0
- package/dist/core/IdleCombat.d.ts.map +1 -0
- package/dist/core/IdleCombat.js +461 -0
- package/dist/core/IdleCombat.js.map +1 -0
- package/dist/core/IdleGameManager.d.ts +198 -0
- package/dist/core/IdleGameManager.d.ts.map +1 -0
- package/dist/core/IdleGameManager.js +688 -0
- package/dist/core/IdleGameManager.js.map +1 -0
- package/dist/core/IdleSaveManager.d.ts +109 -0
- package/dist/core/IdleSaveManager.d.ts.map +1 -0
- package/dist/core/IdleSaveManager.js +296 -0
- package/dist/core/IdleSaveManager.js.map +1 -0
- package/dist/core/NewGameFlowManager.d.ts +64 -0
- package/dist/core/NewGameFlowManager.d.ts.map +1 -0
- package/dist/core/NewGameFlowManager.js +153 -0
- package/dist/core/NewGameFlowManager.js.map +1 -0
- package/dist/core/Player.d.ts +65 -0
- package/dist/core/Player.d.ts.map +1 -0
- package/dist/core/Player.js +261 -0
- package/dist/core/Player.js.map +1 -0
- package/dist/core/RoomHandlers.d.ts +75 -0
- package/dist/core/RoomHandlers.d.ts.map +1 -0
- package/dist/core/RoomHandlers.js +383 -0
- package/dist/core/RoomHandlers.js.map +1 -0
- package/dist/core/SaveManager.d.ts +84 -0
- package/dist/core/SaveManager.d.ts.map +1 -0
- package/dist/core/SaveManager.js +281 -0
- package/dist/core/SaveManager.js.map +1 -0
- package/dist/core/SaveMigration.d.ts +69 -0
- package/dist/core/SaveMigration.d.ts.map +1 -0
- package/dist/core/SaveMigration.js +408 -0
- package/dist/core/SaveMigration.js.map +1 -0
- package/dist/core/StateAdapter.d.ts +79 -0
- package/dist/core/StateAdapter.d.ts.map +1 -0
- package/dist/core/StateAdapter.js +397 -0
- package/dist/core/StateAdapter.js.map +1 -0
- package/dist/core/Team.d.ts +145 -0
- package/dist/core/Team.d.ts.map +1 -0
- package/dist/core/Team.js +371 -0
- package/dist/core/Team.js.map +1 -0
- package/dist/core/TeamCombat.d.ts +88 -0
- package/dist/core/TeamCombat.d.ts.map +1 -0
- package/dist/core/TeamCombat.js +405 -0
- package/dist/core/TeamCombat.js.map +1 -0
- package/dist/core/TeamDungeonRunner.d.ts +186 -0
- package/dist/core/TeamDungeonRunner.d.ts.map +1 -0
- package/dist/core/TeamDungeonRunner.js +758 -0
- package/dist/core/TeamDungeonRunner.js.map +1 -0
- package/dist/core/TimeManager.d.ts +114 -0
- package/dist/core/TimeManager.d.ts.map +1 -0
- package/dist/core/TimeManager.js +318 -0
- package/dist/core/TimeManager.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +12 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/timeConstants.d.ts +135 -0
- package/dist/core/timeConstants.d.ts.map +1 -0
- package/dist/core/timeConstants.js +157 -0
- package/dist/core/timeConstants.js.map +1 -0
- package/dist/core/types.d.ts +780 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +16 -0
- package/dist/core/types.js.map +1 -0
- package/dist/data/continents/index.d.ts +163 -0
- package/dist/data/continents/index.d.ts.map +1 -0
- package/dist/data/continents/index.js +31 -0
- package/dist/data/continents/index.js.map +1 -0
- package/dist/data/continents/verdantia.d.ts +294 -0
- package/dist/data/continents/verdantia.d.ts.map +1 -0
- package/dist/data/continents/verdantia.js +327 -0
- package/dist/data/continents/verdantia.js.map +1 -0
- package/dist/handlers/DialogHandler.d.ts +95 -0
- package/dist/handlers/DialogHandler.d.ts.map +1 -0
- package/dist/handlers/DialogHandler.js +450 -0
- package/dist/handlers/DialogHandler.js.map +1 -0
- package/dist/handlers/SaveLoadHandler.d.ts +60 -0
- package/dist/handlers/SaveLoadHandler.d.ts.map +1 -0
- package/dist/handlers/SaveLoadHandler.js +187 -0
- package/dist/handlers/SaveLoadHandler.js.map +1 -0
- package/dist/handlers/TitleScreenHandler.d.ts +43 -0
- package/dist/handlers/TitleScreenHandler.d.ts.map +1 -0
- package/dist/handlers/TitleScreenHandler.js +508 -0
- package/dist/handlers/TitleScreenHandler.js.map +1 -0
- package/dist/handlers/WorkshopHandler.d.ts +75 -0
- package/dist/handlers/WorkshopHandler.d.ts.map +1 -0
- package/dist/handlers/WorkshopHandler.js +401 -0
- package/dist/handlers/WorkshopHandler.js.map +1 -0
- package/dist/handlers/index.d.ts +12 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +14 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/types.d.ts +34 -0
- package/dist/handlers/types.d.ts.map +1 -0
- package/dist/handlers/types.js +8 -0
- package/dist/handlers/types.js.map +1 -0
- package/dist/i18n/en.d.ts +3 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +130 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +40 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +105 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/types.d.ts +133 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +8 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/i18n/zh.d.ts +3 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +130 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/instrument.d.ts +8 -0
- package/dist/instrument.d.ts.map +1 -0
- package/dist/instrument.js +33 -0
- package/dist/instrument.js.map +1 -0
- package/dist/main-new.d.ts +12 -0
- package/dist/main-new.d.ts.map +1 -0
- package/dist/main-new.js +32 -0
- package/dist/main-new.js.map +1 -0
- package/dist/main.d.ts +7 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +2816 -0
- package/dist/main.js.map +1 -0
- package/dist/map/ContinentManager.d.ts +88 -0
- package/dist/map/ContinentManager.d.ts.map +1 -0
- package/dist/map/ContinentManager.js +241 -0
- package/dist/map/ContinentManager.js.map +1 -0
- package/dist/map/DungeonGenerator.d.ts +32 -0
- package/dist/map/DungeonGenerator.d.ts.map +1 -0
- package/dist/map/DungeonGenerator.js +615 -0
- package/dist/map/DungeonGenerator.js.map +1 -0
- package/dist/map/MapGenerator.d.ts +27 -0
- package/dist/map/MapGenerator.d.ts.map +1 -0
- package/dist/map/MapGenerator.js +485 -0
- package/dist/map/MapGenerator.js.map +1 -0
- package/dist/map/index.d.ts +5 -0
- package/dist/map/index.d.ts.map +1 -0
- package/dist/map/index.js +8 -0
- package/dist/map/index.js.map +1 -0
- package/dist/npc/NPCGenerator.d.ts +68 -0
- package/dist/npc/NPCGenerator.d.ts.map +1 -0
- package/dist/npc/NPCGenerator.js +468 -0
- package/dist/npc/NPCGenerator.js.map +1 -0
- package/dist/npc/NPCManager.d.ts +86 -0
- package/dist/npc/NPCManager.d.ts.map +1 -0
- package/dist/npc/NPCManager.js +217 -0
- package/dist/npc/NPCManager.js.map +1 -0
- package/dist/npc/fixedNPCs.d.ts +7 -0
- package/dist/npc/fixedNPCs.d.ts.map +1 -0
- package/dist/npc/fixedNPCs.js +196 -0
- package/dist/npc/fixedNPCs.js.map +1 -0
- package/dist/npc/index.d.ts +9 -0
- package/dist/npc/index.d.ts.map +1 -0
- package/dist/npc/index.js +12 -0
- package/dist/npc/index.js.map +1 -0
- package/dist/npc/traits.d.ts +33 -0
- package/dist/npc/traits.d.ts.map +1 -0
- package/dist/npc/traits.js +795 -0
- package/dist/npc/traits.js.map +1 -0
- package/dist/npc/types.d.ts +193 -0
- package/dist/npc/types.d.ts.map +1 -0
- package/dist/npc/types.js +9 -0
- package/dist/npc/types.js.map +1 -0
- package/dist/quest/QuestManager.d.ts +79 -0
- package/dist/quest/QuestManager.d.ts.map +1 -0
- package/dist/quest/QuestManager.js +273 -0
- package/dist/quest/QuestManager.js.map +1 -0
- package/dist/quest/index.d.ts +6 -0
- package/dist/quest/index.d.ts.map +1 -0
- package/dist/quest/index.js +9 -0
- package/dist/quest/index.js.map +1 -0
- package/dist/quest/types.d.ts +81 -0
- package/dist/quest/types.d.ts.map +1 -0
- package/dist/quest/types.js +8 -0
- package/dist/quest/types.js.map +1 -0
- package/dist/strategy/StrategyExecutor.d.ts +159 -0
- package/dist/strategy/StrategyExecutor.d.ts.map +1 -0
- package/dist/strategy/StrategyExecutor.js +479 -0
- package/dist/strategy/StrategyExecutor.js.map +1 -0
- package/dist/strategy/StrategyParser.d.ts +48 -0
- package/dist/strategy/StrategyParser.d.ts.map +1 -0
- package/dist/strategy/StrategyParser.js +321 -0
- package/dist/strategy/StrategyParser.js.map +1 -0
- package/dist/strategy/defaultStrategy.d.ts +40 -0
- package/dist/strategy/defaultStrategy.d.ts.map +1 -0
- package/dist/strategy/defaultStrategy.js +254 -0
- package/dist/strategy/defaultStrategy.js.map +1 -0
- package/dist/strategy/index.d.ts +8 -0
- package/dist/strategy/index.d.ts.map +1 -0
- package/dist/strategy/index.js +14 -0
- package/dist/strategy/index.js.map +1 -0
- package/dist/tui/ExploreMenu.d.ts +106 -0
- package/dist/tui/ExploreMenu.d.ts.map +1 -0
- package/dist/tui/ExploreMenu.js +282 -0
- package/dist/tui/ExploreMenu.js.map +1 -0
- package/dist/tui/GameUI.d.ts +313 -0
- package/dist/tui/GameUI.d.ts.map +1 -0
- package/dist/tui/GameUI.js +2116 -0
- package/dist/tui/GameUI.js.map +1 -0
- package/dist/tui/GameUIAdapter.d.ts +207 -0
- package/dist/tui/GameUIAdapter.d.ts.map +1 -0
- package/dist/tui/GameUIAdapter.js +1342 -0
- package/dist/tui/GameUIAdapter.js.map +1 -0
- package/dist/tui/Input.d.ts +139 -0
- package/dist/tui/Input.d.ts.map +1 -0
- package/dist/tui/Input.js +278 -0
- package/dist/tui/Input.js.map +1 -0
- package/dist/tui/Menu.d.ts +110 -0
- package/dist/tui/Menu.d.ts.map +1 -0
- package/dist/tui/Menu.js +365 -0
- package/dist/tui/Menu.js.map +1 -0
- package/dist/tui/Screen.d.ts +228 -0
- package/dist/tui/Screen.d.ts.map +1 -0
- package/dist/tui/Screen.js +502 -0
- package/dist/tui/Screen.js.map +1 -0
- package/dist/tui/components/Box.d.ts +36 -0
- package/dist/tui/components/Box.d.ts.map +1 -0
- package/dist/tui/components/Box.js +43 -0
- package/dist/tui/components/Box.js.map +1 -0
- package/dist/tui/components/List.d.ts +69 -0
- package/dist/tui/components/List.d.ts.map +1 -0
- package/dist/tui/components/List.js +136 -0
- package/dist/tui/components/List.js.map +1 -0
- package/dist/tui/components/ProgressBar.d.ts +42 -0
- package/dist/tui/components/ProgressBar.d.ts.map +1 -0
- package/dist/tui/components/ProgressBar.js +75 -0
- package/dist/tui/components/ProgressBar.js.map +1 -0
- package/dist/tui/components/index.d.ts +8 -0
- package/dist/tui/components/index.d.ts.map +1 -0
- package/dist/tui/components/index.js +11 -0
- package/dist/tui/components/index.js.map +1 -0
- package/dist/tui/core/BaseSection.d.ts +98 -0
- package/dist/tui/core/BaseSection.d.ts.map +1 -0
- package/dist/tui/core/BaseSection.js +174 -0
- package/dist/tui/core/BaseSection.js.map +1 -0
- package/dist/tui/core/Component.d.ts +61 -0
- package/dist/tui/core/Component.d.ts.map +1 -0
- package/dist/tui/core/Component.js +32 -0
- package/dist/tui/core/Component.js.map +1 -0
- package/dist/tui/core/Section.d.ts +101 -0
- package/dist/tui/core/Section.d.ts.map +1 -0
- package/dist/tui/core/Section.js +24 -0
- package/dist/tui/core/Section.js.map +1 -0
- package/dist/tui/core/SectionManager.d.ts +108 -0
- package/dist/tui/core/SectionManager.d.ts.map +1 -0
- package/dist/tui/core/SectionManager.js +258 -0
- package/dist/tui/core/SectionManager.js.map +1 -0
- package/dist/tui/core/index.d.ts +9 -0
- package/dist/tui/core/index.d.ts.map +1 -0
- package/dist/tui/core/index.js +12 -0
- package/dist/tui/core/index.js.map +1 -0
- package/dist/tui/index.d.ts +15 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +23 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/screens/BaseScreen.d.ts +62 -0
- package/dist/tui/screens/BaseScreen.d.ts.map +1 -0
- package/dist/tui/screens/BaseScreen.js +55 -0
- package/dist/tui/screens/BaseScreen.js.map +1 -0
- package/dist/tui/screens/CombatScreen.d.ts +43 -0
- package/dist/tui/screens/CombatScreen.d.ts.map +1 -0
- package/dist/tui/screens/CombatScreen.js +125 -0
- package/dist/tui/screens/CombatScreen.js.map +1 -0
- package/dist/tui/screens/DialogScreen.d.ts +53 -0
- package/dist/tui/screens/DialogScreen.d.ts.map +1 -0
- package/dist/tui/screens/DialogScreen.js +90 -0
- package/dist/tui/screens/DialogScreen.js.map +1 -0
- package/dist/tui/screens/DungeonScreen.d.ts +80 -0
- package/dist/tui/screens/DungeonScreen.d.ts.map +1 -0
- package/dist/tui/screens/DungeonScreen.js +317 -0
- package/dist/tui/screens/DungeonScreen.js.map +1 -0
- package/dist/tui/screens/ExploreScreen.d.ts +69 -0
- package/dist/tui/screens/ExploreScreen.d.ts.map +1 -0
- package/dist/tui/screens/ExploreScreen.js +224 -0
- package/dist/tui/screens/ExploreScreen.js.map +1 -0
- package/dist/tui/screens/SectionScreen.d.ts +84 -0
- package/dist/tui/screens/SectionScreen.d.ts.map +1 -0
- package/dist/tui/screens/SectionScreen.js +156 -0
- package/dist/tui/screens/SectionScreen.js.map +1 -0
- package/dist/tui/screens/TitleScreen.d.ts +40 -0
- package/dist/tui/screens/TitleScreen.d.ts.map +1 -0
- package/dist/tui/screens/TitleScreen.js +253 -0
- package/dist/tui/screens/TitleScreen.js.map +1 -0
- package/dist/tui/screens/TownScreen.d.ts +98 -0
- package/dist/tui/screens/TownScreen.d.ts.map +1 -0
- package/dist/tui/screens/TownScreen.js +370 -0
- package/dist/tui/screens/TownScreen.js.map +1 -0
- package/dist/tui/screens/TravelScreen.d.ts +67 -0
- package/dist/tui/screens/TravelScreen.d.ts.map +1 -0
- package/dist/tui/screens/TravelScreen.js +286 -0
- package/dist/tui/screens/TravelScreen.js.map +1 -0
- package/dist/tui/screens/index.d.ts +8 -0
- package/dist/tui/screens/index.d.ts.map +1 -0
- package/dist/tui/screens/index.js +17 -0
- package/dist/tui/screens/index.js.map +1 -0
- package/dist/tui/sections/ActionsSection.d.ts +71 -0
- package/dist/tui/sections/ActionsSection.d.ts.map +1 -0
- package/dist/tui/sections/ActionsSection.js +184 -0
- package/dist/tui/sections/ActionsSection.js.map +1 -0
- package/dist/tui/sections/DungeonSection.d.ts +65 -0
- package/dist/tui/sections/DungeonSection.d.ts.map +1 -0
- package/dist/tui/sections/DungeonSection.js +144 -0
- package/dist/tui/sections/DungeonSection.js.map +1 -0
- package/dist/tui/sections/EventsSection.d.ts +50 -0
- package/dist/tui/sections/EventsSection.d.ts.map +1 -0
- package/dist/tui/sections/EventsSection.js +134 -0
- package/dist/tui/sections/EventsSection.js.map +1 -0
- package/dist/tui/sections/MapSection.d.ts +66 -0
- package/dist/tui/sections/MapSection.d.ts.map +1 -0
- package/dist/tui/sections/MapSection.js +669 -0
- package/dist/tui/sections/MapSection.js.map +1 -0
- package/dist/tui/sections/StatusSection.d.ts +47 -0
- package/dist/tui/sections/StatusSection.d.ts.map +1 -0
- package/dist/tui/sections/StatusSection.js +133 -0
- package/dist/tui/sections/StatusSection.js.map +1 -0
- package/dist/tui/sections/TeamSection.d.ts +71 -0
- package/dist/tui/sections/TeamSection.d.ts.map +1 -0
- package/dist/tui/sections/TeamSection.js +224 -0
- package/dist/tui/sections/TeamSection.js.map +1 -0
- package/dist/tui/sections/TravelingSection.d.ts +51 -0
- package/dist/tui/sections/TravelingSection.d.ts.map +1 -0
- package/dist/tui/sections/TravelingSection.js +106 -0
- package/dist/tui/sections/TravelingSection.js.map +1 -0
- package/dist/tui/sections/index.d.ts +9 -0
- package/dist/tui/sections/index.d.ts.map +1 -0
- package/dist/tui/sections/index.js +12 -0
- package/dist/tui/sections/index.js.map +1 -0
- package/dist/ui/Terminal.d.ts +68 -0
- package/dist/ui/Terminal.d.ts.map +1 -0
- package/dist/ui/Terminal.js +297 -0
- package/dist/ui/Terminal.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +8 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/utils/configMigration.d.ts +14 -0
- package/dist/utils/configMigration.d.ts.map +1 -0
- package/dist/utils/configMigration.js +92 -0
- package/dist/utils/configMigration.js.map +1 -0
- package/dist/utils/errorHandler.d.ts +86 -0
- package/dist/utils/errorHandler.d.ts.map +1 -0
- package/dist/utils/errorHandler.js +224 -0
- package/dist/utils/errorHandler.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +43 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/weapon/WeaponFactory.d.ts +32 -0
- package/dist/weapon/WeaponFactory.d.ts.map +1 -0
- package/dist/weapon/WeaponFactory.js +216 -0
- package/dist/weapon/WeaponFactory.js.map +1 -0
- package/dist/weapon/index.d.ts +5 -0
- package/dist/weapon/index.d.ts.map +1 -0
- package/dist/weapon/index.js +8 -0
- package/dist/weapon/index.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Explore Screen - Main game exploration interface
|
|
3
|
+
* Uses the new section-based architecture
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d8c55d78-0bd0-5177-9f47-54ad1de4562e")}catch(e){}}();
|
|
7
|
+
import { SectionScreen } from './SectionScreen.js';
|
|
8
|
+
import { createGridLayout } from '../core/SectionManager.js';
|
|
9
|
+
import { ANSI } from '../Screen.js';
|
|
10
|
+
import { getStrings } from '../../i18n/index.js';
|
|
11
|
+
// Sections
|
|
12
|
+
import { MapSection } from '../sections/MapSection.js';
|
|
13
|
+
import { StatusSection } from '../sections/StatusSection.js';
|
|
14
|
+
import { ActionsSection } from '../sections/ActionsSection.js';
|
|
15
|
+
import { EventsSection } from '../sections/EventsSection.js';
|
|
16
|
+
/**
|
|
17
|
+
* Explore Screen - Main exploration interface
|
|
18
|
+
*/
|
|
19
|
+
export class ExploreScreen extends SectionScreen {
|
|
20
|
+
// Sections
|
|
21
|
+
mapSection;
|
|
22
|
+
statusSection;
|
|
23
|
+
actionsSection;
|
|
24
|
+
eventsSection;
|
|
25
|
+
// Cached data
|
|
26
|
+
data = null;
|
|
27
|
+
// Callbacks
|
|
28
|
+
onCommand;
|
|
29
|
+
onOpenModal;
|
|
30
|
+
constructor() {
|
|
31
|
+
super();
|
|
32
|
+
// Create sections
|
|
33
|
+
this.mapSection = new MapSection();
|
|
34
|
+
this.statusSection = new StatusSection();
|
|
35
|
+
this.actionsSection = new ActionsSection();
|
|
36
|
+
this.eventsSection = new EventsSection();
|
|
37
|
+
// Register sections
|
|
38
|
+
this.registerSection(this.mapSection);
|
|
39
|
+
this.registerSection(this.statusSection);
|
|
40
|
+
this.registerSection(this.actionsSection);
|
|
41
|
+
this.registerSection(this.eventsSection);
|
|
42
|
+
// Set up navigation layout
|
|
43
|
+
// +-------+--------+
|
|
44
|
+
// | map | actions|
|
|
45
|
+
// +-------+ |
|
|
46
|
+
// | status| |
|
|
47
|
+
// +-------+--------+
|
|
48
|
+
// | events |
|
|
49
|
+
// +----------------+
|
|
50
|
+
const layout = createGridLayout([
|
|
51
|
+
['map', 'actions'],
|
|
52
|
+
['status', 'actions'],
|
|
53
|
+
['events', 'events'],
|
|
54
|
+
]);
|
|
55
|
+
this.setLayout(layout);
|
|
56
|
+
this.setDefaultFocus('actions');
|
|
57
|
+
// Set up action callbacks
|
|
58
|
+
this.mapSection.setOnTravel((roomIndex) => {
|
|
59
|
+
this.onCommand?.(String(roomIndex + 1));
|
|
60
|
+
});
|
|
61
|
+
this.actionsSection.setOnNpcSelect((npcIndex) => {
|
|
62
|
+
this.onCommand?.('npc');
|
|
63
|
+
setTimeout(() => this.onCommand?.(String(npcIndex + 1)), 50);
|
|
64
|
+
});
|
|
65
|
+
this.actionsSection.setOnOpenModal((modal) => {
|
|
66
|
+
this.onOpenModal?.(modal);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Set command handler
|
|
71
|
+
*/
|
|
72
|
+
setOnCommand(handler) {
|
|
73
|
+
this.onCommand = handler;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Set modal handler
|
|
77
|
+
*/
|
|
78
|
+
setOnOpenModal(handler) {
|
|
79
|
+
this.onOpenModal = handler;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Update screen data
|
|
83
|
+
*/
|
|
84
|
+
updateData(data) {
|
|
85
|
+
this.data = data;
|
|
86
|
+
// Update all sections
|
|
87
|
+
this.mapSection.update(data.state);
|
|
88
|
+
this.statusSection.update({
|
|
89
|
+
state: data.state,
|
|
90
|
+
npcs: data.npcs,
|
|
91
|
+
quests: data.quests,
|
|
92
|
+
});
|
|
93
|
+
this.actionsSection.update({
|
|
94
|
+
npcs: data.npcs,
|
|
95
|
+
quests: data.quests,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Add event to the log
|
|
100
|
+
*/
|
|
101
|
+
addEvent(message) {
|
|
102
|
+
this.eventsSection.addEvent(message);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get events section (for direct access)
|
|
106
|
+
*/
|
|
107
|
+
getEventsSection() {
|
|
108
|
+
return this.eventsSection;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Handle global shortcuts
|
|
112
|
+
*/
|
|
113
|
+
handleGlobalShortcut(key) {
|
|
114
|
+
// Modal shortcuts
|
|
115
|
+
const modalKeys = {
|
|
116
|
+
'i': 'inventory',
|
|
117
|
+
'c': 'character',
|
|
118
|
+
'q': 'quests',
|
|
119
|
+
'w': 'workshop',
|
|
120
|
+
'm': 'menu',
|
|
121
|
+
};
|
|
122
|
+
if (key.raw && modalKeys[key.raw.toLowerCase()]) {
|
|
123
|
+
this.onOpenModal?.(modalKeys[key.raw.toLowerCase()]);
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
// Quick number shortcuts for travel
|
|
127
|
+
if (key.raw && /^[1-9]$/.test(key.raw) && this.onCommand) {
|
|
128
|
+
this.onCommand(key.raw);
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
// Other global shortcuts
|
|
132
|
+
const globalShortcuts = {
|
|
133
|
+
'n': 'npc',
|
|
134
|
+
'h': 'help',
|
|
135
|
+
's': 'save',
|
|
136
|
+
'l': 'load',
|
|
137
|
+
};
|
|
138
|
+
if (key.raw) {
|
|
139
|
+
const cmd = globalShortcuts[key.raw.toLowerCase()];
|
|
140
|
+
if (cmd) {
|
|
141
|
+
this.onCommand?.(cmd);
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get global hints text
|
|
149
|
+
*/
|
|
150
|
+
getGlobalHints() {
|
|
151
|
+
return '1-9: Travel I C Q W [M]enu';
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Calculate section bounds
|
|
155
|
+
*/
|
|
156
|
+
calculateSectionBounds() {
|
|
157
|
+
const content = this.getContentArea();
|
|
158
|
+
const boundsMap = new Map();
|
|
159
|
+
// Calculate dimensions
|
|
160
|
+
const eventsHeight = Math.min(8, Math.floor(content.height * 0.25));
|
|
161
|
+
const mainAreaHeight = content.height - eventsHeight;
|
|
162
|
+
const menuWidth = Math.min(30, Math.floor(content.width * 0.32));
|
|
163
|
+
const leftWidth = content.width - menuWidth - 1;
|
|
164
|
+
const mapHeight = Math.min(10, Math.floor(mainAreaHeight * 0.55));
|
|
165
|
+
const statusHeight = mainAreaHeight - mapHeight;
|
|
166
|
+
// Map section (top-left)
|
|
167
|
+
boundsMap.set('map', {
|
|
168
|
+
x: content.x,
|
|
169
|
+
y: content.y,
|
|
170
|
+
width: leftWidth,
|
|
171
|
+
height: mapHeight,
|
|
172
|
+
});
|
|
173
|
+
// Status section (bottom-left)
|
|
174
|
+
boundsMap.set('status', {
|
|
175
|
+
x: content.x,
|
|
176
|
+
y: content.y + mapHeight,
|
|
177
|
+
width: leftWidth,
|
|
178
|
+
height: statusHeight,
|
|
179
|
+
});
|
|
180
|
+
// Actions section (right side)
|
|
181
|
+
boundsMap.set('actions', {
|
|
182
|
+
x: content.x + leftWidth,
|
|
183
|
+
y: content.y,
|
|
184
|
+
width: menuWidth + 1,
|
|
185
|
+
height: mainAreaHeight,
|
|
186
|
+
});
|
|
187
|
+
// Events section (bottom, full width)
|
|
188
|
+
boundsMap.set('events', {
|
|
189
|
+
x: content.x,
|
|
190
|
+
y: content.y + mainAreaHeight,
|
|
191
|
+
width: content.width,
|
|
192
|
+
height: eventsHeight,
|
|
193
|
+
});
|
|
194
|
+
return boundsMap;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Render the screen
|
|
198
|
+
*/
|
|
199
|
+
render() {
|
|
200
|
+
if (!this.data)
|
|
201
|
+
return;
|
|
202
|
+
this.screen.clear();
|
|
203
|
+
// Render header with player info
|
|
204
|
+
const s = getStrings();
|
|
205
|
+
const player = this.data.state.player;
|
|
206
|
+
const playerInfo = `${s.status.level}.${player.stats.level} ${player.name}`;
|
|
207
|
+
this.renderHeader('IDLERPG.TERMINAL', playerInfo);
|
|
208
|
+
// Render HP bar in header
|
|
209
|
+
const px = this.padding;
|
|
210
|
+
const py = this.padding;
|
|
211
|
+
const hpText = `${s.status.hp}:`;
|
|
212
|
+
this.screen.write(px + 45, py + 1, hpText, ANSI.fg.white);
|
|
213
|
+
this.screen.drawProgressBar(px + 49, py + 1, 10, player.stats.hp, player.stats.maxHp, ANSI.fg.red);
|
|
214
|
+
this.screen.write(px + 60, py + 1, `${player.stats.hp}/${player.stats.maxHp}`, ANSI.fg.white);
|
|
215
|
+
// Render all sections
|
|
216
|
+
this.renderSections();
|
|
217
|
+
// Render hint bar
|
|
218
|
+
this.renderHintBar();
|
|
219
|
+
// Flush to screen
|
|
220
|
+
this.screen.render();
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=ExploreScreen.js.map
|
|
224
|
+
//# debugId=d8c55d78-0bd0-5177-9f47-54ad1de4562e
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExploreScreen.js","sources":["tui/screens/ExploreScreen.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Explore Screen - Main game exploration interface\r\n * Uses the new section-based architecture\r\n */\r\n\r\nimport { SectionScreen } from './SectionScreen.js';\r\nimport { createGridLayout } from '../core/SectionManager.js';\r\nimport type { Rect } from '../core/Component.js';\r\nimport type { KeyEvent } from '../Input.js';\r\nimport { ANSI, PROGRESS } from '../Screen.js';\r\nimport { getStrings } from '../../i18n/index.js';\r\n\r\n// Sections\r\nimport { MapSection } from '../sections/MapSection.js';\r\nimport { StatusSection, type StatusData } from '../sections/StatusSection.js';\r\nimport { ActionsSection, type ActionsData } from '../sections/ActionsSection.js';\r\nimport { EventsSection } from '../sections/EventsSection.js';\r\n\r\n// Types\r\nimport type { GameState, Player } from '../../core/types.js';\r\nimport type { ExtendedNPC } from '../../npc/types.js';\r\nimport type { Quest } from '../../quest/types.js';\r\n\r\n/**\r\n * Explore Screen data\r\n */\r\nexport interface ExploreScreenData {\r\n state: GameState;\r\n npcs: ExtendedNPC[];\r\n quests: Quest[];\r\n}\r\n\r\n/**\r\n * Explore Screen - Main exploration interface\r\n */\r\nexport class ExploreScreen extends SectionScreen {\r\n // Sections\r\n private mapSection: MapSection;\r\n private statusSection: StatusSection;\r\n private actionsSection: ActionsSection;\r\n private eventsSection: EventsSection;\r\n\r\n // Cached data\r\n private data: ExploreScreenData | null = null;\r\n\r\n // Callbacks\r\n private onCommand?: (cmd: string) => void;\r\n private onOpenModal?: (modal: 'inventory' | 'character' | 'quests' | 'workshop' | 'menu') => void;\r\n\r\n constructor() {\r\n super();\r\n\r\n // Create sections\r\n this.mapSection = new MapSection();\r\n this.statusSection = new StatusSection();\r\n this.actionsSection = new ActionsSection();\r\n this.eventsSection = new EventsSection();\r\n\r\n // Register sections\r\n this.registerSection(this.mapSection);\r\n this.registerSection(this.statusSection);\r\n this.registerSection(this.actionsSection);\r\n this.registerSection(this.eventsSection);\r\n\r\n // Set up navigation layout\r\n // +-------+--------+\r\n // | map | actions|\r\n // +-------+ |\r\n // | status| |\r\n // +-------+--------+\r\n // | events |\r\n // +----------------+\r\n const layout = createGridLayout([\r\n ['map', 'actions'],\r\n ['status', 'actions'],\r\n ['events', 'events'],\r\n ]);\r\n this.setLayout(layout);\r\n this.setDefaultFocus('actions');\r\n\r\n // Set up action callbacks\r\n this.mapSection.setOnTravel((roomIndex) => {\r\n this.onCommand?.(String(roomIndex + 1));\r\n });\r\n\r\n this.actionsSection.setOnNpcSelect((npcIndex) => {\r\n this.onCommand?.('npc');\r\n setTimeout(() => this.onCommand?.(String(npcIndex + 1)), 50);\r\n });\r\n\r\n this.actionsSection.setOnOpenModal((modal) => {\r\n this.onOpenModal?.(modal);\r\n });\r\n }\r\n\r\n /**\r\n * Set command handler\r\n */\r\n setOnCommand(handler: (cmd: string) => void): void {\r\n this.onCommand = handler;\r\n }\r\n\r\n /**\r\n * Set modal handler\r\n */\r\n setOnOpenModal(handler: (modal: 'inventory' | 'character' | 'quests' | 'workshop' | 'menu') => void): void {\r\n this.onOpenModal = handler;\r\n }\r\n\r\n /**\r\n * Update screen data\r\n */\r\n updateData(data: ExploreScreenData): void {\r\n this.data = data;\r\n\r\n // Update all sections\r\n this.mapSection.update(data.state);\r\n this.statusSection.update({\r\n state: data.state,\r\n npcs: data.npcs,\r\n quests: data.quests,\r\n });\r\n this.actionsSection.update({\r\n npcs: data.npcs,\r\n quests: data.quests,\r\n });\r\n }\r\n\r\n /**\r\n * Add event to the log\r\n */\r\n addEvent(message: string): void {\r\n this.eventsSection.addEvent(message);\r\n }\r\n\r\n /**\r\n * Get events section (for direct access)\r\n */\r\n getEventsSection(): EventsSection {\r\n return this.eventsSection;\r\n }\r\n\r\n /**\r\n * Handle global shortcuts\r\n */\r\n protected handleGlobalShortcut(key: KeyEvent): boolean {\r\n // Modal shortcuts\r\n const modalKeys: Record<string, 'inventory' | 'character' | 'quests' | 'workshop' | 'menu'> = {\r\n 'i': 'inventory',\r\n 'c': 'character',\r\n 'q': 'quests',\r\n 'w': 'workshop',\r\n 'm': 'menu',\r\n };\r\n\r\n if (key.raw && modalKeys[key.raw.toLowerCase()]) {\r\n this.onOpenModal?.(modalKeys[key.raw.toLowerCase()]);\r\n return true;\r\n }\r\n\r\n // Quick number shortcuts for travel\r\n if (key.raw && /^[1-9]$/.test(key.raw) && this.onCommand) {\r\n this.onCommand(key.raw);\r\n return true;\r\n }\r\n\r\n // Other global shortcuts\r\n const globalShortcuts: Record<string, string> = {\r\n 'n': 'npc',\r\n 'h': 'help',\r\n 's': 'save',\r\n 'l': 'load',\r\n };\r\n\r\n if (key.raw) {\r\n const cmd = globalShortcuts[key.raw.toLowerCase()];\r\n if (cmd) {\r\n this.onCommand?.(cmd);\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Get global hints text\r\n */\r\n protected getGlobalHints(): string {\r\n return '1-9: Travel I C Q W [M]enu';\r\n }\r\n\r\n /**\r\n * Calculate section bounds\r\n */\r\n protected calculateSectionBounds(): Map<string, Rect> {\r\n const content = this.getContentArea();\r\n const boundsMap = new Map<string, Rect>();\r\n\r\n // Calculate dimensions\r\n const eventsHeight = Math.min(8, Math.floor(content.height * 0.25));\r\n const mainAreaHeight = content.height - eventsHeight;\r\n const menuWidth = Math.min(30, Math.floor(content.width * 0.32));\r\n const leftWidth = content.width - menuWidth - 1;\r\n const mapHeight = Math.min(10, Math.floor(mainAreaHeight * 0.55));\r\n const statusHeight = mainAreaHeight - mapHeight;\r\n\r\n // Map section (top-left)\r\n boundsMap.set('map', {\r\n x: content.x,\r\n y: content.y,\r\n width: leftWidth,\r\n height: mapHeight,\r\n });\r\n\r\n // Status section (bottom-left)\r\n boundsMap.set('status', {\r\n x: content.x,\r\n y: content.y + mapHeight,\r\n width: leftWidth,\r\n height: statusHeight,\r\n });\r\n\r\n // Actions section (right side)\r\n boundsMap.set('actions', {\r\n x: content.x + leftWidth,\r\n y: content.y,\r\n width: menuWidth + 1,\r\n height: mainAreaHeight,\r\n });\r\n\r\n // Events section (bottom, full width)\r\n boundsMap.set('events', {\r\n x: content.x,\r\n y: content.y + mainAreaHeight,\r\n width: content.width,\r\n height: eventsHeight,\r\n });\r\n\r\n return boundsMap;\r\n }\r\n\r\n /**\r\n * Render the screen\r\n */\r\n render(): void {\r\n if (!this.data) return;\r\n\r\n this.screen.clear();\r\n\r\n // Render header with player info\r\n const s = getStrings();\r\n const player = this.data.state.player;\r\n const playerInfo = `${s.status.level}.${player.stats.level} ${player.name}`;\r\n this.renderHeader('IDLERPG.TERMINAL', playerInfo);\r\n\r\n // Render HP bar in header\r\n const px = this.padding;\r\n const py = this.padding;\r\n const hpText = `${s.status.hp}:`;\r\n this.screen.write(px + 45, py + 1, hpText, ANSI.fg.white);\r\n this.screen.drawProgressBar(px + 49, py + 1, 10, player.stats.hp, player.stats.maxHp, ANSI.fg.red);\r\n this.screen.write(px + 60, py + 1, `${player.stats.hp}/${player.stats.maxHp}`, ANSI.fg.white);\r\n\r\n // Render all sections\r\n this.renderSections();\r\n\r\n // Render hint bar\r\n this.renderHintBar();\r\n\r\n // Flush to screen\r\n this.screen.render();\r\n }\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"d8c55d78-0bd0-5177-9f47-54ad1de4562e"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section Screen - Base class for screens with multiple sections
|
|
3
|
+
* Extends BaseScreen with section management capabilities
|
|
4
|
+
*/
|
|
5
|
+
import { BaseScreen } from '../../app/screens/BaseScreen.js';
|
|
6
|
+
import { SectionManager, type SectionLayout } from '../core/SectionManager.js';
|
|
7
|
+
import type { ISection } from '../core/Section.js';
|
|
8
|
+
import type { RenderContext, Rect } from '../core/Component.js';
|
|
9
|
+
import type { KeyEvent } from '../Input.js';
|
|
10
|
+
/**
|
|
11
|
+
* Section layout configuration
|
|
12
|
+
*/
|
|
13
|
+
export interface SectionLayoutConfig {
|
|
14
|
+
/** Section ID */
|
|
15
|
+
id: string;
|
|
16
|
+
/** Bounds calculation function */
|
|
17
|
+
getBounds: (screenWidth: number, screenHeight: number, padding: number) => Rect;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Abstract base class for screens with sections
|
|
21
|
+
*/
|
|
22
|
+
export declare abstract class SectionScreen extends BaseScreen {
|
|
23
|
+
protected sectionManager: SectionManager;
|
|
24
|
+
protected padding: number;
|
|
25
|
+
protected headerHeight: number;
|
|
26
|
+
protected hintBarHeight: number;
|
|
27
|
+
constructor();
|
|
28
|
+
/**
|
|
29
|
+
* Register a section with the screen
|
|
30
|
+
*/
|
|
31
|
+
protected registerSection(section: ISection): void;
|
|
32
|
+
/**
|
|
33
|
+
* Set the navigation layout
|
|
34
|
+
*/
|
|
35
|
+
protected setLayout(layout: SectionLayout): void;
|
|
36
|
+
/**
|
|
37
|
+
* Set the default focused section
|
|
38
|
+
*/
|
|
39
|
+
protected setDefaultFocus(sectionId: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Create render context for a section
|
|
42
|
+
*/
|
|
43
|
+
protected createRenderContext(bounds: Rect): RenderContext;
|
|
44
|
+
/**
|
|
45
|
+
* Called when screen becomes active
|
|
46
|
+
*/
|
|
47
|
+
onEnter(params?: unknown): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Handle key input
|
|
50
|
+
*/
|
|
51
|
+
handleKey(key: KeyEvent): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Handle global shortcuts
|
|
54
|
+
* Override in subclasses to add screen-specific shortcuts
|
|
55
|
+
*/
|
|
56
|
+
protected handleGlobalShortcut(key: KeyEvent): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Render the header bar
|
|
59
|
+
*/
|
|
60
|
+
protected renderHeader(title: string, playerInfo?: string): void;
|
|
61
|
+
/**
|
|
62
|
+
* Render the hint bar at the bottom
|
|
63
|
+
*/
|
|
64
|
+
protected renderHintBar(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Get global hints text
|
|
67
|
+
* Override in subclasses
|
|
68
|
+
*/
|
|
69
|
+
protected getGlobalHints(): string;
|
|
70
|
+
/**
|
|
71
|
+
* Calculate section bounds
|
|
72
|
+
* Override in subclasses to define layout
|
|
73
|
+
*/
|
|
74
|
+
protected abstract calculateSectionBounds(): Map<string, Rect>;
|
|
75
|
+
/**
|
|
76
|
+
* Render all sections
|
|
77
|
+
*/
|
|
78
|
+
protected renderSections(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Get the available content area (minus header and hint bar)
|
|
81
|
+
*/
|
|
82
|
+
protected getContentArea(): Rect;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=SectionScreen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SectionScreen.d.ts","sourceRoot":"/","sources":["tui/screens/SectionScreen.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAoB,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iBAAiB;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjF;AAED;;GAEG;AACH,8BAAsB,aAAc,SAAQ,UAAU;IACpD,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;IACzC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAK;IAC9B,SAAS,CAAC,YAAY,EAAE,MAAM,CAAK;IACnC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAK;;IAOpC;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI;IAIlD;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAIhD;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIlD;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,GAAG,aAAa;IAO1D;;OAEG;IACG,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAehD;;;OAGG;IACH,SAAS,CAAC,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAItD;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAqBhE;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAqB/B;;;OAGG;IACH,SAAS,CAAC,cAAc,IAAI,MAAM;IAIlC;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,sBAAsB,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;IAE9D;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;IAahC;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;CAajC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section Screen - Base class for screens with multiple sections
|
|
3
|
+
* Extends BaseScreen with section management capabilities
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4d35ab80-4401-51b2-b522-e557d7dfc720")}catch(e){}}();
|
|
7
|
+
import { BaseScreen } from '../../app/screens/BaseScreen.js';
|
|
8
|
+
import { SectionManager } from '../core/SectionManager.js';
|
|
9
|
+
import { ANSI } from '../Screen.js';
|
|
10
|
+
/**
|
|
11
|
+
* Abstract base class for screens with sections
|
|
12
|
+
*/
|
|
13
|
+
export class SectionScreen extends BaseScreen {
|
|
14
|
+
sectionManager;
|
|
15
|
+
padding = 2;
|
|
16
|
+
headerHeight = 3;
|
|
17
|
+
hintBarHeight = 1;
|
|
18
|
+
constructor() {
|
|
19
|
+
super();
|
|
20
|
+
this.sectionManager = new SectionManager();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Register a section with the screen
|
|
24
|
+
*/
|
|
25
|
+
registerSection(section) {
|
|
26
|
+
this.sectionManager.register(section);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Set the navigation layout
|
|
30
|
+
*/
|
|
31
|
+
setLayout(layout) {
|
|
32
|
+
this.sectionManager.setLayout(layout);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Set the default focused section
|
|
36
|
+
*/
|
|
37
|
+
setDefaultFocus(sectionId) {
|
|
38
|
+
this.sectionManager.setDefaultFocus(sectionId);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create render context for a section
|
|
42
|
+
*/
|
|
43
|
+
createRenderContext(bounds) {
|
|
44
|
+
return {
|
|
45
|
+
screen: this.screen,
|
|
46
|
+
bounds,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Called when screen becomes active
|
|
51
|
+
*/
|
|
52
|
+
async onEnter(params) {
|
|
53
|
+
await super.onEnter(params);
|
|
54
|
+
this.sectionManager.focusDefault();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Handle key input
|
|
58
|
+
*/
|
|
59
|
+
async handleKey(key) {
|
|
60
|
+
// Global shortcuts first
|
|
61
|
+
if (this.handleGlobalShortcut(key)) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
// Delegate to section manager
|
|
65
|
+
if (this.sectionManager.handleKey(key)) {
|
|
66
|
+
this.render();
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Handle global shortcuts
|
|
73
|
+
* Override in subclasses to add screen-specific shortcuts
|
|
74
|
+
*/
|
|
75
|
+
handleGlobalShortcut(key) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Render the header bar
|
|
80
|
+
*/
|
|
81
|
+
renderHeader(title, playerInfo) {
|
|
82
|
+
const px = this.padding;
|
|
83
|
+
const py = this.padding;
|
|
84
|
+
const width = this.width - this.padding * 2;
|
|
85
|
+
// Draw header box
|
|
86
|
+
this.screen.drawBox(px, py, width, this.headerHeight, '', true);
|
|
87
|
+
// Title
|
|
88
|
+
this.screen.write(px + 2, py + 1, title, ANSI.fg.cyan, undefined, ANSI.bold);
|
|
89
|
+
// Player info (if provided)
|
|
90
|
+
if (playerInfo) {
|
|
91
|
+
this.screen.write(px + 25, py + 1, playerInfo, ANSI.fg.yellow);
|
|
92
|
+
}
|
|
93
|
+
// Real time clock
|
|
94
|
+
const time = new Date().toLocaleTimeString('en-US', { hour12: false });
|
|
95
|
+
this.screen.write(px + width - time.length - 2, py + 1, time, ANSI.fg.gray);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Render the hint bar at the bottom
|
|
99
|
+
*/
|
|
100
|
+
renderHintBar() {
|
|
101
|
+
const px = this.padding;
|
|
102
|
+
const py = this.padding;
|
|
103
|
+
const width = this.width - this.padding * 2;
|
|
104
|
+
const height = this.height - this.padding * 2;
|
|
105
|
+
const hintY = py + height - 1;
|
|
106
|
+
// Get hint from section manager
|
|
107
|
+
const sectionHint = this.sectionManager.getCurrentHint();
|
|
108
|
+
// Build hint text
|
|
109
|
+
let hints;
|
|
110
|
+
if (this.sectionManager.isAnyEntered()) {
|
|
111
|
+
hints = sectionHint || 'Up/Down: navigate Enter: select Esc: exit';
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
hints = 'Arrows: focus Enter: enter | ' + this.getGlobalHints();
|
|
115
|
+
}
|
|
116
|
+
this.screen.write(px + 1, hintY, hints.slice(0, width - 2), ANSI.fg.gray);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get global hints text
|
|
120
|
+
* Override in subclasses
|
|
121
|
+
*/
|
|
122
|
+
getGlobalHints() {
|
|
123
|
+
return 'I C Q W [M]enu';
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Render all sections
|
|
127
|
+
*/
|
|
128
|
+
renderSections() {
|
|
129
|
+
const boundsMap = this.calculateSectionBounds();
|
|
130
|
+
for (const section of this.sectionManager.getAll()) {
|
|
131
|
+
const bounds = boundsMap.get(section.id);
|
|
132
|
+
if (bounds) {
|
|
133
|
+
section.bounds = bounds;
|
|
134
|
+
const ctx = this.createRenderContext(bounds);
|
|
135
|
+
section.render(ctx);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get the available content area (minus header and hint bar)
|
|
141
|
+
*/
|
|
142
|
+
getContentArea() {
|
|
143
|
+
const px = this.padding;
|
|
144
|
+
const py = this.padding;
|
|
145
|
+
const width = this.width - this.padding * 2;
|
|
146
|
+
const height = this.height - this.padding * 2;
|
|
147
|
+
return {
|
|
148
|
+
x: px,
|
|
149
|
+
y: py + this.headerHeight,
|
|
150
|
+
width: width,
|
|
151
|
+
height: height - this.headerHeight - this.hintBarHeight,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=SectionScreen.js.map
|
|
156
|
+
//# debugId=4d35ab80-4401-51b2-b522-e557d7dfc720
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SectionScreen.js","sources":["tui/screens/SectionScreen.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Section Screen - Base class for screens with multiple sections\r\n * Extends BaseScreen with section management capabilities\r\n */\r\n\r\nimport { BaseScreen } from '../../app/screens/BaseScreen.js';\r\nimport { SectionManager, createGridLayout, type SectionLayout } from '../core/SectionManager.js';\r\nimport type { ISection } from '../core/Section.js';\r\nimport type { RenderContext, Rect } from '../core/Component.js';\r\nimport type { KeyEvent } from '../Input.js';\r\nimport { ANSI } from '../Screen.js';\r\n\r\n/**\r\n * Section layout configuration\r\n */\r\nexport interface SectionLayoutConfig {\r\n /** Section ID */\r\n id: string;\r\n /** Bounds calculation function */\r\n getBounds: (screenWidth: number, screenHeight: number, padding: number) => Rect;\r\n}\r\n\r\n/**\r\n * Abstract base class for screens with sections\r\n */\r\nexport abstract class SectionScreen extends BaseScreen {\r\n protected sectionManager: SectionManager;\r\n protected padding: number = 2;\r\n protected headerHeight: number = 3;\r\n protected hintBarHeight: number = 1;\r\n\r\n constructor() {\r\n super();\r\n this.sectionManager = new SectionManager();\r\n }\r\n\r\n /**\r\n * Register a section with the screen\r\n */\r\n protected registerSection(section: ISection): void {\r\n this.sectionManager.register(section);\r\n }\r\n\r\n /**\r\n * Set the navigation layout\r\n */\r\n protected setLayout(layout: SectionLayout): void {\r\n this.sectionManager.setLayout(layout);\r\n }\r\n\r\n /**\r\n * Set the default focused section\r\n */\r\n protected setDefaultFocus(sectionId: string): void {\r\n this.sectionManager.setDefaultFocus(sectionId);\r\n }\r\n\r\n /**\r\n * Create render context for a section\r\n */\r\n protected createRenderContext(bounds: Rect): RenderContext {\r\n return {\r\n screen: this.screen,\r\n bounds,\r\n };\r\n }\r\n\r\n /**\r\n * Called when screen becomes active\r\n */\r\n async onEnter(params?: unknown): Promise<void> {\r\n await super.onEnter(params);\r\n this.sectionManager.focusDefault();\r\n }\r\n\r\n /**\r\n * Handle key input\r\n */\r\n async handleKey(key: KeyEvent): Promise<boolean> {\r\n // Global shortcuts first\r\n if (this.handleGlobalShortcut(key)) {\r\n return true;\r\n }\r\n\r\n // Delegate to section manager\r\n if (this.sectionManager.handleKey(key)) {\r\n this.render();\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Handle global shortcuts\r\n * Override in subclasses to add screen-specific shortcuts\r\n */\r\n protected handleGlobalShortcut(key: KeyEvent): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Render the header bar\r\n */\r\n protected renderHeader(title: string, playerInfo?: string): void {\r\n const px = this.padding;\r\n const py = this.padding;\r\n const width = this.width - this.padding * 2;\r\n\r\n // Draw header box\r\n this.screen.drawBox(px, py, width, this.headerHeight, '', true);\r\n\r\n // Title\r\n this.screen.write(px + 2, py + 1, title, ANSI.fg.cyan, undefined, ANSI.bold);\r\n\r\n // Player info (if provided)\r\n if (playerInfo) {\r\n this.screen.write(px + 25, py + 1, playerInfo, ANSI.fg.yellow);\r\n }\r\n\r\n // Real time clock\r\n const time = new Date().toLocaleTimeString('en-US', { hour12: false });\r\n this.screen.write(px + width - time.length - 2, py + 1, time, ANSI.fg.gray);\r\n }\r\n\r\n /**\r\n * Render the hint bar at the bottom\r\n */\r\n protected renderHintBar(): void {\r\n const px = this.padding;\r\n const py = this.padding;\r\n const width = this.width - this.padding * 2;\r\n const height = this.height - this.padding * 2;\r\n const hintY = py + height - 1;\r\n\r\n // Get hint from section manager\r\n const sectionHint = this.sectionManager.getCurrentHint();\r\n\r\n // Build hint text\r\n let hints: string;\r\n if (this.sectionManager.isAnyEntered()) {\r\n hints = sectionHint || 'Up/Down: navigate Enter: select Esc: exit';\r\n } else {\r\n hints = 'Arrows: focus Enter: enter | ' + this.getGlobalHints();\r\n }\r\n\r\n this.screen.write(px + 1, hintY, hints.slice(0, width - 2), ANSI.fg.gray);\r\n }\r\n\r\n /**\r\n * Get global hints text\r\n * Override in subclasses\r\n */\r\n protected getGlobalHints(): string {\r\n return 'I C Q W [M]enu';\r\n }\r\n\r\n /**\r\n * Calculate section bounds\r\n * Override in subclasses to define layout\r\n */\r\n protected abstract calculateSectionBounds(): Map<string, Rect>;\r\n\r\n /**\r\n * Render all sections\r\n */\r\n protected renderSections(): void {\r\n const boundsMap = this.calculateSectionBounds();\r\n\r\n for (const section of this.sectionManager.getAll()) {\r\n const bounds = boundsMap.get(section.id);\r\n if (bounds) {\r\n section.bounds = bounds;\r\n const ctx = this.createRenderContext(bounds);\r\n section.render(ctx);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get the available content area (minus header and hint bar)\r\n */\r\n protected getContentArea(): Rect {\r\n const px = this.padding;\r\n const py = this.padding;\r\n const width = this.width - this.padding * 2;\r\n const height = this.height - this.padding * 2;\r\n\r\n return {\r\n x: px,\r\n y: py + this.headerHeight,\r\n width: width,\r\n height: height - this.headerHeight - this.hintBarHeight,\r\n };\r\n }\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"4d35ab80-4401-51b2-b522-e557d7dfc720"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Title Screen - Welcome and login screen for IdleRPG
|
|
3
|
+
* Shows ASCII art, handles authentication, and name input
|
|
4
|
+
*/
|
|
5
|
+
import { BaseScreen } from './BaseScreen.js';
|
|
6
|
+
import type { KeyEvent } from '../Input.js';
|
|
7
|
+
type TitleStatus = 'initializing' | 'waiting_for_login' | 'show_qr' | 'polling' | 'ready' | 'name_input';
|
|
8
|
+
/**
|
|
9
|
+
* Title Screen - Handles login and welcome
|
|
10
|
+
*/
|
|
11
|
+
export declare class TitleScreen extends BaseScreen {
|
|
12
|
+
private status;
|
|
13
|
+
private playerName;
|
|
14
|
+
private nameResolver;
|
|
15
|
+
private cursorPos;
|
|
16
|
+
private authUrl;
|
|
17
|
+
private qrCode;
|
|
18
|
+
private statusMessage;
|
|
19
|
+
private loginResolver;
|
|
20
|
+
constructor();
|
|
21
|
+
setStatus(status: TitleStatus, message?: string): void;
|
|
22
|
+
setAuthInfo(authUrl: string, qrCode: string): void;
|
|
23
|
+
setPolling(): void;
|
|
24
|
+
setReady(playerName?: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Wait for user to press Enter to start login
|
|
27
|
+
*/
|
|
28
|
+
waitForLoginStart(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Wait for player name input
|
|
31
|
+
*/
|
|
32
|
+
waitForName(): Promise<string>;
|
|
33
|
+
handleKey(key: KeyEvent): Promise<boolean>;
|
|
34
|
+
private handleNameInput;
|
|
35
|
+
render(): void;
|
|
36
|
+
private drawAsciiLogo;
|
|
37
|
+
private renderStatusContent;
|
|
38
|
+
}
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=TitleScreen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TitleScreen.d.ts","sourceRoot":"/","sources":["tui/screens/TitleScreen.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAyB5C,KAAK,WAAW,GACZ,cAAc,GACd,mBAAmB,GACnB,SAAS,GACT,SAAS,GACT,OAAO,GACP,YAAY,CAAC;AAEjB;;GAEG;AACH,qBAAa,WAAY,SAAQ,UAAU;IACzC,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,YAAY,CAAyC;IAC7D,OAAO,CAAC,SAAS,CAAa;IAG9B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,aAAa,CAA6B;;IAUlD,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAMtD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAOlD,UAAU,IAAI,IAAI;IAKlB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAYnC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IASxC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAa9B,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBhD,OAAO,CAAC,eAAe;IAwDvB,MAAM,IAAI,IAAI;IAkBd,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,mBAAmB;CAsE5B"}
|