@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
@@ -0,0 +1,86 @@
1
+ import { resolveDynamicValue } from "./parse-value.js";
2
+ import { getShapeBox, translatePolygonPoints } from "./shape-utils.js";
3
+ import { Container, Graphics, computed, h, useDefineEmits, useDefineProps, useProps } from "canvasengine";
4
+ //#region src/components/dynamics/shape.ce
5
+ function component($$props) {
6
+ useProps($$props);
7
+ const defineProps = useDefineProps($$props);
8
+ useDefineEmits($$props);
9
+ const props = defineProps();
10
+ const { object } = props;
11
+ const sprite = object();
12
+ const read = (prop, fallback) => prop ? prop() : fallback;
13
+ const toNumber = (value, fallback = 0) => {
14
+ const resolved = resolveDynamicValue(value, sprite);
15
+ const num = typeof resolved === "number" ? resolved : parseFloat(resolved);
16
+ return Number.isFinite(num) ? num : fallback;
17
+ };
18
+ const toColor = (value, fallback) => {
19
+ const resolved = resolveDynamicValue(value, sprite);
20
+ if (typeof resolved === "number") return resolved;
21
+ if (typeof resolved === "string" && resolved.startsWith("#")) return parseInt(resolved.slice(1), 16);
22
+ return resolved ?? fallback;
23
+ };
24
+ const config = computed(() => ({
25
+ type: read(props.type, "rectangle"),
26
+ fill: toColor(read(props.fill, "#ffffff"), 16777215),
27
+ radius: toNumber(read(props.radius, 8), 8),
28
+ width: toNumber(read(props.width, 16), 16),
29
+ height: toNumber(read(props.height, 16), 16),
30
+ x1: toNumber(read(props.x1, 0), 0),
31
+ y1: toNumber(read(props.y1, 0), 0),
32
+ x2: toNumber(read(props.x2, 16), 16),
33
+ y2: toNumber(read(props.y2, 0), 0),
34
+ opacity: Math.max(0, Math.min(1, toNumber(read(props.opacity, 1), 1))),
35
+ points: read(props.points, []),
36
+ line: read(props.line, null)
37
+ }));
38
+ const shapeBox = computed(() => getShapeBox(config(), toNumber));
39
+ const shapeWidth = computed(() => shapeBox().width);
40
+ const shapeHeight = computed(() => shapeBox().height);
41
+ const drawShape = (g) => {
42
+ const cfg = config();
43
+ const box = shapeBox();
44
+ if (cfg.type === "circle") g.circle(cfg.radius, cfg.radius, cfg.radius);
45
+ else if (cfg.type === "ellipse") g.ellipse(box.width / 2, box.height / 2, box.width / 2, box.height / 2);
46
+ else if (cfg.type === "line") {
47
+ g.moveTo(cfg.x1 + box.offsetX, cfg.y1 + box.offsetY);
48
+ g.lineTo(cfg.x2 + box.offsetX, cfg.y2 + box.offsetY);
49
+ } else if (cfg.type === "polygon" && Array.isArray(cfg.points)) g.poly(translatePolygonPoints(cfg.points, box, toNumber));
50
+ else if (cfg.type === "rounded-rectangle") g.roundRect(0, 0, box.width, box.height, toNumber(read(props.radius, 4), 4));
51
+ else g.rect(0, 0, box.width, box.height);
52
+ if (cfg.type === "line") {
53
+ const line = cfg.line ?? {};
54
+ g.stroke({
55
+ color: toColor(line.color, cfg.fill),
56
+ width: toNumber(line.width, 1),
57
+ alpha: toNumber(line.alpha, cfg.opacity)
58
+ });
59
+ return;
60
+ }
61
+ g.fill({
62
+ color: cfg.fill,
63
+ alpha: cfg.opacity
64
+ });
65
+ if (cfg.line) g.stroke({
66
+ color: toColor(cfg.line.color, cfg.fill),
67
+ width: toNumber(cfg.line.width, 1),
68
+ alpha: toNumber(cfg.line.alpha, cfg.opacity)
69
+ });
70
+ };
71
+ return h(Container, {
72
+ width: shapeWidth,
73
+ height: shapeHeight,
74
+ minWidth: shapeWidth,
75
+ minHeight: shapeHeight
76
+ }, h(Graphics, {
77
+ width: shapeWidth,
78
+ height: shapeHeight,
79
+ draw: drawShape
80
+ }));
81
+ }
82
+ var __ce_component = component;
83
+ //#endregion
84
+ export { __ce_component as default };
85
+
86
+ //# sourceMappingURL=shape.ce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shape.ce.js","names":[],"sources":["../../../src/components/dynamics/shape.ce"],"sourcesContent":["<Container width={shapeWidth} height={shapeHeight} minWidth={shapeWidth} minHeight={shapeHeight}>\n <Graphics width={shapeWidth} height={shapeHeight} draw={drawShape} />\n</Container>\n\n<script>\nimport { computed } from \"canvasengine\";\nimport { resolveDynamicValue } from \"./parse-value\";\nimport { getShapeBox, translatePolygonPoints } from \"./shape-utils\";\n\nconst props = defineProps();\nconst { object } = props;\nconst sprite = object();\n\nconst read = (prop, fallback) => prop ? prop() : fallback;\n\nconst toNumber = (value, fallback = 0) => {\n const resolved = resolveDynamicValue(value, sprite);\n const num = typeof resolved === 'number' ? resolved : parseFloat(resolved);\n return Number.isFinite(num) ? num : fallback;\n};\n\nconst toColor = (value, fallback) => {\n const resolved = resolveDynamicValue(value, sprite);\n if (typeof resolved === 'number') return resolved;\n if (typeof resolved === 'string' && resolved.startsWith('#')) {\n return parseInt(resolved.slice(1), 16);\n }\n return resolved ?? fallback;\n};\n\nconst config = computed(() => ({\n type: read(props.type, 'rectangle'),\n fill: toColor(read(props.fill, '#ffffff'), 0xffffff),\n radius: toNumber(read(props.radius, 8), 8),\n width: toNumber(read(props.width, 16), 16),\n height: toNumber(read(props.height, 16), 16),\n x1: toNumber(read(props.x1, 0), 0),\n y1: toNumber(read(props.y1, 0), 0),\n x2: toNumber(read(props.x2, 16), 16),\n y2: toNumber(read(props.y2, 0), 0),\n opacity: Math.max(0, Math.min(1, toNumber(read(props.opacity, 1), 1))),\n points: read(props.points, []),\n line: read(props.line, null)\n}));\n\nconst shapeBox = computed(() => getShapeBox(config(), toNumber));\n\nconst shapeWidth = computed(() => shapeBox().width);\nconst shapeHeight = computed(() => shapeBox().height);\n\nconst drawShape = (g) => {\n const cfg = config();\n const box = shapeBox();\n\n if (cfg.type === 'circle') {\n g.circle(cfg.radius, cfg.radius, cfg.radius);\n } else if (cfg.type === 'ellipse') {\n g.ellipse(box.width / 2, box.height / 2, box.width / 2, box.height / 2);\n } else if (cfg.type === 'line') {\n g.moveTo(cfg.x1 + box.offsetX, cfg.y1 + box.offsetY);\n g.lineTo(cfg.x2 + box.offsetX, cfg.y2 + box.offsetY);\n } else if (cfg.type === 'polygon' && Array.isArray(cfg.points)) {\n g.poly(translatePolygonPoints(cfg.points, box, toNumber));\n } else if (cfg.type === 'rounded-rectangle') {\n g.roundRect(0, 0, box.width, box.height, toNumber(read(props.radius, 4), 4));\n } else {\n g.rect(0, 0, box.width, box.height);\n }\n\n if (cfg.type === 'line') {\n const line = cfg.line ?? {};\n g.stroke({\n color: toColor(line.color, cfg.fill),\n width: toNumber(line.width, 1),\n alpha: toNumber(line.alpha, cfg.opacity)\n });\n return;\n }\n\n g.fill({ color: cfg.fill, alpha: cfg.opacity });\n\n if (cfg.line) {\n g.stroke({\n color: toColor(cfg.line.color, cfg.fill),\n width: toNumber(cfg.line.width, 1),\n alpha: toNumber(cfg.line.alpha, cfg.opacity)\n });\n }\n};\n</script>\n"],"mappings":";;;;AASM,SAAQ,UAAW,SAAE;CACR,SAAK,OAAA;CAClB,MAAQ,cAAS,eAAA,OAAA;;CAEjB,MAAQ,QAAM,YAAa;;CAEjC,MAAM,SAAS,OAAG;CAClB,MAAE,QAAM,MAAW,aAAA,OAAoB,KAAM,IAAC;CAC9C,MAAE,YAAY,OAAO,WAAc,MAAO;EACxC,MAAO,WAAO,oBAAsB,OAAQ,MAAA;EAC7C,MAAA,MAAA,OAAA,aAAA,WAAA,WAAA,WAAA,QAAA;;CAED;CACA,MAAE,WAAe,OAAE,aAAA;EACf,MAAE,WAAe,oBAAe,OAAO,MAAQ;EAC/C,IAAE,OAAO,aAAc,UACvB,OAAO;EACT,IAAA,OAAA,aAAA,YAAA,SAAA,WAAA,GAAA,GACM,OAAC,SAAY,SAAQ,MAAA,CAAA,GAAA,EAAA;;CAG7B;CACA,MAAM,SAAO,gBAAa;EACxB,MAAM,KAAO,MAAM,MAAM,WAAQ;EACjC,MAAQ,QAAQ,KAAK,MAAM,MAAC,SAAc,GAAA,QAAA;EAC1C,QAAO,SAAS,KAAK,MAAM,QAAW,CAAC,GAAG,CAAA;EAC1C,OAAQ,SAAS,KAAK,MAAM,OAAQ,EAAE,GAAG,EAAE;EACzC,QAAE,SAAc,KAAM,MAAM,QAAI,EAAA,GAAA,EAAA;EAChC,IAAE,SAAS,KAAK,MAAQ,IAAI,CAAC,GAAG,CAAA;EAChC,IAAE,SAAS,KAAK,MAAQ,IAAI,CAAC,GAAE,CAAE;EACjC,IAAE,SAAS,KAAK,MAAQ,IAAI,EAAE,GAAE,EAAA;EAClC,IAAA,SAAc,KAAM,MAAM,IAAI,CAAC,GAAE,CAAA;EACjC,SAAQ,KAAK,IAAM,GAAA,KAAS,IAAE,GAAA,SAAA,KAAA,MAAA,SAAA,CAAA,GAAA,CAAA,CAAA,CAAA;EAC9B,QAAU,KAAC,MAAU,QAAM,CAAA,CAAA;EAC1B,MAAA,KAAA,MAAA,MAAA,IAAA;;CAEH,MAAM,WAAW,eAAe,YAAY,OAAO,GAAG,QAAQ,CAAC;;CAE/D,MAAM,cAAa,eAAe,SAAU,EAAC,MAAM;CACnD,MAAM,aAAa,MAAC;;EAEpB,MAAM,MAAU,SAAS;EACvB,IAAM,IAAI,SAAS,UACb,EAAA,OAAM,IAAA,QAAU,IAAA,QAAA,IAAA,MAAA;OAEf,IAAC,IAAO,SAAS,WACpB,EAAA,QAAW,IAAA,QAAY,GAAA,IAAQ,SAAI,GAAO,IAAA,QAAA,GAAA,IAAA,SAAA,CAAA;OAE1C,IAAO,IAAI,SAAS,QAAO;GACzB,EAAC,OAAQ,IAAI,KAAK,IAAC,SAAO,IAAA,KAAA,IAAA,OAAA;GAC5B,EAAA,OAAW,IAAI,KAAK,IAAA,SAAa,IAAI,KAAK,IAAA,OAAQ;EACpD,OACK,IAAI,IAAI,SAAS,aAAa,MAAM,QAAQ,IAAI,MAAM,GACzD,EAAI,KAAC,uBAA2B,IAAA,QAAY,KAAC,QAAU,CAAA;OAEvD,IAAA,IAAW,SAAS,qBAClB,EAAC,UAAA,GAAA,GAAA,IAAA,OAAA,IAAA,QAAA,SAAA,KAAA,MAAA,QAAA,CAAA,GAAA,CAAA,CAAA;;EAKL,IAAA,IAAM,SAAW,QAAQ;GACvB,MAAO,OAAA,IAAA,QAAA,CAAA;GACP,EAAA,OAAO;IACD,OAAC,QAAc,KAAK,OAAI,IAAA,IAAA;IACxB,OAAC,SAAc,KAAM,OAAK,CAAA;IAChC,OAAA,SAAA,KAAA,OAAA,IAAA,OAAA;GACF,CAAA;GACF;;EAEE,EAAA,KAAO;GAAA,OAAO,IAAI;GAAM,OAAO,IAAI;EAAU,CAAA;gBAE3C,EAAI,OAAM;GACJ,OAAC,QAAA,IAAA,KAAA,OAAA,IAAA,IAAA;GACD,OAAC,SAAY,IAAK,KAAO,OAAI,CAAI;GACjC,OAAC,SAAa,IAAK,KAAM,OAAG,IAAA,OAAA;EAClC,CAAA;CAEN;CAEQ,OADP,EAAA,WAAA;EAAA,OAAA;EAAA,QAAA;EAAA,UAAA;EAAA,WAAA;CAAA,GAAA,EAAA,UAAA;EAAA,OAAA;EAAA,QAAA;EAAA,MAAA;CAAA,CAAA,CACO"}
@@ -1,73 +1,53 @@
1
- import { parseDynamicValue } from "./parse-value.js";
2
- import { Text, computed, h, useDefineProps, useProps } from "canvasengine";
1
+ import { resolveDynamicValue } from "./parse-value.js";
2
+ import { Text, computed, h, useDefineEmits, useDefineProps, useProps } from "canvasengine";
3
3
  //#region src/components/dynamics/text.ce
