@rpgjs/client 5.0.0-alpha.9 → 5.0.0-beta.10

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 (347) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/LICENSE +19 -0
  3. package/dist/Game/AnimationManager.d.ts +8 -0
  4. package/dist/Game/AnimationManager.js +35 -0
  5. package/dist/Game/AnimationManager.js.map +1 -0
  6. package/dist/Game/AnimationManager.spec.d.ts +1 -0
  7. package/dist/Game/Event.d.ts +1 -1
  8. package/dist/Game/Event.js +12 -0
  9. package/dist/Game/Event.js.map +1 -0
  10. package/dist/Game/Map.d.ts +31 -2
  11. package/dist/Game/Map.js +138 -0
  12. package/dist/Game/Map.js.map +1 -0
  13. package/dist/Game/Object.d.ts +189 -0
  14. package/dist/Game/Object.js +255 -0
  15. package/dist/Game/Object.js.map +1 -0
  16. package/dist/Game/Player.d.ts +1 -1
  17. package/dist/Game/Player.js +12 -0
  18. package/dist/Game/Player.js.map +1 -0
  19. package/dist/Gui/Gui.d.ts +192 -7
  20. package/dist/Gui/Gui.js +475 -0
  21. package/dist/Gui/Gui.js.map +1 -0
  22. package/dist/Gui/Gui.spec.d.ts +1 -0
  23. package/dist/Gui/NotificationManager.d.ts +23 -0
  24. package/dist/Gui/NotificationManager.js +49 -0
  25. package/dist/Gui/NotificationManager.js.map +1 -0
  26. package/dist/Resource.d.ts +97 -0
  27. package/dist/Resource.js +133 -0
  28. package/dist/Resource.js.map +1 -0
  29. package/dist/RpgClient.d.ts +295 -13
  30. package/dist/RpgClientEngine.d.ts +671 -15
  31. package/dist/RpgClientEngine.js +1442 -0
  32. package/dist/RpgClientEngine.js.map +1 -0
  33. package/dist/Sound.d.ts +199 -0
  34. package/dist/Sound.js +167 -0
  35. package/dist/Sound.js.map +1 -0
  36. package/dist/_virtual/_@oxc-project_runtime@0.130.0/helpers/decorate.js +9 -0
  37. package/dist/_virtual/_@oxc-project_runtime@0.130.0/helpers/decorateMetadata.js +6 -0
  38. package/dist/components/animations/animation.ce.js +23 -0
  39. package/dist/components/animations/animation.ce.js.map +1 -0
  40. package/dist/components/animations/hit.ce.js +64 -0
  41. package/dist/components/animations/hit.ce.js.map +1 -0
  42. package/dist/components/animations/index.d.ts +4 -0
  43. package/dist/components/animations/index.js +11 -0
  44. package/dist/components/animations/index.js.map +1 -0
  45. package/dist/components/character.ce.js +572 -0
  46. package/dist/components/character.ce.js.map +1 -0
  47. package/dist/components/dynamics/bar.ce.js +96 -0
  48. package/dist/components/dynamics/bar.ce.js.map +1 -0
  49. package/dist/components/dynamics/image.ce.js +23 -0
  50. package/dist/components/dynamics/image.ce.js.map +1 -0
  51. package/dist/components/dynamics/parse-value.d.ts +4 -0
  52. package/dist/components/dynamics/parse-value.js +63 -0
  53. package/dist/components/dynamics/parse-value.js.map +1 -0
  54. package/dist/components/dynamics/parse-value.spec.d.ts +1 -0
  55. package/dist/components/dynamics/shape-utils.d.ts +16 -0
  56. package/dist/components/dynamics/shape-utils.js +73 -0
  57. package/dist/components/dynamics/shape-utils.js.map +1 -0
  58. package/dist/components/dynamics/shape-utils.spec.d.ts +1 -0
  59. package/dist/components/dynamics/shape.ce.js +83 -0
  60. package/dist/components/dynamics/shape.ce.js.map +1 -0
  61. package/dist/components/dynamics/text.ce.js +50 -0
  62. package/dist/components/dynamics/text.ce.js.map +1 -0
  63. package/dist/components/gui/box.ce.js +26 -0
  64. package/dist/components/gui/box.ce.js.map +1 -0
  65. package/dist/components/gui/dialogbox/index.ce.js +198 -0
  66. package/dist/components/gui/dialogbox/index.ce.js.map +1 -0
  67. package/dist/components/gui/gameover.ce.js +169 -0
  68. package/dist/components/gui/gameover.ce.js.map +1 -0
  69. package/dist/components/gui/hud/hud.ce.js +83 -0
  70. package/dist/components/gui/hud/hud.ce.js.map +1 -0
  71. package/dist/components/gui/index.d.ts +15 -3
  72. package/dist/components/gui/index.js +14 -0
  73. package/dist/components/gui/menu/equip-menu.ce.js +427 -0
  74. package/dist/components/gui/menu/equip-menu.ce.js.map +1 -0
  75. package/dist/components/gui/menu/exit-menu.ce.js +55 -0
  76. package/dist/components/gui/menu/exit-menu.ce.js.map +1 -0
  77. package/dist/components/gui/menu/items-menu.ce.js +326 -0
  78. package/dist/components/gui/menu/items-menu.ce.js.map +1 -0
  79. package/dist/components/gui/menu/main-menu.ce.js +399 -0
  80. package/dist/components/gui/menu/main-menu.ce.js.map +1 -0
  81. package/dist/components/gui/menu/options-menu.ce.js +49 -0
  82. package/dist/components/gui/menu/options-menu.ce.js.map +1 -0
  83. package/dist/components/gui/menu/skills-menu.ce.js +102 -0
  84. package/dist/components/gui/menu/skills-menu.ce.js.map +1 -0
  85. package/dist/components/gui/mobile/index.d.ts +8 -0
  86. package/dist/components/gui/mobile/index.js +21 -0
  87. package/dist/components/gui/mobile/index.js.map +1 -0
  88. package/dist/components/gui/mobile/mobile.ce.js +79 -0
  89. package/dist/components/gui/mobile/mobile.ce.js.map +1 -0
  90. package/dist/components/gui/notification/notification.ce.js +62 -0
  91. package/dist/components/gui/notification/notification.ce.js.map +1 -0
  92. package/dist/components/gui/save-load.ce.js +211 -0
  93. package/dist/components/gui/save-load.ce.js.map +1 -0
  94. package/dist/components/gui/shop/shop.ce.js +614 -0
  95. package/dist/components/gui/shop/shop.ce.js.map +1 -0
  96. package/dist/components/gui/title-screen.ce.js +164 -0
  97. package/dist/components/gui/title-screen.ce.js.map +1 -0
  98. package/dist/components/index.d.ts +1 -0
  99. package/dist/components/index.js +4 -0
  100. package/dist/components/player-components-utils.d.ts +67 -0
  101. package/dist/components/player-components-utils.js +162 -0
  102. package/dist/components/player-components-utils.js.map +1 -0
  103. package/dist/components/player-components-utils.spec.d.ts +1 -0
  104. package/dist/components/player-components.ce.js +188 -0
  105. package/dist/components/player-components.ce.js.map +1 -0
  106. package/dist/components/prebuilt/hp-bar.ce.js +113 -0
  107. package/dist/components/prebuilt/hp-bar.ce.js.map +1 -0
  108. package/dist/components/prebuilt/index.d.ts +19 -0
  109. package/dist/components/prebuilt/index.js +2 -0
  110. package/dist/components/prebuilt/light-halo.ce.js +70 -0
  111. package/dist/components/prebuilt/light-halo.ce.js.map +1 -0
  112. package/dist/components/scenes/canvas.ce.js +196 -0
  113. package/dist/components/scenes/canvas.ce.js.map +1 -0
  114. package/dist/components/scenes/draw-map.ce.js +79 -0
  115. package/dist/components/scenes/draw-map.ce.js.map +1 -0
  116. package/dist/components/scenes/event-layer.ce.js +29 -0
  117. package/dist/components/scenes/event-layer.ce.js.map +1 -0
  118. package/dist/core/inject.js +18 -0
  119. package/dist/core/inject.js.map +1 -0
  120. package/dist/core/setup.js +16 -0
  121. package/dist/core/setup.js.map +1 -0
  122. package/dist/decorators/spritesheet.d.ts +1 -0
  123. package/dist/decorators/spritesheet.js +11 -0
  124. package/dist/decorators/spritesheet.js.map +1 -0
  125. package/dist/index.d.ts +16 -1
  126. package/dist/index.js +45 -14
  127. package/dist/module.d.ts +43 -4
  128. package/dist/module.js +179 -0
  129. package/dist/module.js.map +1 -0
  130. package/dist/node_modules/.pnpm/@signe_di@3.0.1/node_modules/@signe/di/dist/index.js +167 -0
  131. package/dist/node_modules/.pnpm/@signe_di@3.0.1/node_modules/@signe/di/dist/index.js.map +1 -0
  132. package/dist/node_modules/.pnpm/@signe_reactive@3.0.1/node_modules/@signe/reactive/dist/index.js +239 -0
  133. package/dist/node_modules/.pnpm/@signe_reactive@3.0.1/node_modules/@signe/reactive/dist/index.js.map +1 -0
  134. package/dist/node_modules/.pnpm/@signe_room@3.0.1/node_modules/@signe/room/dist/chunk-EUXUH3YW.js +13 -0
  135. package/dist/node_modules/.pnpm/@signe_room@3.0.1/node_modules/@signe/room/dist/chunk-EUXUH3YW.js.map +1 -0
  136. package/dist/node_modules/.pnpm/@signe_room@3.0.1/node_modules/@signe/room/dist/index.js +696 -0
  137. package/dist/node_modules/.pnpm/@signe_room@3.0.1/node_modules/@signe/room/dist/index.js.map +1 -0
  138. package/dist/node_modules/.pnpm/@signe_sync@3.0.1/node_modules/@signe/sync/dist/client/index.js +44 -0
  139. package/dist/node_modules/.pnpm/@signe_sync@3.0.1/node_modules/@signe/sync/dist/client/index.js.map +1 -0
  140. package/dist/node_modules/.pnpm/@signe_sync@3.0.1/node_modules/@signe/sync/dist/index.js +241 -0
  141. package/dist/node_modules/.pnpm/@signe_sync@3.0.1/node_modules/@signe/sync/dist/index.js.map +1 -0
  142. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js +115 -0
  143. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js.map +1 -0
  144. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js +401 -0
  145. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js.map +1 -0
  146. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/index.js +2 -0
  147. package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js +3756 -0
  148. package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js.map +1 -0
  149. package/dist/presets/animation.d.ts +31 -0
  150. package/dist/presets/animation.js +39 -0
  151. package/dist/presets/animation.js.map +1 -0
  152. package/dist/presets/faceset.d.ts +30 -0
  153. package/dist/presets/faceset.js +51 -0
  154. package/dist/presets/faceset.js.map +1 -0
  155. package/dist/presets/icon.d.ts +20 -0
  156. package/dist/presets/icon.js +15 -0
  157. package/dist/presets/icon.js.map +1 -0
  158. package/dist/presets/index.d.ts +123 -0
  159. package/dist/presets/index.js +17 -0
  160. package/dist/presets/index.js.map +1 -0
  161. package/dist/presets/lpc.d.ts +89 -0
  162. package/dist/presets/lpc.js +98 -0
  163. package/dist/presets/lpc.js.map +1 -0
  164. package/dist/presets/rmspritesheet.js +42 -0
  165. package/dist/presets/rmspritesheet.js.map +1 -0
  166. package/dist/services/AbstractSocket.d.ts +9 -5
  167. package/dist/services/AbstractSocket.js +11 -0
  168. package/dist/services/AbstractSocket.js.map +1 -0
  169. package/dist/services/keyboardControls.d.ts +15 -0
  170. package/dist/services/keyboardControls.js +23 -0
  171. package/dist/services/keyboardControls.js.map +1 -0
  172. package/dist/services/loadMap.d.ts +6 -0
  173. package/dist/services/loadMap.js +123 -0
  174. package/dist/services/loadMap.js.map +1 -0
  175. package/dist/services/mmorpg.d.ts +21 -9
  176. package/dist/services/mmorpg.js +136 -0
  177. package/dist/services/mmorpg.js.map +1 -0
  178. package/dist/services/save.d.ts +19 -0
  179. package/dist/services/save.js +77 -0
  180. package/dist/services/save.js.map +1 -0
  181. package/dist/services/save.spec.d.ts +1 -0
  182. package/dist/services/standalone.d.ts +67 -7
  183. package/dist/services/standalone.js +168 -0
  184. package/dist/services/standalone.js.map +1 -0
  185. package/dist/utils/getEntityProp.d.ts +39 -0
  186. package/dist/utils/getEntityProp.js +53 -0
  187. package/dist/utils/getEntityProp.js.map +1 -0
  188. package/dist/utils/getEntityProp.spec.d.ts +1 -0
  189. package/dist/utils/readPropValue.d.ts +2 -0
  190. package/dist/utils/readPropValue.js +13 -0
  191. package/dist/utils/readPropValue.js.map +1 -0
  192. package/package.json +14 -11
  193. package/src/Game/AnimationManager.spec.ts +30 -0
  194. package/src/Game/AnimationManager.ts +33 -0
  195. package/src/Game/Event.ts +1 -1
  196. package/src/Game/Map.ts +184 -3
  197. package/src/Game/Object.ts +409 -14
  198. package/src/Game/Player.ts +1 -1
  199. package/src/Gui/Gui.spec.ts +273 -0
  200. package/src/Gui/Gui.ts +566 -23
  201. package/src/Gui/NotificationManager.ts +69 -0
  202. package/src/Resource.ts +149 -0
  203. package/src/RpgClient.ts +309 -14
  204. package/src/RpgClientEngine.ts +1790 -63
  205. package/src/Sound.ts +253 -0
  206. package/src/components/{effects → animations}/animation.ce +3 -6
  207. package/src/components/{effects → animations}/index.ts +1 -1
  208. package/src/components/character.ce +801 -59
  209. package/src/components/dynamics/bar.ce +87 -0
  210. package/src/components/dynamics/image.ce +20 -0
  211. package/src/components/dynamics/parse-value.spec.ts +83 -0
  212. package/src/components/dynamics/parse-value.ts +154 -0
  213. package/src/components/dynamics/shape-utils.spec.ts +46 -0
  214. package/src/components/dynamics/shape-utils.ts +61 -0
  215. package/src/components/dynamics/shape.ce +89 -0
  216. package/src/components/dynamics/text.ce +68 -0
  217. package/src/components/gui/box.ce +17 -0
  218. package/src/components/gui/dialogbox/index.ce +213 -187
  219. package/src/components/gui/gameover.ce +158 -0
  220. package/src/components/gui/hud/hud.ce +61 -0
  221. package/src/components/gui/index.ts +30 -4
  222. package/src/components/gui/menu/equip-menu.ce +410 -0
  223. package/src/components/gui/menu/exit-menu.ce +41 -0
  224. package/src/components/gui/menu/items-menu.ce +317 -0
  225. package/src/components/gui/menu/main-menu.ce +294 -0
  226. package/src/components/gui/menu/options-menu.ce +35 -0
  227. package/src/components/gui/menu/skills-menu.ce +83 -0
  228. package/src/components/gui/mobile/index.ts +24 -0
  229. package/src/components/gui/mobile/mobile.ce +80 -0
  230. package/src/components/gui/notification/notification.ce +51 -0
  231. package/src/components/gui/save-load.ce +208 -0
  232. package/src/components/gui/shop/shop.ce +493 -0
  233. package/src/components/gui/title-screen.ce +163 -0
  234. package/src/components/index.ts +3 -0
  235. package/src/components/player-components-utils.spec.ts +109 -0
  236. package/src/components/player-components-utils.ts +205 -0
  237. package/src/components/player-components.ce +221 -0
  238. package/src/components/prebuilt/hp-bar.ce +255 -0
  239. package/src/components/prebuilt/index.ts +24 -0
  240. package/src/components/prebuilt/light-halo.ce +148 -0
  241. package/src/components/scenes/canvas.ce +185 -21
  242. package/src/components/scenes/draw-map.ce +55 -21
  243. package/src/components/scenes/event-layer.ce +8 -2
  244. package/src/components/scenes/transition.ce +60 -0
  245. package/src/core/setup.ts +2 -2
  246. package/src/decorators/spritesheet.ts +8 -0
  247. package/src/index.ts +17 -2
  248. package/src/module.ts +132 -10
  249. package/src/presets/animation.ts +46 -0
  250. package/src/presets/faceset.ts +60 -0
  251. package/src/presets/icon.ts +17 -0
  252. package/src/presets/index.ts +9 -1
  253. package/src/presets/lpc.ts +108 -0
  254. package/src/services/AbstractSocket.ts +10 -2
  255. package/src/services/keyboardControls.ts +20 -0
  256. package/src/services/loadMap.ts +3 -1
  257. package/src/services/mmorpg.ts +106 -12
  258. package/src/services/save.spec.ts +127 -0
  259. package/src/services/save.ts +103 -0
  260. package/src/services/standalone.ts +110 -18
  261. package/src/utils/getEntityProp.spec.ts +96 -0
  262. package/src/utils/getEntityProp.ts +88 -0
  263. package/src/utils/readPropValue.ts +16 -0
  264. package/vite.config.ts +4 -2
  265. package/dist/Game/EffectManager.d.ts +0 -5
  266. package/dist/components/effects/index.d.ts +0 -4
  267. package/dist/index.js.map +0 -1
  268. package/dist/index10.js +0 -8
  269. package/dist/index10.js.map +0 -1
  270. package/dist/index11.js +0 -10
  271. package/dist/index11.js.map +0 -1
  272. package/dist/index12.js +0 -8
  273. package/dist/index12.js.map +0 -1
  274. package/dist/index13.js +0 -17
  275. package/dist/index13.js.map +0 -1
  276. package/dist/index14.js +0 -107
  277. package/dist/index14.js.map +0 -1
  278. package/dist/index15.js +0 -50
  279. package/dist/index15.js.map +0 -1
  280. package/dist/index16.js +0 -191
  281. package/dist/index16.js.map +0 -1
  282. package/dist/index17.js +0 -9
  283. package/dist/index17.js.map +0 -1
  284. package/dist/index18.js +0 -387
  285. package/dist/index18.js.map +0 -1
  286. package/dist/index19.js +0 -31
  287. package/dist/index19.js.map +0 -1
  288. package/dist/index2.js +0 -181
  289. package/dist/index2.js.map +0 -1
  290. package/dist/index20.js +0 -24
  291. package/dist/index20.js.map +0 -1
  292. package/dist/index21.js +0 -2421
  293. package/dist/index21.js.map +0 -1
  294. package/dist/index22.js +0 -114
  295. package/dist/index22.js.map +0 -1
  296. package/dist/index23.js +0 -109
  297. package/dist/index23.js.map +0 -1
  298. package/dist/index24.js +0 -71
  299. package/dist/index24.js.map +0 -1
  300. package/dist/index25.js +0 -21
  301. package/dist/index25.js.map +0 -1
  302. package/dist/index26.js +0 -41
  303. package/dist/index26.js.map +0 -1
  304. package/dist/index27.js +0 -5
  305. package/dist/index27.js.map +0 -1
  306. package/dist/index28.js +0 -322
  307. package/dist/index28.js.map +0 -1
  308. package/dist/index29.js +0 -27
  309. package/dist/index29.js.map +0 -1
  310. package/dist/index3.js +0 -87
  311. package/dist/index3.js.map +0 -1
  312. package/dist/index30.js +0 -11
  313. package/dist/index30.js.map +0 -1
  314. package/dist/index31.js +0 -11
  315. package/dist/index31.js.map +0 -1
  316. package/dist/index32.js +0 -174
  317. package/dist/index32.js.map +0 -1
  318. package/dist/index33.js +0 -501
  319. package/dist/index33.js.map +0 -1
  320. package/dist/index34.js +0 -12
  321. package/dist/index34.js.map +0 -1
  322. package/dist/index35.js +0 -4403
  323. package/dist/index35.js.map +0 -1
  324. package/dist/index36.js +0 -316
  325. package/dist/index36.js.map +0 -1
  326. package/dist/index37.js +0 -61
  327. package/dist/index37.js.map +0 -1
  328. package/dist/index38.js +0 -20
  329. package/dist/index38.js.map +0 -1
  330. package/dist/index39.js +0 -20
  331. package/dist/index39.js.map +0 -1
  332. package/dist/index4.js +0 -67
  333. package/dist/index4.js.map +0 -1
  334. package/dist/index5.js +0 -16
  335. package/dist/index5.js.map +0 -1
  336. package/dist/index6.js +0 -17
  337. package/dist/index6.js.map +0 -1
  338. package/dist/index7.js +0 -39
  339. package/dist/index7.js.map +0 -1
  340. package/dist/index8.js +0 -108
  341. package/dist/index8.js.map +0 -1
  342. package/dist/index9.js +0 -76
  343. package/dist/index9.js.map +0 -1
  344. package/src/Game/EffectManager.ts +0 -20
  345. package/src/components/gui/dialogbox/itemMenu.ce +0 -23
  346. package/src/components/gui/dialogbox/selection.ce +0 -67
  347. /package/src/components/{effects → animations}/hit.ce +0 -0
