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

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 (325) hide show
  1. package/CHANGELOG.md +130 -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 +132 -57
  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 +191 -19
  36. package/dist/RpgClientEngine.js +693 -74
  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 +748 -249
  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.d.ts +51 -2
  90. package/dist/components/gui/mobile/index.js +14 -6
  91. package/dist/components/gui/mobile/index.js.map +1 -1
  92. package/dist/components/gui/mobile/index.spec.d.ts +1 -0
  93. package/dist/components/gui/mobile/mobile.ce.js +309 -59
  94. package/dist/components/gui/mobile/mobile.ce.js.map +1 -1
  95. package/dist/components/gui/notification/notification.ce.js +28 -26
  96. package/dist/components/gui/notification/notification.ce.js.map +1 -1
  97. package/dist/components/gui/save-load.ce.js +81 -256
  98. package/dist/components/gui/save-load.ce.js.map +1 -1
  99. package/dist/components/gui/shop/shop.ce.js +107 -142
  100. package/dist/components/gui/shop/shop.ce.js.map +1 -1
  101. package/dist/components/gui/title-screen.ce.js +50 -73
  102. package/dist/components/gui/title-screen.ce.js.map +1 -1
  103. package/dist/components/index.d.ts +2 -1
  104. package/dist/components/index.js +1 -0
  105. package/dist/components/interaction-components.ce.js +22 -0
  106. package/dist/components/interaction-components.ce.js.map +1 -0
  107. package/dist/components/player-components-utils.d.ts +67 -0
  108. package/dist/components/player-components-utils.js +162 -0
  109. package/dist/components/player-components-utils.js.map +1 -0
  110. package/dist/components/player-components-utils.spec.d.ts +1 -0
  111. package/dist/components/player-components.ce.js +191 -0
  112. package/dist/components/player-components.ce.js.map +1 -0
  113. package/dist/components/prebuilt/hp-bar.ce.js +45 -45
  114. package/dist/components/prebuilt/hp-bar.ce.js.map +1 -1
  115. package/dist/components/prebuilt/light-halo.ce.js +39 -60
  116. package/dist/components/prebuilt/light-halo.ce.js.map +1 -1
  117. package/dist/components/scenes/canvas.ce.js +205 -27
  118. package/dist/components/scenes/canvas.ce.js.map +1 -1
  119. package/dist/components/scenes/draw-map.ce.js +39 -39
  120. package/dist/components/scenes/draw-map.ce.js.map +1 -1
  121. package/dist/components/scenes/event-layer.ce.js +51 -10
  122. package/dist/components/scenes/event-layer.ce.js.map +1 -1
  123. package/dist/core/inject.js +1 -1
  124. package/dist/core/inject.js.map +1 -1
  125. package/dist/core/setup.js +1 -1
  126. package/dist/core/setup.js.map +1 -1
  127. package/dist/decorators/spritesheet.d.ts +1 -0
  128. package/dist/decorators/spritesheet.js +11 -0
  129. package/dist/decorators/spritesheet.js.map +1 -0
  130. package/dist/i18n.d.ts +55 -0
  131. package/dist/i18n.js +60 -0
  132. package/dist/i18n.js.map +1 -0
  133. package/dist/i18n.spec.d.ts +1 -0
  134. package/dist/index.d.ts +8 -0
  135. package/dist/index.js +29 -21
  136. package/dist/module.js +45 -4
  137. package/dist/module.js.map +1 -1
  138. package/dist/node_modules/.pnpm/{@signe_di@2.9.0 → @signe_di@3.1.0}/node_modules/@signe/di/dist/index.js +7 -117
  139. package/dist/node_modules/.pnpm/@signe_di@3.1.0/node_modules/@signe/di/dist/index.js.map +1 -0
  140. package/dist/node_modules/.pnpm/@signe_reactive@3.1.0/node_modules/@signe/reactive/dist/index.js +239 -0
  141. package/dist/node_modules/.pnpm/@signe_reactive@3.1.0/node_modules/@signe/reactive/dist/index.js.map +1 -0
  142. package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/chunk-EUXUH3YW.js +13 -0
  143. 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
  144. package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/index.js +698 -0
  145. package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/index.js.map +1 -0
  146. package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/client/index.js +43 -0
  147. 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
  148. 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
  149. package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/index.js.map +1 -0
  150. 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
  151. package/dist/node_modules/.pnpm/partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/index.js.map +1 -0
  152. 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
  153. package/dist/node_modules/.pnpm/partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/ws.js.map +1 -0
  154. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js +13 -0
  155. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js.map +1 -0
  156. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js +106 -0
  157. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js.map +1 -0
  158. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js +13 -0
  159. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js.map +1 -0
  160. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js +121 -0
  161. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js.map +1 -0
  162. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js +10 -0
  163. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
  164. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js +110 -0
  165. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
  166. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js +99 -0
  167. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js.map +1 -0
  168. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js +82 -0
  169. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js.map +1 -0
  170. 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
  171. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js.map +1 -0
  172. package/dist/presets/animation.js.map +1 -1
  173. package/dist/presets/faceset.js.map +1 -1
  174. package/dist/presets/icon.js.map +1 -1
  175. package/dist/presets/index.js.map +1 -1
  176. package/dist/presets/lpc.js.map +1 -1
  177. package/dist/presets/rmspritesheet.js.map +1 -1
  178. package/dist/services/AbstractSocket.d.ts +2 -0
  179. package/dist/services/AbstractSocket.js.map +1 -1
  180. package/dist/services/actionInput.d.ts +14 -0
  181. package/dist/services/actionInput.js +59 -0
  182. package/dist/services/actionInput.js.map +1 -0
  183. package/dist/services/actionInput.spec.d.ts +1 -0
  184. package/dist/services/cameraFollow.d.ts +51 -0
  185. package/dist/services/cameraFollow.js +134 -0
  186. package/dist/services/cameraFollow.js.map +1 -0
  187. package/dist/services/cameraFollow.spec.d.ts +1 -0
  188. package/dist/services/interactions.d.ts +159 -0
  189. package/dist/services/interactions.js +460 -0
  190. package/dist/services/interactions.js.map +1 -0
  191. package/dist/services/interactions.spec.d.ts +1 -0
  192. package/dist/services/keyboardControls.d.ts +1 -0
  193. package/dist/services/keyboardControls.js +1 -0
  194. package/dist/services/keyboardControls.js.map +1 -1
  195. package/dist/services/loadMap.d.ts +9 -0
  196. package/dist/services/loadMap.js +1 -1
  197. package/dist/services/loadMap.js.map +1 -1
  198. package/dist/services/mmorpg-connection.d.ts +5 -0
  199. package/dist/services/mmorpg-connection.js +50 -0
  200. package/dist/services/mmorpg-connection.js.map +1 -0
  201. package/dist/services/mmorpg-connection.spec.d.ts +1 -0
  202. package/dist/services/mmorpg.d.ts +11 -4
  203. package/dist/services/mmorpg.js +57 -33
  204. package/dist/services/mmorpg.js.map +1 -1
  205. package/dist/services/pointerContext.d.ts +11 -0
  206. package/dist/services/pointerContext.js +48 -0
  207. package/dist/services/pointerContext.js.map +1 -0
  208. package/dist/services/pointerContext.spec.d.ts +1 -0
  209. package/dist/services/save.js.map +1 -1
  210. package/dist/services/save.spec.d.ts +1 -0
  211. package/dist/services/standalone-message.d.ts +1 -0
  212. package/dist/services/standalone-message.js +9 -0
  213. package/dist/services/standalone-message.js.map +1 -0
  214. package/dist/services/standalone.d.ts +4 -1
  215. package/dist/services/standalone.js +36 -16
  216. package/dist/services/standalone.js.map +1 -1
  217. package/dist/services/standalone.spec.d.ts +1 -0
  218. package/dist/utils/getEntityProp.js +4 -3
  219. package/dist/utils/getEntityProp.js.map +1 -1
  220. package/dist/utils/getEntityProp.spec.d.ts +1 -0
  221. package/dist/utils/mapId.d.ts +1 -0
  222. package/dist/utils/mapId.js +6 -0
  223. package/dist/utils/mapId.js.map +1 -0
  224. package/dist/utils/readPropValue.d.ts +2 -0
  225. package/dist/utils/readPropValue.js +13 -0
  226. package/dist/utils/readPropValue.js.map +1 -0
  227. package/package.json +13 -13
  228. package/src/Game/AnimationManager.spec.ts +30 -0
  229. package/src/Game/AnimationManager.ts +26 -10
  230. package/src/Game/ClientVisuals.spec.ts +56 -0
  231. package/src/Game/ClientVisuals.ts +184 -0
  232. package/src/Game/EventComponentResolver.spec.ts +84 -0
  233. package/src/Game/EventComponentResolver.ts +74 -0
  234. package/src/Game/Map.ts +134 -2
  235. package/src/Game/Object.spec.ts +59 -0
  236. package/src/Game/Object.ts +181 -77
  237. package/src/Game/ProjectileManager.spec.ts +449 -0
  238. package/src/Game/ProjectileManager.ts +346 -0
  239. package/src/Gui/Gui.spec.ts +359 -0
  240. package/src/Gui/Gui.ts +178 -67
  241. package/src/Resource.ts +1 -2
  242. package/src/RpgClient.ts +220 -17
  243. package/src/RpgClientEngine.ts +995 -133
  244. package/src/components/animations/fx.ce +101 -0
  245. package/src/components/animations/index.ts +4 -2
  246. package/src/components/character.ce +839 -45
  247. package/src/components/dynamics/bar.ce +88 -0
  248. package/src/components/dynamics/image.ce +21 -0
  249. package/src/components/dynamics/parse-value.spec.ts +83 -0
  250. package/src/components/dynamics/parse-value.ts +111 -37
  251. package/src/components/dynamics/shape-utils.spec.ts +46 -0
  252. package/src/components/dynamics/shape-utils.ts +61 -0
  253. package/src/components/dynamics/shape.ce +90 -0
  254. package/src/components/dynamics/text.ce +35 -149
  255. package/src/components/gui/dialogbox/index.ce +52 -21
  256. package/src/components/gui/gameover.ce +6 -4
  257. package/src/components/gui/menu/equip-menu.ce +11 -9
  258. package/src/components/gui/menu/exit-menu.ce +6 -4
  259. package/src/components/gui/menu/items-menu.ce +11 -9
  260. package/src/components/gui/menu/main-menu.ce +14 -12
  261. package/src/components/gui/menu/options-menu.ce +4 -3
  262. package/src/components/gui/menu/skills-menu.ce +2 -1
  263. package/src/components/gui/mobile/index.spec.ts +94 -0
  264. package/src/components/gui/mobile/index.ts +74 -6
  265. package/src/components/gui/mobile/mobile.ce +347 -65
  266. package/src/components/gui/notification/notification.ce +7 -1
  267. package/src/components/gui/save-load.ce +13 -11
  268. package/src/components/gui/shop/shop.ce +20 -18
  269. package/src/components/gui/title-screen.ce +6 -4
  270. package/src/components/index.ts +2 -1
  271. package/src/components/interaction-components.ce +23 -0
  272. package/src/components/player-components-utils.spec.ts +109 -0
  273. package/src/components/player-components-utils.ts +205 -0
  274. package/src/components/player-components.ce +222 -0
  275. package/src/components/prebuilt/hp-bar.ce +4 -3
  276. package/src/components/prebuilt/light-halo.ce +2 -2
  277. package/src/components/scenes/canvas.ce +219 -15
  278. package/src/components/scenes/draw-map.ce +34 -22
  279. package/src/components/scenes/event-layer.ce +55 -4
  280. package/src/core/setup.ts +2 -2
  281. package/src/decorators/spritesheet.ts +8 -0
  282. package/src/i18n.spec.ts +39 -0
  283. package/src/i18n.ts +59 -0
  284. package/src/index.ts +19 -0
  285. package/src/module.ts +61 -11
  286. package/src/services/AbstractSocket.ts +3 -0
  287. package/src/services/actionInput.spec.ts +155 -0
  288. package/src/services/actionInput.ts +120 -0
  289. package/src/services/cameraFollow.spec.ts +220 -0
  290. package/src/services/cameraFollow.ts +222 -0
  291. package/src/services/interactions.spec.ts +175 -0
  292. package/src/services/interactions.ts +722 -0
  293. package/src/services/keyboardControls.ts +2 -1
  294. package/src/services/loadMap.ts +5 -1
  295. package/src/services/mmorpg-connection.spec.ts +99 -0
  296. package/src/services/mmorpg-connection.ts +69 -0
  297. package/src/services/mmorpg.ts +70 -36
  298. package/src/services/pointerContext.spec.ts +36 -0
  299. package/src/services/pointerContext.ts +84 -0
  300. package/src/services/save.spec.ts +127 -0
  301. package/src/services/standalone-message.ts +7 -0
  302. package/src/services/standalone.spec.ts +54 -0
  303. package/src/services/standalone.ts +44 -12
  304. package/src/utils/getEntityProp.spec.ts +96 -0
  305. package/src/utils/getEntityProp.ts +4 -3
  306. package/src/utils/mapId.ts +2 -0
  307. package/src/utils/readPropValue.ts +16 -0
  308. package/dist/node_modules/.pnpm/@signe_di@2.9.0/node_modules/@signe/di/dist/index.js.map +0 -1
  309. package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js +0 -457
  310. package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js.map +0 -1
  311. package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js +0 -463
  312. package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js.map +0 -1
  313. package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js +0 -2191
  314. package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js.map +0 -1
  315. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js +0 -10
  316. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js.map +0 -1
  317. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js +0 -91
  318. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js.map +0 -1
  319. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/index.js.map +0 -1
  320. package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js +0 -14
  321. package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js.map +0 -1
  322. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js.map +0 -1
  323. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js.map +0 -1
  324. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/index.js +0 -2
  325. package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js.map +0 -1
