idlerpg.sh 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/README.md +171 -0
  2. package/dist/affix/AffixRegistry.d.ts +68 -0
  3. package/dist/affix/AffixRegistry.d.ts.map +1 -0
  4. package/dist/affix/AffixRegistry.js +245 -0
  5. package/dist/affix/AffixRegistry.js.map +1 -0
  6. package/dist/affix/PluginLoader.d.ts +66 -0
  7. package/dist/affix/PluginLoader.d.ts.map +1 -0
  8. package/dist/affix/PluginLoader.js +321 -0
  9. package/dist/affix/PluginLoader.js.map +1 -0
  10. package/dist/affix/builtin.d.ts +6 -0
  11. package/dist/affix/builtin.d.ts.map +1 -0
  12. package/dist/affix/builtin.js +311 -0
  13. package/dist/affix/builtin.js.map +1 -0
  14. package/dist/affix/index.d.ts +8 -0
  15. package/dist/affix/index.d.ts.map +1 -0
  16. package/dist/affix/index.js +11 -0
  17. package/dist/affix/index.js.map +1 -0
  18. package/dist/affix/types.d.ts +152 -0
  19. package/dist/affix/types.d.ts.map +1 -0
  20. package/dist/affix/types.js +8 -0
  21. package/dist/affix/types.js.map +1 -0
  22. package/dist/ai/PlayKitClient.d.ts +208 -0
  23. package/dist/ai/PlayKitClient.d.ts.map +1 -0
  24. package/dist/ai/PlayKitClient.js +721 -0
  25. package/dist/ai/PlayKitClient.js.map +1 -0
  26. package/dist/ai/index.d.ts +5 -0
  27. package/dist/ai/index.d.ts.map +1 -0
  28. package/dist/ai/index.js +8 -0
  29. package/dist/ai/index.js.map +1 -0
  30. package/dist/app/App.d.ts +85 -0
  31. package/dist/app/App.d.ts.map +1 -0
  32. package/dist/app/App.js +296 -0
  33. package/dist/app/App.js.map +1 -0
  34. package/dist/app/EventBus.d.ts +222 -0
  35. package/dist/app/EventBus.d.ts.map +1 -0
  36. package/dist/app/EventBus.js +88 -0
  37. package/dist/app/EventBus.js.map +1 -0
  38. package/dist/app/Keybind.d.ts +83 -0
  39. package/dist/app/Keybind.d.ts.map +1 -0
  40. package/dist/app/Keybind.js +184 -0
  41. package/dist/app/Keybind.js.map +1 -0
  42. package/dist/app/Router.d.ts +123 -0
  43. package/dist/app/Router.d.ts.map +1 -0
  44. package/dist/app/Router.js +142 -0
  45. package/dist/app/Router.js.map +1 -0
  46. package/dist/app/ScreenManager.d.ts +97 -0
  47. package/dist/app/ScreenManager.d.ts.map +1 -0
  48. package/dist/app/ScreenManager.js +216 -0
  49. package/dist/app/ScreenManager.js.map +1 -0
  50. package/dist/app/index.d.ts +14 -0
  51. package/dist/app/index.d.ts.map +1 -0
  52. package/dist/app/index.js +19 -0
  53. package/dist/app/index.js.map +1 -0
  54. package/dist/app/screens/BaseScreen.d.ts +101 -0
  55. package/dist/app/screens/BaseScreen.d.ts.map +1 -0
  56. package/dist/app/screens/BaseScreen.js +132 -0
  57. package/dist/app/screens/BaseScreen.js.map +1 -0
  58. package/dist/app/screens/CharacterCreationScreen.d.ts +42 -0
  59. package/dist/app/screens/CharacterCreationScreen.d.ts.map +1 -0
  60. package/dist/app/screens/CharacterCreationScreen.js +467 -0
  61. package/dist/app/screens/CharacterCreationScreen.js.map +1 -0
  62. package/dist/app/screens/CombatScreen.d.ts +30 -0
  63. package/dist/app/screens/CombatScreen.d.ts.map +1 -0
  64. package/dist/app/screens/CombatScreen.js +309 -0
  65. package/dist/app/screens/CombatScreen.js.map +1 -0
  66. package/dist/app/screens/DialogScreen.d.ts +29 -0
  67. package/dist/app/screens/DialogScreen.d.ts.map +1 -0
  68. package/dist/app/screens/DialogScreen.js +295 -0
  69. package/dist/app/screens/DialogScreen.js.map +1 -0
  70. package/dist/app/screens/ExploreScreen.d.ts +50 -0
  71. package/dist/app/screens/ExploreScreen.d.ts.map +1 -0
  72. package/dist/app/screens/ExploreScreen.js +308 -0
  73. package/dist/app/screens/ExploreScreen.js.map +1 -0
  74. package/dist/app/screens/HelpScreen.d.ts +12 -0
  75. package/dist/app/screens/HelpScreen.d.ts.map +1 -0
  76. package/dist/app/screens/HelpScreen.js +155 -0
  77. package/dist/app/screens/HelpScreen.js.map +1 -0
  78. package/dist/app/screens/InventoryScreen.d.ts +27 -0
  79. package/dist/app/screens/InventoryScreen.d.ts.map +1 -0
  80. package/dist/app/screens/InventoryScreen.js +326 -0
  81. package/dist/app/screens/InventoryScreen.js.map +1 -0
  82. package/dist/app/screens/PrologueScreen.d.ts +24 -0
  83. package/dist/app/screens/PrologueScreen.d.ts.map +1 -0
  84. package/dist/app/screens/PrologueScreen.js +176 -0
  85. package/dist/app/screens/PrologueScreen.js.map +1 -0
  86. package/dist/app/screens/TitleScreen.d.ts +42 -0
  87. package/dist/app/screens/TitleScreen.d.ts.map +1 -0
  88. package/dist/app/screens/TitleScreen.js +380 -0
  89. package/dist/app/screens/TitleScreen.js.map +1 -0
  90. package/dist/app/screens/TravelScreen.d.ts +22 -0
  91. package/dist/app/screens/TravelScreen.d.ts.map +1 -0
  92. package/dist/app/screens/TravelScreen.js +122 -0
  93. package/dist/app/screens/TravelScreen.js.map +1 -0
  94. package/dist/app/screens/index.d.ts +14 -0
  95. package/dist/app/screens/index.d.ts.map +1 -0
  96. package/dist/app/screens/index.js +17 -0
  97. package/dist/app/screens/index.js.map +1 -0
  98. package/dist/commands/CommandRegistry.d.ts +91 -0
  99. package/dist/commands/CommandRegistry.d.ts.map +1 -0
  100. package/dist/commands/CommandRegistry.js +159 -0
  101. package/dist/commands/CommandRegistry.js.map +1 -0
  102. package/dist/commands/index.d.ts +7 -0
  103. package/dist/commands/index.d.ts.map +1 -0
  104. package/dist/commands/index.js +10 -0
  105. package/dist/commands/index.js.map +1 -0
  106. package/dist/core/Actor.d.ts +103 -0
  107. package/dist/core/Actor.d.ts.map +1 -0
  108. package/dist/core/Actor.js +409 -0
  109. package/dist/core/Actor.js.map +1 -0
  110. package/dist/core/Combat.d.ts +37 -0
  111. package/dist/core/Combat.d.ts.map +1 -0
  112. package/dist/core/Combat.js +294 -0
  113. package/dist/core/Combat.js.map +1 -0
  114. package/dist/core/DungeonRunner.d.ts +169 -0
  115. package/dist/core/DungeonRunner.d.ts.map +1 -0
  116. package/dist/core/DungeonRunner.js +627 -0
  117. package/dist/core/DungeonRunner.js.map +1 -0
  118. package/dist/core/Game.d.ts +133 -0
  119. package/dist/core/Game.d.ts.map +1 -0
  120. package/dist/core/Game.js +644 -0
  121. package/dist/core/Game.js.map +1 -0
  122. package/dist/core/IdleCombat.d.ts +61 -0
  123. package/dist/core/IdleCombat.d.ts.map +1 -0
  124. package/dist/core/IdleCombat.js +461 -0
  125. package/dist/core/IdleCombat.js.map +1 -0
  126. package/dist/core/IdleGameManager.d.ts +198 -0
  127. package/dist/core/IdleGameManager.d.ts.map +1 -0
  128. package/dist/core/IdleGameManager.js +688 -0
  129. package/dist/core/IdleGameManager.js.map +1 -0
  130. package/dist/core/IdleSaveManager.d.ts +109 -0
  131. package/dist/core/IdleSaveManager.d.ts.map +1 -0
  132. package/dist/core/IdleSaveManager.js +296 -0
  133. package/dist/core/IdleSaveManager.js.map +1 -0
  134. package/dist/core/NewGameFlowManager.d.ts +64 -0
  135. package/dist/core/NewGameFlowManager.d.ts.map +1 -0
  136. package/dist/core/NewGameFlowManager.js +153 -0
  137. package/dist/core/NewGameFlowManager.js.map +1 -0
  138. package/dist/core/Player.d.ts +65 -0
  139. package/dist/core/Player.d.ts.map +1 -0
  140. package/dist/core/Player.js +261 -0
  141. package/dist/core/Player.js.map +1 -0
  142. package/dist/core/RoomHandlers.d.ts +75 -0
  143. package/dist/core/RoomHandlers.d.ts.map +1 -0
  144. package/dist/core/RoomHandlers.js +383 -0
  145. package/dist/core/RoomHandlers.js.map +1 -0
  146. package/dist/core/SaveManager.d.ts +84 -0
  147. package/dist/core/SaveManager.d.ts.map +1 -0
  148. package/dist/core/SaveManager.js +281 -0
  149. package/dist/core/SaveManager.js.map +1 -0
  150. package/dist/core/SaveMigration.d.ts +69 -0
  151. package/dist/core/SaveMigration.d.ts.map +1 -0
  152. package/dist/core/SaveMigration.js +408 -0
  153. package/dist/core/SaveMigration.js.map +1 -0
  154. package/dist/core/StateAdapter.d.ts +79 -0
  155. package/dist/core/StateAdapter.d.ts.map +1 -0
  156. package/dist/core/StateAdapter.js +397 -0
  157. package/dist/core/StateAdapter.js.map +1 -0
  158. package/dist/core/Team.d.ts +145 -0
  159. package/dist/core/Team.d.ts.map +1 -0
  160. package/dist/core/Team.js +371 -0
  161. package/dist/core/Team.js.map +1 -0
  162. package/dist/core/TeamCombat.d.ts +88 -0
  163. package/dist/core/TeamCombat.d.ts.map +1 -0
  164. package/dist/core/TeamCombat.js +405 -0
  165. package/dist/core/TeamCombat.js.map +1 -0
  166. package/dist/core/TeamDungeonRunner.d.ts +186 -0
  167. package/dist/core/TeamDungeonRunner.d.ts.map +1 -0
  168. package/dist/core/TeamDungeonRunner.js +758 -0
  169. package/dist/core/TeamDungeonRunner.js.map +1 -0
  170. package/dist/core/TimeManager.d.ts +114 -0
  171. package/dist/core/TimeManager.d.ts.map +1 -0
  172. package/dist/core/TimeManager.js +318 -0
  173. package/dist/core/TimeManager.js.map +1 -0
  174. package/dist/core/index.d.ts +9 -0
  175. package/dist/core/index.d.ts.map +1 -0
  176. package/dist/core/index.js +12 -0
  177. package/dist/core/index.js.map +1 -0
  178. package/dist/core/timeConstants.d.ts +135 -0
  179. package/dist/core/timeConstants.d.ts.map +1 -0
  180. package/dist/core/timeConstants.js +157 -0
  181. package/dist/core/timeConstants.js.map +1 -0
  182. package/dist/core/types.d.ts +780 -0
  183. package/dist/core/types.d.ts.map +1 -0
  184. package/dist/core/types.js +16 -0
  185. package/dist/core/types.js.map +1 -0
  186. package/dist/data/continents/index.d.ts +163 -0
  187. package/dist/data/continents/index.d.ts.map +1 -0
  188. package/dist/data/continents/index.js +31 -0
  189. package/dist/data/continents/index.js.map +1 -0
  190. package/dist/data/continents/verdantia.d.ts +294 -0
  191. package/dist/data/continents/verdantia.d.ts.map +1 -0
  192. package/dist/data/continents/verdantia.js +327 -0
  193. package/dist/data/continents/verdantia.js.map +1 -0
  194. package/dist/handlers/DialogHandler.d.ts +95 -0
  195. package/dist/handlers/DialogHandler.d.ts.map +1 -0
  196. package/dist/handlers/DialogHandler.js +450 -0
  197. package/dist/handlers/DialogHandler.js.map +1 -0
  198. package/dist/handlers/SaveLoadHandler.d.ts +60 -0
  199. package/dist/handlers/SaveLoadHandler.d.ts.map +1 -0
  200. package/dist/handlers/SaveLoadHandler.js +187 -0
  201. package/dist/handlers/SaveLoadHandler.js.map +1 -0
  202. package/dist/handlers/TitleScreenHandler.d.ts +43 -0
  203. package/dist/handlers/TitleScreenHandler.d.ts.map +1 -0
  204. package/dist/handlers/TitleScreenHandler.js +508 -0
  205. package/dist/handlers/TitleScreenHandler.js.map +1 -0
  206. package/dist/handlers/WorkshopHandler.d.ts +75 -0
  207. package/dist/handlers/WorkshopHandler.d.ts.map +1 -0
  208. package/dist/handlers/WorkshopHandler.js +401 -0
  209. package/dist/handlers/WorkshopHandler.js.map +1 -0
  210. package/dist/handlers/index.d.ts +12 -0
  211. package/dist/handlers/index.d.ts.map +1 -0
  212. package/dist/handlers/index.js +14 -0
  213. package/dist/handlers/index.js.map +1 -0
  214. package/dist/handlers/types.d.ts +34 -0
  215. package/dist/handlers/types.d.ts.map +1 -0
  216. package/dist/handlers/types.js +8 -0
  217. package/dist/handlers/types.js.map +1 -0
  218. package/dist/i18n/en.d.ts +3 -0
  219. package/dist/i18n/en.d.ts.map +1 -0
  220. package/dist/i18n/en.js +130 -0
  221. package/dist/i18n/en.js.map +1 -0
  222. package/dist/i18n/index.d.ts +40 -0
  223. package/dist/i18n/index.d.ts.map +1 -0
  224. package/dist/i18n/index.js +105 -0
  225. package/dist/i18n/index.js.map +1 -0
  226. package/dist/i18n/types.d.ts +133 -0
  227. package/dist/i18n/types.d.ts.map +1 -0
  228. package/dist/i18n/types.js +8 -0
  229. package/dist/i18n/types.js.map +1 -0
  230. package/dist/i18n/zh.d.ts +3 -0
  231. package/dist/i18n/zh.d.ts.map +1 -0
  232. package/dist/i18n/zh.js +130 -0
  233. package/dist/i18n/zh.js.map +1 -0
  234. package/dist/instrument.d.ts +8 -0
  235. package/dist/instrument.d.ts.map +1 -0
  236. package/dist/instrument.js +33 -0
  237. package/dist/instrument.js.map +1 -0
  238. package/dist/main-new.d.ts +12 -0
  239. package/dist/main-new.d.ts.map +1 -0
  240. package/dist/main-new.js +32 -0
  241. package/dist/main-new.js.map +1 -0
  242. package/dist/main.d.ts +7 -0
  243. package/dist/main.d.ts.map +1 -0
  244. package/dist/main.js +2816 -0
  245. package/dist/main.js.map +1 -0
  246. package/dist/map/ContinentManager.d.ts +88 -0
  247. package/dist/map/ContinentManager.d.ts.map +1 -0
  248. package/dist/map/ContinentManager.js +241 -0
  249. package/dist/map/ContinentManager.js.map +1 -0
  250. package/dist/map/DungeonGenerator.d.ts +32 -0
  251. package/dist/map/DungeonGenerator.d.ts.map +1 -0
  252. package/dist/map/DungeonGenerator.js +615 -0
  253. package/dist/map/DungeonGenerator.js.map +1 -0
  254. package/dist/map/MapGenerator.d.ts +27 -0
  255. package/dist/map/MapGenerator.d.ts.map +1 -0
  256. package/dist/map/MapGenerator.js +485 -0
  257. package/dist/map/MapGenerator.js.map +1 -0
  258. package/dist/map/index.d.ts +5 -0
  259. package/dist/map/index.d.ts.map +1 -0
  260. package/dist/map/index.js +8 -0
  261. package/dist/map/index.js.map +1 -0
  262. package/dist/npc/NPCGenerator.d.ts +68 -0
  263. package/dist/npc/NPCGenerator.d.ts.map +1 -0
  264. package/dist/npc/NPCGenerator.js +468 -0
  265. package/dist/npc/NPCGenerator.js.map +1 -0
  266. package/dist/npc/NPCManager.d.ts +86 -0
  267. package/dist/npc/NPCManager.d.ts.map +1 -0
  268. package/dist/npc/NPCManager.js +217 -0
  269. package/dist/npc/NPCManager.js.map +1 -0
  270. package/dist/npc/fixedNPCs.d.ts +7 -0
  271. package/dist/npc/fixedNPCs.d.ts.map +1 -0
  272. package/dist/npc/fixedNPCs.js +196 -0
  273. package/dist/npc/fixedNPCs.js.map +1 -0
  274. package/dist/npc/index.d.ts +9 -0
  275. package/dist/npc/index.d.ts.map +1 -0
  276. package/dist/npc/index.js +12 -0
  277. package/dist/npc/index.js.map +1 -0
  278. package/dist/npc/traits.d.ts +33 -0
  279. package/dist/npc/traits.d.ts.map +1 -0
  280. package/dist/npc/traits.js +795 -0
  281. package/dist/npc/traits.js.map +1 -0
  282. package/dist/npc/types.d.ts +193 -0
  283. package/dist/npc/types.d.ts.map +1 -0
  284. package/dist/npc/types.js +9 -0
  285. package/dist/npc/types.js.map +1 -0
  286. package/dist/quest/QuestManager.d.ts +79 -0
  287. package/dist/quest/QuestManager.d.ts.map +1 -0
  288. package/dist/quest/QuestManager.js +273 -0
  289. package/dist/quest/QuestManager.js.map +1 -0
  290. package/dist/quest/index.d.ts +6 -0
  291. package/dist/quest/index.d.ts.map +1 -0
  292. package/dist/quest/index.js +9 -0
  293. package/dist/quest/index.js.map +1 -0
  294. package/dist/quest/types.d.ts +81 -0
  295. package/dist/quest/types.d.ts.map +1 -0
  296. package/dist/quest/types.js +8 -0
  297. package/dist/quest/types.js.map +1 -0
  298. package/dist/strategy/StrategyExecutor.d.ts +159 -0
  299. package/dist/strategy/StrategyExecutor.d.ts.map +1 -0
  300. package/dist/strategy/StrategyExecutor.js +479 -0
  301. package/dist/strategy/StrategyExecutor.js.map +1 -0
  302. package/dist/strategy/StrategyParser.d.ts +48 -0
  303. package/dist/strategy/StrategyParser.d.ts.map +1 -0
  304. package/dist/strategy/StrategyParser.js +321 -0
  305. package/dist/strategy/StrategyParser.js.map +1 -0
  306. package/dist/strategy/defaultStrategy.d.ts +40 -0
  307. package/dist/strategy/defaultStrategy.d.ts.map +1 -0
  308. package/dist/strategy/defaultStrategy.js +254 -0
  309. package/dist/strategy/defaultStrategy.js.map +1 -0
  310. package/dist/strategy/index.d.ts +8 -0
  311. package/dist/strategy/index.d.ts.map +1 -0
  312. package/dist/strategy/index.js +14 -0
  313. package/dist/strategy/index.js.map +1 -0
  314. package/dist/tui/ExploreMenu.d.ts +106 -0
  315. package/dist/tui/ExploreMenu.d.ts.map +1 -0
  316. package/dist/tui/ExploreMenu.js +282 -0
  317. package/dist/tui/ExploreMenu.js.map +1 -0
  318. package/dist/tui/GameUI.d.ts +313 -0
  319. package/dist/tui/GameUI.d.ts.map +1 -0
  320. package/dist/tui/GameUI.js +2116 -0
  321. package/dist/tui/GameUI.js.map +1 -0
  322. package/dist/tui/GameUIAdapter.d.ts +207 -0
  323. package/dist/tui/GameUIAdapter.d.ts.map +1 -0
  324. package/dist/tui/GameUIAdapter.js +1342 -0
  325. package/dist/tui/GameUIAdapter.js.map +1 -0
  326. package/dist/tui/Input.d.ts +139 -0
  327. package/dist/tui/Input.d.ts.map +1 -0
  328. package/dist/tui/Input.js +278 -0
  329. package/dist/tui/Input.js.map +1 -0
  330. package/dist/tui/Menu.d.ts +110 -0
  331. package/dist/tui/Menu.d.ts.map +1 -0
  332. package/dist/tui/Menu.js +365 -0
  333. package/dist/tui/Menu.js.map +1 -0
  334. package/dist/tui/Screen.d.ts +228 -0
  335. package/dist/tui/Screen.d.ts.map +1 -0
  336. package/dist/tui/Screen.js +502 -0
  337. package/dist/tui/Screen.js.map +1 -0
  338. package/dist/tui/components/Box.d.ts +36 -0
  339. package/dist/tui/components/Box.d.ts.map +1 -0
  340. package/dist/tui/components/Box.js +43 -0
  341. package/dist/tui/components/Box.js.map +1 -0
  342. package/dist/tui/components/List.d.ts +69 -0
  343. package/dist/tui/components/List.d.ts.map +1 -0
  344. package/dist/tui/components/List.js +136 -0
  345. package/dist/tui/components/List.js.map +1 -0
  346. package/dist/tui/components/ProgressBar.d.ts +42 -0
  347. package/dist/tui/components/ProgressBar.d.ts.map +1 -0
  348. package/dist/tui/components/ProgressBar.js +75 -0
  349. package/dist/tui/components/ProgressBar.js.map +1 -0
  350. package/dist/tui/components/index.d.ts +8 -0
  351. package/dist/tui/components/index.d.ts.map +1 -0
  352. package/dist/tui/components/index.js +11 -0
  353. package/dist/tui/components/index.js.map +1 -0
  354. package/dist/tui/core/BaseSection.d.ts +98 -0
  355. package/dist/tui/core/BaseSection.d.ts.map +1 -0
  356. package/dist/tui/core/BaseSection.js +174 -0
  357. package/dist/tui/core/BaseSection.js.map +1 -0
  358. package/dist/tui/core/Component.d.ts +61 -0
  359. package/dist/tui/core/Component.d.ts.map +1 -0
  360. package/dist/tui/core/Component.js +32 -0
  361. package/dist/tui/core/Component.js.map +1 -0
  362. package/dist/tui/core/Section.d.ts +101 -0
  363. package/dist/tui/core/Section.d.ts.map +1 -0
  364. package/dist/tui/core/Section.js +24 -0
  365. package/dist/tui/core/Section.js.map +1 -0
  366. package/dist/tui/core/SectionManager.d.ts +108 -0
  367. package/dist/tui/core/SectionManager.d.ts.map +1 -0
  368. package/dist/tui/core/SectionManager.js +258 -0
  369. package/dist/tui/core/SectionManager.js.map +1 -0
  370. package/dist/tui/core/index.d.ts +9 -0
  371. package/dist/tui/core/index.d.ts.map +1 -0
  372. package/dist/tui/core/index.js +12 -0
  373. package/dist/tui/core/index.js.map +1 -0
  374. package/dist/tui/index.d.ts +15 -0
  375. package/dist/tui/index.d.ts.map +1 -0
  376. package/dist/tui/index.js +23 -0
  377. package/dist/tui/index.js.map +1 -0
  378. package/dist/tui/screens/BaseScreen.d.ts +62 -0
  379. package/dist/tui/screens/BaseScreen.d.ts.map +1 -0
  380. package/dist/tui/screens/BaseScreen.js +55 -0
  381. package/dist/tui/screens/BaseScreen.js.map +1 -0
  382. package/dist/tui/screens/CombatScreen.d.ts +43 -0
  383. package/dist/tui/screens/CombatScreen.d.ts.map +1 -0
  384. package/dist/tui/screens/CombatScreen.js +125 -0
  385. package/dist/tui/screens/CombatScreen.js.map +1 -0
  386. package/dist/tui/screens/DialogScreen.d.ts +53 -0
  387. package/dist/tui/screens/DialogScreen.d.ts.map +1 -0
  388. package/dist/tui/screens/DialogScreen.js +90 -0
  389. package/dist/tui/screens/DialogScreen.js.map +1 -0
  390. package/dist/tui/screens/DungeonScreen.d.ts +80 -0
  391. package/dist/tui/screens/DungeonScreen.d.ts.map +1 -0
  392. package/dist/tui/screens/DungeonScreen.js +317 -0
  393. package/dist/tui/screens/DungeonScreen.js.map +1 -0
  394. package/dist/tui/screens/ExploreScreen.d.ts +69 -0
  395. package/dist/tui/screens/ExploreScreen.d.ts.map +1 -0
  396. package/dist/tui/screens/ExploreScreen.js +224 -0
  397. package/dist/tui/screens/ExploreScreen.js.map +1 -0
  398. package/dist/tui/screens/SectionScreen.d.ts +84 -0
  399. package/dist/tui/screens/SectionScreen.d.ts.map +1 -0
  400. package/dist/tui/screens/SectionScreen.js +156 -0
  401. package/dist/tui/screens/SectionScreen.js.map +1 -0
  402. package/dist/tui/screens/TitleScreen.d.ts +40 -0
  403. package/dist/tui/screens/TitleScreen.d.ts.map +1 -0
  404. package/dist/tui/screens/TitleScreen.js +253 -0
  405. package/dist/tui/screens/TitleScreen.js.map +1 -0
  406. package/dist/tui/screens/TownScreen.d.ts +98 -0
  407. package/dist/tui/screens/TownScreen.d.ts.map +1 -0
  408. package/dist/tui/screens/TownScreen.js +370 -0
  409. package/dist/tui/screens/TownScreen.js.map +1 -0
  410. package/dist/tui/screens/TravelScreen.d.ts +67 -0
  411. package/dist/tui/screens/TravelScreen.d.ts.map +1 -0
  412. package/dist/tui/screens/TravelScreen.js +286 -0
  413. package/dist/tui/screens/TravelScreen.js.map +1 -0
  414. package/dist/tui/screens/index.d.ts +8 -0
  415. package/dist/tui/screens/index.d.ts.map +1 -0
  416. package/dist/tui/screens/index.js +17 -0
  417. package/dist/tui/screens/index.js.map +1 -0
  418. package/dist/tui/sections/ActionsSection.d.ts +71 -0
  419. package/dist/tui/sections/ActionsSection.d.ts.map +1 -0
  420. package/dist/tui/sections/ActionsSection.js +184 -0
  421. package/dist/tui/sections/ActionsSection.js.map +1 -0
  422. package/dist/tui/sections/DungeonSection.d.ts +65 -0
  423. package/dist/tui/sections/DungeonSection.d.ts.map +1 -0
  424. package/dist/tui/sections/DungeonSection.js +144 -0
  425. package/dist/tui/sections/DungeonSection.js.map +1 -0
  426. package/dist/tui/sections/EventsSection.d.ts +50 -0
  427. package/dist/tui/sections/EventsSection.d.ts.map +1 -0
  428. package/dist/tui/sections/EventsSection.js +134 -0
  429. package/dist/tui/sections/EventsSection.js.map +1 -0
  430. package/dist/tui/sections/MapSection.d.ts +66 -0
  431. package/dist/tui/sections/MapSection.d.ts.map +1 -0
  432. package/dist/tui/sections/MapSection.js +669 -0
  433. package/dist/tui/sections/MapSection.js.map +1 -0
  434. package/dist/tui/sections/StatusSection.d.ts +47 -0
  435. package/dist/tui/sections/StatusSection.d.ts.map +1 -0
  436. package/dist/tui/sections/StatusSection.js +133 -0
  437. package/dist/tui/sections/StatusSection.js.map +1 -0
  438. package/dist/tui/sections/TeamSection.d.ts +71 -0
  439. package/dist/tui/sections/TeamSection.d.ts.map +1 -0
  440. package/dist/tui/sections/TeamSection.js +224 -0
  441. package/dist/tui/sections/TeamSection.js.map +1 -0
  442. package/dist/tui/sections/TravelingSection.d.ts +51 -0
  443. package/dist/tui/sections/TravelingSection.d.ts.map +1 -0
  444. package/dist/tui/sections/TravelingSection.js +106 -0
  445. package/dist/tui/sections/TravelingSection.js.map +1 -0
  446. package/dist/tui/sections/index.d.ts +9 -0
  447. package/dist/tui/sections/index.d.ts.map +1 -0
  448. package/dist/tui/sections/index.js +12 -0
  449. package/dist/tui/sections/index.js.map +1 -0
  450. package/dist/ui/Terminal.d.ts +68 -0
  451. package/dist/ui/Terminal.d.ts.map +1 -0
  452. package/dist/ui/Terminal.js +297 -0
  453. package/dist/ui/Terminal.js.map +1 -0
  454. package/dist/ui/index.d.ts +5 -0
  455. package/dist/ui/index.d.ts.map +1 -0
  456. package/dist/ui/index.js +8 -0
  457. package/dist/ui/index.js.map +1 -0
  458. package/dist/utils/configMigration.d.ts +14 -0
  459. package/dist/utils/configMigration.d.ts.map +1 -0
  460. package/dist/utils/configMigration.js +92 -0
  461. package/dist/utils/configMigration.js.map +1 -0
  462. package/dist/utils/errorHandler.d.ts +86 -0
  463. package/dist/utils/errorHandler.d.ts.map +1 -0
  464. package/dist/utils/errorHandler.js +224 -0
  465. package/dist/utils/errorHandler.js.map +1 -0
  466. package/dist/utils/logger.d.ts +14 -0
  467. package/dist/utils/logger.d.ts.map +1 -0
  468. package/dist/utils/logger.js +43 -0
  469. package/dist/utils/logger.js.map +1 -0
  470. package/dist/weapon/WeaponFactory.d.ts +32 -0
  471. package/dist/weapon/WeaponFactory.d.ts.map +1 -0
  472. package/dist/weapon/WeaponFactory.js +216 -0
  473. package/dist/weapon/WeaponFactory.js.map +1 -0
  474. package/dist/weapon/index.d.ts +5 -0
  475. package/dist/weapon/index.d.ts.map +1 -0
  476. package/dist/weapon/index.js +8 -0
  477. package/dist/weapon/index.js.map +1 -0
  478. package/package.json +46 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionsSection.js","sources":["tui/sections/ActionsSection.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Actions Section - NPC list and quick actions menu\r\n */\r\n\r\nimport { BaseSection, type BaseSectionConfig } from '../core/BaseSection.js';\r\nimport type { RenderContext } from '../core/Component.js';\r\nimport type { KeyEvent } from '../Input.js';\r\nimport { ANSI } from '../Screen.js';\r\nimport type { ExtendedNPC } from '../../npc/types.js';\r\nimport type { Quest } from '../../quest/types.js';\r\n\r\n/**\r\n * Action item types\r\n */\r\nexport interface ActionItem {\r\n type: 'npc' | 'action';\r\n id: string;\r\n label: string;\r\n}\r\n\r\n/**\r\n * Actions section data\r\n */\r\nexport interface ActionsData {\r\n npcs: ExtendedNPC[];\r\n quests: Quest[];\r\n}\r\n\r\n/**\r\n * Actions Section - Shows NPCs and quick actions\r\n */\r\nexport class ActionsSection extends BaseSection {\r\n private npcs: ExtendedNPC[] = [];\r\n private quests: Quest[] = [];\r\n private items: ActionItem[] = [];\r\n\r\n // Callbacks for actions\r\n private onNpcSelect?: (npcIndex: number) => void;\r\n private onOpenModal?: (modal: 'inventory' | 'character' | 'quests' | 'workshop') => void;\r\n\r\n constructor() {\r\n const config: BaseSectionConfig = {\r\n id: 'actions',\r\n title: 'Actions',\r\n canEnter: true,\r\n hints: {\r\n focused: 'Enter: enter',\r\n entered: 'Up/Down: select Enter: confirm Esc: exit',\r\n },\r\n };\r\n super(config);\r\n }\r\n\r\n /**\r\n * Set callback for NPC selection\r\n */\r\n setOnNpcSelect(callback: (npcIndex: number) => void): void {\r\n this.onNpcSelect = callback;\r\n }\r\n\r\n /**\r\n * Set callback for opening modals\r\n */\r\n setOnOpenModal(callback: (modal: 'inventory' | 'character' | 'quests' | 'workshop') => void): void {\r\n this.onOpenModal = callback;\r\n }\r\n\r\n /**\r\n * Update section data\r\n */\r\n update(data: ActionsData): void {\r\n this.npcs = data.npcs;\r\n this.quests = data.quests;\r\n this.buildItems();\r\n }\r\n\r\n /**\r\n * Build the items list\r\n */\r\n private buildItems(): void {\r\n this.items = [];\r\n\r\n // Add NPCs\r\n for (let i = 0; i < this.npcs.length; i++) {\r\n const npc = this.npcs[i];\r\n this.items.push({\r\n type: 'npc',\r\n id: `npc_${i}`,\r\n label: npc.name,\r\n });\r\n }\r\n\r\n // Add quick actions\r\n const quickActions = [\r\n { id: 'inventory', label: '[I] Inventory' },\r\n { id: 'character', label: '[C] Character' },\r\n { id: 'quests', label: `[Q] Quests (${this.quests.length})` },\r\n { id: 'workshop', label: '[W] Workshop' },\r\n ];\r\n\r\n for (const action of quickActions) {\r\n this.items.push({\r\n type: 'action',\r\n id: action.id,\r\n label: action.label,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Render actions content\r\n */\r\n protected renderContent(ctx: RenderContext): void {\r\n const { screen, bounds } = ctx;\r\n const { x, y, width, height } = bounds;\r\n\r\n let lineY = y + 1;\r\n const maxItems = height - 3;\r\n let itemIndex = 0;\r\n\r\n // NPCs section\r\n if (this.npcs.length > 0 && lineY < y + maxItems) {\r\n screen.write(x + 2, lineY, '* NPCs', ANSI.fg.cyan, undefined, ANSI.bold);\r\n lineY++;\r\n\r\n for (let i = 0; i < Math.min(this.npcs.length, 4); i++) {\r\n if (lineY >= y + maxItems) break;\r\n const npc = this.npcs[i];\r\n const rel = npc.playerRelationship > 0 ? '+' : npc.playerRelationship < 0 ? '-' : '';\r\n const label = `${npc.name} ${rel}`;\r\n\r\n this.renderActionItem(ctx, itemIndex, label, lineY);\r\n lineY++;\r\n itemIndex++;\r\n }\r\n lineY++;\r\n }\r\n\r\n // Quick actions section (no header, directly show actions)\r\n if (lineY < y + height - 2) {\r\n // Start from where NPCs left off\r\n const actionsStartIndex = this.npcs.length;\r\n for (let i = actionsStartIndex; i < this.items.length; i++) {\r\n if (lineY >= y + height - 2) break;\r\n const item = this.items[i];\r\n this.renderActionItem(ctx, i, item.label, lineY);\r\n lineY++;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Render a single action item\r\n */\r\n private renderActionItem(ctx: RenderContext, index: number, label: string, lineY: number): void {\r\n const { screen, bounds } = ctx;\r\n const { x, width } = bounds;\r\n\r\n const isSelected = this.state.entered && this.state.selectedIndex === index;\r\n const fg = isSelected ? ANSI.fg.black : ANSI.fg.white;\r\n const bg = isSelected ? ANSI.bg.cyan : undefined;\r\n const indicator = isSelected ? '>' : ' ';\r\n\r\n screen.write(x + 1, lineY, indicator, ANSI.fg.yellow);\r\n screen.write(x + 3, lineY, label.slice(0, width - 5).padEnd(width - 5), fg, bg);\r\n }\r\n\r\n /**\r\n * Get number of items\r\n */\r\n getItemCount(): number {\r\n return this.items.length;\r\n }\r\n\r\n /**\r\n * Activate selected item\r\n */\r\n activateItem(): boolean {\r\n const item = this.items[this.state.selectedIndex];\r\n if (!item) return false;\r\n\r\n if (item.type === 'npc') {\r\n const npcIndex = parseInt(item.id.replace('npc_', ''), 10);\r\n this.onNpcSelect?.(npcIndex);\r\n return true;\r\n }\r\n\r\n if (item.type === 'action') {\r\n const modalActions: Record<string, 'inventory' | 'character' | 'quests' | 'workshop'> = {\r\n 'inventory': 'inventory',\r\n 'character': 'character',\r\n 'quests': 'quests',\r\n 'workshop': 'workshop',\r\n };\r\n if (modalActions[item.id]) {\r\n this.onOpenModal?.(modalActions[item.id]);\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Handle custom keys (shortcuts)\r\n */\r\n protected handleCustomKey(key: KeyEvent): boolean {\r\n // Quick shortcuts for actions\r\n if (key.raw) {\r\n const shortcuts: Record<string, 'inventory' | 'character' | 'quests' | 'workshop'> = {\r\n 'i': 'inventory',\r\n 'c': 'character',\r\n 'q': 'quests',\r\n 'w': 'workshop',\r\n };\r\n const modal = shortcuts[key.raw.toLowerCase()];\r\n if (modal) {\r\n this.onOpenModal?.(modal);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"704eb02d-f3de-515d-9383-9594e4393a38"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Dungeon Section - Shows dungeon progress and ETA during dungeon exploration
3
+ */
4
+ import { BaseSection } from '../core/BaseSection.js';
5
+ import type { RenderContext } from '../core/Component.js';
6
+ import type { KeyEvent } from '../Input.js';
7
+ /**
8
+ * Dungeon progress data
9
+ */
10
+ export interface DungeonData {
11
+ dungeonName: string;
12
+ currentFloor: number;
13
+ totalFloors: number;
14
+ roomsExplored: number;
15
+ totalRooms: number;
16
+ enemiesDefeated: number;
17
+ totalEnemies: number;
18
+ treasuresFound: number;
19
+ currentRoomType: string;
20
+ playerHp: number;
21
+ playerMaxHp: number;
22
+ estimatedTimeRemaining: number;
23
+ elapsedTime: number;
24
+ }
25
+ /**
26
+ * Dungeon Section - Shows dungeon exploration progress
27
+ */
28
+ export declare class DungeonSection extends BaseSection {
29
+ private data;
30
+ private onAbort?;
31
+ constructor();
32
+ /**
33
+ * Set callback for abort dungeon
34
+ */
35
+ setOnAbort(callback: () => void): void;
36
+ /**
37
+ * Update dungeon data
38
+ */
39
+ update(data: DungeonData): void;
40
+ /**
41
+ * Render dungeon content
42
+ */
43
+ protected renderContent(ctx: RenderContext): void;
44
+ /**
45
+ * Get icon for room type
46
+ */
47
+ private getRoomIcon;
48
+ /**
49
+ * Format time in seconds to mm:ss
50
+ */
51
+ private formatTime;
52
+ /**
53
+ * Get item count (none)
54
+ */
55
+ getItemCount(): number;
56
+ /**
57
+ * Activate item (no-op)
58
+ */
59
+ activateItem(): boolean;
60
+ /**
61
+ * Handle custom keys - 'q' to abort dungeon
62
+ */
63
+ protected handleCustomKey(key: KeyEvent): boolean;
64
+ }
65
+ //# sourceMappingURL=DungeonSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DungeonSection.d.ts","sourceRoot":"/","sources":["tui/sections/DungeonSection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAA0B,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,OAAO,CAAC,CAAa;;IAgB7B;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAItC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAI/B;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAmEjD;;OAEG;IACH,OAAO,CAAC,WAAW;IAanB;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;CAOlD"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Dungeon Section - Shows dungeon progress and ETA during dungeon exploration
3
+ */
4
+
5
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f459b9be-c625-54e5-9e64-a026ad4943f7")}catch(e){}}();
6
+ import { BaseSection } from '../core/BaseSection.js';
7
+ import { ANSI } from '../Screen.js';
8
+ /**
9
+ * Dungeon Section - Shows dungeon exploration progress
10
+ */
11
+ export class DungeonSection extends BaseSection {
12
+ data = null;
13
+ onAbort;
14
+ constructor() {
15
+ const config = {
16
+ id: 'dungeon',
17
+ title: 'Dungeon',
18
+ canEnter: true,
19
+ hints: {
20
+ focused: 'Enter: enter section',
21
+ entered: '[Q] Abort dungeon [Esc] Exit section',
22
+ unfocused: '',
23
+ },
24
+ };
25
+ super(config);
26
+ }
27
+ /**
28
+ * Set callback for abort dungeon
29
+ */
30
+ setOnAbort(callback) {
31
+ this.onAbort = callback;
32
+ }
33
+ /**
34
+ * Update dungeon data
35
+ */
36
+ update(data) {
37
+ this.data = data;
38
+ }
39
+ /**
40
+ * Render dungeon content
41
+ */
42
+ renderContent(ctx) {
43
+ if (!this.data)
44
+ return;
45
+ const { screen, bounds } = ctx;
46
+ const { x, y, width, height } = bounds;
47
+ let lineY = y + 2;
48
+ // Dungeon name
49
+ const nameText = this.data.dungeonName.slice(0, width - 4);
50
+ screen.write(x + 2, lineY++, nameText, ANSI.fg.cyan, undefined, ANSI.bold);
51
+ lineY++;
52
+ // Floor progress
53
+ const floorText = `Floor: ${this.data.currentFloor}/${this.data.totalFloors}`;
54
+ screen.write(x + 2, lineY++, floorText, ANSI.fg.yellow);
55
+ // Room progress bar
56
+ const roomProgress = this.data.totalRooms > 0
57
+ ? this.data.roomsExplored / this.data.totalRooms
58
+ : 0;
59
+ const barWidth = Math.min(width - 6, 16);
60
+ screen.write(x + 2, lineY++, 'Rooms:', ANSI.fg.gray);
61
+ screen.drawProgressBar(x + 2, lineY++, barWidth, roomProgress, 1, ANSI.fg.green);
62
+ const roomPct = Math.floor(roomProgress * 100);
63
+ screen.write(x + 2 + barWidth + 1, lineY - 1, `${roomPct}%`, ANSI.fg.green);
64
+ lineY++;
65
+ // Current room type
66
+ const roomIcon = this.getRoomIcon(this.data.currentRoomType);
67
+ screen.write(x + 2, lineY++, `Room: ${roomIcon} ${this.data.currentRoomType}`, ANSI.fg.white);
68
+ lineY++;
69
+ // Stats
70
+ screen.write(x + 2, lineY++, '--- Progress ---', ANSI.fg.cyan);
71
+ screen.write(x + 2, lineY++, `Enemies: ${this.data.enemiesDefeated}/${this.data.totalEnemies}`, ANSI.fg.red);
72
+ screen.write(x + 2, lineY++, `Treasure: ${this.data.treasuresFound}`, ANSI.fg.yellow);
73
+ lineY++;
74
+ // Time
75
+ screen.write(x + 2, lineY++, '--- Time ---', ANSI.fg.cyan);
76
+ const elapsed = this.formatTime(this.data.elapsedTime);
77
+ screen.write(x + 2, lineY++, `Elapsed: ${elapsed}`, ANSI.fg.gray);
78
+ // ETA
79
+ if (this.data.estimatedTimeRemaining > 0) {
80
+ const eta = this.formatTime(this.data.estimatedTimeRemaining);
81
+ screen.write(x + 2, lineY++, `ETA: ~${eta}`, ANSI.fg.yellow);
82
+ }
83
+ else {
84
+ screen.write(x + 2, lineY++, 'ETA: calculating...', ANSI.fg.gray);
85
+ }
86
+ // HP bar at bottom
87
+ if (lineY < y + height - 3) {
88
+ lineY = y + height - 4;
89
+ const hpPct = this.data.playerMaxHp > 0
90
+ ? this.data.playerHp / this.data.playerMaxHp
91
+ : 0;
92
+ const hpColor = hpPct > 0.5 ? ANSI.fg.green : hpPct > 0.25 ? ANSI.fg.yellow : ANSI.fg.red;
93
+ screen.write(x + 2, lineY++, 'HP:', ANSI.fg.gray);
94
+ screen.drawProgressBar(x + 2, lineY, barWidth, hpPct, 1, hpColor);
95
+ }
96
+ }
97
+ /**
98
+ * Get icon for room type
99
+ */
100
+ getRoomIcon(roomType) {
101
+ const icons = {
102
+ 'combat': '!',
103
+ 'treasure': '$',
104
+ 'rest': 'R',
105
+ 'event': '?',
106
+ 'dungeon_entrance': '>',
107
+ 'shop': 'S',
108
+ 'empty': '.',
109
+ };
110
+ return icons[roomType] || '?';
111
+ }
112
+ /**
113
+ * Format time in seconds to mm:ss
114
+ */
115
+ formatTime(seconds) {
116
+ const mins = Math.floor(seconds / 60);
117
+ const secs = Math.floor(seconds % 60);
118
+ return `${mins}:${secs.toString().padStart(2, '0')}`;
119
+ }
120
+ /**
121
+ * Get item count (none)
122
+ */
123
+ getItemCount() {
124
+ return 0;
125
+ }
126
+ /**
127
+ * Activate item (no-op)
128
+ */
129
+ activateItem() {
130
+ return false;
131
+ }
132
+ /**
133
+ * Handle custom keys - 'q' to abort dungeon
134
+ */
135
+ handleCustomKey(key) {
136
+ if (this.state.entered && key.raw?.toLowerCase() === 'q') {
137
+ this.onAbort?.();
138
+ return true;
139
+ }
140
+ return false;
141
+ }
142
+ }
143
+ //# sourceMappingURL=DungeonSection.js.map
144
+ //# debugId=f459b9be-c625-54e5-9e64-a026ad4943f7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DungeonSection.js","sources":["tui/sections/DungeonSection.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Dungeon Section - Shows dungeon progress and ETA during dungeon exploration\r\n */\r\n\r\nimport { BaseSection, type BaseSectionConfig } from '../core/BaseSection.js';\r\nimport type { RenderContext } from '../core/Component.js';\r\nimport type { KeyEvent } from '../Input.js';\r\nimport { ANSI } from '../Screen.js';\r\n\r\n/**\r\n * Dungeon progress data\r\n */\r\nexport interface DungeonData {\r\n dungeonName: string;\r\n currentFloor: number;\r\n totalFloors: number;\r\n roomsExplored: number;\r\n totalRooms: number;\r\n enemiesDefeated: number;\r\n totalEnemies: number;\r\n treasuresFound: number;\r\n currentRoomType: string;\r\n playerHp: number;\r\n playerMaxHp: number;\r\n estimatedTimeRemaining: number; // seconds\r\n elapsedTime: number; // seconds\r\n}\r\n\r\n/**\r\n * Dungeon Section - Shows dungeon exploration progress\r\n */\r\nexport class DungeonSection extends BaseSection {\r\n private data: DungeonData | null = null;\r\n private onAbort?: () => void;\r\n\r\n constructor() {\r\n const config: BaseSectionConfig = {\r\n id: 'dungeon',\r\n title: 'Dungeon',\r\n canEnter: true,\r\n hints: {\r\n focused: 'Enter: enter section',\r\n entered: '[Q] Abort dungeon [Esc] Exit section',\r\n unfocused: '',\r\n },\r\n };\r\n super(config);\r\n }\r\n\r\n /**\r\n * Set callback for abort dungeon\r\n */\r\n setOnAbort(callback: () => void): void {\r\n this.onAbort = callback;\r\n }\r\n\r\n /**\r\n * Update dungeon data\r\n */\r\n update(data: DungeonData): void {\r\n this.data = data;\r\n }\r\n\r\n /**\r\n * Render dungeon content\r\n */\r\n protected renderContent(ctx: RenderContext): void {\r\n if (!this.data) return;\r\n\r\n const { screen, bounds } = ctx;\r\n const { x, y, width, height } = bounds;\r\n\r\n let lineY = y + 2;\r\n\r\n // Dungeon name\r\n const nameText = this.data.dungeonName.slice(0, width - 4);\r\n screen.write(x + 2, lineY++, nameText, ANSI.fg.cyan, undefined, ANSI.bold);\r\n lineY++;\r\n\r\n // Floor progress\r\n const floorText = `Floor: ${this.data.currentFloor}/${this.data.totalFloors}`;\r\n screen.write(x + 2, lineY++, floorText, ANSI.fg.yellow);\r\n\r\n // Room progress bar\r\n const roomProgress = this.data.totalRooms > 0\r\n ? this.data.roomsExplored / this.data.totalRooms\r\n : 0;\r\n const barWidth = Math.min(width - 6, 16);\r\n screen.write(x + 2, lineY++, 'Rooms:', ANSI.fg.gray);\r\n screen.drawProgressBar(x + 2, lineY++, barWidth, roomProgress, 1, ANSI.fg.green);\r\n const roomPct = Math.floor(roomProgress * 100);\r\n screen.write(x + 2 + barWidth + 1, lineY - 1, `${roomPct}%`, ANSI.fg.green);\r\n\r\n lineY++;\r\n\r\n // Current room type\r\n const roomIcon = this.getRoomIcon(this.data.currentRoomType);\r\n screen.write(x + 2, lineY++, `Room: ${roomIcon} ${this.data.currentRoomType}`, ANSI.fg.white);\r\n\r\n lineY++;\r\n\r\n // Stats\r\n screen.write(x + 2, lineY++, '--- Progress ---', ANSI.fg.cyan);\r\n screen.write(x + 2, lineY++, `Enemies: ${this.data.enemiesDefeated}/${this.data.totalEnemies}`, ANSI.fg.red);\r\n screen.write(x + 2, lineY++, `Treasure: ${this.data.treasuresFound}`, ANSI.fg.yellow);\r\n\r\n lineY++;\r\n\r\n // Time\r\n screen.write(x + 2, lineY++, '--- Time ---', ANSI.fg.cyan);\r\n const elapsed = this.formatTime(this.data.elapsedTime);\r\n screen.write(x + 2, lineY++, `Elapsed: ${elapsed}`, ANSI.fg.gray);\r\n\r\n // ETA\r\n if (this.data.estimatedTimeRemaining > 0) {\r\n const eta = this.formatTime(this.data.estimatedTimeRemaining);\r\n screen.write(x + 2, lineY++, `ETA: ~${eta}`, ANSI.fg.yellow);\r\n } else {\r\n screen.write(x + 2, lineY++, 'ETA: calculating...', ANSI.fg.gray);\r\n }\r\n\r\n // HP bar at bottom\r\n if (lineY < y + height - 3) {\r\n lineY = y + height - 4;\r\n const hpPct = this.data.playerMaxHp > 0\r\n ? this.data.playerHp / this.data.playerMaxHp\r\n : 0;\r\n const hpColor = hpPct > 0.5 ? ANSI.fg.green : hpPct > 0.25 ? ANSI.fg.yellow : ANSI.fg.red;\r\n screen.write(x + 2, lineY++, 'HP:', ANSI.fg.gray);\r\n screen.drawProgressBar(x + 2, lineY, barWidth, hpPct, 1, hpColor);\r\n }\r\n }\r\n\r\n /**\r\n * Get icon for room type\r\n */\r\n private getRoomIcon(roomType: string): string {\r\n const icons: Record<string, string> = {\r\n 'combat': '!',\r\n 'treasure': '$',\r\n 'rest': 'R',\r\n 'event': '?',\r\n 'dungeon_entrance': '>',\r\n 'shop': 'S',\r\n 'empty': '.',\r\n };\r\n return icons[roomType] || '?';\r\n }\r\n\r\n /**\r\n * Format time in seconds to mm:ss\r\n */\r\n private formatTime(seconds: number): string {\r\n const mins = Math.floor(seconds / 60);\r\n const secs = Math.floor(seconds % 60);\r\n return `${mins}:${secs.toString().padStart(2, '0')}`;\r\n }\r\n\r\n /**\r\n * Get item count (none)\r\n */\r\n getItemCount(): number {\r\n return 0;\r\n }\r\n\r\n /**\r\n * Activate item (no-op)\r\n */\r\n activateItem(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Handle custom keys - 'q' to abort dungeon\r\n */\r\n protected handleCustomKey(key: KeyEvent): boolean {\r\n if (this.state.entered && key.raw?.toLowerCase() === 'q') {\r\n this.onAbort?.();\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"f459b9be-c625-54e5-9e64-a026ad4943f7"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Events Section - Displays scrollable event log
3
+ */
4
+ import { BaseSection } from '../core/BaseSection.js';
5
+ import type { RenderContext } from '../core/Component.js';
6
+ /**
7
+ * Events Section - Shows game event log with scrolling
8
+ */
9
+ export declare class EventsSection extends BaseSection {
10
+ private events;
11
+ private maxEvents;
12
+ constructor();
13
+ /**
14
+ * Update events list
15
+ */
16
+ update(events: string[]): void;
17
+ /**
18
+ * Add a single event
19
+ */
20
+ addEvent(message: string): void;
21
+ /**
22
+ * Get all events
23
+ */
24
+ getEvents(): string[];
25
+ /**
26
+ * Clear all events
27
+ */
28
+ clearEvents(): void;
29
+ /**
30
+ * Scroll to the bottom of the log
31
+ */
32
+ private scrollToBottom;
33
+ /**
34
+ * Render events content
35
+ */
36
+ protected renderContent(ctx: RenderContext): void;
37
+ /**
38
+ * Get number of events
39
+ */
40
+ getItemCount(): number;
41
+ /**
42
+ * Events are read-only, activation does nothing
43
+ */
44
+ activateItem(): boolean;
45
+ /**
46
+ * Override max visible items for events
47
+ */
48
+ protected getMaxVisibleItems(): number;
49
+ }
50
+ //# sourceMappingURL=EventsSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventsSection.d.ts","sourceRoot":"/","sources":["tui/sections/EventsSection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAA0B,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D;;GAEG;AACH,qBAAa,aAAc,SAAQ,WAAW;IAC5C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAe;;IAehC;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ9B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAW/B;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,WAAW,IAAI,IAAI;IAMnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAkDjD;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,SAAS,CAAC,kBAAkB,IAAI,MAAM;CAGvC"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Events Section - Displays scrollable event log
3
+ */
4
+
5
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e42bacaf-b18f-5e50-8e5a-df8e54f139be")}catch(e){}}();
6
+ import { BaseSection } from '../core/BaseSection.js';
7
+ import { ANSI } from '../Screen.js';
8
+ /**
9
+ * Events Section - Shows game event log with scrolling
10
+ */
11
+ export class EventsSection extends BaseSection {
12
+ events = [];
13
+ maxEvents = 100;
14
+ constructor() {
15
+ const config = {
16
+ id: 'events',
17
+ title: 'Events',
18
+ canEnter: true,
19
+ hints: {
20
+ focused: 'Enter: scroll',
21
+ entered: 'Up/Down: scroll Esc: exit',
22
+ },
23
+ };
24
+ super(config);
25
+ }
26
+ /**
27
+ * Update events list
28
+ */
29
+ update(events) {
30
+ this.events = events;
31
+ // Auto-scroll to bottom when new events arrive (if not entered)
32
+ if (!this.state.entered) {
33
+ this.scrollToBottom();
34
+ }
35
+ }
36
+ /**
37
+ * Add a single event
38
+ */
39
+ addEvent(message) {
40
+ const time = new Date().toLocaleTimeString('en-US', { hour12: false }).slice(0, 5);
41
+ this.events.push(`[${time}] ${message}`);
42
+ if (this.events.length > this.maxEvents) {
43
+ this.events.shift();
44
+ }
45
+ if (!this.state.entered) {
46
+ this.scrollToBottom();
47
+ }
48
+ }
49
+ /**
50
+ * Get all events
51
+ */
52
+ getEvents() {
53
+ return this.events;
54
+ }
55
+ /**
56
+ * Clear all events
57
+ */
58
+ clearEvents() {
59
+ this.events = [];
60
+ this.state.scrollOffset = 0;
61
+ this.state.selectedIndex = 0;
62
+ }
63
+ /**
64
+ * Scroll to the bottom of the log
65
+ */
66
+ scrollToBottom() {
67
+ const maxVisible = this.getMaxVisibleItems();
68
+ this.state.scrollOffset = Math.max(0, this.events.length - maxVisible);
69
+ this.state.selectedIndex = this.events.length - 1;
70
+ }
71
+ /**
72
+ * Render events content
73
+ */
74
+ renderContent(ctx) {
75
+ const { screen, bounds } = ctx;
76
+ const { x, y, width, height } = bounds;
77
+ const maxLogLines = height - 2;
78
+ const logStartY = y + 1;
79
+ // Calculate scroll offset
80
+ let scrollOffset;
81
+ if (this.state.entered) {
82
+ scrollOffset = this.state.scrollOffset;
83
+ }
84
+ else {
85
+ // Auto-scroll to bottom when not entered
86
+ scrollOffset = Math.max(0, this.events.length - maxLogLines);
87
+ }
88
+ // Render visible events
89
+ for (let i = 0; i < Math.min(this.events.length, maxLogLines); i++) {
90
+ const logIndex = scrollOffset + i;
91
+ if (logIndex >= this.events.length)
92
+ break;
93
+ const isSelected = this.state.entered && logIndex === this.state.selectedIndex;
94
+ const fg = isSelected ? ANSI.fg.white : ANSI.fg.gray;
95
+ const bg = isSelected ? ANSI.bg.blue : undefined;
96
+ const indicator = isSelected ? '>' : ' ';
97
+ screen.write(x, logStartY + i, indicator, ANSI.fg.yellow);
98
+ screen.write(x + 1, logStartY + i, this.events[logIndex].slice(0, width - 3).padEnd(width - 3), fg, bg);
99
+ }
100
+ // Empty state message
101
+ if (this.events.length === 0) {
102
+ screen.write(x + 2, logStartY + 1, 'No events yet...', ANSI.fg.gray);
103
+ }
104
+ // Scroll indicators
105
+ if (this.events.length > maxLogLines) {
106
+ const canScrollUp = scrollOffset > 0;
107
+ const canScrollDown = scrollOffset + maxLogLines < this.events.length;
108
+ if (canScrollUp)
109
+ screen.write(x + width - 2, y, '^', ANSI.fg.yellow);
110
+ if (canScrollDown)
111
+ screen.write(x + width - 2, y + height - 1, 'v', ANSI.fg.yellow);
112
+ }
113
+ }
114
+ /**
115
+ * Get number of events
116
+ */
117
+ getItemCount() {
118
+ return this.events.length;
119
+ }
120
+ /**
121
+ * Events are read-only, activation does nothing
122
+ */
123
+ activateItem() {
124
+ return false;
125
+ }
126
+ /**
127
+ * Override max visible items for events
128
+ */
129
+ getMaxVisibleItems() {
130
+ return Math.max(1, this.bounds.height - 2);
131
+ }
132
+ }
133
+ //# sourceMappingURL=EventsSection.js.map
134
+ //# debugId=e42bacaf-b18f-5e50-8e5a-df8e54f139be
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventsSection.js","sources":["tui/sections/EventsSection.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Events Section - Displays scrollable event log\r\n */\r\n\r\nimport { BaseSection, type BaseSectionConfig } from '../core/BaseSection.js';\r\nimport type { RenderContext } from '../core/Component.js';\r\nimport { ANSI } from '../Screen.js';\r\n\r\n/**\r\n * Events Section - Shows game event log with scrolling\r\n */\r\nexport class EventsSection extends BaseSection {\r\n private events: string[] = [];\r\n private maxEvents: number = 100;\r\n\r\n constructor() {\r\n const config: BaseSectionConfig = {\r\n id: 'events',\r\n title: 'Events',\r\n canEnter: true,\r\n hints: {\r\n focused: 'Enter: scroll',\r\n entered: 'Up/Down: scroll Esc: exit',\r\n },\r\n };\r\n super(config);\r\n }\r\n\r\n /**\r\n * Update events list\r\n */\r\n update(events: string[]): void {\r\n this.events = events;\r\n // Auto-scroll to bottom when new events arrive (if not entered)\r\n if (!this.state.entered) {\r\n this.scrollToBottom();\r\n }\r\n }\r\n\r\n /**\r\n * Add a single event\r\n */\r\n addEvent(message: string): void {\r\n const time = new Date().toLocaleTimeString('en-US', { hour12: false }).slice(0, 5);\r\n this.events.push(`[${time}] ${message}`);\r\n if (this.events.length > this.maxEvents) {\r\n this.events.shift();\r\n }\r\n if (!this.state.entered) {\r\n this.scrollToBottom();\r\n }\r\n }\r\n\r\n /**\r\n * Get all events\r\n */\r\n getEvents(): string[] {\r\n return this.events;\r\n }\r\n\r\n /**\r\n * Clear all events\r\n */\r\n clearEvents(): void {\r\n this.events = [];\r\n this.state.scrollOffset = 0;\r\n this.state.selectedIndex = 0;\r\n }\r\n\r\n /**\r\n * Scroll to the bottom of the log\r\n */\r\n private scrollToBottom(): void {\r\n const maxVisible = this.getMaxVisibleItems();\r\n this.state.scrollOffset = Math.max(0, this.events.length - maxVisible);\r\n this.state.selectedIndex = this.events.length - 1;\r\n }\r\n\r\n /**\r\n * Render events content\r\n */\r\n protected renderContent(ctx: RenderContext): void {\r\n const { screen, bounds } = ctx;\r\n const { x, y, width, height } = bounds;\r\n\r\n const maxLogLines = height - 2;\r\n const logStartY = y + 1;\r\n\r\n // Calculate scroll offset\r\n let scrollOffset: number;\r\n if (this.state.entered) {\r\n scrollOffset = this.state.scrollOffset;\r\n } else {\r\n // Auto-scroll to bottom when not entered\r\n scrollOffset = Math.max(0, this.events.length - maxLogLines);\r\n }\r\n\r\n // Render visible events\r\n for (let i = 0; i < Math.min(this.events.length, maxLogLines); i++) {\r\n const logIndex = scrollOffset + i;\r\n if (logIndex >= this.events.length) break;\r\n\r\n const isSelected = this.state.entered && logIndex === this.state.selectedIndex;\r\n const fg = isSelected ? ANSI.fg.white : ANSI.fg.gray;\r\n const bg = isSelected ? ANSI.bg.blue : undefined;\r\n const indicator = isSelected ? '>' : ' ';\r\n\r\n screen.write(x, logStartY + i, indicator, ANSI.fg.yellow);\r\n screen.write(\r\n x + 1,\r\n logStartY + i,\r\n this.events[logIndex].slice(0, width - 3).padEnd(width - 3),\r\n fg,\r\n bg\r\n );\r\n }\r\n\r\n // Empty state message\r\n if (this.events.length === 0) {\r\n screen.write(x + 2, logStartY + 1, 'No events yet...', ANSI.fg.gray);\r\n }\r\n\r\n // Scroll indicators\r\n if (this.events.length > maxLogLines) {\r\n const canScrollUp = scrollOffset > 0;\r\n const canScrollDown = scrollOffset + maxLogLines < this.events.length;\r\n if (canScrollUp) screen.write(x + width - 2, y, '^', ANSI.fg.yellow);\r\n if (canScrollDown) screen.write(x + width - 2, y + height - 1, 'v', ANSI.fg.yellow);\r\n }\r\n }\r\n\r\n /**\r\n * Get number of events\r\n */\r\n getItemCount(): number {\r\n return this.events.length;\r\n }\r\n\r\n /**\r\n * Events are read-only, activation does nothing\r\n */\r\n activateItem(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Override max visible items for events\r\n */\r\n protected getMaxVisibleItems(): number {\r\n return Math.max(1, this.bounds.height - 2);\r\n }\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"e42bacaf-b18f-5e50-8e5a-df8e54f139be"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Map Section - Visual map with two rendering modes:
3
+ * 1. Dungeon: Tile-based grid (classic roguelike style)
4
+ * 2. Town: Node-link diagram with box-drawing characters
5
+ */
6
+ import { BaseSection } from '../core/BaseSection.js';
7
+ import type { RenderContext } from '../core/Component.js';
8
+ import type { KeyEvent } from '../Input.js';
9
+ import type { GameState } from '../../core/types.js';
10
+ /**
11
+ * Map Section - Shows current location and connected rooms
12
+ */
13
+ export declare class MapSection extends BaseSection {
14
+ private state_data;
15
+ private onTravel?;
16
+ private travelState;
17
+ private zoom;
18
+ private centerX;
19
+ private centerY;
20
+ private readonly MIN_ZOOM;
21
+ private readonly MAX_ZOOM;
22
+ private readonly ZOOM_STEP;
23
+ private readonly BASE_PAN_STEP;
24
+ constructor();
25
+ setOnTravel(callback: (roomIndex: number) => void): void;
26
+ update(state: GameState): void;
27
+ /**
28
+ * Set travel state for showing player movement on map
29
+ */
30
+ setTravelState(state: {
31
+ fromRoomId: string;
32
+ toRoomId: string;
33
+ progress: number;
34
+ } | null): void;
35
+ /**
36
+ * Get map rendering mode from GameMap type
37
+ */
38
+ private getMapMode;
39
+ protected renderContent(ctx: RenderContext): void;
40
+ private renderDungeonMap;
41
+ private drawCorridor;
42
+ private renderTownMap;
43
+ private drawBoxConnection;
44
+ private calculateRoomBounds;
45
+ private isInBounds;
46
+ private getRoomSymbol;
47
+ getItemCount(): number;
48
+ activateItem(): boolean;
49
+ protected getMaxVisibleItems(): number;
50
+ /**
51
+ * Helper to check if a key matches a character (checks both raw and name)
52
+ */
53
+ private isKey;
54
+ /**
55
+ * Handle zoom/pan controls - works when focused (not just entered)
56
+ * Pan moves the center in data coordinates (like mapscii)
57
+ */
58
+ handleZoomPan(key: KeyEvent): boolean;
59
+ protected handleCustomKey(key: KeyEvent): boolean;
60
+ /**
61
+ * Override handleKey to allow zoom/pan when focused OR entered
62
+ */
63
+ handleKey(key: KeyEvent): boolean;
64
+ resetView(): void;
65
+ }
66
+ //# sourceMappingURL=MapSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapSection.d.ts","sourceRoot":"/","sources":["tui/sections/MapSection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAA0B,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,qBAAqB,CAAC;AAoCrE;;GAEG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACzC,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,QAAQ,CAAC,CAA8B;IAG/C,OAAO,CAAC,WAAW,CAIH;IAGhB,OAAO,CAAC,IAAI,CAAe;IAG3B,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAO;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAO;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAElC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAO;;IAerC,WAAW,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIxD,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAI9B;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,IAAI;IAI9F;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAgBjD,OAAO,CAAC,gBAAgB;IAoMxB,OAAO,CAAC,YAAY;IA0CpB,OAAO,CAAC,aAAa;IAyNrB,OAAO,CAAC,iBAAiB;IAsCzB,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,aAAa;IAgBrB,YAAY,IAAI,MAAM;IAItB,YAAY,IAAI,OAAO;IAYvB,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAItC;;OAEG;IACH,OAAO,CAAC,KAAK;IAUb;;;OAGG;IACH,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAqDrC,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAIjD;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAUjC,SAAS,IAAI,IAAI;CAKlB"}