4
4
  function component($$props) {
5
5
  useProps($$props);
6
6
  const defineProps = useDefineProps($$props);
7
- var __assign = this && this.__assign || function() {
8
- __assign = Object.assign || function(t) {
9
- for (var s, i = 1, n = arguments.length; i < n; i++) {
10
- s = arguments[i];
11
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
12
- }
13
- return t;
14
- };
15
- return __assign.apply(this, arguments);
16
- };
17
- var object = defineProps().object;
18
- var component = object._component;
19
- var parseNumericStyleValue = function(value, object) {
20
- if (value === void 0 || value === null) return;
7
+ useDefineEmits($$props);
8
+ const { object, value, style } = defineProps();
9
+ const sprite = object();
10
+ const read = (prop, fallback) => prop ? prop() : fallback;
11
+ const parseNumericStyleValue = (value, object) => {
12
+ value = resolveDynamicValue(value, sprite);
13
+ if (value === void 0 || value === null) return void 0;
21
14
  if (typeof value === "number") return value;
22
- if (typeof value === "string") if (value.includes("{")) {
23
- var parsed_1 = parseDynamicValue(value, object);
24
- return computed(function() {
25
- var str = parsed_1();
26
- var num = parseFloat(str);
27
- return isNaN(num) ? 0 : num;
28
- });
29
- } else {
30
- var num = parseFloat(value);
31
- return isNaN(num) ? void 0 : num;
32
- }
33
- return value;
15
+ const num = parseFloat(value);
16
+ return isNaN(num) ? void 0 : num;
34
17
  };
35
- var getComponentStyle = function(component) {
36
- if (!component.style) return {};
37
- var style = component.style;
38
- var result = {};
39
- if (style.fill !== void 0) if (typeof style.fill === "string" && style.fill.includes("{")) result.color = parseDynamicValue(style.fill, object);
40
- else result.color = style.fill;
41
- if (style.fontSize !== void 0) {
42
- var fontSizeValue = parseNumericStyleValue(style.fontSize, object);
43
- if (fontSizeValue !== void 0) result.size = fontSizeValue;
44
- }
45
- if (style.fontFamily !== void 0) if (typeof style.fontFamily === "string" && style.fontFamily.includes("{")) result.fontFamily = parseDynamicValue(style.fontFamily, object);
46
- else result.fontFamily = style.fontFamily;
47
- var textStyle = {};
48
- if (style.fontStyle !== void 0) if (typeof style.fontStyle === "string" && style.fontStyle.includes("{")) textStyle.fontStyle = parseDynamicValue(style.fontStyle, object);
49
- else textStyle.fontStyle = style.fontStyle;
50
- if (style.fontWeight !== void 0) if (typeof style.fontWeight === "string" && style.fontWeight.includes("{")) textStyle.fontWeight = parseDynamicValue(style.fontWeight, object);
51
- else if (typeof style.fontWeight === "number") textStyle.fontWeight = style.fontWeight;
52
- else textStyle.fontWeight = style.fontWeight;
53
- if (style.stroke !== void 0) if (typeof style.stroke === "string" && style.stroke.includes("{")) textStyle.stroke = parseDynamicValue(style.stroke, object);
54
- else textStyle.stroke = style.stroke;
18
+ const getTextStyle = (style) => {
19
+ if (!style) return {};
20
+ const textStyle = {};
21
+ if (style.fontStyle !== void 0) textStyle.fontStyle = resolveDynamicValue(style.fontStyle, sprite);
22
+ if (style.fontWeight !== void 0) textStyle.fontWeight = resolveDynamicValue(style.fontWeight, sprite);
23
+ if (style.stroke !== void 0) textStyle.stroke = resolveDynamicValue(style.stroke, sprite);
55
24
  if (style.opacity !== void 0) {
56
- var opacityValue = parseNumericStyleValue(style.opacity, object);
25
+ const opacityValue = parseNumericStyleValue(style.opacity, object);
57
26
  if (opacityValue !== void 0) textStyle.opacity = opacityValue;
58
27
  }
59
28
  if (style.wordWrap !== void 0) textStyle.wordWrap = style.wordWrap;
60
- if (style.align !== void 0) if (typeof style.align === "string" && style.align.includes("{")) textStyle.align = parseDynamicValue(style.align, object);
61
- else textStyle.align = style.align;
62
- if (Object.keys(textStyle).length > 0) result.style = textStyle;
63
- return result;
29
+ if (style.align !== void 0) textStyle.align = resolveDynamicValue(style.align, sprite);
30
+ return textStyle;
64
31
  };
65
32
  return h(Text, {
66
- text: computed(() => parseDynamicValue(component.value, object)),
67
- ...getComponentStyle(component)
33
+ text: computed(() => String(resolveDynamicValue(read(value, ""), sprite) ?? "")),
34
+ color: computed(() => {
35
+ const currentStyle = read(style, {});
36
+ return currentStyle.fill !== void 0 ? resolveDynamicValue(currentStyle.fill, sprite) : void 0;
37
+ }),
38
+ size: computed(() => {
39
+ const currentStyle = read(style, {});
40
+ return currentStyle.fontSize !== void 0 ? parseNumericStyleValue(currentStyle.fontSize, object) : void 0;
41
+ }),
42
+ fontFamily: computed(() => {
43
+ const currentStyle = read(style, {});
44
+ return currentStyle.fontFamily !== void 0 ? resolveDynamicValue(currentStyle.fontFamily, sprite) : void 0;
45
+ }),
46
+ style: computed(() => getTextStyle(read(style, {})))
68
47
  });
69
48
  }
49
+ var __ce_component = component;
70
50
  //#endregion
71
- export { component as default };
51
+ export { __ce_component as default };
72
52
 
73
53
  //# sourceMappingURL=text.ce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.ce.js","names":[],"sources":["../../../src/components/dynamics/text.ce"],"sourcesContent":["<Text text={parseDynamicValue(component.value, object)} ...getComponentStyle(component) />\n\n<script>\nimport { computed } from \"canvasengine\";\nimport { parseDynamicValue } from \"./parse-value\";\n\nconst { object } = defineProps();\nconst component = object._component;\n\n/**\n * Parses a numeric style value that can be a number or a string\n * \n * If the value is a string, it may contain dynamic references like {hp}\n * which need to be parsed using parseDynamicValue. If it's a number,\n * it's returned as-is wrapped in a computed.\n * \n * @param value - Numeric value (number or string)\n * @param object - Object to resolve dynamic references from\n * @returns Computed signal with the numeric value\n */\nconst parseNumericStyleValue = (value, object) => {\n if (value === undefined || value === null) {\n return undefined;\n }\n \n if (typeof value === 'number') {\n return value;\n }\n \n if (typeof value === 'string') {\n // Check if it contains dynamic references\n if (value.includes('{')) {\n // Parse dynamic value and convert to number\n const parsed = parseDynamicValue(value, object);\n return computed(() => {\n const str = parsed();\n const num = parseFloat(str);\n return isNaN(num) ? 0 : num;\n });\n } else {\n // Simple string number, convert directly\n const num = parseFloat(value);\n return isNaN(num) ? undefined : num;\n }\n }\n \n return value;\n};\n\n/**\n * Maps component style properties to Canvas Engine Text component props\n * \n * Converts TextComponentOptions from the server to the format expected\n * by the Canvas Engine Text component. Supports all text styling properties\n * including fill, fontSize, fontFamily, fontStyle, fontWeight, stroke,\n * opacity, wordWrap, and align. Also supports dynamic values (number | string)\n * for numeric properties like fontSize and opacity.\n * \n * @param component - Component definition with style property\n * @returns Object with Text component props\n * \n * @example\n * ```ts\n * // Component with style\n * const component = {\n * style: {\n * fill: '#000000',\n * fontSize: 20,\n * fontFamily: 'Arial',\n * fontWeight: 'bold'\n * }\n * };\n * \n * const props = getComponentStyle(component);\n * // Returns: { color: '#000000', size: 20, fontFamily: 'Arial', style: { fontWeight: 'bold' } }\n * \n * // Component with dynamic fontSize\n * const component2 = {\n * style: {\n * fill: '#000000',\n * fontSize: '{hp}', // Will be resolved from object.hp\n * opacity: '0.8'\n * }\n * };\n * ```\n */\nconst getComponentStyle = (component) => {\n if (!component.style) {\n return {};\n }\n\n const style = component.style;\n const result = {};\n\n // Map fill to color (shortcut property)\n // fill can be a string (hex color) or a dynamic string\n if (style.fill !== undefined) {\n if (typeof style.fill === 'string' && style.fill.includes('{')) {\n result.color = parseDynamicValue(style.fill, object);\n } else {\n result.color = style.fill;\n }\n }\n\n // Map fontSize to size (shortcut property)\n // fontSize can be number or string (with dynamic references)\n if (style.fontSize !== undefined) {\n const fontSizeValue = parseNumericStyleValue(style.fontSize, object);\n if (fontSizeValue !== undefined) {\n result.size = fontSizeValue;\n }\n }\n\n // Map fontFamily (shortcut property)\n if (style.fontFamily !== undefined) {\n if (typeof style.fontFamily === 'string' && style.fontFamily.includes('{')) {\n result.fontFamily = parseDynamicValue(style.fontFamily, object);\n } else {\n result.fontFamily = style.fontFamily;\n }\n }\n\n // Build style object for PixiJS Text properties\n const textStyle = {};\n\n // Font style properties\n if (style.fontStyle !== undefined) {\n if (typeof style.fontStyle === 'string' && style.fontStyle.includes('{')) {\n textStyle.fontStyle = parseDynamicValue(style.fontStyle, object);\n } else {\n textStyle.fontStyle = style.fontStyle;\n }\n }\n\n if (style.fontWeight !== undefined) {\n if (typeof style.fontWeight === 'string' && style.fontWeight.includes('{')) {\n textStyle.fontWeight = parseDynamicValue(style.fontWeight, object);\n } else if (typeof style.fontWeight === 'number') {\n textStyle.fontWeight = style.fontWeight;\n } else {\n textStyle.fontWeight = style.fontWeight;\n }\n }\n\n // Stroke properties\n if (style.stroke !== undefined) {\n if (typeof style.stroke === 'string' && style.stroke.includes('{')) {\n textStyle.stroke = parseDynamicValue(style.stroke, object);\n } else {\n textStyle.stroke = style.stroke;\n }\n }\n\n // Opacity (can be number or string)\n if (style.opacity !== undefined) {\n const opacityValue = parseNumericStyleValue(style.opacity, object);\n if (opacityValue !== undefined) {\n textStyle.opacity = opacityValue;\n }\n }\n\n // Word wrap\n if (style.wordWrap !== undefined) {\n textStyle.wordWrap = style.wordWrap;\n }\n\n // Text alignment\n if (style.align !== undefined) {\n if (typeof style.align === 'string' && style.align.includes('{')) {\n textStyle.align = parseDynamicValue(style.align, object);\n } else {\n textStyle.align = style.align;\n }\n }\n\n // Only add style prop if there are style properties\n if (Object.keys(textStyle).length > 0) {\n result.style = textStyle;\n }\n\n return result;\n}\n</script>"],"mappings":";;;AAOM,SAAmB,UAAU,SAAA;;CAEjC,MAAA,cAAA,eAAA,QAAA;CACC,IAAS,WAAQ,QAAY,KAAK,YAAS,WAAY;AACxD,aAAA,OAAA,UAAA,SAAA,GAAA;AACI,QAAI,IAAM,GAAI,IAAC,GAAM,IAAI,UAAK,QAAQ,IAAQ,GAAA,KAAA;AAC3C,QAAO,UAAU;AAClB,SAAS,IAAG,KAAG,EAAA,KAAU,OAAG,UAAQ,eAAA,KAAA,GAAA,EAAA,CAC1C,GAAA,KAAA,EAAA;;AAEE,UAAM;;AAER,SAAA,SAAA,MAAA,MAAA,UAAA;;CAEF,IAAI,SAAS,aAAK,CAAS;CAC3B,IAAI,YAAW,OAAA;CACf,IAAI,yBAAA,SAAA,OAAA,QAAA;AACD,MAAA,UAAA,KAAA,KAAA,UAAA,KACK;AAEJ,MAAA,OAAA,UAAA,SACD,QAAA;AAEC,MAAI,OAAG,UAAY,SAEf,KAAI,MAAG,SAAM,IAAQ,EAAA;GAEjB,IAAA,WAAe,kBAAO,OAAA,OAAA;AACtB,UAAI,SAAY,WAAQ;IACpB,IAAA,MAAU,UAAE;IACZ,IAAA,MAAO,WAAc,IAAG;AAC1B,WAAA,MAAA,IAAA,GAAA,IAAA;KACA;SAEF;GAEJ,IAAA,MAAA,WAAA,MAAA;AACJ,UAAA,MAAA,IAAA,GAAA,KAAA,IAAA;;AAGH,SAAA;;CAED,IAAE,oBAAA,SAAA,WAAA;AACC,MAAK,CAAA,UAAU,MAChB,QAAA,EAAA;EAEC,IAAG,QAAU,UAAQ;EACrB,IAAA,SAAc,EAAE;AAGjB,MAAA,MAAA,SAAA,KAAA,EACE,KAAM,OAAS,MAAG,SAAU,YAAW,MAAK,KAAM,SAAA,IAAA,CAC1C,QAAO,QAAK,kBAAe,MAAA,MAAA,OAAA;MAGjC,QAAA,QAAA,MAAA;AAKF,MAAG,MAAA,aAAY,KAAA,GAAA;GACZ,IAAA,gBAAmB,uBAAA,MAAA,UAAA,OAAA;AACnB,OAAA,kBAAiB,KAAA,EACnB,QAAA,OAAA;;AAID,MAAE,MAAQ,eAAY,KAAA,EACxB,KAAA,OAAA,MAAA,eAAA,YAAA,MAAA,WAAA,SAAA,IAAA,CACI,QAAU,aAAa,kBAAA,MAAA,YAAA,OAAA;MAGjB,QAAG,aAAO,MAAA;EAIlB,IAAA,YAAA,EAAA;AAEF,MAAA,MAAA,cAAA,KAAA,EACI,KAAA,OAAA,MAAmB,cAAc,YAAE,MAAA,UAAA,SAAA,IAAA,CAChC,WAAU,YAAO,kBAAA,MAAA,WAAA,OAAA;;kCAOnB,KAAI,OAAQ,MAAM,eAAU,YAAQ,MAAA,WAAA,SAAA,IAAA,CAC/B,WAAS,aAAY,kBAAoB,MAAA,YAAA,OAAA;WAEzC,OAAY,MAAM,eAAe,SACjC,WAAO,aAAQ,MAAA;MAGnB,WAAA,aAAA,MAAA;AAIJ,MAAG,MAAA,WAAgB,KAAA,EACf,KAAA,OAAM,MAAW,WAAW,YAAE,MAAA,OAAA,SAAA,IAAA,CAC9B,WAAM,SAAgB,kBAAA,MAAuB,QAAM,OAAU;MAG7D,WAAA,SAAA,MAAA;AAIJ,MAAI,MAAM,YAAY,KAAA,GAAG;GACrB,IAAI,eAAa,uBAAyB,MAAE,SAAM,OAAW;AAC7D,OAAI,iBAAiB,KAAA,EACnB,WAAK,UAAA;;gCAKR,WAAW,WAAW,MAAC;AAG1B,MAAG,MAAK,UAAM,KAAA,EACV,KAAA,OAAM,MAAW,UAAG,YAAW,MAAA,MAAA,SAAA,IAAA,CAC3B,WAAO,QAAM,kBAAuB,MAAG,OAAM,OAAU;MAGvD,WAAU,QAAA,MAAY;AAI9B,MAAI,OAAM,KAAA,UAAe,CAAA,SAAW,EAChC,QAAI,QAAO;AAEf,SAAM;;AAGF,QADO,EAAA,MAAA;EAAA,MAAA,eAAA,kBAAA,UAAA,OAAA,OAAA,CAAA;EAAA,GAAA,kBAAA,UAAA;EAAA,CAAA"}
1
+ {"version":3,"file":"text.ce.js","names":[],"sources":["../../../src/components/dynamics/text.ce"],"sourcesContent":["<Text text={textValue} color={textColor} size={textSize} fontFamily={textFontFamily} style={textStyle} />\n\n<script>\nimport { computed } from \"canvasengine\";\nimport { resolveDynamicValue } from \"./parse-value\";\n\nconst { object, value, style } = defineProps();\nconst sprite = object();\n\nconst read = (prop, fallback) => prop ? prop() : fallback;\n\nconst parseNumericStyleValue = (value, object) => {\n value = resolveDynamicValue(value, sprite);\n if (value === undefined || value === null) return undefined;\n if (typeof value === 'number') return value;\n\n const num = parseFloat(value);\n return isNaN(num) ? undefined : num;\n};\n\nconst getTextStyle = (style) => {\n if (!style) return {};\n const textStyle = {};\n\n if (style.fontStyle !== undefined) {\n textStyle.fontStyle = resolveDynamicValue(style.fontStyle, sprite);\n }\n\n if (style.fontWeight !== undefined) {\n textStyle.fontWeight = resolveDynamicValue(style.fontWeight, sprite);\n }\n\n if (style.stroke !== undefined) {\n textStyle.stroke = resolveDynamicValue(style.stroke, sprite);\n }\n\n if (style.opacity !== undefined) {\n const opacityValue = parseNumericStyleValue(style.opacity, object);\n if (opacityValue !== undefined) {\n textStyle.opacity = opacityValue;\n }\n }\n\n if (style.wordWrap !== undefined) {\n textStyle.wordWrap = style.wordWrap;\n }\n\n if (style.align !== undefined) {\n textStyle.align = resolveDynamicValue(style.align, sprite);\n }\n\n return textStyle;\n};\n\nconst textValue = computed(() => String(resolveDynamicValue(read(value, ''), sprite) ?? ''));\nconst textColor = computed(() => {\n const currentStyle = read(style, {});\n return currentStyle.fill !== undefined ? resolveDynamicValue(currentStyle.fill, sprite) : undefined;\n});\nconst textSize = computed(() => {\n const currentStyle = read(style, {});\n return currentStyle.fontSize !== undefined ? parseNumericStyleValue(currentStyle.fontSize, object) : undefined;\n});\nconst textFontFamily = computed(() => {\n const currentStyle = read(style, {});\n return currentStyle.fontFamily !== undefined ? resolveDynamicValue(currentStyle.fontFamily, sprite) : undefined;\n});\nconst textStyle = computed(() => getTextStyle(read(style, {})));\n</script>\n"],"mappings":";;;AAOM,SAAS,UAAQ,SAAA;;CAEjB,MAAQ,cAAc,eAAY,OAAS;;CAE3C,MAAA,EAAA,QAAA,OAAyB,UAAQ,YAAW;CAClD,MAAI,SAAQ,OAAA;CACZ,MAAM,QAAQ,MAAI,aAAa,OAAS,KAAK,IAAE;CAC/C,MAAM,0BAA0B,OAAG,WAAY;;EAE3C,IAAA,UAAY,KAAA,KAAW,UAAM,MAC7B,OAAO,KAAA;EACV,IAAA,OAAA,UAAA,UAAA,OAAA;EAED,MAAM,MAAA,WAAqB,KAAK;EAC5B,OAAK,MAAO,GAAA,IAAQ,KAAA,IAAC;CACzB;;EAEI,IAAI,CAAA,OACA,OAAA,CAAA;EACJ,MAAA,YAAA,CAAA;kCAEI,UAAM,YAAe,oBAAW,MAAA,WAAA,MAAA;EAEpC,IAAA,MAAA,eAAA,KAAA,GAAA,UAAA,aAAA,oBAAA,MAAA,YAAA,MAAA;EAGA,IAAI,MAAA,WAAiB,KAAA,GACrB,UAAA,SAAA,oBAAA,MAAA,QAAA,MAAA;EAEA,IAAI,MAAM,YAAY,KAAA,GAAW;GAC7B,MAAM,eAAe,uBAAuB,MAAM,SAAS,MAAM;GACjE,IAAI,iBAAiB,KAAA,GACjB,UAAU,UAAU;EAE5B;iCAEI,UAAM,WAAa,MAAA;EAEvB,IAAA,MAAA,UAAA,KAAA,GAAA,UAAA,QAAA,oBAAA,MAAA,OAAA,MAAA;EAGA,OAAI;CACR;CAgBI,OADM,EAAY,MAAG;EAAK,MAAA,eAAA,OAAA,oBAAA,KAAA,OAAA,EAAA,GAAA,MAAA,KAAA,EAAA,CAAU;EAAA,OAb7B,eAAS;GACnB,MAAA,eAAA,KAAA,OAAA,CAAA,CAAA;;EAED,CAUwC;EAAA,MATvB,eAAe;GAC5B,MAAM,eAAe,KAAK,OAAO,CAAC,CAAC;GACnC,OAAO,aAAa,aAAS,KAAA,IAAY,uBAAoB,aAAmB,UAAU,MAAA,IAAS,KAAA;EACvG,CAMwC;EAAA,YALvB,eAAe;GAC5B,MAAM,eAAe,KAAK,OAAO,CAAC,CAAC;GACnC,OAAO,aAAa,eAAa,KAAA,IAAY,oBAAsB,aAAa,YAAW,MAAO,IAAG,KAAA;EACzG,CAEwC;EAAA,OADlC,eAA2B,aAAK,KAAA,OAAA,CAAA,CAAA,CAAA,CACE;CAAA,CAC7B;AACT;AAEA,IAAM,iBAAA"}
@@ -1,17 +1,16 @@
1
1
  import { inject } from "../../core/inject.js";
2
2
  import { RpgClientEngine } from "../../RpgClientEngine.js";
3
3
  import "../../index.js";
4
- import { Container, Rect, computed, h, useDefineProps, useProps } from "canvasengine";
4
+ import { Container, Rect, computed, h, useDefineEmits, useDefineProps, useProps } from "canvasengine";
5
5
  //#region src/components/gui/box.ce
6
6
  function component($$props) {
7
7
  useProps($$props);
8
- var _a = useDefineProps($$props)(), width = _a.width, height = _a.height, children = _a.children, color = _a.color, top = _a.top, left = _a.left;
9
- var engine = inject(RpgClientEngine);
10
- var child = children[0];
11
- var _color = computed(function() {
12
- var _a;
13
- return ((_a = engine.globalConfig.gui) === null || _a === void 0 ? void 0 : _a.windowColor) || (color === null || color === void 0 ? void 0 : color()) || "#1a1a2e";
14
- });
8
+ const defineProps = useDefineProps($$props);
9
+ useDefineEmits($$props);
10
+ const { width, height, children, color, top, left } = defineProps();
11
+ const engine = inject(RpgClientEngine);
12
+ const child = children[0];
13
+ const _color = computed(() => engine.globalConfig.gui?.windowColor || color?.() || "#1a1a2e");
15
14
  return h(Container, {
16
15
  positionType: "absolute",
17
16
  top,
@@ -22,7 +21,8 @@ function component($$props) {
22
21
  color: _color
23
22
  }), h(Container, { attach: child })]));
24
23
  }
