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.
Files changed (478) hide show
  1. package/README.md +171 -0
  2. package/dist/affix/AffixRegistry.d.ts +68 -0
  3. package/dist/affix/AffixRegistry.d.ts.map +1 -0
  4. package/dist/affix/AffixRegistry.js +245 -0
  5. package/dist/affix/AffixRegistry.js.map +1 -0
  6. package/dist/affix/PluginLoader.d.ts +66 -0
  7. package/dist/affix/PluginLoader.d.ts.map +1 -0
  8. package/dist/affix/PluginLoader.js +321 -0
  9. package/dist/affix/PluginLoader.js.map +1 -0
  10. package/dist/affix/builtin.d.ts +6 -0
  11. package/dist/affix/builtin.d.ts.map +1 -0
  12. package/dist/affix/builtin.js +311 -0
  13. package/dist/affix/builtin.js.map +1 -0
  14. package/dist/affix/index.d.ts +8 -0
  15. package/dist/affix/index.d.ts.map +1 -0
  16. package/dist/affix/index.js +11 -0
  17. package/dist/affix/index.js.map +1 -0
  18. package/dist/affix/types.d.ts +152 -0
  19. package/dist/affix/types.d.ts.map +1 -0
  20. package/dist/affix/types.js +8 -0
  21. package/dist/affix/types.js.map +1 -0
  22. package/dist/ai/PlayKitClient.d.ts +208 -0
  23. package/dist/ai/PlayKitClient.d.ts.map +1 -0
  24. package/dist/ai/PlayKitClient.js +721 -0
  25. package/dist/ai/PlayKitClient.js.map +1 -0
  26. package/dist/ai/index.d.ts +5 -0
  27. package/dist/ai/index.d.ts.map +1 -0
  28. package/dist/ai/index.js +8 -0
  29. package/dist/ai/index.js.map +1 -0
  30. package/dist/app/App.d.ts +85 -0
  31. package/dist/app/App.d.ts.map +1 -0
  32. package/dist/app/App.js +296 -0
  33. package/dist/app/App.js.map +1 -0
  34. package/dist/app/EventBus.d.ts +222 -0
  35. package/dist/app/EventBus.d.ts.map +1 -0
  36. package/dist/app/EventBus.js +88 -0
  37. package/dist/app/EventBus.js.map +1 -0
  38. package/dist/app/Keybind.d.ts +83 -0
  39. package/dist/app/Keybind.d.ts.map +1 -0
  40. package/dist/app/Keybind.js +184 -0
  41. package/dist/app/Keybind.js.map +1 -0
  42. package/dist/app/Router.d.ts +123 -0
  43. package/dist/app/Router.d.ts.map +1 -0
  44. package/dist/app/Router.js +142 -0
  45. package/dist/app/Router.js.map +1 -0
  46. package/dist/app/ScreenManager.d.ts +97 -0
  47. package/dist/app/ScreenManager.d.ts.map +1 -0
  48. package/dist/app/ScreenManager.js +216 -0
  49. package/dist/app/ScreenManager.js.map +1 -0
  50. package/dist/app/index.d.ts +14 -0
  51. package/dist/app/index.d.ts.map +1 -0
  52. package/dist/app/index.js +19 -0
  53. package/dist/app/index.js.map +1 -0
  54. package/dist/app/screens/BaseScreen.d.ts +101 -0
  55. package/dist/app/screens/BaseScreen.d.ts.map +1 -0
  56. package/dist/app/screens/BaseScreen.js +132 -0
  57. package/dist/app/screens/BaseScreen.js.map +1 -0
  58. package/dist/app/screens/CharacterCreationScreen.d.ts +42 -0
  59. package/dist/app/screens/CharacterCreationScreen.d.ts.map +1 -0
  60. package/dist/app/screens/CharacterCreationScreen.js +467 -0
  61. package/dist/app/screens/CharacterCreationScreen.js.map +1 -0
  62. package/dist/app/screens/CombatScreen.d.ts +30 -0
  63. package/dist/app/screens/CombatScreen.d.ts.map +1 -0
  64. package/dist/app/screens/CombatScreen.js +309 -0
  65. package/dist/app/screens/CombatScreen.js.map +1 -0
  66. package/dist/app/screens/DialogScreen.d.ts +29 -0
  67. package/dist/app/screens/DialogScreen.d.ts.map +1 -0
  68. package/dist/app/screens/DialogScreen.js +295 -0
  69. package/dist/app/screens/DialogScreen.js.map +1 -0
  70. package/dist/app/screens/ExploreScreen.d.ts +50 -0
  71. package/dist/app/screens/ExploreScreen.d.ts.map +1 -0
  72. package/dist/app/screens/ExploreScreen.js +308 -0
  73. package/dist/app/screens/ExploreScreen.js.map +1 -0
  74. package/dist/app/screens/HelpScreen.d.ts +12 -0
  75. package/dist/app/screens/HelpScreen.d.ts.map +1 -0
  76. package/dist/app/screens/HelpScreen.js +155 -0
  77. package/dist/app/screens/HelpScreen.js.map +1 -0
  78. package/dist/app/screens/InventoryScreen.d.ts +27 -0
  79. package/dist/app/screens/InventoryScreen.d.ts.map +1 -0
  80. package/dist/app/screens/InventoryScreen.js +326 -0
  81. package/dist/app/screens/InventoryScreen.js.map +1 -0
  82. package/dist/app/screens/PrologueScreen.d.ts +24 -0
  83. package/dist/app/screens/PrologueScreen.d.ts.map +1 -0
  84. package/dist/app/screens/PrologueScreen.js +176 -0
  85. package/dist/app/screens/PrologueScreen.js.map +1 -0
  86. package/dist/app/screens/TitleScreen.d.ts +42 -0
  87. package/dist/app/screens/TitleScreen.d.ts.map +1 -0
  88. package/dist/app/screens/TitleScreen.js +380 -0
  89. package/dist/app/screens/TitleScreen.js.map +1 -0
  90. package/dist/app/screens/TravelScreen.d.ts +22 -0
  91. package/dist/app/screens/TravelScreen.d.ts.map +1 -0
  92. package/dist/app/screens/TravelScreen.js +122 -0
  93. package/dist/app/screens/TravelScreen.js.map +1 -0
  94. package/dist/app/screens/index.d.ts +14 -0
  95. package/dist/app/screens/index.d.ts.map +1 -0
  96. package/dist/app/screens/index.js +17 -0
  97. package/dist/app/screens/index.js.map +1 -0
  98. package/dist/commands/CommandRegistry.d.ts +91 -0
  99. package/dist/commands/CommandRegistry.d.ts.map +1 -0
  100. package/dist/commands/CommandRegistry.js +159 -0
  101. package/dist/commands/CommandRegistry.js.map +1 -0
  102. package/dist/commands/index.d.ts +7 -0
  103. package/dist/commands/index.d.ts.map +1 -0
  104. package/dist/commands/index.js +10 -0
  105. package/dist/commands/index.js.map +1 -0
  106. package/dist/core/Actor.d.ts +103 -0
  107. package/dist/core/Actor.d.ts.map +1 -0
  108. package/dist/core/Actor.js +409 -0
  109. package/dist/core/Actor.js.map +1 -0
  110. package/dist/core/Combat.d.ts +37 -0
  111. package/dist/core/Combat.d.ts.map +1 -0
  112. package/dist/core/Combat.js +294 -0
  113. package/dist/core/Combat.js.map +1 -0
  114. package/dist/core/DungeonRunner.d.ts +169 -0
  115. package/dist/core/DungeonRunner.d.ts.map +1 -0
  116. package/dist/core/DungeonRunner.js +627 -0
  117. package/dist/core/DungeonRunner.js.map +1 -0
  118. package/dist/core/Game.d.ts +133 -0
  119. package/dist/core/Game.d.ts.map +1 -0
  120. package/dist/core/Game.js +644 -0
  121. package/dist/core/Game.js.map +1 -0
  122. package/dist/core/IdleCombat.d.ts +61 -0
  123. package/dist/core/IdleCombat.d.ts.map +1 -0
  124. package/dist/core/IdleCombat.js +461 -0
  125. package/dist/core/IdleCombat.js.map +1 -0
  126. package/dist/core/IdleGameManager.d.ts +198 -0
  127. package/dist/core/IdleGameManager.d.ts.map +1 -0
  128. package/dist/core/IdleGameManager.js +688 -0
  129. package/dist/core/IdleGameManager.js.map +1 -0
  130. package/dist/core/IdleSaveManager.d.ts +109 -0
  131. package/dist/core/IdleSaveManager.d.ts.map +1 -0
  132. package/dist/core/IdleSaveManager.js +296 -0
  133. package/dist/core/IdleSaveManager.js.map +1 -0
  134. package/dist/core/NewGameFlowManager.d.ts +64 -0
  135. package/dist/core/NewGameFlowManager.d.ts.map +1 -0
  136. package/dist/core/NewGameFlowManager.js +153 -0
  137. package/dist/core/NewGameFlowManager.js.map +1 -0
  138. package/dist/core/Player.d.ts +65 -0
  139. package/dist/core/Player.d.ts.map +1 -0
  140. package/dist/core/Player.js +261 -0
  141. package/dist/core/Player.js.map +1 -0
  142. package/dist/core/RoomHandlers.d.ts +75 -0
  143. package/dist/core/RoomHandlers.d.ts.map +1 -0
  144. package/dist/core/RoomHandlers.js +383 -0
  145. package/dist/core/RoomHandlers.js.map +1 -0
  146. package/dist/core/SaveManager.d.ts +84 -0
  147. package/dist/core/SaveManager.d.ts.map +1 -0
  148. package/dist/core/SaveManager.js +281 -0
  149. package/dist/core/SaveManager.js.map +1 -0
  150. package/dist/core/SaveMigration.d.ts +69 -0
  151. package/dist/core/SaveMigration.d.ts.map +1 -0
  152. package/dist/core/SaveMigration.js +408 -0
  153. package/dist/core/SaveMigration.js.map +1 -0
  154. package/dist/core/StateAdapter.d.ts +79 -0
  155. package/dist/core/StateAdapter.d.ts.map +1 -0
  156. package/dist/core/StateAdapter.js +397 -0
  157. package/dist/core/StateAdapter.js.map +1 -0
  158. package/dist/core/Team.d.ts +145 -0
  159. package/dist/core/Team.d.ts.map +1 -0
  160. package/dist/core/Team.js +371 -0
  161. package/dist/core/Team.js.map +1 -0
  162. package/dist/core/TeamCombat.d.ts +88 -0
  163. package/dist/core/TeamCombat.d.ts.map +1 -0
  164. package/dist/core/TeamCombat.js +405 -0
  165. package/dist/core/TeamCombat.js.map +1 -0
  166. package/dist/core/TeamDungeonRunner.d.ts +186 -0
  167. package/dist/core/TeamDungeonRunner.d.ts.map +1 -0
  168. package/dist/core/TeamDungeonRunner.js +758 -0
  169. package/dist/core/TeamDungeonRunner.js.map +1 -0
  170. package/dist/core/TimeManager.d.ts +114 -0
  171. package/dist/core/TimeManager.d.ts.map +1 -0
  172. package/dist/core/TimeManager.js +318 -0
  173. package/dist/core/TimeManager.js.map +1 -0
  174. package/dist/core/index.d.ts +9 -0
  175. package/dist/core/index.d.ts.map +1 -0
  176. package/dist/core/index.js +12 -0
  177. package/dist/core/index.js.map +1 -0
  178. package/dist/core/timeConstants.d.ts +135 -0
  179. package/dist/core/timeConstants.d.ts.map +1 -0
  180. package/dist/core/timeConstants.js +157 -0
  181. package/dist/core/timeConstants.js.map +1 -0
  182. package/dist/core/types.d.ts +780 -0
  183. package/dist/core/types.d.ts.map +1 -0
  184. package/dist/core/types.js +16 -0
  185. package/dist/core/types.js.map +1 -0
  186. package/dist/data/continents/index.d.ts +163 -0
  187. package/dist/data/continents/index.d.ts.map +1 -0
  188. package/dist/data/continents/index.js +31 -0
  189. package/dist/data/continents/index.js.map +1 -0
  190. package/dist/data/continents/verdantia.d.ts +294 -0
  191. package/dist/data/continents/verdantia.d.ts.map +1 -0
  192. package/dist/data/continents/verdantia.js +327 -0
  193. package/dist/data/continents/verdantia.js.map +1 -0
  194. package/dist/handlers/DialogHandler.d.ts +95 -0
  195. package/dist/handlers/DialogHandler.d.ts.map +1 -0
  196. package/dist/handlers/DialogHandler.js +450 -0
  197. package/dist/handlers/DialogHandler.js.map +1 -0
  198. package/dist/handlers/SaveLoadHandler.d.ts +60 -0
  199. package/dist/handlers/SaveLoadHandler.d.ts.map +1 -0
  200. package/dist/handlers/SaveLoadHandler.js +187 -0
  201. package/dist/handlers/SaveLoadHandler.js.map +1 -0
  202. package/dist/handlers/TitleScreenHandler.d.ts +43 -0
  203. package/dist/handlers/TitleScreenHandler.d.ts.map +1 -0
  204. package/dist/handlers/TitleScreenHandler.js +508 -0
  205. package/dist/handlers/TitleScreenHandler.js.map +1 -0
  206. package/dist/handlers/WorkshopHandler.d.ts +75 -0
  207. package/dist/handlers/WorkshopHandler.d.ts.map +1 -0
  208. package/dist/handlers/WorkshopHandler.js +401 -0
  209. package/dist/handlers/WorkshopHandler.js.map +1 -0
  210. package/dist/handlers/index.d.ts +12 -0
  211. package/dist/handlers/index.d.ts.map +1 -0
  212. package/dist/handlers/index.js +14 -0
  213. package/dist/handlers/index.js.map +1 -0
  214. package/dist/handlers/types.d.ts +34 -0
  215. package/dist/handlers/types.d.ts.map +1 -0
  216. package/dist/handlers/types.js +8 -0
  217. package/dist/handlers/types.js.map +1 -0
  218. package/dist/i18n/en.d.ts +3 -0
  219. package/dist/i18n/en.d.ts.map +1 -0
  220. package/dist/i18n/en.js +130 -0
  221. package/dist/i18n/en.js.map +1 -0
  222. package/dist/i18n/index.d.ts +40 -0
  223. package/dist/i18n/index.d.ts.map +1 -0
  224. package/dist/i18n/index.js +105 -0
  225. package/dist/i18n/index.js.map +1 -0
  226. package/dist/i18n/types.d.ts +133 -0
  227. package/dist/i18n/types.d.ts.map +1 -0
  228. package/dist/i18n/types.js +8 -0
  229. package/dist/i18n/types.js.map +1 -0
  230. package/dist/i18n/zh.d.ts +3 -0
  231. package/dist/i18n/zh.d.ts.map +1 -0
  232. package/dist/i18n/zh.js +130 -0
  233. package/dist/i18n/zh.js.map +1 -0
  234. package/dist/instrument.d.ts +8 -0
  235. package/dist/instrument.d.ts.map +1 -0
  236. package/dist/instrument.js +33 -0
  237. package/dist/instrument.js.map +1 -0
  238. package/dist/main-new.d.ts +12 -0
  239. package/dist/main-new.d.ts.map +1 -0
  240. package/dist/main-new.js +32 -0
  241. package/dist/main-new.js.map +1 -0
  242. package/dist/main.d.ts +7 -0
  243. package/dist/main.d.ts.map +1 -0
  244. package/dist/main.js +2816 -0
  245. package/dist/main.js.map +1 -0
  246. package/dist/map/ContinentManager.d.ts +88 -0
  247. package/dist/map/ContinentManager.d.ts.map +1 -0
  248. package/dist/map/ContinentManager.js +241 -0
  249. package/dist/map/ContinentManager.js.map +1 -0
  250. package/dist/map/DungeonGenerator.d.ts +32 -0
  251. package/dist/map/DungeonGenerator.d.ts.map +1 -0
  252. package/dist/map/DungeonGenerator.js +615 -0
  253. package/dist/map/DungeonGenerator.js.map +1 -0
  254. package/dist/map/MapGenerator.d.ts +27 -0
  255. package/dist/map/MapGenerator.d.ts.map +1 -0
  256. package/dist/map/MapGenerator.js +485 -0
  257. package/dist/map/MapGenerator.js.map +1 -0
  258. package/dist/map/index.d.ts +5 -0
  259. package/dist/map/index.d.ts.map +1 -0
  260. package/dist/map/index.js +8 -0
  261. package/dist/map/index.js.map +1 -0
  262. package/dist/npc/NPCGenerator.d.ts +68 -0
  263. package/dist/npc/NPCGenerator.d.ts.map +1 -0
  264. package/dist/npc/NPCGenerator.js +468 -0
  265. package/dist/npc/NPCGenerator.js.map +1 -0
  266. package/dist/npc/NPCManager.d.ts +86 -0
  267. package/dist/npc/NPCManager.d.ts.map +1 -0
  268. package/dist/npc/NPCManager.js +217 -0
  269. package/dist/npc/NPCManager.js.map +1 -0
  270. package/dist/npc/fixedNPCs.d.ts +7 -0
  271. package/dist/npc/fixedNPCs.d.ts.map +1 -0
  272. package/dist/npc/fixedNPCs.js +196 -0
  273. package/dist/npc/fixedNPCs.js.map +1 -0
  274. package/dist/npc/index.d.ts +9 -0
  275. package/dist/npc/index.d.ts.map +1 -0
  276. package/dist/npc/index.js +12 -0
  277. package/dist/npc/index.js.map +1 -0
  278. package/dist/npc/traits.d.ts +33 -0
  279. package/dist/npc/traits.d.ts.map +1 -0
  280. package/dist/npc/traits.js +795 -0
  281. package/dist/npc/traits.js.map +1 -0
  282. package/dist/npc/types.d.ts +193 -0
  283. package/dist/npc/types.d.ts.map +1 -0
  284. package/dist/npc/types.js +9 -0
  285. package/dist/npc/types.js.map +1 -0
  286. package/dist/quest/QuestManager.d.ts +79 -0
  287. package/dist/quest/QuestManager.d.ts.map +1 -0
  288. package/dist/quest/QuestManager.js +273 -0
  289. package/dist/quest/QuestManager.js.map +1 -0
  290. package/dist/quest/index.d.ts +6 -0
  291. package/dist/quest/index.d.ts.map +1 -0
  292. package/dist/quest/index.js +9 -0
  293. package/dist/quest/index.js.map +1 -0
  294. package/dist/quest/types.d.ts +81 -0
  295. package/dist/quest/types.d.ts.map +1 -0
  296. package/dist/quest/types.js +8 -0
  297. package/dist/quest/types.js.map +1 -0
  298. package/dist/strategy/StrategyExecutor.d.ts +159 -0
  299. package/dist/strategy/StrategyExecutor.d.ts.map +1 -0
  300. package/dist/strategy/StrategyExecutor.js +479 -0
  301. package/dist/strategy/StrategyExecutor.js.map +1 -0
  302. package/dist/strategy/StrategyParser.d.ts +48 -0
  303. package/dist/strategy/StrategyParser.d.ts.map +1 -0
  304. package/dist/strategy/StrategyParser.js +321 -0
  305. package/dist/strategy/StrategyParser.js.map +1 -0
  306. package/dist/strategy/defaultStrategy.d.ts +40 -0
  307. package/dist/strategy/defaultStrategy.d.ts.map +1 -0
  308. package/dist/strategy/defaultStrategy.js +254 -0
  309. package/dist/strategy/defaultStrategy.js.map +1 -0
  310. package/dist/strategy/index.d.ts +8 -0
  311. package/dist/strategy/index.d.ts.map +1 -0
  312. package/dist/strategy/index.js +14 -0
  313. package/dist/strategy/index.js.map +1 -0
  314. package/dist/tui/ExploreMenu.d.ts +106 -0
  315. package/dist/tui/ExploreMenu.d.ts.map +1 -0
  316. package/dist/tui/ExploreMenu.js +282 -0
  317. package/dist/tui/ExploreMenu.js.map +1 -0
  318. package/dist/tui/GameUI.d.ts +313 -0
  319. package/dist/tui/GameUI.d.ts.map +1 -0
  320. package/dist/tui/GameUI.js +2116 -0
  321. package/dist/tui/GameUI.js.map +1 -0
  322. package/dist/tui/GameUIAdapter.d.ts +207 -0
  323. package/dist/tui/GameUIAdapter.d.ts.map +1 -0
  324. package/dist/tui/GameUIAdapter.js +1342 -0
  325. package/dist/tui/GameUIAdapter.js.map +1 -0
  326. package/dist/tui/Input.d.ts +139 -0
  327. package/dist/tui/Input.d.ts.map +1 -0
  328. package/dist/tui/Input.js +278 -0
  329. package/dist/tui/Input.js.map +1 -0
  330. package/dist/tui/Menu.d.ts +110 -0
  331. package/dist/tui/Menu.d.ts.map +1 -0
  332. package/dist/tui/Menu.js +365 -0
  333. package/dist/tui/Menu.js.map +1 -0
  334. package/dist/tui/Screen.d.ts +228 -0
  335. package/dist/tui/Screen.d.ts.map +1 -0
  336. package/dist/tui/Screen.js +502 -0
  337. package/dist/tui/Screen.js.map +1 -0
  338. package/dist/tui/components/Box.d.ts +36 -0
  339. package/dist/tui/components/Box.d.ts.map +1 -0
  340. package/dist/tui/components/Box.js +43 -0
  341. package/dist/tui/components/Box.js.map +1 -0
  342. package/dist/tui/components/List.d.ts +69 -0
  343. package/dist/tui/components/List.d.ts.map +1 -0
  344. package/dist/tui/components/List.js +136 -0
  345. package/dist/tui/components/List.js.map +1 -0
  346. package/dist/tui/components/ProgressBar.d.ts +42 -0
  347. package/dist/tui/components/ProgressBar.d.ts.map +1 -0
  348. package/dist/tui/components/ProgressBar.js +75 -0
  349. package/dist/tui/components/ProgressBar.js.map +1 -0
  350. package/dist/tui/components/index.d.ts +8 -0
  351. package/dist/tui/components/index.d.ts.map +1 -0
  352. package/dist/tui/components/index.js +11 -0
  353. package/dist/tui/components/index.js.map +1 -0
  354. package/dist/tui/core/BaseSection.d.ts +98 -0
  355. package/dist/tui/core/BaseSection.d.ts.map +1 -0
  356. package/dist/tui/core/BaseSection.js +174 -0
  357. package/dist/tui/core/BaseSection.js.map +1 -0
  358. package/dist/tui/core/Component.d.ts +61 -0
  359. package/dist/tui/core/Component.d.ts.map +1 -0
  360. package/dist/tui/core/Component.js +32 -0
  361. package/dist/tui/core/Component.js.map +1 -0
  362. package/dist/tui/core/Section.d.ts +101 -0
  363. package/dist/tui/core/Section.d.ts.map +1 -0
  364. package/dist/tui/core/Section.js +24 -0
  365. package/dist/tui/core/Section.js.map +1 -0
  366. package/dist/tui/core/SectionManager.d.ts +108 -0
  367. package/dist/tui/core/SectionManager.d.ts.map +1 -0
  368. package/dist/tui/core/SectionManager.js +258 -0
  369. package/dist/tui/core/SectionManager.js.map +1 -0
  370. package/dist/tui/core/index.d.ts +9 -0
  371. package/dist/tui/core/index.d.ts.map +1 -0
  372. package/dist/tui/core/index.js +12 -0
  373. package/dist/tui/core/index.js.map +1 -0
  374. package/dist/tui/index.d.ts +15 -0
  375. package/dist/tui/index.d.ts.map +1 -0
  376. package/dist/tui/index.js +23 -0
  377. package/dist/tui/index.js.map +1 -0
  378. package/dist/tui/screens/BaseScreen.d.ts +62 -0
  379. package/dist/tui/screens/BaseScreen.d.ts.map +1 -0
  380. package/dist/tui/screens/BaseScreen.js +55 -0
  381. package/dist/tui/screens/BaseScreen.js.map +1 -0
  382. package/dist/tui/screens/CombatScreen.d.ts +43 -0
  383. package/dist/tui/screens/CombatScreen.d.ts.map +1 -0
  384. package/dist/tui/screens/CombatScreen.js +125 -0
  385. package/dist/tui/screens/CombatScreen.js.map +1 -0
  386. package/dist/tui/screens/DialogScreen.d.ts +53 -0
  387. package/dist/tui/screens/DialogScreen.d.ts.map +1 -0
  388. package/dist/tui/screens/DialogScreen.js +90 -0
  389. package/dist/tui/screens/DialogScreen.js.map +1 -0
  390. package/dist/tui/screens/DungeonScreen.d.ts +80 -0
  391. package/dist/tui/screens/DungeonScreen.d.ts.map +1 -0
  392. package/dist/tui/screens/DungeonScreen.js +317 -0
  393. package/dist/tui/screens/DungeonScreen.js.map +1 -0
  394. package/dist/tui/screens/ExploreScreen.d.ts +69 -0
  395. package/dist/tui/screens/ExploreScreen.d.ts.map +1 -0
  396. package/dist/tui/screens/ExploreScreen.js +224 -0
  397. package/dist/tui/screens/ExploreScreen.js.map +1 -0
  398. package/dist/tui/screens/SectionScreen.d.ts +84 -0
  399. package/dist/tui/screens/SectionScreen.d.ts.map +1 -0
  400. package/dist/tui/screens/SectionScreen.js +156 -0
  401. package/dist/tui/screens/SectionScreen.js.map +1 -0
  402. package/dist/tui/screens/TitleScreen.d.ts +40 -0
  403. package/dist/tui/screens/TitleScreen.d.ts.map +1 -0
  404. package/dist/tui/screens/TitleScreen.js +253 -0
  405. package/dist/tui/screens/TitleScreen.js.map +1 -0
  406. package/dist/tui/screens/TownScreen.d.ts +98 -0
  407. package/dist/tui/screens/TownScreen.d.ts.map +1 -0
  408. package/dist/tui/screens/TownScreen.js +370 -0
  409. package/dist/tui/screens/TownScreen.js.map +1 -0
  410. package/dist/tui/screens/TravelScreen.d.ts +67 -0
  411. package/dist/tui/screens/TravelScreen.d.ts.map +1 -0
  412. package/dist/tui/screens/TravelScreen.js +286 -0
  413. package/dist/tui/screens/TravelScreen.js.map +1 -0
  414. package/dist/tui/screens/index.d.ts +8 -0
  415. package/dist/tui/screens/index.d.ts.map +1 -0
  416. package/dist/tui/screens/index.js +17 -0
  417. package/dist/tui/screens/index.js.map +1 -0
  418. package/dist/tui/sections/ActionsSection.d.ts +71 -0
  419. package/dist/tui/sections/ActionsSection.d.ts.map +1 -0
  420. package/dist/tui/sections/ActionsSection.js +184 -0
  421. package/dist/tui/sections/ActionsSection.js.map +1 -0
  422. package/dist/tui/sections/DungeonSection.d.ts +65 -0
  423. package/dist/tui/sections/DungeonSection.d.ts.map +1 -0
  424. package/dist/tui/sections/DungeonSection.js +144 -0
  425. package/dist/tui/sections/DungeonSection.js.map +1 -0
  426. package/dist/tui/sections/EventsSection.d.ts +50 -0
  427. package/dist/tui/sections/EventsSection.d.ts.map +1 -0
  428. package/dist/tui/sections/EventsSection.js +134 -0
  429. package/dist/tui/sections/EventsSection.js.map +1 -0
  430. package/dist/tui/sections/MapSection.d.ts +66 -0
  431. package/dist/tui/sections/MapSection.d.ts.map +1 -0
  432. package/dist/tui/sections/MapSection.js +669 -0
  433. package/dist/tui/sections/MapSection.js.map +1 -0
  434. package/dist/tui/sections/StatusSection.d.ts +47 -0
  435. package/dist/tui/sections/StatusSection.d.ts.map +1 -0
  436. package/dist/tui/sections/StatusSection.js +133 -0
  437. package/dist/tui/sections/StatusSection.js.map +1 -0
  438. package/dist/tui/sections/TeamSection.d.ts +71 -0
  439. package/dist/tui/sections/TeamSection.d.ts.map +1 -0
  440. package/dist/tui/sections/TeamSection.js +224 -0
  441. package/dist/tui/sections/TeamSection.js.map +1 -0
  442. package/dist/tui/sections/TravelingSection.d.ts +51 -0
  443. package/dist/tui/sections/TravelingSection.d.ts.map +1 -0
  444. package/dist/tui/sections/TravelingSection.js +106 -0
  445. package/dist/tui/sections/TravelingSection.js.map +1 -0
  446. package/dist/tui/sections/index.d.ts +9 -0
  447. package/dist/tui/sections/index.d.ts.map +1 -0
  448. package/dist/tui/sections/index.js +12 -0
  449. package/dist/tui/sections/index.js.map +1 -0
  450. package/dist/ui/Terminal.d.ts +68 -0
  451. package/dist/ui/Terminal.d.ts.map +1 -0
  452. package/dist/ui/Terminal.js +297 -0
  453. package/dist/ui/Terminal.js.map +1 -0
  454. package/dist/ui/index.d.ts +5 -0
  455. package/dist/ui/index.d.ts.map +1 -0
  456. package/dist/ui/index.js +8 -0
  457. package/dist/ui/index.js.map +1 -0
  458. package/dist/utils/configMigration.d.ts +14 -0
  459. package/dist/utils/configMigration.d.ts.map +1 -0
  460. package/dist/utils/configMigration.js +92 -0
  461. package/dist/utils/configMigration.js.map +1 -0
  462. package/dist/utils/errorHandler.d.ts +86 -0
  463. package/dist/utils/errorHandler.d.ts.map +1 -0
  464. package/dist/utils/errorHandler.js +224 -0
  465. package/dist/utils/errorHandler.js.map +1 -0
  466. package/dist/utils/logger.d.ts +14 -0
  467. package/dist/utils/logger.d.ts.map +1 -0
  468. package/dist/utils/logger.js +43 -0
  469. package/dist/utils/logger.js.map +1 -0
  470. package/dist/weapon/WeaponFactory.d.ts +32 -0
  471. package/dist/weapon/WeaponFactory.d.ts.map +1 -0
  472. package/dist/weapon/WeaponFactory.js +216 -0
  473. package/dist/weapon/WeaponFactory.js.map +1 -0
  474. package/dist/weapon/index.d.ts +5 -0
  475. package/dist/weapon/index.d.ts.map +1 -0
  476. package/dist/weapon/index.js +8 -0
  477. package/dist/weapon/index.js.map +1 -0
  478. package/package.json +46 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GameUIAdapter.js","sources":["tui/GameUIAdapter.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Game UI Adapter - Unified UI interface using section-based architecture\r\n * This replaces the monolithic GameUI.ts with a clean adapter pattern\r\n */\r\n\r\nimport { Screen, getScreen, ANSI, PROGRESS, MAP_SYMBOLS } from './Screen.js';\r\nimport { InputManager, getInput, KeyEvent } from './Input.js';\r\nimport type { GameState, Player, Room, CombatState, Enemy } from '../core/types.js';\r\nimport type { ExtendedNPC } from '../npc/types.js';\r\nimport type { Quest } from '../quest/types.js';\r\nimport { getStrings } from '../i18n/index.js';\r\n\r\n// Section-based architecture\r\nimport { SectionManager, createGridLayout } from './core/SectionManager.js';\r\nimport { MapSection } from './sections/MapSection.js';\r\nimport { StatusSection } from './sections/StatusSection.js';\r\nimport { ActionsSection } from './sections/ActionsSection.js';\r\nimport { EventsSection } from './sections/EventsSection.js';\r\nimport { TravelingSection, type TravelingData } from './sections/TravelingSection.js';\r\nimport { DungeonSection, type DungeonData } from './sections/DungeonSection.js';\r\nimport type { Rect, RenderContext } from './core/Component.js';\r\n\r\n/**\r\n * UI Mode\r\n */\r\nexport type UIMode =\r\n | 'explore'\r\n | 'travel'\r\n | 'combat'\r\n | 'dialog'\r\n | 'menu'\r\n | 'inventory'\r\n | 'quest'\r\n | 'workshop';\r\n\r\n/**\r\n * Dialog option\r\n */\r\nexport interface DialogOption {\r\n key: string;\r\n text: string;\r\n action: string;\r\n}\r\n\r\n/**\r\n * Game UI Adapter - Clean interface using section-based architecture\r\n */\r\nexport class GameUI {\r\n private readonly PADDING = 2;\r\n\r\n private screen: Screen;\r\n private input: InputManager;\r\n private mode: UIMode = 'explore';\r\n private refreshInterval: NodeJS.Timeout | null = null;\r\n\r\n // Section management\r\n private sectionManager: SectionManager;\r\n private mapSection: MapSection;\r\n private statusSection: StatusSection;\r\n private actionsSection: ActionsSection;\r\n private eventsSection: EventsSection;\r\n private travelingSection: TravelingSection;\r\n private dungeonSection: DungeonSection;\r\n\r\n // Mode state\r\n private isTravelMode: boolean = false;\r\n private isDungeonMode: boolean = false;\r\n\r\n // Cached state\r\n private cachedState: GameState | null = null;\r\n private cachedNPCs: ExtendedNPC[] = [];\r\n private cachedQuests: Quest[] = [];\r\n\r\n // Dialog state\r\n private dialogNPC: ExtendedNPC | null = null;\r\n private dialogHistory: Array<{ role: string; text: string }> = [];\r\n private dialogOptions: DialogOption[] = [];\r\n private isWaitingForAI: boolean = false;\r\n\r\n // Callbacks\r\n private onCommand: ((cmd: string) => void) | null = null;\r\n private onDialogInput: ((text: string) => void) | null = null;\r\n private onCharacterEdit: ((field: string, value: string) => void) | null = null;\r\n\r\n // Modal state\r\n private activeModal: 'inventory' | 'character' | 'quests' | 'workshop' | 'menu' | null = null;\r\n private modalSelectedIndex: number = 0;\r\n private modalScrollOffset: number = 0;\r\n\r\n // Inventory modal state\r\n private inventoryTab: number = 0;\r\n private readonly INVENTORY_TABS = ['All', 'Weapons', 'Armor', 'Consumables', 'Materials'];\r\n\r\n // Character modal state\r\n private characterEditMode: boolean = false;\r\n private characterEditField: string = '';\r\n private characterEditBuffer: string = '';\r\n private characterExternalEditMode: boolean = false; // 是否在等待外部编辑器确认\r\n private characterExternalEditTempFile: string = ''; // 临时文件路径\r\n\r\n // Size warning\r\n private showingSizeWarning: boolean = false;\r\n\r\n constructor() {\r\n this.screen = getScreen();\r\n this.input = getInput();\r\n\r\n // Initialize section-based architecture\r\n this.sectionManager = new SectionManager();\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 this.travelingSection = new TravelingSection();\r\n this.dungeonSection = new DungeonSection();\r\n\r\n // Register sections\r\n this.sectionManager.register(this.mapSection);\r\n this.sectionManager.register(this.statusSection);\r\n this.sectionManager.register(this.actionsSection);\r\n this.sectionManager.register(this.eventsSection);\r\n\r\n // Set up layout - Map on left (full height), Actions/Status on right\r\n const layout = createGridLayout([\r\n ['map', 'actions'],\r\n ['map', 'status'],\r\n ['events', 'events'],\r\n ]);\r\n this.sectionManager.setLayout(layout);\r\n this.sectionManager.setDefaultFocus('map');\r\n\r\n // Set up section callbacks\r\n this.setupSectionCallbacks();\r\n }\r\n\r\n private setupSectionCallbacks(): void {\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.openModal(modal);\r\n });\r\n }\r\n\r\n /**\r\n * Initialize UI\r\n *\r\n * Pushes the main key handler onto the input focus stack.\r\n * This handler will be at the bottom of the stack and will receive\r\n * input when no full-screen overlays are active.\r\n */\r\n async initialize(): Promise<void> {\r\n this.screen.hideCursor();\r\n this.input.start();\r\n\r\n // Push main UI handler onto focus stack (base handler)\r\n this.input.pushFocus((key) => this.handleKeypress(key));\r\n this.input.onLine((line) => this.handleLine(line));\r\n this.screen.onResize((w, h) => this.handleResize(w, h));\r\n\r\n this.sectionManager.focusDefault();\r\n this.setMode('explore');\r\n }\r\n\r\n /**\r\n * Cleanup\r\n */\r\n cleanup(): void {\r\n this.stopRefresh();\r\n this.input.stop();\r\n this.screen.cleanup();\r\n }\r\n\r\n /**\r\n * Set UI mode\r\n */\r\n setMode(mode: UIMode): void {\r\n this.mode = mode;\r\n\r\n if (mode === 'travel' || mode === 'combat') {\r\n this.startRefresh(100);\r\n } else if (mode === 'explore' || mode === 'dialog') {\r\n this.startRefresh(200);\r\n } else {\r\n this.stopRefresh();\r\n }\r\n\r\n if (mode === 'dialog') {\r\n this.input.setMode('line');\r\n } else {\r\n this.input.setMode('raw');\r\n }\r\n }\r\n\r\n /**\r\n * Add event to log\r\n */\r\n addEventLog(message: string): void {\r\n this.eventsSection.addEvent(message);\r\n }\r\n\r\n /**\r\n * Enter travel mode - replaces ActionsSection with TravelingSection\r\n */\r\n enterTravelMode(): void {\r\n if (this.isTravelMode) return;\r\n\r\n this.sectionManager.unregister('actions');\r\n this.sectionManager.register(this.travelingSection);\r\n\r\n // Update layout to use 'traveling' instead of 'actions'\r\n const travelLayout = createGridLayout([\r\n ['map', 'traveling'],\r\n ['map', 'status'],\r\n ['events', 'events'],\r\n ]);\r\n this.sectionManager.setLayout(travelLayout);\r\n\r\n this.isTravelMode = true;\r\n }\r\n\r\n /**\r\n * Exit travel mode - restores ActionsSection\r\n */\r\n exitTravelMode(): void {\r\n if (!this.isTravelMode) return;\r\n\r\n this.sectionManager.unregister('traveling');\r\n this.sectionManager.register(this.actionsSection);\r\n\r\n // Restore original layout with 'actions'\r\n const normalLayout = createGridLayout([\r\n ['map', 'actions'],\r\n ['map', 'status'],\r\n ['events', 'events'],\r\n ]);\r\n this.sectionManager.setLayout(normalLayout);\r\n\r\n this.isTravelMode = false;\r\n }\r\n\r\n /**\r\n * Update travel state for both TravelingSection and MapSection\r\n */\r\n updateTravelState(data: {\r\n fromRoomId: string;\r\n toRoomId: string;\r\n fromName: string;\r\n toName: string;\r\n progress: number;\r\n duration: number;\r\n events: string[];\r\n phase: 'traveling_to_dungeon' | 'returning_to_town';\r\n }): void {\r\n // Update TravelingSection\r\n this.travelingSection.update({\r\n fromName: data.fromName,\r\n toName: data.toName,\r\n progress: data.progress,\r\n duration: data.duration,\r\n events: data.events,\r\n phase: data.phase,\r\n });\r\n\r\n // Update MapSection travel state (for showing moving icon)\r\n this.mapSection.setTravelState({\r\n fromRoomId: data.fromRoomId,\r\n toRoomId: data.toRoomId,\r\n progress: data.progress,\r\n });\r\n }\r\n\r\n /**\r\n * Clear travel state from MapSection\r\n */\r\n clearTravelState(): void {\r\n this.mapSection.setTravelState(null);\r\n }\r\n\r\n /**\r\n * Set cancel travel callback\r\n */\r\n setOnCancelTravel(callback: () => void): void {\r\n this.travelingSection.setOnCancelTravel(callback);\r\n }\r\n\r\n /**\r\n * Enter dungeon mode - replaces ActionsSection with DungeonSection\r\n * Layout changes to horizontal: Map | Dungeon | Status\r\n */\r\n enterDungeonMode(): void {\r\n if (this.isDungeonMode) return;\r\n\r\n // Exit travel mode first if active\r\n if (this.isTravelMode) {\r\n this.exitTravelMode();\r\n }\r\n\r\n this.sectionManager.unregister('actions');\r\n this.sectionManager.register(this.dungeonSection);\r\n\r\n // Update layout for dungeon mode - horizontal arrangement\r\n // Map takes left side, Dungeon and Status share right side horizontally\r\n const dungeonLayout = createGridLayout([\r\n ['map', 'dungeon', 'status'],\r\n ['events', 'events', 'events'],\r\n ]);\r\n this.sectionManager.setLayout(dungeonLayout);\r\n\r\n this.isDungeonMode = true;\r\n }\r\n\r\n /**\r\n * Exit dungeon mode - restores ActionsSection\r\n */\r\n exitDungeonMode(): void {\r\n if (!this.isDungeonMode) return;\r\n\r\n this.sectionManager.unregister('dungeon');\r\n this.sectionManager.register(this.actionsSection);\r\n\r\n // Restore normal layout\r\n const normalLayout = createGridLayout([\r\n ['map', 'actions'],\r\n ['map', 'status'],\r\n ['events', 'events'],\r\n ]);\r\n this.sectionManager.setLayout(normalLayout);\r\n\r\n this.isDungeonMode = false;\r\n }\r\n\r\n /**\r\n * Update dungeon progress data\r\n */\r\n updateDungeonData(data: DungeonData): void {\r\n this.dungeonSection.update(data);\r\n }\r\n\r\n /**\r\n * Set abort dungeon callback\r\n */\r\n setOnAbortDungeon(callback: () => void): void {\r\n this.dungeonSection.setOnAbort(callback);\r\n }\r\n\r\n /**\r\n * Register command handler\r\n */\r\n onCommandInput(handler: (cmd: string) => void): void {\r\n this.onCommand = handler;\r\n }\r\n\r\n /**\r\n * Register dialog input handler\r\n */\r\n onDialogInputHandler(handler: (text: string) => void): void {\r\n this.onDialogInput = handler;\r\n }\r\n\r\n /**\r\n * Register character edit handler\r\n */\r\n onCharacterEditHandler(handler: (field: string, value: string) => void): void {\r\n this.onCharacterEdit = handler;\r\n }\r\n\r\n // =========================================================================\r\n // RENDERING\r\n // =========================================================================\r\n\r\n /**\r\n * Render main exploration screen\r\n */\r\n renderMainScreen(state: GameState, npcsInRoom: ExtendedNPC[] = [], activeQuests: Quest[] = []): void {\r\n this.cachedState = state;\r\n this.cachedNPCs = npcsInRoom;\r\n this.cachedQuests = activeQuests;\r\n\r\n if (this.activeModal) return;\r\n\r\n const { width: screenWidth, height: screenHeight } = this.screen.getSize();\r\n this.screen.clear();\r\n\r\n const px = this.PADDING;\r\n const py = this.PADDING;\r\n const width = screenWidth - this.PADDING * 2;\r\n const height = screenHeight - this.PADDING * 2;\r\n\r\n // Layout\r\n const headerHeight = 3;\r\n const eventsHeight = Math.min(8, Math.floor(height * 0.25));\r\n const mainAreaHeight = height - headerHeight - eventsHeight - 2;\r\n\r\n // Render header\r\n this.renderHeader(state.player, width, px, py);\r\n\r\n // Update sections\r\n this.mapSection.update(state);\r\n this.statusSection.update({ state, npcs: npcsInRoom, quests: activeQuests });\r\n this.actionsSection.update({ npcs: npcsInRoom, quests: activeQuests });\r\n\r\n // Calculate bounds based on current mode\r\n const boundsMap = new Map<string, Rect>();\r\n\r\n if (this.isDungeonMode) {\r\n // Dungeon mode: horizontal layout - Map | Dungeon | Status\r\n const mapWidth = Math.floor(width * 0.5);\r\n const dungeonWidth = Math.floor(width * 0.25);\r\n const statusWidth = width - mapWidth - dungeonWidth;\r\n\r\n boundsMap.set('map', { x: px, y: py + headerHeight, width: mapWidth, height: mainAreaHeight });\r\n boundsMap.set('dungeon', { x: px + mapWidth, y: py + headerHeight, width: dungeonWidth, height: mainAreaHeight });\r\n boundsMap.set('status', { x: px + mapWidth + dungeonWidth, y: py + headerHeight, width: statusWidth, height: mainAreaHeight });\r\n } else {\r\n // Normal mode: Map on left, Actions/Status on right (vertical)\r\n const menuWidth = Math.min(28, Math.floor(width * 0.28));\r\n const leftWidth = width - menuWidth - 1;\r\n const actionsHeight = Math.floor(mainAreaHeight * 0.6);\r\n const statusHeight = mainAreaHeight - actionsHeight;\r\n\r\n boundsMap.set('map', { x: px, y: py + headerHeight, width: leftWidth, height: mainAreaHeight });\r\n\r\n // Use traveling section bounds when in travel mode, otherwise actions\r\n if (this.isTravelMode) {\r\n boundsMap.set('traveling', { x: px + leftWidth, y: py + headerHeight, width: menuWidth + 1, height: actionsHeight });\r\n } else {\r\n boundsMap.set('actions', { x: px + leftWidth, y: py + headerHeight, width: menuWidth + 1, height: actionsHeight });\r\n }\r\n boundsMap.set('status', { x: px + leftWidth, y: py + headerHeight + actionsHeight, width: menuWidth + 1, height: statusHeight });\r\n }\r\n\r\n boundsMap.set('events', { x: px, y: py + headerHeight + mainAreaHeight, width, height: eventsHeight });\r\n\r\n // Render sections\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 section.render({ screen: this.screen, bounds });\r\n }\r\n }\r\n\r\n // Hint bar\r\n this.renderHintBar(px + 1, py + height - 1, width - 2);\r\n\r\n this.screen.render();\r\n }\r\n\r\n /**\r\n * Render travel screen\r\n */\r\n renderTravelScreen(\r\n state: GameState,\r\n fromRoom: Room | null,\r\n toRoom: Room | null,\r\n progress: number,\r\n duration: number,\r\n events: string[]\r\n ): void {\r\n const { width: screenWidth, height: screenHeight } = this.screen.getSize();\r\n this.screen.clear();\r\n\r\n const px = this.PADDING;\r\n const py = this.PADDING;\r\n const width = screenWidth - this.PADDING * 2;\r\n const height = screenHeight - this.PADDING * 2;\r\n\r\n // Header\r\n this.renderHeader(state.player, width, px, py);\r\n\r\n // Travel info\r\n const contentY = py + 4;\r\n const dots = '.'.repeat(Math.floor(Date.now() / 300) % 4);\r\n this.screen.drawBox(px, contentY, width, height - 5, `Traveling${dots}`);\r\n\r\n const centerX = px + Math.floor(width / 2);\r\n const centerY = contentY + Math.floor((height - 7) / 2);\r\n\r\n // From/To\r\n const fromName = fromRoom?.name || 'Unknown';\r\n const toName = toRoom?.name || 'Unknown';\r\n\r\n this.screen.write(centerX - 15, centerY - 2, `From: ${fromName}`, ANSI.fg.gray);\r\n this.screen.write(centerX - 15, centerY, `To: ${toName}`, ANSI.fg.yellow);\r\n\r\n // Progress bar\r\n const barWidth = 30;\r\n const barX = centerX - Math.floor(barWidth / 2);\r\n this.screen.drawProgressBar(barX, centerY + 2, barWidth, progress, 1);\r\n\r\n const pct = Math.floor(progress * 100);\r\n this.screen.write(centerX - 5, centerY + 3, `${pct}% complete`, ANSI.fg.cyan);\r\n\r\n // Time remaining\r\n const remaining = Math.ceil(duration * (1 - progress));\r\n this.screen.write(centerX - 8, centerY + 5, `${remaining}s remaining`, ANSI.fg.gray);\r\n\r\n // Events\r\n if (events.length > 0) {\r\n const eventY = contentY + height - 8;\r\n this.screen.write(px + 2, eventY, '- Events -', ANSI.fg.cyan);\r\n events.slice(-3).forEach((ev, i) => {\r\n this.screen.write(px + 2, eventY + 1 + i, `* ${ev}`.slice(0, width - 4), ANSI.fg.white);\r\n });\r\n }\r\n\r\n // Hint\r\n this.screen.write(px + 2, py + height - 1, '[ESC] Cancel Travel', ANSI.fg.yellow);\r\n\r\n this.screen.render();\r\n }\r\n\r\n /**\r\n * Render combat screen\r\n */\r\n renderCombatScreen(combat: CombatState, player: Player): void {\r\n const { width: screenWidth, height: screenHeight } = this.screen.getSize();\r\n this.screen.clear();\r\n\r\n const px = this.PADDING;\r\n const py = this.PADDING;\r\n const width = screenWidth - this.PADDING * 2;\r\n const height = screenHeight - this.PADDING * 2;\r\n\r\n // Header\r\n this.renderHeader(player, width, px, py);\r\n\r\n // Combat box\r\n this.screen.drawBox(px, py + 3, width, height - 4, '⚔ COMBAT ⚔');\r\n\r\n const contentY = py + 5;\r\n const centerX = px + Math.floor(width / 2);\r\n\r\n // Turn info\r\n this.screen.write(centerX - 5, contentY, `Turn: ${combat.turn}`, ANSI.fg.yellow);\r\n\r\n // Enemy info\r\n const enemyY = contentY + 2;\r\n this.screen.write(px + 4, enemyY, '-- Enemies --', ANSI.fg.red, undefined, ANSI.bold);\r\n\r\n combat.enemies.forEach((enemy, i) => {\r\n const hp = enemy.hp;\r\n const maxHp = enemy.maxHp;\r\n const hpPct = hp / maxHp;\r\n const status = hp <= 0 ? ' [DEAD]' : '';\r\n const color = hp <= 0 ? ANSI.fg.gray : ANSI.fg.white;\r\n\r\n this.screen.write(px + 4, enemyY + 1 + i, `${enemy.name}${status}`, color);\r\n if (hp > 0) {\r\n this.screen.drawProgressBar(px + 20, enemyY + 1 + i, 15, hp, maxHp, ANSI.fg.red);\r\n this.screen.write(px + 36, enemyY + 1 + i, `${hp}/${maxHp}`, ANSI.fg.white);\r\n }\r\n });\r\n\r\n // Player stats\r\n const playerY = enemyY + combat.enemies.length + 3;\r\n this.screen.write(px + 4, playerY, '-- Your Stats --', ANSI.fg.green, undefined, ANSI.bold);\r\n this.screen.write(px + 4, playerY + 1, `HP: ${player.stats.hp}/${player.stats.maxHp}`, ANSI.fg.white);\r\n this.screen.write(px + 4, playerY + 2, `ATK: ${player.stats.attack} DEF: ${player.stats.defense}`, ANSI.fg.white);\r\n\r\n // Combat log\r\n const logY = playerY + 5;\r\n this.screen.write(px + 4, logY, '-- Combat Log --', ANSI.fg.cyan, undefined, ANSI.bold);\r\n\r\n // Hint\r\n this.screen.write(px + 2, py + height - 1, 'Combat is automatic... | 1:Aggressive 2:Defensive 3:Balanced', ANSI.fg.gray);\r\n\r\n this.screen.render();\r\n }\r\n\r\n /**\r\n * Render dialog screen\r\n */\r\n renderDialogScreen(\r\n npc: ExtendedNPC,\r\n history: Array<{ role: string; text: string }>,\r\n options: DialogOption[],\r\n waiting: boolean\r\n ): void {\r\n this.dialogNPC = npc;\r\n this.dialogHistory = history;\r\n this.dialogOptions = options;\r\n this.isWaitingForAI = waiting;\r\n\r\n const { width: screenWidth, height: screenHeight } = this.screen.getSize();\r\n this.screen.clear();\r\n\r\n const px = this.PADDING;\r\n const py = this.PADDING;\r\n const width = screenWidth - this.PADDING * 2;\r\n const height = screenHeight - this.PADDING * 2;\r\n\r\n // Dialog box\r\n this.screen.drawBox(px, py, width, height, `Dialog: ${npc.name}`);\r\n\r\n // NPC info\r\n const infoY = py + 2;\r\n this.screen.write(px + 2, infoY, `${npc.name} (${npc.role})`, ANSI.fg.yellow, undefined, ANSI.bold);\r\n\r\n const rel = npc.playerRelationship;\r\n const relText = rel > 50 ? 'Friendly' : rel > 0 ? 'Neutral+' : rel > -50 ? 'Neutral' : 'Unfriendly';\r\n this.screen.write(px + 2, infoY + 1, `Relationship: ${relText}`, ANSI.fg.gray);\r\n\r\n // Dialog history\r\n const historyY = infoY + 3;\r\n const maxHistoryLines = height - 12;\r\n const recentHistory = history.slice(-maxHistoryLines);\r\n\r\n recentHistory.forEach((entry, i) => {\r\n const prefix = entry.role === 'player' ? 'You: ' : `${npc.name}: `;\r\n const color = entry.role === 'player' ? ANSI.fg.cyan : ANSI.fg.white;\r\n const text = `${prefix}${entry.text}`.slice(0, width - 4);\r\n this.screen.write(px + 2, historyY + i, text, color);\r\n });\r\n\r\n // Waiting indicator\r\n if (waiting) {\r\n const dots = '.'.repeat(Math.floor(Date.now() / 300) % 4);\r\n this.screen.write(px + 2, historyY + recentHistory.length + 1, `${npc.name} is thinking${dots}`, ANSI.fg.yellow);\r\n }\r\n\r\n // Quick options\r\n const optionsY = py + height - 5;\r\n this.screen.write(px + 2, optionsY, '-- Quick Options --', ANSI.fg.gray);\r\n options.forEach((opt, i) => {\r\n this.screen.write(px + 2, optionsY + 1 + i, `[${opt.key}] ${opt.text}`, ANSI.fg.white);\r\n });\r\n\r\n // Input hint\r\n const inputY = py + height - 1;\r\n const inputBuffer = this.input.getInputBuffer();\r\n this.screen.write(px + 2, inputY, `> ${inputBuffer}▌`, ANSI.fg.white);\r\n\r\n this.screen.render();\r\n }\r\n\r\n // =========================================================================\r\n // PRIVATE HELPERS\r\n // =========================================================================\r\n\r\n private renderHeader(player: Player, width: number, x: number, y: number): void {\r\n const s = getStrings();\r\n this.screen.drawBox(x, y, width, 3, '', true);\r\n this.screen.write(x + 2, y + 1, 'IDLERPG.TERMINAL', ANSI.fg.cyan, undefined, ANSI.bold);\r\n\r\n const playerInfo = `${s.status.level}.${player.stats.level} ${player.name}`;\r\n this.screen.write(x + 25, y + 1, playerInfo, ANSI.fg.yellow);\r\n\r\n this.screen.write(x + 45, y + 1, `${s.status.hp}:`, ANSI.fg.white);\r\n this.screen.drawProgressBar(x + 49, y + 1, 10, player.stats.hp, player.stats.maxHp, ANSI.fg.red);\r\n this.screen.write(x + 60, y + 1, `${player.stats.hp}/${player.stats.maxHp}`, ANSI.fg.white);\r\n\r\n const time = new Date().toLocaleTimeString('en-US', { hour12: false });\r\n this.screen.write(x + width - time.length - 2, y + 1, time, ANSI.fg.gray);\r\n }\r\n\r\n private renderHintBar(x: number, y: number, width: number): void {\r\n const isAnyEntered = this.sectionManager.isAnyEntered();\r\n let hints: string;\r\n\r\n if (isAnyEntered) {\r\n hints = this.sectionManager.getCurrentHint() || 'Up/Down: navigate Enter: select Esc: exit';\r\n } else {\r\n hints = 'Arrows: focus Enter: enter | 1-9: Travel I C Q W [M]enu';\r\n }\r\n\r\n this.screen.write(x, y, hints.slice(0, width), ANSI.fg.gray);\r\n }\r\n\r\n private startRefresh(intervalMs: number): void {\r\n this.stopRefresh();\r\n this.refreshInterval = setInterval(() => {\r\n if (this.showingSizeWarning || this.screen.isCurrentlyResizing()) return;\r\n\r\n if (this.activeModal) {\r\n this.renderModal();\r\n return;\r\n }\r\n\r\n if (this.mode === 'explore' && this.cachedState) {\r\n this.renderMainScreen(this.cachedState, this.cachedNPCs, this.cachedQuests);\r\n } else if (this.mode === 'dialog' && this.dialogNPC) {\r\n this.renderDialogScreen(this.dialogNPC, this.dialogHistory, this.dialogOptions, this.isWaitingForAI);\r\n } else {\r\n this.screen.render();\r\n }\r\n }, intervalMs);\r\n }\r\n\r\n private stopRefresh(): void {\r\n if (this.refreshInterval) {\r\n clearInterval(this.refreshInterval);\r\n this.refreshInterval = null;\r\n }\r\n }\r\n\r\n /**\r\n * Pause automatic rendering (for full-screen overlays like Prologue, CharacterCreation)\r\n * This stops the refresh interval to prevent it from overwriting overlay screens.\r\n *\r\n * Note: Key handling is now managed by the InputManager's focus stack.\r\n * When a full-screen overlay pushes its handler onto the stack, it receives\r\n * exclusive input. This method only controls the render loop.\r\n */\r\n public pauseRendering(): void {\r\n this.stopRefresh();\r\n }\r\n\r\n /**\r\n * Resume automatic rendering after full-screen overlay exits.\r\n * Restores the refresh interval based on current mode.\r\n *\r\n * Note: Key handling is restored automatically when the overlay pops its\r\n * handler from the InputManager's focus stack.\r\n */\r\n public resumeRendering(): void {\r\n if (this.mode === 'travel' || this.mode === 'combat') {\r\n this.startRefresh(100);\r\n } else if (this.mode === 'explore' || this.mode === 'dialog') {\r\n this.startRefresh(200);\r\n }\r\n }\r\n\r\n private handleResize(width: number, height: number): void {\r\n const sizeCheck = this.screen.checkMinimumSize();\r\n\r\n if (!sizeCheck.valid) {\r\n this.showingSizeWarning = true;\r\n this.screen.renderSizeWarning();\r\n } else {\r\n this.showingSizeWarning = false;\r\n this.screen.clear();\r\n if (this.mode === 'explore' && this.cachedState) {\r\n this.renderMainScreen(this.cachedState, this.cachedNPCs, this.cachedQuests);\r\n }\r\n this.screen.forceRedraw();\r\n }\r\n }\r\n\r\n private handleKeypress(key: KeyEvent): void {\r\n if (key.ctrl && key.name === 'c') {\r\n this.cleanup();\r\n process.exit(0);\r\n }\r\n\r\n // Note: Full-screen overlays (prologue, character creation) now push their\r\n // own handlers onto the InputManager's focus stack, so they automatically\r\n // receive exclusive input. No need for isFullScreenActive check here.\r\n\r\n if (this.activeModal) {\r\n this.handleModalKey(key);\r\n return;\r\n }\r\n\r\n switch (this.mode) {\r\n case 'travel':\r\n // Delegate to section manager - TravelingSection handles 'q' to cancel\r\n this.sectionManager.handleKey(key);\r\n break;\r\n case 'explore':\r\n this.handleExploreKey(key);\r\n break;\r\n case 'dialog':\r\n break;\r\n }\r\n }\r\n\r\n private handleExploreKey(key: KeyEvent): void {\r\n // When a section is entered OR focused, let it handle keys first\r\n // This allows sections like Map to capture WASD/+- for panning/zooming\r\n const focused = this.sectionManager.getFocused();\r\n if (focused) {\r\n // Try to let the focused section handle the key\r\n if (focused.handleKey(key)) {\r\n if (this.cachedState) {\r\n this.renderMainScreen(this.cachedState, this.cachedNPCs, this.cachedQuests);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n // Modal shortcuts (only when section didn't handle the key)\r\n // Note: Don't intercept WASD when map is focused (map uses these for panning)\r\n const isMapFocused = focused?.id === 'map';\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 'm': 'menu',\r\n };\r\n // Only add workshop shortcut if map is not focused\r\n if (!isMapFocused) {\r\n modalKeys['w'] = 'workshop';\r\n }\r\n\r\n if (key.raw && modalKeys[key.raw.toLowerCase()]) {\r\n this.openModal(modalKeys[key.raw.toLowerCase()]);\r\n return;\r\n }\r\n\r\n // 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;\r\n }\r\n\r\n // Global shortcuts\r\n // Note: Don't intercept 's' when map is focused (map uses S for panning)\r\n const globalShortcuts: Record<string, string> = {\r\n 'n': 'npc',\r\n 'h': 'help',\r\n 'l': 'load',\r\n };\r\n // Only add save shortcut if map is not focused\r\n if (!isMapFocused) {\r\n globalShortcuts['s'] = 'save';\r\n }\r\n\r\n if (key.raw) {\r\n const cmd = globalShortcuts[key.raw.toLowerCase()];\r\n if (cmd && this.onCommand) {\r\n this.onCommand(cmd);\r\n return;\r\n }\r\n }\r\n\r\n // Delegate to section manager for navigation (arrows, enter, etc.)\r\n if (this.sectionManager.handleKey(key)) {\r\n if (this.cachedState) {\r\n this.renderMainScreen(this.cachedState, this.cachedNPCs, this.cachedQuests);\r\n }\r\n }\r\n }\r\n\r\n private handleLine(line: string): void {\r\n if (this.mode === 'explore' && this.onCommand) {\r\n this.onCommand(line.trim().toLowerCase());\r\n } else if (this.mode === 'dialog' && this.onDialogInput) {\r\n this.onDialogInput(line);\r\n }\r\n }\r\n\r\n // =========================================================================\r\n // MODAL HANDLING\r\n // =========================================================================\r\n\r\n private openModal(modal: 'inventory' | 'character' | 'quests' | 'workshop' | 'menu'): void {\r\n this.activeModal = modal;\r\n this.modalSelectedIndex = 0;\r\n this.modalScrollOffset = 0;\r\n }\r\n\r\n private closeModal(): void {\r\n this.activeModal = null;\r\n if (this.cachedState) {\r\n this.renderMainScreen(this.cachedState, this.cachedNPCs, this.cachedQuests);\r\n }\r\n }\r\n\r\n private handleModalKey(key: KeyEvent): void {\r\n // Handle based on active modal\r\n switch (this.activeModal) {\r\n case 'inventory':\r\n this.handleInventoryKey(key);\r\n break;\r\n case 'character':\r\n this.handleCharacterKey(key);\r\n break;\r\n case 'quests':\r\n this.handleQuestsKey(key);\r\n break;\r\n case 'menu':\r\n this.handleMenuKey(key);\r\n break;\r\n default:\r\n if (key.name === 'escape') {\r\n this.closeModal();\r\n }\r\n }\r\n }\r\n\r\n private handleInventoryKey(key: KeyEvent): void {\r\n const items = this.getFilteredInventory();\r\n\r\n // Escape to close\r\n if (key.name === 'escape' || key.raw === 'i') {\r\n this.closeModal();\r\n return;\r\n }\r\n\r\n // Tab switching with 1-5\r\n if (key.raw && /^[1-5]$/.test(key.raw)) {\r\n this.inventoryTab = parseInt(key.raw) - 1;\r\n this.modalSelectedIndex = 0;\r\n this.modalScrollOffset = 0;\r\n this.renderModal();\r\n return;\r\n }\r\n\r\n // Left/Right for tabs\r\n if (key.name === 'left' || key.raw === 'h') {\r\n if (this.inventoryTab > 0) {\r\n this.inventoryTab--;\r\n this.modalSelectedIndex = 0;\r\n this.modalScrollOffset = 0;\r\n }\r\n this.renderModal();\r\n return;\r\n }\r\n if (key.name === 'right' || key.raw === 'l') {\r\n if (this.inventoryTab < this.INVENTORY_TABS.length - 1) {\r\n this.inventoryTab++;\r\n this.modalSelectedIndex = 0;\r\n this.modalScrollOffset = 0;\r\n }\r\n this.renderModal();\r\n return;\r\n }\r\n\r\n // Up/Down for item selection\r\n if (key.name === 'up' || key.raw === 'k') {\r\n if (this.modalSelectedIndex > 0) {\r\n this.modalSelectedIndex--;\r\n if (this.modalSelectedIndex < this.modalScrollOffset) {\r\n this.modalScrollOffset = this.modalSelectedIndex;\r\n }\r\n }\r\n this.renderModal();\r\n return;\r\n }\r\n if (key.name === 'down' || key.raw === 'j') {\r\n if (this.modalSelectedIndex < items.length - 1) {\r\n this.modalSelectedIndex++;\r\n const maxVisible = 10;\r\n if (this.modalSelectedIndex >= this.modalScrollOffset + maxVisible) {\r\n this.modalScrollOffset = this.modalSelectedIndex - maxVisible + 1;\r\n }\r\n }\r\n this.renderModal();\r\n return;\r\n }\r\n\r\n // E to equip\r\n if (key.raw === 'e' || key.raw === 'E') {\r\n this.equipSelectedItem();\r\n return;\r\n }\r\n\r\n // U to unequip or use\r\n if (key.raw === 'u' || key.raw === 'U') {\r\n this.useOrUnequipSelectedItem();\r\n return;\r\n }\r\n\r\n // D to drop\r\n if (key.raw === 'd' || key.raw === 'D') {\r\n this.dropSelectedItem();\r\n return;\r\n }\r\n }\r\n\r\n private handleCharacterKey(key: KeyEvent): void {\r\n const editableFields = ['name', 'backstory', 'appearance', 'personality'];\r\n\r\n if (key.name === 'escape' || key.raw === 'c') {\r\n if (this.characterEditMode) {\r\n this.characterEditMode = false;\r\n this.characterEditBuffer = '';\r\n } else if (this.characterExternalEditMode) {\r\n // Cancel external edit\r\n this.characterExternalEditMode = false;\r\n this.characterExternalEditTempFile = '';\r\n } else {\r\n this.closeModal();\r\n }\r\n this.renderModal();\r\n return;\r\n }\r\n\r\n // In external edit mode, wait for Enter to confirm\r\n if (this.characterExternalEditMode) {\r\n if (key.name === 'return') {\r\n // Read the temp file and apply\r\n this.confirmExternalEdit();\r\n return;\r\n }\r\n // Ignore other keys while waiting for confirmation\r\n return;\r\n }\r\n\r\n // In edit mode, handle text input\r\n if (this.characterEditMode) {\r\n if (key.name === 'return') {\r\n // Submit edit\r\n if (this.characterEditBuffer.trim()) {\r\n this.onCharacterEdit?.(this.characterEditField, this.characterEditBuffer.trim());\r\n }\r\n this.characterEditMode = false;\r\n this.characterEditBuffer = '';\r\n this.renderModal();\r\n return;\r\n }\r\n if (key.name === 'backspace') {\r\n this.characterEditBuffer = this.characterEditBuffer.slice(0, -1);\r\n this.renderModal();\r\n return;\r\n }\r\n if (key.raw && key.raw.length === 1 && key.raw.charCodeAt(0) >= 32) {\r\n this.characterEditBuffer += key.raw;\r\n this.renderModal();\r\n return;\r\n }\r\n return;\r\n }\r\n\r\n // Navigate editable fields\r\n if (key.name === 'up' || key.raw === 'k') {\r\n this.modalSelectedIndex = Math.max(0, this.modalSelectedIndex - 1);\r\n this.renderModal();\r\n return;\r\n }\r\n if (key.name === 'down' || key.raw === 'j') {\r\n this.modalSelectedIndex = Math.min(editableFields.length - 1, this.modalSelectedIndex + 1);\r\n this.renderModal();\r\n return;\r\n }\r\n\r\n // Ctrl+E to open external editor\r\n if (key.ctrl && key.name === 'e') {\r\n this.openExternalEditor(editableFields[this.modalSelectedIndex]);\r\n return;\r\n }\r\n\r\n // Enter to edit\r\n if (key.name === 'return') {\r\n this.characterEditMode = true;\r\n this.characterEditField = editableFields[this.modalSelectedIndex];\r\n this.characterEditBuffer = '';\r\n this.renderModal();\r\n return;\r\n }\r\n }\r\n\r\n private async openExternalEditor(fieldKey: string): Promise<void> {\r\n const player = this.cachedState?.player;\r\n if (!player) return;\r\n\r\n const fs = await import('fs');\r\n const path = await import('path');\r\n const os = await import('os');\r\n const { spawn } = await import('child_process');\r\n\r\n // Get current value\r\n let currentValue = '';\r\n if (fieldKey === 'name') {\r\n currentValue = player.name;\r\n } else if (player.character) {\r\n currentValue = (player.character as unknown as Record<string, string>)[fieldKey] || '';\r\n }\r\n\r\n // Create temp file\r\n const tempDir = os.tmpdir();\r\n const tempFile = path.join(tempDir, `rougelike_edit_${fieldKey}.txt`);\r\n fs.writeFileSync(tempFile, currentValue, 'utf-8');\r\n\r\n // Save state\r\n this.characterExternalEditMode = true;\r\n this.characterEditField = fieldKey;\r\n this.characterExternalEditTempFile = tempFile;\r\n\r\n // Open editor (Windows uses notepad)\r\n const editor = process.platform === 'win32' ? 'notepad' : (process.env.EDITOR || 'vi');\r\n const child = spawn(editor, [tempFile], {\r\n stdio: 'inherit',\r\n detached: false,\r\n });\r\n\r\n child.on('close', () => {\r\n // Re-render the modal after editor closes\r\n this.renderModal();\r\n });\r\n }\r\n\r\n private async confirmExternalEdit(): Promise<void> {\r\n if (!this.characterExternalEditTempFile) return;\r\n\r\n try {\r\n const fs = await import('fs');\r\n const content = fs.readFileSync(this.characterExternalEditTempFile, 'utf-8').trim();\r\n\r\n if (content) {\r\n this.onCharacterEdit?.(this.characterEditField, content);\r\n }\r\n\r\n // Clean up temp file\r\n try {\r\n fs.unlinkSync(this.characterExternalEditTempFile);\r\n } catch {\r\n // Ignore cleanup errors\r\n }\r\n } catch {\r\n // Failed to read temp file\r\n }\r\n\r\n // Reset external edit state\r\n this.characterExternalEditMode = false;\r\n this.characterExternalEditTempFile = '';\r\n this.renderModal();\r\n }\r\n\r\n private handleQuestsKey(key: KeyEvent): void {\r\n if (key.name === 'escape' || key.raw === 'q') {\r\n this.closeModal();\r\n return;\r\n }\r\n\r\n const quests = this.cachedQuests;\r\n if (key.name === 'up' || key.raw === 'k') {\r\n this.modalSelectedIndex = Math.max(0, this.modalSelectedIndex - 1);\r\n this.renderModal();\r\n return;\r\n }\r\n if (key.name === 'down' || key.raw === 'j') {\r\n this.modalSelectedIndex = Math.min(quests.length - 1, this.modalSelectedIndex + 1);\r\n this.renderModal();\r\n return;\r\n }\r\n }\r\n\r\n private handleMenuKey(key: KeyEvent): void {\r\n if (key.name === 'escape' || key.raw === 'm') {\r\n this.closeModal();\r\n return;\r\n }\r\n\r\n const menuItems = ['New Game', 'Save Game', 'Load Game', 'Help', 'Settings', 'Exit'];\r\n if (key.name === 'up' || key.raw === 'k') {\r\n this.modalSelectedIndex = Math.max(0, this.modalSelectedIndex - 1);\r\n this.renderModal();\r\n return;\r\n }\r\n if (key.name === 'down' || key.raw === 'j') {\r\n this.modalSelectedIndex = Math.min(menuItems.length - 1, this.modalSelectedIndex + 1);\r\n this.renderModal();\r\n return;\r\n }\r\n if (key.name === 'return') {\r\n const action = ['newgame', 'save', 'load', 'help', 'settings', 'exit'][this.modalSelectedIndex];\r\n this.closeModal();\r\n this.onCommand?.(action);\r\n return;\r\n }\r\n }\r\n\r\n private getFilteredInventory(): import('../core/types.js').InventoryItem[] {\r\n if (!this.cachedState?.player) return [];\r\n const items = this.cachedState.player.inventory;\r\n const tabTypes = ['all', 'weapon', 'armor', 'consumable', 'material'];\r\n const filterType = tabTypes[this.inventoryTab];\r\n if (filterType === 'all') return items;\r\n return items.filter(i => i.type === filterType);\r\n }\r\n\r\n private equipSelectedItem(): void {\r\n const items = this.getFilteredInventory();\r\n const item = items[this.modalSelectedIndex];\r\n if (!item || !this.cachedState?.player) return;\r\n\r\n if (item.type === 'weapon' || item.type === 'armor') {\r\n this.onCommand?.(`equip:${item.id}`);\r\n this.addEventLog(`Equipped ${item.name}`);\r\n }\r\n this.renderModal();\r\n }\r\n\r\n private useOrUnequipSelectedItem(): void {\r\n const items = this.getFilteredInventory();\r\n const item = items[this.modalSelectedIndex];\r\n if (!item || !this.cachedState?.player) return;\r\n\r\n const eq = this.cachedState.player.equipment;\r\n const isEquipped = eq.weapon?.id === item.id || eq.armor?.id === item.id || eq.accessory?.id === item.id;\r\n\r\n if (isEquipped) {\r\n this.onCommand?.(`unequip:${item.type}`);\r\n this.addEventLog(`Unequipped ${item.name}`);\r\n } else if (item.type === 'consumable') {\r\n this.onCommand?.(`use:${item.id}`);\r\n this.addEventLog(`Used ${item.name}`);\r\n }\r\n this.renderModal();\r\n }\r\n\r\n private dropSelectedItem(): void {\r\n const items = this.getFilteredInventory();\r\n const item = items[this.modalSelectedIndex];\r\n if (!item) return;\r\n\r\n this.onCommand?.(`drop:${item.id}`);\r\n this.addEventLog(`Dropped ${item.name}`);\r\n\r\n if (this.modalSelectedIndex >= items.length - 1) {\r\n this.modalSelectedIndex = Math.max(0, items.length - 2);\r\n }\r\n this.renderModal();\r\n }\r\n\r\n private renderModal(): void {\r\n if (!this.activeModal || !this.cachedState) return;\r\n\r\n const { width: screenWidth, height: screenHeight } = this.screen.getSize();\r\n const modalWidth = Math.min(70, screenWidth - 6);\r\n const modalHeight = Math.min(24, screenHeight - 4);\r\n const mx = Math.floor((screenWidth - modalWidth) / 2);\r\n const my = Math.floor((screenHeight - modalHeight) / 2);\r\n\r\n // Fill modal background to cover the main screen\r\n for (let row = my; row < my + modalHeight; row++) {\r\n this.screen.write(mx, row, ' '.repeat(modalWidth), ANSI.fg.white, ANSI.bg.black);\r\n }\r\n\r\n // Draw modal box with title\r\n this.screen.drawBox(mx, my, modalWidth, modalHeight, this.activeModal.toUpperCase());\r\n\r\n // Content based on modal type\r\n switch (this.activeModal) {\r\n case 'inventory':\r\n this.renderInventoryModal(mx, my, modalWidth, modalHeight);\r\n break;\r\n case 'character':\r\n this.renderCharacterModal(mx, my, modalWidth, modalHeight);\r\n break;\r\n case 'quests':\r\n this.renderQuestsModal(mx, my, modalWidth, modalHeight);\r\n break;\r\n case 'workshop':\r\n this.renderWorkshopModal(mx, my, modalWidth, modalHeight);\r\n break;\r\n case 'menu':\r\n this.renderMenuModal(mx, my, modalWidth, modalHeight);\r\n break;\r\n }\r\n\r\n // Hint\r\n this.screen.write(mx + 2, my + modalHeight - 1, '[ESC] Close', ANSI.fg.gray);\r\n\r\n this.screen.render();\r\n }\r\n\r\n private renderInventoryModal(x: number, y: number, width: number, height: number): void {\r\n const player = this.cachedState?.player;\r\n if (!player) return;\r\n\r\n // Tabs\r\n let tabX = x + 2;\r\n for (let i = 0; i < this.INVENTORY_TABS.length; i++) {\r\n const isActive = i === this.inventoryTab;\r\n const fg = isActive ? ANSI.fg.black : ANSI.fg.white;\r\n const bg = isActive ? ANSI.bg.cyan : undefined;\r\n const label = `[${i + 1}]${this.INVENTORY_TABS[i]}`;\r\n this.screen.write(tabX, y + 2, label, fg, bg);\r\n tabX += label.length + 1;\r\n }\r\n\r\n // Gold\r\n this.screen.write(x + width - 15, y + 2, `Gold: ${player.stats.gold}`, ANSI.fg.yellow);\r\n\r\n // Split view: items list (left) + details (right)\r\n const listWidth = Math.floor((width - 4) * 0.5);\r\n const detailX = x + listWidth + 3;\r\n const detailWidth = width - listWidth - 5;\r\n const listY = y + 4;\r\n const listHeight = height - 7;\r\n\r\n // Items list\r\n this.screen.write(x + 2, listY - 1, '─'.repeat(listWidth), ANSI.fg.gray);\r\n const items = this.getFilteredInventory();\r\n\r\n if (items.length === 0) {\r\n this.screen.write(x + 2, listY + 1, '(No items)', ANSI.fg.gray);\r\n } else {\r\n const maxVisible = Math.min(listHeight, 10);\r\n for (let i = 0; i < maxVisible; i++) {\r\n const itemIdx = this.modalScrollOffset + i;\r\n if (itemIdx >= items.length) break;\r\n\r\n const item = items[itemIdx];\r\n const isSelected = itemIdx === this.modalSelectedIndex;\r\n const eq = player.equipment;\r\n const isEquipped = eq.weapon?.id === item.id || eq.armor?.id === item.id || eq.accessory?.id === item.id;\r\n const equipMark = isEquipped ? '[E]' : ' ';\r\n\r\n const fg = isSelected ? ANSI.fg.black : ANSI.fg.white;\r\n const bg = isSelected ? ANSI.bg.cyan : undefined;\r\n const icon = this.getItemIcon(item.type);\r\n const label = `${icon} ${item.name} ${equipMark}`.slice(0, listWidth - 2);\r\n\r\n this.screen.write(x + 2, listY + i, isSelected ? '▸' : ' ', ANSI.fg.yellow);\r\n this.screen.write(x + 4, listY + i, label.padEnd(listWidth - 4), fg, bg);\r\n }\r\n\r\n // Scroll indicator\r\n if (items.length > maxVisible) {\r\n const pct = this.modalScrollOffset / Math.max(1, items.length - maxVisible);\r\n const barY = Math.floor(pct * (maxVisible - 1));\r\n for (let i = 0; i < maxVisible; i++) {\r\n this.screen.write(x + listWidth, listY + i, i === barY ? '█' : '░', ANSI.fg.gray);\r\n }\r\n }\r\n }\r\n\r\n // Item details (right panel)\r\n this.screen.write(detailX, listY - 1, '─ Details ─', ANSI.fg.gray);\r\n const selectedItem = items[this.modalSelectedIndex];\r\n if (selectedItem) {\r\n let lineY = listY;\r\n this.screen.write(detailX, lineY++, selectedItem.name, ANSI.fg.yellow, undefined, ANSI.bold);\r\n this.screen.write(detailX, lineY++, `Type: ${selectedItem.type}`, ANSI.fg.gray);\r\n lineY++;\r\n\r\n if (selectedItem.type === 'weapon') {\r\n const w = selectedItem as unknown as import('../core/types.js').Weapon;\r\n this.screen.write(detailX, lineY++, `Rarity: ${w.rarity}`, this.getRarityColor(w.rarity));\r\n this.screen.write(detailX, lineY++, `Attack: ${w.baseAttack}`, ANSI.fg.red);\r\n if (w.durability !== undefined) {\r\n this.screen.write(detailX, lineY++, `Durability: ${w.durability}/${w.maxDurability}`, ANSI.fg.white);\r\n }\r\n }\r\n if (selectedItem.type === 'armor') {\r\n const a = selectedItem as unknown as import('../core/types.js').Armor;\r\n this.screen.write(detailX, lineY++, `Rarity: ${a.rarity}`, this.getRarityColor(a.rarity));\r\n this.screen.write(detailX, lineY++, `Defense: ${a.baseDefense}`, ANSI.fg.blue);\r\n }\r\n\r\n if (selectedItem.description) {\r\n lineY++;\r\n const desc = selectedItem.description.slice(0, detailWidth * 2);\r\n this.screen.write(detailX, lineY++, desc.slice(0, detailWidth), ANSI.fg.gray);\r\n if (desc.length > detailWidth) {\r\n this.screen.write(detailX, lineY++, desc.slice(detailWidth), ANSI.fg.gray);\r\n }\r\n }\r\n\r\n // Actions\r\n lineY = y + height - 4;\r\n const eq = player.equipment;\r\n const isEquipped = eq.weapon?.id === selectedItem.id || eq.armor?.id === selectedItem.id;\r\n if (isEquipped) {\r\n this.screen.write(detailX, lineY++, '[U] Unequip', ANSI.fg.white);\r\n } else if (selectedItem.type === 'weapon' || selectedItem.type === 'armor') {\r\n this.screen.write(detailX, lineY++, '[E] Equip', ANSI.fg.white);\r\n } else if (selectedItem.type === 'consumable') {\r\n this.screen.write(detailX, lineY++, '[U] Use', ANSI.fg.white);\r\n }\r\n this.screen.write(detailX, lineY, '[D] Drop', ANSI.fg.red);\r\n }\r\n\r\n // Equipment summary\r\n const eqY = y + height - 2;\r\n const eqWeapon = player.equipment.weapon?.name || '(none)';\r\n const eqArmor = player.equipment.armor?.name || '(none)';\r\n this.screen.write(x + 2, eqY, `⚔${eqWeapon} 🛡${eqArmor}`, ANSI.fg.gray);\r\n }\r\n\r\n private renderCharacterModal(x: number, y: number, width: number, height: number): void {\r\n const player = this.cachedState?.player;\r\n if (!player) return;\r\n\r\n const s = player.stats;\r\n let lineY = y + 2;\r\n\r\n // Header\r\n this.screen.write(x + 2, lineY++, player.name, ANSI.fg.yellow, undefined, ANSI.bold);\r\n this.screen.write(x + 2, lineY++, `Level ${s.level} Adventurer`, ANSI.fg.gray);\r\n lineY++;\r\n\r\n // Stats section\r\n this.screen.write(x + 2, lineY++, '─── Stats ───', ANSI.fg.cyan);\r\n this.screen.write(x + 2, lineY, `HP: `, ANSI.fg.white);\r\n this.screen.drawProgressBar(x + 6, lineY, 12, s.hp, s.maxHp, ANSI.fg.red);\r\n this.screen.write(x + 19, lineY++, `${s.hp}/${s.maxHp}`, ANSI.fg.white);\r\n\r\n this.screen.write(x + 2, lineY, `MP: `, ANSI.fg.white);\r\n this.screen.drawProgressBar(x + 6, lineY, 12, s.mp, s.maxMp, ANSI.fg.blue);\r\n this.screen.write(x + 19, lineY++, `${s.mp}/${s.maxMp}`, ANSI.fg.white);\r\n\r\n this.screen.write(x + 2, lineY, `EXP:`, ANSI.fg.white);\r\n this.screen.drawProgressBar(x + 6, lineY, 12, s.exp, s.expToNextLevel, ANSI.fg.green);\r\n this.screen.write(x + 19, lineY++, `${s.exp}/${s.expToNextLevel}`, ANSI.fg.white);\r\n lineY++;\r\n\r\n this.screen.write(x + 2, lineY++, `ATK: ${s.attack} DEF: ${s.defense} SPD: ${s.speed}`, ANSI.fg.white);\r\n lineY++;\r\n\r\n // Editable fields section\r\n this.screen.write(x + 2, lineY++, '─── Profile ───', ANSI.fg.cyan);\r\n const editableFields = [\r\n { key: 'name', label: 'Name', value: player.name },\r\n { key: 'backstory', label: 'Backstory', value: player.character?.backstory || '(not set)' },\r\n { key: 'appearance', label: 'Appearance', value: player.character?.appearance || '(not set)' },\r\n { key: 'personality', label: 'Personality', value: player.character?.personality || '(not set)' },\r\n ];\r\n\r\n for (let i = 0; i < editableFields.length; i++) {\r\n const field = editableFields[i];\r\n const isSelected = i === this.modalSelectedIndex && !this.characterEditMode && !this.characterExternalEditMode;\r\n const isEditing = this.characterEditMode && this.characterEditField === field.key;\r\n const isExternalEditing = this.characterExternalEditMode && this.characterEditField === field.key;\r\n\r\n const fg = isSelected ? ANSI.fg.black : ANSI.fg.white;\r\n const bg = isSelected ? ANSI.bg.cyan : undefined;\r\n const indicator = isSelected ? '▸' : ' ';\r\n\r\n this.screen.write(x + 2, lineY, indicator, ANSI.fg.yellow);\r\n this.screen.write(x + 4, lineY, `${field.label}: `, fg, bg);\r\n\r\n if (isEditing) {\r\n this.screen.write(x + 4 + field.label.length + 2, lineY, this.characterEditBuffer + '▌', ANSI.fg.cyan);\r\n } else if (isExternalEditing) {\r\n this.screen.write(x + 4 + field.label.length + 2, lineY, 'Press Enter To Confirm', ANSI.fg.cyan);\r\n } else {\r\n const displayValue = field.value.slice(0, width - field.label.length - 10);\r\n this.screen.write(x + 4 + field.label.length + 2, lineY, displayValue, ANSI.fg.gray);\r\n }\r\n lineY++;\r\n }\r\n\r\n // Hint\r\n if (this.characterExternalEditMode) {\r\n this.screen.write(x + 2, y + height - 2, 'Enter: confirm Esc: cancel', ANSI.fg.gray);\r\n } else if (this.characterEditMode) {\r\n this.screen.write(x + 2, y + height - 2, 'Enter: save Esc: cancel', ANSI.fg.gray);\r\n } else {\r\n this.screen.write(x + 2, y + height - 2, '↑↓: select Enter: edit Ctrl+E: external editor Esc: close', ANSI.fg.gray);\r\n }\r\n }\r\n\r\n private renderQuestsModal(x: number, y: number, width: number, height: number): void {\r\n const quests = this.cachedQuests;\r\n\r\n if (quests.length === 0) {\r\n this.screen.write(x + 2, y + 2, '(No active quests)', ANSI.fg.gray);\r\n this.screen.write(x + 2, y + 4, 'Talk to NPCs to get quests!', ANSI.fg.white);\r\n return;\r\n }\r\n\r\n // Quest list (left) + details (right)\r\n const listWidth = Math.floor((width - 4) * 0.4);\r\n const detailX = x + listWidth + 3;\r\n\r\n // Quest list\r\n this.screen.write(x + 2, y + 2, '─── Quests ───', ANSI.fg.cyan);\r\n quests.slice(0, height - 6).forEach((quest, i) => {\r\n const completed = quest.objectives.filter(o => o.isComplete).length;\r\n const total = quest.objectives.length;\r\n const isSelected = i === this.modalSelectedIndex;\r\n const fg = isSelected ? ANSI.fg.black : ANSI.fg.white;\r\n const bg = isSelected ? ANSI.bg.cyan : undefined;\r\n const status = completed === total ? '✓' : `${completed}/${total}`;\r\n const label = `${quest.name} [${status}]`.slice(0, listWidth - 2);\r\n this.screen.write(x + 2, y + 3 + i, isSelected ? '▸' : ' ', ANSI.fg.yellow);\r\n this.screen.write(x + 4, y + 3 + i, label.padEnd(listWidth - 4), fg, bg);\r\n });\r\n\r\n // Quest details\r\n const selectedQuest = quests[this.modalSelectedIndex];\r\n if (selectedQuest) {\r\n let lineY = y + 2;\r\n this.screen.write(detailX, lineY++, selectedQuest.name, ANSI.fg.yellow, undefined, ANSI.bold);\r\n this.screen.write(detailX, lineY++, `Type: ${selectedQuest.type}`, ANSI.fg.gray);\r\n lineY++;\r\n\r\n if (selectedQuest.description) {\r\n const desc = selectedQuest.description.slice(0, (width - listWidth - 6) * 2);\r\n this.screen.write(detailX, lineY++, desc.slice(0, width - listWidth - 6), ANSI.fg.white);\r\n }\r\n lineY++;\r\n\r\n this.screen.write(detailX, lineY++, '─── Objectives ───', ANSI.fg.cyan);\r\n for (const obj of selectedQuest.objectives.slice(0, 5)) {\r\n const check = obj.isComplete ? '✓' : '○';\r\n const color = obj.isComplete ? ANSI.fg.green : ANSI.fg.white;\r\n const progress = obj.required > 1 ? ` (${obj.current}/${obj.required})` : '';\r\n this.screen.write(detailX, lineY++, `${check} ${obj.description}${progress}`, color);\r\n }\r\n\r\n // Rewards\r\n if (selectedQuest.rewards && selectedQuest.rewards.length > 0) {\r\n lineY++;\r\n this.screen.write(detailX, lineY++, '─── Rewards ───', ANSI.fg.cyan);\r\n for (const reward of selectedQuest.rewards) {\r\n const qty = reward.quantity ? ` x${reward.quantity}` : '';\r\n if (reward.type === 'gold') {\r\n this.screen.write(detailX, lineY++, `Gold: ${reward.value}${qty}`, ANSI.fg.yellow);\r\n } else if (reward.type === 'exp') {\r\n this.screen.write(detailX, lineY++, `EXP: ${reward.value}${qty}`, ANSI.fg.green);\r\n } else if (reward.type === 'item') {\r\n this.screen.write(detailX, lineY++, `Item: ${reward.value}${qty}`, ANSI.fg.cyan);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private renderWorkshopModal(x: number, y: number, width: number, height: number): void {\r\n this.screen.write(x + 2, y + 2, 'Affix Workshop', ANSI.fg.cyan, undefined, ANSI.bold);\r\n this.screen.write(x + 2, y + 4, 'Modify and enhance your equipment with affixes.', ANSI.fg.white);\r\n this.screen.write(x + 2, y + 6, '─── Options ───', ANSI.fg.cyan);\r\n\r\n const options = [\r\n 'Add Affix - Add a new modifier to equipment',\r\n 'Remove Affix - Remove an existing modifier',\r\n 'Reroll Affix - Reroll modifier values',\r\n 'Craft Item - Create new equipment',\r\n ];\r\n\r\n options.forEach((opt, i) => {\r\n const isSelected = i === this.modalSelectedIndex;\r\n const fg = isSelected ? ANSI.fg.black : ANSI.fg.white;\r\n const bg = isSelected ? ANSI.bg.cyan : undefined;\r\n this.screen.write(x + 2, y + 7 + i, isSelected ? '▸' : ' ', ANSI.fg.yellow);\r\n this.screen.write(x + 4, y + 7 + i, opt.slice(0, width - 6), fg, bg);\r\n });\r\n\r\n this.screen.write(x + 2, y + height - 3, 'Workshop requires materials and gold.', ANSI.fg.gray);\r\n this.screen.write(x + 2, y + height - 2, 'Feature coming soon!', ANSI.fg.yellow);\r\n }\r\n\r\n private getItemIcon(type: string): string {\r\n switch (type) {\r\n case 'weapon': return '⚔';\r\n case 'armor': return '🛡';\r\n case 'consumable': return '🧪';\r\n case 'material': return '📦';\r\n default: return '•';\r\n }\r\n }\r\n\r\n private getRarityColor(rarity: string): string {\r\n switch (rarity?.toLowerCase()) {\r\n case 'common': return ANSI.fg.white;\r\n case 'uncommon': return ANSI.fg.green;\r\n case 'rare': return ANSI.fg.blue;\r\n case 'epic': return ANSI.fg.magenta;\r\n case 'legendary': return ANSI.fg.yellow;\r\n default: return ANSI.fg.gray;\r\n }\r\n }\r\n\r\n private renderMenuModal(x: number, y: number, width: number, height: number): void {\r\n const menuItems = ['New Game', 'Save Game', 'Load Game', 'Help', 'Settings', 'Exit'];\r\n\r\n menuItems.forEach((item, i) => {\r\n const isSelected = i === this.modalSelectedIndex;\r\n const fg = isSelected ? ANSI.fg.black : ANSI.fg.white;\r\n const bg = isSelected ? ANSI.bg.cyan : undefined;\r\n this.screen.write(x + 2, y + 2 + i, item.padEnd(width - 4), fg, bg);\r\n });\r\n }\r\n}\r\n\r\n// Singleton instance\r\nlet gameUIInstance: GameUI | null = null;\r\n\r\nexport function getGameUI(): GameUI {\r\n if (!gameUIInstance) {\r\n gameUIInstance = new GameUI();\r\n }\r\n return gameUIInstance;\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"49e26bda-c9cc-543b-8e45-e2d60795329c"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * TUI Input Handler - Keyboard input management
