@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,100 @@
1
+ import { applyPhaserProps } from "../appliers/applyPhaser.js";
2
+ import { applySpriteProps } from "../appliers/applySprite.js";
3
+ import { applySpriteLayout } from "../appliers/applySpriteLayout.js";
4
+ import { applyTransformProps } from "../appliers/applyTransform.js";
5
+ import { createPhaser } from "../creators/createPhaser.js";
6
+ import { createSpriteLayout } from "../creators/createSpriteLayout.js";
7
+ import { resolveAnimatableNumber, createTransform } from "../creators/createTransform.js";
8
+ const spriteCreator = (scene, props) => {
9
+ const sprite = scene.add.sprite(
10
+ resolveAnimatableNumber(props.x) ?? 0,
11
+ resolveAnimatableNumber(props.y) ?? 0,
12
+ props.texture,
13
+ props.frame
14
+ );
15
+ sprite.setOrigin(0.5, 0.5);
16
+ if (props.originX !== void 0 || props.originY !== void 0) {
17
+ sprite.setOrigin(props.originX ?? sprite.originX, props.originY ?? sprite.originY);
18
+ }
19
+ createTransform(sprite, props);
20
+ createPhaser(sprite, props);
21
+ if (props.tint !== void 0) {
22
+ sprite.setTint(props.tint);
23
+ }
24
+ if (props.displayWidth !== void 0 || props.displayHeight !== void 0) {
25
+ if (props.displayWidth !== void 0 && props.displayHeight !== void 0) {
26
+ const fit = props.fit ?? "fill";
27
+ const textureWidth = sprite.width;
28
+ const textureHeight = sprite.height;
29
+ if (textureWidth > 0 && textureHeight > 0) {
30
+ if (fit === "fill") {
31
+ sprite.setDisplaySize(props.displayWidth, props.displayHeight);
32
+ } else if (fit === "contain") {
33
+ const targetAspect = props.displayWidth / props.displayHeight;
34
+ const textureAspect = textureWidth / textureHeight;
35
+ const scale = targetAspect > textureAspect ? props.displayHeight / textureHeight : props.displayWidth / textureWidth;
36
+ sprite.setScale(scale);
37
+ } else if (fit === "cover") {
38
+ const targetAspect = props.displayWidth / props.displayHeight;
39
+ const textureAspect = textureWidth / textureHeight;
40
+ const scale = targetAspect < textureAspect ? props.displayHeight / textureHeight : props.displayWidth / textureWidth;
41
+ sprite.setScale(scale);
42
+ }
43
+ }
44
+ } else if (props.displayWidth !== void 0) {
45
+ const scale = props.displayWidth / sprite.width;
46
+ sprite.setScale(scale);
47
+ } else if (props.displayHeight !== void 0) {
48
+ const scale = props.displayHeight / sprite.height;
49
+ sprite.setScale(scale);
50
+ }
51
+ }
52
+ if (props.animationKey) {
53
+ if (sprite.scene && sprite.scene.anims.exists(props.animationKey)) {
54
+ sprite.anims.play({
55
+ key: props.animationKey,
56
+ repeat: props.loop ? -1 : 0,
57
+ repeatDelay: props.repeatDelay ?? 0
58
+ });
59
+ }
60
+ }
61
+ if (props.onAnimationStart) {
62
+ sprite.on("animationstart", (anim) => {
63
+ props.onAnimationStart?.(anim.key);
64
+ });
65
+ }
66
+ if (props.onAnimationComplete) {
67
+ sprite.on("animationcomplete", (anim) => {
68
+ props.onAnimationComplete?.(anim.key);
69
+ });
70
+ }
71
+ if (props.onAnimationRepeat) {
72
+ sprite.on("animationrepeat", (anim) => {
73
+ props.onAnimationRepeat?.(anim.key);
74
+ });
75
+ }
76
+ if (props.onAnimationUpdate) {
77
+ sprite.on(
78
+ "animationupdate",
79
+ (anim, frame) => {
80
+ props.onAnimationUpdate?.(anim.key, frame);
81
+ }
82
+ );
83
+ }
84
+ createSpriteLayout(sprite, props);
85
+ if (props.onReady) {
86
+ props.onReady(sprite);
87
+ }
88
+ return sprite;
89
+ };
90
+ const spritePatcher = (node, prev, next) => {
91
+ applyTransformProps(node, prev, next);
92
+ applyPhaserProps(node, prev, next);
93
+ applySpriteProps(node, prev, next);
94
+ applySpriteLayout(node, prev, next);
95
+ };
96
+ export {
97
+ spriteCreator,
98
+ spritePatcher
99
+ };
100
+ //# sourceMappingURL=sprite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprite.js","sources":["../../../src/components/primitives/sprite.ts"],"sourcesContent":["/**\n * Sprite component - Phaser Sprite GameObject (animated texture)\n * Status: IMPLEMENTED ✅\n *\n * Design Overview:\n * ================\n *\n * 1. Component Role: ANIMATED GAME OBJECTS\n * Purpose: Display animated sprites in game scenes (characters, effects, particles)\n * Phaser Type: Phaser.GameObjects.Sprite (animation-capable texture rendering)\n * Characteristics:\n * - Always headless (does not affect parent layout)\n * - Supports Phaser Animation system\n * - Free positioning with rotation/scale\n *\n * 2. Headless Behavior: MANDATORY ✅\n * Decision: Sprites are ALWAYS headless (not configurable)\n * Reasoning:\n * - Sprites are game objects, not UI elements\n * - Should NOT affect parent layout dimensions\n * - Free positioning with full transform support (rotation, scale)\n * Layout Impact: Returns minimal size (0.01x0.01) - participates in alignment only\n * Use Cases:\n * - ✅ Game characters, particles, effects, free-floating objects\n * - ✅ Animated decorations, background elements\n * - ❌ NOT for layout-based UIs (use Image component instead)\n *\n * 3. Layout Size Provider: MINIMAL SIZE ✅\n * Implementation: Always returns { width: 0.01, height: 0.01 }\n * Reasoning:\n * - Sprites don't affect layout spacing\n * - Minimal size allows alignment but no spacing impact\n * - Simpler than getBounds() with same result\n *\n * 4. Animation System: PHASER ANIMATIONS ✅\n * Features:\n * - animationKey: Play pre-registered animation\n * - loop: Repeat animation indefinitely\n * - repeatDelay: Delay between animation repeats (ms)\n * Callbacks:\n * - onAnimationStart: Triggered when animation begins\n * - onAnimationComplete: Triggered when animation ends\n * - onAnimationRepeat: Triggered on each repeat\n * - onAnimationUpdate: Triggered on each frame update\n * Note: Animations must be pre-registered in Phaser AnimationManager\n *\n * 5. Texture & Sizing: LIKE IMAGE ✅\n * Props:\n * - texture: Texture key (required)\n * - frame: Frame from atlas/spritesheet\n * - tint: Color tint (0xRRGGBB)\n * - displayWidth/displayHeight: Scale sprite to fit\n * - fit: 'fill' | 'contain' | 'cover' (aspect ratio handling)\n * Error Handling: Missing texture → Phaser default (white square)\n *\n * 6. Origin Behavior: CENTERED (0.5, 0.5) ✅\n * Decision: Default origin (0.5, 0.5) - centered\n * Reasoning:\n * - Phaser sprite default\n * - Natural for rotation/scale pivot\n * - Game object semantics\n * Override: Use originX/originY props for custom origin\n *\n * 7. Performance: SPRITE BATCHING ✅\n * Strategy:\n * - Leverages Phaser's sprite batching (WebGL)\n * - Props that preserve batching: tint, alpha, scale, position\n * - Props that break batching: custom shaders, blend modes (use sparingly)\n * - Texture atlases strongly recommended for multiple sprites\n *\n * 8. Common Patterns:\n * Character:\n * <Sprite texture=\"player\" animationKey=\"walk\" loop={true} />\n * Particle Effect:\n * <Sprite texture=\"explosion\" animationKey=\"explode\" onAnimationComplete={destroy} />\n * Scaled Sprite:\n * <Sprite texture=\"coin\" displayWidth={32} displayHeight={32} fit=\"contain\" />\n *\n * Implementation Status:\n * ======================\n * [✅] Phaser Sprite creation with texture/frame support\n * [✅] Transform props (position, rotation, scale, alpha)\n * [✅] Layout system integration (always headless)\n * [✅] Origin handling (0.5, 0.5 default)\n * [✅] Display size with fit modes (contain/cover/fill)\n * [✅] Tint support\n * [✅] Animation system (play, loop, callbacks)\n * [✅] Texture and frame patching\n */\nimport type * as Phaser from 'phaser'\nimport type { LayoutProps, PhaserProps, TransformProps } from '../../core-props'\nimport type { HostCreator, HostPatcher } from '../../host'\nimport type { PropsDefaultExtension } from '../../types'\nimport { applyPhaserProps } from '../appliers/applyPhaser'\nimport { applySpriteProps } from '../appliers/applySprite'\nimport { applySpriteLayout } from '../appliers/applySpriteLayout'\nimport { applyTransformProps } from '../appliers/applyTransform'\nimport { createPhaser } from '../creators/createPhaser'\nimport { createSpriteLayout } from '../creators/createSpriteLayout'\nimport { createTransform, resolveAnimatableNumber } from '../creators/createTransform'\n\n/**\n * Base props for Sprite component\n */\nexport interface SpriteBaseProps extends TransformProps, PhaserProps, LayoutProps {\n /** Texture key (loaded via Phaser's texture manager) */\n texture: string\n\n /** Optional frame from texture atlas or spritesheet */\n frame?: string | number\n\n /** Tint color applied to sprite (0xRRGGBB) */\n tint?: number\n\n /** Display width (scales sprite to fit) */\n displayWidth?: number\n\n /** Display height (scales sprite to fit) */\n displayHeight?: number\n\n /**\n * How sprite should fit within bounds (if displayWidth/displayHeight set)\n * - 'fill': Stretch to fill (default, may distort aspect ratio)\n * - 'contain': Scale to fit within bounds, preserve aspect ratio\n * - 'cover': Scale to cover bounds, preserve aspect ratio (may crop)\n */\n fit?: 'fill' | 'contain' | 'cover'\n\n /** Animation key to play (pre-registered in Phaser AnimationManager) */\n animationKey?: string\n\n /** Loop animation (default: false) */\n loop?: boolean\n\n /** Delay between animation repeats in ms (default: 0) */\n repeatDelay?: number\n\n /** Callback when animation starts */\n onAnimationStart?: (key: string) => void\n\n /** Callback when animation completes */\n onAnimationComplete?: (key: string) => void\n\n /** Callback when animation repeats */\n onAnimationRepeat?: (key: string) => void\n\n /** Callback on each animation frame update */\n onAnimationUpdate?: (key: string, frame: Phaser.Animations.AnimationFrame) => void\n\n /** Origin X (0-1, default 0.5) */\n originX?: number\n\n /** Origin Y (0-1, default 0.5) */\n originY?: number\n}\n\n/**\n * Props for Sprite component\n */\nexport interface SpriteProps\n extends SpriteBaseProps, PropsDefaultExtension<Phaser.GameObjects.Sprite> {}\n\n/**\n * Sprite creator - creates a Phaser Sprite object with animations\n */\nexport const spriteCreator: HostCreator<'Sprite'> = (scene, props) => {\n const sprite = scene.add.sprite(\n resolveAnimatableNumber(props.x) ?? 0,\n resolveAnimatableNumber(props.y) ?? 0,\n props.texture,\n props.frame\n )\n\n // Set origin - always centered (0.5, 0.5) for sprites\n sprite.setOrigin(0.5, 0.5)\n\n // Apply custom origin if specified\n if (props.originX !== undefined || props.originY !== undefined) {\n sprite.setOrigin(props.originX ?? sprite.originX, props.originY ?? sprite.originY)\n }\n\n // Apply transform props (scale, rotation)\n createTransform(sprite, props)\n\n // Apply Phaser display props (alpha, depth, visible)\n createPhaser(sprite, props)\n\n // Apply sprite-specific props (tint, displaySize, fit)\n if (props.tint !== undefined) {\n sprite.setTint(props.tint)\n }\n\n // Apply displayWidth/displayHeight if specified\n if (props.displayWidth !== undefined || props.displayHeight !== undefined) {\n if (props.displayWidth !== undefined && props.displayHeight !== undefined) {\n // Both specified - use fit mode\n const fit = props.fit ?? 'fill'\n const textureWidth = sprite.width\n const textureHeight = sprite.height\n\n if (textureWidth > 0 && textureHeight > 0) {\n if (fit === 'fill') {\n sprite.setDisplaySize(props.displayWidth, props.displayHeight)\n } else if (fit === 'contain') {\n const targetAspect = props.displayWidth / props.displayHeight\n const textureAspect = textureWidth / textureHeight\n const scale =\n targetAspect > textureAspect\n ? props.displayHeight / textureHeight\n : props.displayWidth / textureWidth\n sprite.setScale(scale)\n } else if (fit === 'cover') {\n const targetAspect = props.displayWidth / props.displayHeight\n const textureAspect = textureWidth / textureHeight\n const scale =\n targetAspect < textureAspect\n ? props.displayHeight / textureHeight\n : props.displayWidth / textureWidth\n sprite.setScale(scale)\n }\n }\n } else if (props.displayWidth !== undefined) {\n const scale = props.displayWidth / sprite.width\n sprite.setScale(scale)\n } else if (props.displayHeight !== undefined) {\n const scale = props.displayHeight / sprite.height\n sprite.setScale(scale)\n }\n }\n\n // Setup animation system\n // Only play if the animation is already registered in the AnimationManager.\n // Calling `sprite.anims.play` with a missing key causes Phaser to log\n // \"Missing animation: <key>\". Many examples register animations in a\n // separate effect that may run after the Sprite is created, so avoid\n // attempting to play until the animation actually exists.\n if (props.animationKey) {\n if (sprite.scene && sprite.scene.anims.exists(props.animationKey)) {\n sprite.anims.play({\n key: props.animationKey,\n repeat: props.loop ? -1 : 0,\n repeatDelay: props.repeatDelay ?? 0,\n })\n }\n }\n\n // Setup animation callbacks\n if (props.onAnimationStart) {\n sprite.on('animationstart', (anim: Phaser.Animations.Animation) => {\n props.onAnimationStart?.(anim.key)\n })\n }\n\n if (props.onAnimationComplete) {\n sprite.on('animationcomplete', (anim: Phaser.Animations.Animation) => {\n props.onAnimationComplete?.(anim.key)\n })\n }\n\n if (props.onAnimationRepeat) {\n sprite.on('animationrepeat', (anim: Phaser.Animations.Animation) => {\n props.onAnimationRepeat?.(anim.key)\n })\n }\n\n if (props.onAnimationUpdate) {\n sprite.on(\n 'animationupdate',\n (anim: Phaser.Animations.Animation, frame: Phaser.Animations.AnimationFrame) => {\n props.onAnimationUpdate?.(anim.key, frame)\n }\n )\n }\n\n // Setup layout system (props and size provider)\n createSpriteLayout(sprite, props)\n\n // Call onReady callback if provided\n if (props.onReady) {\n props.onReady(sprite)\n }\n\n return sprite\n}\n\n/**\n * Sprite patcher - updates Sprite properties\n */\nexport const spritePatcher: HostPatcher<'Sprite'> = (node, prev, next) => {\n // Apply transform props (position, rotation, scale)\n applyTransformProps(node, prev, next)\n\n // Apply Phaser display props (alpha, depth, visible)\n applyPhaserProps(node, prev, next)\n\n // Apply sprite-specific props (texture, frame, tint, displaySize, fit, animations)\n applySpriteProps(node, prev, next)\n\n // Apply layout props and update size provider if needed\n applySpriteLayout(node, prev, next)\n}\n"],"names":[],"mappings":";;;;;;;AAqKO,MAAM,gBAAuC,CAAC,OAAO,UAAU;AACpE,QAAM,SAAS,MAAM,IAAI;AAAA,IACvB,wBAAwB,MAAM,CAAC,KAAK;AAAA,IACpC,wBAAwB,MAAM,CAAC,KAAK;AAAA,IACpC,MAAM;AAAA,IACN,MAAM;AAAA,EAAA;AAIR,SAAO,UAAU,KAAK,GAAG;AAGzB,MAAI,MAAM,YAAY,UAAa,MAAM,YAAY,QAAW;AAC9D,WAAO,UAAU,MAAM,WAAW,OAAO,SAAS,MAAM,WAAW,OAAO,OAAO;AAAA,EACnF;AAGA,kBAAgB,QAAQ,KAAK;AAG7B,eAAa,QAAQ,KAAK;AAG1B,MAAI,MAAM,SAAS,QAAW;AAC5B,WAAO,QAAQ,MAAM,IAAI;AAAA,EAC3B;AAGA,MAAI,MAAM,iBAAiB,UAAa,MAAM,kBAAkB,QAAW;AACzE,QAAI,MAAM,iBAAiB,UAAa,MAAM,kBAAkB,QAAW;AAEzE,YAAM,MAAM,MAAM,OAAO;AACzB,YAAM,eAAe,OAAO;AAC5B,YAAM,gBAAgB,OAAO;AAE7B,UAAI,eAAe,KAAK,gBAAgB,GAAG;AACzC,YAAI,QAAQ,QAAQ;AAClB,iBAAO,eAAe,MAAM,cAAc,MAAM,aAAa;AAAA,QAC/D,WAAW,QAAQ,WAAW;AAC5B,gBAAM,eAAe,MAAM,eAAe,MAAM;AAChD,gBAAM,gBAAgB,eAAe;AACrC,gBAAM,QACJ,eAAe,gBACX,MAAM,gBAAgB,gBACtB,MAAM,eAAe;AAC3B,iBAAO,SAAS,KAAK;AAAA,QACvB,WAAW,QAAQ,SAAS;AAC1B,gBAAM,eAAe,MAAM,eAAe,MAAM;AAChD,gBAAM,gBAAgB,eAAe;AACrC,gBAAM,QACJ,eAAe,gBACX,MAAM,gBAAgB,gBACtB,MAAM,eAAe;AAC3B,iBAAO,SAAS,KAAK;AAAA,QACvB;AAAA,MACF;AAAA,IACF,WAAW,MAAM,iBAAiB,QAAW;AAC3C,YAAM,QAAQ,MAAM,eAAe,OAAO;AAC1C,aAAO,SAAS,KAAK;AAAA,IACvB,WAAW,MAAM,kBAAkB,QAAW;AAC5C,YAAM,QAAQ,MAAM,gBAAgB,OAAO;AAC3C,aAAO,SAAS,KAAK;AAAA,IACvB;AAAA,EACF;AAQA,MAAI,MAAM,cAAc;AACtB,QAAI,OAAO,SAAS,OAAO,MAAM,MAAM,OAAO,MAAM,YAAY,GAAG;AACjE,aAAO,MAAM,KAAK;AAAA,QAChB,KAAK,MAAM;AAAA,QACX,QAAQ,MAAM,OAAO,KAAK;AAAA,QAC1B,aAAa,MAAM,eAAe;AAAA,MAAA,CACnC;AAAA,IACH;AAAA,EACF;AAGA,MAAI,MAAM,kBAAkB;AAC1B,WAAO,GAAG,kBAAkB,CAAC,SAAsC;AACjE,YAAM,mBAAmB,KAAK,GAAG;AAAA,IACnC,CAAC;AAAA,EACH;AAEA,MAAI,MAAM,qBAAqB;AAC7B,WAAO,GAAG,qBAAqB,CAAC,SAAsC;AACpE,YAAM,sBAAsB,KAAK,GAAG;AAAA,IACtC,CAAC;AAAA,EACH;AAEA,MAAI,MAAM,mBAAmB;AAC3B,WAAO,GAAG,mBAAmB,CAAC,SAAsC;AAClE,YAAM,oBAAoB,KAAK,GAAG;AAAA,IACpC,CAAC;AAAA,EACH;AAEA,MAAI,MAAM,mBAAmB;AAC3B,WAAO;AAAA,MACL;AAAA,MACA,CAAC,MAAmC,UAA4C;AAC9E,cAAM,oBAAoB,KAAK,KAAK,KAAK;AAAA,MAC3C;AAAA,IAAA;AAAA,EAEJ;AAGA,qBAAmB,QAAQ,KAAK;AAGhC,MAAI,MAAM,SAAS;AACjB,UAAM,QAAQ,MAAM;AAAA,EACtB;AAEA,SAAO;AACT;AAKO,MAAM,gBAAuC,CAAC,MAAM,MAAM,SAAS;AAExE,sBAAoB,MAAM,MAAM,IAAI;AAGpC,mBAAiB,MAAM,MAAM,IAAI;AAGjC,mBAAiB,MAAM,MAAM,IAAI;AAGjC,oBAAkB,MAAM,MAAM,IAAI;AACpC;"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const applyPhaser = require("../appliers/applyPhaser.cjs");
4
+ const applyText = require("../appliers/applyText.cjs");
5
+ const applyTextLayout = require("../appliers/applyTextLayout.cjs");
6
+ const applyTransform = require("../appliers/applyTransform.cjs");
7
+ const createPhaser = require("../creators/createPhaser.cjs");
8
+ const createTextLayout = require("../creators/createTextLayout.cjs");
9
+ const createTransform = require("../creators/createTransform.cjs");
10
+ const textCreator = (scene, props) => {
11
+ const text = scene.add.text(
12
+ createTransform.resolveAnimatableNumber(props.x) ?? 0,
13
+ createTransform.resolveAnimatableNumber(props.y) ?? 0,
14
+ props.text ?? "",
15
+ props.style
16
+ );
17
+ if (props.headless) {
18
+ text.setOrigin(0.5, 0.5);
19
+ } else {
20
+ text.setOrigin(0, 0);
21
+ }
22
+ const normalizedProps = { ...props };
23
+ if (props.headless) {
24
+ delete normalizedProps.padding;
25
+ delete normalizedProps.margin;
26
+ delete normalizedProps.gap;
27
+ } else {
28
+ if (normalizedProps.rotation !== void 0) {
29
+ delete normalizedProps.rotation;
30
+ }
31
+ }
32
+ createTransform.createTransform(text, normalizedProps);
33
+ createPhaser.createPhaser(text, normalizedProps);
34
+ applyText.applyTextProps(text, {}, normalizedProps);
35
+ createTextLayout.createTextLayout(text, normalizedProps);
36
+ return text;
37
+ };
38
+ const textPatcher = (node, prev, next) => {
39
+ if (prev.headless !== next.headless) {
40
+ if (next.headless) {
41
+ node.setOrigin(0.5, 0.5);
42
+ } else {
43
+ node.setOrigin(0, 0);
44
+ }
45
+ }
46
+ const normalizedPrev = { ...prev };
47
+ const normalizedNext = { ...next };
48
+ if (next.headless) {
49
+ delete normalizedNext.padding;
50
+ delete normalizedNext.margin;
51
+ delete normalizedNext.gap;
52
+ } else {
53
+ if (normalizedNext.rotation !== void 0) {
54
+ delete normalizedNext.rotation;
55
+ }
56
+ }
57
+ if (prev.headless) {
58
+ delete normalizedPrev.padding;
59
+ delete normalizedPrev.margin;
60
+ delete normalizedPrev.gap;
61
+ } else {
62
+ if (normalizedPrev.rotation !== void 0) {
63
+ delete normalizedPrev.rotation;
64
+ }
65
+ }
66
+ applyTransform.applyTransformProps(node, normalizedPrev, normalizedNext);
67
+ applyPhaser.applyPhaserProps(node, normalizedPrev, normalizedNext);
68
+ applyText.applyTextProps(node, normalizedPrev, normalizedNext);
69
+ applyTextLayout.applyTextLayout(node, normalizedPrev, normalizedNext);
70
+ };
71
+ exports.textCreator = textCreator;
72
+ exports.textPatcher = textPatcher;
73
+ //# sourceMappingURL=text.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.cjs","sources":["../../../src/components/primitives/text.ts"],"sourcesContent":["/**\n * Text component - Phaser Text GameObject for rendering text\n * Status: IMPLEMENTED ✅\n *\n * Design Overview:\n * ================\n *\n * 1. Component Role: TEXT RENDERING\n * Purpose: Display styled text in UI layouts\n * Phaser Type: Phaser.GameObjects.Text (bitmap-based text rendering)\n * Characteristics:\n * - Layout-aware by default (participates in parent layout)\n * - Auto-sizing based on text content + font metrics\n * - Supports Phaser text styling (color, font, alignment, etc.)\n *\n * 2. Headless Default: FALSE ✅\n * Decision: Text participates in layout by default\n * Reasoning:\n * - Text is a UI element (labels, paragraphs, buttons)\n * - Should affect parent container dimensions\n * - Similar to HTML text nodes\n * Use Cases:\n * - ✅ Layout-aware (default): Labels, buttons, paragraphs, UI text\n * - ❌ Headless (optional): Floating damage numbers, debug text, tooltips\n * Usage:\n * <Text text=\"Label\" /> // Layout-aware\n * <Text text=\"+100\" headless={true} /> // Floating (no layout impact)\n *\n * 3. Layout Size Provider: UN-ROTATED DIMENSIONS ✅\n * Implementation: Uses text.width and text.height (un-rotated)\n * Behavior:\n * - Returns un-rotated text dimensions\n * - Rotation is IGNORED for layout-aware text (headless=false)\n * - Rotation only works with headless=true (no layout impact)\n * Reasoning:\n * - Flow layout is incompatible with rotation (causes positioning issues)\n * - Rotated text would overlap siblings in flow layout\n * - getBounds() position compensation is complex and error-prone\n * Example:\n * <Text text=\"Hello\" /> // ✅ Layout size: 100x20\n * <Text text=\"World\" rotation={Math.PI/4} /> // ⚠️ Rotation IGNORED, size: 100x20\n * <Text text=\"World\" rotation={Math.PI/4} headless={true} /> // ✅ Rotated, no layout\n * Recommendation: Use rotation only with headless=true or absolute positioning\n *\n * 4. Text Content & Styling:\n * Props:\n * - text: string (required, the text to display)\n * - style: Phaser.Types.GameObjects.Text.TextStyle (font, color, etc.)\n * - fontStyle, align, maxWidth: Convenience props (legacy)\n * Styling Priority:\n * 1. Inline style prop (highest)\n * 2. Individual props (fontStyle, align)\n * 3. Theme defaults (lowest)\n * Example:\n * <Text\n * text=\"Hello\"\n * style={{ fontSize: '24px', color: '#ffffff', fontFamily: 'Arial' }}\n * />\n *\n * 5. Margin Support:\n * Feature: Text supports margin prop (unique among primitives)\n * Reasoning:\n * - Text often needs spacing from siblings (inline elements)\n * - Margin affects layout calculations (added to text dimensions)\n * - Similar to CSS inline element margin\n * Usage:\n * <Text text=\"Label\" margin={{ left: 10, right: 10 }} />\n * <Text text=\"Spaced\" margin={8} /> // All sides\n *\n * 6. Layout Behavior:\n * Sizing:\n * - Auto-size: Text dimensions = rendered text bounds (default)\n * - No explicit width/height props (text size determined by content)\n * - maxWidth prop wraps text (Phaser feature)\n * Positioning:\n * - Positioned by parent layout engine (flexbox-style)\n * - x/y props override layout position (absolute positioning)\n *\n * 7. Origin Behavior:\n * Current: Phaser default origin (0, 0) - top-left\n * Reasoning:\n * - Text aligns naturally with layout flow\n * - Top-left origin simplifies position calculations\n * - Consistent with HTML text rendering\n * Note: Origin affects rotation pivot (if rotation applied)\n *\n * 8. Common Patterns:\n * Label:\n * <View direction=\"row\" gap={10}>\n * <Text text=\"Name:\" />\n * <Text text={userName} />\n * </View>\n * Styled Text:\n * <Text\n * text=\"Title\"\n * style={{ fontSize: '32px', fontWeight: 'bold', color: '#ff0000' }}\n * />\n * Wrapped Text:\n * <Text text={longParagraph} maxWidth={300} />\n * Floating Damage:\n * <Text text=\"-50 HP\" headless={true} alpha={0.8} />\n *\n * 9. Performance Considerations:\n * - Text rendering is relatively expensive (canvas-based)\n * - Frequent text changes trigger re-render\n * - Long text with maxWidth: word-wrap calculation cost\n * - Consider BitmapText for better performance (future component)\n * - Text batching: Multiple Text objects don't batch (separate draw calls)\n *\n * 10. Known Limitations:\n * - Rotation only supported with headless=true (ignored for layout-aware text)\n * → Flow layout is incompatible with rotation\n * - No rich text support (HTML tags, colors within text)\n * - Limited text effects (no shadows, outlines in base component)\n * - WordWrap with maxWidth: Can't specify ellipsis truncation\n * - Changing text frequently: Performance impact\n *\n * Implementation Status:\n * ======================\n * [✅] Phaser Text creation with style support\n * [✅] Transform props (position, scale, alpha)\n * [✅] Layout system integration (__layoutProps, __getLayoutSize)\n * [✅] Margin support (unique feature)\n * [✅] Text content and style patching\n * [✅] Theme system integration\n * [⚠️] Rotation - Only with headless=true (ignored for layout-aware text)\n * [❌] Rich text support - Future feature\n * [❌] Text effects (shadow, outline) - Future feature\n */\nimport type * as Phaser from 'phaser'\nimport type {\n EdgeInsets,\n LayoutProps,\n PhaserProps,\n TextSpecificProps,\n TransformProps,\n} from '../../core-props'\nimport type { HostCreator, HostPatcher } from '../../host'\nimport type { PropsDefaultExtension } from '../../types'\nimport { applyPhaserProps } from '../appliers/applyPhaser'\nimport { applyTextProps } from '../appliers/applyText'\nimport { applyTextLayout } from '../appliers/applyTextLayout'\nimport { applyTransformProps } from '../appliers/applyTransform'\nimport { createPhaser } from '../creators/createPhaser'\nimport { createTextLayout } from '../creators/createTextLayout'\nimport { createTransform, resolveAnimatableNumber } from '../creators/createTransform'\n\n/**\n * Base props for Text - composing shared prop groups\n * Includes optional margin for layout engine use\n */\nexport interface TextBaseProps\n extends TransformProps, PhaserProps, Pick<LayoutProps, 'headless'>, TextSpecificProps {\n margin?: EdgeInsets\n // Legacy: support Phaser's style object directly\n style?: Phaser.Types.GameObjects.Text.TextStyle | undefined\n}\n\n/**\n * Props for Text component - extends base props with JSX-specific props\n */\nexport interface TextProps extends TextBaseProps, PropsDefaultExtension<Phaser.GameObjects.Text> {}\n\n/**\n * Text creator - creates a Phaser Text object\n */\nexport const textCreator: HostCreator<'Text'> = (scene, props) => {\n const text = scene.add.text(\n resolveAnimatableNumber(props.x) ?? 0,\n resolveAnimatableNumber(props.y) ?? 0,\n props.text ?? '',\n props.style\n )\n\n // Set origin based on headless flag\n // Headless: (0.5, 0.5) - centered, works naturally with rotation/scale\n // Layout-aware: (0, 0) - top-left, aligns with layout flow\n if (props.headless) {\n text.setOrigin(0.5, 0.5)\n } else {\n text.setOrigin(0, 0)\n }\n\n // Normalize props for headless objects\n // Headless objects are positioned as points - no spacing or rotation constraints\n const normalizedProps = { ...props } as Record<string, unknown>\n if (props.headless) {\n // Remove spacing props (headless = positioned as point)\n delete normalizedProps.padding\n delete normalizedProps.margin\n delete normalizedProps.gap\n } else {\n // Remove rotation (only supported with headless=true)\n if (normalizedProps.rotation !== undefined) {\n delete normalizedProps.rotation\n }\n }\n\n // Apply transform props (scale, rotation if headless)\n createTransform(text, normalizedProps)\n\n // Apply Phaser display props (alpha, depth, visible)\n createPhaser(text, normalizedProps)\n\n // Re-apply text props after alpha so Phaser text background follows the same visual alpha.\n applyTextProps(text, {}, normalizedProps)\n\n // Setup layout system (props and size provider)\n createTextLayout(text, normalizedProps)\n\n return text\n}\n\n/**\n * Text patcher - updates Text properties\n */\nexport const textPatcher: HostPatcher<'Text'> = (node, prev, next) => {\n // Update origin if headless flag changed\n if (prev.headless !== next.headless) {\n if (next.headless) {\n node.setOrigin(0.5, 0.5) // Headless: centered\n } else {\n node.setOrigin(0, 0) // Layout-aware: top-left\n }\n }\n\n // Normalize props for headless objects\n const normalizedPrev = { ...prev } as Record<string, unknown>\n const normalizedNext = { ...next } as Record<string, unknown>\n\n if (next.headless) {\n // Remove spacing props (headless = positioned as point)\n delete normalizedNext.padding\n delete normalizedNext.margin\n delete normalizedNext.gap\n } else {\n // Remove rotation (only supported with headless=true)\n if (normalizedNext.rotation !== undefined) {\n delete normalizedNext.rotation\n }\n }\n\n if (prev.headless) {\n delete normalizedPrev.padding\n delete normalizedPrev.margin\n delete normalizedPrev.gap\n } else {\n if (normalizedPrev.rotation !== undefined) {\n delete normalizedPrev.rotation\n }\n }\n\n // Apply transform props (position, rotation only if headless, scale)\n applyTransformProps(node, normalizedPrev, normalizedNext)\n\n // Apply Phaser display props (alpha, depth, visible)\n applyPhaserProps(node, normalizedPrev, normalizedNext)\n\n // Apply text-specific props (text content, color, font, etc.)\n applyTextProps(node, normalizedPrev, normalizedNext)\n\n // Apply layout props and update size provider if needed\n applyTextLayout(node, normalizedPrev, normalizedNext)\n}\n"],"names":["resolveAnimatableNumber","createTransform","createPhaser","applyTextProps","createTextLayout","applyTransformProps","applyPhaserProps","applyTextLayout"],"mappings":";;;;;;;;;AAsKO,MAAM,cAAmC,CAAC,OAAO,UAAU;AAChE,QAAM,OAAO,MAAM,IAAI;AAAA,IACrBA,wCAAwB,MAAM,CAAC,KAAK;AAAA,IACpCA,wCAAwB,MAAM,CAAC,KAAK;AAAA,IACpC,MAAM,QAAQ;AAAA,IACd,MAAM;AAAA,EAAA;AAMR,MAAI,MAAM,UAAU;AAClB,SAAK,UAAU,KAAK,GAAG;AAAA,EACzB,OAAO;AACL,SAAK,UAAU,GAAG,CAAC;AAAA,EACrB;AAIA,QAAM,kBAAkB,EAAE,GAAG,MAAA;AAC7B,MAAI,MAAM,UAAU;AAElB,WAAO,gBAAgB;AACvB,WAAO,gBAAgB;AACvB,WAAO,gBAAgB;AAAA,EACzB,OAAO;AAEL,QAAI,gBAAgB,aAAa,QAAW;AAC1C,aAAO,gBAAgB;AAAA,IACzB;AAAA,EACF;AAGAC,kBAAAA,gBAAgB,MAAM,eAAe;AAGrCC,eAAAA,aAAa,MAAM,eAAe;AAGlCC,2BAAe,MAAM,CAAA,GAAI,eAAe;AAGxCC,mBAAAA,iBAAiB,MAAM,eAAe;AAEtC,SAAO;AACT;AAKO,MAAM,cAAmC,CAAC,MAAM,MAAM,SAAS;AAEpE,MAAI,KAAK,aAAa,KAAK,UAAU;AACnC,QAAI,KAAK,UAAU;AACjB,WAAK,UAAU,KAAK,GAAG;AAAA,IACzB,OAAO;AACL,WAAK,UAAU,GAAG,CAAC;AAAA,IACrB;AAAA,EACF;AAGA,QAAM,iBAAiB,EAAE,GAAG,KAAA;AAC5B,QAAM,iBAAiB,EAAE,GAAG,KAAA;AAE5B,MAAI,KAAK,UAAU;AAEjB,WAAO,eAAe;AACtB,WAAO,eAAe;AACtB,WAAO,eAAe;AAAA,EACxB,OAAO;AAEL,QAAI,eAAe,aAAa,QAAW;AACzC,aAAO,eAAe;AAAA,IACxB;AAAA,EACF;AAEA,MAAI,KAAK,UAAU;AACjB,WAAO,eAAe;AACtB,WAAO,eAAe;AACtB,WAAO,eAAe;AAAA,EACxB,OAAO;AACL,QAAI,eAAe,aAAa,QAAW;AACzC,aAAO,eAAe;AAAA,IACxB;AAAA,EACF;AAGAC,qCAAoB,MAAM,gBAAgB,cAAc;AAGxDC,+BAAiB,MAAM,gBAAgB,cAAc;AAGrDH,2BAAe,MAAM,gBAAgB,cAAc;AAGnDI,kCAAgB,MAAM,gBAAgB,cAAc;AACtD;;;"}
@@ -0,0 +1,155 @@
1
+ import { EdgeInsets, LayoutProps, PhaserProps, TextSpecificProps, TransformProps } from '../../core-props';
2
+ import { HostCreator, HostPatcher } from '../../host';
3
+ import { PropsDefaultExtension } from '../../types';
4
+ /**
5
+ * Text component - Phaser Text GameObject for rendering text
6
+ * Status: IMPLEMENTED ✅
7
+ *
8
+ * Design Overview:
9
+ * ================
10
+ *
11
+ * 1. Component Role: TEXT RENDERING
12
+ * Purpose: Display styled text in UI layouts
13
+ * Phaser Type: Phaser.GameObjects.Text (bitmap-based text rendering)
14
+ * Characteristics:
15
+ * - Layout-aware by default (participates in parent layout)
16
+ * - Auto-sizing based on text content + font metrics
17
+ * - Supports Phaser text styling (color, font, alignment, etc.)
18
+ *
19
+ * 2. Headless Default: FALSE ✅
20
+ * Decision: Text participates in layout by default
21
+ * Reasoning:
22
+ * - Text is a UI element (labels, paragraphs, buttons)
23
+ * - Should affect parent container dimensions
24
+ * - Similar to HTML text nodes
25
+ * Use Cases:
26
+ * - ✅ Layout-aware (default): Labels, buttons, paragraphs, UI text
27
+ * - ❌ Headless (optional): Floating damage numbers, debug text, tooltips
28
+ * Usage:
29
+ * <Text text="Label" /> // Layout-aware
30
+ * <Text text="+100" headless={true} /> // Floating (no layout impact)
31
+ *
32
+ * 3. Layout Size Provider: UN-ROTATED DIMENSIONS ✅
33
+ * Implementation: Uses text.width and text.height (un-rotated)
34
+ * Behavior:
35
+ * - Returns un-rotated text dimensions
36
+ * - Rotation is IGNORED for layout-aware text (headless=false)
37
+ * - Rotation only works with headless=true (no layout impact)
38
+ * Reasoning:
39
+ * - Flow layout is incompatible with rotation (causes positioning issues)
40
+ * - Rotated text would overlap siblings in flow layout
41
+ * - getBounds() position compensation is complex and error-prone
42
+ * Example:
43
+ * <Text text="Hello" /> // ✅ Layout size: 100x20
44
+ * <Text text="World" rotation={Math.PI/4} /> // ⚠️ Rotation IGNORED, size: 100x20
45
+ * <Text text="World" rotation={Math.PI/4} headless={true} /> // ✅ Rotated, no layout
46
+ * Recommendation: Use rotation only with headless=true or absolute positioning
47
+ *
48
+ * 4. Text Content & Styling:
49
+ * Props:
50
+ * - text: string (required, the text to display)
51
+ * - style: Phaser.Types.GameObjects.Text.TextStyle (font, color, etc.)
52
+ * - fontStyle, align, maxWidth: Convenience props (legacy)
53
+ * Styling Priority:
54
+ * 1. Inline style prop (highest)
55
+ * 2. Individual props (fontStyle, align)
56
+ * 3. Theme defaults (lowest)
57
+ * Example:
58
+ * <Text
59
+ * text="Hello"
60
+ * style={{ fontSize: '24px', color: '#ffffff', fontFamily: 'Arial' }}
61
+ * />
62
+ *
63
+ * 5. Margin Support:
64
+ * Feature: Text supports margin prop (unique among primitives)
65
+ * Reasoning:
66
+ * - Text often needs spacing from siblings (inline elements)
67
+ * - Margin affects layout calculations (added to text dimensions)
68
+ * - Similar to CSS inline element margin
69
+ * Usage:
70
+ * <Text text="Label" margin={{ left: 10, right: 10 }} />
71
+ * <Text text="Spaced" margin={8} /> // All sides
72
+ *
73
+ * 6. Layout Behavior:
74
+ * Sizing:
75
+ * - Auto-size: Text dimensions = rendered text bounds (default)
76
+ * - No explicit width/height props (text size determined by content)
77
+ * - maxWidth prop wraps text (Phaser feature)
78
+ * Positioning:
79
+ * - Positioned by parent layout engine (flexbox-style)
80
+ * - x/y props override layout position (absolute positioning)
81
+ *
82
+ * 7. Origin Behavior:
83
+ * Current: Phaser default origin (0, 0) - top-left
84
+ * Reasoning:
85
+ * - Text aligns naturally with layout flow
86
+ * - Top-left origin simplifies position calculations
87
+ * - Consistent with HTML text rendering
88
+ * Note: Origin affects rotation pivot (if rotation applied)
89
+ *
90
+ * 8. Common Patterns:
91
+ * Label:
92
+ * <View direction="row" gap={10}>
93
+ * <Text text="Name:" />
94
+ * <Text text={userName} />
95
+ * </View>
96
+ * Styled Text:
97
+ * <Text
98
+ * text="Title"
99
+ * style={{ fontSize: '32px', fontWeight: 'bold', color: '#ff0000' }}
100
+ * />
101
+ * Wrapped Text:
102
+ * <Text text={longParagraph} maxWidth={300} />
103
+ * Floating Damage:
104
+ * <Text text="-50 HP" headless={true} alpha={0.8} />
105
+ *
106
+ * 9. Performance Considerations:
107
+ * - Text rendering is relatively expensive (canvas-based)
108
+ * - Frequent text changes trigger re-render
109
+ * - Long text with maxWidth: word-wrap calculation cost
110
+ * - Consider BitmapText for better performance (future component)
111
+ * - Text batching: Multiple Text objects don't batch (separate draw calls)
112
+ *
113
+ * 10. Known Limitations:
114
+ * - Rotation only supported with headless=true (ignored for layout-aware text)
115
+ * → Flow layout is incompatible with rotation
116
+ * - No rich text support (HTML tags, colors within text)
117
+ * - Limited text effects (no shadows, outlines in base component)
118
+ * - WordWrap with maxWidth: Can't specify ellipsis truncation
119
+ * - Changing text frequently: Performance impact
120
+ *
121
+ * Implementation Status:
122
+ * ======================
123
+ * [✅] Phaser Text creation with style support
124
+ * [✅] Transform props (position, scale, alpha)
125
+ * [✅] Layout system integration (__layoutProps, __getLayoutSize)
126
+ * [✅] Margin support (unique feature)
127
+ * [✅] Text content and style patching
128
+ * [✅] Theme system integration
129
+ * [⚠️] Rotation - Only with headless=true (ignored for layout-aware text)
130
+ * [❌] Rich text support - Future feature
131
+ * [❌] Text effects (shadow, outline) - Future feature
132
+ */
133
+ import type * as Phaser from 'phaser';
134
+ /**
135
+ * Base props for Text - composing shared prop groups
136
+ * Includes optional margin for layout engine use
137
+ */
138
+ export interface TextBaseProps extends TransformProps, PhaserProps, Pick<LayoutProps, 'headless'>, TextSpecificProps {
139
+ margin?: EdgeInsets;
140
+ style?: Phaser.Types.GameObjects.Text.TextStyle | undefined;
141
+ }
142
+ /**
143
+ * Props for Text component - extends base props with JSX-specific props
144
+ */
145
+ export interface TextProps extends TextBaseProps, PropsDefaultExtension<Phaser.GameObjects.Text> {
146
+ }
147
+ /**
148
+ * Text creator - creates a Phaser Text object
149
+ */
150
+ export declare const textCreator: HostCreator<'Text'>;
151
+ /**
152
+ * Text patcher - updates Text properties
153
+ */
154
+ export declare const textPatcher: HostPatcher<'Text'>;
155
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgIG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAA;AACrC,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,cAAc,EACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AASxD;;;GAGG;AACH,MAAM,WAAW,aACf,SAAQ,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,iBAAiB;IACrF,MAAM,CAAC,EAAE,UAAU,CAAA;IAEnB,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,aAAa,EAAE,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;CAAG;AAEnG;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,CA6C3C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,CA+C3C,CAAA"}
@@ -0,0 +1,73 @@
1
+ import { applyPhaserProps } from "../appliers/applyPhaser.js";
2
+ import { applyTextProps } from "../appliers/applyText.js";
3
+ import { applyTextLayout } from "../appliers/applyTextLayout.js";
4
+ import { applyTransformProps } from "../appliers/applyTransform.js";
5
+ import { createPhaser } from "../creators/createPhaser.js";
6
+ import { createTextLayout } from "../creators/createTextLayout.js";
7
+ import { resolveAnimatableNumber, createTransform } from "../creators/createTransform.js";
8
+ const textCreator = (scene, props) => {
9
+ const text = scene.add.text(
10
+ resolveAnimatableNumber(props.x) ?? 0,
11
+ resolveAnimatableNumber(props.y) ?? 0,
12
+ props.text ?? "",
13
+ props.style
14
+ );
15
+ if (props.headless) {
16
+ text.setOrigin(0.5, 0.5);
17
+ } else {
18
+ text.setOrigin(0, 0);
19
+ }
20
+ const normalizedProps = { ...props };
21
+ if (props.headless) {
22
+ delete normalizedProps.padding;
23
+ delete normalizedProps.margin;
24
+ delete normalizedProps.gap;
25
+ } else {
26
+ if (normalizedProps.rotation !== void 0) {
27
+ delete normalizedProps.rotation;
28
+ }
29
+ }
30
+ createTransform(text, normalizedProps);
31
+ createPhaser(text, normalizedProps);
32
+ applyTextProps(text, {}, normalizedProps);
33
+ createTextLayout(text, normalizedProps);
34
+ return text;
35
+ };
36
+ const textPatcher = (node, prev, next) => {
37
+ if (prev.headless !== next.headless) {
38
+ if (next.headless) {
39
+ node.setOrigin(0.5, 0.5);
40
+ } else {
41
+ node.setOrigin(0, 0);
42
+ }
43
+ }
44
+ const normalizedPrev = { ...prev };
45
+ const normalizedNext = { ...next };
46
+ if (next.headless) {
47
+ delete normalizedNext.padding;
48
+ delete normalizedNext.margin;
49
+ delete normalizedNext.gap;
50
+ } else {
51
+ if (normalizedNext.rotation !== void 0) {
52
+ delete normalizedNext.rotation;
53
+ }
54
+ }
55
+ if (prev.headless) {
56
+ delete normalizedPrev.padding;
57
+ delete normalizedPrev.margin;
58
+ delete normalizedPrev.gap;
59
+ } else {
60
+ if (normalizedPrev.rotation !== void 0) {
61
+ delete normalizedPrev.rotation;
62
+ }
63
+ }
64
+ applyTransformProps(node, normalizedPrev, normalizedNext);
65
+ applyPhaserProps(node, normalizedPrev, normalizedNext);
66
+ applyTextProps(node, normalizedPrev, normalizedNext);
67
+ applyTextLayout(node, normalizedPrev, normalizedNext);
68
+ };
69
+ export {
70
+ textCreator,
71
+ textPatcher
72
+ };
73
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sources":["../../../src/components/primitives/text.ts"],"sourcesContent":["/**\n * Text component - Phaser Text GameObject for rendering text\n * Status: IMPLEMENTED ✅\n *\n * Design Overview:\n * ================\n *\n * 1. Component Role: TEXT RENDERING\n * Purpose: Display styled text in UI layouts\n * Phaser Type: Phaser.GameObjects.Text (bitmap-based text rendering)\n * Characteristics:\n * - Layout-aware by default (participates in parent layout)\n * - Auto-sizing based on text content + font metrics\n * - Supports Phaser text styling (color, font, alignment, etc.)\n *\n * 2. Headless Default: FALSE ✅\n * Decision: Text participates in layout by default\n * Reasoning:\n * - Text is a UI element (labels, paragraphs, buttons)\n * - Should affect parent container dimensions\n * - Similar to HTML text nodes\n * Use Cases:\n * - ✅ Layout-aware (default): Labels, buttons, paragraphs, UI text\n * - ❌ Headless (optional): Floating damage numbers, debug text, tooltips\n * Usage:\n * <Text text=\"Label\" /> // Layout-aware\n * <Text text=\"+100\" headless={true} /> // Floating (no layout impact)\n *\n * 3. Layout Size Provider: UN-ROTATED DIMENSIONS ✅\n * Implementation: Uses text.width and text.height (un-rotated)\n * Behavior:\n * - Returns un-rotated text dimensions\n * - Rotation is IGNORED for layout-aware text (headless=false)\n * - Rotation only works with headless=true (no layout impact)\n * Reasoning:\n * - Flow layout is incompatible with rotation (causes positioning issues)\n * - Rotated text would overlap siblings in flow layout\n * - getBounds() position compensation is complex and error-prone\n * Example:\n * <Text text=\"Hello\" /> // ✅ Layout size: 100x20\n * <Text text=\"World\" rotation={Math.PI/4} /> // ⚠️ Rotation IGNORED, size: 100x20\n * <Text text=\"World\" rotation={Math.PI/4} headless={true} /> // ✅ Rotated, no layout\n * Recommendation: Use rotation only with headless=true or absolute positioning\n *\n * 4. Text Content & Styling:\n * Props:\n * - text: string (required, the text to display)\n * - style: Phaser.Types.GameObjects.Text.TextStyle (font, color, etc.)\n * - fontStyle, align, maxWidth: Convenience props (legacy)\n * Styling Priority:\n * 1. Inline style prop (highest)\n * 2. Individual props (fontStyle, align)\n * 3. Theme defaults (lowest)\n * Example:\n * <Text\n * text=\"Hello\"\n * style={{ fontSize: '24px', color: '#ffffff', fontFamily: 'Arial' }}\n * />\n *\n * 5. Margin Support:\n * Feature: Text supports margin prop (unique among primitives)\n * Reasoning:\n * - Text often needs spacing from siblings (inline elements)\n * - Margin affects layout calculations (added to text dimensions)\n * - Similar to CSS inline element margin\n * Usage:\n * <Text text=\"Label\" margin={{ left: 10, right: 10 }} />\n * <Text text=\"Spaced\" margin={8} /> // All sides\n *\n * 6. Layout Behavior:\n * Sizing:\n * - Auto-size: Text dimensions = rendered text bounds (default)\n * - No explicit width/height props (text size determined by content)\n * - maxWidth prop wraps text (Phaser feature)\n * Positioning:\n * - Positioned by parent layout engine (flexbox-style)\n * - x/y props override layout position (absolute positioning)\n *\n * 7. Origin Behavior:\n * Current: Phaser default origin (0, 0) - top-left\n * Reasoning:\n * - Text aligns naturally with layout flow\n * - Top-left origin simplifies position calculations\n * - Consistent with HTML text rendering\n * Note: Origin affects rotation pivot (if rotation applied)\n *\n * 8. Common Patterns:\n * Label:\n * <View direction=\"row\" gap={10}>\n * <Text text=\"Name:\" />\n * <Text text={userName} />\n * </View>\n * Styled Text:\n * <Text\n * text=\"Title\"\n * style={{ fontSize: '32px', fontWeight: 'bold', color: '#ff0000' }}\n * />\n * Wrapped Text:\n * <Text text={longParagraph} maxWidth={300} />\n * Floating Damage:\n * <Text text=\"-50 HP\" headless={true} alpha={0.8} />\n *\n * 9. Performance Considerations:\n * - Text rendering is relatively expensive (canvas-based)\n * - Frequent text changes trigger re-render\n * - Long text with maxWidth: word-wrap calculation cost\n * - Consider BitmapText for better performance (future component)\n * - Text batching: Multiple Text objects don't batch (separate draw calls)\n *\n * 10. Known Limitations:\n * - Rotation only supported with headless=true (ignored for layout-aware text)\n * → Flow layout is incompatible with rotation\n * - No rich text support (HTML tags, colors within text)\n * - Limited text effects (no shadows, outlines in base component)\n * - WordWrap with maxWidth: Can't specify ellipsis truncation\n * - Changing text frequently: Performance impact\n *\n * Implementation Status:\n * ======================\n * [✅] Phaser Text creation with style support\n * [✅] Transform props (position, scale, alpha)\n * [✅] Layout system integration (__layoutProps, __getLayoutSize)\n * [✅] Margin support (unique feature)\n * [✅] Text content and style patching\n * [✅] Theme system integration\n * [⚠️] Rotation - Only with headless=true (ignored for layout-aware text)\n * [❌] Rich text support - Future feature\n * [❌] Text effects (shadow, outline) - Future feature\n */\nimport type * as Phaser from 'phaser'\nimport type {\n EdgeInsets,\n LayoutProps,\n PhaserProps,\n TextSpecificProps,\n TransformProps,\n} from '../../core-props'\nimport type { HostCreator, HostPatcher } from '../../host'\nimport type { PropsDefaultExtension } from '../../types'\nimport { applyPhaserProps } from '../appliers/applyPhaser'\nimport { applyTextProps } from '../appliers/applyText'\nimport { applyTextLayout } from '../appliers/applyTextLayout'\nimport { applyTransformProps } from '../appliers/applyTransform'\nimport { createPhaser } from '../creators/createPhaser'\nimport { createTextLayout } from '../creators/createTextLayout'\nimport { createTransform, resolveAnimatableNumber } from '../creators/createTransform'\n\n/**\n * Base props for Text - composing shared prop groups\n * Includes optional margin for layout engine use\n */\nexport interface TextBaseProps\n extends TransformProps, PhaserProps, Pick<LayoutProps, 'headless'>, TextSpecificProps {\n margin?: EdgeInsets\n // Legacy: support Phaser's style object directly\n style?: Phaser.Types.GameObjects.Text.TextStyle | undefined\n}\n\n/**\n * Props for Text component - extends base props with JSX-specific props\n */\nexport interface TextProps extends TextBaseProps, PropsDefaultExtension<Phaser.GameObjects.Text> {}\n\n/**\n * Text creator - creates a Phaser Text object\n */\nexport const textCreator: HostCreator<'Text'> = (scene, props) => {\n const text = scene.add.text(\n resolveAnimatableNumber(props.x) ?? 0,\n resolveAnimatableNumber(props.y) ?? 0,\n props.text ?? '',\n props.style\n )\n\n // Set origin based on headless flag\n // Headless: (0.5, 0.5) - centered, works naturally with rotation/scale\n // Layout-aware: (0, 0) - top-left, aligns with layout flow\n if (props.headless) {\n text.setOrigin(0.5, 0.5)\n } else {\n text.setOrigin(0, 0)\n }\n\n // Normalize props for headless objects\n // Headless objects are positioned as points - no spacing or rotation constraints\n const normalizedProps = { ...props } as Record<string, unknown>\n if (props.headless) {\n // Remove spacing props (headless = positioned as point)\n delete normalizedProps.padding\n delete normalizedProps.margin\n delete normalizedProps.gap\n } else {\n // Remove rotation (only supported with headless=true)\n if (normalizedProps.rotation !== undefined) {\n delete normalizedProps.rotation\n }\n }\n\n // Apply transform props (scale, rotation if headless)\n createTransform(text, normalizedProps)\n\n // Apply Phaser display props (alpha, depth, visible)\n createPhaser(text, normalizedProps)\n\n // Re-apply text props after alpha so Phaser text background follows the same visual alpha.\n applyTextProps(text, {}, normalizedProps)\n\n // Setup layout system (props and size provider)\n createTextLayout(text, normalizedProps)\n\n return text\n}\n\n/**\n * Text patcher - updates Text properties\n */\nexport const textPatcher: HostPatcher<'Text'> = (node, prev, next) => {\n // Update origin if headless flag changed\n if (prev.headless !== next.headless) {\n if (next.headless) {\n node.setOrigin(0.5, 0.5) // Headless: centered\n } else {\n node.setOrigin(0, 0) // Layout-aware: top-left\n }\n }\n\n // Normalize props for headless objects\n const normalizedPrev = { ...prev } as Record<string, unknown>\n const normalizedNext = { ...next } as Record<string, unknown>\n\n if (next.headless) {\n // Remove spacing props (headless = positioned as point)\n delete normalizedNext.padding\n delete normalizedNext.margin\n delete normalizedNext.gap\n } else {\n // Remove rotation (only supported with headless=true)\n if (normalizedNext.rotation !== undefined) {\n delete normalizedNext.rotation\n }\n }\n\n if (prev.headless) {\n delete normalizedPrev.padding\n delete normalizedPrev.margin\n delete normalizedPrev.gap\n } else {\n if (normalizedPrev.rotation !== undefined) {\n delete normalizedPrev.rotation\n }\n }\n\n // Apply transform props (position, rotation only if headless, scale)\n applyTransformProps(node, normalizedPrev, normalizedNext)\n\n // Apply Phaser display props (alpha, depth, visible)\n applyPhaserProps(node, normalizedPrev, normalizedNext)\n\n // Apply text-specific props (text content, color, font, etc.)\n applyTextProps(node, normalizedPrev, normalizedNext)\n\n // Apply layout props and update size provider if needed\n applyTextLayout(node, normalizedPrev, normalizedNext)\n}\n"],"names":[],"mappings":";;;;;;;AAsKO,MAAM,cAAmC,CAAC,OAAO,UAAU;AAChE,QAAM,OAAO,MAAM,IAAI;AAAA,IACrB,wBAAwB,MAAM,CAAC,KAAK;AAAA,IACpC,wBAAwB,MAAM,CAAC,KAAK;AAAA,IACpC,MAAM,QAAQ;AAAA,IACd,MAAM;AAAA,EAAA;AAMR,MAAI,MAAM,UAAU;AAClB,SAAK,UAAU,KAAK,GAAG;AAAA,EACzB,OAAO;AACL,SAAK,UAAU,GAAG,CAAC;AAAA,EACrB;AAIA,QAAM,kBAAkB,EAAE,GAAG,MAAA;AAC7B,MAAI,MAAM,UAAU;AAElB,WAAO,gBAAgB;AACvB,WAAO,gBAAgB;AACvB,WAAO,gBAAgB;AAAA,EACzB,OAAO;AAEL,QAAI,gBAAgB,aAAa,QAAW;AAC1C,aAAO,gBAAgB;AAAA,IACzB;AAAA,EACF;AAGA,kBAAgB,MAAM,eAAe;AAGrC,eAAa,MAAM,eAAe;AAGlC,iBAAe,MAAM,CAAA,GAAI,eAAe;AAGxC,mBAAiB,MAAM,eAAe;AAEtC,SAAO;AACT;AAKO,MAAM,cAAmC,CAAC,MAAM,MAAM,SAAS;AAEpE,MAAI,KAAK,aAAa,KAAK,UAAU;AACnC,QAAI,KAAK,UAAU;AACjB,WAAK,UAAU,KAAK,GAAG;AAAA,IACzB,OAAO;AACL,WAAK,UAAU,GAAG,CAAC;AAAA,IACrB;AAAA,EACF;AAGA,QAAM,iBAAiB,EAAE,GAAG,KAAA;AAC5B,QAAM,iBAAiB,EAAE,GAAG,KAAA;AAE5B,MAAI,KAAK,UAAU;AAEjB,WAAO,eAAe;AACtB,WAAO,eAAe;AACtB,WAAO,eAAe;AAAA,EACxB,OAAO;AAEL,QAAI,eAAe,aAAa,QAAW;AACzC,aAAO,eAAe;AAAA,IACxB;AAAA,EACF;AAEA,MAAI,KAAK,UAAU;AACjB,WAAO,eAAe;AACtB,WAAO,eAAe;AACtB,WAAO,eAAe;AAAA,EACxB,OAAO;AACL,QAAI,eAAe,aAAa,QAAW;AACzC,aAAO,eAAe;AAAA,IACxB;AAAA,EACF;AAGA,sBAAoB,MAAM,gBAAgB,cAAc;AAGxD,mBAAiB,MAAM,gBAAgB,cAAc;AAGrD,iBAAe,MAAM,gBAAgB,cAAc;AAGnD,kBAAgB,MAAM,gBAAgB,cAAc;AACtD;"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const applyPhaser = require("../appliers/applyPhaser.cjs");
4
+ const applyTransform = require("../appliers/applyTransform.cjs");
5
+ const createPhaser = require("../creators/createPhaser.cjs");
6
+ const createTransform = require("../creators/createTransform.cjs");
7
+ function createTileSpriteLayout(tileSprite, props) {
8
+ tileSprite.__layoutProps = props;
9
+ tileSprite.__getLayoutSize = () => {
10
+ if (tileSprite.__layoutProps?.headless) {
11
+ return { width: 0.01, height: 0.01 };
12
+ }
13
+ return {
14
+ width: tileSprite.width,
15
+ height: tileSprite.height
16
+ };
17
+ };
18
+ }
19
+ function applyTileSpriteProps(tileSprite, prev, next) {
20
+ if ((prev.texture !== next.texture || prev.frame !== next.frame) && next.texture) {
21
+ tileSprite.setTexture(next.texture, next.frame);
22
+ }
23
+ if ((prev.width !== next.width || prev.height !== next.height) && typeof next.width === "number" && typeof next.height === "number") {
24
+ tileSprite.setSize(next.width, next.height);
25
+ }
26
+ if (prev.tilePositionX !== next.tilePositionX && typeof next.tilePositionX === "number") {
27
+ tileSprite.tilePositionX = next.tilePositionX;
28
+ }
29
+ if (prev.tilePositionY !== next.tilePositionY && typeof next.tilePositionY === "number") {
30
+ tileSprite.tilePositionY = next.tilePositionY;
31
+ }
32
+ if (prev.tileScaleX !== next.tileScaleX && typeof next.tileScaleX === "number") {
33
+ tileSprite.tileScaleX = next.tileScaleX;
34
+ }
35
+ if (prev.tileScaleY !== next.tileScaleY && typeof next.tileScaleY === "number") {
36
+ tileSprite.tileScaleY = next.tileScaleY;
37
+ }
38
+ if (prev.tint !== next.tint) {
39
+ if (typeof next.tint === "number") {
40
+ tileSprite.setTint(next.tint);
41
+ } else {
42
+ tileSprite.clearTint();
43
+ }
44
+ }
45
+ if (prev.originX !== next.originX || prev.originY !== next.originY) {
46
+ tileSprite.setOrigin(next.originX ?? tileSprite.originX, next.originY ?? tileSprite.originY);
47
+ }
48
+ }
49
+ const tileSpriteCreator = (scene, props) => {
50
+ const tileSprite = scene.add.tileSprite(
51
+ createTransform.resolveAnimatableNumber(props.x) ?? 0,
52
+ createTransform.resolveAnimatableNumber(props.y) ?? 0,
53
+ props.width,
54
+ props.height,
55
+ props.texture,
56
+ props.frame
57
+ );
58
+ tileSprite.setOrigin(props.originX ?? 0, props.originY ?? 0);
59
+ createTransform.createTransform(tileSprite, props);
60
+ createPhaser.createPhaser(tileSprite, props);
61
+ applyTileSpriteProps(tileSprite, {}, props);
62
+ createTileSpriteLayout(tileSprite, props);
63
+ props.onReady?.(tileSprite);
64
+ return tileSprite;
65
+ };
66
+ const tileSpritePatcher = (node, prev, next) => {
67
+ applyTransform.applyTransformProps(node, prev, next);
68
+ applyPhaser.applyPhaserProps(node, prev, next);
69
+ applyTileSpriteProps(node, prev, next);
70
+ const tileSprite = node;
71
+ if (tileSprite.__layoutProps) {
72
+ tileSprite.__layoutProps = next;
73
+ }
74
+ };
75
+ exports.tileSpriteCreator = tileSpriteCreator;
76
+ exports.tileSpritePatcher = tileSpritePatcher;
77
+ //# sourceMappingURL=tilesprite.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tilesprite.cjs","sources":["../../../src/components/primitives/tilesprite.ts"],"sourcesContent":["/**\n * TileSprite component - Phaser TileSprite GameObject (repeating texture pattern)\n * Status: IMPLEMENTED ✅\n *\n * Design Decisions & Answers:\n * ===========================\n *\n * 1. Headless Default: TRUE ✅\n * Rationale: TileSprites are typically backgrounds/patterns (decorative).\n * They fill available space and shouldn't affect parent dimensions.\n * Use Cases:\n * - ✅ Headless (default): Scrolling backgrounds, parallax layers, repeating patterns\n * - ❌ Layout-aware: Rare - textured progress bars, pattern-filled UI blocks\n *\n * 2. Layout Size Provider: SIMPLE DIMENSIONS ✅\n * Decision: Use width/height directly (not getBounds)\n * Reasoning:\n * - TileSprite requires explicit width/height (Phaser constructor param)\n * - Dimensions are always known and stable\n * - getBounds() adds unnecessary overhead\n * - Rotation affects visual but not logical dimensions (pattern stays in rect)\n * Implementation: __getLayoutSize = () => ({ width, height })\n *\n * 3. Tiling Props: DIRECT PHASER MAPPING ✅\n * Decision: Expose Phaser's tilePosition/tileScale props directly\n * Props:\n * - tilePositionX/Y: Offset for scrolling effect (default: 0)\n * - tileScaleX/Y: Tile size multiplier (default: 1)\n * Example:\n * <TileSprite\n * texture=\"clouds\"\n * width={800} height={200}\n * tilePositionX={scrollOffset}\n * tileScaleX={2} // Tiles 2x larger\n * />\n * Note: tilePosition updates are cheap (WebGL texture wrapping, no redraw)\n *\n * 4. Sizing Strategy: HYBRID LAYOUT SUPPORT ✅\n * Decision: Support both explicit and layout-aware sizing\n * Behavior:\n * - Explicit pixels: width={800} height={200} → Fixed size\n * - Layout string: width=\"100%\" height=\"50%\" → Resolved from parent\n * - Layout fill: width={undefined} → Auto-fill parent (if parent sized)\n * Implementation:\n * - Resolve layout size in creator using existing size-resolver\n * - Create TileSprite with resolved pixel dimensions\n * - Update dimensions in patcher if layout props change\n * Phaser Limitation: TileSprite dimensions can't change after creation\n * → Workaround: Recreate TileSprite if dimensions change (expensive!)\n *\n * 5. Performance Characteristics: OPTIMAL FOR PATTERNS ✅\n * Advantages:\n * - WebGL texture wrapping (hardware-accelerated, no CPU cost)\n * - tilePosition updates are free (just shader uniform)\n * - Good for large repeating areas (better than multiple sprites)\n * - No geometry regeneration on scroll\n * Limitations:\n * - Texture must support wrapping (power-of-2 dimensions recommended)\n * - Rotation/scale affects entire area (not individual tiles)\n * - Can't change dimensions dynamically (requires recreation)\n *\n * 6. Animation Support: USER CODE ✅\n * Decision: No built-in animation helpers\n * Reasoning:\n * - Scrolling patterns vary widely (linear, sine wave, parallax)\n * - Simple to implement in user code:\n * const [scroll, setScroll] = useState(0)\n * useEffect(() => {\n * const timer = setInterval(() => setScroll(s => s + 1), 16)\n * return () => clearInterval(timer)\n * }, [])\n * <TileSprite tilePositionX={scroll} />\n * - No need for framework abstraction\n * Future: Consider useScrollingPattern hook if demand is high\n *\n * 7. Common Use Cases & Patterns: DOCUMENTED ✅\n * Best For:\n * - ✅ Scrolling backgrounds (clouds, stars, terrain)\n * - ✅ Infinite repeating patterns (tiles, grids)\n * - ✅ Parallax layers (different scroll speeds)\n * - ✅ Textured fills (progress bars, health bars)\n * Avoid For:\n * - ❌ Static backgrounds → Use Image (simpler)\n * - ❌ Complex patterns → Use Graphics or multiple Sprites\n * - ❌ Animated tiles → Use Sprite with animation\n *\n * 8. Origin Behavior: UI-FRIENDLY DEFAULT 🆕\n * Decision: Default origin (0, 0) like Image (differs from Sprite!)\n * Reasoning:\n * - TileSprites typically used as backgrounds/fills (top-left alignment)\n * - Matches Image component behavior (UI semantics)\n * - Easier layout calculations\n * - Allow override via originX/originY for special cases\n *\n * 9. Rotation & Tiling: DOCUMENTED BEHAVIOR 🆕\n * Behavior:\n * - Rotation rotates entire TileSprite area (not individual tiles)\n * - Tile pattern remains axis-aligned in texture space\n * - Useful for rotated pattern fills, but limited flexibility\n * - For rotated individual tiles, use multiple Sprite instances\n *\n * Implementation Checklist:\n * ========================\n * [✅] Create TileSprite with scene.add.tileSprite(x, y, width, height, texture, frame)\n * [✅] Set origin to (0, 0) by default (UI-friendly)\n * [✅] Apply transform props via applyTransformProps\n * [✅] Setup tilePosition/tileScale props\n * [✅] Setup layout size provider (width/height)\n * [✅] Handle dimension changes via setSize\n * [✅] Support tint, origin props\n * [✅] Document power-of-2 texture recommendation\n */\nimport type * as Phaser from 'phaser'\nimport type { LayoutProps, PhaserProps, TransformProps } from '../../core-props'\nimport type { HostCreator, HostPatcher } from '../../host'\nimport type { LayoutSize } from '../../layout'\nimport type { PropsDefaultExtension } from '../../types'\nimport { applyPhaserProps } from '../appliers/applyPhaser'\nimport { applyTransformProps } from '../appliers/applyTransform'\nimport { createPhaser } from '../creators/createPhaser'\nimport { createTransform, resolveAnimatableNumber } from '../creators/createTransform'\n\n/**\n * Base props for TileSprite component\n */\nexport interface TileSpriteBaseProps extends TransformProps, PhaserProps, LayoutProps {\n /** Texture key (loaded via Phaser's texture manager) */\n texture: string\n\n /** Optional frame from texture atlas */\n frame?: string | number\n\n /** Width of the tile sprite area */\n width: number\n\n /** Height of the tile sprite area */\n height: number\n\n /** Horizontal tile position offset (for scrolling effect) */\n tilePositionX?: number\n\n /** Vertical tile position offset (for scrolling effect) */\n tilePositionY?: number\n\n /** Horizontal tile scale factor */\n tileScaleX?: number\n\n /** Vertical tile scale factor */\n tileScaleY?: number\n\n /** Tint color applied to tiles (0xRRGGBB) */\n tint?: number\n\n /** Origin X (0-1, default 0) */\n originX?: number\n\n /** Origin Y (0-1, default 0) */\n originY?: number\n}\n\n/**\n * Props for TileSprite component\n */\nexport interface TileSpriteProps\n extends TileSpriteBaseProps, PropsDefaultExtension<Phaser.GameObjects.TileSprite> {}\n\ntype TileSpriteNode = Phaser.GameObjects.TileSprite & {\n __layoutProps?: TileSpriteBaseProps\n __getLayoutSize?: () => LayoutSize\n}\n\n/**\n * Creates layout infrastructure for TileSprite.\n */\nfunction createTileSpriteLayout(\n tileSprite: TileSpriteNode,\n props: Partial<TileSpriteBaseProps>\n): void {\n tileSprite.__layoutProps = props as TileSpriteBaseProps\n tileSprite.__getLayoutSize = () => {\n if (tileSprite.__layoutProps?.headless) {\n return { width: 0.01, height: 0.01 }\n }\n\n return {\n width: tileSprite.width,\n height: tileSprite.height,\n }\n }\n}\n\nfunction applyTileSpriteProps(\n tileSprite: Phaser.GameObjects.TileSprite,\n prev: Partial<TileSpriteBaseProps>,\n next: Partial<TileSpriteBaseProps>\n): void {\n if ((prev.texture !== next.texture || prev.frame !== next.frame) && next.texture) {\n tileSprite.setTexture(next.texture, next.frame)\n }\n\n if (\n (prev.width !== next.width || prev.height !== next.height) &&\n typeof next.width === 'number' &&\n typeof next.height === 'number'\n ) {\n tileSprite.setSize(next.width, next.height)\n }\n\n if (prev.tilePositionX !== next.tilePositionX && typeof next.tilePositionX === 'number') {\n tileSprite.tilePositionX = next.tilePositionX\n }\n\n if (prev.tilePositionY !== next.tilePositionY && typeof next.tilePositionY === 'number') {\n tileSprite.tilePositionY = next.tilePositionY\n }\n\n if (prev.tileScaleX !== next.tileScaleX && typeof next.tileScaleX === 'number') {\n tileSprite.tileScaleX = next.tileScaleX\n }\n\n if (prev.tileScaleY !== next.tileScaleY && typeof next.tileScaleY === 'number') {\n tileSprite.tileScaleY = next.tileScaleY\n }\n\n if (prev.tint !== next.tint) {\n if (typeof next.tint === 'number') {\n tileSprite.setTint(next.tint)\n } else {\n tileSprite.clearTint()\n }\n }\n\n if (prev.originX !== next.originX || prev.originY !== next.originY) {\n tileSprite.setOrigin(next.originX ?? tileSprite.originX, next.originY ?? tileSprite.originY)\n }\n}\n\n/**\n * TileSprite creator - creates a Phaser TileSprite object.\n */\nexport const tileSpriteCreator: HostCreator<'TileSprite'> = (scene, props) => {\n const tileSprite = scene.add.tileSprite(\n resolveAnimatableNumber(props.x) ?? 0,\n resolveAnimatableNumber(props.y) ?? 0,\n props.width,\n props.height,\n props.texture,\n props.frame\n )\n\n tileSprite.setOrigin(props.originX ?? 0, props.originY ?? 0)\n\n createTransform(tileSprite, props)\n createPhaser(tileSprite, props)\n applyTileSpriteProps(tileSprite, {}, props)\n createTileSpriteLayout(tileSprite as TileSpriteNode, props)\n\n props.onReady?.(tileSprite)\n\n return tileSprite\n}\n\n/**\n * TileSprite patcher - updates texture, size, tiling and shared display props.\n */\nexport const tileSpritePatcher: HostPatcher<'TileSprite'> = (node, prev, next) => {\n applyTransformProps(node, prev, next)\n applyPhaserProps(node, prev, next)\n applyTileSpriteProps(node, prev, next)\n\n const tileSprite = node as TileSpriteNode\n if (tileSprite.__layoutProps) {\n tileSprite.__layoutProps = next as TileSpriteBaseProps\n }\n}\n"],"names":["resolveAnimatableNumber","createTransform","createPhaser","applyTransformProps","applyPhaserProps"],"mappings":";;;;;;AA8KA,SAAS,uBACP,YACA,OACM;AACN,aAAW,gBAAgB;AAC3B,aAAW,kBAAkB,MAAM;AACjC,QAAI,WAAW,eAAe,UAAU;AACtC,aAAO,EAAE,OAAO,MAAM,QAAQ,KAAA;AAAA,IAChC;AAEA,WAAO;AAAA,MACL,OAAO,WAAW;AAAA,MAClB,QAAQ,WAAW;AAAA,IAAA;AAAA,EAEvB;AACF;AAEA,SAAS,qBACP,YACA,MACA,MACM;AACN,OAAK,KAAK,YAAY,KAAK,WAAW,KAAK,UAAU,KAAK,UAAU,KAAK,SAAS;AAChF,eAAW,WAAW,KAAK,SAAS,KAAK,KAAK;AAAA,EAChD;AAEA,OACG,KAAK,UAAU,KAAK,SAAS,KAAK,WAAW,KAAK,WACnD,OAAO,KAAK,UAAU,YACtB,OAAO,KAAK,WAAW,UACvB;AACA,eAAW,QAAQ,KAAK,OAAO,KAAK,MAAM;AAAA,EAC5C;AAEA,MAAI,KAAK,kBAAkB,KAAK,iBAAiB,OAAO,KAAK,kBAAkB,UAAU;AACvF,eAAW,gBAAgB,KAAK;AAAA,EAClC;AAEA,MAAI,KAAK,kBAAkB,KAAK,iBAAiB,OAAO,KAAK,kBAAkB,UAAU;AACvF,eAAW,gBAAgB,KAAK;AAAA,EAClC;AAEA,MAAI,KAAK,eAAe,KAAK,cAAc,OAAO,KAAK,eAAe,UAAU;AAC9E,eAAW,aAAa,KAAK;AAAA,EAC/B;AAEA,MAAI,KAAK,eAAe,KAAK,cAAc,OAAO,KAAK,eAAe,UAAU;AAC9E,eAAW,aAAa,KAAK;AAAA,EAC/B;AAEA,MAAI,KAAK,SAAS,KAAK,MAAM;AAC3B,QAAI,OAAO,KAAK,SAAS,UAAU;AACjC,iBAAW,QAAQ,KAAK,IAAI;AAAA,IAC9B,OAAO;AACL,iBAAW,UAAA;AAAA,IACb;AAAA,EACF;AAEA,MAAI,KAAK,YAAY,KAAK,WAAW,KAAK,YAAY,KAAK,SAAS;AAClE,eAAW,UAAU,KAAK,WAAW,WAAW,SAAS,KAAK,WAAW,WAAW,OAAO;AAAA,EAC7F;AACF;AAKO,MAAM,oBAA+C,CAAC,OAAO,UAAU;AAC5E,QAAM,aAAa,MAAM,IAAI;AAAA,IAC3BA,wCAAwB,MAAM,CAAC,KAAK;AAAA,IACpCA,wCAAwB,MAAM,CAAC,KAAK;AAAA,IACpC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EAAA;AAGR,aAAW,UAAU,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC;AAE3DC,kBAAAA,gBAAgB,YAAY,KAAK;AACjCC,eAAAA,aAAa,YAAY,KAAK;AAC9B,uBAAqB,YAAY,CAAA,GAAI,KAAK;AAC1C,yBAAuB,YAA8B,KAAK;AAE1D,QAAM,UAAU,UAAU;AAE1B,SAAO;AACT;AAKO,MAAM,oBAA+C,CAAC,MAAM,MAAM,SAAS;AAChFC,qCAAoB,MAAM,MAAM,IAAI;AACpCC,+BAAiB,MAAM,MAAM,IAAI;AACjC,uBAAqB,MAAM,MAAM,IAAI;AAErC,QAAM,aAAa;AACnB,MAAI,WAAW,eAAe;AAC5B,eAAW,gBAAgB;AAAA,EAC7B;AACF;;;"}