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":"SectionManager.js","sources":["tui/core/SectionManager.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Section Manager - Handles focus and navigation between sections\r\n */\r\n\r\nimport type { ISection } from './Section.js';\r\nimport type { KeyEvent } from '../Input.js';\r\n\r\n/**\r\n * Navigation direction\r\n */\r\nexport type Direction = 'up' | 'down' | 'left' | 'right';\r\n\r\n/**\r\n * Section layout configuration\r\n * Maps directions to adjacent section IDs\r\n */\r\nexport interface SectionLayoutNode {\r\n up?: string;\r\n down?: string;\r\n left?: string;\r\n right?: string;\r\n}\r\n\r\nexport type SectionLayout = Map<string, SectionLayoutNode>;\r\n\r\n/**\r\n * Section Manager - Manages multiple sections and their focus states\r\n */\r\nexport class SectionManager {\r\n private sections: Map<string, ISection> = new Map();\r\n private layout: SectionLayout = new Map();\r\n private focusedId: string | null = null;\r\n private defaultFocusId: string | null = null;\r\n\r\n /**\r\n * Register a section with the manager\r\n */\r\n register(section: ISection): void {\r\n this.sections.set(section.id, section);\r\n if (this.defaultFocusId === null) {\r\n this.defaultFocusId = section.id;\r\n }\r\n }\r\n\r\n /**\r\n * Unregister a section\r\n */\r\n unregister(sectionId: string): void {\r\n this.sections.delete(sectionId);\r\n this.layout.delete(sectionId);\r\n if (this.focusedId === sectionId) {\r\n this.focusedId = null;\r\n }\r\n }\r\n\r\n /**\r\n * Get a section by ID\r\n */\r\n get(sectionId: string): ISection | undefined {\r\n return this.sections.get(sectionId);\r\n }\r\n\r\n /**\r\n * Get all sections\r\n */\r\n getAll(): ISection[] {\r\n return Array.from(this.sections.values());\r\n }\r\n\r\n /**\r\n * Set the navigation layout\r\n */\r\n setLayout(layout: SectionLayout): void {\r\n this.layout = layout;\r\n }\r\n\r\n /**\r\n * Configure layout node for a section\r\n */\r\n setLayoutNode(sectionId: string, node: SectionLayoutNode): void {\r\n this.layout.set(sectionId, node);\r\n }\r\n\r\n /**\r\n * Set the default focus section\r\n */\r\n setDefaultFocus(sectionId: string): void {\r\n this.defaultFocusId = sectionId;\r\n }\r\n\r\n /**\r\n * Get the currently focused section\r\n */\r\n getFocused(): ISection | null {\r\n if (!this.focusedId) return null;\r\n return this.sections.get(this.focusedId) || null;\r\n }\r\n\r\n /**\r\n * Get the ID of the focused section\r\n */\r\n getFocusedId(): string | null {\r\n return this.focusedId;\r\n }\r\n\r\n /**\r\n * Focus a specific section\r\n */\r\n focus(sectionId: string): boolean {\r\n const section = this.sections.get(sectionId);\r\n if (!section) return false;\r\n\r\n // Unfocus current\r\n if (this.focusedId) {\r\n const current = this.sections.get(this.focusedId);\r\n if (current) {\r\n current.focused = false;\r\n if (current.state.entered) {\r\n current.exit();\r\n }\r\n }\r\n }\r\n\r\n // Focus new\r\n section.focused = true;\r\n this.focusedId = sectionId;\r\n return true;\r\n }\r\n\r\n /**\r\n * Focus the default section\r\n */\r\n focusDefault(): boolean {\r\n if (this.defaultFocusId) {\r\n return this.focus(this.defaultFocusId);\r\n }\r\n // Focus first registered section\r\n const first = this.sections.keys().next().value;\r\n if (first) {\r\n return this.focus(first);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Navigate focus in a direction\r\n */\r\n navigate(direction: Direction): boolean {\r\n if (!this.focusedId) {\r\n return this.focusDefault();\r\n }\r\n\r\n const layoutNode = this.layout.get(this.focusedId);\r\n if (!layoutNode) return false;\r\n\r\n const targetId = layoutNode[direction];\r\n if (!targetId) return false;\r\n\r\n return this.focus(targetId);\r\n }\r\n\r\n /**\r\n * Enter the focused section\r\n */\r\n enterFocused(): boolean {\r\n const focused = this.getFocused();\r\n if (!focused || !focused.canEnter) return false;\r\n\r\n focused.enter();\r\n return true;\r\n }\r\n\r\n /**\r\n * Exit the entered section\r\n */\r\n exitEntered(): boolean {\r\n const focused = this.getFocused();\r\n if (!focused || !focused.state.entered) return false;\r\n\r\n focused.exit();\r\n return true;\r\n }\r\n\r\n /**\r\n * Check if any section is currently entered\r\n */\r\n isAnyEntered(): boolean {\r\n const focused = this.getFocused();\r\n return focused?.state.entered ?? false;\r\n }\r\n\r\n /**\r\n * Handle key input for navigation\r\n * Returns true if the key was consumed\r\n */\r\n handleKey(key: KeyEvent): boolean {\r\n const focused = this.getFocused();\r\n\r\n // If a section is entered, delegate to it first\r\n if (focused?.state.entered) {\r\n if (focused.handleKey(key)) {\r\n return true;\r\n }\r\n // Section didn't consume the key - allow left/right navigation even when entered\r\n if (key.name === 'left' || key.name === 'h') {\r\n return this.navigate('left');\r\n }\r\n if (key.name === 'right' || key.name === 'l') {\r\n return this.navigate('right');\r\n }\r\n return false;\r\n }\r\n\r\n // Handle navigation between sections (when not entered)\r\n switch (key.name) {\r\n case 'up':\r\n case 'k':\r\n return this.navigate('up');\r\n case 'down':\r\n case 'j':\r\n return this.navigate('down');\r\n case 'left':\r\n case 'h':\r\n return this.navigate('left');\r\n case 'right':\r\n case 'l':\r\n return this.navigate('right');\r\n case 'return':\r\n case 'space':\r\n return this.enterFocused();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Get the current hint text (from focused section)\r\n */\r\n getCurrentHint(): string {\r\n const focused = this.getFocused();\r\n return focused?.getCurrentHint() || '';\r\n }\r\n\r\n /**\r\n * Clear all sections\r\n */\r\n clear(): void {\r\n this.sections.clear();\r\n this.layout.clear();\r\n this.focusedId = null;\r\n this.defaultFocusId = null;\r\n }\r\n}\r\n\r\n/**\r\n * Create a grid layout for sections\r\n * @param grid 2D array of section IDs (rows x columns)\r\n */\r\nexport function createGridLayout(grid: (string | null)[][]): SectionLayout {\r\n const layout: SectionLayout = new Map();\r\n\r\n for (let row = 0; row < grid.length; row++) {\r\n for (let col = 0; col < grid[row].length; col++) {\r\n const id = grid[row][col];\r\n if (!id) continue;\r\n\r\n const node: SectionLayoutNode = {};\r\n\r\n // Up\r\n for (let r = row - 1; r >= 0; r--) {\r\n if (grid[r][col]) {\r\n node.up = grid[r][col]!;\r\n break;\r\n }\r\n }\r\n\r\n // Down\r\n for (let r = row + 1; r < grid.length; r++) {\r\n if (grid[r][col]) {\r\n node.down = grid[r][col]!;\r\n break;\r\n }\r\n }\r\n\r\n // Left\r\n for (let c = col - 1; c >= 0; c--) {\r\n if (grid[row][c]) {\r\n node.left = grid[row][c]!;\r\n break;\r\n }\r\n }\r\n\r\n // Right\r\n for (let c = col + 1; c < grid[row].length; c++) {\r\n if (grid[row][c]) {\r\n node.right = grid[row][c]!;\r\n break;\r\n }\r\n }\r\n\r\n layout.set(id, node);\r\n }\r\n }\r\n\r\n return layout;\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"7d5b724d-a3d1-55a3-8d49-3223ea74b5ff"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * TUI Core Module
3
+ * Exports all core types and classes
4
+ */
5
+ export * from './Component.js';
6
+ export * from './Section.js';
7
+ export * from './BaseSection.js';
8
+ export * from './SectionManager.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["tui/core/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * TUI Core Module
3
+ * Exports all core types and classes
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]="cf1962ea-5fa2-57da-9480-033dc98dcf8c")}catch(e){}}();
7
+ export * from './Component.js';
8
+ export * from './Section.js';
9
+ export * from './BaseSection.js';
10
+ export * from './SectionManager.js';
11
+ //# sourceMappingURL=index.js.map
12
+ //# debugId=cf1962ea-5fa2-57da-9480-033dc98dcf8c
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["tui/core/index.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * TUI Core Module\r\n * Exports all core types and classes\r\n */\r\n\r\nexport * from './Component.js';\r\nexport * from './Section.js';\r\nexport * from './BaseSection.js';\r\nexport * from './SectionManager.js';\r\n"],"names":[],"mappings":"AAAA;;;GAGG;;;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC","debug_id":"cf1962ea-5fa2-57da-9480-033dc98dcf8c"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * TUI Module Exports
3
+ * Terminal User Interface system with section-based architecture
4
+ */
5
+ export * from './Screen.js';
6
+ export * from './Input.js';
7
+ export * from './core/index.js';
8
+ export * from './sections/index.js';
9
+ export * from './components/index.js';
10
+ export * from './Menu.js';
11
+ export * from './ExploreMenu.js';
12
+ export { GameUI, getGameUI } from './GameUIAdapter.js';
13
+ export type { UIMode, DialogOption } from './GameUIAdapter.js';
14
+ export { MIN_TERMINAL_SIZE } from './Screen.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["tui/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAG3B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * TUI Module Exports
3
+ * Terminal User Interface system with section-based architecture
4
+ */
5
+ // Low-level screen and input
6
+
7
+ !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]="74b5f710-eaba-58e5-a6f8-fff472c34e7f")}catch(e){}}();
8
+ export * from './Screen.js';
9
+ export * from './Input.js';
10
+ // Core types and classes (new architecture)
11
+ export * from './core/index.js';
12
+ // Section implementations (new architecture)
13
+ export * from './sections/index.js';
14
+ // Reusable components (new architecture)
15
+ export * from './components/index.js';
16
+ // Legacy exports (for backwards compatibility during migration)
17
+ export * from './Menu.js';
18
+ export * from './ExploreMenu.js';
19
+ // GameUI using new section-based architecture
20
+ export { GameUI, getGameUI } from './GameUIAdapter.js';
21
+ export { MIN_TERMINAL_SIZE } from './Screen.js';
22
+ //# sourceMappingURL=index.js.map
23
+ //# debugId=74b5f710-eaba-58e5-a6f8-fff472c34e7f
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["tui/index.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * TUI Module Exports\r\n * Terminal User Interface system with section-based architecture\r\n */\r\n\r\n// Low-level screen and input\r\nexport * from './Screen.js';\r\nexport * from './Input.js';\r\n\r\n// Core types and classes (new architecture)\r\nexport * from './core/index.js';\r\n\r\n// Section implementations (new architecture)\r\nexport * from './sections/index.js';\r\n\r\n// Reusable components (new architecture)\r\nexport * from './components/index.js';\r\n\r\n// Legacy exports (for backwards compatibility during migration)\r\nexport * from './Menu.js';\r\nexport * from './ExploreMenu.js';\r\n\r\n// GameUI using new section-based architecture\r\nexport { GameUI, getGameUI } from './GameUIAdapter.js';\r\nexport type { UIMode, DialogOption } from './GameUIAdapter.js';\r\n\r\nexport { MIN_TERMINAL_SIZE } from './Screen.js';\r\n"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,6BAA6B;;;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAE3B,4CAA4C;AAC5C,cAAc,iBAAiB,CAAC;AAEhC,6CAA6C;AAC7C,cAAc,qBAAqB,CAAC;AAEpC,yCAAyC;AACzC,cAAc,uBAAuB,CAAC;AAEtC,gEAAgE;AAChE,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AAEjC,8CAA8C;AAC9C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC","debug_id":"74b5f710-eaba-58e5-a6f8-fff472c34e7f"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * BaseScreen - Base class for all screens in IdleRPG
3
+ * Provides common functionality for screen lifecycle and rendering
4
+ */
5
+ import { type Screen } from '../Screen.js';
6
+ import type { KeyEvent } from '../Input.js';
7
+ /**
8
+ * Screen lifecycle interface
9
+ */
10
+ export interface ScreenLifecycle {
11
+ onEnter(params?: unknown): Promise<void>;
12
+ onLeave(): Promise<void>;
13
+ onResize(width: number, height: number): void;
14
+ }
15
+ /**
16
+ * Base screen class
17
+ */
18
+ export declare abstract class BaseScreen implements ScreenLifecycle {
19
+ protected screen: Screen;
20
+ protected width: number;
21
+ protected height: number;
22
+ protected isActive: boolean;
23
+ constructor();
24
+ /**
25
+ * Called when screen becomes active
26
+ */
27
+ onEnter(params?: unknown): Promise<void>;
28
+ /**
29
+ * Called when screen becomes inactive
30
+ */
31
+ onLeave(): Promise<void>;
32
+ /**
33
+ * Called when terminal is resized
34
+ */
35
+ onResize(width: number, height: number): void;
36
+ /**
37
+ * Update screen dimensions
38
+ */
39
+ protected updateDimensions(): void;
40
+ /**
41
+ * Handle key input
42
+ * @returns true if the key was handled
43
+ */
44
+ abstract handleKey(key: KeyEvent): Promise<boolean>;
45
+ /**
46
+ * Render the screen
47
+ */
48
+ abstract render(): void;
49
+ /**
50
+ * Helper: Add an event to the screen's event list (if supported)
51
+ */
52
+ addEvent?(message: string): void;
53
+ /**
54
+ * Helper: Update state from game (if supported)
55
+ */
56
+ updateState?(...args: unknown[]): void;
57
+ /**
58
+ * Helper: Wait for user input (if supported)
59
+ */
60
+ waitForName?(): Promise<string>;
61
+ }
62
+ //# sourceMappingURL=BaseScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseScreen.d.ts","sourceRoot":"/","sources":["tui/screens/BaseScreen.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C;AAED;;GAEG;AACH,8BAAsB,UAAW,YAAW,eAAe;IACzD,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAS;;IASpC;;OAEG;IACG,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ7C;;OAEG;IACH,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAMlC;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAEnD;;OAEG;IACH,QAAQ,CAAC,MAAM,IAAI,IAAI;IAEvB;;OAEG;IACH,QAAQ,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAEhC;;OAEG;IACH,WAAW,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAEtC;;OAEG;IACH,WAAW,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC;CAChC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * BaseScreen - Base class for all screens in IdleRPG
3
+ * Provides common functionality for screen lifecycle and rendering
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]="d19872a7-979f-5db8-8cdf-e82e9658abd8")}catch(e){}}();
7
+ import { getScreen } from '../Screen.js';
8
+ /**
9
+ * Base screen class
10
+ */
11
+ export class BaseScreen {
12
+ screen;
13
+ width;
14
+ height;
15
+ isActive = false;
16
+ constructor() {
17
+ this.screen = getScreen();
18
+ const size = this.screen.getSize();
19
+ this.width = size.width;
20
+ this.height = size.height;
21
+ }
22
+ /**
23
+ * Called when screen becomes active
24
+ */
25
+ async onEnter(params) {
26
+ this.isActive = true;
27
+ this.updateDimensions();
28
+ }
29
+ /**
30
+ * Called when screen becomes inactive
31
+ */
32
+ async onLeave() {
33
+ this.isActive = false;
34
+ }
35
+ /**
36
+ * Called when terminal is resized
37
+ */
38
+ onResize(width, height) {
39
+ this.width = width;
40
+ this.height = height;
41
+ if (this.isActive) {
42
+ this.render();
43
+ }
44
+ }
45
+ /**
46
+ * Update screen dimensions
47
+ */
48
+ updateDimensions() {
49
+ const size = this.screen.getSize();
50
+ this.width = size.width;
51
+ this.height = size.height;
52
+ }
53
+ }
54
+ //# sourceMappingURL=BaseScreen.js.map
55
+ //# debugId=d19872a7-979f-5db8-8cdf-e82e9658abd8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseScreen.js","sources":["tui/screens/BaseScreen.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * BaseScreen - Base class for all screens in IdleRPG\r\n * Provides common functionality for screen lifecycle and rendering\r\n */\r\n\r\nimport { getScreen, type Screen } from '../Screen.js';\r\nimport type { KeyEvent } from '../Input.js';\r\n\r\n/**\r\n * Screen lifecycle interface\r\n */\r\nexport interface ScreenLifecycle {\r\n onEnter(params?: unknown): Promise<void>;\r\n onLeave(): Promise<void>;\r\n onResize(width: number, height: number): void;\r\n}\r\n\r\n/**\r\n * Base screen class\r\n */\r\nexport abstract class BaseScreen implements ScreenLifecycle {\r\n protected screen: Screen;\r\n protected width: number;\r\n protected height: number;\r\n protected isActive: boolean = false;\r\n\r\n constructor() {\r\n this.screen = getScreen();\r\n const size = this.screen.getSize();\r\n this.width = size.width;\r\n this.height = size.height;\r\n }\r\n\r\n /**\r\n * Called when screen becomes active\r\n */\r\n async onEnter(params?: unknown): Promise<void> {\r\n this.isActive = true;\r\n this.updateDimensions();\r\n }\r\n\r\n /**\r\n * Called when screen becomes inactive\r\n */\r\n async onLeave(): Promise<void> {\r\n this.isActive = false;\r\n }\r\n\r\n /**\r\n * Called when terminal is resized\r\n */\r\n onResize(width: number, height: number): void {\r\n this.width = width;\r\n this.height = height;\r\n if (this.isActive) {\r\n this.render();\r\n }\r\n }\r\n\r\n /**\r\n * Update screen dimensions\r\n */\r\n protected updateDimensions(): void {\r\n const size = this.screen.getSize();\r\n this.width = size.width;\r\n this.height = size.height;\r\n }\r\n\r\n /**\r\n * Handle key input\r\n * @returns true if the key was handled\r\n */\r\n abstract handleKey(key: KeyEvent): Promise<boolean>;\r\n\r\n /**\r\n * Render the screen\r\n */\r\n abstract render(): void;\r\n\r\n /**\r\n * Helper: Add an event to the screen's event list (if supported)\r\n */\r\n addEvent?(message: string): void;\r\n\r\n /**\r\n * Helper: Update state from game (if supported)\r\n */\r\n updateState?(...args: unknown[]): void;\r\n\r\n /**\r\n * Helper: Wait for user input (if supported)\r\n */\r\n waitForName?(): Promise<string>;\r\n}\r\n"],"names":[],"mappings":"AAAA;;;GAGG;;;AAEH,OAAO,EAAE,SAAS,EAAe,MAAM,cAAc,CAAC;AAYtD;;GAEG;AACH,MAAM,OAAgB,UAAU;IACpB,MAAM,CAAS;IACf,KAAK,CAAS;IACd,MAAM,CAAS;IACf,QAAQ,GAAY,KAAK,CAAC;IAEpC;QACE,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAgB;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAa,EAAE,MAAc;QACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;OAEG;IACO,gBAAgB;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC5B,CAAC;CA2BF","debug_id":"d19872a7-979f-5db8-8cdf-e82e9658abd8"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Combat Screen - Displays combat state and allows strategy selection
3
+ */
4
+ import { BaseScreen } from '../../app/screens/BaseScreen.js';
5
+ import type { KeyEvent } from '../Input.js';
6
+ import type { CombatState, Player } from '../../core/types.js';
7
+ /**
8
+ * Combat Screen Data
9
+ */
10
+ export interface CombatScreenData {
11
+ combat: CombatState;
12
+ player: Player;
13
+ }
14
+ /**
15
+ * Combat Screen - Combat interface with strategy selection
16
+ */
17
+ export declare class CombatScreen extends BaseScreen {
18
+ private data;
19
+ private padding;
20
+ private onStrategyChange?;
21
+ private onAddLog?;
22
+ /**
23
+ * Set strategy change handler
24
+ */
25
+ setOnStrategyChange(handler: (strategy: string) => void): void;
26
+ /**
27
+ * Set log handler
28
+ */
29
+ setOnAddLog(handler: (message: string) => void): void;
30
+ /**
31
+ * Update combat data
32
+ */
33
+ updateData(data: CombatScreenData): void;
34
+ /**
35
+ * Handle key input
36
+ */
37
+ handleKey(key: KeyEvent): Promise<boolean>;
38
+ /**
39
+ * Render the combat screen
40
+ */
41
+ render(): void;
42
+ }
43
+ //# sourceMappingURL=CombatScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CombatScreen.d.ts","sourceRoot":"/","sources":["tui/screens/CombatScreen.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,OAAO,CAAC,IAAI,CAAiC;IAC7C,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,gBAAgB,CAAC,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAC,CAA4B;IAE7C;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI9D;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIrD;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAIxC;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBhD;;OAEG;IACH,MAAM,IAAI,IAAI;CAsEf"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Combat Screen - Displays combat state and allows strategy selection
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]="7e15d78e-e7bd-5f84-bd53-0495ff4963f1")}catch(e){}}();
6
+ import { BaseScreen } from '../../app/screens/BaseScreen.js';
7
+ import { ANSI } from '../Screen.js';
8
+ /**
9
+ * Combat Screen - Combat interface with strategy selection
10
+ */
11
+ export class CombatScreen extends BaseScreen {
12
+ data = null;
13
+ padding = 2;
14
+ onStrategyChange;
15
+ onAddLog;
16
+ /**
17
+ * Set strategy change handler
18
+ */
19
+ setOnStrategyChange(handler) {
20
+ this.onStrategyChange = handler;
21
+ }
22
+ /**
23
+ * Set log handler
24
+ */
25
+ setOnAddLog(handler) {
26
+ this.onAddLog = handler;
27
+ }
28
+ /**
29
+ * Update combat data
30
+ */
31
+ updateData(data) {
32
+ this.data = data;
33
+ }
34
+ /**
35
+ * Handle key input
36
+ */
37
+ async handleKey(key) {
38
+ switch (key.name) {
39
+ case '1':
40
+ this.onAddLog?.('Strategy: Aggressive');
41
+ this.onStrategyChange?.('aggressive');
42
+ return true;
43
+ case '2':
44
+ this.onAddLog?.('Strategy: Defensive');
45
+ this.onStrategyChange?.('defensive');
46
+ return true;
47
+ case '3':
48
+ this.onAddLog?.('Strategy: Balanced');
49
+ this.onStrategyChange?.('balanced');
50
+ return true;
51
+ case '4':
52
+ this.onAddLog?.('Strategy: Skill Focus');
53
+ this.onStrategyChange?.('skill');
54
+ return true;
55
+ case 'escape':
56
+ this.onAddLog?.('Cannot flee from combat!');
57
+ return true;
58
+ }
59
+ return false;
60
+ }
61
+ /**
62
+ * Render the combat screen
63
+ */
64
+ render() {
65
+ if (!this.data)
66
+ return;
67
+ const { combat, player } = this.data;
68
+ const px = this.padding;
69
+ const py = this.padding;
70
+ const width = this.width - this.padding * 2;
71
+ const height = this.height - this.padding * 2;
72
+ this.screen.clear();
73
+ // Combat box (centered)
74
+ const boxWidth = Math.min(70, width - 4);
75
+ const boxHeight = Math.min(25, height - 4);
76
+ const boxX = px + Math.floor((width - boxWidth) / 2);
77
+ const boxY = py + Math.floor((height - boxHeight) / 2);
78
+ this.screen.drawBox(boxX, boxY, boxWidth, boxHeight, '== COMBAT ==', true);
79
+ let lineY = boxY + 2;
80
+ // Player HP
81
+ this.screen.write(boxX + 3, lineY, `[${player.name}]`, ANSI.fg.brightGreen);
82
+ lineY++;
83
+ this.screen.write(boxX + 3, lineY, 'HP: ', ANSI.fg.white);
84
+ this.screen.drawProgressBar(boxX + 7, lineY, 20, combat.playerHp, player.stats.maxHp, ANSI.fg.red);
85
+ this.screen.write(boxX + 28, lineY, `${combat.playerHp}/${player.stats.maxHp}`, ANSI.fg.white);
86
+ lineY += 2;
87
+ // Enemies section
88
+ this.screen.write(boxX + 3, lineY, '--- Enemies ---', ANSI.fg.cyan);
89
+ lineY++;
90
+ for (const enemy of combat.enemies) {
91
+ const isAlive = enemy.hp > 0;
92
+ const color = isAlive ? ANSI.fg.red : ANSI.fg.gray;
93
+ const status = isAlive ? '' : ' [DEFEATED]';
94
+ this.screen.write(boxX + 3, lineY, `${enemy.name}${status}`, color);
95
+ lineY++;
96
+ if (isAlive) {
97
+ this.screen.write(boxX + 5, lineY, 'HP: ', ANSI.fg.white);
98
+ this.screen.drawProgressBar(boxX + 9, lineY, 15, enemy.hp, enemy.maxHp, ANSI.fg.red);
99
+ this.screen.write(boxX + 25, lineY, `${enemy.hp}/${enemy.maxHp}`, ANSI.fg.gray);
100
+ }
101
+ lineY++;
102
+ }
103
+ lineY++;
104
+ // Combat log
105
+ this.screen.write(boxX + 3, lineY, '--- Battle Log ---', ANSI.fg.cyan);
106
+ lineY++;
107
+ const logStart = Math.max(0, combat.log.length - 5);
108
+ for (let i = logStart; i < combat.log.length; i++) {
109
+ const entry = combat.log[i];
110
+ this.screen.write(boxX + 3, lineY, `> ${entry.message}`.slice(0, boxWidth - 6), ANSI.fg.gray);
111
+ lineY++;
112
+ }
113
+ // Strategy options
114
+ lineY = boxY + boxHeight - 4;
115
+ this.screen.write(boxX + 3, lineY, 'Strategy: [1]Aggressive [2]Defensive [3]Balanced [4]Skills', ANSI.fg.yellow);
116
+ lineY++;
117
+ this.screen.write(boxX + 3, lineY, `Current: ${combat.strategy}`, ANSI.fg.white);
118
+ // Real time clock
119
+ const time = new Date().toLocaleTimeString('en-US', { hour12: false });
120
+ this.screen.write(boxX + boxWidth - 10, boxY + 1, time, ANSI.fg.gray);
121
+ this.screen.render();
122
+ }
123
+ }
124
+ //# sourceMappingURL=CombatScreen.js.map
125
+ //# debugId=7e15d78e-e7bd-5f84-bd53-0495ff4963f1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CombatScreen.js","sources":["tui/screens/CombatScreen.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Combat Screen - Displays combat state and allows strategy selection\r\n */\r\n\r\nimport { BaseScreen } from '../../app/screens/BaseScreen.js';\r\nimport type { KeyEvent } from '../Input.js';\r\nimport { ANSI } from '../Screen.js';\r\nimport type { CombatState, Player } from '../../core/types.js';\r\n\r\n/**\r\n * Combat Screen Data\r\n */\r\nexport interface CombatScreenData {\r\n combat: CombatState;\r\n player: Player;\r\n}\r\n\r\n/**\r\n * Combat Screen - Combat interface with strategy selection\r\n */\r\nexport class CombatScreen extends BaseScreen {\r\n private data: CombatScreenData | null = null;\r\n private padding: number = 2;\r\n private onStrategyChange?: (strategy: string) => void;\r\n private onAddLog?: (message: string) => void;\r\n\r\n /**\r\n * Set strategy change handler\r\n */\r\n setOnStrategyChange(handler: (strategy: string) => void): void {\r\n this.onStrategyChange = handler;\r\n }\r\n\r\n /**\r\n * Set log handler\r\n */\r\n setOnAddLog(handler: (message: string) => void): void {\r\n this.onAddLog = handler;\r\n }\r\n\r\n /**\r\n * Update combat data\r\n */\r\n updateData(data: CombatScreenData): void {\r\n this.data = data;\r\n }\r\n\r\n /**\r\n * Handle key input\r\n */\r\n async handleKey(key: KeyEvent): Promise<boolean> {\r\n switch (key.name) {\r\n case '1':\r\n this.onAddLog?.('Strategy: Aggressive');\r\n this.onStrategyChange?.('aggressive');\r\n return true;\r\n case '2':\r\n this.onAddLog?.('Strategy: Defensive');\r\n this.onStrategyChange?.('defensive');\r\n return true;\r\n case '3':\r\n this.onAddLog?.('Strategy: Balanced');\r\n this.onStrategyChange?.('balanced');\r\n return true;\r\n case '4':\r\n this.onAddLog?.('Strategy: Skill Focus');\r\n this.onStrategyChange?.('skill');\r\n return true;\r\n case 'escape':\r\n this.onAddLog?.('Cannot flee from combat!');\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Render the combat screen\r\n */\r\n render(): void {\r\n if (!this.data) return;\r\n\r\n const { combat, player } = this.data;\r\n const px = this.padding;\r\n const py = this.padding;\r\n const width = this.width - this.padding * 2;\r\n const height = this.height - this.padding * 2;\r\n\r\n this.screen.clear();\r\n\r\n // Combat box (centered)\r\n const boxWidth = Math.min(70, width - 4);\r\n const boxHeight = Math.min(25, height - 4);\r\n const boxX = px + Math.floor((width - boxWidth) / 2);\r\n const boxY = py + Math.floor((height - boxHeight) / 2);\r\n\r\n this.screen.drawBox(boxX, boxY, boxWidth, boxHeight, '== COMBAT ==', true);\r\n\r\n let lineY = boxY + 2;\r\n\r\n // Player HP\r\n this.screen.write(boxX + 3, lineY, `[${player.name}]`, ANSI.fg.brightGreen);\r\n lineY++;\r\n this.screen.write(boxX + 3, lineY, 'HP: ', ANSI.fg.white);\r\n this.screen.drawProgressBar(boxX + 7, lineY, 20, combat.playerHp, player.stats.maxHp, ANSI.fg.red);\r\n this.screen.write(boxX + 28, lineY, `${combat.playerHp}/${player.stats.maxHp}`, ANSI.fg.white);\r\n lineY += 2;\r\n\r\n // Enemies section\r\n this.screen.write(boxX + 3, lineY, '--- Enemies ---', ANSI.fg.cyan);\r\n lineY++;\r\n for (const enemy of combat.enemies) {\r\n const isAlive = enemy.hp > 0;\r\n const color = isAlive ? ANSI.fg.red : ANSI.fg.gray;\r\n const status = isAlive ? '' : ' [DEFEATED]';\r\n\r\n this.screen.write(boxX + 3, lineY, `${enemy.name}${status}`, color);\r\n lineY++;\r\n if (isAlive) {\r\n this.screen.write(boxX + 5, lineY, 'HP: ', ANSI.fg.white);\r\n this.screen.drawProgressBar(boxX + 9, lineY, 15, enemy.hp, enemy.maxHp, ANSI.fg.red);\r\n this.screen.write(boxX + 25, lineY, `${enemy.hp}/${enemy.maxHp}`, ANSI.fg.gray);\r\n }\r\n lineY++;\r\n }\r\n lineY++;\r\n\r\n // Combat log\r\n this.screen.write(boxX + 3, lineY, '--- Battle Log ---', ANSI.fg.cyan);\r\n lineY++;\r\n const logStart = Math.max(0, combat.log.length - 5);\r\n for (let i = logStart; i < combat.log.length; i++) {\r\n const entry = combat.log[i];\r\n this.screen.write(boxX + 3, lineY, `> ${entry.message}`.slice(0, boxWidth - 6), ANSI.fg.gray);\r\n lineY++;\r\n }\r\n\r\n // Strategy options\r\n lineY = boxY + boxHeight - 4;\r\n this.screen.write(boxX + 3, lineY, 'Strategy: [1]Aggressive [2]Defensive [3]Balanced [4]Skills', ANSI.fg.yellow);\r\n lineY++;\r\n this.screen.write(boxX + 3, lineY, `Current: ${combat.strategy}`, ANSI.fg.white);\r\n\r\n // Real time clock\r\n const time = new Date().toLocaleTimeString('en-US', { hour12: false });\r\n this.screen.write(boxX + boxWidth - 10, boxY + 1, time, ANSI.fg.gray);\r\n\r\n this.screen.render();\r\n }\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"7e15d78e-e7bd-5f84-bd53-0495ff4963f1"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Dialog Screen - NPC conversation interface
3
+ */
4
+ import { BaseScreen } from '../../app/screens/BaseScreen.js';
5
+ import type { KeyEvent } from '../Input.js';
6
+ import type { ExtendedNPC } from '../../npc/types.js';
7
+ /**
8
+ * Dialog option
9
+ */
10
+ export interface DialogOption {
11
+ key: string;
12
+ text: string;
13
+ action: string;
14
+ }
15
+ /**
16
+ * Dialog history entry
17
+ */
18
+ export interface DialogHistoryEntry {
19
+ role: string;
20
+ text: string;
21
+ }
22
+ /**
23
+ * Dialog Screen Data
24
+ */
25
+ export interface DialogScreenData {
26
+ npc: ExtendedNPC;
27
+ history: DialogHistoryEntry[];
28
+ options: DialogOption[];
29
+ isWaiting: boolean;
30
+ inputBuffer: string;
31
+ }
32
+ /**
33
+ * Dialog Screen - NPC conversation interface
34
+ */
35
+ export declare class DialogScreen extends BaseScreen {
36
+ private data;
37
+ private padding;
38
+ /**
39
+ * Update dialog data
40
+ */
41
+ updateData(data: DialogScreenData): void;
42
+ /**
43
+ * Handle key input
44
+ * Note: Dialog mode typically uses line input, so key handling
45
+ * is minimal here. Input is handled by the input manager.
46
+ */
47
+ handleKey(key: KeyEvent): Promise<boolean>;
48
+ /**
49
+ * Render the dialog screen
50
+ */
51
+ render(): void;
52
+ }
53
+ //# sourceMappingURL=DialogScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DialogScreen.d.ts","sourceRoot":"/","sources":["tui/screens/DialogScreen.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,WAAW,CAAC;IACjB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,OAAO,CAAC,IAAI,CAAiC;IAC7C,OAAO,CAAC,OAAO,CAAa;IAE5B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAIxC;;;;OAIG;IACG,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhD;;OAEG;IACH,MAAM,IAAI,IAAI;CAuEf"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Dialog Screen - NPC conversation interface
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]="db88f12f-5bab-5409-a288-ef6a064bdf78")}catch(e){}}();
6
+ import { BaseScreen } from '../../app/screens/BaseScreen.js';
7
+ import { ANSI } from '../Screen.js';
8
+ /**
9
+ * Dialog Screen - NPC conversation interface
10
+ */
11
+ export class DialogScreen extends BaseScreen {
12
+ data = null;
13
+ padding = 2;
14
+ /**
15
+ * Update dialog data
16
+ */
17
+ updateData(data) {
18
+ this.data = data;
19
+ }
20
+ /**
21
+ * Handle key input
22
+ * Note: Dialog mode typically uses line input, so key handling
23
+ * is minimal here. Input is handled by the input manager.
24
+ */
25
+ async handleKey(key) {
26
+ return false;
27
+ }
28
+ /**
29
+ * Render the dialog screen
30
+ */
31
+ render() {
32
+ if (!this.data)
33
+ return;
34
+ const { npc, history, options, isWaiting, inputBuffer } = this.data;
35
+ const px = this.padding;
36
+ const py = this.padding;
37
+ const width = this.width - this.padding * 2;
38
+ const height = this.height - this.padding * 2;
39
+ this.screen.clear();
40
+ // Dialog box (centered)
41
+ const boxWidth = Math.min(70, width - 4);
42
+ const boxHeight = Math.min(25, height - 4);
43
+ const boxX = px + Math.floor((width - boxWidth) / 2);
44
+ const boxY = py + Math.floor((height - boxHeight) / 2);
45
+ this.screen.drawBox(boxX, boxY, boxWidth, boxHeight, `${npc.name} (${npc.role})`, true);
46
+ let lineY = boxY + 2;
47
+ // NPC appearance
48
+ this.screen.write(boxX + 3, lineY, npc.appearance.slice(0, boxWidth - 6), ANSI.fg.gray);
49
+ lineY += 2;
50
+ // Dialog history
51
+ const maxHistory = boxHeight - 12;
52
+ const historyStart = Math.max(0, history.length - maxHistory);
53
+ for (let i = historyStart; i < history.length; i++) {
54
+ const entry = history[i];
55
+ const prefix = entry.role === 'player' ? '[You] ' : `[${npc.name}] `;
56
+ const color = entry.role === 'player' ? ANSI.fg.cyan : ANSI.fg.yellow;
57
+ this.screen.write(boxX + 3, lineY, prefix, color);
58
+ // Word wrap text
59
+ const textWidth = boxWidth - 8;
60
+ const text = entry.text;
61
+ for (let j = 0; j < text.length && lineY < boxY + boxHeight - 6; j += textWidth) {
62
+ const line = j === 0 ? text.slice(j, j + textWidth - prefix.length) : text.slice(j, j + textWidth);
63
+ this.screen.write(j === 0 ? boxX + 3 + prefix.length : boxX + 3, lineY, line, ANSI.fg.white);
64
+ lineY++;
65
+ }
66
+ }
67
+ // Waiting indicator
68
+ if (isWaiting) {
69
+ this.screen.write(boxX + 3, lineY, '| Thinking...', ANSI.fg.gray);
70
+ lineY++;
71
+ }
72
+ // Quick options
73
+ lineY = boxY + boxHeight - 6;
74
+ this.screen.write(boxX + 3, lineY, '--- Quick Options ---', ANSI.fg.cyan);
75
+ lineY++;
76
+ for (const option of options.slice(0, 3)) {
77
+ this.screen.write(boxX + 3, lineY, `[${option.key}] ${option.text}`, ANSI.fg.gray);
78
+ lineY++;
79
+ }
80
+ // Input area
81
+ lineY = boxY + boxHeight - 2;
82
+ this.screen.write(boxX + 3, lineY, 'Say: ' + inputBuffer + '|', ANSI.fg.white);
83
+ // Real time clock
84
+ const time = new Date().toLocaleTimeString('en-US', { hour12: false });
85
+ this.screen.write(boxX + boxWidth - 10, boxY + 1, time, ANSI.fg.gray);
86
+ this.screen.render();
87
+ }
88
+ }
89
+ //# sourceMappingURL=DialogScreen.js.map
90
+ //# debugId=db88f12f-5bab-5409-a288-ef6a064bdf78
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DialogScreen.js","sources":["tui/screens/DialogScreen.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Dialog Screen - NPC conversation interface\r\n */\r\n\r\nimport { BaseScreen } from '../../app/screens/BaseScreen.js';\r\nimport type { KeyEvent } from '../Input.js';\r\nimport { ANSI } from '../Screen.js';\r\nimport type { ExtendedNPC } from '../../npc/types.js';\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 * Dialog history entry\r\n */\r\nexport interface DialogHistoryEntry {\r\n role: string;\r\n text: string;\r\n}\r\n\r\n/**\r\n * Dialog Screen Data\r\n */\r\nexport interface DialogScreenData {\r\n npc: ExtendedNPC;\r\n history: DialogHistoryEntry[];\r\n options: DialogOption[];\r\n isWaiting: boolean;\r\n inputBuffer: string;\r\n}\r\n\r\n/**\r\n * Dialog Screen - NPC conversation interface\r\n */\r\nexport class DialogScreen extends BaseScreen {\r\n private data: DialogScreenData | null = null;\r\n private padding: number = 2;\r\n\r\n /**\r\n * Update dialog data\r\n */\r\n updateData(data: DialogScreenData): void {\r\n this.data = data;\r\n }\r\n\r\n /**\r\n * Handle key input\r\n * Note: Dialog mode typically uses line input, so key handling\r\n * is minimal here. Input is handled by the input manager.\r\n */\r\n async handleKey(key: KeyEvent): Promise<boolean> {\r\n return false;\r\n }\r\n\r\n /**\r\n * Render the dialog screen\r\n */\r\n render(): void {\r\n if (!this.data) return;\r\n\r\n const { npc, history, options, isWaiting, inputBuffer } = this.data;\r\n const px = this.padding;\r\n const py = this.padding;\r\n const width = this.width - this.padding * 2;\r\n const height = this.height - this.padding * 2;\r\n\r\n this.screen.clear();\r\n\r\n // Dialog box (centered)\r\n const boxWidth = Math.min(70, width - 4);\r\n const boxHeight = Math.min(25, height - 4);\r\n const boxX = px + Math.floor((width - boxWidth) / 2);\r\n const boxY = py + Math.floor((height - boxHeight) / 2);\r\n\r\n this.screen.drawBox(boxX, boxY, boxWidth, boxHeight, `${npc.name} (${npc.role})`, true);\r\n\r\n let lineY = boxY + 2;\r\n\r\n // NPC appearance\r\n this.screen.write(boxX + 3, lineY, npc.appearance.slice(0, boxWidth - 6), ANSI.fg.gray);\r\n lineY += 2;\r\n\r\n // Dialog history\r\n const maxHistory = boxHeight - 12;\r\n const historyStart = Math.max(0, history.length - maxHistory);\r\n\r\n for (let i = historyStart; i < history.length; i++) {\r\n const entry = history[i];\r\n const prefix = entry.role === 'player' ? '[You] ' : `[${npc.name}] `;\r\n const color = entry.role === 'player' ? ANSI.fg.cyan : ANSI.fg.yellow;\r\n\r\n this.screen.write(boxX + 3, lineY, prefix, color);\r\n\r\n // Word wrap text\r\n const textWidth = boxWidth - 8;\r\n const text = entry.text;\r\n for (let j = 0; j < text.length && lineY < boxY + boxHeight - 6; j += textWidth) {\r\n const line = j === 0 ? text.slice(j, j + textWidth - prefix.length) : text.slice(j, j + textWidth);\r\n this.screen.write(j === 0 ? boxX + 3 + prefix.length : boxX + 3, lineY, line, ANSI.fg.white);\r\n lineY++;\r\n }\r\n }\r\n\r\n // Waiting indicator\r\n if (isWaiting) {\r\n this.screen.write(boxX + 3, lineY, '| Thinking...', ANSI.fg.gray);\r\n lineY++;\r\n }\r\n\r\n // Quick options\r\n lineY = boxY + boxHeight - 6;\r\n this.screen.write(boxX + 3, lineY, '--- Quick Options ---', ANSI.fg.cyan);\r\n lineY++;\r\n for (const option of options.slice(0, 3)) {\r\n this.screen.write(boxX + 3, lineY, `[${option.key}] ${option.text}`, ANSI.fg.gray);\r\n lineY++;\r\n }\r\n\r\n // Input area\r\n lineY = boxY + boxHeight - 2;\r\n this.screen.write(boxX + 3, lineY, 'Say: ' + inputBuffer + '|', ANSI.fg.white);\r\n\r\n // Real time clock\r\n const time = new Date().toLocaleTimeString('en-US', { hour12: false });\r\n this.screen.write(boxX + boxWidth - 10, boxY + 1, time, ANSI.fg.gray);\r\n\r\n this.screen.render();\r\n }\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"db88f12f-5bab-5409-a288-ef6a064bdf78"}