24
+ var __ce_component = component;
25
25
  //#endregion
26
- export { component as default };
26
+ export { __ce_component as default };
27
27
 
28
28
  //# sourceMappingURL=box.ce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"box.ce.js","names":[],"sources":["../../../src/components/gui/box.ce"],"sourcesContent":["<Container positionType=\"absolute\" top={top} left={left}>\n <Container\n anchor={[0.5, 0.5]}\n >\n <Rect width height color={_color} />\n <Container attach={child}></Container>\n </Container> \n</Container>\n\n<script>\n import { RpgClientEngine, inject } from \"../../index\";\n\n const { width, height, children, color, top, left } = defineProps();\n const engine = inject(RpgClientEngine)\n const child = children[0]\n const _color = computed(() => engine.globalConfig.gui?.windowColor || color?.() || \"#1a1a2e\")\n</script>"],"mappings":";;;;;AAOE,SAAS,UAAA,SAAA;;CAGH,IAAG,KADJ,eAAA,QAAA,EACqB,EAAA,QAAS,GAAM,OAAM,SAAM,GAAA,QAAA,WAAA,GAAA,UAAA,QAAA,GAAA,OAAA,MAAA,GAAA,KAAA,OAAA,GAAA;;CAEvD,IAAE,QAAQ,SAAO;CACjB,IAAE,SAAM,SAAS,WAAO;EAAA,IAAe;AAAA,WAAA,KAAA,OAAA,aAAA,SAAA,QAAA,OAAA,KAAA,IAAA,KAAA,IAAA,GAAA,iBAAA,UAAA,QAAA,UAAA,KAAA,IAAA,KAAA,IAAA,OAAA,KAAA;GAAA;AAE/B,QADQ,EAAA,WAAU;EAAA,cAAA;EAAA;EAAA;EAAA,EAAA,EAAA,WAAA,EAAA,QAAA,CAAA,IAAA,GAAA,EAAA,EAAA,CAAA,EAAA,MAAA;EAAA;EAAA;EAAA,OAAA;EAAA,CAAA,EAAA,EAAA,WAAA,EAAA,QAAA,OAAA,CAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"box.ce.js","names":[],"sources":["../../../src/components/gui/box.ce"],"sourcesContent":["<Container positionType=\"absolute\" top={top} left={left}>\n <Container\n anchor={[0.5, 0.5]}\n >\n <Rect width height color={_color} />\n <Container attach={child}></Container>\n </Container> \n</Container>\n\n<script>\n import { RpgClientEngine, inject } from \"../../index\";\n\n const { width, height, children, color, top, left } = defineProps();\n const engine = inject(RpgClientEngine)\n const child = children[0]\n const _color = computed(() => engine.globalConfig.gui?.windowColor || color?.() || \"#1a1a2e\")\n</script>"],"mappings":";;;;;AAOE,SAAS,UAAA,SAAA;;CAEJ,MAAA,cAAA,eAAA,OAAA;CACqB,eAAe,OAAM;;CAEjD,MAAE,SAAa,OAAE,eAAkB;CACnC,MAAE,QAAY,SAAS;CACvB,MAAE,SAAa,eAAW,OAAA,aAAA,KAAA,eAAA,QAAA,KAAA,SAAA;CAElB,OADS,EAAA,WAAe;EAAA,cAAO;EAAkB;EAAoB;CAAK,GAAG,EAAE,WAAO,EAAA,QAAA,CAAA,IAAA,EAAA,EAAA,GAAA,CAAA,EAAA,MAAA;EAAA;EAAA;EAAA,OAAA;CAAA,CAAA,GAAA,EAAA,WAAA,EAAA,QAAA,MAAA,CAAA,CAAA,CAAA,CACtF"}
