@number10/jsx-phaser 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (689) hide show
  1. package/LICENSE +667 -0
  2. package/README.md +44 -0
  3. package/dist/_virtual/_commonjsHelpers.cjs +7 -0
  4. package/dist/_virtual/_commonjsHelpers.cjs.map +1 -0
  5. package/dist/_virtual/_commonjsHelpers.js +7 -0
  6. package/dist/_virtual/_commonjsHelpers.js.map +1 -0
  7. package/dist/_virtual/index.cjs +7 -0
  8. package/dist/_virtual/index.cjs.map +1 -0
  9. package/dist/_virtual/index.js +8 -0
  10. package/dist/_virtual/index.js.map +1 -0
  11. package/dist/animation/index.d.ts +7 -0
  12. package/dist/animation/index.d.ts.map +1 -0
  13. package/dist/camera/index.d.ts +5 -0
  14. package/dist/camera/index.d.ts.map +1 -0
  15. package/dist/camera/use-camera-fx.cjs +49 -0
  16. package/dist/camera/use-camera-fx.cjs.map +1 -0
  17. package/dist/camera/use-camera-fx.d.ts +25 -0
  18. package/dist/camera/use-camera-fx.d.ts.map +1 -0
  19. package/dist/camera/use-camera-fx.js +49 -0
  20. package/dist/camera/use-camera-fx.js.map +1 -0
  21. package/dist/clip/index.cjs +8 -0
  22. package/dist/clip/index.cjs.map +1 -0
  23. package/dist/clip/index.d.ts +3 -0
  24. package/dist/clip/index.d.ts.map +1 -0
  25. package/dist/clip/index.js +9 -0
  26. package/dist/clip/index.js.map +1 -0
  27. package/dist/clip/stencil-clip-depth.cjs +24 -0
  28. package/dist/clip/stencil-clip-depth.cjs.map +1 -0
  29. package/dist/clip/stencil-clip-depth.d.ts +10 -0
  30. package/dist/clip/stencil-clip-depth.d.ts.map +1 -0
  31. package/dist/clip/stencil-clip-depth.js +24 -0
  32. package/dist/clip/stencil-clip-depth.js.map +1 -0
  33. package/dist/clip/stencil-clip-extension.cjs +113 -0
  34. package/dist/clip/stencil-clip-extension.cjs.map +1 -0
  35. package/dist/clip/stencil-clip-extension.d.ts +18 -0
  36. package/dist/clip/stencil-clip-extension.d.ts.map +1 -0
  37. package/dist/clip/stencil-clip-extension.js +96 -0
  38. package/dist/clip/stencil-clip-extension.js.map +1 -0
  39. package/dist/clip/stencil-clip-fbo-bridge.cjs +46 -0
  40. package/dist/clip/stencil-clip-fbo-bridge.cjs.map +1 -0
  41. package/dist/clip/stencil-clip-fbo-bridge.d.ts +7 -0
  42. package/dist/clip/stencil-clip-fbo-bridge.d.ts.map +1 -0
  43. package/dist/clip/stencil-clip-fbo-bridge.js +46 -0
  44. package/dist/clip/stencil-clip-fbo-bridge.js.map +1 -0
  45. package/dist/clip/stencil-clip-renderer.cjs +300 -0
  46. package/dist/clip/stencil-clip-renderer.cjs.map +1 -0
  47. package/dist/clip/stencil-clip-renderer.d.ts +7 -0
  48. package/dist/clip/stencil-clip-renderer.d.ts.map +1 -0
  49. package/dist/clip/stencil-clip-renderer.js +300 -0
  50. package/dist/clip/stencil-clip-renderer.js.map +1 -0
  51. package/dist/clip/stencil-clip-state.cjs +84 -0
  52. package/dist/clip/stencil-clip-state.cjs.map +1 -0
  53. package/dist/clip/stencil-clip-state.d.ts +28 -0
  54. package/dist/clip/stencil-clip-state.d.ts.map +1 -0
  55. package/dist/clip/stencil-clip-state.js +84 -0
  56. package/dist/clip/stencil-clip-state.js.map +1 -0
  57. package/dist/clip/stencil-clip-types.d.ts +67 -0
  58. package/dist/clip/stencil-clip-types.d.ts.map +1 -0
  59. package/dist/clip/stencil-clip.cjs +138 -0
  60. package/dist/clip/stencil-clip.cjs.map +1 -0
  61. package/dist/clip/stencil-clip.d.ts +53 -0
  62. package/dist/clip/stencil-clip.d.ts.map +1 -0
  63. package/dist/clip/stencil-clip.js +122 -0
  64. package/dist/clip/stencil-clip.js.map +1 -0
  65. package/dist/colors/use-color-mode.cjs +28 -0
  66. package/dist/colors/use-color-mode.cjs.map +1 -0
  67. package/dist/colors/use-color-mode.d.ts +22 -0
  68. package/dist/colors/use-color-mode.d.ts.map +1 -0
  69. package/dist/colors/use-color-mode.js +28 -0
  70. package/dist/colors/use-color-mode.js.map +1 -0
  71. package/dist/colors/use-colors.cjs +45 -0
  72. package/dist/colors/use-colors.cjs.map +1 -0
  73. package/dist/colors/use-colors.d.ts +36 -0
  74. package/dist/colors/use-colors.d.ts.map +1 -0
  75. package/dist/colors/use-colors.js +45 -0
  76. package/dist/colors/use-colors.js.map +1 -0
  77. package/dist/components/DebugPanel.cjs +88 -0
  78. package/dist/components/DebugPanel.cjs.map +1 -0
  79. package/dist/components/DebugPanel.d.ts +45 -0
  80. package/dist/components/DebugPanel.d.ts.map +1 -0
  81. package/dist/components/DebugPanel.js +71 -0
  82. package/dist/components/DebugPanel.js.map +1 -0
  83. package/dist/components/appliers/applyBackground.cjs +89 -0
  84. package/dist/components/appliers/applyBackground.cjs.map +1 -0
  85. package/dist/components/appliers/applyBackground.d.ts +18 -0
  86. package/dist/components/appliers/applyBackground.d.ts.map +1 -0
  87. package/dist/components/appliers/applyBackground.js +89 -0
  88. package/dist/components/appliers/applyBackground.js.map +1 -0
  89. package/dist/components/appliers/applyGestures.cjs +85 -0
  90. package/dist/components/appliers/applyGestures.cjs.map +1 -0
  91. package/dist/components/appliers/applyGestures.d.ts +12 -0
  92. package/dist/components/appliers/applyGestures.d.ts.map +1 -0
  93. package/dist/components/appliers/applyGestures.js +68 -0
  94. package/dist/components/appliers/applyGestures.js.map +1 -0
  95. package/dist/components/appliers/applyGraphics.cjs +21 -0
  96. package/dist/components/appliers/applyGraphics.cjs.map +1 -0
  97. package/dist/components/appliers/applyGraphics.d.ts +13 -0
  98. package/dist/components/appliers/applyGraphics.d.ts.map +1 -0
  99. package/dist/components/appliers/applyGraphics.js +21 -0
  100. package/dist/components/appliers/applyGraphics.js.map +1 -0
  101. package/dist/components/appliers/applyGraphicsLayout.cjs +18 -0
  102. package/dist/components/appliers/applyGraphicsLayout.cjs.map +1 -0
  103. package/dist/components/appliers/applyGraphicsLayout.d.ts +13 -0
  104. package/dist/components/appliers/applyGraphicsLayout.d.ts.map +1 -0
  105. package/dist/components/appliers/applyGraphicsLayout.js +18 -0
  106. package/dist/components/appliers/applyGraphicsLayout.js.map +1 -0
  107. package/dist/components/appliers/applyImage.cjs +92 -0
  108. package/dist/components/appliers/applyImage.cjs.map +1 -0
  109. package/dist/components/appliers/applyImage.d.ts +47 -0
  110. package/dist/components/appliers/applyImage.d.ts.map +1 -0
  111. package/dist/components/appliers/applyImage.js +92 -0
  112. package/dist/components/appliers/applyImage.js.map +1 -0
  113. package/dist/components/appliers/applyImageLayout.cjs +18 -0
  114. package/dist/components/appliers/applyImageLayout.cjs.map +1 -0
  115. package/dist/components/appliers/applyImageLayout.d.ts +18 -0
  116. package/dist/components/appliers/applyImageLayout.d.ts.map +1 -0
  117. package/dist/components/appliers/applyImageLayout.js +18 -0
  118. package/dist/components/appliers/applyImageLayout.js.map +1 -0
  119. package/dist/components/appliers/applyLayout.cjs +108 -0
  120. package/dist/components/appliers/applyLayout.cjs.map +1 -0
  121. package/dist/components/appliers/applyLayout.d.ts +19 -0
  122. package/dist/components/appliers/applyLayout.d.ts.map +1 -0
  123. package/dist/components/appliers/applyLayout.js +91 -0
  124. package/dist/components/appliers/applyLayout.js.map +1 -0
  125. package/dist/components/appliers/applyNineSlice.cjs +37 -0
  126. package/dist/components/appliers/applyNineSlice.cjs.map +1 -0
  127. package/dist/components/appliers/applyNineSlice.d.ts +14 -0
  128. package/dist/components/appliers/applyNineSlice.d.ts.map +1 -0
  129. package/dist/components/appliers/applyNineSlice.js +37 -0
  130. package/dist/components/appliers/applyNineSlice.js.map +1 -0
  131. package/dist/components/appliers/applyNineSliceLayout.cjs +18 -0
  132. package/dist/components/appliers/applyNineSliceLayout.cjs.map +1 -0
  133. package/dist/components/appliers/applyNineSliceLayout.d.ts +18 -0
  134. package/dist/components/appliers/applyNineSliceLayout.d.ts.map +1 -0
  135. package/dist/components/appliers/applyNineSliceLayout.js +18 -0
  136. package/dist/components/appliers/applyNineSliceLayout.js.map +1 -0
  137. package/dist/components/appliers/applyParticles.cjs +46 -0
  138. package/dist/components/appliers/applyParticles.cjs.map +1 -0
  139. package/dist/components/appliers/applyParticles.d.ts +7 -0
  140. package/dist/components/appliers/applyParticles.d.ts.map +1 -0
  141. package/dist/components/appliers/applyParticles.js +46 -0
  142. package/dist/components/appliers/applyParticles.js.map +1 -0
  143. package/dist/components/appliers/applyParticlesLayout.cjs +7 -0
  144. package/dist/components/appliers/applyParticlesLayout.cjs.map +1 -0
  145. package/dist/components/appliers/applyParticlesLayout.d.ts +11 -0
  146. package/dist/components/appliers/applyParticlesLayout.d.ts.map +1 -0
  147. package/dist/components/appliers/applyParticlesLayout.js +7 -0
  148. package/dist/components/appliers/applyParticlesLayout.js.map +1 -0
  149. package/dist/components/appliers/applyPhaser.cjs +40 -0
  150. package/dist/components/appliers/applyPhaser.cjs.map +1 -0
  151. package/dist/components/appliers/applyPhaser.d.ts +24 -0
  152. package/dist/components/appliers/applyPhaser.d.ts.map +1 -0
  153. package/dist/components/appliers/applyPhaser.js +40 -0
  154. package/dist/components/appliers/applyPhaser.js.map +1 -0
  155. package/dist/components/appliers/applySprite.cjs +124 -0
  156. package/dist/components/appliers/applySprite.cjs.map +1 -0
  157. package/dist/components/appliers/applySprite.d.ts +13 -0
  158. package/dist/components/appliers/applySprite.d.ts.map +1 -0
  159. package/dist/components/appliers/applySprite.js +124 -0
  160. package/dist/components/appliers/applySprite.js.map +1 -0
  161. package/dist/components/appliers/applySpriteLayout.cjs +7 -0
  162. package/dist/components/appliers/applySpriteLayout.cjs.map +1 -0
  163. package/dist/components/appliers/applySpriteLayout.d.ts +17 -0
  164. package/dist/components/appliers/applySpriteLayout.d.ts.map +1 -0
  165. package/dist/components/appliers/applySpriteLayout.js +7 -0
  166. package/dist/components/appliers/applySpriteLayout.js.map +1 -0
  167. package/dist/components/appliers/applyText.cjs +142 -0
  168. package/dist/components/appliers/applyText.cjs.map +1 -0
  169. package/dist/components/appliers/applyText.d.ts +32 -0
  170. package/dist/components/appliers/applyText.d.ts.map +1 -0
  171. package/dist/components/appliers/applyText.js +142 -0
  172. package/dist/components/appliers/applyText.js.map +1 -0
  173. package/dist/components/appliers/applyTextLayout.cjs +16 -0
  174. package/dist/components/appliers/applyTextLayout.cjs.map +1 -0
  175. package/dist/components/appliers/applyTextLayout.d.ts +18 -0
  176. package/dist/components/appliers/applyTextLayout.d.ts.map +1 -0
  177. package/dist/components/appliers/applyTextLayout.js +16 -0
  178. package/dist/components/appliers/applyTextLayout.js.map +1 -0
  179. package/dist/components/appliers/applyTooltip.cjs +247 -0
  180. package/dist/components/appliers/applyTooltip.cjs.map +1 -0
  181. package/dist/components/appliers/applyTooltip.d.ts +16 -0
  182. package/dist/components/appliers/applyTooltip.d.ts.map +1 -0
  183. package/dist/components/appliers/applyTooltip.js +247 -0
  184. package/dist/components/appliers/applyTooltip.js.map +1 -0
  185. package/dist/components/appliers/applyTransform.cjs +61 -0
  186. package/dist/components/appliers/applyTransform.cjs.map +1 -0
  187. package/dist/components/appliers/applyTransform.d.ts +24 -0
  188. package/dist/components/appliers/applyTransform.d.ts.map +1 -0
  189. package/dist/components/appliers/applyTransform.js +61 -0
  190. package/dist/components/appliers/applyTransform.js.map +1 -0
  191. package/dist/components/backgroundImage.cjs +411 -0
  192. package/dist/components/backgroundImage.cjs.map +1 -0
  193. package/dist/components/backgroundImage.d.ts +14 -0
  194. package/dist/components/backgroundImage.d.ts.map +1 -0
  195. package/dist/components/backgroundImage.js +411 -0
  196. package/dist/components/backgroundImage.js.map +1 -0
  197. package/dist/components/creators/createBackground.cjs +18 -0
  198. package/dist/components/creators/createBackground.cjs.map +1 -0
  199. package/dist/components/creators/createBackground.d.ts +20 -0
  200. package/dist/components/creators/createBackground.d.ts.map +1 -0
  201. package/dist/components/creators/createBackground.js +18 -0
  202. package/dist/components/creators/createBackground.js.map +1 -0
  203. package/dist/components/creators/createGestures.cjs +51 -0
  204. package/dist/components/creators/createGestures.cjs.map +1 -0
  205. package/dist/components/creators/createGestures.d.ts +11 -0
  206. package/dist/components/creators/createGestures.d.ts.map +1 -0
  207. package/dist/components/creators/createGestures.js +34 -0
  208. package/dist/components/creators/createGestures.js.map +1 -0
  209. package/dist/components/creators/createGraphicsLayout.cjs +24 -0
  210. package/dist/components/creators/createGraphicsLayout.cjs.map +1 -0
  211. package/dist/components/creators/createGraphicsLayout.d.ts +12 -0
  212. package/dist/components/creators/createGraphicsLayout.d.ts.map +1 -0
  213. package/dist/components/creators/createGraphicsLayout.js +24 -0
  214. package/dist/components/creators/createGraphicsLayout.js.map +1 -0
  215. package/dist/components/creators/createImageLayout.cjs +16 -0
  216. package/dist/components/creators/createImageLayout.cjs.map +1 -0
  217. package/dist/components/creators/createImageLayout.d.ts +17 -0
  218. package/dist/components/creators/createImageLayout.d.ts.map +1 -0
  219. package/dist/components/creators/createImageLayout.js +16 -0
  220. package/dist/components/creators/createImageLayout.js.map +1 -0
  221. package/dist/components/creators/createLayout.cjs +61 -0
  222. package/dist/components/creators/createLayout.cjs.map +1 -0
  223. package/dist/components/creators/createLayout.d.ts +15 -0
  224. package/dist/components/creators/createLayout.d.ts.map +1 -0
  225. package/dist/components/creators/createLayout.js +61 -0
  226. package/dist/components/creators/createLayout.js.map +1 -0
  227. package/dist/components/creators/createNineSliceLayout.cjs +16 -0
  228. package/dist/components/creators/createNineSliceLayout.cjs.map +1 -0
  229. package/dist/components/creators/createNineSliceLayout.d.ts +17 -0
  230. package/dist/components/creators/createNineSliceLayout.d.ts.map +1 -0
  231. package/dist/components/creators/createNineSliceLayout.js +16 -0
  232. package/dist/components/creators/createNineSliceLayout.js.map +1 -0
  233. package/dist/components/creators/createParticlesLayout.cjs +8 -0
  234. package/dist/components/creators/createParticlesLayout.cjs.map +1 -0
  235. package/dist/components/creators/createParticlesLayout.d.ts +14 -0
  236. package/dist/components/creators/createParticlesLayout.d.ts.map +1 -0
  237. package/dist/components/creators/createParticlesLayout.js +8 -0
  238. package/dist/components/creators/createParticlesLayout.js.map +1 -0
  239. package/dist/components/creators/createPhaser.cjs +36 -0
  240. package/dist/components/creators/createPhaser.cjs.map +1 -0
  241. package/dist/components/creators/createPhaser.d.ts +14 -0
  242. package/dist/components/creators/createPhaser.d.ts.map +1 -0
  243. package/dist/components/creators/createPhaser.js +36 -0
  244. package/dist/components/creators/createPhaser.js.map +1 -0
  245. package/dist/components/creators/createSpriteLayout.cjs +10 -0
  246. package/dist/components/creators/createSpriteLayout.cjs.map +1 -0
  247. package/dist/components/creators/createSpriteLayout.d.ts +18 -0
  248. package/dist/components/creators/createSpriteLayout.d.ts.map +1 -0
  249. package/dist/components/creators/createSpriteLayout.js +10 -0
  250. package/dist/components/creators/createSpriteLayout.js.map +1 -0
  251. package/dist/components/creators/createTextLayout.cjs +16 -0
  252. package/dist/components/creators/createTextLayout.cjs.map +1 -0
  253. package/dist/components/creators/createTextLayout.d.ts +17 -0
  254. package/dist/components/creators/createTextLayout.d.ts.map +1 -0
  255. package/dist/components/creators/createTextLayout.js +16 -0
  256. package/dist/components/creators/createTextLayout.js.map +1 -0
  257. package/dist/components/creators/createTransform.cjs +83 -0
  258. package/dist/components/creators/createTransform.cjs.map +1 -0
  259. package/dist/components/creators/createTransform.d.ts +26 -0
  260. package/dist/components/creators/createTransform.d.ts.map +1 -0
  261. package/dist/components/creators/createTransform.js +83 -0
  262. package/dist/components/creators/createTransform.js.map +1 -0
  263. package/dist/components/custom/Graphics.cjs +13 -0
  264. package/dist/components/custom/Graphics.cjs.map +1 -0
  265. package/dist/components/custom/Graphics.d.ts +50 -0
  266. package/dist/components/custom/Graphics.d.ts.map +1 -0
  267. package/dist/components/custom/Graphics.js +13 -0
  268. package/dist/components/custom/Graphics.js.map +1 -0
  269. package/dist/components/custom/NineSlice.cjs +13 -0
  270. package/dist/components/custom/NineSlice.cjs.map +1 -0
  271. package/dist/components/custom/NineSlice.d.ts +87 -0
  272. package/dist/components/custom/NineSlice.d.ts.map +1 -0
  273. package/dist/components/custom/NineSlice.js +13 -0
  274. package/dist/components/custom/NineSlice.js.map +1 -0
  275. package/dist/components/custom/Particles.cjs +8 -0
  276. package/dist/components/custom/Particles.cjs.map +1 -0
  277. package/dist/components/custom/Particles.d.ts +28 -0
  278. package/dist/components/custom/Particles.d.ts.map +1 -0
  279. package/dist/components/custom/Particles.js +8 -0
  280. package/dist/components/custom/Particles.js.map +1 -0
  281. package/dist/components/custom/RefOriginView.cjs +67 -0
  282. package/dist/components/custom/RefOriginView.cjs.map +1 -0
  283. package/dist/components/custom/RefOriginView.d.ts +49 -0
  284. package/dist/components/custom/RefOriginView.d.ts.map +1 -0
  285. package/dist/components/custom/RefOriginView.js +67 -0
  286. package/dist/components/custom/RefOriginView.js.map +1 -0
  287. package/dist/components/custom/Sprite.cjs +13 -0
  288. package/dist/components/custom/Sprite.cjs.map +1 -0
  289. package/dist/components/custom/Sprite.d.ts +79 -0
  290. package/dist/components/custom/Sprite.d.ts.map +1 -0
  291. package/dist/components/custom/Sprite.js +13 -0
  292. package/dist/components/custom/Sprite.js.map +1 -0
  293. package/dist/components/custom/TileSprite.cjs +13 -0
  294. package/dist/components/custom/TileSprite.cjs.map +1 -0
  295. package/dist/components/custom/TileSprite.d.ts +65 -0
  296. package/dist/components/custom/TileSprite.d.ts.map +1 -0
  297. package/dist/components/custom/TileSprite.js +13 -0
  298. package/dist/components/custom/TileSprite.js.map +1 -0
  299. package/dist/components/custom/index.d.ts +15 -0
  300. package/dist/components/custom/index.d.ts.map +1 -0
  301. package/dist/components/index.cjs +33 -0
  302. package/dist/components/index.cjs.map +1 -0
  303. package/dist/components/index.d.ts +11 -0
  304. package/dist/components/index.d.ts.map +1 -0
  305. package/dist/components/index.js +33 -0
  306. package/dist/components/index.js.map +1 -0
  307. package/dist/components/internal/SceneWrapper.cjs +10 -0
  308. package/dist/components/internal/SceneWrapper.cjs.map +1 -0
  309. package/dist/components/internal/SceneWrapper.d.ts +20 -0
  310. package/dist/components/internal/SceneWrapper.d.ts.map +1 -0
  311. package/dist/components/internal/SceneWrapper.js +10 -0
  312. package/dist/components/internal/SceneWrapper.js.map +1 -0
  313. package/dist/components/primitives/graphics.cjs +29 -0
  314. package/dist/components/primitives/graphics.cjs.map +1 -0
  315. package/dist/components/primitives/graphics.d.ts +146 -0
  316. package/dist/components/primitives/graphics.d.ts.map +1 -0
  317. package/dist/components/primitives/graphics.js +29 -0
  318. package/dist/components/primitives/graphics.js.map +1 -0
  319. package/dist/components/primitives/image.cjs +110 -0
  320. package/dist/components/primitives/image.cjs.map +1 -0
  321. package/dist/components/primitives/image.d.ts +170 -0
  322. package/dist/components/primitives/image.d.ts.map +1 -0
  323. package/dist/components/primitives/image.js +110 -0
  324. package/dist/components/primitives/image.js.map +1 -0
  325. package/dist/components/primitives/nineslice.cjs +42 -0
  326. package/dist/components/primitives/nineslice.cjs.map +1 -0
  327. package/dist/components/primitives/nineslice.d.ts +271 -0
  328. package/dist/components/primitives/nineslice.d.ts.map +1 -0
  329. package/dist/components/primitives/nineslice.js +42 -0
  330. package/dist/components/primitives/nineslice.js.map +1 -0
  331. package/dist/components/primitives/particles.cjs +77 -0
  332. package/dist/components/primitives/particles.cjs.map +1 -0
  333. package/dist/components/primitives/particles.d.ts +47 -0
  334. package/dist/components/primitives/particles.d.ts.map +1 -0
  335. package/dist/components/primitives/particles.js +77 -0
  336. package/dist/components/primitives/particles.js.map +1 -0
  337. package/dist/components/primitives/sprite.cjs +100 -0
  338. package/dist/components/primitives/sprite.cjs.map +1 -0
  339. package/dist/components/primitives/sprite.d.ts +147 -0
  340. package/dist/components/primitives/sprite.d.ts.map +1 -0
  341. package/dist/components/primitives/sprite.js +100 -0
  342. package/dist/components/primitives/sprite.js.map +1 -0
  343. package/dist/components/primitives/text.cjs +73 -0
  344. package/dist/components/primitives/text.cjs.map +1 -0
  345. package/dist/components/primitives/text.d.ts +155 -0
  346. package/dist/components/primitives/text.d.ts.map +1 -0
  347. package/dist/components/primitives/text.js +73 -0
  348. package/dist/components/primitives/text.js.map +1 -0
  349. package/dist/components/primitives/tilesprite.cjs +77 -0
  350. package/dist/components/primitives/tilesprite.cjs.map +1 -0
  351. package/dist/components/primitives/tilesprite.d.ts +157 -0
  352. package/dist/components/primitives/tilesprite.d.ts.map +1 -0
  353. package/dist/components/primitives/tilesprite.js +77 -0
  354. package/dist/components/primitives/tilesprite.js.map +1 -0
  355. package/dist/components/primitives/vectorDraw.cjs +73 -0
  356. package/dist/components/primitives/vectorDraw.cjs.map +1 -0
  357. package/dist/components/primitives/vectorDraw.d.ts +4 -0
  358. package/dist/components/primitives/vectorDraw.d.ts.map +1 -0
  359. package/dist/components/primitives/vectorDraw.js +73 -0
  360. package/dist/components/primitives/vectorDraw.js.map +1 -0
  361. package/dist/components/primitives/view.cjs +105 -0
  362. package/dist/components/primitives/view.cjs.map +1 -0
  363. package/dist/components/primitives/view.d.ts +23 -0
  364. package/dist/components/primitives/view.d.ts.map +1 -0
  365. package/dist/components/primitives/view.js +105 -0
  366. package/dist/components/primitives/view.js.map +1 -0
  367. package/dist/core-props.d.ts +105 -0
  368. package/dist/core-props.d.ts.map +1 -0
  369. package/dist/core-types.d.ts +71 -0
  370. package/dist/core-types.d.ts.map +1 -0
  371. package/dist/design-tokens/resolve-theme-tokens.cjs +27 -0
  372. package/dist/design-tokens/resolve-theme-tokens.cjs.map +1 -0
  373. package/dist/design-tokens/resolve-theme-tokens.d.ts +9 -0
  374. package/dist/design-tokens/resolve-theme-tokens.d.ts.map +1 -0
  375. package/dist/design-tokens/resolve-theme-tokens.js +27 -0
  376. package/dist/design-tokens/resolve-theme-tokens.js.map +1 -0
  377. package/dist/design-tokens/use-theme-tokens.cjs +26 -0
  378. package/dist/design-tokens/use-theme-tokens.cjs.map +1 -0
  379. package/dist/design-tokens/use-theme-tokens.d.ts +28 -0
  380. package/dist/design-tokens/use-theme-tokens.d.ts.map +1 -0
  381. package/dist/design-tokens/use-theme-tokens.js +26 -0
  382. package/dist/design-tokens/use-theme-tokens.js.map +1 -0
  383. package/dist/effects/index.d.ts +2 -0
  384. package/dist/effects/index.d.ts.map +1 -0
  385. package/dist/effects/phaser-effects-bridge.cjs +48 -0
  386. package/dist/effects/phaser-effects-bridge.cjs.map +1 -0
  387. package/dist/effects/phaser-effects-bridge.d.ts +2 -0
  388. package/dist/effects/phaser-effects-bridge.d.ts.map +1 -0
  389. package/dist/effects/phaser-effects-bridge.js +30 -0
  390. package/dist/effects/phaser-effects-bridge.js.map +1 -0
  391. package/dist/effects/use-effect.cjs +155 -0
  392. package/dist/effects/use-effect.cjs.map +1 -0
  393. package/dist/effects/use-effect.d.ts +30 -0
  394. package/dist/effects/use-effect.d.ts.map +1 -0
  395. package/dist/effects/use-effect.js +155 -0
  396. package/dist/effects/use-effect.js.map +1 -0
  397. package/dist/fx/convenience-hooks/index.d.ts +7 -0
  398. package/dist/fx/convenience-hooks/index.d.ts.map +1 -0
  399. package/dist/fx/convenience-hooks/use-blur.cjs +18 -0
  400. package/dist/fx/convenience-hooks/use-blur.cjs.map +1 -0
  401. package/dist/fx/convenience-hooks/use-blur.d.ts +21 -0
  402. package/dist/fx/convenience-hooks/use-blur.d.ts.map +1 -0
  403. package/dist/fx/convenience-hooks/use-blur.js +18 -0
  404. package/dist/fx/convenience-hooks/use-blur.js.map +1 -0
  405. package/dist/fx/convenience-hooks/use-glow.cjs +18 -0
  406. package/dist/fx/convenience-hooks/use-glow.cjs.map +1 -0
  407. package/dist/fx/convenience-hooks/use-glow.d.ts +21 -0
  408. package/dist/fx/convenience-hooks/use-glow.d.ts.map +1 -0
  409. package/dist/fx/convenience-hooks/use-glow.js +18 -0
  410. package/dist/fx/convenience-hooks/use-glow.js.map +1 -0
  411. package/dist/fx/convenience-hooks/use-shadow.cjs +18 -0
  412. package/dist/fx/convenience-hooks/use-shadow.cjs.map +1 -0
  413. package/dist/fx/convenience-hooks/use-shadow.d.ts +21 -0
  414. package/dist/fx/convenience-hooks/use-shadow.d.ts.map +1 -0
  415. package/dist/fx/convenience-hooks/use-shadow.js +18 -0
  416. package/dist/fx/convenience-hooks/use-shadow.js.map +1 -0
  417. package/dist/fx/fx-creators/blur.cjs +20 -0
  418. package/dist/fx/fx-creators/blur.cjs.map +1 -0
  419. package/dist/fx/fx-creators/blur.d.ts +37 -0
  420. package/dist/fx/fx-creators/blur.d.ts.map +1 -0
  421. package/dist/fx/fx-creators/blur.js +20 -0
  422. package/dist/fx/fx-creators/blur.js.map +1 -0
  423. package/dist/fx/fx-creators/color-matrix.cjs +47 -0
  424. package/dist/fx/fx-creators/color-matrix.cjs.map +1 -0
  425. package/dist/fx/fx-creators/color-matrix.d.ts +31 -0
  426. package/dist/fx/fx-creators/color-matrix.d.ts.map +1 -0
  427. package/dist/fx/fx-creators/color-matrix.js +47 -0
  428. package/dist/fx/fx-creators/color-matrix.js.map +1 -0
  429. package/dist/fx/fx-creators/glow.cjs +27 -0
  430. package/dist/fx/fx-creators/glow.cjs.map +1 -0
  431. package/dist/fx/fx-creators/glow.d.ts +36 -0
  432. package/dist/fx/fx-creators/glow.d.ts.map +1 -0
  433. package/dist/fx/fx-creators/glow.js +27 -0
  434. package/dist/fx/fx-creators/glow.js.map +1 -0
  435. package/dist/fx/fx-creators/index.d.ts +10 -0
  436. package/dist/fx/fx-creators/index.d.ts.map +1 -0
  437. package/dist/fx/fx-creators/pixelate.cjs +20 -0
  438. package/dist/fx/fx-creators/pixelate.cjs.map +1 -0
  439. package/dist/fx/fx-creators/pixelate.d.ts +24 -0
  440. package/dist/fx/fx-creators/pixelate.d.ts.map +1 -0
  441. package/dist/fx/fx-creators/pixelate.js +20 -0
  442. package/dist/fx/fx-creators/pixelate.js.map +1 -0
  443. package/dist/fx/fx-creators/shadow.cjs +28 -0
  444. package/dist/fx/fx-creators/shadow.cjs.map +1 -0
  445. package/dist/fx/fx-creators/shadow.d.ts +43 -0
  446. package/dist/fx/fx-creators/shadow.d.ts.map +1 -0
  447. package/dist/fx/fx-creators/shadow.js +28 -0
  448. package/dist/fx/fx-creators/shadow.js.map +1 -0
  449. package/dist/fx/fx-creators/vignette.cjs +20 -0
  450. package/dist/fx/fx-creators/vignette.cjs.map +1 -0
  451. package/dist/fx/fx-creators/vignette.d.ts +33 -0
  452. package/dist/fx/fx-creators/vignette.d.ts.map +1 -0
  453. package/dist/fx/fx-creators/vignette.js +20 -0
  454. package/dist/fx/fx-creators/vignette.js.map +1 -0
  455. package/dist/fx/fx-registry.cjs +43 -0
  456. package/dist/fx/fx-registry.cjs.map +1 -0
  457. package/dist/fx/fx-registry.d.ts +59 -0
  458. package/dist/fx/fx-registry.d.ts.map +1 -0
  459. package/dist/fx/fx-registry.js +43 -0
  460. package/dist/fx/fx-registry.js.map +1 -0
  461. package/dist/fx/index.d.ts +51 -0
  462. package/dist/fx/index.d.ts.map +1 -0
  463. package/dist/fx/use-fx.cjs +54 -0
  464. package/dist/fx/use-fx.cjs.map +1 -0
  465. package/dist/fx/use-fx.d.ts +53 -0
  466. package/dist/fx/use-fx.d.ts.map +1 -0
  467. package/dist/fx/use-fx.js +54 -0
  468. package/dist/fx/use-fx.js.map +1 -0
  469. package/dist/gestures/gesture-manager.cjs +773 -0
  470. package/dist/gestures/gesture-manager.cjs.map +1 -0
  471. package/dist/gestures/gesture-manager.d.ts +158 -0
  472. package/dist/gestures/gesture-manager.d.ts.map +1 -0
  473. package/dist/gestures/gesture-manager.js +773 -0
  474. package/dist/gestures/gesture-manager.js.map +1 -0
  475. package/dist/gestures/gesture-types.cjs +9 -0
  476. package/dist/gestures/gesture-types.cjs.map +1 -0
  477. package/dist/gestures/gesture-types.d.ts +232 -0
  478. package/dist/gestures/gesture-types.d.ts.map +1 -0
  479. package/dist/gestures/gesture-types.js +9 -0
  480. package/dist/gestures/gesture-types.js.map +1 -0
  481. package/dist/hooks.cjs +193 -0
  482. package/dist/hooks.cjs.map +1 -0
  483. package/dist/hooks.d.ts +151 -0
  484. package/dist/hooks.d.ts.map +1 -0
  485. package/dist/hooks.js +146 -0
  486. package/dist/hooks.js.map +1 -0
  487. package/dist/host.cjs +85 -0
  488. package/dist/host.cjs.map +1 -0
  489. package/dist/host.d.ts +78 -0
  490. package/dist/host.d.ts.map +1 -0
  491. package/dist/host.js +85 -0
  492. package/dist/host.js.map +1 -0
  493. package/dist/index.cjs +614 -0
  494. package/dist/index.cjs.map +1 -0
  495. package/dist/index.d.ts +61 -0
  496. package/dist/index.d.ts.map +1 -0
  497. package/dist/index.js +273 -0
  498. package/dist/index.js.map +1 -0
  499. package/dist/jsx-dev-runtime.cjs +20 -0
  500. package/dist/jsx-dev-runtime.cjs.map +1 -0
  501. package/dist/jsx-dev-runtime.d.ts +8 -0
  502. package/dist/jsx-dev-runtime.d.ts.map +1 -0
  503. package/dist/jsx-dev-runtime.js +8 -0
  504. package/dist/jsx-dev-runtime.js.map +1 -0
  505. package/dist/jsx-runtime.cjs +16 -0
  506. package/dist/jsx-runtime.cjs.map +1 -0
  507. package/dist/jsx-runtime.d.ts +9 -0
  508. package/dist/jsx-runtime.d.ts.map +1 -0
  509. package/dist/jsx-runtime.js +7 -0
  510. package/dist/jsx-runtime.js.map +1 -0
  511. package/dist/jsx-types.d.ts +40 -0
  512. package/dist/jsx-types.d.ts.map +1 -0
  513. package/dist/layout/appliers/background-applier.cjs +40 -0
  514. package/dist/layout/appliers/background-applier.cjs.map +1 -0
  515. package/dist/layout/appliers/background-applier.d.ts +16 -0
  516. package/dist/layout/appliers/background-applier.d.ts.map +1 -0
  517. package/dist/layout/appliers/background-applier.js +40 -0
  518. package/dist/layout/appliers/background-applier.js.map +1 -0
  519. package/dist/layout/index.d.ts +5 -0
  520. package/dist/layout/index.d.ts.map +1 -0
  521. package/dist/layout/layout-engine-test-utils.d.ts +24 -0
  522. package/dist/layout/layout-engine-test-utils.d.ts.map +1 -0
  523. package/dist/layout/phaser-layout-bridge.cjs +41 -0
  524. package/dist/layout/phaser-layout-bridge.cjs.map +1 -0
  525. package/dist/layout/phaser-layout-bridge.d.ts +9 -0
  526. package/dist/layout/phaser-layout-bridge.d.ts.map +1 -0
  527. package/dist/layout/phaser-layout-bridge.js +40 -0
  528. package/dist/layout/phaser-layout-bridge.js.map +1 -0
  529. package/dist/layout/types.d.ts +14 -0
  530. package/dist/layout/types.d.ts.map +1 -0
  531. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.cjs +39 -0
  532. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.cjs.map +1 -0
  533. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js +39 -0
  534. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js.map +1 -0
  535. package/dist/particles/emit-zone.cjs +205 -0
  536. package/dist/particles/emit-zone.cjs.map +1 -0
  537. package/dist/particles/emit-zone.d.ts +88 -0
  538. package/dist/particles/emit-zone.d.ts.map +1 -0
  539. package/dist/particles/emit-zone.js +205 -0
  540. package/dist/particles/emit-zone.js.map +1 -0
  541. package/dist/particles/index.d.ts +8 -0
  542. package/dist/particles/index.d.ts.map +1 -0
  543. package/dist/particles/particle-types.d.ts +25 -0
  544. package/dist/particles/particle-types.d.ts.map +1 -0
  545. package/dist/particles/preset-registry.cjs +57 -0
  546. package/dist/particles/preset-registry.cjs.map +1 -0
  547. package/dist/particles/preset-registry.d.ts +49 -0
  548. package/dist/particles/preset-registry.d.ts.map +1 -0
  549. package/dist/particles/preset-registry.js +57 -0
  550. package/dist/particles/preset-registry.js.map +1 -0
  551. package/dist/particles/use-particles.cjs +67 -0
  552. package/dist/particles/use-particles.cjs.map +1 -0
  553. package/dist/particles/use-particles.d.ts +19 -0
  554. package/dist/particles/use-particles.d.ts.map +1 -0
  555. package/dist/particles/use-particles.js +67 -0
  556. package/dist/particles/use-particles.js.map +1 -0
  557. package/dist/particles/utils.cjs +82 -0
  558. package/dist/particles/utils.cjs.map +1 -0
  559. package/dist/particles/utils.d.ts +10 -0
  560. package/dist/particles/utils.d.ts.map +1 -0
  561. package/dist/particles/utils.js +82 -0
  562. package/dist/particles/utils.js.map +1 -0
  563. package/dist/phaser-bridges.cjs +148 -0
  564. package/dist/phaser-bridges.cjs.map +1 -0
  565. package/dist/phaser-bridges.d.ts +78 -0
  566. package/dist/phaser-bridges.d.ts.map +1 -0
  567. package/dist/phaser-bridges.js +131 -0
  568. package/dist/phaser-bridges.js.map +1 -0
  569. package/dist/phaser-host-adapter.cjs +148 -0
  570. package/dist/phaser-host-adapter.cjs.map +1 -0
  571. package/dist/phaser-host-adapter.d.ts +30 -0
  572. package/dist/phaser-host-adapter.d.ts.map +1 -0
  573. package/dist/phaser-host-adapter.js +148 -0
  574. package/dist/phaser-host-adapter.js.map +1 -0
  575. package/dist/phaser-runtime-types.d.ts +89 -0
  576. package/dist/phaser-runtime-types.d.ts.map +1 -0
  577. package/dist/phaser-surface-adapter.cjs +488 -0
  578. package/dist/phaser-surface-adapter.cjs.map +1 -0
  579. package/dist/phaser-surface-adapter.d.ts +74 -0
  580. package/dist/phaser-surface-adapter.d.ts.map +1 -0
  581. package/dist/phaser-surface-adapter.js +471 -0
  582. package/dist/phaser-surface-adapter.js.map +1 -0
  583. package/dist/phaser-vdom-runtime.cjs +63 -0
  584. package/dist/phaser-vdom-runtime.cjs.map +1 -0
  585. package/dist/phaser-vdom-runtime.d.ts +2 -0
  586. package/dist/phaser-vdom-runtime.d.ts.map +1 -0
  587. package/dist/phaser-vdom-runtime.js +63 -0
  588. package/dist/phaser-vdom-runtime.js.map +1 -0
  589. package/dist/plugin.cjs +182 -0
  590. package/dist/plugin.cjs.map +1 -0
  591. package/dist/plugin.d.ts +161 -0
  592. package/dist/plugin.d.ts.map +1 -0
  593. package/dist/plugin.js +165 -0
  594. package/dist/plugin.js.map +1 -0
  595. package/dist/render-context.cjs +106 -0
  596. package/dist/render-context.cjs.map +1 -0
  597. package/dist/render-context.d.ts +66 -0
  598. package/dist/render-context.d.ts.map +1 -0
  599. package/dist/render-context.js +106 -0
  600. package/dist/render-context.js.map +1 -0
  601. package/dist/scene-backgrounds.cjs +285 -0
  602. package/dist/scene-backgrounds.cjs.map +1 -0
  603. package/dist/scene-backgrounds.d.ts +69 -0
  604. package/dist/scene-backgrounds.d.ts.map +1 -0
  605. package/dist/scene-backgrounds.js +268 -0
  606. package/dist/scene-backgrounds.js.map +1 -0
  607. package/dist/theme-base.d.ts +133 -0
  608. package/dist/theme-base.d.ts.map +1 -0
  609. package/dist/theme-custom.d.ts +13 -0
  610. package/dist/theme-custom.d.ts.map +1 -0
  611. package/dist/theme-defaults.cjs +29 -0
  612. package/dist/theme-defaults.cjs.map +1 -0
  613. package/dist/theme-defaults.d.ts +1 -0
  614. package/dist/theme-defaults.d.ts.map +1 -0
  615. package/dist/theme-defaults.js +28 -0
  616. package/dist/theme-defaults.js.map +1 -0
  617. package/dist/theme.cjs +34 -0
  618. package/dist/theme.cjs.map +1 -0
  619. package/dist/theme.d.ts +36 -0
  620. package/dist/theme.d.ts.map +1 -0
  621. package/dist/theme.js +32 -0
  622. package/dist/theme.js.map +1 -0
  623. package/dist/tooltip/tooltip-types.d.ts +6 -0
  624. package/dist/tooltip/tooltip-types.d.ts.map +1 -0
  625. package/dist/types.d.ts +22 -0
  626. package/dist/types.d.ts.map +1 -0
  627. package/dist/utils/KeyboardInputManager.cjs +112 -0
  628. package/dist/utils/KeyboardInputManager.cjs.map +1 -0
  629. package/dist/utils/KeyboardInputManager.d.ts +48 -0
  630. package/dist/utils/KeyboardInputManager.d.ts.map +1 -0
  631. package/dist/utils/KeyboardInputManager.js +112 -0
  632. package/dist/utils/KeyboardInputManager.js.map +1 -0
  633. package/dist/utils/dom-input-manager.cjs +253 -0
  634. package/dist/utils/dom-input-manager.cjs.map +1 -0
  635. package/dist/utils/dom-input-manager.d.ts +113 -0
  636. package/dist/utils/dom-input-manager.d.ts.map +1 -0
  637. package/dist/utils/dom-input-manager.js +253 -0
  638. package/dist/utils/dom-input-manager.js.map +1 -0
  639. package/dist/utils/fast-deep-equal.cjs +7 -0
  640. package/dist/utils/fast-deep-equal.cjs.map +1 -0
  641. package/dist/utils/fast-deep-equal.d.ts +4 -0
  642. package/dist/utils/fast-deep-equal.d.ts.map +1 -0
  643. package/dist/utils/fast-deep-equal.js +7 -0
  644. package/dist/utils/fast-deep-equal.js.map +1 -0
  645. package/dist/utils/image-subtexture-registry.cjs +98 -0
  646. package/dist/utils/image-subtexture-registry.cjs.map +1 -0
  647. package/dist/utils/image-subtexture-registry.d.ts +17 -0
  648. package/dist/utils/image-subtexture-registry.d.ts.map +1 -0
  649. package/dist/utils/image-subtexture-registry.js +98 -0
  650. package/dist/utils/image-subtexture-registry.js.map +1 -0
  651. package/dist/utils/phaser-guards.cjs +15 -0
  652. package/dist/utils/phaser-guards.cjs.map +1 -0
  653. package/dist/utils/phaser-guards.d.ts +7 -0
  654. package/dist/utils/phaser-guards.d.ts.map +1 -0
  655. package/dist/utils/phaser-guards.js +15 -0
  656. package/dist/utils/phaser-guards.js.map +1 -0
  657. package/dist/utils/svg-texture.cjs +48 -0
  658. package/dist/utils/svg-texture.cjs.map +1 -0
  659. package/dist/utils/svg-texture.d.ts +34 -0
  660. package/dist/utils/svg-texture.d.ts.map +1 -0
  661. package/dist/utils/svg-texture.js +48 -0
  662. package/dist/utils/svg-texture.js.map +1 -0
  663. package/dist/utils/texture-registry.cjs +117 -0
  664. package/dist/utils/texture-registry.cjs.map +1 -0
  665. package/dist/utils/texture-registry.d.ts +53 -0
  666. package/dist/utils/texture-registry.d.ts.map +1 -0
  667. package/dist/utils/texture-registry.js +117 -0
  668. package/dist/utils/texture-registry.js.map +1 -0
  669. package/dist/vdom-host-types.d.ts +12 -0
  670. package/dist/vdom-host-types.d.ts.map +1 -0
  671. package/dist/vdom-registry.d.ts +27 -0
  672. package/dist/vdom-registry.d.ts.map +1 -0
  673. package/dist/vdom-utils.d.ts +16 -0
  674. package/dist/vdom-utils.d.ts.map +1 -0
  675. package/dist/vdom.cjs +36 -0
  676. package/dist/vdom.cjs.map +1 -0
  677. package/dist/vdom.d.ts +23 -0
  678. package/dist/vdom.d.ts.map +1 -0
  679. package/dist/vdom.js +36 -0
  680. package/dist/vdom.js.map +1 -0
  681. package/dist/vector/PhaserVectorDrawContext.cjs +97 -0
  682. package/dist/vector/PhaserVectorDrawContext.cjs.map +1 -0
  683. package/dist/vector/PhaserVectorDrawContext.d.ts +27 -0
  684. package/dist/vector/PhaserVectorDrawContext.d.ts.map +1 -0
  685. package/dist/vector/PhaserVectorDrawContext.js +97 -0
  686. package/dist/vector/PhaserVectorDrawContext.js.map +1 -0
  687. package/dist/vector/index.d.ts +2 -0
  688. package/dist/vector/index.d.ts.map +1 -0
  689. package/package.json +96 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gesture-manager.js","sources":["../../src/gestures/gesture-manager.ts"],"sourcesContent":["/**\n * Global gesture manager for high-level touch and mouse interactions\n * Uses global Phaser input events to track gestures even when pointer moves outside bounds\n *\n * @migration(audit:phase-2b-surface-portal-mount) Phase 2B decision — GestureManager\n * bleibt Phaser-spezifisch. Die Priorisierungslogik für getrennte Root-Surfaces\n * läuft über RootSurface.zIndex via __surfaceZIndex.\n */\nimport * as Phaser from 'phaser'\nimport type {\n GestureCallbacks,\n GestureConfig,\n GestureContainerState,\n GestureEventData,\n HoverEventData,\n WheelEventData,\n} from './gesture-types'\nimport { DEFAULT_GESTURE_CONFIG } from './gesture-types'\n\n/**\n * Manager for gesture detection across all containers in a scene\n * Singleton per scene, stored in scene.data\n */\nexport class GestureManager {\n private scene: Phaser.Scene\n private containers = new Map<Phaser.GameObjects.Container, GestureContainerState>()\n\n // Track pointer positions for delta calculation\n private lastPointerPositions = new Map<number, { x: number; y: number }>()\n\n // Track active pointer down for touch detection\n private activePointerDown: {\n pointerId: number\n container: Phaser.GameObjects.Container\n touchContainer?: Phaser.GameObjects.Container\n longPressContainer?: Phaser.GameObjects.Container\n doubleTapContainer?: Phaser.GameObjects.Container\n startX: number\n startY: number\n } | null = null\n\n // Track which containers were hit during pointer down (for move event filtering)\n private activeContainersForMove = new Map<number, Set<Phaser.GameObjects.Container>>()\n\n // Track hover state for each container (desktop/mouse only)\n private hoveredContainers = new Map<Phaser.GameObjects.Container, boolean>()\n\n // Track pending setTimeout timers for cleanup\n private pendingTimeouts = new Set<number>()\n\n private isInitialized = false\n private isDestroyed = false\n\n constructor(scene: Phaser.Scene) {\n this.scene = scene\n }\n\n /**\n * Initialize global event listeners (called once per scene)\n */\n private initialize(): void {\n if (this.isInitialized) return\n this.isInitialized = true\n\n // Global pointer down - detect which container was hit\n this.scene.input.on('pointerdown', this.handlePointerDown, this)\n\n // Global pointer up - check for touch/tap completion\n this.scene.input.on('pointerup', this.handlePointerUp, this)\n\n // Global pointer move - track deltas and notify all relevant containers\n this.scene.input.on('pointermove', this.handlePointerMove, this)\n\n // Handle pointer up outside canvas (window-level events)\n // This ensures we catch pointer release even when it happens outside the game canvas\n this.handleGlobalPointerUp = this.handleGlobalPointerUp.bind(this)\n window.addEventListener('mouseup', this.handleGlobalPointerUp)\n window.addEventListener('touchend', this.handleGlobalPointerUp)\n\n // Handle mouse wheel events (desktop only)\n // Use window instead of canvas to ensure we catch all wheel events\n this.handleWheel = this.handleWheel.bind(this)\n window.addEventListener('wheel', this.handleWheel, { passive: false })\n\n // Cleanup on scene shutdown\n this.scene.events.once('shutdown', this.destroy, this)\n }\n\n /**\n * Register a container for gesture tracking\n * @param container - Container to track\n * @param callbacks - Gesture event callbacks\n * @param hitArea - Interactive hit area\n * @param config - Gesture configuration\n */\n registerContainer(\n container: Phaser.GameObjects.Container,\n callbacks: GestureCallbacks,\n hitArea: Phaser.Geom.Rectangle,\n config: GestureConfig = {}\n ): void {\n this.initialize()\n\n const state: GestureContainerState = {\n container,\n callbacks,\n config: { ...DEFAULT_GESTURE_CONFIG, ...config },\n hitArea,\n }\n\n this.containers.set(container, state)\n\n // Cleanup when container is destroyed\n container.once('destroy', () => {\n this.unregisterContainer(container)\n })\n }\n\n /**\n * Unregister a container\n * @param container - Container to remove\n */\n unregisterContainer(container: Phaser.GameObjects.Container): void {\n const state = this.containers.get(container)\n if (!state) return\n\n // Clear any pending timers\n if (state.longPressTimer) {\n clearTimeout(state.longPressTimer)\n }\n\n this.containers.delete(container)\n\n // If this was the active pointer down target, clear it\n if (this.activePointerDown?.container === container) {\n this.activePointerDown = null\n }\n\n // Clear hover state\n this.hoveredContainers.delete(container)\n\n // Remove from active move tracking\n for (const hitContainers of this.activeContainersForMove.values()) {\n hitContainers.delete(container)\n }\n }\n\n /**\n * Check if a container is registered\n * @param container - Container to check\n * @returns True if container is registered\n */\n hasContainer(container: Phaser.GameObjects.Container): boolean {\n return this.containers.has(container)\n }\n\n /**\n * Create a gesture event data object with propagation control\n * @param pointer - Phaser pointer\n * @param localX - Local X coordinate\n * @param localY - Local Y coordinate\n * @param width - Hit area width\n * @param height - Hit area height\n * @param options - Optional additional data (dx, dy, isInside, state)\n * @returns Event data with stopPropagation support\n */\n private createEventData(\n pointer: Phaser.Input.Pointer,\n localX: number,\n localY: number,\n width: number,\n height: number,\n options: {\n dx?: number\n dy?: number\n isInside?: boolean\n state?: 'start' | 'move' | 'end'\n } = {}\n ): GestureEventData {\n let propagationStopped = false\n\n return {\n pointer,\n localX,\n localY,\n width,\n height,\n ...options,\n stopPropagation() {\n propagationStopped = true\n },\n isPropagationStopped() {\n return propagationStopped\n },\n }\n }\n\n /**\n * Get effective depth considering entire parent hierarchy\n * @param container - Container to calculate depth for\n * @returns Accumulated depth from container and all parents\n */\n private getEffectiveDepth(container: Phaser.GameObjects.Container): number {\n let depth = container.depth\n let parent = container.parentContainer\n\n // Walk up parent chain and accumulate depths\n while (parent) {\n depth += parent.depth\n parent = parent.parentContainer\n }\n\n return depth\n }\n\n /**\n * Get surface zIndex from container hierarchy.\n * Walks up to find the topmost container with __surfaceZIndex.\n * The topmost marker wins so portal roots can lift all descendants above scene roots.\n *\n * @param container - Container to check\n * @returns Surface zIndex or 0 if none found\n */\n private getSurfaceZIndex(container: Phaser.GameObjects.Container): number {\n let current: Phaser.GameObjects.Container | null = container\n let zIndex = 0\n\n while (current) {\n const surfaceZIndex = (current as unknown as { __surfaceZIndex?: number }).__surfaceZIndex\n if (surfaceZIndex !== undefined) {\n zIndex = surfaceZIndex\n }\n current = current.parentContainer\n }\n\n return zIndex\n }\n\n private isAncestorOf(\n ancestor: Phaser.GameObjects.Container,\n descendant: Phaser.GameObjects.Container\n ): boolean {\n let current = descendant.parentContainer\n while (current) {\n if (current === ancestor) {\n return true\n }\n current = current.parentContainer\n }\n return false\n }\n\n private compareContainers(\n a: { state: GestureContainerState; originalIndex: number },\n b: { state: GestureContainerState; originalIndex: number }\n ): number {\n const containerA = a.state.container\n const containerB = b.state.container\n\n const rootZIndexA = this.getSurfaceZIndex(containerA)\n const rootZIndexB = this.getSurfaceZIndex(containerB)\n if (rootZIndexA !== rootZIndexB) {\n return rootZIndexB - rootZIndexA\n }\n\n const depthA = this.getEffectiveDepth(containerA)\n const depthB = this.getEffectiveDepth(containerB)\n if (depthA !== depthB) {\n return depthB - depthA\n }\n\n if (this.isAncestorOf(containerA, containerB)) {\n return 1\n }\n if (this.isAncestorOf(containerB, containerA)) {\n return -1\n }\n\n if (containerA.parentContainer === containerB.parentContainer && containerA.parentContainer) {\n const indexA = containerA.parentContainer.getIndex(containerA)\n const indexB = containerA.parentContainer.getIndex(containerB)\n const diff = indexB - indexA\n if (diff !== 0) return diff\n }\n\n return b.originalIndex - a.originalIndex\n }\n\n /**\n * Bubble an event through overlapping containers\n * Iterates all containers at pointer position and calls handler until stopPropagation\n * Sorts containers by their actual display list order (z-index) to respect visual stacking\n * @param pointer - The pointer that triggered the event\n * @param eventType - Type of event for filtering callbacks\n * @param handler - Function to call for each container, returns true if propagation stopped\n * @param filterSet - Optional set of containers to limit bubbling to (for move events)\n * @param skipContainerCheck - Skip the isPointerInContainer check (for final move events)\n */\n private bubbleEvent(\n pointer: Phaser.Input.Pointer,\n eventType: keyof GestureCallbacks,\n handler: (state: GestureContainerState, localPos: { x: number; y: number }) => boolean | void,\n filterSet?: Set<Phaser.GameObjects.Container>,\n skipContainerCheck = false\n ): void {\n // Get all containers at pointer position with their original indices\n const containersArray = Array.from(this.containers.values()).map((state, originalIndex) => ({\n state,\n originalIndex,\n }))\n\n // Sort by visual stacking across surfaces, depth, and hierarchy.\n containersArray.sort((a, b) => this.compareContainers(a, b))\n\n for (const { state } of containersArray) {\n // Only process containers that have the callback for this event type\n if (!state.callbacks[eventType]) continue\n\n // If filterSet provided, only process containers in the set\n if (filterSet && !filterSet.has(state.container)) continue\n\n // Check if pointer is within this container (unless skipContainerCheck is true)\n if (!skipContainerCheck && !this.isPointerInContainer(pointer, state)) continue\n\n // Calculate local position\n const localPos = this.getLocalPosition(pointer, state.container)\n\n // Call handler and check if propagation was stopped\n const stopped = handler(state, localPos)\n if (stopped) break\n }\n }\n\n /**\n * Update hit area for a container\n * @param container - Container to update\n * @param hitArea - New hit area\n */\n updateHitArea(container: Phaser.GameObjects.Container, hitArea: Phaser.Geom.Rectangle): void {\n const state = this.containers.get(container)\n if (state) {\n state.hitArea = hitArea\n }\n }\n\n /**\n * Update callbacks for a container\n * @param container - Container to update\n * @param callbacks - New callbacks\n */\n updateCallbacks(container: Phaser.GameObjects.Container, callbacks: GestureCallbacks): void {\n const state = this.containers.get(container)\n if (state) {\n state.callbacks = callbacks\n }\n }\n\n /**\n * Handle global pointer down event\n * Registers all containers that were hit for move event tracking\n * Only the topmost gets touch/long-press callbacks\n */\n private handlePointerDown(pointer: Phaser.Input.Pointer): void {\n // Create set to track all hit containers for this pointer\n const hitContainers = new Set<Phaser.GameObjects.Container>()\n\n // Find which containers were hit\n const containersArray = Array.from(this.containers.values()).map((state, originalIndex) => ({\n state,\n originalIndex,\n }))\n containersArray.sort((a, b) => this.compareContainers(a, b))\n\n let isFirstHit = true\n let topmostTouchContainer: Phaser.GameObjects.Container | undefined\n let topmostLongPressContainer: Phaser.GameObjects.Container | undefined\n let topmostDoubleTapContainer: Phaser.GameObjects.Container | undefined\n const pointerDownTime = Date.now()\n\n for (const { state } of containersArray) {\n const isHit = this.isPointerInContainer(pointer, state)\n if (isHit) {\n // Add to hit set (for move event filtering)\n hitContainers.add(state.container)\n\n // Track topmost containers per gesture type\n if (!topmostTouchContainer && state.callbacks.onTouch) {\n topmostTouchContainer = state.container\n state.pointerDownTime = pointerDownTime\n state.longPressTriggered = false\n }\n if (!topmostLongPressContainer && state.callbacks.onLongPress) {\n topmostLongPressContainer = state.container\n state.pointerDownTime = pointerDownTime\n state.longPressTriggered = false\n }\n if (!topmostDoubleTapContainer && state.callbacks.onDoubleTap) {\n topmostDoubleTapContainer = state.container\n state.pointerDownTime = pointerDownTime\n state.longPressTriggered = false\n }\n\n // Only the first (topmost) hit gets touch/long-press handling\n if (isFirstHit) {\n isFirstHit = false\n\n // Store active pointer down for touch detection\n this.activePointerDown = {\n pointerId: pointer.id,\n container: state.container,\n startX: pointer.worldX,\n startY: pointer.worldY,\n }\n\n if (topmostTouchContainer) {\n this.activePointerDown.touchContainer = topmostTouchContainer\n }\n if (topmostLongPressContainer) {\n this.activePointerDown.longPressContainer = topmostLongPressContainer\n }\n if (topmostDoubleTapContainer) {\n this.activePointerDown.doubleTapContainer = topmostDoubleTapContainer\n }\n\n // Store down position for tracking\n state.pointerDownPosition = { x: pointer.worldX, y: pointer.worldY }\n }\n }\n }\n\n // Update active pointer with final topmost gesture targets (in case first hit had none)\n if (this.activePointerDown) {\n if (topmostTouchContainer) {\n this.activePointerDown.touchContainer = topmostTouchContainer\n }\n if (topmostLongPressContainer) {\n this.activePointerDown.longPressContainer = topmostLongPressContainer\n }\n if (topmostDoubleTapContainer) {\n this.activePointerDown.doubleTapContainer = topmostDoubleTapContainer\n }\n }\n\n // Start long press timer on the topmost container that actually has onLongPress\n if (topmostLongPressContainer) {\n const longPressState = this.containers.get(topmostLongPressContainer)\n if (longPressState?.callbacks.onLongPress) {\n const localPos = this.getLocalPosition(pointer, longPressState.container)\n\n longPressState.longPressTimer = setTimeout(() => {\n if (this.activePointerDown?.longPressContainer === longPressState.container) {\n const isInside = this.isPointerInContainer(pointer, longPressState)\n const data = this.createEventData(\n pointer,\n localPos.x,\n localPos.y,\n longPressState.hitArea.width,\n longPressState.hitArea.height,\n { isInside }\n )\n longPressState.callbacks.onLongPress?.(data)\n\n // Mark that long press was triggered to prevent onTouch/onDoubleTap\n longPressState.longPressTriggered = true\n }\n }, longPressState.config.longPressDuration)\n }\n }\n\n // Store hit containers for move event filtering\n if (hitContainers.size > 0) {\n this.activeContainersForMove.set(pointer.id, hitContainers)\n\n // Send initial onTouchMove with 'start' state to all hit containers\n this.bubbleEvent(\n pointer,\n 'onTouchMove',\n (targetState, targetLocalPos) => {\n const isInside = this.isPointerInContainer(pointer, targetState)\n const data = this.createEventData(\n pointer,\n targetLocalPos.x,\n targetLocalPos.y,\n targetState.hitArea.width,\n targetState.hitArea.height,\n { dx: 0, dy: 0, isInside, state: 'start' }\n )\n targetState.callbacks.onTouchMove?.(data)\n\n // Mark that first move has been sent\n targetState.isFirstMove = false\n\n return data.isPropagationStopped()\n },\n hitContainers\n )\n }\n }\n\n /**\n * Handle global pointer up event\n */\n private handlePointerUp(pointer: Phaser.Input.Pointer): void {\n if (!this.activePointerDown || this.activePointerDown.pointerId !== pointer.id) {\n return\n }\n\n const activeState = this.containers.get(this.activePointerDown.container)\n if (!activeState) {\n this.activePointerDown = null\n return\n }\n\n const touchState =\n (this.activePointerDown.touchContainer &&\n this.containers.get(this.activePointerDown.touchContainer)) ||\n activeState\n const longPressState =\n this.activePointerDown.longPressContainer &&\n this.containers.get(this.activePointerDown.longPressContainer)\n const doubleTapState =\n this.activePointerDown.doubleTapContainer &&\n this.containers.get(this.activePointerDown.doubleTapContainer)\n\n // Clear long press timer on the actual long-press target\n if (longPressState?.longPressTimer) {\n clearTimeout(longPressState.longPressTimer)\n longPressState.longPressTimer = undefined\n }\n\n const now = Date.now()\n const touchDuration = touchState.pointerDownTime ? now - touchState.pointerDownTime : 0\n const isTouchTooLong = touchDuration > touchState.config.maxTouchDuration\n const longPressWasTriggered =\n !!touchState.longPressTriggered || !!longPressState?.longPressTriggered\n\n // Send final move event to containers that were hit during pointer down\n const last = this.lastPointerPositions.get(pointer.id)\n const dx = last ? pointer.worldX - last.x : 0\n const dy = last ? pointer.worldY - last.y : 0\n const hitContainers = this.activeContainersForMove.get(pointer.id)\n\n this.bubbleEvent(\n pointer,\n 'onTouchMove',\n (targetState, targetLocalPos) => {\n const isInside = this.isPointerInContainer(pointer, targetState)\n const finalMoveData = this.createEventData(\n pointer,\n targetLocalPos.x,\n targetLocalPos.y,\n targetState.hitArea.width,\n targetState.hitArea.height,\n { dx, dy, isInside, state: 'end' }\n )\n targetState.callbacks.onTouchMove?.(finalMoveData)\n\n // Reset first move flag for this container\n targetState.isFirstMove = undefined\n\n return finalMoveData.isPropagationStopped()\n },\n hitContainers,\n true // Skip container check for final move event\n )\n\n // Check if pointer is still within the container (basic tap/click detection)\n const isInsideTouchTarget = this.isPointerInContainer(pointer, touchState)\n\n if (isInsideTouchTarget) {\n // Fire onTouch only if:\n // - Long press wasn't triggered\n // - Touch duration is within acceptable range (not held too long)\n const shouldFireTouch = !longPressWasTriggered && !isTouchTooLong\n\n // Bubble onTouch event to parent containers\n if (touchState.callbacks.onTouch && shouldFireTouch) {\n this.bubbleEvent(pointer, 'onTouch', (targetState, targetLocalPos) => {\n const isInside = this.isPointerInContainer(pointer, targetState)\n const data = this.createEventData(\n pointer,\n targetLocalPos.x,\n targetLocalPos.y,\n targetState.hitArea.width,\n targetState.hitArea.height,\n { isInside }\n )\n targetState.callbacks.onTouch?.(data)\n return data.isPropagationStopped()\n })\n }\n\n // Check for double tap (also skip if touch was too long)\n if (doubleTapState && shouldFireTouch && this.isPointerInContainer(pointer, doubleTapState)) {\n const timeSinceLastTap = doubleTapState.lastTapTime\n ? now - doubleTapState.lastTapTime\n : Infinity\n\n if (timeSinceLastTap <= doubleTapState.config.doubleTapDelay) {\n this.bubbleEvent(pointer, 'onDoubleTap', (targetState, targetLocalPos) => {\n const isInside = this.isPointerInContainer(pointer, targetState)\n const data = this.createEventData(\n pointer,\n targetLocalPos.x,\n targetLocalPos.y,\n targetState.hitArea.width,\n targetState.hitArea.height,\n { isInside }\n )\n targetState.callbacks.onDoubleTap?.(data)\n return data.isPropagationStopped()\n })\n doubleTapState.lastTapTime = undefined // Reset to prevent triple-tap\n } else {\n doubleTapState.lastTapTime = now\n }\n }\n }\n\n // Fire onTouchOutside for ALL containers where pointer is outside\n for (const [container, containerState] of this.containers) {\n if (!containerState.callbacks.onTouchOutside) continue\n\n const isInsideContainer = this.isPointerInContainer(pointer, containerState)\n if (isInsideContainer) continue // Skip if pointer is inside\n\n // Fire onTouchOutside - no touch duration check needed for outside clicks\n const localPos = this.getLocalPosition(pointer, container)\n const data = this.createEventData(\n pointer,\n localPos.x,\n localPos.y,\n containerState.hitArea.width,\n containerState.hitArea.height,\n { isInside: false }\n )\n containerState.callbacks.onTouchOutside(data)\n }\n\n // Reset state\n touchState.longPressTriggered = false\n touchState.pointerDownTime = undefined\n if (longPressState && longPressState !== touchState) {\n longPressState.longPressTriggered = false\n longPressState.pointerDownTime = undefined\n }\n if (doubleTapState && doubleTapState !== touchState && doubleTapState !== longPressState) {\n doubleTapState.longPressTriggered = false\n doubleTapState.pointerDownTime = undefined\n }\n\n this.activePointerDown = null\n activeState.pointerDownPosition = undefined\n\n // Clear active containers for move tracking\n this.activeContainersForMove.delete(pointer.id)\n }\n\n /**\n * Handle pointer up outside canvas (global window events)\n * Ensures touch move 'end' state is sent even when pointer released outside\n * Also handles onTouchOutside for ALL containers\n */\n private handleGlobalPointerUp(_event: MouseEvent | TouchEvent): void {\n // Use setTimeout to let Phaser's handlePointerUp run first (if inside canvas)\n const timerId = window.setTimeout(() => {\n // Remove timer from tracking\n this.pendingTimeouts.delete(timerId)\n\n // Guard: Check if manager is destroyed or scene is invalid\n if (this.isDestroyed || !this.scene || !this.scene.input) {\n return\n }\n\n // CRITICAL: activePointer is a getter that can throw if scene is being destroyed\n // Wrap in try-catch to handle race condition during scene destruction\n let pointer: Phaser.Input.Pointer | null = null\n try {\n pointer = this.scene.input.activePointer\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n // Scene is being destroyed, silently ignore\n return\n }\n\n if (!pointer) {\n return\n }\n\n // Fire onTouchOutside for ALL containers that have the callback\n // and where the pointer is NOT inside\n for (const state of this.containers.values()) {\n if (!state.callbacks.onTouchOutside) continue\n\n const isInside = this.isPointerInContainer(pointer, state)\n if (isInside) continue // Skip if pointer is inside\n\n // Check if touch duration is valid\n const touchDuration = state.pointerDownTime ? Date.now() - state.pointerDownTime : 0\n const isTouchTooLong = touchDuration > state.config.maxTouchDuration\n const shouldFire = !state.longPressTriggered && !isTouchTooLong\n\n if (shouldFire) {\n const localPos = this.getLocalPosition(pointer, state.container)\n const data = this.createEventData(\n pointer,\n localPos.x,\n localPos.y,\n state.hitArea.width,\n state.hitArea.height,\n { isInside: false }\n )\n state.callbacks.onTouchOutside?.(data)\n }\n }\n\n // If no activePointerDown, we're done\n if (!this.activePointerDown) return\n\n const state = this.containers.get(this.activePointerDown.container)\n if (!state) {\n this.activePointerDown = null\n return\n }\n\n // Clear long press timer if still pending\n if (state.longPressTimer) {\n clearTimeout(state.longPressTimer)\n state.longPressTimer = undefined\n }\n\n // Send final move event with 'end' state to all active containers\n const last = this.lastPointerPositions.get(pointer.id)\n const dx = last ? pointer.worldX - last.x : 0\n const dy = last ? pointer.worldY - last.y : 0\n const hitContainers = this.activeContainersForMove.get(pointer.id)\n\n this.bubbleEvent(\n pointer,\n 'onTouchMove',\n (targetState, targetLocalPos) => {\n const finalMoveData = this.createEventData(\n pointer,\n targetLocalPos.x,\n targetLocalPos.y,\n targetState.hitArea.width,\n targetState.hitArea.height,\n { dx, dy, isInside: false, state: 'end' }\n )\n targetState.callbacks.onTouchMove?.(finalMoveData)\n\n // Reset first move flag for this container\n targetState.isFirstMove = undefined\n\n return finalMoveData.isPropagationStopped()\n },\n hitContainers,\n true // Skip container check for final move event\n )\n\n // Reset state\n state.longPressTriggered = false\n state.pointerDownTime = undefined\n this.activePointerDown = null\n state.pointerDownPosition = undefined\n\n // Clear active containers for this pointer\n this.activeContainersForMove.delete(pointer.id)\n }, 0)\n\n // Track this timer for cleanup\n this.pendingTimeouts.add(timerId)\n }\n\n /**\n * Handle global pointer move event\n * Detects hover state changes and notifies containers with onHoverStart/onHoverEnd\n * Only notifies containers that were hit during pointer down for onTouchMove\n * Bubbles through them until stopPropagation() is called\n */\n private handlePointerMove(pointer: Phaser.Input.Pointer): void {\n // Calculate delta\n const last = this.lastPointerPositions.get(pointer.id)\n const dx = last ? pointer.worldX - last.x : 0\n const dy = last ? pointer.worldY - last.y : 0\n this.lastPointerPositions.set(pointer.id, { x: pointer.worldX, y: pointer.worldY })\n\n // Hover detection for all containers (desktop/mouse only)\n this.detectHoverChanges(pointer)\n\n // Only process touch move if there's an active pointer down\n if (!this.activePointerDown || pointer.id !== this.activePointerDown.pointerId) {\n return\n }\n\n // Get containers that were hit during pointer down\n const hitContainers = this.activeContainersForMove.get(pointer.id)\n if (!hitContainers) return\n\n // Bubble onTouchMove only to containers that were hit at pointer down.\n const containersArray = Array.from(this.containers.values()).map((state, originalIndex) => ({\n state,\n originalIndex,\n }))\n containersArray.sort((a, b) => this.compareContainers(a, b))\n\n for (const { state } of containersArray) {\n // Only process if:\n // 1. Container has onTouchMove callback\n // 2. Container was hit during pointer down\n if (!state.callbacks.onTouchMove) continue\n if (!hitContainers.has(state.container)) continue\n\n const localPos = this.getLocalPosition(pointer, state.container)\n const isInside = this.isPointerInContainer(pointer, state)\n\n // Determine state: 'start' for first move, 'move' for subsequent\n const moveState = state.isFirstMove === undefined ? 'start' : 'move'\n if (state.isFirstMove === undefined) {\n state.isFirstMove = false\n }\n\n const data = this.createEventData(\n pointer,\n localPos.x,\n localPos.y,\n state.hitArea.width,\n state.hitArea.height,\n { dx, dy, isInside, state: moveState }\n )\n\n state.callbacks.onTouchMove(data)\n\n // Stop bubbling if propagation was stopped\n if (data.isPropagationStopped()) break\n }\n }\n\n /**\n * Check if pointer is within a container's hit area\n * Also checks parent visibility chain to handle collapsed accordions,\n * and ancestor overflow clip regions to prevent clipped-out children\n * from consuming pointer events outside their visible area.\n */\n private isPointerInContainer(\n pointer: Phaser.Input.Pointer,\n state: GestureContainerState\n ): boolean {\n const container = state.container\n if (!container.visible || container.alpha === 0) return false\n\n // Check parent container visibility chain\n // This prevents interaction with children in collapsed accordions\n let parent = container.parentContainer\n while (parent) {\n if (!parent.visible || parent.alpha === 0) return false\n parent = parent.parentContainer\n }\n\n // Check overflow clip ancestors: if any ancestor has overflow='hidden',\n // the pointer must be within that ancestor's bounds to register a hit.\n // This prevents scrolled-out children from consuming pointer events.\n let clipAncestor = container.parentContainer\n while (clipAncestor) {\n const ext = clipAncestor as Phaser.GameObjects.Container & {\n __layoutProps?: { overflow?: string }\n __getLayoutSize?: () => { width: number; height: number }\n }\n if (ext.__layoutProps?.overflow === 'hidden' && ext.__getLayoutSize) {\n const clipSize = ext.__getLayoutSize()\n const clipLocal = this.getLocalPosition(pointer, clipAncestor)\n if (\n clipLocal.x < 0 ||\n clipLocal.y < 0 ||\n clipLocal.x > clipSize.width ||\n clipLocal.y > clipSize.height\n ) {\n return false\n }\n }\n clipAncestor = clipAncestor.parentContainer\n }\n\n const localPos = this.getLocalPosition(pointer, container)\n return state.hitArea.contains(localPos.x, localPos.y)\n }\n\n /**\n * Convert global pointer position to container local coordinates\n */\n private getLocalPosition(\n pointer: Phaser.Input.Pointer,\n container: Phaser.GameObjects.Container\n ): { x: number; y: number } {\n // Transform world coordinates to container's local space (screen coords break under camera zoom)\n const matrix = container.getWorldTransformMatrix()\n const inverseMatrix = matrix.invert()\n\n const localPos = inverseMatrix.transformPoint(pointer.worldX, pointer.worldY)\n return { x: localPos.x, y: localPos.y }\n }\n\n /**\n * Detect hover state changes for all containers (desktop/mouse only)\n * Called on every pointer move to update hover state\n */\n private detectHoverChanges(pointer: Phaser.Input.Pointer): void {\n for (const [container, state] of this.containers) {\n // Skip if container has no hover callbacks\n if (!state.callbacks.onHoverStart && !state.callbacks.onHoverEnd) {\n continue\n }\n\n // Check if container is active and visible\n if (!container.active) continue\n\n const isInside = this.isPointerInContainer(pointer, state)\n const wasInside = this.hoveredContainers.get(container) ?? false\n\n // Hover start\n if (isInside && !wasInside) {\n this.hoveredContainers.set(container, true)\n if (state.callbacks.onHoverStart) {\n const eventData = this.createHoverEventData(pointer, container, state.hitArea)\n state.callbacks.onHoverStart(eventData)\n }\n }\n\n // Hover end\n if (!isInside && wasInside) {\n this.hoveredContainers.set(container, false)\n if (state.callbacks.onHoverEnd) {\n const eventData = this.createHoverEventData(pointer, container, state.hitArea)\n state.callbacks.onHoverEnd(eventData)\n }\n }\n }\n }\n\n /**\n * Create hover event data\n */\n private createHoverEventData(\n pointer: Phaser.Input.Pointer,\n container: Phaser.GameObjects.Container,\n hitArea: Phaser.Geom.Rectangle\n ): HoverEventData {\n const localPos = this.getLocalPosition(pointer, container)\n\n let propagationStopped = false\n\n return {\n pointer,\n localX: localPos.x,\n localY: localPos.y,\n width: hitArea.width,\n height: hitArea.height,\n stopPropagation: () => {\n propagationStopped = true\n },\n isPropagationStopped: () => propagationStopped,\n }\n }\n\n /**\n * Handle mouse wheel event\n * Bubbles to all containers under the pointer\n */\n private handleWheel(event: WheelEvent): void {\n // Guard: Check if manager is destroyed or scene is invalid\n if (this.isDestroyed || !this.scene || !this.scene.input) {\n return\n }\n\n // Get active pointer and update its position from the wheel event\n // Wrap in try-catch as activePointer getter can throw during scene destruction\n let pointer: Phaser.Input.Pointer | null = null\n try {\n pointer = this.scene.input.activePointer\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n // Scene is being destroyed, silently ignore\n return\n }\n\n if (!pointer) return\n\n // Update pointer position from wheel event (it might not be at correct position)\n const canvas = this.scene.game.canvas\n const rect = canvas.getBoundingClientRect()\n const scaleX = canvas.width / rect.width\n const scaleY = canvas.height / rect.height\n pointer.x = (event.clientX - rect.left) * scaleX\n pointer.y = (event.clientY - rect.top) * scaleY\n pointer.updateWorldPoint(pointer.camera ?? this.scene.cameras.main)\n\n // Find all containers under the pointer\n const containersUnderPointer: Array<{\n state: GestureContainerState\n originalIndex: number\n }> = []\n\n Array.from(this.containers.values()).forEach((state, originalIndex) => {\n if (!state.callbacks.onWheel) return\n\n const isInside = this.isPointerInContainer(pointer, state)\n if (isInside) {\n containersUnderPointer.push({ state, originalIndex })\n }\n })\n\n // Sort by z-order (same logic as other events)\n containersUnderPointer.sort((a, b) => this.compareContainers(a, b))\n\n // Bubble wheel event through containers\n for (const { state } of containersUnderPointer) {\n const localPos = this.getLocalPosition(pointer, state.container)\n\n let propagationStopped = false\n\n const wheelData: WheelEventData = {\n pointer,\n localX: localPos.x,\n localY: localPos.y,\n deltaX: event.deltaX,\n deltaY: event.deltaY,\n deltaZ: event.deltaZ,\n deltaMode: event.deltaMode,\n width: state.hitArea.width,\n height: state.hitArea.height,\n originalEvent: event,\n stopPropagation: () => {\n propagationStopped = true\n },\n isPropagationStopped: () => propagationStopped,\n preventDefault: () => {\n event.preventDefault()\n },\n }\n\n state.callbacks.onWheel?.(wheelData)\n\n // Stop bubbling if propagation was stopped\n if (propagationStopped) break\n }\n }\n\n /**\n * Cleanup all resources\n */\n private destroy(): void {\n console.log('[GestureManager] destroy() called', {\n pendingTimeouts: this.pendingTimeouts.size,\n containers: this.containers.size,\n })\n\n // Mark as destroyed to prevent any pending callbacks from executing\n this.isDestroyed = true\n\n // Clear all pending setTimeout timers\n for (const timerId of this.pendingTimeouts) {\n clearTimeout(timerId)\n }\n this.pendingTimeouts.clear()\n\n // Clear all container timers\n for (const state of this.containers.values()) {\n if (state.longPressTimer) {\n clearTimeout(state.longPressTimer)\n }\n }\n\n this.containers.clear()\n this.lastPointerPositions.clear()\n this.activePointerDown = null\n this.hoveredContainers.clear()\n\n // Remove event listeners\n if (this.isInitialized) {\n this.scene.input.off('pointerdown', this.handlePointerDown, this)\n this.scene.input.off('pointerup', this.handlePointerUp, this)\n this.scene.input.off('pointermove', this.handlePointerMove, this)\n\n // Remove global window event listeners\n window.removeEventListener('mouseup', this.handleGlobalPointerUp)\n window.removeEventListener('touchend', this.handleGlobalPointerUp)\n\n // Remove wheel event listener\n window.removeEventListener('wheel', this.handleWheel)\n }\n\n this.isInitialized = false\n }\n}\n\n/**\n * Get or create GestureManager for a scene\n * Stored in scene.data to ensure singleton per scene\n */\nexport function getGestureManager(scene: Phaser.Scene): GestureManager {\n // Safety check: ensure scene.data exists\n if (!scene || !scene.data) {\n throw new Error('getGestureManager: Invalid scene or scene.data is undefined')\n }\n\n const key = '__gestureManager__'\n let manager = scene.data.get(key) as GestureManager | undefined\n\n if (!manager) {\n manager = new GestureManager(scene)\n scene.data.set(key, manager)\n }\n\n return manager\n}\n"],"names":["state"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const DEFAULT_GESTURE_CONFIG = {
4
+ longPressDuration: 500,
5
+ doubleTapDelay: 300,
6
+ maxTouchDuration: 500
7
+ };
8
+ exports.DEFAULT_GESTURE_CONFIG = DEFAULT_GESTURE_CONFIG;
9
+ //# sourceMappingURL=gesture-types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gesture-types.cjs","sources":["../../src/gestures/gesture-types.ts"],"sourcesContent":["/**\n * Type definitions for the gesture system\n */\nimport type * as Phaser from 'phaser'\n\n/**\n * Touch move gesture state\n */\nexport type TouchMoveState = 'start' | 'move' | 'end'\n\n/**\n * Data passed to keyboard event handlers\n */\nexport interface KeyboardEventData {\n /** The original DOM keyboard event */\n event: KeyboardEvent\n /** The key value of the key represented by the event */\n key: string\n /** The code value of the physical key */\n code: string\n /** Whether the Alt key was pressed */\n altKey: boolean\n /** Whether the Ctrl key was pressed */\n ctrlKey: boolean\n /** Whether the Shift key was pressed */\n shiftKey: boolean\n /** Whether the Meta key (Cmd/Win) was pressed */\n metaKey: boolean\n /** Whether this is a repeat event (key held down) */\n repeat: boolean\n\n /**\n * Prevent default browser behavior\n */\n preventDefault(): void\n\n /**\n * Stop event propagation\n */\n stopPropagation(): void\n}\n\n/**\n * Data passed to input event handlers\n */\nexport interface InputEventData {\n /** The current value of the input */\n value: string\n /** The original DOM input event */\n event: Event\n\n /**\n * Prevent default browser behavior\n */\n preventDefault(): void\n\n /**\n * Stop event propagation\n */\n stopPropagation(): void\n}\n\n/**\n * Data passed to focus/blur event handlers\n */\nexport interface FocusEventData {\n /** The original DOM focus event */\n event: FocusEvent\n\n /**\n * Prevent default browser behavior\n */\n preventDefault(): void\n\n /**\n * Stop event propagation\n */\n stopPropagation(): void\n}\n\n/**\n * Data passed to hover event handlers (desktop/mouse only)\n */\nexport interface HoverEventData {\n /** The Phaser pointer that triggered the event */\n pointer: Phaser.Input.Pointer\n /** Local X coordinate relative to container origin (0,0) */\n localX: number\n /** Local Y coordinate relative to container origin (0,0) */\n localY: number\n /** Width of the container's hit area */\n width: number\n /** Height of the container's hit area */\n height: number\n\n /**\n * Stop event propagation to parent containers\n */\n stopPropagation(): void\n\n /**\n * Check if propagation has been stopped\n * @returns true if stopPropagation() was called\n */\n isPropagationStopped(): boolean\n}\n\n/**\n * Data passed to wheel event handlers (desktop/mouse only)\n */\nexport interface WheelEventData {\n /** The Phaser pointer at the time of the wheel event */\n pointer: Phaser.Input.Pointer\n /** Local X coordinate relative to container origin (0,0) */\n localX: number\n /** Local Y coordinate relative to container origin (0,0) */\n localY: number\n /** Wheel scroll delta X (horizontal scrolling) */\n deltaX: number\n /** Wheel scroll delta Y (vertical scrolling) */\n deltaY: number\n /** Wheel scroll delta Z (some mice) */\n deltaZ: number\n /** Delta mode: 0 = pixels, 1 = lines, 2 = pages */\n deltaMode: number\n /** Width of the container's hit area */\n width: number\n /** Height of the container's hit area */\n height: number\n /** Original DOM wheel event */\n originalEvent: WheelEvent\n\n /**\n * Stop event propagation to parent containers\n */\n stopPropagation(): void\n\n /**\n * Check if propagation has been stopped\n * @returns true if stopPropagation() was called\n */\n isPropagationStopped(): boolean\n\n /**\n * Prevent default browser behavior (e.g., page scroll)\n */\n preventDefault(): void\n}\n\n/**\n * Data passed to gesture event handlers\n * Supports DOM-style event propagation control\n */\nexport interface GestureEventData {\n /** The Phaser pointer that triggered the event */\n pointer: Phaser.Input.Pointer\n /** Local X coordinate relative to container origin (0,0) */\n localX: number\n /** Local Y coordinate relative to container origin (0,0) */\n localY: number\n /** Delta X since last move event (only for onTouchMove) */\n dx?: number\n /** Delta Y since last move event (only for onTouchMove) */\n dy?: number\n /** Width of the container's hit area */\n width: number\n /** Height of the container's hit area */\n height: number\n /** Whether pointer is currently inside the container hit area */\n isInside?: boolean\n /** Current state of touch move gesture: 'start' (first move), 'move' (during), 'end' (pointer up) (only for onTouchMove) */\n state?: TouchMoveState\n\n /**\n * Stop event propagation to parent containers\n * Similar to DOM's event.stopPropagation()\n * Default behavior: events bubble up to parent containers\n */\n stopPropagation(): void\n\n /**\n * Check if propagation has been stopped\n * @returns true if stopPropagation() was called\n */\n isPropagationStopped(): boolean\n}\n\n/**\n * Callback functions for gesture events\n */\nexport interface GestureCallbacks {\n /** Called on pointer down + up on the same target (click/tap) */\n onTouch?: (data: GestureEventData) => void\n /** Called when pointer up occurs outside the container (for click-outside detection) */\n onTouchOutside?: (data: GestureEventData) => void\n /** Called during pointer movement - continues even when outside bounds */\n onTouchMove?: (data: GestureEventData) => void\n /** Called when double tap/click is detected */\n onDoubleTap?: (data: GestureEventData) => void\n /** Called when pointer is held down for configured duration */\n onLongPress?: (data: GestureEventData) => void\n /** Called when a key is pressed down */\n onKeyDown?: (data: KeyboardEventData) => void\n /** Called when a key is released */\n onKeyUp?: (data: KeyboardEventData) => void\n /** Called when input value changes */\n onInput?: (data: InputEventData) => void\n /** Called when element receives focus */\n onFocus?: (data: FocusEventData) => void\n /** Called when element loses focus */\n onBlur?: (data: FocusEventData) => void\n /** Called when pointer enters the container (desktop/mouse only) */\n onHoverStart?: (data: HoverEventData) => void\n /** Called when pointer exits the container (desktop/mouse only) */\n onHoverEnd?: (data: HoverEventData) => void\n /** Called when mouse wheel is scrolled over container (desktop/mouse only) */\n onWheel?: (data: WheelEventData) => void\n}\n\n/**\n * Configuration for gesture detection\n */\nexport interface GestureConfig {\n /** Duration in ms to trigger long press (default: 500) */\n longPressDuration?: number\n /** Max time in ms between taps for double tap (default: 300) */\n doubleTapDelay?: number\n /** Max time in ms for a valid touch/click (prevents delayed touch after long hold) (default: 500) */\n maxTouchDuration?: number\n}\n\n/**\n * Default gesture configuration values\n */\nexport const DEFAULT_GESTURE_CONFIG: Required<GestureConfig> = {\n longPressDuration: 500,\n doubleTapDelay: 300,\n maxTouchDuration: 500,\n}\n\n/**\n * Internal state for tracking a registered container\n */\nexport interface GestureContainerState {\n container: Phaser.GameObjects.Container\n callbacks: GestureCallbacks\n config: Required<GestureConfig>\n hitArea: Phaser.Geom.Rectangle\n mountRootId?: number | undefined // Root ID from mountJSX to isolate different mount trees\n\n // State for gesture detection\n lastTapTime?: number | undefined\n longPressTimer?: ReturnType<typeof setTimeout> | undefined\n pointerDownPosition?: { x: number; y: number } | undefined\n pointerDownTime?: number | undefined\n longPressTriggered?: boolean | undefined\n isFirstMove?: boolean | undefined\n}\n"],"names":[],"mappings":";;AA0OO,MAAM,yBAAkD;AAAA,EAC7D,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,kBAAkB;AACpB;;"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Type definitions for the gesture system
3
+ */
4
+ import type * as Phaser from 'phaser';
5
+ /**
6
+ * Touch move gesture state
7
+ */
8
+ export type TouchMoveState = 'start' | 'move' | 'end';
9
+ /**
10
+ * Data passed to keyboard event handlers
11
+ */
12
+ export interface KeyboardEventData {
13
+ /** The original DOM keyboard event */
14
+ event: KeyboardEvent;
15
+ /** The key value of the key represented by the event */
16
+ key: string;
17
+ /** The code value of the physical key */
18
+ code: string;
19
+ /** Whether the Alt key was pressed */
20
+ altKey: boolean;
21
+ /** Whether the Ctrl key was pressed */
22
+ ctrlKey: boolean;
23
+ /** Whether the Shift key was pressed */
24
+ shiftKey: boolean;
25
+ /** Whether the Meta key (Cmd/Win) was pressed */
26
+ metaKey: boolean;
27
+ /** Whether this is a repeat event (key held down) */
28
+ repeat: boolean;
29
+ /**
30
+ * Prevent default browser behavior
31
+ */
32
+ preventDefault(): void;
33
+ /**
34
+ * Stop event propagation
35
+ */
36
+ stopPropagation(): void;
37
+ }
38
+ /**
39
+ * Data passed to input event handlers
40
+ */
41
+ export interface InputEventData {
42
+ /** The current value of the input */
43
+ value: string;
44
+ /** The original DOM input event */
45
+ event: Event;
46
+ /**
47
+ * Prevent default browser behavior
48
+ */
49
+ preventDefault(): void;
50
+ /**
51
+ * Stop event propagation
52
+ */
53
+ stopPropagation(): void;
54
+ }
55
+ /**
56
+ * Data passed to focus/blur event handlers
57
+ */
58
+ export interface FocusEventData {
59
+ /** The original DOM focus event */
60
+ event: FocusEvent;
61
+ /**
62
+ * Prevent default browser behavior
63
+ */
64
+ preventDefault(): void;
65
+ /**
66
+ * Stop event propagation
67
+ */
68
+ stopPropagation(): void;
69
+ }
70
+ /**
71
+ * Data passed to hover event handlers (desktop/mouse only)
72
+ */
73
+ export interface HoverEventData {
74
+ /** The Phaser pointer that triggered the event */
75
+ pointer: Phaser.Input.Pointer;
76
+ /** Local X coordinate relative to container origin (0,0) */
77
+ localX: number;
78
+ /** Local Y coordinate relative to container origin (0,0) */
79
+ localY: number;
80
+ /** Width of the container's hit area */
81
+ width: number;
82
+ /** Height of the container's hit area */
83
+ height: number;
84
+ /**
85
+ * Stop event propagation to parent containers
86
+ */
87
+ stopPropagation(): void;
88
+ /**
89
+ * Check if propagation has been stopped
90
+ * @returns true if stopPropagation() was called
91
+ */
92
+ isPropagationStopped(): boolean;
93
+ }
94
+ /**
95
+ * Data passed to wheel event handlers (desktop/mouse only)
96
+ */
97
+ export interface WheelEventData {
98
+ /** The Phaser pointer at the time of the wheel event */
99
+ pointer: Phaser.Input.Pointer;
100
+ /** Local X coordinate relative to container origin (0,0) */
101
+ localX: number;
102
+ /** Local Y coordinate relative to container origin (0,0) */
103
+ localY: number;
104
+ /** Wheel scroll delta X (horizontal scrolling) */
105
+ deltaX: number;
106
+ /** Wheel scroll delta Y (vertical scrolling) */
107
+ deltaY: number;
108
+ /** Wheel scroll delta Z (some mice) */
109
+ deltaZ: number;
110
+ /** Delta mode: 0 = pixels, 1 = lines, 2 = pages */
111
+ deltaMode: number;
112
+ /** Width of the container's hit area */
113
+ width: number;
114
+ /** Height of the container's hit area */
115
+ height: number;
116
+ /** Original DOM wheel event */
117
+ originalEvent: WheelEvent;
118
+ /**
119
+ * Stop event propagation to parent containers
120
+ */
121
+ stopPropagation(): void;
122
+ /**
123
+ * Check if propagation has been stopped
124
+ * @returns true if stopPropagation() was called
125
+ */
126
+ isPropagationStopped(): boolean;
127
+ /**
128
+ * Prevent default browser behavior (e.g., page scroll)
129
+ */
130
+ preventDefault(): void;
131
+ }
132
+ /**
133
+ * Data passed to gesture event handlers
134
+ * Supports DOM-style event propagation control
135
+ */
136
+ export interface GestureEventData {
137
+ /** The Phaser pointer that triggered the event */
138
+ pointer: Phaser.Input.Pointer;
139
+ /** Local X coordinate relative to container origin (0,0) */
140
+ localX: number;
141
+ /** Local Y coordinate relative to container origin (0,0) */
142
+ localY: number;
143
+ /** Delta X since last move event (only for onTouchMove) */
144
+ dx?: number;
145
+ /** Delta Y since last move event (only for onTouchMove) */
146
+ dy?: number;
147
+ /** Width of the container's hit area */
148
+ width: number;
149
+ /** Height of the container's hit area */
150
+ height: number;
151
+ /** Whether pointer is currently inside the container hit area */
152
+ isInside?: boolean;
153
+ /** Current state of touch move gesture: 'start' (first move), 'move' (during), 'end' (pointer up) (only for onTouchMove) */
154
+ state?: TouchMoveState;
155
+ /**
156
+ * Stop event propagation to parent containers
157
+ * Similar to DOM's event.stopPropagation()
158
+ * Default behavior: events bubble up to parent containers
159
+ */
160
+ stopPropagation(): void;
161
+ /**
162
+ * Check if propagation has been stopped
163
+ * @returns true if stopPropagation() was called
164
+ */
165
+ isPropagationStopped(): boolean;
166
+ }
167
+ /**
168
+ * Callback functions for gesture events
169
+ */
170
+ export interface GestureCallbacks {
171
+ /** Called on pointer down + up on the same target (click/tap) */
172
+ onTouch?: (data: GestureEventData) => void;
173
+ /** Called when pointer up occurs outside the container (for click-outside detection) */
174
+ onTouchOutside?: (data: GestureEventData) => void;
175
+ /** Called during pointer movement - continues even when outside bounds */
176
+ onTouchMove?: (data: GestureEventData) => void;
177
+ /** Called when double tap/click is detected */
178
+ onDoubleTap?: (data: GestureEventData) => void;
179
+ /** Called when pointer is held down for configured duration */
180
+ onLongPress?: (data: GestureEventData) => void;
181
+ /** Called when a key is pressed down */
182
+ onKeyDown?: (data: KeyboardEventData) => void;
183
+ /** Called when a key is released */
184
+ onKeyUp?: (data: KeyboardEventData) => void;
185
+ /** Called when input value changes */
186
+ onInput?: (data: InputEventData) => void;
187
+ /** Called when element receives focus */
188
+ onFocus?: (data: FocusEventData) => void;
189
+ /** Called when element loses focus */
190
+ onBlur?: (data: FocusEventData) => void;
191
+ /** Called when pointer enters the container (desktop/mouse only) */
192
+ onHoverStart?: (data: HoverEventData) => void;
193
+ /** Called when pointer exits the container (desktop/mouse only) */
194
+ onHoverEnd?: (data: HoverEventData) => void;
195
+ /** Called when mouse wheel is scrolled over container (desktop/mouse only) */
196
+ onWheel?: (data: WheelEventData) => void;
197
+ }
198
+ /**
199
+ * Configuration for gesture detection
200
+ */
201
+ export interface GestureConfig {
202
+ /** Duration in ms to trigger long press (default: 500) */
203
+ longPressDuration?: number;
204
+ /** Max time in ms between taps for double tap (default: 300) */
205
+ doubleTapDelay?: number;
206
+ /** Max time in ms for a valid touch/click (prevents delayed touch after long hold) (default: 500) */
207
+ maxTouchDuration?: number;
208
+ }
209
+ /**
210
+ * Default gesture configuration values
211
+ */
212
+ export declare const DEFAULT_GESTURE_CONFIG: Required<GestureConfig>;
213
+ /**
214
+ * Internal state for tracking a registered container
215
+ */
216
+ export interface GestureContainerState {
217
+ container: Phaser.GameObjects.Container;
218
+ callbacks: GestureCallbacks;
219
+ config: Required<GestureConfig>;
220
+ hitArea: Phaser.Geom.Rectangle;
221
+ mountRootId?: number | undefined;
222
+ lastTapTime?: number | undefined;
223
+ longPressTimer?: ReturnType<typeof setTimeout> | undefined;
224
+ pointerDownPosition?: {
225
+ x: number;
226
+ y: number;
227
+ } | undefined;
228
+ pointerDownTime?: number | undefined;
229
+ longPressTriggered?: boolean | undefined;
230
+ isFirstMove?: boolean | undefined;
231
+ }
232
+ //# sourceMappingURL=gesture-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gesture-types.d.ts","sourceRoot":"","sources":["../../src/gestures/gesture-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ const DEFAULT_GESTURE_CONFIG = {
2
+ longPressDuration: 500,
3
+ doubleTapDelay: 300,
4
+ maxTouchDuration: 500
5
+ };
6
+ export {
7
+ DEFAULT_GESTURE_CONFIG
8
+ };
9
+ //# sourceMappingURL=gesture-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gesture-types.js","sources":["../../src/gestures/gesture-types.ts"],"sourcesContent":["/**\n * Type definitions for the gesture system\n */\nimport type * as Phaser from 'phaser'\n\n/**\n * Touch move gesture state\n */\nexport type TouchMoveState = 'start' | 'move' | 'end'\n\n/**\n * Data passed to keyboard event handlers\n */\nexport interface KeyboardEventData {\n /** The original DOM keyboard event */\n event: KeyboardEvent\n /** The key value of the key represented by the event */\n key: string\n /** The code value of the physical key */\n code: string\n /** Whether the Alt key was pressed */\n altKey: boolean\n /** Whether the Ctrl key was pressed */\n ctrlKey: boolean\n /** Whether the Shift key was pressed */\n shiftKey: boolean\n /** Whether the Meta key (Cmd/Win) was pressed */\n metaKey: boolean\n /** Whether this is a repeat event (key held down) */\n repeat: boolean\n\n /**\n * Prevent default browser behavior\n */\n preventDefault(): void\n\n /**\n * Stop event propagation\n */\n stopPropagation(): void\n}\n\n/**\n * Data passed to input event handlers\n */\nexport interface InputEventData {\n /** The current value of the input */\n value: string\n /** The original DOM input event */\n event: Event\n\n /**\n * Prevent default browser behavior\n */\n preventDefault(): void\n\n /**\n * Stop event propagation\n */\n stopPropagation(): void\n}\n\n/**\n * Data passed to focus/blur event handlers\n */\nexport interface FocusEventData {\n /** The original DOM focus event */\n event: FocusEvent\n\n /**\n * Prevent default browser behavior\n */\n preventDefault(): void\n\n /**\n * Stop event propagation\n */\n stopPropagation(): void\n}\n\n/**\n * Data passed to hover event handlers (desktop/mouse only)\n */\nexport interface HoverEventData {\n /** The Phaser pointer that triggered the event */\n pointer: Phaser.Input.Pointer\n /** Local X coordinate relative to container origin (0,0) */\n localX: number\n /** Local Y coordinate relative to container origin (0,0) */\n localY: number\n /** Width of the container's hit area */\n width: number\n /** Height of the container's hit area */\n height: number\n\n /**\n * Stop event propagation to parent containers\n */\n stopPropagation(): void\n\n /**\n * Check if propagation has been stopped\n * @returns true if stopPropagation() was called\n */\n isPropagationStopped(): boolean\n}\n\n/**\n * Data passed to wheel event handlers (desktop/mouse only)\n */\nexport interface WheelEventData {\n /** The Phaser pointer at the time of the wheel event */\n pointer: Phaser.Input.Pointer\n /** Local X coordinate relative to container origin (0,0) */\n localX: number\n /** Local Y coordinate relative to container origin (0,0) */\n localY: number\n /** Wheel scroll delta X (horizontal scrolling) */\n deltaX: number\n /** Wheel scroll delta Y (vertical scrolling) */\n deltaY: number\n /** Wheel scroll delta Z (some mice) */\n deltaZ: number\n /** Delta mode: 0 = pixels, 1 = lines, 2 = pages */\n deltaMode: number\n /** Width of the container's hit area */\n width: number\n /** Height of the container's hit area */\n height: number\n /** Original DOM wheel event */\n originalEvent: WheelEvent\n\n /**\n * Stop event propagation to parent containers\n */\n stopPropagation(): void\n\n /**\n * Check if propagation has been stopped\n * @returns true if stopPropagation() was called\n */\n isPropagationStopped(): boolean\n\n /**\n * Prevent default browser behavior (e.g., page scroll)\n */\n preventDefault(): void\n}\n\n/**\n * Data passed to gesture event handlers\n * Supports DOM-style event propagation control\n */\nexport interface GestureEventData {\n /** The Phaser pointer that triggered the event */\n pointer: Phaser.Input.Pointer\n /** Local X coordinate relative to container origin (0,0) */\n localX: number\n /** Local Y coordinate relative to container origin (0,0) */\n localY: number\n /** Delta X since last move event (only for onTouchMove) */\n dx?: number\n /** Delta Y since last move event (only for onTouchMove) */\n dy?: number\n /** Width of the container's hit area */\n width: number\n /** Height of the container's hit area */\n height: number\n /** Whether pointer is currently inside the container hit area */\n isInside?: boolean\n /** Current state of touch move gesture: 'start' (first move), 'move' (during), 'end' (pointer up) (only for onTouchMove) */\n state?: TouchMoveState\n\n /**\n * Stop event propagation to parent containers\n * Similar to DOM's event.stopPropagation()\n * Default behavior: events bubble up to parent containers\n */\n stopPropagation(): void\n\n /**\n * Check if propagation has been stopped\n * @returns true if stopPropagation() was called\n */\n isPropagationStopped(): boolean\n}\n\n/**\n * Callback functions for gesture events\n */\nexport interface GestureCallbacks {\n /** Called on pointer down + up on the same target (click/tap) */\n onTouch?: (data: GestureEventData) => void\n /** Called when pointer up occurs outside the container (for click-outside detection) */\n onTouchOutside?: (data: GestureEventData) => void\n /** Called during pointer movement - continues even when outside bounds */\n onTouchMove?: (data: GestureEventData) => void\n /** Called when double tap/click is detected */\n onDoubleTap?: (data: GestureEventData) => void\n /** Called when pointer is held down for configured duration */\n onLongPress?: (data: GestureEventData) => void\n /** Called when a key is pressed down */\n onKeyDown?: (data: KeyboardEventData) => void\n /** Called when a key is released */\n onKeyUp?: (data: KeyboardEventData) => void\n /** Called when input value changes */\n onInput?: (data: InputEventData) => void\n /** Called when element receives focus */\n onFocus?: (data: FocusEventData) => void\n /** Called when element loses focus */\n onBlur?: (data: FocusEventData) => void\n /** Called when pointer enters the container (desktop/mouse only) */\n onHoverStart?: (data: HoverEventData) => void\n /** Called when pointer exits the container (desktop/mouse only) */\n onHoverEnd?: (data: HoverEventData) => void\n /** Called when mouse wheel is scrolled over container (desktop/mouse only) */\n onWheel?: (data: WheelEventData) => void\n}\n\n/**\n * Configuration for gesture detection\n */\nexport interface GestureConfig {\n /** Duration in ms to trigger long press (default: 500) */\n longPressDuration?: number\n /** Max time in ms between taps for double tap (default: 300) */\n doubleTapDelay?: number\n /** Max time in ms for a valid touch/click (prevents delayed touch after long hold) (default: 500) */\n maxTouchDuration?: number\n}\n\n/**\n * Default gesture configuration values\n */\nexport const DEFAULT_GESTURE_CONFIG: Required<GestureConfig> = {\n longPressDuration: 500,\n doubleTapDelay: 300,\n maxTouchDuration: 500,\n}\n\n/**\n * Internal state for tracking a registered container\n */\nexport interface GestureContainerState {\n container: Phaser.GameObjects.Container\n callbacks: GestureCallbacks\n config: Required<GestureConfig>\n hitArea: Phaser.Geom.Rectangle\n mountRootId?: number | undefined // Root ID from mountJSX to isolate different mount trees\n\n // State for gesture detection\n lastTapTime?: number | undefined\n longPressTimer?: ReturnType<typeof setTimeout> | undefined\n pointerDownPosition?: { x: number; y: number } | undefined\n pointerDownTime?: number | undefined\n longPressTriggered?: boolean | undefined\n isFirstMove?: boolean | undefined\n}\n"],"names":[],"mappings":"AA0OO,MAAM,yBAAkD;AAAA,EAC7D,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,kBAAkB;AACpB;"}
package/dist/hooks.cjs ADDED
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxCore = require("@number10/jsx-core");
4
+ const renderContext = require("./render-context.cjs");
5
+ const phaserGuards = require("./utils/phaser-guards.cjs");
6
+ const vdom = require("./vdom.cjs");
7
+ function getCurrent() {
8
+ return jsxCore.getCurrentCtx();
9
+ }
10
+ function withHooks(ctx, render) {
11
+ const renderContext$1 = renderContext.getContextFromParent(ctx.parent);
12
+ const prevMount = renderContext$1.getCurrent();
13
+ const result = jsxCore.withHooks(ctx, render, {
14
+ isAlive: () => {
15
+ const scene = phaserGuards.isPhaserScene(ctx.parent) ? ctx.parent : ctx.parent.scene;
16
+ if (!scene || !scene.sys || !scene.sys.settings.active) return false;
17
+ if (renderContext$1.isShutdown()) return false;
18
+ return true;
19
+ },
20
+ onAfterRender: () => {
21
+ renderContext$1.setCurrent(prevMount);
22
+ }
23
+ });
24
+ renderContext$1.setCurrent(ctx);
25
+ return result;
26
+ }
27
+ function useScene() {
28
+ const ctx = getCurrent();
29
+ if (!ctx) throw new Error("useScene must be called within a component");
30
+ const renderContext$1 = renderContext.getContextFromParent(ctx.parent);
31
+ return renderContext$1.scene;
32
+ }
33
+ function useViewportSize() {
34
+ const ctx = getCurrent();
35
+ const surfaceViewport = ctx?.surface?.viewport;
36
+ if (surfaceViewport) {
37
+ return surfaceViewport;
38
+ }
39
+ const scene = useScene();
40
+ const initialSize = { width: scene.scale.width, height: scene.scale.height };
41
+ const [size, setSize] = jsxCore.useState(initialSize);
42
+ jsxCore.useEffect(() => {
43
+ const onResize = () => {
44
+ setSize({ width: scene.scale.width, height: scene.scale.height });
45
+ };
46
+ scene.scale.on("resize", onResize);
47
+ return () => {
48
+ scene.scale.off("resize", onResize);
49
+ };
50
+ }, [scene]);
51
+ return size;
52
+ }
53
+ function getLayoutSize(container) {
54
+ if (!container) return void 0;
55
+ return container.__getLayoutSize?.();
56
+ }
57
+ function useLayoutSize(ref) {
58
+ return getLayoutSize(ref.current);
59
+ }
60
+ function getLayoutProps(container) {
61
+ if (!container) return void 0;
62
+ return container.__layoutProps;
63
+ }
64
+ function getBackgroundGraphics(container) {
65
+ if (!container) return void 0;
66
+ return container.__background;
67
+ }
68
+ function useBackgroundGraphics(ref) {
69
+ return getBackgroundGraphics(ref.current);
70
+ }
71
+ function getLayoutRect(container) {
72
+ if (!container) return void 0;
73
+ const size = getLayoutSize(container);
74
+ if (!size) return void 0;
75
+ return {
76
+ x: container.x ?? 0,
77
+ y: container.y ?? 0,
78
+ width: size.width,
79
+ height: size.height
80
+ };
81
+ }
82
+ function useLayoutRect(ref) {
83
+ return getLayoutRect(ref.current);
84
+ }
85
+ function getWorldLayoutRect(container) {
86
+ if (!container) return void 0;
87
+ const size = getLayoutSize(container);
88
+ if (!size) return void 0;
89
+ const matrix = container.getWorldTransformMatrix();
90
+ return {
91
+ x: matrix.tx,
92
+ y: matrix.ty,
93
+ width: size.width * Math.abs(matrix.scaleX),
94
+ height: size.height * Math.abs(matrix.scaleY)
95
+ };
96
+ }
97
+ function useWorldLayoutRect(ref) {
98
+ return getWorldLayoutRect(ref.current);
99
+ }
100
+ function usePhaserTheme() {
101
+ return jsxCore.useTheme();
102
+ }
103
+ const phaserUpdateHandler = (c) => {
104
+ const ctx = c;
105
+ if (ctx.disposed) return;
106
+ const scene = phaserGuards.isPhaserScene(ctx.parent) ? ctx.parent : ctx.parent.scene;
107
+ if (!scene || !scene.sys || !scene.sys.settings.active) return;
108
+ const componentProps = ctx.componentVNode.props ?? {};
109
+ const propsWithChildren = ctx.componentVNode.children?.length ? { ...componentProps, children: ctx.componentVNode.children } : componentProps;
110
+ const nextVNode = vdom.normalizeVNodeLike(withHooks(ctx, () => ctx.function(propsWithChildren)));
111
+ vdom.patchVNode(ctx.parent, ctx.vnode, nextVNode);
112
+ ctx.vnode = nextVNode;
113
+ for (const run of ctx.effects) run();
114
+ };
115
+ jsxCore.setUpdateHandler(phaserUpdateHandler);
116
+ Object.defineProperty(exports, "depsChanged", {
117
+ enumerable: true,
118
+ get: () => jsxCore.depsChanged
119
+ });
120
+ Object.defineProperty(exports, "disposeCtx", {
121
+ enumerable: true,
122
+ get: () => jsxCore.disposeCtx
123
+ });
124
+ Object.defineProperty(exports, "getCurrentCtx", {
125
+ enumerable: true,
126
+ get: () => jsxCore.getCurrentCtx
127
+ });
128
+ Object.defineProperty(exports, "getCurrentOrThrow", {
129
+ enumerable: true,
130
+ get: () => jsxCore.getCurrentOrThrow
131
+ });
132
+ Object.defineProperty(exports, "setCurrentCtx", {
133
+ enumerable: true,
134
+ get: () => jsxCore.setCurrentCtx
135
+ });
136
+ Object.defineProperty(exports, "shallowEqual", {
137
+ enumerable: true,
138
+ get: () => jsxCore.shallowEqual
139
+ });
140
+ Object.defineProperty(exports, "shouldComponentUpdate", {
141
+ enumerable: true,
142
+ get: () => jsxCore.shouldComponentUpdate
143
+ });
144
+ Object.defineProperty(exports, "useCallback", {
145
+ enumerable: true,
146
+ get: () => jsxCore.useCallback
147
+ });
148
+ Object.defineProperty(exports, "useEffect", {
149
+ enumerable: true,
150
+ get: () => jsxCore.useEffect
151
+ });
152
+ Object.defineProperty(exports, "useForceRedraw", {
153
+ enumerable: true,
154
+ get: () => jsxCore.useForceRedraw
155
+ });
156
+ Object.defineProperty(exports, "useLayoutEffect", {
157
+ enumerable: true,
158
+ get: () => jsxCore.useLayoutEffect
159
+ });
160
+ Object.defineProperty(exports, "useMemo", {
161
+ enumerable: true,
162
+ get: () => jsxCore.useMemo
163
+ });
164
+ Object.defineProperty(exports, "useRedraw", {
165
+ enumerable: true,
166
+ get: () => jsxCore.useRedraw
167
+ });
168
+ Object.defineProperty(exports, "useRef", {
169
+ enumerable: true,
170
+ get: () => jsxCore.useRef
171
+ });
172
+ Object.defineProperty(exports, "useState", {
173
+ enumerable: true,
174
+ get: () => jsxCore.useState
175
+ });
176
+ Object.defineProperty(exports, "useTheme", {
177
+ enumerable: true,
178
+ get: () => jsxCore.useTheme
179
+ });
180
+ exports.getCurrent = getCurrent;
181
+ exports.getLayoutProps = getLayoutProps;
182
+ exports.getLayoutRect = getLayoutRect;
183
+ exports.getLayoutSize = getLayoutSize;
184
+ exports.getWorldLayoutRect = getWorldLayoutRect;
185
+ exports.useBackgroundGraphics = useBackgroundGraphics;
186
+ exports.useLayoutRect = useLayoutRect;
187
+ exports.useLayoutSize = useLayoutSize;
188
+ exports.usePhaserTheme = usePhaserTheme;
189
+ exports.useScene = useScene;
190
+ exports.useViewportSize = useViewportSize;
191
+ exports.useWorldLayoutRect = useWorldLayoutRect;
192
+ exports.withHooks = withHooks;
193
+ //# sourceMappingURL=hooks.cjs.map