@rpgjs/client 5.0.0-beta.2 → 5.0.0-beta.20

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 (314) hide show
  1. package/CHANGELOG.md +123 -0
  2. package/dist/Game/AnimationManager.d.ts +2 -1
  3. package/dist/Game/AnimationManager.js +21 -9
  4. package/dist/Game/AnimationManager.js.map +1 -1
  5. package/dist/Game/AnimationManager.spec.d.ts +1 -0
  6. package/dist/Game/ClientVisuals.d.ts +61 -0
  7. package/dist/Game/ClientVisuals.js +96 -0
  8. package/dist/Game/ClientVisuals.js.map +1 -0
  9. package/dist/Game/ClientVisuals.spec.d.ts +1 -0
  10. package/dist/Game/Event.js.map +1 -1
  11. package/dist/Game/EventComponentResolver.d.ts +16 -0
  12. package/dist/Game/EventComponentResolver.js +52 -0
  13. package/dist/Game/EventComponentResolver.js.map +1 -0
  14. package/dist/Game/EventComponentResolver.spec.d.ts +1 -0
  15. package/dist/Game/Map.d.ts +9 -1
  16. package/dist/Game/Map.js +83 -5
  17. package/dist/Game/Map.js.map +1 -1
  18. package/dist/Game/Object.d.ts +49 -15
  19. package/dist/Game/Object.js +101 -42
  20. package/dist/Game/Object.js.map +1 -1
  21. package/dist/Game/Object.spec.d.ts +1 -0
  22. package/dist/Game/Player.js.map +1 -1
  23. package/dist/Game/ProjectileManager.d.ts +98 -0
  24. package/dist/Game/ProjectileManager.js +196 -0
  25. package/dist/Game/ProjectileManager.js.map +1 -0
  26. package/dist/Game/ProjectileManager.spec.d.ts +1 -0
  27. package/dist/Gui/Gui.d.ts +20 -6
  28. package/dist/Gui/Gui.js +96 -54
  29. package/dist/Gui/Gui.js.map +1 -1
  30. package/dist/Gui/Gui.spec.d.ts +1 -0
  31. package/dist/Gui/NotificationManager.js.map +1 -1
  32. package/dist/Resource.js +1 -1
  33. package/dist/Resource.js.map +1 -1
  34. package/dist/RpgClient.d.ts +194 -15
  35. package/dist/RpgClientEngine.d.ts +176 -11
  36. package/dist/RpgClientEngine.js +669 -68
  37. package/dist/RpgClientEngine.js.map +1 -1
  38. package/dist/Sound.js.map +1 -1
  39. package/dist/_virtual/{_@oxc-project_runtime@0.122.0/helpers → _@oxc-project_runtime@0.133.0/helpers/esm}/decorate.js +1 -1
  40. package/dist/_virtual/{_@oxc-project_runtime@0.122.0/helpers → _@oxc-project_runtime@0.133.0/helpers/esm}/decorateMetadata.js +1 -1
  41. package/dist/_virtual/_rolldown/runtime.js +13 -0
  42. package/dist/components/animations/animation.ce.js +6 -5
  43. package/dist/components/animations/animation.ce.js.map +1 -1
  44. package/dist/components/animations/fx.ce.js +60 -0
  45. package/dist/components/animations/fx.ce.js.map +1 -0
  46. package/dist/components/animations/hit.ce.js +24 -28
  47. package/dist/components/animations/hit.ce.js.map +1 -1
  48. package/dist/components/animations/index.d.ts +1 -0
  49. package/dist/components/animations/index.js +6 -4
  50. package/dist/components/animations/index.js.map +1 -1
  51. package/dist/components/character.ce.js +606 -248
  52. package/dist/components/character.ce.js.map +1 -1
  53. package/dist/components/dynamics/bar.ce.js +99 -0
  54. package/dist/components/dynamics/bar.ce.js.map +1 -0
  55. package/dist/components/dynamics/image.ce.js +26 -0
  56. package/dist/components/dynamics/image.ce.js.map +1 -0
  57. package/dist/components/dynamics/parse-value.d.ts +3 -0
  58. package/dist/components/dynamics/parse-value.js +54 -35
  59. package/dist/components/dynamics/parse-value.js.map +1 -1
  60. package/dist/components/dynamics/parse-value.spec.d.ts +1 -0
  61. package/dist/components/dynamics/shape-utils.d.ts +16 -0
  62. package/dist/components/dynamics/shape-utils.js +73 -0
  63. package/dist/components/dynamics/shape-utils.js.map +1 -0
  64. package/dist/components/dynamics/shape-utils.spec.d.ts +1 -0
  65. package/dist/components/dynamics/shape.ce.js +86 -0
  66. package/dist/components/dynamics/shape.ce.js.map +1 -0
  67. package/dist/components/dynamics/text.ce.js +36 -56
  68. package/dist/components/dynamics/text.ce.js.map +1 -1
  69. package/dist/components/gui/box.ce.js +9 -9
  70. package/dist/components/gui/box.ce.js.map +1 -1
  71. package/dist/components/gui/dialogbox/index.ce.js +75 -65
  72. package/dist/components/gui/dialogbox/index.ce.js.map +1 -1
  73. package/dist/components/gui/gameover.ce.js +47 -68
  74. package/dist/components/gui/gameover.ce.js.map +1 -1
  75. package/dist/components/gui/hud/hud.ce.js +23 -31
  76. package/dist/components/gui/hud/hud.ce.js.map +1 -1
  77. package/dist/components/gui/menu/equip-menu.ce.js +121 -172
  78. package/dist/components/gui/menu/equip-menu.ce.js.map +1 -1
  79. package/dist/components/gui/menu/exit-menu.ce.js +15 -10
  80. package/dist/components/gui/menu/exit-menu.ce.js.map +1 -1
  81. package/dist/components/gui/menu/items-menu.ce.js +62 -77
  82. package/dist/components/gui/menu/items-menu.ce.js.map +1 -1
  83. package/dist/components/gui/menu/main-menu.ce.js +89 -104
  84. package/dist/components/gui/menu/main-menu.ce.js.map +1 -1
  85. package/dist/components/gui/menu/options-menu.ce.js +12 -8
  86. package/dist/components/gui/menu/options-menu.ce.js.map +1 -1
  87. package/dist/components/gui/menu/skills-menu.ce.js +17 -19
  88. package/dist/components/gui/menu/skills-menu.ce.js.map +1 -1
  89. package/dist/components/gui/mobile/index.js +2 -2
  90. package/dist/components/gui/mobile/index.js.map +1 -1
  91. package/dist/components/gui/mobile/mobile.ce.js +7 -5
  92. package/dist/components/gui/mobile/mobile.ce.js.map +1 -1
  93. package/dist/components/gui/notification/notification.ce.js +28 -26
  94. package/dist/components/gui/notification/notification.ce.js.map +1 -1
  95. package/dist/components/gui/save-load.ce.js +81 -256
  96. package/dist/components/gui/save-load.ce.js.map +1 -1
  97. package/dist/components/gui/shop/shop.ce.js +107 -142
  98. package/dist/components/gui/shop/shop.ce.js.map +1 -1
  99. package/dist/components/gui/title-screen.ce.js +50 -73
  100. package/dist/components/gui/title-screen.ce.js.map +1 -1
  101. package/dist/components/index.d.ts +2 -1
  102. package/dist/components/index.js +1 -0
  103. package/dist/components/interaction-components.ce.js +22 -0
  104. package/dist/components/interaction-components.ce.js.map +1 -0
  105. package/dist/components/player-components-utils.d.ts +67 -0
  106. package/dist/components/player-components-utils.js +162 -0
  107. package/dist/components/player-components-utils.js.map +1 -0
  108. package/dist/components/player-components-utils.spec.d.ts +1 -0
  109. package/dist/components/player-components.ce.js +191 -0
  110. package/dist/components/player-components.ce.js.map +1 -0
  111. package/dist/components/prebuilt/hp-bar.ce.js +45 -45
  112. package/dist/components/prebuilt/hp-bar.ce.js.map +1 -1
  113. package/dist/components/prebuilt/light-halo.ce.js +39 -60
  114. package/dist/components/prebuilt/light-halo.ce.js.map +1 -1
  115. package/dist/components/scenes/canvas.ce.js +205 -27
  116. package/dist/components/scenes/canvas.ce.js.map +1 -1
  117. package/dist/components/scenes/draw-map.ce.js +39 -39
  118. package/dist/components/scenes/draw-map.ce.js.map +1 -1
  119. package/dist/components/scenes/event-layer.ce.js +51 -10
  120. package/dist/components/scenes/event-layer.ce.js.map +1 -1
  121. package/dist/core/inject.js +1 -1
  122. package/dist/core/inject.js.map +1 -1
  123. package/dist/core/setup.js +1 -1
  124. package/dist/core/setup.js.map +1 -1
  125. package/dist/decorators/spritesheet.d.ts +1 -0
  126. package/dist/decorators/spritesheet.js +11 -0
  127. package/dist/decorators/spritesheet.js.map +1 -0
  128. package/dist/i18n.d.ts +55 -0
  129. package/dist/i18n.js +60 -0
  130. package/dist/i18n.js.map +1 -0
  131. package/dist/i18n.spec.d.ts +1 -0
  132. package/dist/index.d.ts +7 -0
  133. package/dist/index.js +29 -21
  134. package/dist/module.js +45 -4
  135. package/dist/module.js.map +1 -1
  136. package/dist/node_modules/.pnpm/{@signe_di@2.9.0 → @signe_di@3.1.0}/node_modules/@signe/di/dist/index.js +7 -117
  137. package/dist/node_modules/.pnpm/@signe_di@3.1.0/node_modules/@signe/di/dist/index.js.map +1 -0
  138. package/dist/node_modules/.pnpm/@signe_reactive@3.1.0/node_modules/@signe/reactive/dist/index.js +239 -0
  139. package/dist/node_modules/.pnpm/@signe_reactive@3.1.0/node_modules/@signe/reactive/dist/index.js.map +1 -0
  140. package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/chunk-EUXUH3YW.js +13 -0
  141. package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/chunk-EUXUH3YW.js.map +1 -0
  142. package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/index.js +698 -0
  143. package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/index.js.map +1 -0
  144. package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/client/index.js +43 -0
  145. package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/client/index.js.map +1 -0
  146. package/dist/node_modules/.pnpm/{@signe_sync@2.9.0 → @signe_sync@3.1.0_react@19.2.7}/node_modules/@signe/sync/dist/index.js +57 -141
  147. package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/index.js.map +1 -0
  148. package/dist/node_modules/.pnpm/{partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js → partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/index.js} +30 -17
  149. package/dist/node_modules/.pnpm/partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/index.js.map +1 -0
  150. package/dist/node_modules/.pnpm/{partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js → partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/ws.js} +65 -34
  151. package/dist/node_modules/.pnpm/partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/ws.js.map +1 -0
  152. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js +13 -0
  153. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js.map +1 -0
  154. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js +106 -0
  155. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js.map +1 -0
  156. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js +13 -0
  157. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js.map +1 -0
  158. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js +121 -0
  159. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js.map +1 -0
  160. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js +10 -0
  161. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
  162. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js +110 -0
  163. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
  164. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js +99 -0
  165. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js.map +1 -0
  166. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js +82 -0
  167. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js.map +1 -0
  168. package/dist/node_modules/.pnpm/{zod@3.24.2/node_modules/zod/lib/index.js → zod@3.25.76/node_modules/zod/v3/types.js} +74 -611
  169. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js.map +1 -0
  170. package/dist/presets/animation.js.map +1 -1
  171. package/dist/presets/faceset.js.map +1 -1
  172. package/dist/presets/icon.js.map +1 -1
  173. package/dist/presets/index.js.map +1 -1
  174. package/dist/presets/lpc.js.map +1 -1
  175. package/dist/presets/rmspritesheet.js.map +1 -1
  176. package/dist/services/AbstractSocket.d.ts +2 -0
  177. package/dist/services/AbstractSocket.js.map +1 -1
  178. package/dist/services/actionInput.d.ts +14 -0
  179. package/dist/services/actionInput.js +59 -0
  180. package/dist/services/actionInput.js.map +1 -0
  181. package/dist/services/actionInput.spec.d.ts +1 -0
  182. package/dist/services/interactions.d.ts +159 -0
  183. package/dist/services/interactions.js +460 -0
  184. package/dist/services/interactions.js.map +1 -0
  185. package/dist/services/interactions.spec.d.ts +1 -0
  186. package/dist/services/keyboardControls.d.ts +1 -0
  187. package/dist/services/keyboardControls.js +1 -0
  188. package/dist/services/keyboardControls.js.map +1 -1
  189. package/dist/services/loadMap.d.ts +9 -0
  190. package/dist/services/loadMap.js +1 -1
  191. package/dist/services/loadMap.js.map +1 -1
  192. package/dist/services/mmorpg-connection.d.ts +5 -0
  193. package/dist/services/mmorpg-connection.js +50 -0
  194. package/dist/services/mmorpg-connection.js.map +1 -0
  195. package/dist/services/mmorpg-connection.spec.d.ts +1 -0
  196. package/dist/services/mmorpg.d.ts +11 -4
  197. package/dist/services/mmorpg.js +57 -33
  198. package/dist/services/mmorpg.js.map +1 -1
  199. package/dist/services/pointerContext.d.ts +11 -0
  200. package/dist/services/pointerContext.js +48 -0
  201. package/dist/services/pointerContext.js.map +1 -0
  202. package/dist/services/pointerContext.spec.d.ts +1 -0
  203. package/dist/services/save.js.map +1 -1
  204. package/dist/services/save.spec.d.ts +1 -0
  205. package/dist/services/standalone-message.d.ts +1 -0
  206. package/dist/services/standalone-message.js +9 -0
  207. package/dist/services/standalone-message.js.map +1 -0
  208. package/dist/services/standalone.d.ts +4 -1
  209. package/dist/services/standalone.js +36 -16
  210. package/dist/services/standalone.js.map +1 -1
  211. package/dist/services/standalone.spec.d.ts +1 -0
  212. package/dist/utils/getEntityProp.js +4 -3
  213. package/dist/utils/getEntityProp.js.map +1 -1
  214. package/dist/utils/getEntityProp.spec.d.ts +1 -0
  215. package/dist/utils/mapId.d.ts +1 -0
  216. package/dist/utils/mapId.js +6 -0
  217. package/dist/utils/mapId.js.map +1 -0
  218. package/dist/utils/readPropValue.d.ts +2 -0
  219. package/dist/utils/readPropValue.js +13 -0
  220. package/dist/utils/readPropValue.js.map +1 -0
  221. package/package.json +13 -13
  222. package/src/Game/AnimationManager.spec.ts +30 -0
  223. package/src/Game/AnimationManager.ts +26 -10
  224. package/src/Game/ClientVisuals.spec.ts +56 -0
  225. package/src/Game/ClientVisuals.ts +184 -0
  226. package/src/Game/EventComponentResolver.spec.ts +84 -0
  227. package/src/Game/EventComponentResolver.ts +74 -0
  228. package/src/Game/Map.ts +134 -2
  229. package/src/Game/Object.spec.ts +59 -0
  230. package/src/Game/Object.ts +181 -77
  231. package/src/Game/ProjectileManager.spec.ts +449 -0
  232. package/src/Game/ProjectileManager.ts +346 -0
  233. package/src/Gui/Gui.spec.ts +340 -0
  234. package/src/Gui/Gui.ts +129 -57
  235. package/src/Resource.ts +1 -2
  236. package/src/RpgClient.ts +220 -17
  237. package/src/RpgClientEngine.ts +959 -116
  238. package/src/components/animations/fx.ce +101 -0
  239. package/src/components/animations/index.ts +4 -2
  240. package/src/components/character.ce +681 -45
  241. package/src/components/dynamics/bar.ce +88 -0
  242. package/src/components/dynamics/image.ce +21 -0
  243. package/src/components/dynamics/parse-value.spec.ts +83 -0
  244. package/src/components/dynamics/parse-value.ts +111 -37
  245. package/src/components/dynamics/shape-utils.spec.ts +46 -0
  246. package/src/components/dynamics/shape-utils.ts +61 -0
  247. package/src/components/dynamics/shape.ce +90 -0
  248. package/src/components/dynamics/text.ce +35 -149
  249. package/src/components/gui/dialogbox/index.ce +52 -21
  250. package/src/components/gui/gameover.ce +6 -4
  251. package/src/components/gui/menu/equip-menu.ce +11 -9
  252. package/src/components/gui/menu/exit-menu.ce +6 -4
  253. package/src/components/gui/menu/items-menu.ce +11 -9
  254. package/src/components/gui/menu/main-menu.ce +14 -12
  255. package/src/components/gui/menu/options-menu.ce +4 -3
  256. package/src/components/gui/menu/skills-menu.ce +2 -1
  257. package/src/components/gui/notification/notification.ce +7 -1
  258. package/src/components/gui/save-load.ce +13 -11
  259. package/src/components/gui/shop/shop.ce +20 -18
  260. package/src/components/gui/title-screen.ce +6 -4
  261. package/src/components/index.ts +2 -1
  262. package/src/components/interaction-components.ce +23 -0
  263. package/src/components/player-components-utils.spec.ts +109 -0
  264. package/src/components/player-components-utils.ts +205 -0
  265. package/src/components/player-components.ce +222 -0
  266. package/src/components/prebuilt/hp-bar.ce +4 -3
  267. package/src/components/prebuilt/light-halo.ce +2 -2
  268. package/src/components/scenes/canvas.ce +219 -15
  269. package/src/components/scenes/draw-map.ce +34 -22
  270. package/src/components/scenes/event-layer.ce +55 -4
  271. package/src/core/setup.ts +2 -2
  272. package/src/decorators/spritesheet.ts +8 -0
  273. package/src/i18n.spec.ts +39 -0
  274. package/src/i18n.ts +59 -0
  275. package/src/index.ts +7 -0
  276. package/src/module.ts +61 -11
  277. package/src/services/AbstractSocket.ts +3 -0
  278. package/src/services/actionInput.spec.ts +155 -0
  279. package/src/services/actionInput.ts +120 -0
  280. package/src/services/interactions.spec.ts +175 -0
  281. package/src/services/interactions.ts +722 -0
  282. package/src/services/keyboardControls.ts +2 -1
  283. package/src/services/loadMap.ts +5 -1
  284. package/src/services/mmorpg-connection.spec.ts +99 -0
  285. package/src/services/mmorpg-connection.ts +69 -0
  286. package/src/services/mmorpg.ts +70 -36
  287. package/src/services/pointerContext.spec.ts +36 -0
  288. package/src/services/pointerContext.ts +84 -0
  289. package/src/services/save.spec.ts +127 -0
  290. package/src/services/standalone-message.ts +7 -0
  291. package/src/services/standalone.spec.ts +54 -0
  292. package/src/services/standalone.ts +44 -12
  293. package/src/utils/getEntityProp.spec.ts +96 -0
  294. package/src/utils/getEntityProp.ts +4 -3
  295. package/src/utils/mapId.ts +2 -0
  296. package/src/utils/readPropValue.ts +16 -0
  297. package/dist/node_modules/.pnpm/@signe_di@2.9.0/node_modules/@signe/di/dist/index.js.map +0 -1
  298. package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js +0 -457
  299. package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js.map +0 -1
  300. package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js +0 -463
  301. package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js.map +0 -1
  302. package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js +0 -2191
  303. package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js.map +0 -1
  304. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js +0 -10
  305. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js.map +0 -1
  306. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js +0 -91
  307. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js.map +0 -1
  308. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/index.js.map +0 -1
  309. package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js +0 -14
  310. package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js.map +0 -1
  311. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js.map +0 -1
  312. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js.map +0 -1
  313. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/index.js +0 -2
  314. package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"save-load.ce.js","names":[],"sources":["../../../src/components/gui/save-load.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\">\n <div class=\"rpg-ui-save-load rpg-anim-fade-in\">\n <div class=\"rpg-ui-save-load-header\">\n <div class=\"rpg-ui-save-load-title\">{title()}</div>\n <div class=\"rpg-ui-save-load-subtitle\">{subtitle()}</div>\n </div>\n <Navigation tabindex={selectedSlot} controls={controls}>\n <div class=\"rpg-ui-save-load-list\">\n @for ((item,displayIndex) of displaySlots) {\n <div\n class=\"rpg-ui-save-load-slot\"\n class={{active: selectedSlot() === displayIndex}}\n tabindex={displayIndex}\n data-slot-index={displayIndex}\n click={selectSlot(displayIndex)}\n >\n <div class=\"rpg-ui-save-load-slot-index\">{item.label}</div>\n @if (item.slot) {\n <div class=\"rpg-ui-save-load-slot-meta\">\n <div class=\"rpg-ui-save-load-slot-line\">Level: {item.slot.level ?? \"-\"}</div>\n <div class=\"rpg-ui-save-load-slot-line\">Exp: {item.slot.exp ?? \"-\"}</div>\n <div class=\"rpg-ui-save-load-slot-line\">Map: {item.slot.map ?? \"-\"}</div>\n <div class=\"rpg-ui-save-load-slot-line\">Date: {item.slot.date ?? \"-\"}</div>\n </div>\n }\n @else {\n <div class=\"rpg-ui-save-load-slot-empty\">Empty Slot</div>\n }\n </div>\n }\n </div>\n </Navigation>\n </div>\n</DOMContainer>\n\n<script>\n import { signal, computed, effect, createTabindexNavigator, mount } from \"canvasengine\";\n import { inject } from \"../../core/inject\";\n import { RpgClientEngine } from \"../../RpgClientEngine\";\n import { SaveClientService } from \"../../services/save\";\n import { PrebuiltGui } from \"@rpgjs/common\";\n import { RpgGui } from \"../../Gui/Gui\";\n\n const engine = inject(RpgClientEngine);\n const saveClient = inject(SaveClientService);\n const gui = inject(RpgGui);\n const keyboardControls = engine.globalConfig.keyboardControls;\n\n const selectedSlot = signal(0);\n const DEFAULT_SLOTS = 4;\n const defaultSlots = () => Array.from({ length: DEFAULT_SLOTS }, () => null);\n const localSlots = signal(defaultSlots());\n\n const { data, onFinish } = defineProps();\n\n const title = computed(() => data().mode === \"save\" ? \"Save Game\" : \"Load Game\");\n const subtitle = computed(() => data().mode === \"save\"\n ? \"Choose a slot to overwrite or create.\"\n : \"Select a slot to load your progress.\"\n );\n\n const slotsValue = computed(() => localSlots());\n const displaySlots = computed(() => {\n const slots = slotsValue();\n const items = slots.map((slot, index) => ({\n kind: \"slot\",\n slot,\n slotIndex: index,\n label: `Slot ${index + 1}`,\n readonly: false\n }));\n if (!data().showAutoSlot) return items;\n const index = typeof data().autoSlotIndex === \"number\" ? data().autoSlotIndex : 0;\n const autoSlot = slots[index] ?? null;\n const readonly = data().mode === \"save\";\n return [\n {\n kind: \"auto\",\n slot: autoSlot,\n slotIndex: index,\n label: data().autoSlotLabel || \"Auto Save\",\n readonly\n },\n ...items\n ];\n });\n const nav = createTabindexNavigator(selectedSlot, { count: () => displaySlots().length }, \"wrap\");\n\n const canSelect = (item) => {\n if (item.readonly) return false;\n if (data().mode === \"load\" && !item.slot) return false;\n return true;\n };\n\n const normalizeSlotValue = (value) => {\n if (!value) return null;\n if (typeof value === \"string\") {\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n }\n return value;\n };\n\n const normalizeSlots = (list) => {\n if (Array.isArray(list)) {\n const length = Math.max(list.length, DEFAULT_SLOTS);\n return Array.from({ length }, (_, index) => normalizeSlotValue(list[index]));\n }\n if (!list || typeof list !== \"object\") {\n return defaultSlots();\n }\n const keys = Object.keys(list).filter((key) => /^\\d+$/.test(key));\n const indices = keys.map((key) => Number(key)).filter((index) => index >= 0);\n const maxIndex = indices.length ? Math.max(...indices) : -1;\n const length = Math.max(maxIndex + 1, DEFAULT_SLOTS);\n const slots = Array.from({ length }, () => null);\n keys.forEach((key) => {\n const index = Number(key);\n if (index < 0 || index >= length) return;\n slots[index] = normalizeSlotValue(list[key]);\n });\n return slots;\n };\n\n const hasProvidedSlots = (list) => {\n if (Array.isArray(list)) return list.length > 0;\n return !!(list && typeof list === \"object\" && Object.keys(list).length > 0);\n };\n\n const refreshSlots = async () => {\n try {\n const list = await saveClient.listSlots();\n localSlots.set(normalizeSlots(list));\n } catch (err) {\n localSlots.set(defaultSlots());\n }\n };\n\n const triggerSelect = async (displayIndex) => {\n const list = displaySlots();\n const item = list[displayIndex];\n if (!item) return;\n if (!canSelect(item)) return;\n const action = data().mode === \"save\" ? \"save\" : \"load\";\n if (action === \"save\") {\n await saveClient.saveSlot(item.slotIndex);\n await refreshSlots();\n }\n if (action === \"load\") {\n await saveClient.loadSlot(item.slotIndex);\n }\n setTimeout(() => {\n if (onFinish) onFinish();\n gui.hide(PrebuiltGui.Save);\n gui.hide(PrebuiltGui.TitleScreen);\n }, 50);\n\n };\n\n function selectSlot(index) {\n return function() {\n selectedSlot.set(index);\n triggerSelect(index);\n }\n }\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n nav.next(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n nav.next(1);\n }\n },\n action: {\n bind: keyboardControls.action,\n keyDown() {\n triggerSelect(selectedSlot());\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (onFinish) onFinish();\n gui.hide(PrebuiltGui.Save);\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n mount((element) => {\n refreshSlots();\n });\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"save-load.ce.js","names":[],"sources":["../../../src/components/gui/save-load.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\">\n <div class=\"rpg-ui-save-load rpg-anim-fade-in\">\n <div class=\"rpg-ui-save-load-header\">\n <div class=\"rpg-ui-save-load-title\">{title()}</div>\n <div class=\"rpg-ui-save-load-subtitle\">{subtitle()}</div>\n </div>\n <Navigation tabindex={selectedSlot} controls={controls}>\n <div class=\"rpg-ui-save-load-list\">\n @for ((item,displayIndex) of displaySlots) {\n <div\n class=\"rpg-ui-save-load-slot\"\n class={{active: selectedSlot() === displayIndex}}\n tabindex={displayIndex}\n data-slot-index={displayIndex}\n click={selectSlot(displayIndex)}\n >\n <div class=\"rpg-ui-save-load-slot-index\">{item.label}</div>\n @if (item.slot) {\n <div class=\"rpg-ui-save-load-slot-meta\">\n <div class=\"rpg-ui-save-load-slot-line\">{t(\"rpg.save.level\")}: {item.slot.level ?? \"-\"}</div>\n <div class=\"rpg-ui-save-load-slot-line\">{t(\"rpg.save.exp\")}: {item.slot.exp ?? \"-\"}</div>\n <div class=\"rpg-ui-save-load-slot-line\">{t(\"rpg.save.map\")}: {item.slot.map ?? \"-\"}</div>\n <div class=\"rpg-ui-save-load-slot-line\">{t(\"rpg.save.date\")}: {item.slot.date ?? \"-\"}</div>\n </div>\n }\n @else {\n <div class=\"rpg-ui-save-load-slot-empty\">{t(\"rpg.save.empty-slot\")}</div>\n }\n </div>\n }\n </div>\n </Navigation>\n </div>\n</DOMContainer>\n\n<script>\n import { signal, computed, effect, createTabindexNavigator, mount } from \"canvasengine\";\n import { inject } from \"../../core/inject\";\n import { RpgClientEngine } from \"../../RpgClientEngine\";\n import { SaveClientService } from \"../../services/save\";\n import { PrebuiltGui } from \"@rpgjs/common\";\n import { RpgGui } from \"../../Gui/Gui\";\n import { getKeyboardControlBind } from \"../../services/actionInput\";\n\n const engine = inject(RpgClientEngine);\n const { t } = engine.i18n();\n const saveClient = inject(SaveClientService);\n const gui = inject(RpgGui);\n const keyboardControls = engine.globalConfig.keyboardControls;\n\n const selectedSlot = signal(0);\n const DEFAULT_SLOTS = 4;\n const defaultSlots = () => Array.from({ length: DEFAULT_SLOTS }, () => null);\n const localSlots = signal(defaultSlots());\n\n const { data, onFinish } = defineProps();\n\n const title = computed(() => data().mode === \"save\" ? t(\"rpg.save.title\") : t(\"rpg.load.title\"));\n const subtitle = computed(() => data().mode === \"save\"\n ? t(\"rpg.save.subtitle\")\n : t(\"rpg.load.subtitle\")\n );\n\n const slotsValue = computed(() => localSlots());\n const displaySlots = computed(() => {\n const slots = slotsValue();\n const items = slots.map((slot, index) => ({\n kind: \"slot\",\n slot,\n slotIndex: index,\n label: t(\"rpg.save.slot\", { index: index + 1 }),\n readonly: false\n }));\n if (!data().showAutoSlot) return items;\n const index = typeof data().autoSlotIndex === \"number\" ? data().autoSlotIndex : 0;\n const autoSlot = slots[index] ?? null;\n const readonly = data().mode === \"save\";\n return [\n {\n kind: \"auto\",\n slot: autoSlot,\n slotIndex: index,\n label: data().autoSlotLabel || t(\"rpg.save.auto\"),\n readonly\n },\n ...items\n ];\n });\n const nav = createTabindexNavigator(selectedSlot, { count: () => displaySlots().length }, \"wrap\");\n\n const canSelect = (item) => {\n if (item.readonly) return false;\n if (data().mode === \"load\" && !item.slot) return false;\n return true;\n };\n\n const normalizeSlotValue = (value) => {\n if (!value) return null;\n if (typeof value === \"string\") {\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n }\n return value;\n };\n\n const normalizeSlots = (list) => {\n if (Array.isArray(list)) {\n const length = Math.max(list.length, DEFAULT_SLOTS);\n return Array.from({ length }, (_, index) => normalizeSlotValue(list[index]));\n }\n if (!list || typeof list !== \"object\") {\n return defaultSlots();\n }\n const keys = Object.keys(list).filter((key) => /^\\d+$/.test(key));\n const indices = keys.map((key) => Number(key)).filter((index) => index >= 0);\n const maxIndex = indices.length ? Math.max(...indices) : -1;\n const length = Math.max(maxIndex + 1, DEFAULT_SLOTS);\n const slots = Array.from({ length }, () => null);\n keys.forEach((key) => {\n const index = Number(key);\n if (index < 0 || index >= length) return;\n slots[index] = normalizeSlotValue(list[key]);\n });\n return slots;\n };\n\n const hasProvidedSlots = (list) => {\n if (Array.isArray(list)) return list.length > 0;\n return !!(list && typeof list === \"object\" && Object.keys(list).length > 0);\n };\n\n const refreshSlots = async () => {\n try {\n const list = await saveClient.listSlots();\n localSlots.set(normalizeSlots(list));\n } catch (err) {\n localSlots.set(defaultSlots());\n }\n };\n\n const triggerSelect = async (displayIndex) => {\n const list = displaySlots();\n const item = list[displayIndex];\n if (!item) return;\n if (!canSelect(item)) return;\n const action = data().mode === \"save\" ? \"save\" : \"load\";\n if (action === \"save\") {\n await saveClient.saveSlot(item.slotIndex);\n await refreshSlots();\n }\n if (action === \"load\") {\n await saveClient.loadSlot(item.slotIndex);\n }\n setTimeout(() => {\n if (onFinish) onFinish();\n gui.hide(PrebuiltGui.Save);\n gui.hide(PrebuiltGui.TitleScreen);\n }, 50);\n\n };\n\n function selectSlot(index) {\n return function() {\n selectedSlot.set(index);\n triggerSelect(index);\n }\n }\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n nav.next(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n nav.next(1);\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n triggerSelect(selectedSlot());\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (onFinish) onFinish();\n gui.hide(PrebuiltGui.Save);\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n mount((element) => {\n refreshSlots();\n });\n</script>\n"],"mappings":"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"}
