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