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,123 @@
1
+ /**
2
+ * Route-based Navigation System
3
+ * Inspired by opencode's RouteProvider pattern
4
+ */
5
+ import { EventEmitter } from 'events';
6
+ /**
7
+ * Route definitions
8
+ */
9
+ export type RouteType = {
10
+ type: 'title';
11
+ } | {
12
+ type: 'home';
13
+ } | {
14
+ type: 'explore';
15
+ roomId?: string;
16
+ } | {
17
+ type: 'dialog';
18
+ npcId: string;
19
+ } | {
20
+ type: 'combat';
21
+ encounterId: string;
22
+ } | {
23
+ type: 'travel';
24
+ targetRoomId: string;
25
+ phase?: 'traveling_to_dungeon' | 'returning_to_town';
26
+ } | {
27
+ type: 'inventory';
28
+ } | {
29
+ type: 'character';
30
+ } | {
31
+ type: 'quests';
32
+ } | {
33
+ type: 'workshop';
34
+ subMode?: 'main' | 'view' | 'forge' | 'research';
35
+ } | {
36
+ type: 'save';
37
+ } | {
38
+ type: 'load';
39
+ } | {
40
+ type: 'help';
41
+ } | {
42
+ type: 'settings';
43
+ } | {
44
+ type: 'gameover';
45
+ } | {
46
+ type: 'npcSelection';
47
+ npcs: string[];
48
+ } | {
49
+ type: 'dungeonSelection';
50
+ dungeons: string[];
51
+ } | {
52
+ type: 'prologue';
53
+ } | {
54
+ type: 'characterCreation';
55
+ } | {
56
+ type: 'dungeon';
57
+ dungeonId: string;
58
+ } | {
59
+ type: 'dead';
60
+ };
61
+ /**
62
+ * Router events
63
+ */
64
+ export interface RouterEvents {
65
+ 'navigate': (route: RouteType, prev: RouteType | null) => void;
66
+ 'back': (route: RouteType) => void;
67
+ }
68
+ /**
69
+ * Router class - manages navigation between game screens
70
+ */
71
+ declare class Router extends EventEmitter {
72
+ private currentRoute;
73
+ private history;
74
+ private maxHistoryLength;
75
+ constructor();
76
+ /**
77
+ * Get current route
78
+ */
79
+ get current(): RouteType;
80
+ /**
81
+ * Navigate to a new route
82
+ */
83
+ navigate(route: RouteType): void;
84
+ /**
85
+ * Go back to previous route
86
+ */
87
+ back(): boolean;
88
+ /**
89
+ * Check if can go back
90
+ */
91
+ canGoBack(): boolean;
92
+ /**
93
+ * Replace current route (no history)
94
+ */
95
+ replace(route: RouteType): void;
96
+ /**
97
+ * Clear history
98
+ */
99
+ clearHistory(): void;
100
+ /**
101
+ * Get route type name
102
+ */
103
+ getRouteName(route?: RouteType): string;
104
+ /**
105
+ * Check if on a specific route type
106
+ */
107
+ isRoute(type: RouteType['type']): boolean;
108
+ /**
109
+ * Check if two routes are the same
110
+ */
111
+ private isSameRoute;
112
+ /**
113
+ * Subscribe to navigation events
114
+ */
115
+ onNavigate(callback: (route: RouteType, prev: RouteType | null) => void): () => void;
116
+ /**
117
+ * Subscribe to back events
118
+ */
119
+ onBack(callback: (route: RouteType) => void): () => void;
120
+ }
121
+ export declare function getRouter(): Router;
122
+ export { Router };
123
+ //# sourceMappingURL=Router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Router.d.ts","sourceRoot":"/","sources":["app/Router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,sBAAsB,GAAG,mBAAmB,CAAA;CAAE,GAC9F;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAEpB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAEhD;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAUrB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/D,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACpC;AAED;;GAEG;AACH,cAAM,MAAO,SAAQ,YAAY;IAC/B,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,gBAAgB,CAAM;;IAM9B;;OAEG;IACH,IAAI,OAAO,IAAI,SAAS,CAEvB;IAED;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAuBhC;;OAEG;IACH,IAAI,IAAI,OAAO;IAWf;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAM/B;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,YAAY,CAAC,KAAK,GAAE,SAA6B,GAAG,MAAM;IAI1D;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO;IAIzC;;OAEG;IACH,OAAO,CAAC,WAAW;IA0BnB;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI;IAKpF;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI;CAIzD;AAKD,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Route-based Navigation System
3
+ * Inspired by opencode's RouteProvider pattern
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]="f8cd351e-b4ce-57e2-986e-a4a518de54a2")}catch(e){}}();
7
+ import { EventEmitter } from 'events';
8
+ /**
9
+ * Router class - manages navigation between game screens
10
+ */
11
+ class Router extends EventEmitter {
12
+ currentRoute = { type: 'title' };
13
+ history = [];
14
+ maxHistoryLength = 50;
15
+ constructor() {
16
+ super();
17
+ }
18
+ /**
19
+ * Get current route
20
+ */
21
+ get current() {
22
+ return this.currentRoute;
23
+ }
24
+ /**
25
+ * Navigate to a new route
26
+ */
27
+ navigate(route) {
28
+ const prev = this.currentRoute;
29
+ // Don't navigate to same route
30
+ if (this.isSameRoute(route, prev)) {
31
+ return;
32
+ }
33
+ // Add to history
34
+ this.history.push({
35
+ route: prev,
36
+ timestamp: Date.now(),
37
+ });
38
+ // Trim history
39
+ if (this.history.length > this.maxHistoryLength) {
40
+ this.history = this.history.slice(-this.maxHistoryLength);
41
+ }
42
+ this.currentRoute = route;
43
+ this.emit('navigate', route, prev);
44
+ }
45
+ /**
46
+ * Go back to previous route
47
+ */
48
+ back() {
49
+ if (this.history.length === 0) {
50
+ return false;
51
+ }
52
+ const entry = this.history.pop();
53
+ this.currentRoute = entry.route;
54
+ this.emit('back', entry.route);
55
+ return true;
56
+ }
57
+ /**
58
+ * Check if can go back
59
+ */
60
+ canGoBack() {
61
+ return this.history.length > 0;
62
+ }
63
+ /**
64
+ * Replace current route (no history)
65
+ */
66
+ replace(route) {
67
+ const prev = this.currentRoute;
68
+ this.currentRoute = route;
69
+ this.emit('navigate', route, prev);
70
+ }
71
+ /**
72
+ * Clear history
73
+ */
74
+ clearHistory() {
75
+ this.history = [];
76
+ }
77
+ /**
78
+ * Get route type name
79
+ */
80
+ getRouteName(route = this.currentRoute) {
81
+ return route.type;
82
+ }
83
+ /**
84
+ * Check if on a specific route type
85
+ */
86
+ isRoute(type) {
87
+ return this.currentRoute.type === type;
88
+ }
89
+ /**
90
+ * Check if two routes are the same
91
+ */
92
+ isSameRoute(a, b) {
93
+ if (a.type !== b.type)
94
+ return false;
95
+ switch (a.type) {
96
+ case 'dialog':
97
+ return b.npcId === a.npcId;
98
+ case 'combat':
99
+ return b.encounterId === a.encounterId;
100
+ case 'travel':
101
+ return b.targetRoomId === a.targetRoomId &&
102
+ b.phase === a.phase;
103
+ case 'explore':
104
+ return b.roomId === a.roomId;
105
+ case 'workshop':
106
+ return b.subMode === a.subMode;
107
+ case 'dungeon':
108
+ return b.dungeonId === a.dungeonId;
109
+ case 'npcSelection':
110
+ return JSON.stringify(b.npcs) === JSON.stringify(a.npcs);
111
+ case 'dungeonSelection':
112
+ return JSON.stringify(b.dungeons) === JSON.stringify(a.dungeons);
113
+ default:
114
+ return true;
115
+ }
116
+ }
117
+ /**
118
+ * Subscribe to navigation events
119
+ */
120
+ onNavigate(callback) {
121
+ this.on('navigate', callback);
122
+ return () => this.off('navigate', callback);
123
+ }
124
+ /**
125
+ * Subscribe to back events
126
+ */
127
+ onBack(callback) {
128
+ this.on('back', callback);
129
+ return () => this.off('back', callback);
130
+ }
131
+ }
132
+ // Singleton instance
133
+ let routerInstance = null;
134
+ export function getRouter() {
135
+ if (!routerInstance) {
136
+ routerInstance = new Router();
137
+ }
138
+ return routerInstance;
139
+ }
140
+ export { Router };
141
+ //# sourceMappingURL=Router.js.map
142
+ //# debugId=f8cd351e-b4ce-57e2-986e-a4a518de54a2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Router.js","sources":["app/Router.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Route-based Navigation System\r\n * Inspired by opencode's RouteProvider pattern\r\n */\r\n\r\nimport { EventEmitter } from 'events';\r\n\r\n/**\r\n * Route definitions\r\n */\r\nexport type RouteType =\r\n | { type: 'title' }\r\n | { type: 'home' }\r\n | { type: 'explore'; roomId?: string }\r\n | { type: 'dialog'; npcId: string }\r\n | { type: 'combat'; encounterId: string }\r\n | { type: 'travel'; targetRoomId: string; phase?: 'traveling_to_dungeon' | 'returning_to_town' }\r\n | { type: 'inventory' }\r\n | { type: 'character' }\r\n | { type: 'quests' }\r\n | { type: 'workshop'; subMode?: 'main' | 'view' | 'forge' | 'research' }\r\n | { type: 'save' }\r\n | { type: 'load' }\r\n | { type: 'help' }\r\n | { type: 'settings' }\r\n | { type: 'gameover' }\r\n // Selection modes (sub-routes)\r\n | { type: 'npcSelection'; npcs: string[] }\r\n | { type: 'dungeonSelection'; dungeons: string[] }\r\n // Full-screen modes\r\n | { type: 'prologue' }\r\n | { type: 'characterCreation' }\r\n | { type: 'dungeon'; dungeonId: string }\r\n | { type: 'dead' };\r\n\r\n/**\r\n * Navigation history entry\r\n */\r\ninterface HistoryEntry {\r\n route: RouteType;\r\n timestamp: number;\r\n}\r\n\r\n/**\r\n * Router events\r\n */\r\nexport interface RouterEvents {\r\n 'navigate': (route: RouteType, prev: RouteType | null) => void;\r\n 'back': (route: RouteType) => void;\r\n}\r\n\r\n/**\r\n * Router class - manages navigation between game screens\r\n */\r\nclass Router extends EventEmitter {\r\n private currentRoute: RouteType = { type: 'title' };\r\n private history: HistoryEntry[] = [];\r\n private maxHistoryLength = 50;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n /**\r\n * Get current route\r\n */\r\n get current(): RouteType {\r\n return this.currentRoute;\r\n }\r\n\r\n /**\r\n * Navigate to a new route\r\n */\r\n navigate(route: RouteType): void {\r\n const prev = this.currentRoute;\r\n \r\n // Don't navigate to same route\r\n if (this.isSameRoute(route, prev)) {\r\n return;\r\n }\r\n\r\n // Add to history\r\n this.history.push({\r\n route: prev,\r\n timestamp: Date.now(),\r\n });\r\n\r\n // Trim history\r\n if (this.history.length > this.maxHistoryLength) {\r\n this.history = this.history.slice(-this.maxHistoryLength);\r\n }\r\n\r\n this.currentRoute = route;\r\n this.emit('navigate', route, prev);\r\n }\r\n\r\n /**\r\n * Go back to previous route\r\n */\r\n back(): boolean {\r\n if (this.history.length === 0) {\r\n return false;\r\n }\r\n\r\n const entry = this.history.pop()!;\r\n this.currentRoute = entry.route;\r\n this.emit('back', entry.route);\r\n return true;\r\n }\r\n\r\n /**\r\n * Check if can go back\r\n */\r\n canGoBack(): boolean {\r\n return this.history.length > 0;\r\n }\r\n\r\n /**\r\n * Replace current route (no history)\r\n */\r\n replace(route: RouteType): void {\r\n const prev = this.currentRoute;\r\n this.currentRoute = route;\r\n this.emit('navigate', route, prev);\r\n }\r\n\r\n /**\r\n * Clear history\r\n */\r\n clearHistory(): void {\r\n this.history = [];\r\n }\r\n\r\n /**\r\n * Get route type name\r\n */\r\n getRouteName(route: RouteType = this.currentRoute): string {\r\n return route.type;\r\n }\r\n\r\n /**\r\n * Check if on a specific route type\r\n */\r\n isRoute(type: RouteType['type']): boolean {\r\n return this.currentRoute.type === type;\r\n }\r\n\r\n /**\r\n * Check if two routes are the same\r\n */\r\n private isSameRoute(a: RouteType, b: RouteType): boolean {\r\n if (a.type !== b.type) return false;\r\n\r\n switch (a.type) {\r\n case 'dialog':\r\n return (b as typeof a).npcId === a.npcId;\r\n case 'combat':\r\n return (b as typeof a).encounterId === a.encounterId;\r\n case 'travel':\r\n return (b as typeof a).targetRoomId === a.targetRoomId &&\r\n (b as typeof a).phase === a.phase;\r\n case 'explore':\r\n return (b as typeof a).roomId === a.roomId;\r\n case 'workshop':\r\n return (b as typeof a).subMode === a.subMode;\r\n case 'dungeon':\r\n return (b as typeof a).dungeonId === a.dungeonId;\r\n case 'npcSelection':\r\n return JSON.stringify((b as typeof a).npcs) === JSON.stringify(a.npcs);\r\n case 'dungeonSelection':\r\n return JSON.stringify((b as typeof a).dungeons) === JSON.stringify(a.dungeons);\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n /**\r\n * Subscribe to navigation events\r\n */\r\n onNavigate(callback: (route: RouteType, prev: RouteType | null) => void): () => void {\r\n this.on('navigate', callback);\r\n return () => this.off('navigate', callback);\r\n }\r\n\r\n /**\r\n * Subscribe to back events\r\n */\r\n onBack(callback: (route: RouteType) => void): () => void {\r\n this.on('back', callback);\r\n return () => this.off('back', callback);\r\n }\r\n}\r\n\r\n// Singleton instance\r\nlet routerInstance: Router | null = null;\r\n\r\nexport function getRouter(): Router {\r\n if (!routerInstance) {\r\n routerInstance = new Router();\r\n }\r\n return routerInstance;\r\n}\r\n\r\nexport { Router };\r\n"],"names":[],"mappings":"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","debug_id":"f8cd351e-b4ce-57e2-986e-a4a518de54a2"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Screen Manager - Orchestrates screen lifecycle and transitions
3
+ */
4
+ import type { BaseScreen } from './screens/BaseScreen.js';
5
+ import { TitleScreen } from './screens/TitleScreen.js';
6
+ import { ExploreScreen } from './screens/ExploreScreen.js';
7
+ import { DialogScreen } from './screens/DialogScreen.js';
8
+ import { InventoryScreen } from './screens/InventoryScreen.js';
9
+ import { HelpScreen } from './screens/HelpScreen.js';
10
+ import { TravelScreen } from './screens/TravelScreen.js';
11
+ import { CombatScreen } from './screens/CombatScreen.js';
12
+ /**
13
+ * Screen registry
14
+ */
15
+ type ScreenRegistry = {
16
+ title: TitleScreen;
17
+ home: TitleScreen;
18
+ explore: ExploreScreen;
19
+ dialog: DialogScreen;
20
+ combat: CombatScreen;
21
+ travel: TravelScreen;
22
+ inventory: InventoryScreen;
23
+ character: BaseScreen;
24
+ quests: BaseScreen;
25
+ workshop: BaseScreen;
26
+ save: BaseScreen;
27
+ load: BaseScreen;
28
+ help: HelpScreen;
29
+ settings: BaseScreen;
30
+ gameover: BaseScreen;
31
+ };
32
+ /**
33
+ * Screen Manager class
34
+ */
35
+ declare class ScreenManager {
36
+ private screens;
37
+ private currentScreen;
38
+ private currentRoute;
39
+ private keyHandler;
40
+ private isInitialized;
41
+ constructor();
42
+ /**
43
+ * Initialize all screens
44
+ */
45
+ private initializeScreens;
46
+ /**
47
+ * Setup router listeners
48
+ */
49
+ private setupRouterListeners;
50
+ /**
51
+ * Setup input handler
52
+ */
53
+ private setupInputHandler;
54
+ /**
55
+ * Setup resize handler
56
+ */
57
+ private setupResizeHandler;
58
+ /**
59
+ * Handle navigation between screens
60
+ */
61
+ private handleNavigation;
62
+ /**
63
+ * Extract params from route
64
+ */
65
+ private getRouteParams;
66
+ /**
67
+ * Handle global keyboard shortcuts
68
+ */
69
+ private handleGlobalKey;
70
+ /**
71
+ * Initialize and start
72
+ */
73
+ start(): Promise<void>;
74
+ /**
75
+ * Cleanup
76
+ */
77
+ cleanup(): Promise<void>;
78
+ /**
79
+ * Get a screen instance
80
+ */
81
+ getScreen<K extends keyof ScreenRegistry>(key: K): ScreenRegistry[K] | undefined;
82
+ /**
83
+ * Register a custom screen
84
+ */
85
+ registerScreen(key: string, screen: BaseScreen): void;
86
+ /**
87
+ * Get current screen
88
+ */
89
+ getCurrentScreen(): BaseScreen | null;
90
+ /**
91
+ * Refresh current screen
92
+ */
93
+ refresh(): void;
94
+ }
95
+ export declare function getScreenManager(): ScreenManager;
96
+ export { ScreenManager };
97
+ //# sourceMappingURL=ScreenManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScreenManager.d.ts","sourceRoot":"/","sources":["app/ScreenManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;GAEG;AACH,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,eAAe,CAAC;IAC3B,SAAS,EAAE,UAAU,CAAC;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,UAAU,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,UAAU,CAAC;IACrB,QAAQ,EAAE,UAAU,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,cAAM,aAAa;IACjB,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,aAAa,CAAkB;;IASvC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuBzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;YACW,gBAAgB;IA0B9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;YACW,eAAe;IAc7B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAY9B;;OAEG;IACH,SAAS,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS;IAIhF;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAIrD;;OAEG;IACH,gBAAgB,IAAI,UAAU,GAAG,IAAI;IAIrC;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB;AAKD,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Screen Manager - Orchestrates screen lifecycle and transitions
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]="44f25950-bd6c-5b96-9103-a2cb407219c5")}catch(e){}}();
6
+ import { getRouter } from './Router.js';
7
+ import { getEventBus } from './EventBus.js';
8
+ import { getScreen } from '../tui/Screen.js';
9
+ import { getInput } from '../tui/Input.js';
10
+ import { TitleScreen } from './screens/TitleScreen.js';
11
+ import { ExploreScreen } from './screens/ExploreScreen.js';
12
+ import { DialogScreen } from './screens/DialogScreen.js';
13
+ import { InventoryScreen } from './screens/InventoryScreen.js';
14
+ import { HelpScreen } from './screens/HelpScreen.js';
15
+ import { TravelScreen } from './screens/TravelScreen.js';
16
+ import { CombatScreen } from './screens/CombatScreen.js';
17
+ /**
18
+ * Screen Manager class
19
+ */
20
+ class ScreenManager {
21
+ screens = new Map();
22
+ currentScreen = null;
23
+ currentRoute = null;
24
+ keyHandler = null;
25
+ isInitialized = false;
26
+ constructor() {
27
+ this.initializeScreens();
28
+ this.setupRouterListeners();
29
+ this.setupInputHandler();
30
+ this.setupResizeHandler();
31
+ }
32
+ /**
33
+ * Initialize all screens
34
+ */
35
+ initializeScreens() {
36
+ // Create screen instances
37
+ this.screens.set('title', new TitleScreen());
38
+ this.screens.set('home', this.screens.get('title'));
39
+ this.screens.set('explore', new ExploreScreen());
40
+ this.screens.set('dialog', new DialogScreen());
41
+ this.screens.set('inventory', new InventoryScreen());
42
+ this.screens.set('help', new HelpScreen());
43
+ this.screens.set('combat', new CombatScreen());
44
+ this.screens.set('travel', new TravelScreen());
45
+ // TODO: Add remaining screens
46
+ // this.screens.set('character', new CharacterScreen());
47
+ // this.screens.set('quests', new QuestsScreen());
48
+ // this.screens.set('workshop', new WorkshopScreen());
49
+ // this.screens.set('save', new SaveScreen());
50
+ // this.screens.set('load', new LoadScreen());
51
+ // this.screens.set('settings', new SettingsScreen());
52
+ // this.screens.set('gameover', new GameOverScreen());
53
+ }
54
+ /**
55
+ * Setup router listeners
56
+ */
57
+ setupRouterListeners() {
58
+ const router = getRouter();
59
+ router.onNavigate(async (route, prev) => {
60
+ await this.handleNavigation(route, prev);
61
+ });
62
+ router.onBack(async (route) => {
63
+ await this.handleNavigation(route, this.currentRoute);
64
+ });
65
+ }
66
+ /**
67
+ * Setup input handler
68
+ */
69
+ setupInputHandler() {
70
+ const input = getInput();
71
+ this.keyHandler = async (key) => {
72
+ // Global exit
73
+ if (key.ctrl && key.name === 'c') {
74
+ await this.cleanup();
75
+ process.exit(0);
76
+ }
77
+ // Delegate to current screen
78
+ if (this.currentScreen) {
79
+ const handled = await this.currentScreen.handleKey(key);
80
+ if (!handled) {
81
+ // Handle global shortcuts
82
+ await this.handleGlobalKey(key);
83
+ }
84
+ }
85
+ };
86
+ input.onKey(this.keyHandler);
87
+ }
88
+ /**
89
+ * Setup resize handler
90
+ */
91
+ setupResizeHandler() {
92
+ const screen = getScreen();
93
+ screen.onResize((width, height) => {
94
+ if (this.currentScreen) {
95
+ this.currentScreen.onResize(width, height);
96
+ }
97
+ });
98
+ }
99
+ /**
100
+ * Handle navigation between screens
101
+ */
102
+ async handleNavigation(route, prev) {
103
+ const screenKey = route.type;
104
+ const newScreen = this.screens.get(screenKey);
105
+ if (!newScreen) {
106
+ console.error(`No screen registered for route: ${screenKey}`);
107
+ getEventBus().toast(`Screen not available: ${screenKey}`, 'warning');
108
+ return;
109
+ }
110
+ // Leave current screen
111
+ if (this.currentScreen) {
112
+ await this.currentScreen.onLeave();
113
+ }
114
+ // Enter new screen
115
+ this.currentScreen = newScreen;
116
+ this.currentRoute = route;
117
+ // Pass route params to screen
118
+ await this.currentScreen.onEnter(this.getRouteParams(route));
119
+ // Render
120
+ this.currentScreen.render();
121
+ }
122
+ /**
123
+ * Extract params from route
124
+ */
125
+ getRouteParams(route) {
126
+ switch (route.type) {
127
+ case 'dialog':
128
+ return { npcId: route.npcId };
129
+ case 'combat':
130
+ return { encounterId: route.encounterId };
131
+ case 'travel':
132
+ return { targetRoomId: route.targetRoomId };
133
+ case 'explore':
134
+ return { roomId: route.roomId };
135
+ default:
136
+ return undefined;
137
+ }
138
+ }
139
+ /**
140
+ * Handle global keyboard shortcuts
141
+ */
142
+ async handleGlobalKey(key) {
143
+ // Global shortcuts that work in all screens
144
+ if (key.ctrl) {
145
+ switch (key.name) {
146
+ case 's':
147
+ getRouter().navigate({ type: 'save' });
148
+ break;
149
+ case 'l':
150
+ getRouter().navigate({ type: 'load' });
151
+ break;
152
+ }
153
+ }
154
+ }
155
+ /**
156
+ * Initialize and start
157
+ */
158
+ async start() {
159
+ if (this.isInitialized)
160
+ return;
161
+ this.isInitialized = true;
162
+ // Start input
163
+ getInput().start();
164
+ // Navigate to title screen
165
+ getRouter().navigate({ type: 'title' });
166
+ }
167
+ /**
168
+ * Cleanup
169
+ */
170
+ async cleanup() {
171
+ if (this.currentScreen) {
172
+ await this.currentScreen.onLeave();
173
+ }
174
+ if (this.keyHandler) {
175
+ getInput().offKey(this.keyHandler);
176
+ }
177
+ getScreen().cleanup();
178
+ }
179
+ /**
180
+ * Get a screen instance
181
+ */
182
+ getScreen(key) {
183
+ return this.screens.get(key);
184
+ }
185
+ /**
186
+ * Register a custom screen
187
+ */
188
+ registerScreen(key, screen) {
189
+ this.screens.set(key, screen);
190
+ }
191
+ /**
192
+ * Get current screen
193
+ */
194
+ getCurrentScreen() {
195
+ return this.currentScreen;
196
+ }
197
+ /**
198
+ * Refresh current screen
199
+ */
200
+ refresh() {
201
+ if (this.currentScreen) {
202
+ this.currentScreen.render();
203
+ }
204
+ }
205
+ }
206
+ // Singleton
207
+ let screenManagerInstance = null;
208
+ export function getScreenManager() {
209
+ if (!screenManagerInstance) {
210
+ screenManagerInstance = new ScreenManager();
211
+ }
212
+ return screenManagerInstance;
213
+ }
214
+ export { ScreenManager };
215
+ //# sourceMappingURL=ScreenManager.js.map
216
+ //# debugId=44f25950-bd6c-5b96-9103-a2cb407219c5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScreenManager.js","sources":["app/ScreenManager.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Screen Manager - Orchestrates screen lifecycle and transitions\r\n */\r\n\r\nimport { getRouter, type RouteType } from './Router.js';\r\nimport { getEventBus } from './EventBus.js';\r\nimport { getScreen } from '../tui/Screen.js';\r\nimport { getInput, type KeyEvent } from '../tui/Input.js';\r\nimport type { BaseScreen } from './screens/BaseScreen.js';\r\n\r\nimport { TitleScreen } from './screens/TitleScreen.js';\r\nimport { ExploreScreen } from './screens/ExploreScreen.js';\r\nimport { DialogScreen } from './screens/DialogScreen.js';\r\nimport { InventoryScreen } from './screens/InventoryScreen.js';\r\nimport { HelpScreen } from './screens/HelpScreen.js';\r\nimport { TravelScreen } from './screens/TravelScreen.js';\r\nimport { CombatScreen } from './screens/CombatScreen.js';\r\n\r\n/**\r\n * Screen registry\r\n */\r\ntype ScreenRegistry = {\r\n title: TitleScreen;\r\n home: TitleScreen; // Same as title for now\r\n explore: ExploreScreen;\r\n dialog: DialogScreen;\r\n combat: CombatScreen;\r\n travel: TravelScreen;\r\n inventory: InventoryScreen;\r\n character: BaseScreen;\r\n quests: BaseScreen;\r\n workshop: BaseScreen;\r\n save: BaseScreen;\r\n load: BaseScreen;\r\n help: HelpScreen;\r\n settings: BaseScreen;\r\n gameover: BaseScreen;\r\n};\r\n\r\n/**\r\n * Screen Manager class\r\n */\r\nclass ScreenManager {\r\n private screens: Map<string, BaseScreen> = new Map();\r\n private currentScreen: BaseScreen | null = null;\r\n private currentRoute: RouteType | null = null;\r\n private keyHandler: ((key: KeyEvent) => void) | null = null;\r\n private isInitialized: boolean = false;\r\n\r\n constructor() {\r\n this.initializeScreens();\r\n this.setupRouterListeners();\r\n this.setupInputHandler();\r\n this.setupResizeHandler();\r\n }\r\n\r\n /**\r\n * Initialize all screens\r\n */\r\n private initializeScreens(): void {\r\n // Create screen instances\r\n this.screens.set('title', new TitleScreen());\r\n this.screens.set('home', this.screens.get('title')!);\r\n this.screens.set('explore', new ExploreScreen());\r\n this.screens.set('dialog', new DialogScreen());\r\n this.screens.set('inventory', new InventoryScreen());\r\n this.screens.set('help', new HelpScreen());\r\n this.screens.set('combat', new CombatScreen());\r\n this.screens.set('travel', new TravelScreen());\r\n \r\n // TODO: Add remaining screens\r\n // this.screens.set('character', new CharacterScreen());\r\n // this.screens.set('quests', new QuestsScreen());\r\n // this.screens.set('workshop', new WorkshopScreen());\r\n // this.screens.set('save', new SaveScreen());\r\n // this.screens.set('load', new LoadScreen());\r\n // this.screens.set('settings', new SettingsScreen());\r\n // this.screens.set('gameover', new GameOverScreen());\r\n }\r\n\r\n /**\r\n * Setup router listeners\r\n */\r\n private setupRouterListeners(): void {\r\n const router = getRouter();\r\n\r\n router.onNavigate(async (route, prev) => {\r\n await this.handleNavigation(route, prev);\r\n });\r\n\r\n router.onBack(async (route) => {\r\n await this.handleNavigation(route, this.currentRoute);\r\n });\r\n }\r\n\r\n /**\r\n * Setup input handler\r\n */\r\n private setupInputHandler(): void {\r\n const input = getInput();\r\n\r\n this.keyHandler = async (key: KeyEvent) => {\r\n // Global exit\r\n if (key.ctrl && key.name === 'c') {\r\n await this.cleanup();\r\n process.exit(0);\r\n }\r\n\r\n // Delegate to current screen\r\n if (this.currentScreen) {\r\n const handled = await this.currentScreen.handleKey(key);\r\n if (!handled) {\r\n // Handle global shortcuts\r\n await this.handleGlobalKey(key);\r\n }\r\n }\r\n };\r\n\r\n input.onKey(this.keyHandler);\r\n }\r\n\r\n /**\r\n * Setup resize handler\r\n */\r\n private setupResizeHandler(): void {\r\n const screen = getScreen();\r\n\r\n screen.onResize((width, height) => {\r\n if (this.currentScreen) {\r\n this.currentScreen.onResize(width, height);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle navigation between screens\r\n */\r\n private async handleNavigation(route: RouteType, prev: RouteType | null): Promise<void> {\r\n const screenKey = route.type;\r\n const newScreen = this.screens.get(screenKey);\r\n\r\n if (!newScreen) {\r\n console.error(`No screen registered for route: ${screenKey}`);\r\n getEventBus().toast(`Screen not available: ${screenKey}`, 'warning');\r\n return;\r\n }\r\n\r\n // Leave current screen\r\n if (this.currentScreen) {\r\n await this.currentScreen.onLeave();\r\n }\r\n\r\n // Enter new screen\r\n this.currentScreen = newScreen;\r\n this.currentRoute = route;\r\n\r\n // Pass route params to screen\r\n await this.currentScreen.onEnter(this.getRouteParams(route));\r\n\r\n // Render\r\n this.currentScreen.render();\r\n }\r\n\r\n /**\r\n * Extract params from route\r\n */\r\n private getRouteParams(route: RouteType): unknown {\r\n switch (route.type) {\r\n case 'dialog':\r\n return { npcId: route.npcId };\r\n case 'combat':\r\n return { encounterId: route.encounterId };\r\n case 'travel':\r\n return { targetRoomId: route.targetRoomId };\r\n case 'explore':\r\n return { roomId: route.roomId };\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Handle global keyboard shortcuts\r\n */\r\n private async handleGlobalKey(key: KeyEvent): Promise<void> {\r\n // Global shortcuts that work in all screens\r\n if (key.ctrl) {\r\n switch (key.name) {\r\n case 's':\r\n getRouter().navigate({ type: 'save' });\r\n break;\r\n case 'l':\r\n getRouter().navigate({ type: 'load' });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Initialize and start\r\n */\r\n async start(): Promise<void> {\r\n if (this.isInitialized) return;\r\n this.isInitialized = true;\r\n\r\n // Start input\r\n getInput().start();\r\n\r\n // Navigate to title screen\r\n getRouter().navigate({ type: 'title' });\r\n }\r\n\r\n /**\r\n * Cleanup\r\n */\r\n async cleanup(): Promise<void> {\r\n if (this.currentScreen) {\r\n await this.currentScreen.onLeave();\r\n }\r\n\r\n if (this.keyHandler) {\r\n getInput().offKey(this.keyHandler);\r\n }\r\n\r\n getScreen().cleanup();\r\n }\r\n\r\n /**\r\n * Get a screen instance\r\n */\r\n getScreen<K extends keyof ScreenRegistry>(key: K): ScreenRegistry[K] | undefined {\r\n return this.screens.get(key) as ScreenRegistry[K] | undefined;\r\n }\r\n\r\n /**\r\n * Register a custom screen\r\n */\r\n registerScreen(key: string, screen: BaseScreen): void {\r\n this.screens.set(key, screen);\r\n }\r\n\r\n /**\r\n * Get current screen\r\n */\r\n getCurrentScreen(): BaseScreen | null {\r\n return this.currentScreen;\r\n }\r\n\r\n /**\r\n * Refresh current screen\r\n */\r\n refresh(): void {\r\n if (this.currentScreen) {\r\n this.currentScreen.render();\r\n }\r\n }\r\n}\r\n\r\n// Singleton\r\nlet screenManagerInstance: ScreenManager | null = null;\r\n\r\nexport function getScreenManager(): ScreenManager {\r\n if (!screenManagerInstance) {\r\n screenManagerInstance = new ScreenManager();\r\n }\r\n return screenManagerInstance;\r\n}\r\n\r\nexport { ScreenManager };\r\n"],"names":[],"mappings":"AAAA;;GAEG;;;AAEH,OAAO,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAiB,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAuBzD;;GAEG;AACH,MAAM,aAAa;IACT,OAAO,GAA4B,IAAI,GAAG,EAAE,CAAC;IAC7C,aAAa,GAAsB,IAAI,CAAC;IACxC,YAAY,GAAqB,IAAI,CAAC;IACtC,UAAU,GAAqC,IAAI,CAAC;IACpD,aAAa,GAAY,KAAK,CAAC;IAEvC;QACE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,0BAA0B;QAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,aAAa,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,YAAY,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,eAAe,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,YAAY,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,YAAY,EAAE,CAAC,CAAC;QAE/C,8BAA8B;QAC9B,wDAAwD;QACxD,kDAAkD;QAClD,sDAAsD;QACtD,8CAA8C;QAC9C,8CAA8C;QAC9C,sDAAsD;QACtD,sDAAsD;IACxD,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtC,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QAEzB,IAAI,CAAC,UAAU,GAAG,KAAK,EAAE,GAAa,EAAE,EAAE;YACxC,cAAc;YACd,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,6BAA6B;YAC7B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACxD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,0BAA0B;oBAC1B,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,KAAgB,EAAE,IAAsB;QACrE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE9C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,SAAS,EAAE,CAAC,CAAC;YAC9D,WAAW,EAAE,CAAC,KAAK,CAAC,yBAAyB,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QACrC,CAAC;QAED,mBAAmB;QACnB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAE1B,8BAA8B;QAC9B,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAE7D,SAAS;QACT,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,KAAgB;QACrC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,QAAQ;gBACX,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAChC,KAAK,QAAQ;gBACX,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;YAC5C,KAAK,QAAQ;gBACX,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;YAC9C,KAAK,SAAS;gBACZ,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YAClC;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,GAAa;QACzC,4CAA4C;QAC5C,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;gBACjB,KAAK,GAAG;oBACN,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;oBACvC,MAAM;gBACR,KAAK,GAAG;oBACN,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;oBACvC,MAAM;YACV,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAE1B,cAAc;QACd,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC;QAEnB,2BAA2B;QAC3B,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QACrC,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;QAED,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,SAAS,CAAiC,GAAM;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAkC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,GAAW,EAAE,MAAkB;QAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED,YAAY;AACZ,IAAI,qBAAqB,GAAyB,IAAI,CAAC;AAEvD,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,qBAAqB,GAAG,IAAI,aAAa,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC","debug_id":"44f25950-bd6c-5b96-9103-a2cb407219c5"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * App Module - Application architecture components
3
+ *
4
+ * This module provides core infrastructure:
5
+ * - Router: Navigation and route management
6
+ * - EventBus: Cross-component event communication
7
+ * - KeybindManager: Keyboard shortcut handling
8
+ * - Screens: Reusable UI screens (Prologue, CharacterCreation)
9
+ */
10
+ export { Router, getRouter, type RouteType } from './Router.js';
11
+ export { EventBus, getEventBus, type GameEvents, type IdleGamePhase } from './EventBus.js';
12
+ export { KeybindManager, getKeybindManager, type KeybindDef, type KeyAction } from './Keybind.js';
13
+ export * from './screens/index.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["app/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGlG,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * App Module - Application architecture components
3
+ *
4
+ * This module provides core infrastructure:
5
+ * - Router: Navigation and route management
6
+ * - EventBus: Cross-component event communication
7
+ * - KeybindManager: Keyboard shortcut handling
8
+ * - Screens: Reusable UI screens (Prologue, CharacterCreation)
9
+ */
10
+ // Core systems
11
+
12
+ !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]="1951712d-f7b4-587a-9d6f-0330a5948a9c")}catch(e){}}();
13
+ export { Router, getRouter } from './Router.js';
14
+ export { EventBus, getEventBus } from './EventBus.js';
15
+ export { KeybindManager, getKeybindManager } from './Keybind.js';
16
+ // Screens
17
+ export * from './screens/index.js';
18
+ //# sourceMappingURL=index.js.map
19
+ //# debugId=1951712d-f7b4-587a-9d6f-0330a5948a9c