@@ -1,50 +1,56 @@
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, mount, signal, useDefineProps, useProps } from "canvasengine";
4
+ import { DOMContainer, DOMElement, DOMSprite, Navigation, computed, cond, createTabindexNavigator, effect, h, loop, mount, signal, useDefineEmits, useDefineProps, useProps } from "canvasengine";
4
5
  import { delay } from "@rpgjs/common";
5
6
  //#region src/components/gui/dialogbox/index.ce
6
7
  function component($$props) {
7
8
  useProps($$props);
8
9
  const defineProps = useDefineProps($$props);
9
- var engine = inject(RpgClientEngine);
10
+ useDefineEmits($$props);
11
+ const engine = inject(RpgClientEngine);
10
12
  engine.scene.currentPlayer;
11
- var keyboardControls = engine.globalConfig.keyboardControls;
13
+ const keyboardControls = engine.globalConfig.keyboardControls;
12
14
  engine.stopProcessingInput = true;
13
- var selectedItem = signal(0), _a = defineProps(), data = _a.data, onFinish = _a.onFinish;
14
- _a.onInteraction;
15
- var _b = data(), message = _b.message, choices = _b.choices, face = _b.face, speaker = _b.speaker, position = _b.position, typewriterEffect = _b.typewriterEffect;
16
- _b.autoClose;
17
- var fullWidth = computed(function() {
18
- return data().fullWidth || false;
19
- });
20
- var resolveProp = function(value) {
21
- return typeof value === "function" ? value() : value;
15
+ const selectedItem = signal(0);
16
+ const ACTION_OPEN_GUARD_MS = 150;
17
+ const openedAt = Date.now();
18
+ const { data, onFinish, onInteraction, guiOpenId } = defineProps();
19
+ const dialogData = computed(() => data() || {});
20
+ const dialogChoices = computed(() => Array.isArray(dialogData().choices) ? dialogData().choices : []);
21
+ const message = computed(() => dialogData().message);
22
+ const speaker = computed(() => dialogData().speaker);
23
+ const position = computed(() => dialogData().position);
24
+ const typewriterEffect = computed(() => dialogData().typewriterEffect);
25
+ const fullWidth = computed(() => dialogData().fullWidth || false);
26
+ const resolveProp = (value) => typeof value === "function" ? value() : value;
27
+ const normalizeOpenId = (value) => {
28
+ const resolved = resolveProp(value);
29
+ return typeof resolved === "string" && resolved.length > 0 ? resolved : void 0;
22
30
  };
23
- var speakerName = computed(function() {
24
- var value = resolveProp(speaker);
31
+ const speakerName = computed(() => {
32
+ const value = resolveProp(speaker());
25
33
  return value ? String(value) : "";
26
34
  });
27
- var dialogPosition = computed(function() {
28
- return resolveProp(position) || "bottom";
29
- });
30
- var isFullWidth = computed(function() {
31
- return resolveProp(fullWidth) !== false;
35
+ const dialogPosition = computed(() => resolveProp(position()) || "bottom");
36
+ const isFullWidth = computed(() => resolveProp(fullWidth) !== false);
37
+ const dialogFace = computed(() => resolveProp(dialogData().face));
38
+ const hasFace = computed(() => {
39
+ const value = dialogFace();
40
+ return !!(value && value.id);
32
41
  });
33
- var hasFace = computed(function() {
34
- return !!resolveProp(face);
35
- });
36
- var displayMessage = signal("");
37
- var fullMessage = signal("");
38
- var isTyping = signal(false);
39
- var typewriterTimer = null;
40
- mount(function(element) {});
41
- var startTypewriter = function(text) {
42
+ const displayMessage = signal("");
43
+ const fullMessage = signal("");
44
+ const isTyping = signal(false);
45
+ let typewriterTimer = null;
46
+ mount((element) => {});
47
+ const startTypewriter = (text) => {
42
48
  if (typewriterTimer) clearInterval(typewriterTimer);
43
49
  displayMessage.set("");
44
50
  if (!text) return;
45
- var index = 0;
51
+ let index = 0;
46
52
  isTyping.set(true);
47
- typewriterTimer = setInterval(function() {
53
+ typewriterTimer = setInterval(() => {
48
54
  index += 1;
49
55
  displayMessage.set(text.slice(0, index));
50
56
  if (index >= text.length) {
@@ -54,30 +60,24 @@ function component($$props) {
54
60
  }
55
61
  }, 20);
56
62
  };
57
- var finishTyping = function() {
63
+ const finishTyping = () => {
58
64
  if (typewriterTimer) clearInterval(typewriterTimer);
59
65
  typewriterTimer = null;
60
66
  displayMessage.set(fullMessage());
61
67
  isTyping.set(false);
62
68
  };
63
- effect(function() {
64
- var text = resolveProp(message) || "";
69
+ effect(() => {
70
+ const text = resolveProp(message()) || "";
65
71
  fullMessage.set(text);
66
- if (!(resolveProp(typewriterEffect) !== false)) {
72
+ if (!(resolveProp(typewriterEffect()) !== false)) {
67
73
  finishTyping();
68
74
  return;
69
75
  }
70
76
  startTypewriter(text);
71
77
  });
72
- var hasChoices = computed(function() {
73
- return choices.length > 0;
74
- });
75
- var showIndicator = computed(function() {
76
- return !hasChoices() && !isTyping();
77
- });
78
- var nav = createTabindexNavigator(selectedItem, { count: function() {
79
- return choices.length;
80
- } }, "wrap");
78
+ const hasChoices = computed(() => dialogChoices().length > 0);
79
+ const showIndicator = computed(() => !hasChoices() && !isTyping());
80
+ const nav = createTabindexNavigator(selectedItem, { count: () => dialogChoices().length }, "wrap");
81
81
  function selectChoice(index) {
82
82
  return function() {
83
83
  selectedItem.set(index);
@@ -85,17 +85,18 @@ function component($$props) {
85
85
  };
86
86
  }
87
87
  function _onFinish(value) {
88
- if (onFinish) onFinish(value);
88
+ if (onFinish) onFinish(value, normalizeOpenId(guiOpenId));
89
89
  }
90
- var onSelect = function(index) {
90
+ const onSelect = (index) => {
91
91
  _onFinish(index);
92
92
  };
93
- var controls = signal({
93
+ const canAcceptAction = () => Date.now() - openedAt >= ACTION_OPEN_GUARD_MS;
94
+ const controls = signal({
94
95
  up: {
95
96
  repeat: true,
96
97
  bind: keyboardControls.up,
97
98
  throttle: 150,
98
- keyDown: function() {
99
+ keyDown() {
99
100
  if (!hasChoices()) return;
100
101
  nav.next(-1);
101
102
  }
@@ -104,14 +105,15 @@ function component($$props) {
104
105
  repeat: true,
105
106
  bind: keyboardControls.down,
106
107
  throttle: 150,
107
- keyDown: function() {
108
+ keyDown() {
108
109
  if (!hasChoices()) return;
109
110
  nav.next(1);
110
111
  }
111
112
  },
112
113
  action: {
113
- bind: keyboardControls.action,
114
- keyDown: function() {
114
+ bind: getKeyboardControlBind(keyboardControls.action),
115
+ keyDown() {
116
+ if (!canAcceptAction()) return;
115
117
  if (isTyping()) {
116
118
  finishTyping();
117
119
  return;
@@ -122,9 +124,10 @@ function component($$props) {
122
124
  },
123
125
  gamepad: { enabled: true }
124
126
  });
125
- var dialogControls = signal({ action: {
126
- bind: keyboardControls.action,
127
- keyDown: function() {
127
+ const dialogControls = signal({ action: {
128
+ bind: getKeyboardControlBind(keyboardControls.action),
129
+ keyDown() {
130
+ if (!canAcceptAction()) return;
128
131
  if (isTyping()) {
129
132
  finishTyping();
130
133
  return;
@@ -133,15 +136,16 @@ function component($$props) {
133
136
  _onFinish();
134
137
  }
135
138
  } });
136
- var faceSheet = function(graphicId, animationName) {
139
+ const faceSheet = (faceValue) => {
140
+ if (!faceValue || !faceValue.id) return;
137
141
  return {
138
- definition: engine.getSpriteSheet(graphicId),
139
- playing: animationName
142
+ definition: engine.getSpriteSheet(faceValue.id),
143
+ playing: faceValue.expression || "default"
140
144
  };
141
145
  };
142
- mount(function(element) {
143
- return function() {
144
- delay(function() {
146
+ mount((element) => {
147
+ return () => {
148
+ delay(() => {
145
149
  engine.stopProcessingInput = false;
146
150
  });
147
151
  };
@@ -165,7 +169,7 @@ function component($$props) {
165
169
  element: "div",
166
170
  attrs: { class: "rpg-ui-dialog-body" }
167
171
  }, [h(DOMElement, { element: "div" }, [
168
- cond(speakerName(), () => h(DOMElement, {
172
+ cond(computed(() => speakerName()), () => h(DOMElement, {
169
173
  element: "div",
170
174
  attrs: { class: "rpg-ui-dialog-speaker" },
171
175
  textContent: computed(() => speakerName())
@@ -175,13 +179,13 @@ function component($$props) {
175
179
  attrs: { class: "rpg-ui-dialog-content" },
176
180
  textContent: computed(() => displayMessage())
177
181
  }),
178
- cond(hasChoices(), () => h(Navigation, {
182
+ cond(computed(() => hasChoices()), () => h(Navigation, {
179
183
  tabindex: selectedItem,
180
184
  controls
181
185
  }, h(DOMElement, {
182
186
  element: "div",
183
187
  attrs: { class: "rpg-ui-dialog-choices" }
184
- }, loop(choices, (choice, index) => h(DOMElement, {
188
+ }, loop(computed(() => dialogChoices()), (choice, index) => h(DOMElement, {
185
189
  element: "div",
186
190
  attrs: {
187
191
  class: ["rpg-ui-dialog-choice", computed(() => ({ active: selectedItem() === index }))],
@@ -191,15 +195,21 @@ function component($$props) {
191
195
  },
192
196
  textContent: choice.text
193
197
  })))))
194
- ]), cond(hasFace(), () => h(DOMElement, {
198
+ ]), cond(computed(() => hasFace()), () => h(DOMElement, {
195
199
  element: "div",
196
200
  attrs: { class: "rpg-ui-dialog-face" }
197
- }, h(DOMSprite, { sheet: computed(() => faceSheet(face.id, face.expression)) })))]), cond(showIndicator, () => h(DOMElement, {
201
+ }, h(DOMSprite, {
202
+ sheet: computed(() => faceSheet(dialogFace())),
203
+ width: "100%",
204
+ height: "100%",
205
+ objectFit: "contain"
206
+ })))]), cond(showIndicator, () => h(DOMElement, {
198
207
  element: "div",
199
208
  attrs: { class: "rpg-ui-dialog-indicator" }
200
209
  }))])));
201
210
  }
211
+ var __ce_component = component;
202
212
  //#endregion
203
- export { component as default };
213
+ export { __ce_component as default };
204
214
 
205
215
  //# sourceMappingURL=index.ce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.ce.js","names":[],"sources":["../../../../src/components/gui/dialogbox/index.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\" controls={dialogControls}>\n <div\n class=\"rpg-ui-dialog-container\"\n data-position={dialogPosition()}\n data-full-width={isFullWidth() ? \"true\" : \"false\"}\n data-has-face={hasFace() ? \"true\" : \"false\"}\n >\n <div class=\"rpg-ui-dialog rpg-anim-fade-in\">\n <div class=\"rpg-ui-dialog-body\">\n <div>\n @if (speakerName()) {\n <div class=\"rpg-ui-dialog-speaker\">{speakerName()}</div>\n }\n <div class=\"rpg-ui-dialog-content\">\n {displayMessage()}\n </div>\n @if (hasChoices()) {\n <Navigation tabindex={selectedItem} controls={controls}>\n <div class=\"rpg-ui-dialog-choices\">\n @for ((choice,index) of choices) {\n <div\n class=\"rpg-ui-dialog-choice\"\n class={{active: selectedItem() === index}}\n tabindex={index}\n data-choice-index={index}\n click={selectChoice(index)}\n >{{ choice.text }}</div>\n }\n </div>\n </Navigation>\n }\n </div>\n @if (hasFace()) {\n <div class=\"rpg-ui-dialog-face\">\n <DOMSprite sheet={faceSheet(face.id, face.expression)} />\n </div>\n }\n </div>\n @if (showIndicator) {\n <div class=\"rpg-ui-dialog-indicator\"></div>\n }\n </div>\n </div>\n</DOMContainer>\n \n<script>\n import { effect, signal, computed, createTabindexNavigator, mount } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n import { delay } from \"@rpgjs/common\";\n\n const engine = inject(RpgClientEngine);\n const currentPlayer = engine.scene.currentPlayer\n const keyboardControls = engine.globalConfig.keyboardControls;\n\n engine.stopProcessingInput = true;\n\n const selectedItem = signal(0)\n let isDestroyed = false;\n\n const {\n data,\n onFinish,\n onInteraction\n } = defineProps();\n\n const { message, choices, face, speaker, position, typewriterEffect, autoClose } = data();\n const fullWidth = computed(() => data().fullWidth || false);\n\n const resolveProp = (value) => typeof value === \"function\" ? value() : value;\n\n const speakerName = computed(() => {\n const value = resolveProp(speaker);\n return value ? String(value) : \"\";\n });\n\n const dialogPosition = computed(() => resolveProp(position) || \"bottom\");\n const isFullWidth = computed(() => resolveProp(fullWidth) !== false);\n const hasFace = computed(() => !!resolveProp(face));\n\n const displayMessage = signal(\"\");\n const fullMessage = signal(\"\");\n const isTyping = signal(false);\n let typewriterTimer = null;\n let rootElement = null;\n\n mount((element) => {\n rootElement = element;\n });\n\n const startTypewriter = (text) => {\n if (typewriterTimer) clearInterval(typewriterTimer);\n displayMessage.set(\"\");\n if (!text) return;\n let index = 0;\n isTyping.set(true);\n typewriterTimer = setInterval(() => {\n index += 1;\n displayMessage.set(text.slice(0, index));\n if (index >= text.length) {\n clearInterval(typewriterTimer);\n typewriterTimer = null;\n isTyping.set(false);\n }\n }, 20);\n };\n\n const finishTyping = () => {\n if (typewriterTimer) clearInterval(typewriterTimer);\n typewriterTimer = null;\n displayMessage.set(fullMessage());\n isTyping.set(false);\n };\n\n effect(() => {\n const text = resolveProp(message) || \"\";\n fullMessage.set(text);\n const useTypewriter = resolveProp(typewriterEffect) !== false;\n if (!useTypewriter) {\n finishTyping();\n return;\n }\n startTypewriter(text);\n });\n\n\n const hasChoices = computed(() => choices.length > 0);\n const showIndicator = computed(() => !hasChoices() && !isTyping());\n const nav = createTabindexNavigator(selectedItem, { count: () => choices.length }, 'wrap');\n\n function selectChoice(index) {\n return function() {\n selectedItem.set(index);\n onSelect(index);\n }\n }\n\n function _onFinish(value) {\n if (onFinish) onFinish(value);\n }\n\n const onSelect = (index) => {\n _onFinish(index);\n };\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (!hasChoices()) return;\n nav.next(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (!hasChoices()) return;\n nav.next(1);\n }\n },\n action: {\n bind: keyboardControls.action,\n keyDown() {\n if (isTyping()) {\n finishTyping();\n return;\n }\n if (!hasChoices()) return;\n onSelect(selectedItem());\n }\n },\n gamepad: {\n enabled: true\n }\n });\n \n const dialogControls = signal({\n action: {\n bind: keyboardControls.action,\n keyDown() {\n if (isTyping()) {\n finishTyping();\n return;\n }\n if (hasChoices()) return;\n _onFinish();\n }\n },\n })\n\n const faceSheet = (graphicId, animationName) => {\n return {\n definition: engine.getSpriteSheet(graphicId),\n playing: animationName,\n };\n }\n\n mount((element) => {\n return () => {\n isDestroyed = true;\n // Wait destroy is finished before start processing input\n delay(() => {\n engine.stopProcessingInput = false;\n })\n }\n })\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.ce.js","names":[],"sources":["../../../../src/components/gui/dialogbox/index.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\" controls={dialogControls}>\n <div\n class=\"rpg-ui-dialog-container\"\n data-position={dialogPosition()}\n data-full-width={isFullWidth() ? \"true\" : \"false\"}\n data-has-face={hasFace() ? \"true\" : \"false\"}\n >\n <div class=\"rpg-ui-dialog rpg-anim-fade-in\">\n <div class=\"rpg-ui-dialog-body\">\n <div>\n @if (speakerName()) {\n <div class=\"rpg-ui-dialog-speaker\">{speakerName()}</div>\n }\n <div class=\"rpg-ui-dialog-content\">\n {displayMessage()}\n </div>\n @if (hasChoices()) {\n <Navigation tabindex={selectedItem} controls={controls}>\n <div class=\"rpg-ui-dialog-choices\">\n @for ((choice,index) of dialogChoices()) {\n <div\n class=\"rpg-ui-dialog-choice\"\n class={{active: selectedItem() === index}}\n tabindex={index}\n data-choice-index={index}\n click={selectChoice(index)}\n >{{ choice.text }}</div>\n }\n </div>\n </Navigation>\n }\n </div>\n @if (hasFace()) {\n <div class=\"rpg-ui-dialog-face\">\n <DOMSprite\n sheet={faceSheet(dialogFace())}\n width=\"100%\"\n height=\"100%\"\n objectFit=\"contain\"\n />\n </div>\n }\n </div>\n @if (showIndicator) {\n <div class=\"rpg-ui-dialog-indicator\"></div>\n }\n </div>\n </div>\n</DOMContainer>\n \n<script>\n import { effect, signal, computed, createTabindexNavigator, mount } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n import { delay } from \"@rpgjs/common\";\n import { getKeyboardControlBind } from \"../../../services/actionInput\";\n\n const engine = inject(RpgClientEngine);\n const currentPlayer = engine.scene.currentPlayer\n const keyboardControls = engine.globalConfig.keyboardControls;\n\n engine.stopProcessingInput = true;\n\n const selectedItem = signal(0)\n const ACTION_OPEN_GUARD_MS = 150;\n const openedAt = Date.now();\n\n const {\n data,\n onFinish,\n onInteraction,\n guiOpenId\n } = defineProps();\n\n const dialogData = computed(() => data() || {});\n const dialogChoices = computed(() => Array.isArray(dialogData().choices) ? dialogData().choices : []);\n const message = computed(() => dialogData().message);\n const speaker = computed(() => dialogData().speaker);\n const position = computed(() => dialogData().position);\n const typewriterEffect = computed(() => dialogData().typewriterEffect);\n const fullWidth = computed(() => dialogData().fullWidth || false);\n\n const resolveProp = (value) => typeof value === \"function\" ? value() : value;\n const normalizeOpenId = (value) => {\n const resolved = resolveProp(value);\n return typeof resolved === \"string\" && resolved.length > 0 ? resolved : undefined;\n };\n\n const speakerName = computed(() => {\n const value = resolveProp(speaker());\n return value ? String(value) : \"\";\n });\n\n const dialogPosition = computed(() => resolveProp(position()) || \"bottom\");\n const isFullWidth = computed(() => resolveProp(fullWidth) !== false);\n const dialogFace = computed(() => resolveProp(dialogData().face));\n const hasFace = computed(() => {\n const value = dialogFace();\n return !!(value && value.id);\n });\n\n const displayMessage = signal(\"\");\n const fullMessage = signal(\"\");\n const isTyping = signal(false);\n let typewriterTimer = null;\n let rootElement = null;\n\n mount((element) => {\n rootElement = element;\n });\n\n const startTypewriter = (text) => {\n if (typewriterTimer) clearInterval(typewriterTimer);\n displayMessage.set(\"\");\n if (!text) return;\n let index = 0;\n isTyping.set(true);\n typewriterTimer = setInterval(() => {\n index += 1;\n displayMessage.set(text.slice(0, index));\n if (index >= text.length) {\n clearInterval(typewriterTimer);\n typewriterTimer = null;\n isTyping.set(false);\n }\n }, 20);\n };\n\n const finishTyping = () => {\n if (typewriterTimer) clearInterval(typewriterTimer);\n typewriterTimer = null;\n displayMessage.set(fullMessage());\n isTyping.set(false);\n };\n\n effect(() => {\n const text = resolveProp(message()) || \"\";\n fullMessage.set(text);\n const useTypewriter = resolveProp(typewriterEffect()) !== false;\n if (!useTypewriter) {\n finishTyping();\n return;\n }\n startTypewriter(text);\n });\n\n\n const hasChoices = computed(() => dialogChoices().length > 0);\n const showIndicator = computed(() => !hasChoices() && !isTyping());\n const nav = createTabindexNavigator(selectedItem, { count: () => dialogChoices().length }, 'wrap');\n\n function selectChoice(index) {\n return function() {\n selectedItem.set(index);\n onSelect(index);\n }\n }\n\n function _onFinish(value) {\n if (onFinish) onFinish(value, normalizeOpenId(guiOpenId));\n }\n\n const onSelect = (index) => {\n _onFinish(index);\n };\n\n const canAcceptAction = () => Date.now() - openedAt >= ACTION_OPEN_GUARD_MS;\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (!hasChoices()) return;\n nav.next(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (!hasChoices()) return;\n nav.next(1);\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n if (!canAcceptAction()) {\n return;\n }\n if (isTyping()) {\n finishTyping();\n return;\n }\n if (!hasChoices()) return;\n onSelect(selectedItem());\n }\n },\n gamepad: {\n enabled: true\n }\n });\n \n const dialogControls = signal({\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n if (!canAcceptAction()) {\n return;\n }\n if (isTyping()) {\n finishTyping();\n return;\n }\n if (hasChoices()) return;\n _onFinish();\n }\n },\n })\n\n const faceSheet = (faceValue) => {\n if (!faceValue || !faceValue.id) {\n return undefined;\n }\n return {\n definition: engine.getSpriteSheet(faceValue.id),\n playing: faceValue.expression || \"default\",\n };\n }\n\n mount((element) => {\n return () => {\n // Wait destroy is finished before start processing input\n delay(() => {\n engine.stopProcessingInput = false;\n })\n }\n })\n</script>\n"],"mappings":"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"}