3
+ */
4
+ /**
5
+ * Key event types
6
+ */
7
+ export interface KeyEvent {
8
+ name: string;
9
+ ctrl: boolean;
10
+ meta: boolean;
11
+ shift: boolean;
12
+ sequence: string;
13
+ raw: string;
14
+ }
15
+ /**
16
+ * Special key names
17
+ */
18
+ export declare const KEYS: {
19
+ UP: string;
20
+ DOWN: string;
21
+ LEFT: string;
22
+ RIGHT: string;
23
+ ENTER: string;
24
+ SPACE: string;
25
+ ESCAPE: string;
26
+ TAB: string;
27
+ BACKSPACE: string;
28
+ DELETE: string;
29
+ HOME: string;
30
+ END: string;
31
+ PAGEUP: string;
32
+ PAGEDOWN: string;
33
+ };
34
+ export type KeyHandler = (key: KeyEvent) => void;
35
+ type LineHandler = (line: string) => void;
36
+ /**
37
+ * Input manager class
38
+ *
39
+ * Uses a focus stack pattern for input routing:
40
+ * - Only the top handler on the stack receives key events
41
+ * - Handlers push themselves onto the stack when they need exclusive input
42
+ * - Handlers pop themselves when they're done
43
+ */
44
+ export declare class InputManager {
45
+ private rl;
46
+ private focusStack;
47
+ private lineHandlers;
48
+ private mode;
49
+ private inputBuffer;
50
+ private isActive;
51
+ /**
52
+ * Start listening for input
53
+ */
54
+ start(): void;
55
+ /**
56
+ * Stop listening for input
57
+ */
58
+ stop(): void;
59
+ /**
60
+ * Set input mode
61
+ */
62
+ setMode(mode: 'raw' | 'line'): void;
63
+ /**
64
+ * Get current input buffer (for line mode)
65
+ */
66
+ getInputBuffer(): string;
67
+ /**
68
+ * Clear input buffer
69
+ */
70
+ clearInputBuffer(): void;
71
+ /**
72
+ * Handle input in line mode
73
+ */
74
+ private handleLineInput;
75
+ /**
76
+ * Push a handler onto the focus stack
77
+ * The new handler will receive exclusive input until popped
78
+ */
79
+ pushFocus(handler: KeyHandler): void;
80
+ /**
81
+ * Pop the top handler from the focus stack
82
+ * Returns the popped handler, or undefined if stack is empty
83
+ */
84
+ popFocus(): KeyHandler | undefined;
85
+ /**
86
+ * Get the current focused handler (top of stack)
87
+ */
88
+ getCurrentFocus(): KeyHandler | undefined;
89
+ /**
90
+ * Check if there are any handlers on the focus stack
91
+ */
92
+ hasFocus(): boolean;
93
+ /**
94
+ * @deprecated Use pushFocus/popFocus instead
95
+ * Kept for backward compatibility during migration
96
+ */
97
+ onKey(handler: KeyHandler): void;
98
+ /**
99
+ * @deprecated Use pushFocus/popFocus instead
100
+ * Removes a specific handler from anywhere in the stack
101
+ */
102
+ offKey(handler: KeyHandler): void;
103
+ /**
104
+ * Register line handler
105
+ */
106
+ onLine(handler: LineHandler): void;
107
+ /**
108
+ * Unregister line handler
109
+ */
110
+ offLine(handler: LineHandler): void;
111
+ /**
112
+ * Emit key event to the top handler on the focus stack
113
+ * Only the handler at the top of the stack receives the event
114
+ */
115
+ private emitKey;
116
+ /**
117
+ * Emit line event
118
+ */
119
+ private emitLine;
120
+ /**
121
+ * Emit custom event
122
+ */
123
+ private emit;
124
+ /**
125
+ * Wait for a specific key
126
+ */
127
+ waitForKey(keyName?: string): Promise<KeyEvent>;
128
+ /**
129
+ * Wait for line input
130
+ */
131
+ waitForLine(): Promise<string>;
132
+ /**
133
+ * Prompt for input with echo
134
+ */
135
+ prompt(prefix?: string): Promise<string>;
136
+ }
137
+ export declare function getInput(): InputManager;
138
+ export {};
139
+ //# sourceMappingURL=Input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"/","sources":["tui/Input.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;CAehB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;AACjD,KAAK,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAE1C;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAkB;IAElC;;OAEG;IACH,KAAK,IAAI,IAAI;IA6Cb;;OAEG;IACH,IAAI,IAAI,IAAI;IAiBZ;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;IAKnC;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgCvB;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAIpC;;;OAGG;IACH,QAAQ,IAAI,UAAU,GAAG,SAAS;IAIlC;;OAEG;IACH,eAAe,IAAI,UAAU,GAAG,SAAS;IAIzC;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAIhC;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAOjC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIlC;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAInC;;;OAGG;IACH,OAAO,CAAC,OAAO;IAOf;;OAEG;IACH,OAAO,CAAC,QAAQ;IAMhB;;OAEG;IACH,OAAO,CAAC,IAAI;IAOZ;;OAEG;IACH,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAY/C;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAc9B;;OAEG;IACG,MAAM,CAAC,MAAM,GAAE,MAAa,GAAG,OAAO,CAAC,MAAM,CAAC;CAIrD;AAKD,wBAAgB,QAAQ,IAAI,YAAY,CAKvC"}