@@ -1,153 +1,112 @@
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/menu/equip-menu.ce
5
6
  function component($$props) {
6
7
  useProps($$props);
7
8
  const defineProps = useDefineProps($$props);
8
- var __assign = this && this.__assign || function() {
9
- __assign = Object.assign || function(t) {
10
- for (var s, i = 1, n = arguments.length; i < n; i++) {
11
- s = arguments[i];
12
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
13
- }
14
- return t;
15
- };
16
- return __assign.apply(this, arguments);
17
- };
18
- var __spreadArray = this && this.__spreadArray || function(to, from, pack) {
19
- if (pack || arguments.length === 2) {
20
- for (var i = 0, l = from.length, ar; i < l; i++) if (ar || !(i in from)) {
21
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22
- ar[i] = from[i];
23
- }
24
- }
25
- return to.concat(ar || Array.prototype.slice.call(from));
26
- };
27
- var engine = inject(RpgClientEngine);
28
- var keyboardControls = engine.globalConfig.keyboardControls;
29
- var currentPlayer = engine.scene.currentPlayer;
30
- var selectedTab = signal(0);
31
- var selectedItem = signal(0);
32
- var _a = defineProps(), data = _a.data, onInteraction = _a.onInteraction, onBack = _a.onBack;
33
- var equips = computed(function() {
34
- var _a;
35
- return (_a = data().equips) !== null && _a !== void 0 ? _a : data().items;
36
- });
37
- var slots = computed(function() {
38
- return data().slots;
39
- });
40
- var defaultSlots = [{
9
+ useDefineEmits($$props);
10
+ const engine = inject(RpgClientEngine);
11
+ const { t } = engine.i18n();
12
+ const keyboardControls = engine.globalConfig.keyboardControls;
13
+ const currentPlayer = engine.scene.currentPlayer;
14
+ const selectedTab = signal(0);
15
+ const selectedItem = signal(0);
16
+ const { data, onInteraction, onBack } = defineProps();
17
+ const equips = computed(() => data().equips ?? data().items);
18
+ const slots = computed(() => data().slots);
19
+ const defaultSlots = [{
41
20
  id: "weapon",
42
- label: "Weapon",
21
+ label: t("rpg.menu.weapons"),
43
22
  types: ["weapon"]
44
23
  }, {
45
24
  id: "armor",
46
- label: "Armor",
25
+ label: t("rpg.menu.armor"),
47
26
  types: ["armor"]
48
27
  }];
49
- var resolveProp = function(value) {
50
- return typeof value === "function" ? value() : value;
51
- };
52
- var safeEquips = computed(function() {
53
- var list = resolveProp(equips);
28
+ const resolveProp = (value) => typeof value === "function" ? value() : value;
29
+ const safeEquips = computed(() => {
30
+ const list = resolveProp(equips);
54
31
  return Array.isArray(list) ? list : [];
55
32
  });
56
- var slotList = computed(function() {
57
- var list = resolveProp(slots);
33
+ const slotList = computed(() => {
34
+ const list = resolveProp(slots);
58
35
  if (Array.isArray(list) && list.length) return list;
59
36
  return defaultSlots;
60
37
  });
61
- var currentSlot = computed(function() {
62
- return slotList()[selectedTab()];
63
- });
64
- var equippedIds = computed(function() {
65
- var _a, _b;
66
- var equipped = ((_b = (_a = currentPlayer()).equipments) === null || _b === void 0 ? void 0 : _b.call(_a)) || [];
67
- return new Set(equipped.map(function(it) {
68
- var _a, _b, _c;
69
- return (_c = (_b = (_a = it === null || it === void 0 ? void 0 : it.id) === null || _a === void 0 ? void 0 : _a.call(it)) !== null && _b !== void 0 ? _b : it === null || it === void 0 ? void 0 : it.id) !== null && _c !== void 0 ? _c : it === null || it === void 0 ? void 0 : it.name;
70
- }));
38
+ const currentSlot = computed(() => slotList()[selectedTab()]);
39
+ const equippedIds = computed(() => {
40
+ const equipped = currentPlayer().equipments?.() || [];
41
+ return new Set(equipped.map((it) => it?.id?.() ?? it?.id ?? it?.name));
71
42
  });
72
- var equippedOverrides = signal({});
73
- effect(function() {
74
- var next = {};
75
- safeEquips().forEach(function(item) {
76
- if ((item === null || item === void 0 ? void 0 : item.id) && typeof item.equipped === "boolean") next[item.id] = item.equipped;
43
+ const equippedOverrides = signal({});
44
+ effect(() => {
45
+ const next = {};
46
+ safeEquips().forEach((item) => {
47
+ if (item?.id && typeof item.equipped === "boolean") next[item.id] = item.equipped;
77
48
  });
78
49
  equippedOverrides.set(next);
79
50
  });
80
- var itemEquipped = function(item) {
51
+ const itemEquipped = (item) => {
81
52
  if (!item) return false;
82
- var overrides = equippedOverrides();
53
+ const overrides = equippedOverrides();
83
54
  if (Object.prototype.hasOwnProperty.call(overrides, item.id)) return overrides[item.id];
84
55
  if (typeof item.equipped === "boolean") return item.equipped;
85
56
  return equippedIds().has(item.id);
86
57
  };
87
- var slotTypes = function(slot) {
58
+ const slotTypes = (slot) => {
88
59
  if (!slot) return [];
89
60
  if (Array.isArray(slot.types)) return slot.types;
90
61
  if (slot.type) return [slot.type];
91
62
  if (slot.id) return [slot.id];
92
63
  return [];
93
64
  };
94
- var slotItems = computed(function() {
95
- var slot = currentSlot();
65
+ const slotItems = computed(() => {
66
+ const slot = currentSlot();
96
67
  if (!slot) return [];
97
- var types = new Set(slotTypes(slot));
98
- return safeEquips().filter(function(item) {
99
- return item && types.has(item.type);
100
- });
68
+ const types = new Set(slotTypes(slot));
69
+ return safeEquips().filter((item) => item && types.has(item.type));
101
70
  });
102
- var currentEquippedItem = computed(function() {
103
- return slotItems().find(function(item) {
104
- return itemEquipped(item);
105
- }) || null;
71
+ const currentEquippedItem = computed(() => {
72
+ return slotItems().find((item) => itemEquipped(item)) || null;
106
73
  });
107
- var listEntries = computed(function() {
108
- var items = slotItems().map(function(item) {
109
- return __assign(__assign({}, item), {
110
- kind: "item",
111
- tag: itemEquipped(item) ? "Equipped" : ""
112
- });
113
- });
74
+ const listEntries = computed(() => {
75
+ const items = slotItems().map((item) => ({
76
+ ...item,
77
+ kind: "item",
78
+ tag: itemEquipped(item) ? t("rpg.shop.equipped") : ""
79
+ }));
114
80
  if (!currentEquippedItem()) return items;
115
- return __spreadArray([{
81
+ return [{
116
82
  id: "__unequip__",
117
- name: "Unequip",
118
- description: "Remove the current equipment",
83
+ name: t("rpg.menu.unequip"),
84
+ description: t("rpg.menu.remove-equipment"),
119
85
  kind: "unequip",
120
86
  tag: ""
121
- }], items, true);
87
+ }, ...items];
122
88
  });
123
- var currentEntry = computed(function() {
124
- return listEntries()[selectedItem()];
125
- });
126
- var detailsItem = computed(function() {
127
- var entry = currentEntry();
128
- if ((entry === null || entry === void 0 ? void 0 : entry.kind) === "item") return entry;
89
+ const currentEntry = computed(() => listEntries()[selectedItem()]);
90
+ const detailsItem = computed(() => {
91
+ const entry = currentEntry();
92
+ if (entry?.kind === "item") return entry;
129
93
  return currentEquippedItem();
130
94
  });
131
- var equippedText = computed(function() {
132
- var slot = currentSlot();
95
+ const equippedText = computed(() => {
96
+ const slot = currentSlot();
133
97
  if (!slot) return "";
134
- var equipped = currentEquippedItem();
135
- return equipped ? "".concat(slot.label, ": ").concat(equipped.name) : "".concat(slot.label, ": Empty");
136
- });
137
- computed(function() {
138
- return listEntries().length === 0;
98
+ const equipped = currentEquippedItem();
99
+ return equipped ? `${slot.label}: ${equipped.name}` : `${slot.label}: ${t("rpg.menu.empty")}`;
139
100
  });
140
- var nav = createTabindexNavigator(selectedItem, { count: function() {
141
- return listEntries().length;
142
- } }, "wrap");
143
- var playerParams = computed(function() {
144
- var _a, _b;
145
- var menuData = data();
146
- if (menuData === null || menuData === void 0 ? void 0 : menuData.playerStats) return menuData.playerStats;
147
- if (menuData === null || menuData === void 0 ? void 0 : menuData.playerParams) return menuData.playerParams;
148
- return ((_b = (_a = currentPlayer()) === null || _a === void 0 ? void 0 : _a._param) === null || _b === void 0 ? void 0 : _b.call(_a)) || {};
101
+ computed(() => listEntries().length === 0);
102
+ const nav = createTabindexNavigator(selectedItem, { count: () => listEntries().length }, "wrap");
103
+ const playerParams = computed(() => {
104
+ const menuData = data();
105
+ if (menuData?.playerStats) return menuData.playerStats;
106
+ if (menuData?.playerParams) return menuData.playerParams;
107
+ return currentPlayer()?._param?.() || {};
149
108
  });
150
- var statOrder = [
109
+ const statOrder = [
151
110
  "atk",
152
111
  "def",
153
112
  "pdef",
@@ -159,7 +118,7 @@ function component($$props) {
159
118
  "maxHp",
160
119
  "maxSp"
161
120
  ];
162
- var statLabels = {
121
+ const statLabels = {
163
122
  atk: "ATK",
164
123
  def: "DEF",
165
124
  pdef: "PDEF",
@@ -171,11 +130,11 @@ function component($$props) {
171
130
  maxHp: "MAX HP",
172
131
  maxSp: "MAX SP"
173
132
  };
174
- var getItemStats = function(item) {
133
+ const getItemStats = (item) => {
175
134
  if (!item) return {};
176
- var stats = item.stats || item.params || {};
135
+ const stats = item.stats || item.params || {};
177
136
  if (Object.keys(stats).length) return stats;
178
- var keys = [
137
+ const keys = [
179
138
  "atk",
180
139
  "def",
181
140
  "pdef",
@@ -187,29 +146,24 @@ function component($$props) {
187
146
  "maxHp",
188
147
  "maxSp"
189
148
  ];
190
- var direct = {};
191
- keys.forEach(function(key) {
149
+ const direct = {};
150
+ keys.forEach((key) => {
192
151
  if (item[key] !== void 0) direct[key] = item[key];
193
152
  });
194
153
  return direct;
195
154
  };
196
- var buildStatsList = function(deltaStats) {
197
- var params = playerParams() || {};
198
- var orderedKeys = statOrder.filter(function(key) {
199
- return deltaStats[key] !== void 0;
200
- });
201
- var extraKeys = Object.keys(deltaStats).filter(function(key) {
202
- return !statOrder.includes(key);
203
- });
204
- var keys = orderedKeys.concat(extraKeys);
205
- var list = [];
206
- for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
207
- var key = keys_1[_i];
208
- var delta = deltaStats[key];
155
+ const buildStatsList = (deltaStats) => {
156
+ const params = playerParams() || {};
157
+ const orderedKeys = statOrder.filter((key) => deltaStats[key] !== void 0);
158
+ const extraKeys = Object.keys(deltaStats).filter((key) => !statOrder.includes(key));
159
+ const keys = orderedKeys.concat(extraKeys);
160
+ const list = [];
161
+ for (const key of keys) {
162
+ const delta = deltaStats[key];
209
163
  if (delta === void 0 || delta === 0) continue;
210
- var current = params[key];
164
+ let current = params[key];
211
165
  if (current === void 0 && key === "def") current = params.pdef;
212
- var next = current !== void 0 ? current + delta : void 0;
166
+ const next = current !== void 0 ? current + delta : void 0;
213
167
  list.push({
214
168
  key,
215
169
  label: statLabels[key] || key.toUpperCase(),
@@ -220,50 +174,50 @@ function component($$props) {
220
174
  }
221
175
  return list;
222
176
  };
223
- var displayStats = computed(function() {
224
- var entry = currentEntry();
225
- var equipped = currentEquippedItem();
177
+ const displayStats = computed(() => {
178
+ const entry = currentEntry();
179
+ const equipped = currentEquippedItem();
226
180
  if (!entry) return [];
227
181
  if (entry.kind === "unequip") {
228
182
  if (!equipped) return [];
229
- var stats_1 = getItemStats(equipped);
230
- var delta_1 = {};
231
- Object.keys(stats_1).forEach(function(key) {
232
- delta_1[key] = -stats_1[key];
183
+ const stats = getItemStats(equipped);
184
+ const delta = {};
185
+ Object.keys(stats).forEach((key) => {
186
+ delta[key] = -stats[key];
233
187
  });
234
- return buildStatsList(delta_1);
188
+ return buildStatsList(delta);
235
189
  }
236
190
  if (entry.kind === "item") {
237
- var equippedStats_1 = getItemStats(equipped);
238
- var nextStats_1 = getItemStats(entry);
239
- var delta_2 = {};
240
- new Set(__spreadArray(__spreadArray([], Object.keys(nextStats_1), true), Object.keys(equippedStats_1), true)).forEach(function(key) {
241
- delta_2[key] = (nextStats_1[key] || 0) - (equippedStats_1[key] || 0);
191
+ const equippedStats = getItemStats(equipped);
192
+ const nextStats = getItemStats(entry);
193
+ const delta = {};
194
+ new Set([...Object.keys(nextStats), ...Object.keys(equippedStats)]).forEach((key) => {
195
+ delta[key] = (nextStats[key] || 0) - (equippedStats[key] || 0);
242
196
  });
243
- return buildStatsList(delta_2);
197
+ return buildStatsList(delta);
244
198
  }
245
199
  return [];
246
200
  });
247
- var applyEquipState = function(slot, itemId, equip) {
248
- var types = slotTypes(slot);
249
- var next = __assign({}, equippedOverrides());
250
- if (types.length) safeEquips().forEach(function(item) {
201
+ const applyEquipState = (slot, itemId, equip) => {
202
+ const types = slotTypes(slot);
203
+ const next = { ...equippedOverrides() };
204
+ if (types.length) safeEquips().forEach((item) => {
251
205
  if (!item) return;
252
206
  if (types.includes(item.type)) next[item.id] = false;
253
207
  });
254
208
  if (itemId) next[itemId] = equip;
255
209
  equippedOverrides.set(next);
256
210
  };
257
- var commitSelection = function(index) {
258
- var entry = listEntries()[index];
211
+ const commitSelection = (index) => {
212
+ const entry = listEntries()[index];
259
213
  if (!entry) return;
260
214
  if (entry.kind === "unequip") {
261
- var equipped = currentEquippedItem();
215
+ const equipped = currentEquippedItem();
262
216
  if (equipped && onInteraction) onInteraction("equipItem", {
263
217
  id: equipped.id,
264
218
  equip: false
265
219
  });
266
- applyEquipState(currentSlot(), equipped === null || equipped === void 0 ? void 0 : equipped.id, false);
220
+ applyEquipState(currentSlot(), equipped?.id, false);
267
221
  return;
268
222
  }
269
223
  if (entry.kind === "item" && onInteraction) {
@@ -286,15 +240,13 @@ function component($$props) {
286
240
  commitSelection(index);
287
241
  };
288
242
  }
289
- var iconSheet = function(iconId) {
290
- return { definition: engine.getSpriteSheet(iconId) };
291
- };
292
- var controls = signal({
243
+ const iconSheet = (iconId) => ({ definition: engine.getSpriteSheet(iconId) });
244
+ const controls = signal({
293
245
  up: {
294
246
  repeat: true,
295
247
  bind: keyboardControls.up,
296
248
  throttle: 150,
297
- keyDown: function() {
249
+ keyDown() {
298
250
  if (!listEntries().length) return;
299
251
  nav.next(-1);
300
252
  }
@@ -303,12 +255,10 @@ function component($$props) {
303
255
  repeat: true,
304
256
  bind: keyboardControls.left,
305
257
  throttle: 150,
306
- keyDown: function() {
307
- var tabs = slotList();
258
+ keyDown() {
259
+ const tabs = slotList();
308
260
  if (!tabs.length) return;
309
- selectedTab.update(function(value) {
310
- return (value - 1 + tabs.length) % tabs.length;
311
- });
261
+ selectedTab.update((value) => (value - 1 + tabs.length) % tabs.length);
312
262
  selectedItem.set(0);
313
263
  }
314
264
  },
@@ -316,12 +266,10 @@ function component($$props) {
316
266
  repeat: true,
317
267
  bind: keyboardControls.right,
318
268
  throttle: 150,
319
- keyDown: function() {
320
- var tabs = slotList();
269
+ keyDown() {
270
+ const tabs = slotList();
321
271
  if (!tabs.length) return;
322
- selectedTab.update(function(value) {
323
- return (value + 1) % tabs.length;
324
- });
272
+ selectedTab.update((value) => (value + 1) % tabs.length);
325
273
  selectedItem.set(0);
326
274
  }
327
275
  },
@@ -329,28 +277,28 @@ function component($$props) {
329
277
  repeat: true,
330
278
  bind: keyboardControls.down,
331
279
  throttle: 150,
332
- keyDown: function() {
280
+ keyDown() {
333
281
  if (!listEntries().length) return;
334
282
  nav.next(1);
335
283
  }
336
284
  },
337
285
  action: {
338
- bind: keyboardControls.action,
339
- keyDown: function() {
286
+ bind: getKeyboardControlBind(keyboardControls.action),
287
+ keyDown() {
340
288
  if (!listEntries().length) return;
341
289
  commitSelection(selectedItem());
342
290
  }
343
291
  },
344
292
  escape: {
345
293
  bind: keyboardControls.escape,
346
- keyDown: function() {
294
+ keyDown() {
347
295
  if (onBack) onBack();
348
296
  }
349
297
  },
350
298
  gamepad: { enabled: true }
351
299
  });
352
- effect(function() {
353
- var count = listEntries().length;
300
+ effect(() => {
301
+ const count = listEntries().length;
354
302
  if (!count) {
355
303
  selectedItem.set(0);
356
304
  return;
@@ -366,7 +314,7 @@ function component($$props) {
366
314
  }, [h(DOMElement, {
367
315
  element: "div",
368
316
  attrs: { class: "rpg-ui-menu-panel-header" },
369
- textContent: "Equip"
317
+ textContent: computed(() => t("rpg.menu.equip"))
370
318
  }), h(DOMElement, {
371
319
  element: "div",
372
320
  attrs: { class: "rpg-ui-menu-panel-body rpg-ui-menu-panel-body-stacked" }
@@ -389,7 +337,7 @@ function component($$props) {
389
337
  h(DOMElement, {
390
338
  element: "div",
391
339
  attrs: { class: "rpg-ui-menu-panel-details-title" },
392
- textContent: computed(() => detailsItem()?.name || currentSlot()?.label || "Equip")
340
+ textContent: computed(() => detailsItem()?.name || currentSlot()?.label || t("rpg.menu.equip"))
393
341
  }),
394
342
  h(DOMElement, {
395
343
  element: "div",
@@ -475,7 +423,8 @@ function component($$props) {
475
423
  textContent: entry.tag || ""
476
424
  })])))])])]));
477
425
  }
426
+ var __ce_component = component;
478
427
  //#endregion
479
- export { component as default };
428
+ export { __ce_component as default };
480
429
 
481
430
  //# sourceMappingURL=equip-menu.ce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"equip-menu.ce.js","names":[],"sources":["../../../../src/components/gui/menu/equip-menu.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\">\n <div class=\"rpg-ui-menu-panel rpg-ui-panel\">\n <div class=\"rpg-ui-menu-panel-header\">Equip</div>\n <div class=\"rpg-ui-menu-panel-body rpg-ui-menu-panel-body-stacked\">\n <div>\n <div class=\"rpg-ui-menu-panel-details rpg-ui-panel\">\n <div class=\"rpg-ui-menu-panel-hero\">\n <div class=\"rpg-ui-menu-panel-hero-icon\">\n <DOMSprite \n sheet={iconSheet(detailsItem()?.icon)} \n playing=\"default\" \n width=\"48px\"\n height=\"48px\"\n objectFit=\"contain\"\n />\n </div>\n <div>\n <div class=\"rpg-ui-menu-panel-details-title\">\n {detailsItem()?.name || currentSlot()?.label || \"Equip\"}\n </div>\n <div class=\"rpg-ui-menu-panel-details-desc\">\n {detailsItem()?.description || \"\"}\n </div>\n @if (displayStats().length > 0) {\n <div class=\"rpg-ui-equip-stats\">\n @for ((stat,index) of displayStats) {\n <div class=\"rpg-ui-equip-stat\" class={{positive: stat.delta > 0, negative: stat.delta < 0}}>\n <div class=\"rpg-ui-equip-stat-key\">{stat.label}</div>\n <div class=\"rpg-ui-equip-stat-value\">\n {stat.delta > 0 ? \"+\" : \"\"}{stat.delta}\n </div>\n @if (stat.current) {\n <div class=\"rpg-ui-equip-stat-current\">{stat.current} -> {stat.next}</div>\n }\n </div>\n }\n </div>\n }\n <div class=\"rpg-ui-menu-panel-details-meta\">\n <span>{equippedText()}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"rpg-ui-menu-panel-list rpg-ui-menu rpg-ui-menu-panel-list-full\">\n <div class=\"rpg-ui-menu-tabs\">\n @for ((tab,tabIndex) of slotList) {\n <div\n class=\"rpg-ui-menu-tab\"\n class={{active: selectedTab() === tabIndex}}\n tabindex={tabIndex}\n click={selectTab(tabIndex)}\n >{tab.label}</div>\n }\n </div>\n <Navigation tabindex={selectedItem} controls={controls}>\n @for ((entry,index) of listEntries) {\n <div\n class=\"rpg-ui-menu-item rpg-ui-menu-row\"\n data-selected={selectedItem() === index ? \"true\" : \"false\"}\n tabindex={index}\n click={selectItem(index)}\n >\n <div class=\"rpg-ui-menu-row-main\">\n <div class=\"rpg-ui-menu-row-icon\">\n @if (entry?.icon) {\n <DOMSprite \n sheet={iconSheet(entry.icon)} \n playing=\"default\" \n width=\"28px\"\n height=\"28px\"\n objectFit=\"contain\"\n />\n }\n </div>\n <span>{entry.name}</span>\n </div>\n <span class=\"rpg-ui-menu-row-end\">{entry.tag || \"\"}</span>\n </div>\n }\n </Navigation>\n </div>\n </div>\n </div>\n</DOMContainer>\n\n<script>\n import { signal, computed, createTabindexNavigator, effect } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n\n const engine = inject(RpgClientEngine);\n const keyboardControls = engine.globalConfig.keyboardControls;\n const currentPlayer = engine.scene.currentPlayer;\n\n const selectedTab = signal(0);\n const selectedItem = signal(0);\n const { data, onInteraction, onBack } = defineProps();\n\n const equips = computed(() => data().equips ?? data().items);\n const slots = computed(() => data().slots);\n\n const defaultSlots = [\n { id: \"weapon\", label: \"Weapon\", types: [\"weapon\"] },\n { id: \"armor\", label: \"Armor\", types: [\"armor\"] }\n ];\n const resolveProp = (value) => typeof value === \"function\" ? value() : value;\n const safeEquips = computed(() => {\n const list = resolveProp(equips);\n return Array.isArray(list) ? list : [];\n });\n const slotList = computed(() => {\n const list = resolveProp(slots);\n if (Array.isArray(list) && list.length) return list;\n return defaultSlots;\n });\n\n const currentSlot = computed(() => slotList()[selectedTab()]);\n\n const equippedIds = computed(() => {\n const equipped = currentPlayer().equipments?.() || [];\n return new Set(equipped.map((it) => it?.id?.() ?? it?.id ?? it?.name));\n });\n const equippedOverrides = signal({});\n\n effect(() => {\n const next = {};\n safeEquips().forEach((item) => {\n if (item?.id && typeof item.equipped === \"boolean\") {\n next[item.id] = item.equipped;\n }\n });\n equippedOverrides.set(next);\n });\n\n const itemEquipped = (item) => {\n if (!item) return false;\n const overrides = equippedOverrides();\n if (Object.prototype.hasOwnProperty.call(overrides, item.id)) {\n return overrides[item.id];\n }\n if (typeof item.equipped === \"boolean\") return item.equipped;\n return equippedIds().has(item.id);\n };\n\n const slotTypes = (slot) => {\n if (!slot) return [];\n if (Array.isArray(slot.types)) return slot.types;\n if (slot.type) return [slot.type];\n if (slot.id) return [slot.id];\n return [];\n };\n\n const slotItems = computed(() => {\n const slot = currentSlot();\n if (!slot) return [];\n const types = new Set(slotTypes(slot));\n return safeEquips().filter((item) => item && types.has(item.type));\n });\n\n const currentEquippedItem = computed(() => {\n const list = slotItems();\n return list.find((item) => itemEquipped(item)) || null;\n });\n\n const listEntries = computed(() => {\n const items = slotItems().map((item) => ({\n ...item,\n kind: \"item\",\n tag: itemEquipped(item) ? \"Equipped\" : \"\"\n }));\n const equipped = currentEquippedItem();\n if (!equipped) return items;\n return [\n {\n id: \"__unequip__\",\n name: \"Unequip\",\n description: \"Remove the current equipment\",\n kind: \"unequip\",\n tag: \"\"\n },\n ...items\n ];\n });\n\n const currentEntry = computed(() => listEntries()[selectedItem()]);\n const detailsItem = computed(() => {\n const entry = currentEntry();\n if (entry?.kind === \"item\") return entry;\n return currentEquippedItem();\n });\n\n const equippedText = computed(() => {\n const slot = currentSlot();\n if (!slot) return \"\";\n const equipped = currentEquippedItem();\n return equipped ? `${slot.label}: ${equipped.name}` : `${slot.label}: Empty`;\n });\n const listEmpty = computed(() => listEntries().length === 0);\n\n const nav = createTabindexNavigator(selectedItem, { count: () => listEntries().length }, \"wrap\");\n\n const playerParams = computed(() => {\n const menuData = data();\n if (menuData?.playerStats) return menuData.playerStats;\n if (menuData?.playerParams) return menuData.playerParams;\n return currentPlayer()?._param?.() || {};\n });\n const statOrder = [\"atk\", \"def\", \"pdef\", \"sdef\", \"str\", \"dex\", \"int\", \"agi\", \"maxHp\", \"maxSp\"];\n const statLabels = {\n atk: \"ATK\",\n def: \"DEF\",\n pdef: \"PDEF\",\n sdef: \"SDEF\",\n str: \"STR\",\n dex: \"DEX\",\n int: \"INT\",\n agi: \"AGI\",\n maxHp: \"MAX HP\",\n maxSp: \"MAX SP\"\n };\n\n const getItemStats = (item) => {\n if (!item) return {};\n const stats = item.stats || item.params || {};\n if (Object.keys(stats).length) return stats;\n const keys = [\"atk\", \"def\", \"pdef\", \"sdef\", \"str\", \"dex\", \"int\", \"agi\", \"maxHp\", \"maxSp\"];\n const direct = {};\n keys.forEach((key) => {\n if (item[key] !== undefined) direct[key] = item[key];\n });\n return direct;\n };\n\n const buildStatsList = (deltaStats) => {\n const params = playerParams() || {};\n const orderedKeys = statOrder.filter((key) => deltaStats[key] !== undefined);\n const extraKeys = Object.keys(deltaStats).filter((key) => !statOrder.includes(key));\n const keys = orderedKeys.concat(extraKeys);\n const list = [];\n for (const key of keys) {\n const delta = deltaStats[key];\n if (delta === undefined || delta === 0) continue;\n let current = params[key];\n if (current === undefined && key === \"def\") current = params.pdef;\n const next = current !== undefined ? current + delta : undefined;\n list.push({\n key,\n label: statLabels[key] || key.toUpperCase(),\n delta,\n current,\n next\n });\n }\n return list;\n };\n\n const displayStats = computed(() => {\n const entry = currentEntry();\n const equipped = currentEquippedItem();\n if (!entry) return [];\n if (entry.kind === \"unequip\") {\n \n if (!equipped) return [];\n const stats = getItemStats(equipped);\n const delta = {};\n Object.keys(stats).forEach((key) => {\n delta[key] = -stats[key];\n });\n return buildStatsList(delta);\n }\n if (entry.kind === \"item\") {\n const equippedStats = getItemStats(equipped);\n const nextStats = getItemStats(entry);\n const delta = {};\n const keys = new Set([...Object.keys(nextStats), ...Object.keys(equippedStats)]);\n keys.forEach((key) => {\n delta[key] = (nextStats[key] || 0) - (equippedStats[key] || 0);\n });\n return buildStatsList(delta);\n }\n return [];\n });\n\n const applyEquipState = (slot, itemId, equip) => {\n const types = slotTypes(slot);\n const next = { ...equippedOverrides() };\n if (types.length) {\n safeEquips().forEach((item) => {\n if (!item) return;\n if (types.includes(item.type)) {\n next[item.id] = false;\n }\n });\n }\n if (itemId) {\n next[itemId] = equip;\n }\n equippedOverrides.set(next);\n };\n\n const commitSelection = (index) => {\n const entry = listEntries()[index];\n if (!entry) return;\n if (entry.kind === \"unequip\") {\n const equipped = currentEquippedItem();\n if (equipped && onInteraction) {\n onInteraction(\"equipItem\", { id: equipped.id, equip: false });\n }\n applyEquipState(currentSlot(), equipped?.id, false);\n return;\n }\n if (entry.kind === \"item\" && onInteraction) {\n if (!itemEquipped(entry)) {\n onInteraction(\"equipItem\", { id: entry.id, equip: true });\n }\n applyEquipState(currentSlot(), entry.id, true);\n }\n };\n\n function selectTab(index) {\n return function() {\n selectedTab.set(index);\n selectedItem.set(0);\n }\n }\n\n function selectItem(index) {\n return function() {\n selectedItem.set(index);\n commitSelection(index);\n }\n }\n\n const iconSheet = (iconId) => ({\n definition: engine.getSpriteSheet(iconId)\n });\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (!listEntries().length) return;\n nav.next(-1);\n }\n },\n left: {\n repeat: true,\n bind: keyboardControls.left,\n throttle: 150,\n keyDown() {\n const tabs = slotList();\n if (!tabs.length) return;\n selectedTab.update((value) => (value - 1 + tabs.length) % tabs.length);\n selectedItem.set(0);\n }\n },\n right: {\n repeat: true,\n bind: keyboardControls.right,\n throttle: 150,\n keyDown() {\n const tabs = slotList();\n if (!tabs.length) return;\n selectedTab.update((value) => (value + 1) % tabs.length);\n selectedItem.set(0);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (!listEntries().length) return;\n nav.next(1);\n }\n },\n action: {\n bind: keyboardControls.action,\n keyDown() {\n if (!listEntries().length) return;\n commitSelection(selectedItem());\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (onBack) onBack();\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n effect(() => {\n const count = listEntries().length;\n if (!count) {\n selectedItem.set(0);\n return;\n }\n if (selectedItem() >= count) {\n selectedItem.set(count - 1);\n }\n });\n</script>\n"],"mappings":";;;;AAWM,SAAwB,UAAS,SAAI;AACpB,UAAS,QAAQ;CAChC,MAAM,cAAc,eAAe,QAAO;CAC1C,IAAI,WAAY,QAAK,KAAA,YAAA,WAAA;AACzB,aAAW,OAAO,UAAO,SAAA,GAAA;AACrB,QAAK,IAAI,GAAG,IAAI,GAAC,IAAG,UAAA,QAAA,IAAA,GAAA,KAAA;AAChB,QAAI,UAAU;AACd,SAAK,IAAI,KAAK,EAAG,KAAI,OAAA,UAAe,eAAQ,KAAc,GAAC,EAAA,CACvD,GAAE,KAAK,EAAE;;AAEjB,UAAO;;AAEX,SAAO,SAAS,MAAM,MAAM,UAAC;;CAEjC,IAAI,gBAAiB,QAAQ,KAAK,iBAAc,SAAU,IAAA,MAAc,MAAA;AACpE,MAAI,QAAQ,UAAU,WAAW;QAAQ,IAAA,IAAO,GAAI,IAAG,KAAM,QAAM,IAAM,IAAE,GAAA,IACvE,KAAI,MAAM,EAAE,KAAK,OAAO;AACpB,QAAI,CAAC,GAAI,MAAK,MAAM,UAAU,MAAM,KAAC,MAAU,GAAG,EAAC;AACnD,OAAG,KAAK,KAAK;;;AAGrB,SAAO,GAAG,OAAO,MAAM,MAAM,UAAU,MAAM,KAAI,KAAM,CAAC;;CAE5D,IAAI,SAAS,OAAO,gBAAgB;CACpC,IAAI,mBAAmB,OAAO,aAAM;CACpC,IAAI,gBAAgB,OAAO,MAAM;CACjC,IAAI,cAAc,OAAO,EAAE;CAC3B,IAAI,eAAe,OAAO,EAAE;CAC5B,IAAI,KAAK,aAAa,EAAE,OAAO,GAAE,MAAM,gBAAiB,GAAA,eAAI,SAAA,GAAA;CAC5D,IAAI,SAAS,SAAS,WAAW;EAAA,IAAA;AAAA,UAAA,KAAA,MAAA,CAAA,YAAA,QAAA,OAAA,KAAA,IAAA,KAAA,MAAA,CAAA;GAAA;CACjC,IAAI,QAAQ,SAAS,WAAQ;AAAA,SAAA,MAAA,CAAA;GAAA;CAC7B,IAAI,eAAe,CACf;EAAE,IAAI;EAAQ,OAAG;EAAA,OAAA,CAAA,SAAA;EAAA,EACjB;EAAE,IAAI;EAAO,OAAA;EAAA,OAAA,CAAA,QAAA;EAAA,CAAA;CAEjB,IAAI,cAAa,SAAW,OAAO;AAAC,SAAM,OAAS,UAAQ,aAAY,OAAU,GAAC;;CAClF,IAAI,aAAa,SAAS,WAAS;EAC/B,IAAI,OAAO,YAAY,OAAI;AAC3B,SAAO,MAAM,QAAQ,KAAA,GAAA,OAAA,EAAA;GACvB;CACF,IAAI,WAAW,SAAS,WAAY;EAChC,IAAI,OAAO,YAAY,MAAC;AACxB,MAAI,MAAM,QAAQ,KAAK,IAAC,KAAO,OAC3B,QAAO;AACX,SAAO;GACT;CACF,IAAI,cAAa,SAAU,WAAW;AAAA,SAAA,UAAc,CAAA,aAAmB;GAAA;CACvE,IAAI,cAAc,SAAS,WAAY;EACnC,IAAI,IAAI;EACR,IAAI,aAAa,MAAM,KAAC,eAAmB,EAAA,gBAAiB,QAAG,OAAA,KAAA,IAAA,KAAA,IAAA,GAAA,KAAA,GAAA,KAAA,EAAA;AAC/D,SAAO,IAAI,IAAI,SAAS,IAAI,SAAU,IAAC;GAAA,IAAA,IAAa,IAAI;AAAE,WAAS,MAAO,MAAE,KAAM,OAAA,QAAA,OAAA,KAAA,IAAA,KAAA,IAAA,GAAA,QAAA,QAAA,OAAA,KAAA,IAAA,KAAA,IAAA,GAAA,KAAA,GAAA,MAAA,QAAA,OAAA,KAAA,IAAA,KAAA,OAAA,QAAA,OAAA,KAAA,IAAA,KAAA,IAAA,GAAA,QAAA,QAAA,OAAA,KAAA,IAAA,KAAA,OAAA,QAAA,OAAA,KAAA,IAAA,KAAA,IAAA,GAAA;IAAA,CAAA;GACpF;CACF,IAAI,oBAAoB,OAAI,EAAK,CAAC;AAClC,QAAO,WAAY;EACf,IAAI,OAAO,EAAE;AACb,cAAY,CAAC,QAAQ,SAAQ,MAAI;AAC7B,QAAK,SAAS,QAAQ,SAAS,KAAE,IAAO,KAAK,IAAC,KAAA,OAAA,OAAA,KAAA,aAAA,UAC1C,MAAK,KAAK,MAAM,KAAK;IAE3B;AACF,oBAAkB,IAAI,KAAK;GAC7B;CACF,IAAI,eAAe,SAAU,MAAM;AAC/B,MAAI,CAAC,KACD,QAAO;EACX,IAAI,YAAY,mBAAiB;AACjC,MAAI,OAAO,UAAU,eAAc,KAAM,WAAW,KAAA,GAAA,CAChD,QAAO,UAAU,KAAK;AAE1B,MAAI,OAAO,KAAK,aAAS,UACrB,QAAO,KAAK;AAChB,SAAO,aAAO,CAAA,IAAU,KAAA,GAAA;;CAE5B,IAAI,YAAS,SAAA,MAAA;AACT,MAAE,CAAG,KACP,QAAY,EAAA;gCAEP,QAAA,KAAA;AACH,MAAA,KAAS,KACT,QAAS,CAAA,KAAQ,KAAK;AACtB,MAAA,KAAS,GAAA,QAAA,CAAA,KAAA,GAAA;AAET,SAAM,EAAA;;CAEV,IAAI,YAAM,SAAe,WAAQ;;AAE7B,MAAA,CAAK,KACL,QAAM,EAAA;EACN,IAAA,QAAY,IAAE,IAAA,UAAe,KAAM,CAAC;;;;GAEtC;CACF,IAAI,sBAAsB,SAAO,WAAa;AAE1C,SAAA,WAAA,CAAM,KAAA,SAAe,MAAA;AAAA,UAAA,aAAA,KAAA;IAAA,IAAA;GACvB;CACF,IAAI,cAAW,SAAQ,WAAgB;EACnC,IAAC,QAAA,WAAA,CAAA,IAAA,SAAA,MAAA;AAAA,UAAA,SAAA,SAAA,EAAA,EAAA,KAAA,EAAA;IAAA,MAAA;IAAA,KAAA,aAAA,KAAA,GAAA,aAAA;IAAA,CAAA;IAAA;AAED,MAAA,CADM,qBAAyB,CAE3B,QAAM;AACV,SAAI,cAAa,CACf;GACI,IAAA;GACF,MAAU;GACN,aAAa;GACjB,MAAO;GACT,KAAA;IAEF,EAAA,OAAM,KAAA;;CAEV,IAAI,eAAM,SAAc,WAAe;AAAA,SAAA,aAAA,CAAA,cAAA;GAAA;CACvC,IAAI,cAAU,SAAW,WAAc;EACnC,IAAI,QAAO,cAAQ;AACnB,OAAE,UAAA,QAAA,UAAA,KAAA,IAAA,KAAA,IAAA,MAAA,UAAA,OACF,QAAM;;GAER;CACF,IAAI,eAAe,SAAI,WAAA;EACnB,IAAI,OAAA,aAAoB;AACxB,MAAI,CAAC,KACD,QAAO;EACX,IAAI,WAAI,qBAAA;AACR,SAAM,WAAA,GAAA,OAAA,KAAA,OAAA,KAAA,CAAA,OAAA,SAAA,KAAA,GAAA,GAAA,OAAA,KAAA,OAAA,UAAA;GACR;AACI,UAAA,WAAA;AAAA,SAAA,aAAA,CAAA,WAAA;GAAA;;;;CAEN,IAAI,eAAM,SAAgB,WAAS;EAC/B,IAAI,IAAI;EACR,IAAI,WAAM,MAAW;AACrB,MAAI,aAAW,QAAU,aAAA,KAAe,IAAK,KAAA,IAAW,SAAS,YAC7D,QAAI,SAAO;AACf,MAAI,aAAA,QAAA,aAAA,KAAA,IAAA,KAAA,IAAA,SAAA,aACA,QAAI,SAAY;AACpB,WAAI,MAAO,KAAA,eAAuB,MAAG,QAAA,OAAA,KAAA,IAAA,KAAA,IAAA,GAAA,YAAA,QAAA,OAAA,KAAA,IAAA,KAAA,IAAA,GAAA,KAAA,GAAA,KAAA,EAAA;GACvC;;;;;;;;;;;;;CAEF,IAAI,aAAM;EACN,KAAI;EACJ,KAAI;EACJ,MAAM;EACN,MAAM;EACN,KAAI;EACJ,KAAC;;EAED,KAAK;EACL,OAAI;EACJ,OAAO;EACV;CACD,IAAI,eAAW,SAAa,MAAO;AAC/B,MAAE,CAAA,KAAA,QAAA,EAAA;EAEF,IAAA,QAAM,KAAA,SAAoB,KAAE,UAAa,EAAE;AAC3C,MAAI,OAAM,KAAM,MAAC,CAAA,OACb,QAAO;EACX,IAAE,OAAA;GAAA;GAAA;GAAA;GAAA;GAAA;GAAA;GAAA;GAAA;GAAA;GAAA;GAAA;;AAEF,OAAK,QAAC,SAAc,KAAQ;AACxB,OAAA,KAAM,SAAQ,KAAA,EACV,QAAO,OAAA,KAAA;IACb;AACF,SAAO;;CAEX,IAAI,iBAAU,SAAW,YAAA;EACrB,IAAI,SAAK,cAAiB,IAAK,EAAA;EAC/B,IAAI,cAAO,UAAA,OAAA,SAAA,KAAA;AAAA,UAAA,WAAA,SAAA,KAAA;IAAA;EACX,IAAI,YAAI,OAAA,KAAA,WAAA,CAAA,OAAA,SAAA,KAAA;AAAA,UAAA,CAAA,UAAA,SAAA,IAAA;IAAA;EACR,IAAI,OAAO,YAAM,OAAY,UAAA;EAC7B,IAAI,OAAO,EAAC;AACZ,OAAK,IAAI,KAAG,GAAA,SAAc,MAAM,KAAK,OAAO,QAAC,MAAU;GACnD,IAAI,MAAI,OAAO;GACf,IAAI,QAAQ,WAAE;AACd,OAAI,UAAC,KAAA,KAAA,UAAA,EACD;GACJ,IAAC,UAAA,OAAA;AACH,OAAA,YAAA,KAAA,KAAA,QAAA,MAAA,WAAA,OAAA;GAEF,IAAM,OAAA,YAAe,KAAA,IAAe,UAAa,QAAC,KAAA;AAClD,QAAM,KAAA;IACI;IACF,OAAO,WAAU,QAAO,IAAM,aAAM;IACjC;IACT;;IAEG,CAAC;;AAEN,SAAO;;CAEX,IAAI,eAAW,SAAa,WAAY;EACpC,IAAE,QAAA,cAAA;EACF,IAAA,WAAe,qBAAkB;aAEjC,QAAW,EAAC;;AAEZ,OAAM,CAAA,SACF,QAAM,EAAA;GACN,IAAI,UAAU,aAAa,SAAO;GAClC,IAAI,UAAU,EAAA;AACd,UAAO,KAAA,QAAa,CAAC,QAAG,SAAe,KAAC;AAC1C,YAAA,OAAA,CAAA,QAAA;KACI;AACN,UAAM,eAAa,QAAA;;AAEnB,MAAI,MAAM,SAAI,QAAA;GACV,IAAI,kBAAQ,aAAA,SAAA;GACZ,IAAI,cAAQ,aAAA,MAAA;GACZ,IAAI,UAAM,EAAA;AACA,OAAA,IAAA,cAAA,cAAA,EAAA,EAAA,OAAA,KAAA,YAAA,EAAA,KAAA,EAAA,OAAA,KAAA,gBAAA,EAAA,KAAA,CAAA,CACL,QAAK,SAAA,KAAA;AACN,YAAM,QAAA,YAAA,QAAA,MAAA,gBAAA,QAAA;KACV;AACA,UAAO,eAAO,QAAA;;;GAGpB;CACF,IAAI,kBAAe,SAAS,MAAA,QAAA,OAAA;EACxB,IAAI,QAAM,UAAY,KAAC;EACvB,IAAI,OAAI,SAAY,EAAA,EAAA,mBAAsB,CAAA;AAC1C,MAAI,MAAM,OACN,aAAY,CAAC,QAAI,SAAA,MAAA;AACb,OAAC,CAAA,KACG;AACN,OAAA,MAAA,SAAA,KAAA,KAAA,CACK,MAAM,KAAA,MAAA;;AAIjB,MAAI,OACA,MAAK,UAAC;AAEV,oBAAiB,IAAA,KAAA;;CAErB,IAAI,kBAAkB,SAAU,OAAA;EAC5B,IAAI,QAAI,aAAc,CAAA;AACtB,MAAI,CAAC,MACD;AACJ,MAAI,MAAM,SAAS,WAAK;GACpB,IAAI,WAAW,qBAAc;AAC7B,OAAI,YAAU,cACV,eAAO,aAAA;IAAA,IAAA,SAAA;IAAA,OAAA;IAAA,CAAA;AAEX,mBAAa,aAAA,EAAA,aAAA,QAAA,aAAA,KAAA,IAAA,KAAA,IAAA,SAAA,IAAA,MAAA;AACb;;AAEJ,MAAI,MAAM,SAAA,UAAA,eAAA;AACN,OAAA,CAAA,aAAA,MAAA,CACA,eAAW,aAAA;IAAA,IAAA,MAAA;IAAA,OAAA;IAAA,CAAA;;;;CAKnB,SAAQ,UAAM,OAAW;AACrB,SAAO,WAAS;AACZ,eAAU,IAAM,MAAI;AACpB,gBAAE,IAAA,EAAA;;;CAGV,SAAS,WAAS,OAAS;AACvB,SAAO,WAAY;AACf,gBAAa,IAAI,MAAK;AACtB,mBAAM,MAAA;;;CAGd,IAAI,YAAQ,SAAc,QAAQ;AAAC,SAAA,EAC/B,YAAQ,OAAM,eAAgB,OAAA,EACjC;;CACD,IAAI,WAAQ,OAAM;EACd,IAAI;GACA,QAAQ;GACR,MAAM,iBAAgB;GACtB,UAAM;GACN,SAAI,WAAO;AACX,QAAA,CAAA,aAAA,CAAA,OACQ;AACV,QAAA,KAAA,GAAA;;GAEF;EACA,MAAI;GACA,QAAM;GACN,MAAI,iBAAc;GAClB,UAAI;GACJ,SAAQ,WAAW;IACf,IAAI,OAAI,UAAM;AACd,QAAI,CAAC,KAAG,OACJ;AACJ,gBAAE,OAAA,SAAA,OAAA;AAAA,aAAA,QAAA,IAAA,KAAA,UAAA,KAAA;MAAA;AACN,iBAAA,IAAA,EAAA;;GAEH;EACD,OAAI;GACA,QAAA;GACH,MAAA,iBAAA;;GAED,SAAM,WAAmB;IACrB,IAAM,OAAQ,UAAW;AACrB,QAAC,CAAA,KAAO,OACR;AACA,gBAAM,OAAW,SAAA,OAAmB;AAAE,aAAA,QAAA,KAAA,KAAA;MAAA;AACtC,iBAAa,IAAG,EAAA;;GAEvB;EACD,MAAM;GACF,QAAI;GACJ,MAAA,iBAAA;GACA,UAAU;GACV,SAAS,WAAY;AACjB,QAAI,CAAA,aAAc,CAAC,OACnB;AACA,QAAA,KAAA,EAAA;;GAEP;;GAED,MAAS,iBAAiB;GACtB,SAAO,WAAW;AACd,QAAA,CAAA,aAAgB,CAAA,OAChB;AACJ,oBAAA,cAAA,CAAA;;;EAGJ,QAAQ;GACJ,MAAM,iBAAY;GAClB,SAAI,WAAiB;AACjB,QAAA,OACJ,SAAA;;;EAGJ,SAAM,EACF,SAAA,MACH;;AAEL,QAAI,WAAe;EACf,IAAI,QAAI,aAAA,CAAA;AACR,MAAI,CAAC,OAAG;AACJ,gBAAU,IAAA,EAAA;AACV;;AAEJ,MAAI,cAAa,IAAA,MACb,cAAY,IAAK,QAAG,EAAA;GAE1B;AAEM,QADM,EAAA,cAAA;EAAA,OAAA;EAAA,QAAA;EAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,kCAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,4BAAA;EAAA,aAAA;EAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,yDAAA;EAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,OAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,0CAAA;EAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,0BAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,+BAAA;EAAA,EAAA,EAAA,WAAA;EAAA,OAAA,eAAA,UAAA,aAAA,EAAA,KAAA,CAAA;EAAA,SAAA;EAAA,OAAA;EAAA,QAAA;EAAA,WAAA;EAAA,CAAA,CAAA,EAAA,EAAA,YAAA,EAAA,SAAA,OAAA,EAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,mCAAA;GAAA,aAAA,eAAA,aAAA,EAAA,QAAA,aAAA,EAAA,SAAA,QAAA;GAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,kCAAA;GAAA,aAAA,eAAA,aAAA,EAAA,eAAA,GAAA;GAAA,CAAA;EAAA,KAAA,eAAA,cAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,sBAAA;GAAA,EAAA,KAAA,eAAA,MAAA,UAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,CAAA,qBAAA;IAAA,UAAA,KAAA,QAAA;IAAA,UAAA,KAAA,QAAA;IAAA,CAAA,EAAA;GAAA,EAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,yBAAA;IAAA,aAAA,KAAA;IAAA,CAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,2BAAA;IAAA,aAAA,KAAA,QAAA,IAAA,MAAA,KAAA,KAAA;IAAA,CAAA;GAAA,KAAA,KAAA,eAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,6BAAA;IAAA,aAAA,KAAA,UAAA,SAAA,KAAA;IAAA,CAAA,CAAA;GAAA,CAAA,CAAA,CAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,kCAAA;GAAA,EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,aAAA,eAAA,cAAA,CAAA;GAAA,CAAA,CAAA;EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,kEAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,oBAAA;EAAA,EAAA,KAAA,WAAA,KAAA,aAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA;GAAA,OAAA,CAAA,mBAAA,gBAAA,EAAA,QAAA,aAAA,KAAA,UAAA,EAAA,CAAA;GAAA,UAAA;GAAA,OAAA,UAAA,SAAA;GAAA;EAAA,aAAA,IAAA;EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,YAAA;EAAA,UAAA;EAAA;EAAA,EAAA,KAAA,cAAA,OAAA,UAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA;GAAA,OAAA;GAAA,iBAAA,eAAA,cAAA,KAAA,QAAA,SAAA,QAAA;GAAA,UAAA;GAAA,OAAA,WAAA,MAAA;GAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,wBAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,wBAAA;EAAA,EAAA,KAAA,OAAA,YAAA,EAAA,WAAA;EAAA,OAAA,eAAA,UAAA,MAAA,KAAA,CAAA;EAAA,SAAA;EAAA,OAAA;EAAA,QAAA;EAAA,WAAA;EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,aAAA,MAAA;EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,uBAAA;EAAA,aAAA,MAAA,OAAA;EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"equip-menu.ce.js","names":[],"sources":["../../../../src/components/gui/menu/equip-menu.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\">\n <div class=\"rpg-ui-menu-panel rpg-ui-panel\">\n <div class=\"rpg-ui-menu-panel-header\">{t(\"rpg.menu.equip\")}</div>\n <div class=\"rpg-ui-menu-panel-body rpg-ui-menu-panel-body-stacked\">\n <div>\n <div class=\"rpg-ui-menu-panel-details rpg-ui-panel\">\n <div class=\"rpg-ui-menu-panel-hero\">\n <div class=\"rpg-ui-menu-panel-hero-icon\">\n <DOMSprite \n sheet={iconSheet(detailsItem()?.icon)} \n playing=\"default\" \n width=\"48px\"\n height=\"48px\"\n objectFit=\"contain\"\n />\n </div>\n <div>\n <div class=\"rpg-ui-menu-panel-details-title\">\n {detailsItem()?.name || currentSlot()?.label || t(\"rpg.menu.equip\")}\n </div>\n <div class=\"rpg-ui-menu-panel-details-desc\">\n {detailsItem()?.description || \"\"}\n </div>\n @if (displayStats().length > 0) {\n <div class=\"rpg-ui-equip-stats\">\n @for ((stat,index) of displayStats) {\n <div class=\"rpg-ui-equip-stat\" class={{positive: stat.delta > 0, negative: stat.delta < 0}}>\n <div class=\"rpg-ui-equip-stat-key\">{stat.label}</div>\n <div class=\"rpg-ui-equip-stat-value\">\n {stat.delta > 0 ? \"+\" : \"\"}{stat.delta}\n </div>\n @if (stat.current) {\n <div class=\"rpg-ui-equip-stat-current\">{stat.current} -> {stat.next}</div>\n }\n </div>\n }\n </div>\n }\n <div class=\"rpg-ui-menu-panel-details-meta\">\n <span>{equippedText()}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"rpg-ui-menu-panel-list rpg-ui-menu rpg-ui-menu-panel-list-full\">\n <div class=\"rpg-ui-menu-tabs\">\n @for ((tab,tabIndex) of slotList) {\n <div\n class=\"rpg-ui-menu-tab\"\n class={{active: selectedTab() === tabIndex}}\n tabindex={tabIndex}\n click={selectTab(tabIndex)}\n >{tab.label}</div>\n }\n </div>\n <Navigation tabindex={selectedItem} controls={controls}>\n @for ((entry,index) of listEntries) {\n <div\n class=\"rpg-ui-menu-item rpg-ui-menu-row\"\n data-selected={selectedItem() === index ? \"true\" : \"false\"}\n tabindex={index}\n click={selectItem(index)}\n >\n <div class=\"rpg-ui-menu-row-main\">\n <div class=\"rpg-ui-menu-row-icon\">\n @if (entry?.icon) {\n <DOMSprite \n sheet={iconSheet(entry.icon)} \n playing=\"default\" \n width=\"28px\"\n height=\"28px\"\n objectFit=\"contain\"\n />\n }\n </div>\n <span>{entry.name}</span>\n </div>\n <span class=\"rpg-ui-menu-row-end\">{entry.tag || \"\"}</span>\n </div>\n }\n </Navigation>\n </div>\n </div>\n </div>\n</DOMContainer>\n\n<script>\n import { signal, computed, createTabindexNavigator, effect } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n import { getKeyboardControlBind } from \"../../../services/actionInput\";\n\n const engine = inject(RpgClientEngine);\n const { t } = engine.i18n();\n const keyboardControls = engine.globalConfig.keyboardControls;\n const currentPlayer = engine.scene.currentPlayer;\n\n const selectedTab = signal(0);\n const selectedItem = signal(0);\n const { data, onInteraction, onBack } = defineProps();\n\n const equips = computed(() => data().equips ?? data().items);\n const slots = computed(() => data().slots);\n\n const defaultSlots = [\n { id: \"weapon\", label: t(\"rpg.menu.weapons\"), types: [\"weapon\"] },\n { id: \"armor\", label: t(\"rpg.menu.armor\"), types: [\"armor\"] }\n ];\n const resolveProp = (value) => typeof value === \"function\" ? value() : value;\n const safeEquips = computed(() => {\n const list = resolveProp(equips);\n return Array.isArray(list) ? list : [];\n });\n const slotList = computed(() => {\n const list = resolveProp(slots);\n if (Array.isArray(list) && list.length) return list;\n return defaultSlots;\n });\n\n const currentSlot = computed(() => slotList()[selectedTab()]);\n\n const equippedIds = computed(() => {\n const equipped = currentPlayer().equipments?.() || [];\n return new Set(equipped.map((it) => it?.id?.() ?? it?.id ?? it?.name));\n });\n const equippedOverrides = signal({});\n\n effect(() => {\n const next = {};\n safeEquips().forEach((item) => {\n if (item?.id && typeof item.equipped === \"boolean\") {\n next[item.id] = item.equipped;\n }\n });\n equippedOverrides.set(next);\n });\n\n const itemEquipped = (item) => {\n if (!item) return false;\n const overrides = equippedOverrides();\n if (Object.prototype.hasOwnProperty.call(overrides, item.id)) {\n return overrides[item.id];\n }\n if (typeof item.equipped === \"boolean\") return item.equipped;\n return equippedIds().has(item.id);\n };\n\n const slotTypes = (slot) => {\n if (!slot) return [];\n if (Array.isArray(slot.types)) return slot.types;\n if (slot.type) return [slot.type];\n if (slot.id) return [slot.id];\n return [];\n };\n\n const slotItems = computed(() => {\n const slot = currentSlot();\n if (!slot) return [];\n const types = new Set(slotTypes(slot));\n return safeEquips().filter((item) => item && types.has(item.type));\n });\n\n const currentEquippedItem = computed(() => {\n const list = slotItems();\n return list.find((item) => itemEquipped(item)) || null;\n });\n\n const listEntries = computed(() => {\n const items = slotItems().map((item) => ({\n ...item,\n kind: \"item\",\n tag: itemEquipped(item) ? t(\"rpg.shop.equipped\") : \"\"\n }));\n const equipped = currentEquippedItem();\n if (!equipped) return items;\n return [\n {\n id: \"__unequip__\",\n name: t(\"rpg.menu.unequip\"),\n description: t(\"rpg.menu.remove-equipment\"),\n kind: \"unequip\",\n tag: \"\"\n },\n ...items\n ];\n });\n\n const currentEntry = computed(() => listEntries()[selectedItem()]);\n const detailsItem = computed(() => {\n const entry = currentEntry();\n if (entry?.kind === \"item\") return entry;\n return currentEquippedItem();\n });\n\n const equippedText = computed(() => {\n const slot = currentSlot();\n if (!slot) return \"\";\n const equipped = currentEquippedItem();\n return equipped ? `${slot.label}: ${equipped.name}` : `${slot.label}: ${t(\"rpg.menu.empty\")}`;\n });\n const listEmpty = computed(() => listEntries().length === 0);\n\n const nav = createTabindexNavigator(selectedItem, { count: () => listEntries().length }, \"wrap\");\n\n const playerParams = computed(() => {\n const menuData = data();\n if (menuData?.playerStats) return menuData.playerStats;\n if (menuData?.playerParams) return menuData.playerParams;\n return currentPlayer()?._param?.() || {};\n });\n const statOrder = [\"atk\", \"def\", \"pdef\", \"sdef\", \"str\", \"dex\", \"int\", \"agi\", \"maxHp\", \"maxSp\"];\n const statLabels = {\n atk: \"ATK\",\n def: \"DEF\",\n pdef: \"PDEF\",\n sdef: \"SDEF\",\n str: \"STR\",\n dex: \"DEX\",\n int: \"INT\",\n agi: \"AGI\",\n maxHp: \"MAX HP\",\n maxSp: \"MAX SP\"\n };\n\n const getItemStats = (item) => {\n if (!item) return {};\n const stats = item.stats || item.params || {};\n if (Object.keys(stats).length) return stats;\n const keys = [\"atk\", \"def\", \"pdef\", \"sdef\", \"str\", \"dex\", \"int\", \"agi\", \"maxHp\", \"maxSp\"];\n const direct = {};\n keys.forEach((key) => {\n if (item[key] !== undefined) direct[key] = item[key];\n });\n return direct;\n };\n\n const buildStatsList = (deltaStats) => {\n const params = playerParams() || {};\n const orderedKeys = statOrder.filter((key) => deltaStats[key] !== undefined);\n const extraKeys = Object.keys(deltaStats).filter((key) => !statOrder.includes(key));\n const keys = orderedKeys.concat(extraKeys);\n const list = [];\n for (const key of keys) {\n const delta = deltaStats[key];\n if (delta === undefined || delta === 0) continue;\n let current = params[key];\n if (current === undefined && key === \"def\") current = params.pdef;\n const next = current !== undefined ? current + delta : undefined;\n list.push({\n key,\n label: statLabels[key] || key.toUpperCase(),\n delta,\n current,\n next\n });\n }\n return list;\n };\n\n const displayStats = computed(() => {\n const entry = currentEntry();\n const equipped = currentEquippedItem();\n if (!entry) return [];\n if (entry.kind === \"unequip\") {\n \n if (!equipped) return [];\n const stats = getItemStats(equipped);\n const delta = {};\n Object.keys(stats).forEach((key) => {\n delta[key] = -stats[key];\n });\n return buildStatsList(delta);\n }\n if (entry.kind === \"item\") {\n const equippedStats = getItemStats(equipped);\n const nextStats = getItemStats(entry);\n const delta = {};\n const keys = new Set([...Object.keys(nextStats), ...Object.keys(equippedStats)]);\n keys.forEach((key) => {\n delta[key] = (nextStats[key] || 0) - (equippedStats[key] || 0);\n });\n return buildStatsList(delta);\n }\n return [];\n });\n\n const applyEquipState = (slot, itemId, equip) => {\n const types = slotTypes(slot);\n const next = { ...equippedOverrides() };\n if (types.length) {\n safeEquips().forEach((item) => {\n if (!item) return;\n if (types.includes(item.type)) {\n next[item.id] = false;\n }\n });\n }\n if (itemId) {\n next[itemId] = equip;\n }\n equippedOverrides.set(next);\n };\n\n const commitSelection = (index) => {\n const entry = listEntries()[index];\n if (!entry) return;\n if (entry.kind === \"unequip\") {\n const equipped = currentEquippedItem();\n if (equipped && onInteraction) {\n onInteraction(\"equipItem\", { id: equipped.id, equip: false });\n }\n applyEquipState(currentSlot(), equipped?.id, false);\n return;\n }\n if (entry.kind === \"item\" && onInteraction) {\n if (!itemEquipped(entry)) {\n onInteraction(\"equipItem\", { id: entry.id, equip: true });\n }\n applyEquipState(currentSlot(), entry.id, true);\n }\n };\n\n function selectTab(index) {\n return function() {\n selectedTab.set(index);\n selectedItem.set(0);\n }\n }\n\n function selectItem(index) {\n return function() {\n selectedItem.set(index);\n commitSelection(index);\n }\n }\n\n const iconSheet = (iconId) => ({\n definition: engine.getSpriteSheet(iconId)\n });\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (!listEntries().length) return;\n nav.next(-1);\n }\n },\n left: {\n repeat: true,\n bind: keyboardControls.left,\n throttle: 150,\n keyDown() {\n const tabs = slotList();\n if (!tabs.length) return;\n selectedTab.update((value) => (value - 1 + tabs.length) % tabs.length);\n selectedItem.set(0);\n }\n },\n right: {\n repeat: true,\n bind: keyboardControls.right,\n throttle: 150,\n keyDown() {\n const tabs = slotList();\n if (!tabs.length) return;\n selectedTab.update((value) => (value + 1) % tabs.length);\n selectedItem.set(0);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (!listEntries().length) return;\n nav.next(1);\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n if (!listEntries().length) return;\n commitSelection(selectedItem());\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (onBack) onBack();\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n effect(() => {\n const count = listEntries().length;\n if (!count) {\n selectedItem.set(0);\n return;\n }\n if (selectedItem() >= count) {\n selectedItem.set(count - 1);\n }\n });\n</script>\n"],"mappings":"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"}