@@ -1,113 +1,89 @@
1
1
  import { inject } from "../../../core/inject.js";
2
+ import { getKeyboardControlBind } from "../../../services/actionInput.js";
2
3
  import { RpgClientEngine } from "../../../RpgClientEngine.js";
3
- import { DOMContainer, DOMElement, DOMSprite, Navigation, computed, cond, createTabindexNavigator, effect, h, loop, signal, useDefineProps, useProps } from "canvasengine";
4
+ import { DOMContainer, DOMElement, DOMSprite, Navigation, computed, cond, createTabindexNavigator, effect, h, loop, signal, useDefineEmits, useDefineProps, useProps } from "canvasengine";
4
5
  //#region src/components/gui/shop/shop.ce
5
6
  function component($$props) {
6
7
  useProps($$props);
7
8
  const defineProps = useDefineProps($$props);
8
- var engine = inject(RpgClientEngine);
9
- var currentPlayer = engine.scene.currentPlayer;
10
- var keyboardControls = engine.globalConfig.keyboardControls;
11
- var iconSheet = function(iconId) {
12
- return {
13
- definition: engine.getSpriteSheet(iconId),
14
- playing: "default"
15
- };
16
- };
17
- var goldTerm = engine.globalConfig.goldTerm || "G";
18
- var selectedItem = signal(0);
19
- var selectedTab = signal(0);
20
- var tradeMode = signal("buy");
21
- var tradeView = signal("mode");
22
- var selectedModeIndex = signal(0);
23
- var quantity = signal(1);
24
- var quantityDialogOpen = signal(false);
25
- var defaultMessage = "Welcome to my shop!";
26
- var tabs = [
9
+ useDefineEmits($$props);
10
+ const engine = inject(RpgClientEngine);
11
+ const { t } = engine.i18n();
12
+ const currentPlayer = engine.scene.currentPlayer;
13
+ const keyboardControls = engine.globalConfig.keyboardControls;
14
+ const iconSheet = (iconId) => ({
15
+ definition: engine.getSpriteSheet(iconId),
16
+ playing: "default"
17
+ });
18
+ const goldTerm = engine.globalConfig.goldTerm || "G";
19
+ const selectedItem = signal(0);
20
+ const selectedTab = signal(0);
21
+ const tradeMode = signal("buy");
22
+ const tradeView = signal("mode");
23
+ const selectedModeIndex = signal(0);
24
+ const quantity = signal(1);
25
+ const quantityDialogOpen = signal(false);
26
+ const defaultMessage = t("rpg.shop.default-message");
27
+ const tabs = [
27
28
  {
28
29
  id: "item",
29
- label: "Items"
30
+ label: t("rpg.menu.items")
30
31
  },
31
32
  {
32
33
  id: "weapon",
33
- label: "Weapons"
34
+ label: t("rpg.menu.weapons")
34
35
  },
35
36
  {
36
37
  id: "armor",
37
- label: "Armor"
38
+ label: t("rpg.menu.armor")
38
39
  }
39
40
  ];
40
- var _a = defineProps(), data = _a.data, onInteraction = _a.onInteraction, onFinish = _a.onFinish;
41
- var resolveProp = function(value) {
42
- return typeof value === "function" ? value() : value;
43
- };
44
- var guiData = computed(function() {
45
- return resolveProp(data) || {};
46
- });
47
- var shopMessage = computed(function() {
48
- var message = resolveProp(guiData().message);
41
+ const { data, onInteraction, onFinish } = defineProps();
42
+ const resolveProp = (value) => typeof value === "function" ? value() : value;
43
+ const guiData = computed(() => resolveProp(data) || {});
44
+ const shopMessage = computed(() => {
45
+ const message = resolveProp(guiData().message);
49
46
  return message ? String(message) : defaultMessage;
50
47
  });
51
- var face = computed(function() {
52
- return resolveProp(guiData().face);
53
- });
54
- var hasFace = computed(function() {
55
- var value = face();
48
+ const face = computed(() => resolveProp(guiData().face));
49
+ const hasFace = computed(() => {
50
+ const value = face();
56
51
  return value && value.id;
57
52
  });
58
- var buyItems = computed(function() {
59
- return guiData().items || [];
60
- });
61
- var sellItems = computed(function() {
62
- return guiData().sellItems || [];
63
- });
64
- var activeItems = computed(function() {
65
- return tradeMode() === "buy" ? buyItems() : sellItems();
66
- });
67
- var filteredItems = computed(function() {
68
- var tab = tabs[selectedTab()];
69
- var items = activeItems();
53
+ const buyItems = computed(() => guiData().items || []);
54
+ const sellItems = computed(() => guiData().sellItems || []);
55
+ const activeItems = computed(() => tradeMode() === "buy" ? buyItems() : sellItems());
56
+ const filteredItems = computed(() => {
57
+ const tab = tabs[selectedTab()];
58
+ const items = activeItems();
70
59
  if (!tab) return [];
71
- return items.filter(function(item) {
72
- return (item === null || item === void 0 ? void 0 : item.type) === tab.id;
73
- });
74
- });
75
- var currentItem = computed(function() {
76
- return filteredItems()[selectedItem()];
60
+ return items.filter((item) => item?.type === tab.id);
77
61
  });
78
- var gold = computed(function() {
79
- return currentPlayer()._gold();
62
+ const currentItem = computed(() => filteredItems()[selectedItem()]);
63
+ const gold = computed(() => currentPlayer()._gold());
64
+ const actionLabel = computed(() => tradeMode() === "buy" ? t("rpg.shop.buy") : t("rpg.shop.sell"));
65
+ const faceSheet = (graphicId, animationName) => ({
66
+ definition: engine.getSpriteSheet(graphicId),
67
+ playing: animationName || "default"
80
68
  });
81
- var actionLabel = computed(function() {
82
- return tradeMode() === "buy" ? "Buy" : "Sell";
83
- });
84
- var faceSheet = function(graphicId, animationName) {
85
- return {
86
- definition: engine.getSpriteSheet(graphicId),
87
- playing: animationName || "default"
88
- };
89
- };
90
- var maxQuantity = computed(function() {
91
- var _a;
92
- var item = currentItem();
69
+ const maxQuantity = computed(() => {
70
+ const item = currentItem();
93
71
  if (!item) return 0;
94
- var price = (item === null || item === void 0 ? void 0 : item.price) || 0;
72
+ const price = item?.price || 0;
95
73
  if (price <= 0) return 0;
96
74
  if (tradeMode() === "sell") {
97
- var qty = (_a = item === null || item === void 0 ? void 0 : item.quantity) !== null && _a !== void 0 ? _a : 0;
75
+ const qty = item?.quantity ?? 0;
98
76
  return Math.max(0, qty);
99
77
  }
100
78
  return Math.max(1, Math.floor(gold() / price));
101
79
  });
102
- var totalPrice = computed(function() {
103
- var _a;
104
- return (((_a = currentItem()) === null || _a === void 0 ? void 0 : _a.price) || 0) * quantity();
80
+ const totalPrice = computed(() => {
81
+ return (currentItem()?.price || 0) * quantity();
105
82
  });
106
- var displayStats = computed(function() {
107
- var _a;
108
- var stats = ((_a = currentItem()) === null || _a === void 0 ? void 0 : _a.stats) || {};
109
- var params = guiData().playerParams || {};
110
- var order = [
83
+ const displayStats = computed(() => {
84
+ const stats = currentItem()?.stats || {};
85
+ const params = guiData().playerParams || {};
86
+ const order = [
111
87
  "atk",
112
88
  "def",
113
89
  "pdef",
@@ -119,7 +95,7 @@ function component($$props) {
119
95
  "maxHp",
120
96
  "maxSp"
121
97
  ];
122
- var labels = {
98
+ const labels = {
123
99
  atk: "ATK",
124
100
  def: "DEF",
125
101
  pdef: "PDEF",
@@ -131,21 +107,16 @@ function component($$props) {
131
107
  maxHp: "MAX HP",
132
108
  maxSp: "MAX SP"
133
109
  };
134
- var orderedKeys = order.filter(function(key) {
135
- return stats[key] !== void 0;
136
- });
137
- var extraKeys = Object.keys(stats).filter(function(key) {
138
- return !order.includes(key);
139
- });
140
- var keys = orderedKeys.concat(extraKeys);
141
- var list = [];
142
- for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
143
- var key = keys_1[_i];
144
- var delta = stats[key];
110
+ const orderedKeys = order.filter((key) => stats[key] !== void 0);
111
+ const extraKeys = Object.keys(stats).filter((key) => !order.includes(key));
112
+ const keys = orderedKeys.concat(extraKeys);
113
+ const list = [];
114
+ for (const key of keys) {
115
+ const delta = stats[key];
145
116
  if (delta === void 0 || delta === 0) continue;
146
- var current = params[key];
117
+ let current = params[key];
147
118
  if (current === void 0 && key === "def") current = params.pdef;
148
- var next = current !== void 0 ? current + delta : void 0;
119
+ const next = current !== void 0 ? current + delta : void 0;
149
120
  list.push({
150
121
  key,
151
122
  label: labels[key] || key.toUpperCase(),
@@ -156,15 +127,9 @@ function component($$props) {
156
127
  }
157
128
  return list;
158
129
  });
159
- var nav = createTabindexNavigator(selectedItem, { count: function() {
160
- return filteredItems().length;
161
- } }, "wrap");
162
- var navTab = createTabindexNavigator(selectedTab, { count: function() {
163
- return tabs.length;
164
- } }, "wrap");
165
- var navMode = createTabindexNavigator(selectedModeIndex, { count: function() {
166
- return 2;
167
- } }, "wrap");
130
+ const nav = createTabindexNavigator(selectedItem, { count: () => filteredItems().length }, "wrap");
131
+ const navTab = createTabindexNavigator(selectedTab, { count: () => tabs.length }, "wrap");
132
+ const navMode = createTabindexNavigator(selectedModeIndex, { count: () => 2 }, "wrap");
168
133
  function selectItem(index) {
169
134
  return function() {
170
135
  selectedItem.set(index);
@@ -188,11 +153,10 @@ function component($$props) {
188
153
  };
189
154
  }
190
155
  function isItemDisabled(item) {
191
- var _a;
192
156
  if (!item) return true;
193
- var price = (item === null || item === void 0 ? void 0 : item.price) || 0;
157
+ const price = item?.price || 0;
194
158
  if (price <= 0) return true;
195
- if (tradeMode() === "sell") return ((_a = item === null || item === void 0 ? void 0 : item.quantity) !== null && _a !== void 0 ? _a : 0) <= 0;
159
+ if (tradeMode() === "sell") return (item?.quantity ?? 0) <= 0;
196
160
  return gold() < price;
197
161
  }
198
162
  function backToMode() {
@@ -202,9 +166,9 @@ function component($$props) {
202
166
  }
203
167
  function changeQuantity(delta) {
204
168
  return function() {
205
- var limit = maxQuantity();
169
+ const limit = maxQuantity();
206
170
  if (limit <= 0) return;
207
- var nextValue = Math.max(1, Math.min(limit, quantity() + delta));
171
+ const nextValue = Math.max(1, Math.min(limit, quantity() + delta));
208
172
  if (nextValue !== quantity()) quantity.set(nextValue);
209
173
  };
210
174
  }
@@ -215,7 +179,7 @@ function component($$props) {
215
179
  }
216
180
  function confirmTrade() {
217
181
  return function() {
218
- var item = currentItem();
182
+ const item = currentItem();
219
183
  if (!item || isItemDisabled(item)) {
220
184
  quantityDialogOpen.set(false);
221
185
  return;
@@ -227,16 +191,16 @@ function component($$props) {
227
191
  quantityDialogOpen.set(false);
228
192
  };
229
193
  }
230
- effect(function() {
231
- var count = filteredItems().length;
194
+ effect(() => {
195
+ const count = filteredItems().length;
232
196
  if (selectedItem() >= count) selectedItem.set(Math.max(0, count - 1));
233
197
  });
234
- var modeControls = signal({
198
+ const modeControls = signal({
235
199
  left: {
236
200
  repeat: true,
237
201
  bind: keyboardControls.left,
238
202
  throttle: 150,
239
- keyDown: function() {
203
+ keyDown() {
240
204
  navMode.next(-1);
241
205
  }
242
206
  },
@@ -244,14 +208,14 @@ function component($$props) {
244
208
  repeat: true,
245
209
  bind: keyboardControls.right,
246
210
  throttle: 150,
247
- keyDown: function() {
211
+ keyDown() {
248
212
  navMode.next(1);
249
213
  }
250
214
  },
251
215
  action: {
252
- bind: keyboardControls.action,
253
- keyDown: function() {
254
- var mode = selectedModeIndex() === 0 ? "buy" : "sell";
216
+ bind: getKeyboardControlBind(keyboardControls.action),
217
+ keyDown() {
218
+ const mode = selectedModeIndex() === 0 ? "buy" : "sell";
255
219
  tradeMode.set(mode);
256
220
  selectedItem.set(0);
257
221
  quantity.set(1);
@@ -260,18 +224,18 @@ function component($$props) {
260
224
  },
261
225
  escape: {
262
226
  bind: keyboardControls.escape,
263
- keyDown: function() {
227
+ keyDown() {
264
228
  onFinish();
265
229
  }
266
230
  },
267
231
  gamepad: { enabled: true }
268
232
  });
269
- var itemControls = signal({
233
+ const itemControls = signal({
270
234
  up: {
271
235
  repeat: true,
272
236
  bind: keyboardControls.up,
273
237
  throttle: 150,
274
- keyDown: function() {
238
+ keyDown() {
275
239
  if (quantityDialogOpen()) {
276
240
  changeQuantity(1)();
277
241
  return;
@@ -283,7 +247,7 @@ function component($$props) {
283
247
  repeat: true,
284
248
  bind: keyboardControls.down,
285
249
  throttle: 150,
286
- keyDown: function() {
250
+ keyDown() {
287
251
  if (quantityDialogOpen()) {
288
252
  changeQuantity(-1)();
289
253
  return;
@@ -292,16 +256,16 @@ function component($$props) {
292
256
  }
293
257
  },
294
258
  action: {
295
- bind: keyboardControls.action,
296
- keyDown: function() {
259
+ bind: getKeyboardControlBind(keyboardControls.action),
260
+ keyDown() {
297
261
  if (quantityDialogOpen()) {
298
- var item_1 = currentItem();
299
- if (!item_1 || isItemDisabled(item_1)) {
262
+ const item = currentItem();
263
+ if (!item || isItemDisabled(item)) {
300
264
  quantityDialogOpen.set(false);
301
265
  return;
302
266
  }
303
267
  onInteraction(tradeMode() === "buy" ? "buyItem" : "sellItem", {
304
- id: item_1.id,
268
+ id: item.id,
305
269
  nb: quantity()
306
270
  });
307
271
  quantityDialogOpen.set(false);
@@ -312,7 +276,7 @@ function component($$props) {
312
276
  },
313
277
  escape: {
314
278
  bind: keyboardControls.escape,
315
- keyDown: function() {
279
+ keyDown() {
316
280
  if (quantityDialogOpen()) {
317
281
  quantityDialogOpen.set(false);
318
282
  return;
@@ -322,12 +286,12 @@ function component($$props) {
322
286
  },
323
287
  gamepad: { enabled: true }
324
288
  });
325
- var tabControls = signal({
289
+ const tabControls = signal({
326
290
  left: {
327
291
  repeat: true,
328
292
  bind: keyboardControls.left,
329
293
  throttle: 150,
330
- keyDown: function() {
294
+ keyDown() {
331
295
  if (quantityDialogOpen()) return;
332
296
  navTab.next(-1);
333
297
  }
@@ -336,7 +300,7 @@ function component($$props) {
336
300
  repeat: true,
337
301
  bind: keyboardControls.right,
338
302
  throttle: 150,
339
- keyDown: function() {
303
+ keyDown() {
340
304
  if (quantityDialogOpen()) return;
341
305
  navTab.next(1);
342
306
  }
@@ -395,7 +359,7 @@ function component($$props) {
395
359
  }), h(DOMElement, {
396
360
  element: "h2",
397
361
  attrs: { style: "margin: 0;" },
398
- textContent: "Choose an action"
362
+ textContent: computed(() => t("rpg.shop.choose-action"))
399
363
  })]), h(DOMElement, {
400
364
  element: "div",
401
365
  attrs: { class: "rpg-shop-trade" }
@@ -411,14 +375,14 @@ function component($$props) {
411
375
  class: ["rpg-shop-tab", computed(() => ({ active: selectedModeIndex() === 0 }))],
412
376
  click: selectMode("buy")
413
377
  },
414
- textContent: "Buy"
378
+ textContent: computed(() => t("rpg.shop.buy"))
415
379
  }), h(DOMElement, {
416
380
  element: "div",
417
381
  attrs: {
418
382
  class: ["rpg-shop-tab", computed(() => ({ active: selectedModeIndex() === 1 }))],
419
383
  click: selectMode("sell")
420
384
  },
421
- textContent: "Sell"
385
+ textContent: computed(() => t("rpg.shop.sell"))
422
386
  })])))])), () => h(DOMElement, { element: "div" }, [h(Navigation, {
423
387
  tabindex: selectedTab,
424
388
  controls: tabControls
@@ -481,7 +445,7 @@ function component($$props) {
481
445
  cond(item.equipped, () => h(DOMElement, {
482
446
  element: "div",
483
447
  attrs: { class: "rpg-shop-card-tag" },
484
- textContent: "Equipped"
448
+ textContent: computed(() => t("rpg.shop.equipped"))
485
449
  }))
486
450
  ])))), h(DOMElement, {
487
451
  element: "div",
@@ -514,13 +478,13 @@ function component($$props) {
514
478
  cond(computed(() => currentItem()?.quantity !== void 0), () => h(DOMElement, {
515
479
  element: "div",
516
480
  attrs: { class: "rpg-shop-details-qty" },
517
- textContent: computed(() => "Qty: x" + currentItem()?.quantity)
481
+ textContent: computed(() => t("rpg.shop.qty") + ": x" + currentItem()?.quantity)
518
482
  }))
519
483
  ]),
520
- h(DOMElement, { element: "div" }, cond(currentItem()?.equipped, () => h(DOMElement, {
484
+ h(DOMElement, { element: "div" }, cond(computed(() => currentItem()?.equipped), () => h(DOMElement, {
521
485
  element: "div",
522
486
  attrs: { class: "rpg-shop-equipped" },
523
- textContent: "Already equipped"
487
+ textContent: computed(() => t("rpg.shop.already-equipped"))
524
488
  }))),
525
489
  h(DOMElement, {
526
490
  element: "div",
@@ -559,7 +523,7 @@ function component($$props) {
559
523
  class: "rpg-shop-btn",
560
524
  click: backToMode()
561
525
  },
562
- textContent: "Back"
526
+ textContent: computed(() => t("rpg.shop.back"))
563
527
  })
564
528
  ])])])), cond(quantityDialogOpen, () => h(DOMElement, {
565
529
  element: "div",
@@ -581,7 +545,7 @@ function component($$props) {
581
545
  cond(computed(() => currentItem()?.quantity !== void 0), () => h(DOMElement, {
582
546
  element: "div",
583
547
  attrs: { class: "rpg-shop-modal-qty" },
584
- textContent: computed(() => "Available: x" + currentItem()?.quantity)
548
+ textContent: computed(() => t("rpg.shop.available") + ": x" + currentItem()?.quantity)
585
549
  })),
586
550
  h(DOMElement, {
587
551
  element: "div",
@@ -589,7 +553,7 @@ function component($$props) {
589
553
  }, [h(DOMElement, {
590
554
  element: "div",
591
555
  attrs: { class: "rpg-shop-quantity-label" },
592
- textContent: "Quantity"
556
+ textContent: computed(() => t("rpg.shop.quantity"))
593
557
  }), h(DOMElement, {
594
558
  element: "div",
595
559
  attrs: { class: "rpg-shop-quantity-controls" }
@@ -621,7 +585,7 @@ function component($$props) {
621
585
  attrs: { class: "rpg-shop-modal-total" }
622
586
  }, [h(DOMElement, {
623
587
  element: "span",
624
- textContent: "Total"
588
+ textContent: computed(() => t("rpg.shop.total"))
625
589
  }), h(DOMElement, {
626
590
  element: "span",
627
591
  textContent: computed(() => totalPrice() + goldTerm)
@@ -635,7 +599,7 @@ function component($$props) {
635
599
  class: "rpg-shop-btn rpg-shop-btn-secondary",
636
600
  click: closeQuantityDialog()
637
601
  },
638
- textContent: "Cancel"
602
+ textContent: computed(() => t("rpg.menu.cancel"))
639
603
  }), h(DOMElement, {
640
604
  element: "button",
641
605
  attrs: {
@@ -646,7 +610,8 @@ function component($$props) {
646
610
  })])
647
611
  ])))]))]));
648
612
  }
613
+ var __ce_component = component;
649
614
  //#endregion
650
- export { component as default };
615
+ export { __ce_component as default };
651
616
 
652
617
  //# sourceMappingURL=shop.ce.js.map