@@ -0,0 +1,79 @@
1
+ import { inject } from "../../../core/inject.js";
2
+ import { Button, Container, Joystick, h, mount, signal, useDefineProps, useProps } from "canvasengine";
3
+ //#region src/components/gui/mobile/mobile.ce
4
+ function component($$props) {
5
+ useProps($$props);
6
+ useDefineProps($$props);
7
+ const controlsInstance = signal(null);
8
+ mount((element) => {
9
+ const control = inject("KeyboardControls");
10
+ controlsInstance.set(control);
11
+ });
12
+ return h(Container, {
13
+ justifyContent: "space-between",
14
+ alignItems: "flex-end",
15
+ width: "100%",
16
+ height: "100%"
17
+ }, [h(Container, {
18
+ justifyContent: "flex-start",
19
+ alignItems: "flex-end",
20
+ gap: 20
21
+ }, h(Container, {
22
+ display: "flex",
23
+ direction: "column",
24
+ gap: 20,
25
+ margin: 50
26
+ }, [h(Button, {
27
+ text: "A",
28
+ shape: "circle",
29
+ width: 70,
30
+ height: 70,
31
+ controls: controlsInstance,
32
+ controlName: "action",
33
+ style: {
34
+ backgroundColor: {
35
+ normal: "#2ecc71",
36
+ hover: "#27ae60",
37
+ pressed: "#229954",
38
+ disabled: "#7f8c8d"
39
+ },
40
+ text: {
41
+ fontSize: 24,
42
+ fontFamily: "Arial Bold",
43
+ color: "#ffffff"
44
+ }
45
+ }
46
+ }), h(Button, {
47
+ text: "B",
48
+ shape: "circle",
49
+ width: 70,
50
+ height: 70,
51
+ controls: controlsInstance,
52
+ controlName: "back",
53
+ style: {
54
+ backgroundColor: {
55
+ normal: "#e74c3c",
56
+ hover: "#c0392b",
57
+ pressed: "#a93226",
58
+ disabled: "#7f8c8d"
59
+ },
60
+ text: {
61
+ fontSize: 24,
62
+ fontFamily: "Arial Bold",
63
+ color: "#ffffff"
64
+ }
65
+ }
66
+ })])), h(Container, {
67
+ margin: 100,
68
+ alignItems: "flex-end"
69
+ }, h(Container, null, h(Joystick, {
70
+ controls: controlsInstance,
71
+ outerColor: "#34495e",
72
+ innerColor: "#3498db"
73
+ })))]);
74
+ }
75
+ var __ce_component = component;
76
+ //#endregion
77
+ export { __ce_component as default };
78
+
79
+ //# sourceMappingURL=mobile.ce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobile.ce.js","names":[],"sources":["../../../../src/components/gui/mobile/mobile.ce"],"sourcesContent":["<Container justifyContent=\"space-between\" alignItems=\"flex-end\" width=\"100%\" height=\"100%\">\n <!-- Gamepad buttons A and B (left side) -->\n <Container justifyContent=\"flex-start\" alignItems=\"flex-end\" gap={20}>\n <Container display=\"flex\" direction=\"column\" gap={20} margin={50}>\n <!-- Button B (top) -->\n \n <!-- Button A (bottom) -->\n <Button \n text=\"A\"\n shape=\"circle\"\n width={70}\n height={70}\n controls={controlsInstance}\n controlName=\"action\"\n style={{\n backgroundColor: {\n normal: \"#2ecc71\",\n hover: \"#27ae60\",\n pressed: \"#229954\",\n disabled: \"#7f8c8d\"\n },\n text: {\n fontSize: 24,\n fontFamily: \"Arial Bold\",\n color: \"#ffffff\"\n }\n }}\n />\n\n <Button \n text=\"B\"\n shape=\"circle\"\n width={70}\n height={70}\n controls={controlsInstance}\n controlName=\"back\"\n style={{\n backgroundColor: {\n normal: \"#e74c3c\",\n hover: \"#c0392b\",\n pressed: \"#a93226\",\n disabled: \"#7f8c8d\"\n },\n text: {\n fontSize: 24,\n fontFamily: \"Arial Bold\",\n color: \"#ffffff\"\n }\n }}\n />\n\n </Container>\n </Container>\n \n <Container margin={100} alignItems=\"flex-end\">\n <Container>\n <Joystick \n controls={controlsInstance}\n outerColor=\"#34495e\"\n innerColor=\"#3498db\"\n />\n </Container>\n </Container>\n</Container>\n\n<script>\n import { signal, mount } from 'canvasengine'\n import { Button } from 'canvasengine'\n import { inject } from '../../../core/inject'\n import { RpgClientEngine } from '../../../RpgClientEngine'\n import { Direction } from '@rpgjs/common'\n\n\n const controlsInstance = signal(null)\n\n mount((element) => {\n const control = inject('KeyboardControls')\n controlsInstance.set(control)\n })\n</script>"],"mappings":";;;AASM,SAAS,UAAQ,SAAM;CACN,SAAE,OAAA;CACC,eAAA,OAAA;CAClB,MAAM,mBAAY,OAAA,IAAgB;CAC1C,OAAO,YAAS;EACZ,MAAM,UAAM,OAAO,kBAAA;EACnB,iBAAgB,IAAA,OAAA;CACpB,CAAC;CAEO,OADY,EAAE,WAAW;EAAA,gBAAO;EAAA,YAAA;EAAA,OAAA;EAAA,QAAA;CAAA,GAAA,CAAA,EAAA,WAAA;EAAA,gBAAA;EAAA,YAAA;EAAA,KAAA;CAAA,GAAA,EAAA,WAAA;EAAA,SAAA;EAAA,WAAA;EAAA,KAAA;EAAA,QAAA;CAAA,GAAA,CAAA,EAAA,QAAA;EAAA,MAAA;EAAA,OAAA;EAAA,OAAA;EAAA,QAAA;EAAA,UAAA;EAAA,aAAA;EAAA,OAAA;GAAA,iBAAA;IAAA,QAAA;IAAA,OAAA;IAAA,SAAA;IAAA,UAAA;GAAA;GAAA,MAAA;IAAA,UAAA;IAAA,YAAA;IAAA,OAAA;GAAA;EAAA;CAAA,CAAA,GAAA,EAAA,QAAA;EAAA,MAAA;EAAA,OAAA;EAAA,OAAA;EAAA,QAAA;EAAA,UAAA;EAAA,aAAA;EAAA,OAAA;GAAA,iBAAA;IAAA,QAAA;IAAA,OAAA;IAAA,SAAA;IAAA,UAAA;GAAA;GAAA,MAAA;IAAA,UAAA;IAAA,YAAA;IAAA,OAAA;GAAA;EAAA;CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,WAAA;EAAA,QAAA;EAAA,YAAA;CAAA,GAAA,EAAA,WAAA,MAAA,EAAA,UAAA;EAAA,UAAA;EAAA,YAAA;EAAA,YAAA;CAAA,CAAA,CAAA,CAAA,CAAA,CACrB;AACb;AAEA,IAAM,iBAEF"}
@@ -0,0 +1,62 @@
1
+ import { inject } from "../../../core/inject.js";
2
+ import { RpgClientEngine } from "../../../RpgClientEngine.js";
3
+ import { DOMContainer, DOMElement, DOMSprite, computed, cond, effect, h, loop, useDefineProps, useProps } from "canvasengine";
4
+ //#region src/components/gui/notification/notification.ce
5
+ if (typeof document !== "undefined") {
6
+ let styleElement = document.getElementById("ce-style--home-runner-work-RPG-JS-RPG-JS-packages-client-src-components-gui-notification-notification-ce");
7
+ if (!styleElement) {
8
+ styleElement = document.createElement("style");
9
+ styleElement.id = "ce-style--home-runner-work-RPG-JS-RPG-JS-packages-client-src-components-gui-notification-notification-ce";
10
+ document.head.appendChild(styleElement);
11
+ }
12
+ styleElement.textContent = ".notification {\n pointer-events: none !important;\n }";
13
+ }
14
+ function component($$props) {
15
+ useProps($$props);
16
+ useDefineProps($$props);
17
+ const engine = inject(RpgClientEngine);
18
+ const notifications = computed(() => engine.notificationManager.stack());
19
+ const iconSheet = (iconId) => ({
20
+ definition: engine.getSpriteSheet(iconId),
21
+ playing: "default"
22
+ });
23
+ effect(() => {
24
+ const list = notifications();
25
+ const rowHeight = 68;
26
+ list.forEach((notif, index) => {
27
+ notif.layoutY.set(index * rowHeight);
28
+ });
29
+ });
30
+ const notificationStyle = (notif) => ({
31
+ opacity: notif.opacity(),
32
+ transform: `translateY(${notif.layoutY() + notif.offset()}px)`
33
+ });
34
+ return h(DOMContainer, {
35
+ width: "100%",
36
+ height: "100%",
37
+ zIndex: 100,
38
+ attrs: { class: "notification" }
39
+ }, h(DOMElement, {
40
+ element: "div",
41
+ attrs: { class: "rpg-ui-notifications" }
42
+ }, loop(notifications, (notif, index) => h(DOMElement, {
43
+ element: "div",
44
+ attrs: {
45
+ class: "rpg-ui-notification",
46
+ "data-type": computed(() => notif.type || "info"),
47
+ style: computed(() => notificationStyle(notif))
48
+ }
49
+ }, [cond(notif.icon, () => h(DOMElement, {
50
+ element: "div",
51
+ attrs: { class: "rpg-ui-notification-icon" }
52
+ }, h(DOMSprite, { sheet: computed(() => iconSheet(notif.icon)) }))), h(DOMElement, {
53
+ element: "div",
54
+ attrs: { class: "rpg-ui-notification-message" },
55
+ textContent: notif.message
56
+ })]))));
57
+ }
58
+ var __ce_component = component;
59
+ //#endregion
60
+ export { __ce_component as default };
61
+
62
+ //# sourceMappingURL=notification.ce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.ce.js","names":[],"sources":["../../../../src/components/gui/notification/notification.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\" zIndex={100} class=\"notification\">\n <div class=\"rpg-ui-notifications\">\n @for ((notif,index) of notifications) {\n <div\n class=\"rpg-ui-notification\"\n data-type={notif.type || \"info\"}\n style={notificationStyle(notif)}\n >\n @if (notif.icon) {\n <div class=\"rpg-ui-notification-icon\">\n <DOMSprite sheet={iconSheet(notif.icon)} />\n </div>\n }\n <div class=\"rpg-ui-notification-message\">{notif.message}</div>\n </div>\n }\n </div>\n</DOMContainer>\n\n<style>\n .notification {\n pointer-events: none !important;\n }\n</style>\n\n<script>\n import { effect, computed } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n\n const engine = inject(RpgClientEngine);\n const notifications = computed(() => engine.notificationManager.stack());\n\n const iconSheet = (iconId) => ({\n definition: engine.getSpriteSheet(iconId),\n playing: \"default\"\n });\n\n effect(() => {\n const list = notifications();\n const rowHeight = 68;\n list.forEach((notif, index) => {\n notif.layoutY.set(index * rowHeight);\n });\n });\n\n const notificationStyle = (notif) => ({\n opacity: notif.opacity(),\n transform: `translateY(${notif.layoutY() + notif.offset()}px)`\n });\n</script>\n"],"mappings":";;;;AAUA,IAAI,OAAO,aAAa,aAAW;CACjC,IAAI,eAAe,SAAI,eAAA,0GAAA;CACvB,IAAI,CAAC,cAAS;EACZ,eAAa,SAAW,cAAO,OAAa;EAC5C,aAAa,KAAA;EACb,SAAI,KAAA,YAAA,YAAA;CACN;CACA,aAAY,cAAA;;AAGT,SAAA,UAAa,SAAA;CACK,SAAO,OAAS;CACnC,eAAA,OAAA;CACG,MAAA,SAAA,OAAA,eAAA;;CAEP,MAAC,aAAM,YAAA;EACH,YAAS,OAAQ,eAAiB,MAAA;EAClC,SAAS;CACb;;EAEI,MAAM,OAAO,cAAS;EACtB,MAAM,YAAA;;GAEN,MAAM,QAAY,IAAC,QAAW,SAAC;EAC/B,CAAC;CACL,CAAC;CACD,MAAM,qBAAA,WAAA;;EAEF,WAAW,cAAE,MAAA,QAAA,IAAA,MAAA,OAAA,EAAA;CACjB;CAEQ,OADM,EAAA,cAAc;EAAA,OAAA;EAAA,QAAA;EAAA,QAAA;EAAA,OAAA,EAAA,OAAA,eAAA;CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,uBAAA;CAAA,GAAA,KAAA,gBAAA,OAAA,UAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA;GAAA,OAAA;GAAA,aAAA,eAAA,MAAA,QAAA,MAAA;GAAA,OAAA,eAAA,kBAAA,KAAA,CAAA;EAAA;CAAA,GAAA,CAAA,KAAA,MAAA,YAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,2BAAA;CAAA,GAAA,EAAA,WAAA,EAAA,OAAA,eAAA,UAAA,MAAA,IAAA,CAAA,EAAA,CAAA,CAAA,CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,8BAAA;EAAA,aAAA,MAAA;CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACf;AACP;AAEA,IAAA,iBAEI"}
@@ -0,0 +1,211 @@
1
+ import { inject } from "../../core/inject.js";
2
+ import { SaveClientService } from "../../services/save.js";
3
+ import { RpgGui } from "../../Gui/Gui.js";
4
+ import { RpgClientEngine } from "../../RpgClientEngine.js";
5
+ import { DOMContainer, DOMElement, Navigation, computed, cond, createTabindexNavigator, h, loop, mount, signal, useDefineProps, useProps } from "canvasengine";
6
+ import { PrebuiltGui } from "@rpgjs/common";
7
+ //#region src/components/gui/save-load.ce
8
+ function component($$props) {
9
+ useProps($$props);
10
+ const defineProps = useDefineProps($$props);
11
+ const engine = inject(RpgClientEngine);
12
+ const saveClient = inject(SaveClientService);
13
+ const gui = inject(RpgGui);
14
+ const keyboardControls = engine.globalConfig.keyboardControls;
15
+ const selectedSlot = signal(0);
16
+ const DEFAULT_SLOTS = 4;
17
+ const defaultSlots = () => Array.from({ length: DEFAULT_SLOTS }, () => null);
18
+ const localSlots = signal(defaultSlots());
19
+ const { data, onFinish } = defineProps();
20
+ const title = computed(() => data().mode === "save" ? "Save Game" : "Load Game");
21
+ const subtitle = computed(() => data().mode === "save" ? "Choose a slot to overwrite or create." : "Select a slot to load your progress.");
22
+ const slotsValue = computed(() => localSlots());
23
+ const displaySlots = computed(() => {
24
+ const slots = slotsValue();
25
+ const items = slots.map((slot, index) => ({
26
+ kind: "slot",
27
+ slot,
28
+ slotIndex: index,
29
+ label: `Slot ${index + 1}`,
30
+ readonly: false
31
+ }));
32
+ if (!data().showAutoSlot) return items;
33
+ const index = typeof data().autoSlotIndex === "number" ? data().autoSlotIndex : 0;
34
+ const autoSlot = slots[index] ?? null;
35
+ const readonly = data().mode === "save";
36
+ return [{
37
+ kind: "auto",
38
+ slot: autoSlot,
39
+ slotIndex: index,
40
+ label: data().autoSlotLabel || "Auto Save",
41
+ readonly
42
+ }, ...items];
43
+ });
44
+ const nav = createTabindexNavigator(selectedSlot, { count: () => displaySlots().length }, "wrap");
45
+ const canSelect = (item) => {
46
+ if (item.readonly) return false;
47
+ if (data().mode === "load" && !item.slot) return false;
48
+ return true;
49
+ };
50
+ const normalizeSlotValue = (value) => {
51
+ if (!value) return null;
52
+ if (typeof value === "string") try {
53
+ return JSON.parse(value);
54
+ } catch {
55
+ return null;
56
+ }
57
+ return value;
58
+ };
59
+ const normalizeSlots = (list) => {
60
+ if (Array.isArray(list)) {
61
+ const length = Math.max(list.length, DEFAULT_SLOTS);
62
+ return Array.from({ length }, (_, index) => normalizeSlotValue(list[index]));
63
+ }
64
+ if (!list || typeof list !== "object") return defaultSlots();
65
+ const keys = Object.keys(list).filter((key) => /^\d+$/.test(key));
66
+ const indices = keys.map((key) => Number(key)).filter((index) => index >= 0);
67
+ const maxIndex = indices.length ? Math.max(...indices) : -1;
68
+ const length = Math.max(maxIndex + 1, DEFAULT_SLOTS);
69
+ const slots = Array.from({ length }, () => null);
70
+ keys.forEach((key) => {
71
+ const index = Number(key);
72
+ if (index < 0 || index >= length) return;
73
+ slots[index] = normalizeSlotValue(list[key]);
74
+ });
75
+ return slots;
76
+ };
77
+ const refreshSlots = async () => {
78
+ try {
79
+ const list = await saveClient.listSlots();
80
+ localSlots.set(normalizeSlots(list));
81
+ } catch (err) {
82
+ localSlots.set(defaultSlots());
83
+ }
84
+ };
85
+ const triggerSelect = async (displayIndex) => {
86
+ const item = displaySlots()[displayIndex];
87
+ if (!item) return;
88
+ if (!canSelect(item)) return;
89
+ const action = data().mode === "save" ? "save" : "load";
90
+ if (action === "save") {
91
+ await saveClient.saveSlot(item.slotIndex);
92
+ await refreshSlots();
93
+ }
94
+ if (action === "load") await saveClient.loadSlot(item.slotIndex);
95
+ setTimeout(() => {
96
+ if (onFinish) onFinish();
97
+ gui.hide(PrebuiltGui.Save);
98
+ gui.hide(PrebuiltGui.TitleScreen);
99
+ }, 50);
100
+ };
101
+ function selectSlot(index) {
102
+ return function() {
103
+ selectedSlot.set(index);
104
+ triggerSelect(index);
105
+ };
106
+ }
107
+ const controls = signal({
108
+ up: {
109
+ repeat: true,
110
+ bind: keyboardControls.up,
111
+ throttle: 150,
112
+ keyDown() {
113
+ nav.next(-1);
114
+ }
115
+ },
116
+ down: {
117
+ repeat: true,
118
+ bind: keyboardControls.down,
119
+ throttle: 150,
120
+ keyDown() {
121
+ nav.next(1);
122
+ }
123
+ },
124
+ action: {
125
+ bind: keyboardControls.action,
126
+ keyDown() {
127
+ triggerSelect(selectedSlot());
128
+ }
129
+ },
130
+ escape: {
131
+ bind: keyboardControls.escape,
132
+ keyDown() {
133
+ if (onFinish) onFinish();
134
+ gui.hide(PrebuiltGui.Save);
135
+ }
136
+ },
137
+ gamepad: { enabled: true }
138
+ });
139
+ mount((element) => {
140
+ refreshSlots();
141
+ });
142
+ return h(DOMContainer, {
143
+ width: "100%",
144
+ height: "100%"
145
+ }, h(DOMElement, {
146
+ element: "div",
147
+ attrs: { class: "rpg-ui-save-load rpg-anim-fade-in" }
148
+ }, [h(DOMElement, {
149
+ element: "div",
150
+ attrs: { class: "rpg-ui-save-load-header" }
151
+ }, [h(DOMElement, {
152
+ element: "div",
153
+ attrs: { class: "rpg-ui-save-load-title" },
154
+ textContent: computed(() => title())
155
+ }), h(DOMElement, {
156
+ element: "div",
157
+ attrs: { class: "rpg-ui-save-load-subtitle" },
158
+ textContent: computed(() => subtitle())
159
+ })]), h(Navigation, {
160
+ tabindex: selectedSlot,
161
+ controls
162
+ }, h(DOMElement, {
163
+ element: "div",
164
+ attrs: { class: "rpg-ui-save-load-list" }
165
+ }, loop(displaySlots, (item, displayIndex) => h(DOMElement, {
166
+ element: "div",
167
+ attrs: {
168
+ class: ["rpg-ui-save-load-slot", computed(() => ({ active: selectedSlot() === displayIndex }))],
169
+ tabindex: displayIndex,
170
+ "data-slot-index": displayIndex,
171
+ click: selectSlot(displayIndex)
172
+ }
173
+ }, [h(DOMElement, {
174
+ element: "div",
175
+ attrs: { class: "rpg-ui-save-load-slot-index" },
176
+ textContent: item.label
177
+ }), cond(item.slot, () => h(DOMElement, {
178
+ element: "div",
179
+ attrs: { class: "rpg-ui-save-load-slot-meta" }
180
+ }, [
181
+ h(DOMElement, {
182
+ element: "div",
183
+ attrs: { class: "rpg-ui-save-load-slot-line" },
184
+ textContent: "Level: " + item.slot.level
185
+ }),
186
+ h(DOMElement, {
187
+ element: "div",
188
+ attrs: { class: "rpg-ui-save-load-slot-line" },
189
+ textContent: "Exp: " + item.slot.exp
190
+ }),
191
+ h(DOMElement, {
192
+ element: "div",
193
+ attrs: { class: "rpg-ui-save-load-slot-line" },
194
+ textContent: "Map: " + item.slot.map
195
+ }),
196
+ h(DOMElement, {
197
+ element: "div",
198
+ attrs: { class: "rpg-ui-save-load-slot-line" },
199
+ textContent: "Date: " + item.slot.date
200
+ })
201
+ ]), () => h(DOMElement, {
202
+ element: "div",
203
+ attrs: { class: "rpg-ui-save-load-slot-empty" },
204
+ textContent: "Empty Slot"
205
+ }))]))))]));
206
+ }
207
+ var __ce_component = component;
208
+ //#endregion
209
+ export { __ce_component as default };
210
+
211
+ //# sourceMappingURL=save-load.ce.js.map
@@ -0,0 +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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"}