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,365 @@
1
+ /**
2
+ * Menu System - Option-based navigation
3
+ * Inspired by opencode's DialogSelect 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]="912e81c9-3e36-5ffc-b5b9-573f298e3144")}catch(e){}}();
7
+ import { ANSI, getScreen } from './Screen.js';
8
+ import { getInput } from './Input.js';
9
+ /**
10
+ * Menu renderer and controller
11
+ */
12
+ export class Menu {
13
+ screen;
14
+ config;
15
+ state;
16
+ isActive = false;
17
+ keyHandler = null;
18
+ resolvePromise = null;
19
+ constructor(config) {
20
+ this.screen = getScreen();
21
+ this.config = config;
22
+ this.state = {
23
+ selectedIndex: config.selectedIndex ?? 0,
24
+ scrollOffset: 0,
25
+ searchQuery: '',
26
+ filteredOptions: [...config.options],
27
+ };
28
+ }
29
+ /**
30
+ * Show menu and wait for selection
31
+ */
32
+ async show() {
33
+ this.isActive = true;
34
+ this.setupKeyHandler();
35
+ this.render();
36
+ return new Promise((resolve) => {
37
+ this.resolvePromise = resolve;
38
+ });
39
+ }
40
+ /**
41
+ * Close menu
42
+ */
43
+ close(selected = null) {
44
+ this.isActive = false;
45
+ this.removeKeyHandler();
46
+ if (this.resolvePromise) {
47
+ this.resolvePromise(selected);
48
+ this.resolvePromise = null;
49
+ }
50
+ }
51
+ /**
52
+ * Setup keyboard handler
53
+ */
54
+ setupKeyHandler() {
55
+ const input = getInput();
56
+ this.keyHandler = (key) => {
57
+ if (!this.isActive)
58
+ return;
59
+ switch (key.name) {
60
+ case 'up':
61
+ this.moveSelection(-1);
62
+ break;
63
+ case 'down':
64
+ this.moveSelection(1);
65
+ break;
66
+ case 'pageup':
67
+ this.moveSelection(-10);
68
+ break;
69
+ case 'pagedown':
70
+ this.moveSelection(10);
71
+ break;
72
+ case 'home':
73
+ this.moveToStart();
74
+ break;
75
+ case 'end':
76
+ this.moveToEnd();
77
+ break;
78
+ case 'return':
79
+ this.selectCurrent();
80
+ break;
81
+ case 'escape':
82
+ this.cancel();
83
+ break;
84
+ default:
85
+ // Check for shortcut keys
86
+ if (key.raw && key.raw.length === 1) {
87
+ const shortcutOption = this.state.filteredOptions.find(opt => opt.shortcut?.toLowerCase() === key.raw.toLowerCase());
88
+ if (shortcutOption && !shortcutOption.disabled) {
89
+ this.selectOption(shortcutOption);
90
+ }
91
+ else if (this.config.showSearch) {
92
+ // Add to search query
93
+ this.state.searchQuery += key.raw;
94
+ this.filterOptions();
95
+ }
96
+ }
97
+ else if (key.name === 'backspace' && this.config.showSearch) {
98
+ this.state.searchQuery = this.state.searchQuery.slice(0, -1);
99
+ this.filterOptions();
100
+ }
101
+ }
102
+ this.render();
103
+ };
104
+ input.onKey(this.keyHandler);
105
+ }
106
+ /**
107
+ * Remove keyboard handler
108
+ */
109
+ removeKeyHandler() {
110
+ if (this.keyHandler) {
111
+ getInput().offKey(this.keyHandler);
112
+ this.keyHandler = null;
113
+ }
114
+ }
115
+ /**
116
+ * Move selection
117
+ */
118
+ moveSelection(delta) {
119
+ const options = this.state.filteredOptions.filter(o => !o.disabled);
120
+ if (options.length === 0)
121
+ return;
122
+ let newIndex = this.state.selectedIndex + delta;
123
+ if (newIndex < 0)
124
+ newIndex = options.length - 1;
125
+ if (newIndex >= options.length)
126
+ newIndex = 0;
127
+ this.state.selectedIndex = newIndex;
128
+ this.ensureVisible();
129
+ }
130
+ /**
131
+ * Move to start
132
+ */
133
+ moveToStart() {
134
+ this.state.selectedIndex = 0;
135
+ this.state.scrollOffset = 0;
136
+ }
137
+ /**
138
+ * Move to end
139
+ */
140
+ moveToEnd() {
141
+ const options = this.state.filteredOptions.filter(o => !o.disabled);
142
+ this.state.selectedIndex = options.length - 1;
143
+ this.ensureVisible();
144
+ }
145
+ /**
146
+ * Ensure selected item is visible
147
+ */
148
+ ensureVisible() {
149
+ const maxHeight = this.config.maxHeight ?? 10;
150
+ if (this.state.selectedIndex < this.state.scrollOffset) {
151
+ this.state.scrollOffset = this.state.selectedIndex;
152
+ }
153
+ else if (this.state.selectedIndex >= this.state.scrollOffset + maxHeight) {
154
+ this.state.scrollOffset = this.state.selectedIndex - maxHeight + 1;
155
+ }
156
+ }
157
+ /**
158
+ * Filter options based on search query
159
+ */
160
+ filterOptions() {
161
+ const query = this.state.searchQuery.toLowerCase();
162
+ if (!query) {
163
+ this.state.filteredOptions = [...this.config.options];
164
+ }
165
+ else {
166
+ this.state.filteredOptions = this.config.options.filter(opt => opt.label.toLowerCase().includes(query) ||
167
+ opt.description?.toLowerCase().includes(query) ||
168
+ opt.category?.toLowerCase().includes(query));
169
+ }
170
+ this.state.selectedIndex = 0;
171
+ this.state.scrollOffset = 0;
172
+ }
173
+ /**
174
+ * Select current option
175
+ */
176
+ selectCurrent() {
177
+ const options = this.state.filteredOptions.filter(o => !o.disabled);
178
+ const option = options[this.state.selectedIndex];
179
+ if (option) {
180
+ this.selectOption(option);
181
+ }
182
+ }
183
+ /**
184
+ * Select specific option
185
+ */
186
+ async selectOption(option) {
187
+ if (option.disabled)
188
+ return;
189
+ if (option.subMenu) {
190
+ // Show sub-menu
191
+ const subMenu = new Menu({
192
+ title: option.label,
193
+ options: option.subMenu,
194
+ onCancel: () => {
195
+ // Return to parent menu
196
+ this.render();
197
+ },
198
+ });
199
+ const result = await subMenu.show();
200
+ if (!result) {
201
+ this.render();
202
+ return;
203
+ }
204
+ }
205
+ if (option.action) {
206
+ await option.action();
207
+ }
208
+ if (this.config.onSelect) {
209
+ await this.config.onSelect(option);
210
+ }
211
+ this.close(option);
212
+ }
213
+ /**
214
+ * Cancel menu
215
+ */
216
+ cancel() {
217
+ if (this.config.onCancel) {
218
+ this.config.onCancel();
219
+ }
220
+ this.close(null);
221
+ }
222
+ /**
223
+ * Render menu
224
+ */
225
+ render() {
226
+ const { width: screenWidth, height: screenHeight } = this.screen.getSize();
227
+ const width = this.config.width ?? Math.min(50, screenWidth - 4);
228
+ const maxHeight = this.config.maxHeight ?? Math.min(15, screenHeight - 6);
229
+ const x = this.config.x ?? Math.floor((screenWidth - width) / 2);
230
+ const y = this.config.y ?? Math.floor((screenHeight - maxHeight - 4) / 2);
231
+ const options = this.state.filteredOptions.filter(o => !o.disabled);
232
+ const visibleOptions = options.slice(this.state.scrollOffset, this.state.scrollOffset + maxHeight);
233
+ // Group by category if enabled
234
+ let groupedOptions = [];
235
+ if (this.config.showCategories) {
236
+ const categories = new Map();
237
+ for (const opt of visibleOptions) {
238
+ const cat = opt.category || '';
239
+ if (!categories.has(cat)) {
240
+ categories.set(cat, []);
241
+ }
242
+ categories.get(cat).push(opt);
243
+ }
244
+ for (const [category, opts] of categories) {
245
+ groupedOptions.push({ category: category || undefined, options: opts });
246
+ }
247
+ }
248
+ else {
249
+ groupedOptions = [{ options: visibleOptions }];
250
+ }
251
+ // Calculate actual height
252
+ let contentHeight = 0;
253
+ for (const group of groupedOptions) {
254
+ if (group.category)
255
+ contentHeight++;
256
+ contentHeight += group.options.length;
257
+ }
258
+ const boxHeight = Math.min(contentHeight + 4, maxHeight + 4);
259
+ // Draw box
260
+ this.screen.drawBox(x, y, width, boxHeight, this.config.title);
261
+ // Draw search bar if enabled
262
+ let lineY = y + 1;
263
+ if (this.config.showSearch) {
264
+ const searchText = this.state.searchQuery || 'Type to search...';
265
+ const searchColor = this.state.searchQuery ? ANSI.fg.white : ANSI.fg.gray;
266
+ this.screen.write(x + 2, lineY, `? ${searchText}`, searchColor);
267
+ lineY++;
268
+ this.screen.drawHLine(x + 1, lineY, width - 2);
269
+ lineY++;
270
+ }
271
+ // Draw options
272
+ let optionIndex = this.state.scrollOffset;
273
+ for (const group of groupedOptions) {
274
+ // Category header
275
+ if (group.category) {
276
+ this.screen.write(x + 2, lineY, group.category, ANSI.fg.cyan, undefined, ANSI.bold);
277
+ lineY++;
278
+ }
279
+ // Options
280
+ for (const opt of group.options) {
281
+ const isSelected = optionIndex === this.state.selectedIndex;
282
+ const fg = isSelected ? ANSI.fg.black : (opt.disabled ? ANSI.fg.gray : ANSI.fg.white);
283
+ const bg = isSelected ? ANSI.bg.cyan : undefined;
284
+ // Option label with shortcut
285
+ let label = opt.label;
286
+ if (opt.shortcut) {
287
+ label = `[${opt.shortcut}] ${label}`;
288
+ }
289
+ // Truncate if needed
290
+ const maxLabelLen = width - 6;
291
+ if (label.length > maxLabelLen) {
292
+ label = label.slice(0, maxLabelLen - 3) + '...';
293
+ }
294
+ // Selection indicator
295
+ const indicator = isSelected ? '▶' : ' ';
296
+ this.screen.write(x + 1, lineY, indicator, ANSI.fg.cyan);
297
+ this.screen.write(x + 3, lineY, label.padEnd(width - 5), fg, bg);
298
+ // Submenu indicator
299
+ if (opt.subMenu) {
300
+ this.screen.write(x + width - 3, lineY, '▸', fg);
301
+ }
302
+ lineY++;
303
+ optionIndex++;
304
+ }
305
+ }
306
+ // Draw scroll indicators
307
+ if (this.state.scrollOffset > 0) {
308
+ this.screen.write(x + width - 2, y + 1, '▲', ANSI.fg.gray);
309
+ }
310
+ if (this.state.scrollOffset + maxHeight < options.length) {
311
+ this.screen.write(x + width - 2, y + boxHeight - 2, '▼', ANSI.fg.gray);
312
+ }
313
+ // Footer hints
314
+ this.screen.write(x + 2, y + boxHeight - 1, '↑↓ Move Enter Select Esc Cancel', ANSI.fg.gray);
315
+ this.screen.render();
316
+ }
317
+ }
318
+ /**
319
+ * Quick menu helper - show a menu and return the selected option
320
+ */
321
+ export async function showMenu(config) {
322
+ const menu = new Menu(config);
323
+ return menu.show();
324
+ }
325
+ /**
326
+ * Confirm dialog
327
+ */
328
+ export async function showConfirm(title, message) {
329
+ const result = await showMenu({
330
+ title,
331
+ options: [
332
+ { id: 'yes', label: 'Yes', shortcut: 'Y' },
333
+ { id: 'no', label: 'No', shortcut: 'N' },
334
+ ],
335
+ });
336
+ return result?.id === 'yes';
337
+ }
338
+ /**
339
+ * Alert dialog
340
+ */
341
+ export async function showAlert(title, message) {
342
+ const screen = getScreen();
343
+ const { width, height } = screen.getSize();
344
+ const boxWidth = Math.min(60, width - 4);
345
+ const boxHeight = 7;
346
+ const x = Math.floor((width - boxWidth) / 2);
347
+ const y = Math.floor((height - boxHeight) / 2);
348
+ screen.drawBox(x, y, boxWidth, boxHeight, title);
349
+ // Word wrap message
350
+ const maxLineLen = boxWidth - 4;
351
+ const lines = [];
352
+ for (let i = 0; i < message.length; i += maxLineLen) {
353
+ lines.push(message.slice(i, i + maxLineLen));
354
+ }
355
+ for (let i = 0; i < Math.min(lines.length, 3); i++) {
356
+ screen.write(x + 2, y + 1 + i, lines[i], ANSI.fg.white);
357
+ }
358
+ screen.write(x + 2, y + boxHeight - 2, 'Press any key to continue...', ANSI.fg.gray);
359
+ screen.render();
360
+ // Wait for key
361
+ const input = getInput();
362
+ await input.waitForKey();
363
+ }
364
+ //# sourceMappingURL=Menu.js.map
365
+ //# debugId=912e81c9-3e36-5ffc-b5b9-573f298e3144
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Menu.js","sources":["tui/Menu.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Menu System - Option-based navigation\r\n * Inspired by opencode's DialogSelect pattern\r\n */\r\n\r\nimport { ANSI, BOX, getScreen, type Screen } from './Screen.js';\r\nimport { getInput, type KeyEvent } from './Input.js';\r\n\r\n/**\r\n * Menu option\r\n */\r\nexport interface MenuOption {\r\n id: string;\r\n label: string;\r\n description?: string;\r\n shortcut?: string;\r\n category?: string;\r\n disabled?: boolean;\r\n action?: () => void | Promise<void>;\r\n subMenu?: MenuOption[];\r\n}\r\n\r\n/**\r\n * Menu configuration\r\n */\r\nexport interface MenuConfig {\r\n title: string;\r\n options: MenuOption[];\r\n selectedIndex?: number;\r\n showSearch?: boolean;\r\n showCategories?: boolean;\r\n onSelect?: (option: MenuOption) => void | Promise<void>;\r\n onCancel?: () => void;\r\n x?: number;\r\n y?: number;\r\n width?: number;\r\n maxHeight?: number;\r\n}\r\n\r\n/**\r\n * Menu state\r\n */\r\ninterface MenuState {\r\n selectedIndex: number;\r\n scrollOffset: number;\r\n searchQuery: string;\r\n filteredOptions: MenuOption[];\r\n}\r\n\r\n/**\r\n * Menu renderer and controller\r\n */\r\nexport class Menu {\r\n private screen: Screen;\r\n private config: MenuConfig;\r\n private state: MenuState;\r\n private isActive: boolean = false;\r\n private keyHandler: ((key: KeyEvent) => void) | null = null;\r\n private resolvePromise: ((option: MenuOption | null) => void) | null = null;\r\n\r\n constructor(config: MenuConfig) {\r\n this.screen = getScreen();\r\n this.config = config;\r\n this.state = {\r\n selectedIndex: config.selectedIndex ?? 0,\r\n scrollOffset: 0,\r\n searchQuery: '',\r\n filteredOptions: [...config.options],\r\n };\r\n }\r\n\r\n /**\r\n * Show menu and wait for selection\r\n */\r\n async show(): Promise<MenuOption | null> {\r\n this.isActive = true;\r\n this.setupKeyHandler();\r\n this.render();\r\n\r\n return new Promise((resolve) => {\r\n this.resolvePromise = resolve;\r\n });\r\n }\r\n\r\n /**\r\n * Close menu\r\n */\r\n close(selected: MenuOption | null = null): void {\r\n this.isActive = false;\r\n this.removeKeyHandler();\r\n if (this.resolvePromise) {\r\n this.resolvePromise(selected);\r\n this.resolvePromise = null;\r\n }\r\n }\r\n\r\n /**\r\n * Setup keyboard handler\r\n */\r\n private setupKeyHandler(): void {\r\n const input = getInput();\r\n \r\n this.keyHandler = (key: KeyEvent) => {\r\n if (!this.isActive) return;\r\n\r\n switch (key.name) {\r\n case 'up':\r\n this.moveSelection(-1);\r\n break;\r\n case 'down':\r\n this.moveSelection(1);\r\n break;\r\n case 'pageup':\r\n this.moveSelection(-10);\r\n break;\r\n case 'pagedown':\r\n this.moveSelection(10);\r\n break;\r\n case 'home':\r\n this.moveToStart();\r\n break;\r\n case 'end':\r\n this.moveToEnd();\r\n break;\r\n case 'return':\r\n this.selectCurrent();\r\n break;\r\n case 'escape':\r\n this.cancel();\r\n break;\r\n default:\r\n // Check for shortcut keys\r\n if (key.raw && key.raw.length === 1) {\r\n const shortcutOption = this.state.filteredOptions.find(\r\n opt => opt.shortcut?.toLowerCase() === key.raw.toLowerCase()\r\n );\r\n if (shortcutOption && !shortcutOption.disabled) {\r\n this.selectOption(shortcutOption);\r\n } else if (this.config.showSearch) {\r\n // Add to search query\r\n this.state.searchQuery += key.raw;\r\n this.filterOptions();\r\n }\r\n } else if (key.name === 'backspace' && this.config.showSearch) {\r\n this.state.searchQuery = this.state.searchQuery.slice(0, -1);\r\n this.filterOptions();\r\n }\r\n }\r\n\r\n this.render();\r\n };\r\n\r\n input.onKey(this.keyHandler);\r\n }\r\n\r\n /**\r\n * Remove keyboard handler\r\n */\r\n private removeKeyHandler(): void {\r\n if (this.keyHandler) {\r\n getInput().offKey(this.keyHandler);\r\n this.keyHandler = null;\r\n }\r\n }\r\n\r\n /**\r\n * Move selection\r\n */\r\n private moveSelection(delta: number): void {\r\n const options = this.state.filteredOptions.filter(o => !o.disabled);\r\n if (options.length === 0) return;\r\n\r\n let newIndex = this.state.selectedIndex + delta;\r\n if (newIndex < 0) newIndex = options.length - 1;\r\n if (newIndex >= options.length) newIndex = 0;\r\n\r\n this.state.selectedIndex = newIndex;\r\n this.ensureVisible();\r\n }\r\n\r\n /**\r\n * Move to start\r\n */\r\n private moveToStart(): void {\r\n this.state.selectedIndex = 0;\r\n this.state.scrollOffset = 0;\r\n }\r\n\r\n /**\r\n * Move to end\r\n */\r\n private moveToEnd(): void {\r\n const options = this.state.filteredOptions.filter(o => !o.disabled);\r\n this.state.selectedIndex = options.length - 1;\r\n this.ensureVisible();\r\n }\r\n\r\n /**\r\n * Ensure selected item is visible\r\n */\r\n private ensureVisible(): void {\r\n const maxHeight = this.config.maxHeight ?? 10;\r\n if (this.state.selectedIndex < this.state.scrollOffset) {\r\n this.state.scrollOffset = this.state.selectedIndex;\r\n } else if (this.state.selectedIndex >= this.state.scrollOffset + maxHeight) {\r\n this.state.scrollOffset = this.state.selectedIndex - maxHeight + 1;\r\n }\r\n }\r\n\r\n /**\r\n * Filter options based on search query\r\n */\r\n private filterOptions(): void {\r\n const query = this.state.searchQuery.toLowerCase();\r\n if (!query) {\r\n this.state.filteredOptions = [...this.config.options];\r\n } else {\r\n this.state.filteredOptions = this.config.options.filter(opt =>\r\n opt.label.toLowerCase().includes(query) ||\r\n opt.description?.toLowerCase().includes(query) ||\r\n opt.category?.toLowerCase().includes(query)\r\n );\r\n }\r\n this.state.selectedIndex = 0;\r\n this.state.scrollOffset = 0;\r\n }\r\n\r\n /**\r\n * Select current option\r\n */\r\n private selectCurrent(): void {\r\n const options = this.state.filteredOptions.filter(o => !o.disabled);\r\n const option = options[this.state.selectedIndex];\r\n if (option) {\r\n this.selectOption(option);\r\n }\r\n }\r\n\r\n /**\r\n * Select specific option\r\n */\r\n private async selectOption(option: MenuOption): Promise<void> {\r\n if (option.disabled) return;\r\n\r\n if (option.subMenu) {\r\n // Show sub-menu\r\n const subMenu = new Menu({\r\n title: option.label,\r\n options: option.subMenu,\r\n onCancel: () => {\r\n // Return to parent menu\r\n this.render();\r\n },\r\n });\r\n const result = await subMenu.show();\r\n if (!result) {\r\n this.render();\r\n return;\r\n }\r\n }\r\n\r\n if (option.action) {\r\n await option.action();\r\n }\r\n\r\n if (this.config.onSelect) {\r\n await this.config.onSelect(option);\r\n }\r\n\r\n this.close(option);\r\n }\r\n\r\n /**\r\n * Cancel menu\r\n */\r\n private cancel(): void {\r\n if (this.config.onCancel) {\r\n this.config.onCancel();\r\n }\r\n this.close(null);\r\n }\r\n\r\n /**\r\n * Render menu\r\n */\r\n render(): void {\r\n const { width: screenWidth, height: screenHeight } = this.screen.getSize();\r\n \r\n const width = this.config.width ?? Math.min(50, screenWidth - 4);\r\n const maxHeight = this.config.maxHeight ?? Math.min(15, screenHeight - 6);\r\n const x = this.config.x ?? Math.floor((screenWidth - width) / 2);\r\n const y = this.config.y ?? Math.floor((screenHeight - maxHeight - 4) / 2);\r\n\r\n const options = this.state.filteredOptions.filter(o => !o.disabled);\r\n const visibleOptions = options.slice(\r\n this.state.scrollOffset,\r\n this.state.scrollOffset + maxHeight\r\n );\r\n\r\n // Group by category if enabled\r\n let groupedOptions: Array<{ category?: string; options: MenuOption[] }> = [];\r\n if (this.config.showCategories) {\r\n const categories = new Map<string, MenuOption[]>();\r\n for (const opt of visibleOptions) {\r\n const cat = opt.category || '';\r\n if (!categories.has(cat)) {\r\n categories.set(cat, []);\r\n }\r\n categories.get(cat)!.push(opt);\r\n }\r\n for (const [category, opts] of categories) {\r\n groupedOptions.push({ category: category || undefined, options: opts });\r\n }\r\n } else {\r\n groupedOptions = [{ options: visibleOptions }];\r\n }\r\n\r\n // Calculate actual height\r\n let contentHeight = 0;\r\n for (const group of groupedOptions) {\r\n if (group.category) contentHeight++;\r\n contentHeight += group.options.length;\r\n }\r\n const boxHeight = Math.min(contentHeight + 4, maxHeight + 4);\r\n\r\n // Draw box\r\n this.screen.drawBox(x, y, width, boxHeight, this.config.title);\r\n\r\n // Draw search bar if enabled\r\n let lineY = y + 1;\r\n if (this.config.showSearch) {\r\n const searchText = this.state.searchQuery || 'Type to search...';\r\n const searchColor = this.state.searchQuery ? ANSI.fg.white : ANSI.fg.gray;\r\n this.screen.write(x + 2, lineY, `? ${searchText}`, searchColor);\r\n lineY++;\r\n this.screen.drawHLine(x + 1, lineY, width - 2);\r\n lineY++;\r\n }\r\n\r\n // Draw options\r\n let optionIndex = this.state.scrollOffset;\r\n for (const group of groupedOptions) {\r\n // Category header\r\n if (group.category) {\r\n this.screen.write(x + 2, lineY, group.category, ANSI.fg.cyan, undefined, ANSI.bold);\r\n lineY++;\r\n }\r\n\r\n // Options\r\n for (const opt of group.options) {\r\n const isSelected = optionIndex === this.state.selectedIndex;\r\n const fg = isSelected ? ANSI.fg.black : (opt.disabled ? ANSI.fg.gray : ANSI.fg.white);\r\n const bg = isSelected ? ANSI.bg.cyan : undefined;\r\n \r\n // Option label with shortcut\r\n let label = opt.label;\r\n if (opt.shortcut) {\r\n label = `[${opt.shortcut}] ${label}`;\r\n }\r\n \r\n // Truncate if needed\r\n const maxLabelLen = width - 6;\r\n if (label.length > maxLabelLen) {\r\n label = label.slice(0, maxLabelLen - 3) + '...';\r\n }\r\n\r\n // Selection indicator\r\n const indicator = isSelected ? '▶' : ' ';\r\n this.screen.write(x + 1, lineY, indicator, ANSI.fg.cyan);\r\n this.screen.write(x + 3, lineY, label.padEnd(width - 5), fg, bg);\r\n \r\n // Submenu indicator\r\n if (opt.subMenu) {\r\n this.screen.write(x + width - 3, lineY, '▸', fg);\r\n }\r\n\r\n lineY++;\r\n optionIndex++;\r\n }\r\n }\r\n\r\n // Draw scroll indicators\r\n if (this.state.scrollOffset > 0) {\r\n this.screen.write(x + width - 2, y + 1, '▲', ANSI.fg.gray);\r\n }\r\n if (this.state.scrollOffset + maxHeight < options.length) {\r\n this.screen.write(x + width - 2, y + boxHeight - 2, '▼', ANSI.fg.gray);\r\n }\r\n\r\n // Footer hints\r\n this.screen.write(x + 2, y + boxHeight - 1, '↑↓ Move Enter Select Esc Cancel', ANSI.fg.gray);\r\n\r\n this.screen.render();\r\n }\r\n}\r\n\r\n/**\r\n * Quick menu helper - show a menu and return the selected option\r\n */\r\nexport async function showMenu(config: MenuConfig): Promise<MenuOption | null> {\r\n const menu = new Menu(config);\r\n return menu.show();\r\n}\r\n\r\n/**\r\n * Confirm dialog\r\n */\r\nexport async function showConfirm(title: string, message: string): Promise<boolean> {\r\n const result = await showMenu({\r\n title,\r\n options: [\r\n { id: 'yes', label: 'Yes', shortcut: 'Y' },\r\n { id: 'no', label: 'No', shortcut: 'N' },\r\n ],\r\n });\r\n return result?.id === 'yes';\r\n}\r\n\r\n/**\r\n * Alert dialog\r\n */\r\nexport async function showAlert(title: string, message: string): Promise<void> {\r\n const screen = getScreen();\r\n const { width, height } = screen.getSize();\r\n \r\n const boxWidth = Math.min(60, width - 4);\r\n const boxHeight = 7;\r\n const x = Math.floor((width - boxWidth) / 2);\r\n const y = Math.floor((height - boxHeight) / 2);\r\n\r\n screen.drawBox(x, y, boxWidth, boxHeight, title);\r\n \r\n // Word wrap message\r\n const maxLineLen = boxWidth - 4;\r\n const lines: string[] = [];\r\n for (let i = 0; i < message.length; i += maxLineLen) {\r\n lines.push(message.slice(i, i + maxLineLen));\r\n }\r\n \r\n for (let i = 0; i < Math.min(lines.length, 3); i++) {\r\n screen.write(x + 2, y + 1 + i, lines[i], ANSI.fg.white);\r\n }\r\n \r\n screen.write(x + 2, y + boxHeight - 2, 'Press any key to continue...', ANSI.fg.gray);\r\n screen.render();\r\n\r\n // Wait for key\r\n const input = getInput();\r\n await input.waitForKey();\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"912e81c9-3e36-5ffc-b5b9-573f298e3144"}
@@ -0,0 +1,228 @@
1
+ /**
2
+ * TUI Screen Manager - Low-level terminal rendering
3
+ * Handles cursor, colors, and screen buffer management
4
+ */
5
+ export declare const ANSI: {
6
+ hideCursor: string;
7
+ showCursor: string;
8
+ moveTo: (row: number, col: number) => string;
9
+ moveUp: (n: number) => string;
10
+ moveDown: (n: number) => string;
11
+ moveRight: (n: number) => string;
12
+ moveLeft: (n: number) => string;
13
+ saveCursor: string;
14
+ restoreCursor: string;
15
+ clearScreen: string;
16
+ clearLine: string;
17
+ clearToEnd: string;
18
+ scrollUp: string;
19
+ scrollDown: string;
20
+ enterAltScreen: string;
21
+ exitAltScreen: string;
22
+ reset: string;
23
+ bold: string;
24
+ dim: string;
25
+ italic: string;
26
+ underline: string;
27
+ blink: string;
28
+ inverse: string;
29
+ fg: {
30
+ black: string;
31
+ red: string;
32
+ green: string;
33
+ yellow: string;
34
+ blue: string;
35
+ magenta: string;
36
+ cyan: string;
37
+ white: string;
38
+ gray: string;
39
+ brightRed: string;
40
+ brightGreen: string;
41
+ brightYellow: string;
42
+ brightBlue: string;
43
+ brightMagenta: string;
44
+ brightCyan: string;
45
+ brightWhite: string;
46
+ };
47
+ bg: {
48
+ black: string;
49
+ red: string;
50
+ green: string;
51
+ yellow: string;
52
+ blue: string;
53
+ magenta: string;
54
+ cyan: string;
55
+ white: string;
56
+ gray: string;
57
+ };
58
+ };
59
+ export declare const BOX: {
60
+ topLeft: string;
61
+ topRight: string;
62
+ bottomLeft: string;
63
+ bottomRight: string;
64
+ horizontal: string;
65
+ vertical: string;
66
+ cross: string;
67
+ teeDown: string;
68
+ teeUp: string;
69
+ teeLeft: string;
70
+ teeRight: string;
71
+ dTopLeft: string;
72
+ dTopRight: string;
73
+ dBottomLeft: string;
74
+ dBottomRight: string;
75
+ dHorizontal: string;
76
+ dVertical: string;
77
+ hTopLeft: string;
78
+ hTopRight: string;
79
+ hBottomLeft: string;
80
+ hBottomRight: string;
81
+ hHorizontal: string;
82
+ hVertical: string;
83
+ };
84
+ export declare const PROGRESS: {
85
+ full: string;
86
+ high: string;
87
+ medium: string;
88
+ low: string;
89
+ empty: string;
90
+ };
91
+ export declare const MIN_TERMINAL_SIZE: {
92
+ width: number;
93
+ height: number;
94
+ };
95
+ export declare const MAP_SYMBOLS: {
96
+ player: string;
97
+ town: string;
98
+ dungeon: string;
99
+ shop: string;
100
+ boss: string;
101
+ treasure: string;
102
+ event: string;
103
+ unexplored: string;
104
+ empty: string;
105
+ wall: string;
106
+ door: string;
107
+ path: string;
108
+ pathV: string;
109
+ };
110
+ /**
111
+ * Screen class for managing terminal output
112
+ */
113
+ export declare class Screen {
114
+ private width;
115
+ private height;
116
+ private buffer;
117
+ private prevBuffer;
118
+ private cursorVisible;
119
+ private inAlternateScreen;
120
+ private resizeCallbacks;
121
+ private needsFullRedraw;
122
+ private resizeTimeout;
123
+ private isResizing;
124
+ constructor();
125
+ /**
126
+ * Check if currently resizing
127
+ */
128
+ isCurrentlyResizing(): boolean;
129
+ /**
130
+ * Register a resize callback
131
+ */
132
+ onResize(callback: (width: number, height: number) => void): void;
133
+ /**
134
+ * Check if terminal size meets minimum requirements
135
+ */
136
+ checkMinimumSize(): {
137
+ valid: boolean;
138
+ width: number;
139
+ height: number;
140
+ minWidth: number;
141
+ minHeight: number;
142
+ };
143
+ /**
144
+ * Render a "terminal too small" warning overlay
145
+ */
146
+ renderSizeWarning(): void;
147
+ /**
148
+ * Center text within a given width
149
+ */
150
+ private centerText;
151
+ /**
152
+ * Create empty buffer
153
+ */
154
+ private createBuffer;
155
+ /**
156
+ * Get screen dimensions
157
+ */
158
+ getSize(): {
159
+ width: number;
160
+ height: number;
161
+ };
162
+ /**
163
+ * Clear the buffer
164
+ */
165
+ clear(): void;
166
+ /**
167
+ * Write a character at position
168
+ */
169
+ setChar(x: number, y: number, char: string, fg?: string, bg?: string, style?: string): void;
170
+ /**
171
+ * Write text at position
172
+ */
173
+ write(x: number, y: number, text: string, fg?: string, bg?: string, style?: string): void;
174
+ /**
175
+ * Write styled text (supports inline color codes)
176
+ */
177
+ writeStyled(x: number, y: number, text: string): void;
178
+ /**
179
+ * Draw a box
180
+ */
181
+ drawBox(x: number, y: number, width: number, height: number, title?: string, double?: boolean, titleFg?: string, titleBg?: string): void;
182
+ /**
183
+ * Draw a progress bar
184
+ */
185
+ drawProgressBar(x: number, y: number, width: number, value: number, max: number, fg?: string, bg?: string): void;
186
+ /**
187
+ * Draw horizontal line
188
+ */
189
+ drawHLine(x: number, y: number, length: number, char?: string): void;
190
+ /**
191
+ * Draw vertical line
192
+ */
193
+ drawVLine(x: number, y: number, length: number, char?: string): void;
194
+ /**
195
+ * Render buffer to screen (differential update, or full if needed)
196
+ */
197
+ render(): void;
198
+ /**
199
+ * Force full redraw
200
+ */
201
+ forceRedraw(): void;
202
+ /**
203
+ * Enter alternate screen buffer (prevents overlap with terminal history)
204
+ */
205
+ enterAlternateScreen(): void;
206
+ /**
207
+ * Exit alternate screen buffer (restores terminal history)
208
+ */
209
+ exitAlternateScreen(): void;
210
+ /**
211
+ * Hide cursor
212
+ */
213
+ hideCursor(): void;
214
+ /**
215
+ * Show cursor
216
+ */
217
+ showCursor(): void;
218
+ /**
219
+ * Move cursor to position
220
+ */
221
+ moveCursor(x: number, y: number): void;
222
+ /**
223
+ * Cleanup on exit
224
+ */
225
+ cleanup(): void;
226
+ }
227
+ export declare function getScreen(): Screen;
228
+ //# sourceMappingURL=Screen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Screen.d.ts","sourceRoot":"/","sources":["tui/Screen.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,IAAI;;;kBAID,MAAM,OAAO,MAAM;gBACrB,MAAM;kBACJ,MAAM;mBACL,MAAM;kBACP,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDrB,CAAC;AAGF,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CA0Bf,CAAC;AAGF,eAAO,MAAM,QAAQ;;;;;;CAMpB,CAAC;AAGF,eAAO,MAAM,iBAAiB;;;CAG7B,CAAC;AAGF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;CAcvB,CAAC;AAYF;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,UAAU,CAAW;IAC7B,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,eAAe,CAAsD;IAC7E,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,UAAU,CAAkB;;IA8CpC;;OAEG;IACH,mBAAmB,IAAI,OAAO;IAI9B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIjE;;OAEG;IACH,gBAAgB,IAAI;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAU1G;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAmDzB;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACH,OAAO,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAI5C;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAK3F;;OAEG;IACH,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAQzF;;OAEG;IACH,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKrD;;OAEG;IACH,OAAO,CACL,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACnD,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,GAAE,OAAe,EACvC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GACjC,IAAI;IAiCP;;OAEG;IACH,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAWhH;;OAEG;IACH,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAuB,GAAG,IAAI;IAMpF;;OAEG;IACH,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAqB,GAAG,IAAI;IAMlF;;OAEG;IACH,MAAM,IAAI,IAAI;IA+Cd;;OAEG;IACH,WAAW,IAAI,IAAI;IAiCnB;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAO5B;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAO3B;;OAEG;IACH,UAAU,IAAI,IAAI;IAOlB;;OAEG;IACH,UAAU,IAAI,IAAI;IAOlB;;OAEG;IACH,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAItC;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB;AAKD,wBAAgB,SAAS,IAAI,MAAM,CAKlC"}