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,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List Component - Renders a scrollable list of items
|
|
3
|
+
*/
|
|
4
|
+
import type { IComponent, RenderContext } from '../core/Component.js';
|
|
5
|
+
/**
|
|
6
|
+
* List item
|
|
7
|
+
*/
|
|
8
|
+
export interface ListItem {
|
|
9
|
+
id: string;
|
|
10
|
+
label: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
color?: string;
|
|
13
|
+
data?: unknown;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* List configuration
|
|
17
|
+
*/
|
|
18
|
+
export interface ListConfig {
|
|
19
|
+
items: ListItem[];
|
|
20
|
+
selectedIndex?: number;
|
|
21
|
+
scrollOffset?: number;
|
|
22
|
+
showIndicator?: boolean;
|
|
23
|
+
indicatorChar?: string;
|
|
24
|
+
selectedFg?: string;
|
|
25
|
+
selectedBg?: string;
|
|
26
|
+
emptyMessage?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* List Component - Scrollable item list
|
|
30
|
+
*/
|
|
31
|
+
export declare class List implements IComponent {
|
|
32
|
+
readonly id: string;
|
|
33
|
+
visible: boolean;
|
|
34
|
+
private config;
|
|
35
|
+
constructor(id: string, config: ListConfig);
|
|
36
|
+
/**
|
|
37
|
+
* Update list configuration
|
|
38
|
+
*/
|
|
39
|
+
setConfig(config: Partial<ListConfig>): void;
|
|
40
|
+
/**
|
|
41
|
+
* Set items
|
|
42
|
+
*/
|
|
43
|
+
setItems(items: ListItem[]): void;
|
|
44
|
+
/**
|
|
45
|
+
* Set selected index
|
|
46
|
+
*/
|
|
47
|
+
setSelectedIndex(index: number): void;
|
|
48
|
+
/**
|
|
49
|
+
* Get selected item
|
|
50
|
+
*/
|
|
51
|
+
getSelectedItem(): ListItem | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Render the list
|
|
54
|
+
*/
|
|
55
|
+
render(ctx: RenderContext): void;
|
|
56
|
+
/**
|
|
57
|
+
* Move selection up
|
|
58
|
+
*/
|
|
59
|
+
moveUp(): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Move selection down
|
|
62
|
+
*/
|
|
63
|
+
moveDown(): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Ensure selected item is visible
|
|
66
|
+
*/
|
|
67
|
+
private ensureVisible;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=List.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"List.d.ts","sourceRoot":"/","sources":["tui/components/List.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGtE;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,IAAK,YAAW,UAAU;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAQ;IAExB,OAAO,CAAC,MAAM,CAAa;gBAEf,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU;IAc1C;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAI5C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAQjC;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC;;OAEG;IACH,eAAe,IAAI,QAAQ,GAAG,SAAS;IAIvC;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IA8DhC;;OAEG;IACH,MAAM,IAAI,OAAO;IASjB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAYnB;;OAEG;IACH,OAAO,CAAC,aAAa;CAWtB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List Component - Renders a scrollable list of items
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
!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]="c0046caa-1a3a-541f-989c-88a1255f3d23")}catch(e){}}();
|
|
6
|
+
import { ANSI } from '../Screen.js';
|
|
7
|
+
/**
|
|
8
|
+
* List Component - Scrollable item list
|
|
9
|
+
*/
|
|
10
|
+
export class List {
|
|
11
|
+
id;
|
|
12
|
+
visible = true;
|
|
13
|
+
config;
|
|
14
|
+
constructor(id, config) {
|
|
15
|
+
this.id = id;
|
|
16
|
+
this.config = {
|
|
17
|
+
selectedIndex: 0,
|
|
18
|
+
scrollOffset: 0,
|
|
19
|
+
showIndicator: true,
|
|
20
|
+
indicatorChar: '>',
|
|
21
|
+
selectedFg: ANSI.fg.black,
|
|
22
|
+
selectedBg: ANSI.bg.cyan,
|
|
23
|
+
emptyMessage: '(empty)',
|
|
24
|
+
...config,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Update list configuration
|
|
29
|
+
*/
|
|
30
|
+
setConfig(config) {
|
|
31
|
+
this.config = { ...this.config, ...config };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Set items
|
|
35
|
+
*/
|
|
36
|
+
setItems(items) {
|
|
37
|
+
this.config.items = items;
|
|
38
|
+
// Clamp selected index
|
|
39
|
+
if (this.config.selectedIndex !== undefined && this.config.selectedIndex >= items.length) {
|
|
40
|
+
this.config.selectedIndex = Math.max(0, items.length - 1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Set selected index
|
|
45
|
+
*/
|
|
46
|
+
setSelectedIndex(index) {
|
|
47
|
+
this.config.selectedIndex = Math.max(0, Math.min(this.config.items.length - 1, index));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get selected item
|
|
51
|
+
*/
|
|
52
|
+
getSelectedItem() {
|
|
53
|
+
return this.config.items[this.config.selectedIndex ?? 0];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Render the list
|
|
57
|
+
*/
|
|
58
|
+
render(ctx) {
|
|
59
|
+
if (!this.visible)
|
|
60
|
+
return;
|
|
61
|
+
const { screen, bounds } = ctx;
|
|
62
|
+
const { x, y, width, height } = bounds;
|
|
63
|
+
const { items, selectedIndex = 0, scrollOffset = 0, showIndicator, indicatorChar, selectedFg, selectedBg, emptyMessage, } = this.config;
|
|
64
|
+
// Empty state
|
|
65
|
+
if (items.length === 0) {
|
|
66
|
+
screen.write(x + 2, y + 1, emptyMessage || '(empty)', ANSI.fg.gray);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// Calculate visible items
|
|
70
|
+
const maxVisible = height;
|
|
71
|
+
const visibleItems = items.slice(scrollOffset, scrollOffset + maxVisible);
|
|
72
|
+
// Render each item
|
|
73
|
+
for (let i = 0; i < visibleItems.length; i++) {
|
|
74
|
+
const itemIndex = scrollOffset + i;
|
|
75
|
+
const item = visibleItems[i];
|
|
76
|
+
const isSelected = itemIndex === selectedIndex;
|
|
77
|
+
const fg = isSelected ? selectedFg : (item.color || ANSI.fg.white);
|
|
78
|
+
const bg = isSelected ? selectedBg : undefined;
|
|
79
|
+
const indicator = isSelected && showIndicator ? indicatorChar : ' ';
|
|
80
|
+
// Draw indicator
|
|
81
|
+
if (showIndicator) {
|
|
82
|
+
screen.write(x, y + i, indicator || '>', ANSI.fg.yellow);
|
|
83
|
+
}
|
|
84
|
+
// Draw item label
|
|
85
|
+
const labelX = showIndicator ? x + 2 : x;
|
|
86
|
+
const labelWidth = showIndicator ? width - 2 : width;
|
|
87
|
+
screen.write(labelX, y + i, item.label.slice(0, labelWidth).padEnd(labelWidth), fg, bg);
|
|
88
|
+
}
|
|
89
|
+
// Scroll indicators (if there are more items)
|
|
90
|
+
if (scrollOffset > 0) {
|
|
91
|
+
screen.write(x + width - 1, y, '^', ANSI.fg.yellow);
|
|
92
|
+
}
|
|
93
|
+
if (scrollOffset + maxVisible < items.length) {
|
|
94
|
+
screen.write(x + width - 1, y + height - 1, 'v', ANSI.fg.yellow);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Move selection up
|
|
99
|
+
*/
|
|
100
|
+
moveUp() {
|
|
101
|
+
if (this.config.selectedIndex !== undefined && this.config.selectedIndex > 0) {
|
|
102
|
+
this.config.selectedIndex--;
|
|
103
|
+
this.ensureVisible();
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Move selection down
|
|
110
|
+
*/
|
|
111
|
+
moveDown() {
|
|
112
|
+
if (this.config.selectedIndex !== undefined &&
|
|
113
|
+
this.config.selectedIndex < this.config.items.length - 1) {
|
|
114
|
+
this.config.selectedIndex++;
|
|
115
|
+
this.ensureVisible();
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Ensure selected item is visible
|
|
122
|
+
*/
|
|
123
|
+
ensureVisible() {
|
|
124
|
+
const { selectedIndex = 0, scrollOffset = 0 } = this.config;
|
|
125
|
+
// Note: maxVisible is calculated in render, so we use a default here
|
|
126
|
+
const maxVisible = 10;
|
|
127
|
+
if (selectedIndex < scrollOffset) {
|
|
128
|
+
this.config.scrollOffset = selectedIndex;
|
|
129
|
+
}
|
|
130
|
+
else if (selectedIndex >= scrollOffset + maxVisible) {
|
|
131
|
+
this.config.scrollOffset = selectedIndex - maxVisible + 1;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=List.js.map
|
|
136
|
+
//# debugId=c0046caa-1a3a-541f-989c-88a1255f3d23
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"List.js","sources":["tui/components/List.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * List Component - Renders a scrollable list of items\r\n */\r\n\r\nimport type { IComponent, RenderContext } from '../core/Component.js';\r\nimport { ANSI } from '../Screen.js';\r\n\r\n/**\r\n * List item\r\n */\r\nexport interface ListItem {\r\n id: string;\r\n label: string;\r\n description?: string;\r\n color?: string;\r\n data?: unknown;\r\n}\r\n\r\n/**\r\n * List configuration\r\n */\r\nexport interface ListConfig {\r\n items: ListItem[];\r\n selectedIndex?: number;\r\n scrollOffset?: number;\r\n showIndicator?: boolean;\r\n indicatorChar?: string;\r\n selectedFg?: string;\r\n selectedBg?: string;\r\n emptyMessage?: string;\r\n}\r\n\r\n/**\r\n * List Component - Scrollable item list\r\n */\r\nexport class List implements IComponent {\r\n readonly id: string;\r\n visible: boolean = true;\r\n\r\n private config: ListConfig;\r\n\r\n constructor(id: string, config: ListConfig) {\r\n this.id = id;\r\n this.config = {\r\n selectedIndex: 0,\r\n scrollOffset: 0,\r\n showIndicator: true,\r\n indicatorChar: '>',\r\n selectedFg: ANSI.fg.black,\r\n selectedBg: ANSI.bg.cyan,\r\n emptyMessage: '(empty)',\r\n ...config,\r\n };\r\n }\r\n\r\n /**\r\n * Update list configuration\r\n */\r\n setConfig(config: Partial<ListConfig>): void {\r\n this.config = { ...this.config, ...config };\r\n }\r\n\r\n /**\r\n * Set items\r\n */\r\n setItems(items: ListItem[]): void {\r\n this.config.items = items;\r\n // Clamp selected index\r\n if (this.config.selectedIndex !== undefined && this.config.selectedIndex >= items.length) {\r\n this.config.selectedIndex = Math.max(0, items.length - 1);\r\n }\r\n }\r\n\r\n /**\r\n * Set selected index\r\n */\r\n setSelectedIndex(index: number): void {\r\n this.config.selectedIndex = Math.max(0, Math.min(this.config.items.length - 1, index));\r\n }\r\n\r\n /**\r\n * Get selected item\r\n */\r\n getSelectedItem(): ListItem | undefined {\r\n return this.config.items[this.config.selectedIndex ?? 0];\r\n }\r\n\r\n /**\r\n * Render the list\r\n */\r\n render(ctx: RenderContext): void {\r\n if (!this.visible) return;\r\n\r\n const { screen, bounds } = ctx;\r\n const { x, y, width, height } = bounds;\r\n const {\r\n items,\r\n selectedIndex = 0,\r\n scrollOffset = 0,\r\n showIndicator,\r\n indicatorChar,\r\n selectedFg,\r\n selectedBg,\r\n emptyMessage,\r\n } = this.config;\r\n\r\n // Empty state\r\n if (items.length === 0) {\r\n screen.write(x + 2, y + 1, emptyMessage || '(empty)', ANSI.fg.gray);\r\n return;\r\n }\r\n\r\n // Calculate visible items\r\n const maxVisible = height;\r\n const visibleItems = items.slice(scrollOffset, scrollOffset + maxVisible);\r\n\r\n // Render each item\r\n for (let i = 0; i < visibleItems.length; i++) {\r\n const itemIndex = scrollOffset + i;\r\n const item = visibleItems[i];\r\n const isSelected = itemIndex === selectedIndex;\r\n\r\n const fg = isSelected ? selectedFg : (item.color || ANSI.fg.white);\r\n const bg = isSelected ? selectedBg : undefined;\r\n const indicator = isSelected && showIndicator ? indicatorChar : ' ';\r\n\r\n // Draw indicator\r\n if (showIndicator) {\r\n screen.write(x, y + i, indicator || '>', ANSI.fg.yellow);\r\n }\r\n\r\n // Draw item label\r\n const labelX = showIndicator ? x + 2 : x;\r\n const labelWidth = showIndicator ? width - 2 : width;\r\n screen.write(\r\n labelX,\r\n y + i,\r\n item.label.slice(0, labelWidth).padEnd(labelWidth),\r\n fg,\r\n bg\r\n );\r\n }\r\n\r\n // Scroll indicators (if there are more items)\r\n if (scrollOffset > 0) {\r\n screen.write(x + width - 1, y, '^', ANSI.fg.yellow);\r\n }\r\n if (scrollOffset + maxVisible < items.length) {\r\n screen.write(x + width - 1, y + height - 1, 'v', ANSI.fg.yellow);\r\n }\r\n }\r\n\r\n /**\r\n * Move selection up\r\n */\r\n moveUp(): boolean {\r\n if (this.config.selectedIndex !== undefined && this.config.selectedIndex > 0) {\r\n this.config.selectedIndex--;\r\n this.ensureVisible();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Move selection down\r\n */\r\n moveDown(): boolean {\r\n if (\r\n this.config.selectedIndex !== undefined &&\r\n this.config.selectedIndex < this.config.items.length - 1\r\n ) {\r\n this.config.selectedIndex++;\r\n this.ensureVisible();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Ensure selected item is visible\r\n */\r\n private ensureVisible(): void {\r\n const { selectedIndex = 0, scrollOffset = 0 } = this.config;\r\n // Note: maxVisible is calculated in render, so we use a default here\r\n const maxVisible = 10;\r\n\r\n if (selectedIndex < scrollOffset) {\r\n this.config.scrollOffset = selectedIndex;\r\n } else if (selectedIndex >= scrollOffset + maxVisible) {\r\n this.config.scrollOffset = selectedIndex - maxVisible + 1;\r\n }\r\n }\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"c0046caa-1a3a-541f-989c-88a1255f3d23"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress Bar Component
|
|
3
|
+
*/
|
|
4
|
+
import type { IComponent, RenderContext } from '../core/Component.js';
|
|
5
|
+
/**
|
|
6
|
+
* Progress bar configuration
|
|
7
|
+
*/
|
|
8
|
+
export interface ProgressBarConfig {
|
|
9
|
+
value: number;
|
|
10
|
+
max: number;
|
|
11
|
+
width?: number;
|
|
12
|
+
filledColor?: string;
|
|
13
|
+
emptyColor?: string;
|
|
14
|
+
showText?: boolean;
|
|
15
|
+
textFormat?: 'percent' | 'value' | 'both';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Progress Bar Component
|
|
19
|
+
*/
|
|
20
|
+
export declare class ProgressBar implements IComponent {
|
|
21
|
+
readonly id: string;
|
|
22
|
+
visible: boolean;
|
|
23
|
+
private config;
|
|
24
|
+
constructor(id: string, config: ProgressBarConfig);
|
|
25
|
+
/**
|
|
26
|
+
* Update progress bar configuration
|
|
27
|
+
*/
|
|
28
|
+
setConfig(config: Partial<ProgressBarConfig>): void;
|
|
29
|
+
/**
|
|
30
|
+
* Update value
|
|
31
|
+
*/
|
|
32
|
+
setValue(value: number): void;
|
|
33
|
+
/**
|
|
34
|
+
* Render the progress bar
|
|
35
|
+
*/
|
|
36
|
+
render(ctx: RenderContext): void;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Draw a progress bar directly to screen
|
|
40
|
+
*/
|
|
41
|
+
export declare function drawProgressBar(ctx: RenderContext, config: ProgressBarConfig): void;
|
|
42
|
+
//# sourceMappingURL=ProgressBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressBar.d.ts","sourceRoot":"/","sources":["tui/components/ProgressBar.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGtE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;CAC3C;AAED;;GAEG;AACH,qBAAa,WAAY,YAAW,UAAU;IAC5C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAQ;IAExB,OAAO,CAAC,MAAM,CAAoB;gBAEtB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB;IAKjD;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAInD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;CA4CjC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,iBAAiB,GACxB,IAAI,CAGN"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress Bar Component
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
!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]="43671bec-e1e2-5d8b-bed6-52980c9b9ea5")}catch(e){}}();
|
|
6
|
+
import { ANSI, PROGRESS } from '../Screen.js';
|
|
7
|
+
/**
|
|
8
|
+
* Progress Bar Component
|
|
9
|
+
*/
|
|
10
|
+
export class ProgressBar {
|
|
11
|
+
id;
|
|
12
|
+
visible = true;
|
|
13
|
+
config;
|
|
14
|
+
constructor(id, config) {
|
|
15
|
+
this.id = id;
|
|
16
|
+
this.config = config;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Update progress bar configuration
|
|
20
|
+
*/
|
|
21
|
+
setConfig(config) {
|
|
22
|
+
this.config = { ...this.config, ...config };
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Update value
|
|
26
|
+
*/
|
|
27
|
+
setValue(value) {
|
|
28
|
+
this.config.value = value;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Render the progress bar
|
|
32
|
+
*/
|
|
33
|
+
render(ctx) {
|
|
34
|
+
if (!this.visible)
|
|
35
|
+
return;
|
|
36
|
+
const { screen, bounds } = ctx;
|
|
37
|
+
const { x, y, width: boundsWidth } = bounds;
|
|
38
|
+
const { value, max, width = boundsWidth, filledColor = ANSI.fg.green, emptyColor = ANSI.fg.gray, showText = false, textFormat = 'value', } = this.config;
|
|
39
|
+
// Calculate filled portion
|
|
40
|
+
const ratio = Math.max(0, Math.min(1, value / max));
|
|
41
|
+
const barWidth = showText ? width - 10 : width;
|
|
42
|
+
const filled = Math.floor(ratio * barWidth);
|
|
43
|
+
// Draw the bar
|
|
44
|
+
for (let i = 0; i < barWidth; i++) {
|
|
45
|
+
const char = i < filled ? PROGRESS.full : PROGRESS.empty;
|
|
46
|
+
const color = i < filled ? filledColor : emptyColor;
|
|
47
|
+
screen.setChar(x + i, y, char, color);
|
|
48
|
+
}
|
|
49
|
+
// Draw text if enabled
|
|
50
|
+
if (showText) {
|
|
51
|
+
let text = '';
|
|
52
|
+
switch (textFormat) {
|
|
53
|
+
case 'percent':
|
|
54
|
+
text = `${Math.floor(ratio * 100)}%`;
|
|
55
|
+
break;
|
|
56
|
+
case 'value':
|
|
57
|
+
text = `${value}/${max}`;
|
|
58
|
+
break;
|
|
59
|
+
case 'both':
|
|
60
|
+
text = `${value}/${max} (${Math.floor(ratio * 100)}%)`;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
screen.write(x + barWidth + 1, y, text, ANSI.fg.white);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Draw a progress bar directly to screen
|
|
69
|
+
*/
|
|
70
|
+
export function drawProgressBar(ctx, config) {
|
|
71
|
+
const bar = new ProgressBar('temp', config);
|
|
72
|
+
bar.render(ctx);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=ProgressBar.js.map
|
|
75
|
+
//# debugId=43671bec-e1e2-5d8b-bed6-52980c9b9ea5
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressBar.js","sources":["tui/components/ProgressBar.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Progress Bar Component\r\n */\r\n\r\nimport type { IComponent, RenderContext } from '../core/Component.js';\r\nimport { ANSI, PROGRESS } from '../Screen.js';\r\n\r\n/**\r\n * Progress bar configuration\r\n */\r\nexport interface ProgressBarConfig {\r\n value: number;\r\n max: number;\r\n width?: number;\r\n filledColor?: string;\r\n emptyColor?: string;\r\n showText?: boolean;\r\n textFormat?: 'percent' | 'value' | 'both';\r\n}\r\n\r\n/**\r\n * Progress Bar Component\r\n */\r\nexport class ProgressBar implements IComponent {\r\n readonly id: string;\r\n visible: boolean = true;\r\n\r\n private config: ProgressBarConfig;\r\n\r\n constructor(id: string, config: ProgressBarConfig) {\r\n this.id = id;\r\n this.config = config;\r\n }\r\n\r\n /**\r\n * Update progress bar configuration\r\n */\r\n setConfig(config: Partial<ProgressBarConfig>): void {\r\n this.config = { ...this.config, ...config };\r\n }\r\n\r\n /**\r\n * Update value\r\n */\r\n setValue(value: number): void {\r\n this.config.value = value;\r\n }\r\n\r\n /**\r\n * Render the progress bar\r\n */\r\n render(ctx: RenderContext): void {\r\n if (!this.visible) return;\r\n\r\n const { screen, bounds } = ctx;\r\n const { x, y, width: boundsWidth } = bounds;\r\n const {\r\n value,\r\n max,\r\n width = boundsWidth,\r\n filledColor = ANSI.fg.green,\r\n emptyColor = ANSI.fg.gray,\r\n showText = false,\r\n textFormat = 'value',\r\n } = this.config;\r\n\r\n // Calculate filled portion\r\n const ratio = Math.max(0, Math.min(1, value / max));\r\n const barWidth = showText ? width - 10 : width;\r\n const filled = Math.floor(ratio * barWidth);\r\n\r\n // Draw the bar\r\n for (let i = 0; i < barWidth; i++) {\r\n const char = i < filled ? PROGRESS.full : PROGRESS.empty;\r\n const color = i < filled ? filledColor : emptyColor;\r\n screen.setChar(x + i, y, char, color);\r\n }\r\n\r\n // Draw text if enabled\r\n if (showText) {\r\n let text = '';\r\n switch (textFormat) {\r\n case 'percent':\r\n text = `${Math.floor(ratio * 100)}%`;\r\n break;\r\n case 'value':\r\n text = `${value}/${max}`;\r\n break;\r\n case 'both':\r\n text = `${value}/${max} (${Math.floor(ratio * 100)}%)`;\r\n break;\r\n }\r\n screen.write(x + barWidth + 1, y, text, ANSI.fg.white);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Draw a progress bar directly to screen\r\n */\r\nexport function drawProgressBar(\r\n ctx: RenderContext,\r\n config: ProgressBarConfig\r\n): void {\r\n const bar = new ProgressBar('temp', config);\r\n bar.render(ctx);\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"43671bec-e1e2-5d8b-bed6-52980c9b9ea5"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["tui/components/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI Components Module
|
|
3
|
+
* Exports all reusable components
|
|
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]="7881c45c-89a7-52df-a128-9c7e1185feae")}catch(e){}}();
|
|
7
|
+
export * from './Box.js';
|
|
8
|
+
export * from './ProgressBar.js';
|
|
9
|
+
export * from './List.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
11
|
+
//# debugId=7881c45c-89a7-52df-a128-9c7e1185feae
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["tui/components/index.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * TUI Components Module\r\n * Exports all reusable components\r\n */\r\n\r\nexport * from './Box.js';\r\nexport * from './ProgressBar.js';\r\nexport * from './List.js';\r\n"],"names":[],"mappings":"AAAA;;;GAGG;;;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC","debug_id":"7881c45c-89a7-52df-a128-9c7e1185feae"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Section - Abstract implementation of ISection
|
|
3
|
+
* Provides common functionality for all sections
|
|
4
|
+
*/
|
|
5
|
+
import type { Rect, RenderContext } from './Component.js';
|
|
6
|
+
import type { ISection, SectionState, SectionHints } from './Section.js';
|
|
7
|
+
import type { KeyEvent } from '../Input.js';
|
|
8
|
+
/**
|
|
9
|
+
* Base section configuration
|
|
10
|
+
*/
|
|
11
|
+
export interface BaseSectionConfig {
|
|
12
|
+
id: string;
|
|
13
|
+
title: string;
|
|
14
|
+
canEnter?: boolean;
|
|
15
|
+
hints?: Partial<SectionHints>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Abstract base class for sections
|
|
19
|
+
* Handles common behavior: focus styling, navigation, state management
|
|
20
|
+
*/
|
|
21
|
+
export declare abstract class BaseSection implements ISection {
|
|
22
|
+
readonly id: string;
|
|
23
|
+
readonly title: string;
|
|
24
|
+
readonly canEnter: boolean;
|
|
25
|
+
focused: boolean;
|
|
26
|
+
state: SectionState;
|
|
27
|
+
hints: SectionHints;
|
|
28
|
+
bounds: Rect;
|
|
29
|
+
constructor(config: BaseSectionConfig);
|
|
30
|
+
/**
|
|
31
|
+
* Render the section
|
|
32
|
+
* Template method: calls renderBox, then renderContent
|
|
33
|
+
*/
|
|
34
|
+
render(ctx: RenderContext): void;
|
|
35
|
+
/**
|
|
36
|
+
* Render the section box with appropriate styling
|
|
37
|
+
*/
|
|
38
|
+
protected renderBox(ctx: RenderContext): void;
|
|
39
|
+
/**
|
|
40
|
+
* Render section-specific content
|
|
41
|
+
* Must be implemented by subclasses
|
|
42
|
+
*/
|
|
43
|
+
protected abstract renderContent(ctx: RenderContext): void;
|
|
44
|
+
/**
|
|
45
|
+
* Render hint at the bottom of the section
|
|
46
|
+
*/
|
|
47
|
+
protected renderHint(ctx: RenderContext): void;
|
|
48
|
+
/**
|
|
49
|
+
* Handle key input
|
|
50
|
+
* Default implementation handles basic up/down/enter/escape
|
|
51
|
+
*/
|
|
52
|
+
handleKey(key: KeyEvent): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Handle section-specific key input
|
|
55
|
+
* Override in subclasses for custom key handling
|
|
56
|
+
*/
|
|
57
|
+
protected handleCustomKey(key: KeyEvent): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Enter the section
|
|
60
|
+
*/
|
|
61
|
+
enter(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Exit the section
|
|
64
|
+
*/
|
|
65
|
+
exit(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Get the number of selectable items
|
|
68
|
+
* Must be implemented by subclasses
|
|
69
|
+
*/
|
|
70
|
+
abstract getItemCount(): number;
|
|
71
|
+
/**
|
|
72
|
+
* Activate the currently selected item
|
|
73
|
+
* Must be implemented by subclasses
|
|
74
|
+
*/
|
|
75
|
+
abstract activateItem(): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Get current hint based on state
|
|
78
|
+
*/
|
|
79
|
+
getCurrentHint(): string;
|
|
80
|
+
/**
|
|
81
|
+
* Move selection by delta
|
|
82
|
+
*/
|
|
83
|
+
protected moveSelection(delta: number): void;
|
|
84
|
+
/**
|
|
85
|
+
* Ensure the selected item is visible (handle scrolling)
|
|
86
|
+
*/
|
|
87
|
+
protected ensureVisible(): void;
|
|
88
|
+
/**
|
|
89
|
+
* Get maximum visible items based on bounds
|
|
90
|
+
* Override in subclasses if needed
|
|
91
|
+
*/
|
|
92
|
+
protected getMaxVisibleItems(): number;
|
|
93
|
+
/**
|
|
94
|
+
* Render a list item with selection indicator
|
|
95
|
+
*/
|
|
96
|
+
protected renderListItem(ctx: RenderContext, index: number, text: string, y: number, customFg?: string): void;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=BaseSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseSection.d.ts","sourceRoot":"/","sources":["tui/core/BaseSection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CAC/B;AAED;;;GAGG;AACH,8BAAsB,WAAY,YAAW,QAAQ;IACnD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,OAAO,EAAE,OAAO,CAAS;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,IAAI,CAAuC;gBAEvC,MAAM,EAAE,iBAAiB;IAcrC;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAOhC;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAkB7C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAE1D;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAa9C;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IA6BjC;;;OAGG;IACH,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAIjD;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;;OAGG;IACH,QAAQ,CAAC,YAAY,IAAI,MAAM;IAE/B;;;OAGG;IACH,QAAQ,CAAC,YAAY,IAAI,OAAO;IAEhC;;OAEG;IACH,cAAc,IAAI,MAAM;IAUxB;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAW5C;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAS/B;;;OAGG;IACH,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAKtC;;OAEG;IACH,SAAS,CAAC,cAAc,CACtB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI;CAgBR"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Section - Abstract implementation of ISection
|
|
3
|
+
* Provides common functionality for all sections
|
|
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]="9222b139-6e88-557b-bdc4-0f103d007207")}catch(e){}}();
|
|
7
|
+
import { createSectionState, createSectionHints } from './Section.js';
|
|
8
|
+
import { ANSI } from '../Screen.js';
|
|
9
|
+
/**
|
|
10
|
+
* Abstract base class for sections
|
|
11
|
+
* Handles common behavior: focus styling, navigation, state management
|
|
12
|
+
*/
|
|
13
|
+
export class BaseSection {
|
|
14
|
+
id;
|
|
15
|
+
title;
|
|
16
|
+
canEnter;
|
|
17
|
+
focused = false;
|
|
18
|
+
state;
|
|
19
|
+
hints;
|
|
20
|
+
bounds = { x: 0, y: 0, width: 0, height: 0 };
|
|
21
|
+
constructor(config) {
|
|
22
|
+
this.id = config.id;
|
|
23
|
+
this.title = config.title;
|
|
24
|
+
this.canEnter = config.canEnter ?? true;
|
|
25
|
+
this.state = createSectionState();
|
|
26
|
+
this.hints = createSectionHints(config.hints?.focused, config.hints?.entered);
|
|
27
|
+
if (config.hints?.unfocused) {
|
|
28
|
+
this.hints.unfocused = config.hints.unfocused;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Render the section
|
|
33
|
+
* Template method: calls renderBox, then renderContent
|
|
34
|
+
*/
|
|
35
|
+
render(ctx) {
|
|
36
|
+
this.bounds = ctx.bounds;
|
|
37
|
+
this.renderBox(ctx);
|
|
38
|
+
this.renderContent(ctx);
|
|
39
|
+
this.renderHint(ctx);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Render the section box with appropriate styling
|
|
43
|
+
*/
|
|
44
|
+
renderBox(ctx) {
|
|
45
|
+
const { screen, bounds } = ctx;
|
|
46
|
+
const { x, y, width, height } = bounds;
|
|
47
|
+
// Determine title text and styling based on state
|
|
48
|
+
const displayTitle = this.state.entered ? `[ ${this.title} ]` : this.title;
|
|
49
|
+
const titleFg = this.focused ? ANSI.fg.black : ANSI.fg.cyan;
|
|
50
|
+
const titleBg = this.focused ? ANSI.bg.cyan : undefined;
|
|
51
|
+
// Draw the box
|
|
52
|
+
screen.drawBox(x, y, width, height, displayTitle, false, titleFg, titleBg);
|
|
53
|
+
// Draw focus indicator ('+') when focused but not entered
|
|
54
|
+
if (this.focused && !this.state.entered) {
|
|
55
|
+
screen.write(x, y, '+', ANSI.fg.yellow);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Render hint at the bottom of the section
|
|
60
|
+
*/
|
|
61
|
+
renderHint(ctx) {
|
|
62
|
+
const hint = this.getCurrentHint();
|
|
63
|
+
if (hint) {
|
|
64
|
+
const { screen, bounds } = ctx;
|
|
65
|
+
screen.write(bounds.x + 2, bounds.y + bounds.height - 1, hint.slice(0, bounds.width - 4), ANSI.fg.gray);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Handle key input
|
|
70
|
+
* Default implementation handles basic up/down/enter/escape
|
|
71
|
+
*/
|
|
72
|
+
handleKey(key) {
|
|
73
|
+
if (!this.state.entered) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
switch (key.name) {
|
|
77
|
+
case 'escape':
|
|
78
|
+
this.exit();
|
|
79
|
+
return true;
|
|
80
|
+
case 'up':
|
|
81
|
+
case 'k':
|
|
82
|
+
this.moveSelection(-1);
|
|
83
|
+
return true;
|
|
84
|
+
case 'down':
|
|
85
|
+
case 'j':
|
|
86
|
+
this.moveSelection(1);
|
|
87
|
+
return true;
|
|
88
|
+
case 'return':
|
|
89
|
+
case 'space':
|
|
90
|
+
return this.activateItem();
|
|
91
|
+
default:
|
|
92
|
+
return this.handleCustomKey(key);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Handle section-specific key input
|
|
97
|
+
* Override in subclasses for custom key handling
|
|
98
|
+
*/
|
|
99
|
+
handleCustomKey(key) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Enter the section
|
|
104
|
+
*/
|
|
105
|
+
enter() {
|
|
106
|
+
if (!this.canEnter)
|
|
107
|
+
return;
|
|
108
|
+
this.state.entered = true;
|
|
109
|
+
this.state.selectedIndex = 0;
|
|
110
|
+
this.state.scrollOffset = 0;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Exit the section
|
|
114
|
+
*/
|
|
115
|
+
exit() {
|
|
116
|
+
this.state.entered = false;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get current hint based on state
|
|
120
|
+
*/
|
|
121
|
+
getCurrentHint() {
|
|
122
|
+
if (this.state.entered) {
|
|
123
|
+
return this.hints.entered;
|
|
124
|
+
}
|
|
125
|
+
if (this.focused) {
|
|
126
|
+
return this.hints.focused;
|
|
127
|
+
}
|
|
128
|
+
return this.hints.unfocused || '';
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Move selection by delta
|
|
132
|
+
*/
|
|
133
|
+
moveSelection(delta) {
|
|
134
|
+
const count = this.getItemCount();
|
|
135
|
+
if (count === 0)
|
|
136
|
+
return;
|
|
137
|
+
this.state.selectedIndex = Math.max(0, Math.min(count - 1, this.state.selectedIndex + delta));
|
|
138
|
+
this.ensureVisible();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Ensure the selected item is visible (handle scrolling)
|
|
142
|
+
*/
|
|
143
|
+
ensureVisible() {
|
|
144
|
+
const maxVisible = this.getMaxVisibleItems();
|
|
145
|
+
if (this.state.selectedIndex < this.state.scrollOffset) {
|
|
146
|
+
this.state.scrollOffset = this.state.selectedIndex;
|
|
147
|
+
}
|
|
148
|
+
else if (this.state.selectedIndex >= this.state.scrollOffset + maxVisible) {
|
|
149
|
+
this.state.scrollOffset = this.state.selectedIndex - maxVisible + 1;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get maximum visible items based on bounds
|
|
154
|
+
* Override in subclasses if needed
|
|
155
|
+
*/
|
|
156
|
+
getMaxVisibleItems() {
|
|
157
|
+
// Default: height minus 2 for border, 1 for hint
|
|
158
|
+
return Math.max(1, this.bounds.height - 3);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Render a list item with selection indicator
|
|
162
|
+
*/
|
|
163
|
+
renderListItem(ctx, index, text, y, customFg) {
|
|
164
|
+
const { screen, bounds } = ctx;
|
|
165
|
+
const isSelected = this.state.entered && index === this.state.selectedIndex;
|
|
166
|
+
const fg = isSelected ? ANSI.fg.black : (customFg || ANSI.fg.white);
|
|
167
|
+
const bg = isSelected ? ANSI.bg.cyan : undefined;
|
|
168
|
+
const indicator = isSelected ? '>' : ' ';
|
|
169
|
+
screen.write(bounds.x + 1, y, indicator, ANSI.fg.yellow);
|
|
170
|
+
screen.write(bounds.x + 3, y, text.slice(0, bounds.width - 5).padEnd(bounds.width - 5), fg, bg);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=BaseSection.js.map
|
|
174
|
+
//# debugId=9222b139-6e88-557b-bdc4-0f103d007207
|