@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.
- package/LICENSE +667 -0
- package/README.md +44 -0
- package/dist/_virtual/_commonjsHelpers.cjs +7 -0
- package/dist/_virtual/_commonjsHelpers.cjs.map +1 -0
- package/dist/_virtual/_commonjsHelpers.js +7 -0
- package/dist/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/_virtual/index.cjs +7 -0
- package/dist/_virtual/index.cjs.map +1 -0
- package/dist/_virtual/index.js +8 -0
- package/dist/_virtual/index.js.map +1 -0
- package/dist/animation/index.d.ts +7 -0
- package/dist/animation/index.d.ts.map +1 -0
- package/dist/camera/index.d.ts +5 -0
- package/dist/camera/index.d.ts.map +1 -0
- package/dist/camera/use-camera-fx.cjs +49 -0
- package/dist/camera/use-camera-fx.cjs.map +1 -0
- package/dist/camera/use-camera-fx.d.ts +25 -0
- package/dist/camera/use-camera-fx.d.ts.map +1 -0
- package/dist/camera/use-camera-fx.js +49 -0
- package/dist/camera/use-camera-fx.js.map +1 -0
- package/dist/clip/index.cjs +8 -0
- package/dist/clip/index.cjs.map +1 -0
- package/dist/clip/index.d.ts +3 -0
- package/dist/clip/index.d.ts.map +1 -0
- package/dist/clip/index.js +9 -0
- package/dist/clip/index.js.map +1 -0
- package/dist/clip/stencil-clip-depth.cjs +24 -0
- package/dist/clip/stencil-clip-depth.cjs.map +1 -0
- package/dist/clip/stencil-clip-depth.d.ts +10 -0
- package/dist/clip/stencil-clip-depth.d.ts.map +1 -0
- package/dist/clip/stencil-clip-depth.js +24 -0
- package/dist/clip/stencil-clip-depth.js.map +1 -0
- package/dist/clip/stencil-clip-extension.cjs +113 -0
- package/dist/clip/stencil-clip-extension.cjs.map +1 -0
- package/dist/clip/stencil-clip-extension.d.ts +18 -0
- package/dist/clip/stencil-clip-extension.d.ts.map +1 -0
- package/dist/clip/stencil-clip-extension.js +96 -0
- package/dist/clip/stencil-clip-extension.js.map +1 -0
- package/dist/clip/stencil-clip-fbo-bridge.cjs +46 -0
- package/dist/clip/stencil-clip-fbo-bridge.cjs.map +1 -0
- package/dist/clip/stencil-clip-fbo-bridge.d.ts +7 -0
- package/dist/clip/stencil-clip-fbo-bridge.d.ts.map +1 -0
- package/dist/clip/stencil-clip-fbo-bridge.js +46 -0
- package/dist/clip/stencil-clip-fbo-bridge.js.map +1 -0
- package/dist/clip/stencil-clip-renderer.cjs +300 -0
- package/dist/clip/stencil-clip-renderer.cjs.map +1 -0
- package/dist/clip/stencil-clip-renderer.d.ts +7 -0
- package/dist/clip/stencil-clip-renderer.d.ts.map +1 -0
- package/dist/clip/stencil-clip-renderer.js +300 -0
- package/dist/clip/stencil-clip-renderer.js.map +1 -0
- package/dist/clip/stencil-clip-state.cjs +84 -0
- package/dist/clip/stencil-clip-state.cjs.map +1 -0
- package/dist/clip/stencil-clip-state.d.ts +28 -0
- package/dist/clip/stencil-clip-state.d.ts.map +1 -0
- package/dist/clip/stencil-clip-state.js +84 -0
- package/dist/clip/stencil-clip-state.js.map +1 -0
- package/dist/clip/stencil-clip-types.d.ts +67 -0
- package/dist/clip/stencil-clip-types.d.ts.map +1 -0
- package/dist/clip/stencil-clip.cjs +138 -0
- package/dist/clip/stencil-clip.cjs.map +1 -0
- package/dist/clip/stencil-clip.d.ts +53 -0
- package/dist/clip/stencil-clip.d.ts.map +1 -0
- package/dist/clip/stencil-clip.js +122 -0
- package/dist/clip/stencil-clip.js.map +1 -0
- package/dist/colors/use-color-mode.cjs +28 -0
- package/dist/colors/use-color-mode.cjs.map +1 -0
- package/dist/colors/use-color-mode.d.ts +22 -0
- package/dist/colors/use-color-mode.d.ts.map +1 -0
- package/dist/colors/use-color-mode.js +28 -0
- package/dist/colors/use-color-mode.js.map +1 -0
- package/dist/colors/use-colors.cjs +45 -0
- package/dist/colors/use-colors.cjs.map +1 -0
- package/dist/colors/use-colors.d.ts +36 -0
- package/dist/colors/use-colors.d.ts.map +1 -0
- package/dist/colors/use-colors.js +45 -0
- package/dist/colors/use-colors.js.map +1 -0
- package/dist/components/DebugPanel.cjs +88 -0
- package/dist/components/DebugPanel.cjs.map +1 -0
- package/dist/components/DebugPanel.d.ts +45 -0
- package/dist/components/DebugPanel.d.ts.map +1 -0
- package/dist/components/DebugPanel.js +71 -0
- package/dist/components/DebugPanel.js.map +1 -0
- package/dist/components/appliers/applyBackground.cjs +89 -0
- package/dist/components/appliers/applyBackground.cjs.map +1 -0
- package/dist/components/appliers/applyBackground.d.ts +18 -0
- package/dist/components/appliers/applyBackground.d.ts.map +1 -0
- package/dist/components/appliers/applyBackground.js +89 -0
- package/dist/components/appliers/applyBackground.js.map +1 -0
- package/dist/components/appliers/applyGestures.cjs +85 -0
- package/dist/components/appliers/applyGestures.cjs.map +1 -0
- package/dist/components/appliers/applyGestures.d.ts +12 -0
- package/dist/components/appliers/applyGestures.d.ts.map +1 -0
- package/dist/components/appliers/applyGestures.js +68 -0
- package/dist/components/appliers/applyGestures.js.map +1 -0
- package/dist/components/appliers/applyGraphics.cjs +21 -0
- package/dist/components/appliers/applyGraphics.cjs.map +1 -0
- package/dist/components/appliers/applyGraphics.d.ts +13 -0
- package/dist/components/appliers/applyGraphics.d.ts.map +1 -0
- package/dist/components/appliers/applyGraphics.js +21 -0
- package/dist/components/appliers/applyGraphics.js.map +1 -0
- package/dist/components/appliers/applyGraphicsLayout.cjs +18 -0
- package/dist/components/appliers/applyGraphicsLayout.cjs.map +1 -0
- package/dist/components/appliers/applyGraphicsLayout.d.ts +13 -0
- package/dist/components/appliers/applyGraphicsLayout.d.ts.map +1 -0
- package/dist/components/appliers/applyGraphicsLayout.js +18 -0
- package/dist/components/appliers/applyGraphicsLayout.js.map +1 -0
- package/dist/components/appliers/applyImage.cjs +92 -0
- package/dist/components/appliers/applyImage.cjs.map +1 -0
- package/dist/components/appliers/applyImage.d.ts +47 -0
- package/dist/components/appliers/applyImage.d.ts.map +1 -0
- package/dist/components/appliers/applyImage.js +92 -0
- package/dist/components/appliers/applyImage.js.map +1 -0
- package/dist/components/appliers/applyImageLayout.cjs +18 -0
- package/dist/components/appliers/applyImageLayout.cjs.map +1 -0
- package/dist/components/appliers/applyImageLayout.d.ts +18 -0
- package/dist/components/appliers/applyImageLayout.d.ts.map +1 -0
- package/dist/components/appliers/applyImageLayout.js +18 -0
- package/dist/components/appliers/applyImageLayout.js.map +1 -0
- package/dist/components/appliers/applyLayout.cjs +108 -0
- package/dist/components/appliers/applyLayout.cjs.map +1 -0
- package/dist/components/appliers/applyLayout.d.ts +19 -0
- package/dist/components/appliers/applyLayout.d.ts.map +1 -0
- package/dist/components/appliers/applyLayout.js +91 -0
- package/dist/components/appliers/applyLayout.js.map +1 -0
- package/dist/components/appliers/applyNineSlice.cjs +37 -0
- package/dist/components/appliers/applyNineSlice.cjs.map +1 -0
- package/dist/components/appliers/applyNineSlice.d.ts +14 -0
- package/dist/components/appliers/applyNineSlice.d.ts.map +1 -0
- package/dist/components/appliers/applyNineSlice.js +37 -0
- package/dist/components/appliers/applyNineSlice.js.map +1 -0
- package/dist/components/appliers/applyNineSliceLayout.cjs +18 -0
- package/dist/components/appliers/applyNineSliceLayout.cjs.map +1 -0
- package/dist/components/appliers/applyNineSliceLayout.d.ts +18 -0
- package/dist/components/appliers/applyNineSliceLayout.d.ts.map +1 -0
- package/dist/components/appliers/applyNineSliceLayout.js +18 -0
- package/dist/components/appliers/applyNineSliceLayout.js.map +1 -0
- package/dist/components/appliers/applyParticles.cjs +46 -0
- package/dist/components/appliers/applyParticles.cjs.map +1 -0
- package/dist/components/appliers/applyParticles.d.ts +7 -0
- package/dist/components/appliers/applyParticles.d.ts.map +1 -0
- package/dist/components/appliers/applyParticles.js +46 -0
- package/dist/components/appliers/applyParticles.js.map +1 -0
- package/dist/components/appliers/applyParticlesLayout.cjs +7 -0
- package/dist/components/appliers/applyParticlesLayout.cjs.map +1 -0
- package/dist/components/appliers/applyParticlesLayout.d.ts +11 -0
- package/dist/components/appliers/applyParticlesLayout.d.ts.map +1 -0
- package/dist/components/appliers/applyParticlesLayout.js +7 -0
- package/dist/components/appliers/applyParticlesLayout.js.map +1 -0
- package/dist/components/appliers/applyPhaser.cjs +40 -0
- package/dist/components/appliers/applyPhaser.cjs.map +1 -0
- package/dist/components/appliers/applyPhaser.d.ts +24 -0
- package/dist/components/appliers/applyPhaser.d.ts.map +1 -0
- package/dist/components/appliers/applyPhaser.js +40 -0
- package/dist/components/appliers/applyPhaser.js.map +1 -0
- package/dist/components/appliers/applySprite.cjs +124 -0
- package/dist/components/appliers/applySprite.cjs.map +1 -0
- package/dist/components/appliers/applySprite.d.ts +13 -0
- package/dist/components/appliers/applySprite.d.ts.map +1 -0
- package/dist/components/appliers/applySprite.js +124 -0
- package/dist/components/appliers/applySprite.js.map +1 -0
- package/dist/components/appliers/applySpriteLayout.cjs +7 -0
- package/dist/components/appliers/applySpriteLayout.cjs.map +1 -0
- package/dist/components/appliers/applySpriteLayout.d.ts +17 -0
- package/dist/components/appliers/applySpriteLayout.d.ts.map +1 -0
- package/dist/components/appliers/applySpriteLayout.js +7 -0
- package/dist/components/appliers/applySpriteLayout.js.map +1 -0
- package/dist/components/appliers/applyText.cjs +142 -0
- package/dist/components/appliers/applyText.cjs.map +1 -0
- package/dist/components/appliers/applyText.d.ts +32 -0
- package/dist/components/appliers/applyText.d.ts.map +1 -0
- package/dist/components/appliers/applyText.js +142 -0
- package/dist/components/appliers/applyText.js.map +1 -0
- package/dist/components/appliers/applyTextLayout.cjs +16 -0
- package/dist/components/appliers/applyTextLayout.cjs.map +1 -0
- package/dist/components/appliers/applyTextLayout.d.ts +18 -0
- package/dist/components/appliers/applyTextLayout.d.ts.map +1 -0
- package/dist/components/appliers/applyTextLayout.js +16 -0
- package/dist/components/appliers/applyTextLayout.js.map +1 -0
- package/dist/components/appliers/applyTooltip.cjs +247 -0
- package/dist/components/appliers/applyTooltip.cjs.map +1 -0
- package/dist/components/appliers/applyTooltip.d.ts +16 -0
- package/dist/components/appliers/applyTooltip.d.ts.map +1 -0
- package/dist/components/appliers/applyTooltip.js +247 -0
- package/dist/components/appliers/applyTooltip.js.map +1 -0
- package/dist/components/appliers/applyTransform.cjs +61 -0
- package/dist/components/appliers/applyTransform.cjs.map +1 -0
- package/dist/components/appliers/applyTransform.d.ts +24 -0
- package/dist/components/appliers/applyTransform.d.ts.map +1 -0
- package/dist/components/appliers/applyTransform.js +61 -0
- package/dist/components/appliers/applyTransform.js.map +1 -0
- package/dist/components/backgroundImage.cjs +411 -0
- package/dist/components/backgroundImage.cjs.map +1 -0
- package/dist/components/backgroundImage.d.ts +14 -0
- package/dist/components/backgroundImage.d.ts.map +1 -0
- package/dist/components/backgroundImage.js +411 -0
- package/dist/components/backgroundImage.js.map +1 -0
- package/dist/components/creators/createBackground.cjs +18 -0
- package/dist/components/creators/createBackground.cjs.map +1 -0
- package/dist/components/creators/createBackground.d.ts +20 -0
- package/dist/components/creators/createBackground.d.ts.map +1 -0
- package/dist/components/creators/createBackground.js +18 -0
- package/dist/components/creators/createBackground.js.map +1 -0
- package/dist/components/creators/createGestures.cjs +51 -0
- package/dist/components/creators/createGestures.cjs.map +1 -0
- package/dist/components/creators/createGestures.d.ts +11 -0
- package/dist/components/creators/createGestures.d.ts.map +1 -0
- package/dist/components/creators/createGestures.js +34 -0
- package/dist/components/creators/createGestures.js.map +1 -0
- package/dist/components/creators/createGraphicsLayout.cjs +24 -0
- package/dist/components/creators/createGraphicsLayout.cjs.map +1 -0
- package/dist/components/creators/createGraphicsLayout.d.ts +12 -0
- package/dist/components/creators/createGraphicsLayout.d.ts.map +1 -0
- package/dist/components/creators/createGraphicsLayout.js +24 -0
- package/dist/components/creators/createGraphicsLayout.js.map +1 -0
- package/dist/components/creators/createImageLayout.cjs +16 -0
- package/dist/components/creators/createImageLayout.cjs.map +1 -0
- package/dist/components/creators/createImageLayout.d.ts +17 -0
- package/dist/components/creators/createImageLayout.d.ts.map +1 -0
- package/dist/components/creators/createImageLayout.js +16 -0
- package/dist/components/creators/createImageLayout.js.map +1 -0
- package/dist/components/creators/createLayout.cjs +61 -0
- package/dist/components/creators/createLayout.cjs.map +1 -0
- package/dist/components/creators/createLayout.d.ts +15 -0
- package/dist/components/creators/createLayout.d.ts.map +1 -0
- package/dist/components/creators/createLayout.js +61 -0
- package/dist/components/creators/createLayout.js.map +1 -0
- package/dist/components/creators/createNineSliceLayout.cjs +16 -0
- package/dist/components/creators/createNineSliceLayout.cjs.map +1 -0
- package/dist/components/creators/createNineSliceLayout.d.ts +17 -0
- package/dist/components/creators/createNineSliceLayout.d.ts.map +1 -0
- package/dist/components/creators/createNineSliceLayout.js +16 -0
- package/dist/components/creators/createNineSliceLayout.js.map +1 -0
- package/dist/components/creators/createParticlesLayout.cjs +8 -0
- package/dist/components/creators/createParticlesLayout.cjs.map +1 -0
- package/dist/components/creators/createParticlesLayout.d.ts +14 -0
- package/dist/components/creators/createParticlesLayout.d.ts.map +1 -0
- package/dist/components/creators/createParticlesLayout.js +8 -0
- package/dist/components/creators/createParticlesLayout.js.map +1 -0
- package/dist/components/creators/createPhaser.cjs +36 -0
- package/dist/components/creators/createPhaser.cjs.map +1 -0
- package/dist/components/creators/createPhaser.d.ts +14 -0
- package/dist/components/creators/createPhaser.d.ts.map +1 -0
- package/dist/components/creators/createPhaser.js +36 -0
- package/dist/components/creators/createPhaser.js.map +1 -0
- package/dist/components/creators/createSpriteLayout.cjs +10 -0
- package/dist/components/creators/createSpriteLayout.cjs.map +1 -0
- package/dist/components/creators/createSpriteLayout.d.ts +18 -0
- package/dist/components/creators/createSpriteLayout.d.ts.map +1 -0
- package/dist/components/creators/createSpriteLayout.js +10 -0
- package/dist/components/creators/createSpriteLayout.js.map +1 -0
- package/dist/components/creators/createTextLayout.cjs +16 -0
- package/dist/components/creators/createTextLayout.cjs.map +1 -0
- package/dist/components/creators/createTextLayout.d.ts +17 -0
- package/dist/components/creators/createTextLayout.d.ts.map +1 -0
- package/dist/components/creators/createTextLayout.js +16 -0
- package/dist/components/creators/createTextLayout.js.map +1 -0
- package/dist/components/creators/createTransform.cjs +83 -0
- package/dist/components/creators/createTransform.cjs.map +1 -0
- package/dist/components/creators/createTransform.d.ts +26 -0
- package/dist/components/creators/createTransform.d.ts.map +1 -0
- package/dist/components/creators/createTransform.js +83 -0
- package/dist/components/creators/createTransform.js.map +1 -0
- package/dist/components/custom/Graphics.cjs +13 -0
- package/dist/components/custom/Graphics.cjs.map +1 -0
- package/dist/components/custom/Graphics.d.ts +50 -0
- package/dist/components/custom/Graphics.d.ts.map +1 -0
- package/dist/components/custom/Graphics.js +13 -0
- package/dist/components/custom/Graphics.js.map +1 -0
- package/dist/components/custom/NineSlice.cjs +13 -0
- package/dist/components/custom/NineSlice.cjs.map +1 -0
- package/dist/components/custom/NineSlice.d.ts +87 -0
- package/dist/components/custom/NineSlice.d.ts.map +1 -0
- package/dist/components/custom/NineSlice.js +13 -0
- package/dist/components/custom/NineSlice.js.map +1 -0
- package/dist/components/custom/Particles.cjs +8 -0
- package/dist/components/custom/Particles.cjs.map +1 -0
- package/dist/components/custom/Particles.d.ts +28 -0
- package/dist/components/custom/Particles.d.ts.map +1 -0
- package/dist/components/custom/Particles.js +8 -0
- package/dist/components/custom/Particles.js.map +1 -0
- package/dist/components/custom/RefOriginView.cjs +67 -0
- package/dist/components/custom/RefOriginView.cjs.map +1 -0
- package/dist/components/custom/RefOriginView.d.ts +49 -0
- package/dist/components/custom/RefOriginView.d.ts.map +1 -0
- package/dist/components/custom/RefOriginView.js +67 -0
- package/dist/components/custom/RefOriginView.js.map +1 -0
- package/dist/components/custom/Sprite.cjs +13 -0
- package/dist/components/custom/Sprite.cjs.map +1 -0
- package/dist/components/custom/Sprite.d.ts +79 -0
- package/dist/components/custom/Sprite.d.ts.map +1 -0
- package/dist/components/custom/Sprite.js +13 -0
- package/dist/components/custom/Sprite.js.map +1 -0
- package/dist/components/custom/TileSprite.cjs +13 -0
- package/dist/components/custom/TileSprite.cjs.map +1 -0
- package/dist/components/custom/TileSprite.d.ts +65 -0
- package/dist/components/custom/TileSprite.d.ts.map +1 -0
- package/dist/components/custom/TileSprite.js +13 -0
- package/dist/components/custom/TileSprite.js.map +1 -0
- package/dist/components/custom/index.d.ts +15 -0
- package/dist/components/custom/index.d.ts.map +1 -0
- package/dist/components/index.cjs +33 -0
- package/dist/components/index.cjs.map +1 -0
- package/dist/components/index.d.ts +11 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +33 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/internal/SceneWrapper.cjs +10 -0
- package/dist/components/internal/SceneWrapper.cjs.map +1 -0
- package/dist/components/internal/SceneWrapper.d.ts +20 -0
- package/dist/components/internal/SceneWrapper.d.ts.map +1 -0
- package/dist/components/internal/SceneWrapper.js +10 -0
- package/dist/components/internal/SceneWrapper.js.map +1 -0
- package/dist/components/primitives/graphics.cjs +29 -0
- package/dist/components/primitives/graphics.cjs.map +1 -0
- package/dist/components/primitives/graphics.d.ts +146 -0
- package/dist/components/primitives/graphics.d.ts.map +1 -0
- package/dist/components/primitives/graphics.js +29 -0
- package/dist/components/primitives/graphics.js.map +1 -0
- package/dist/components/primitives/image.cjs +110 -0
- package/dist/components/primitives/image.cjs.map +1 -0
- package/dist/components/primitives/image.d.ts +170 -0
- package/dist/components/primitives/image.d.ts.map +1 -0
- package/dist/components/primitives/image.js +110 -0
- package/dist/components/primitives/image.js.map +1 -0
- package/dist/components/primitives/nineslice.cjs +42 -0
- package/dist/components/primitives/nineslice.cjs.map +1 -0
- package/dist/components/primitives/nineslice.d.ts +271 -0
- package/dist/components/primitives/nineslice.d.ts.map +1 -0
- package/dist/components/primitives/nineslice.js +42 -0
- package/dist/components/primitives/nineslice.js.map +1 -0
- package/dist/components/primitives/particles.cjs +77 -0
- package/dist/components/primitives/particles.cjs.map +1 -0
- package/dist/components/primitives/particles.d.ts +47 -0
- package/dist/components/primitives/particles.d.ts.map +1 -0
- package/dist/components/primitives/particles.js +77 -0
- package/dist/components/primitives/particles.js.map +1 -0
- package/dist/components/primitives/sprite.cjs +100 -0
- package/dist/components/primitives/sprite.cjs.map +1 -0
- package/dist/components/primitives/sprite.d.ts +147 -0
- package/dist/components/primitives/sprite.d.ts.map +1 -0
- package/dist/components/primitives/sprite.js +100 -0
- package/dist/components/primitives/sprite.js.map +1 -0
- package/dist/components/primitives/text.cjs +73 -0
- package/dist/components/primitives/text.cjs.map +1 -0
- package/dist/components/primitives/text.d.ts +155 -0
- package/dist/components/primitives/text.d.ts.map +1 -0
- package/dist/components/primitives/text.js +73 -0
- package/dist/components/primitives/text.js.map +1 -0
- package/dist/components/primitives/tilesprite.cjs +77 -0
- package/dist/components/primitives/tilesprite.cjs.map +1 -0
- package/dist/components/primitives/tilesprite.d.ts +157 -0
- package/dist/components/primitives/tilesprite.d.ts.map +1 -0
- package/dist/components/primitives/tilesprite.js +77 -0
- package/dist/components/primitives/tilesprite.js.map +1 -0
- package/dist/components/primitives/vectorDraw.cjs +73 -0
- package/dist/components/primitives/vectorDraw.cjs.map +1 -0
- package/dist/components/primitives/vectorDraw.d.ts +4 -0
- package/dist/components/primitives/vectorDraw.d.ts.map +1 -0
- package/dist/components/primitives/vectorDraw.js +73 -0
- package/dist/components/primitives/vectorDraw.js.map +1 -0
- package/dist/components/primitives/view.cjs +105 -0
- package/dist/components/primitives/view.cjs.map +1 -0
- package/dist/components/primitives/view.d.ts +23 -0
- package/dist/components/primitives/view.d.ts.map +1 -0
- package/dist/components/primitives/view.js +105 -0
- package/dist/components/primitives/view.js.map +1 -0
- package/dist/core-props.d.ts +105 -0
- package/dist/core-props.d.ts.map +1 -0
- package/dist/core-types.d.ts +71 -0
- package/dist/core-types.d.ts.map +1 -0
- package/dist/design-tokens/resolve-theme-tokens.cjs +27 -0
- package/dist/design-tokens/resolve-theme-tokens.cjs.map +1 -0
- package/dist/design-tokens/resolve-theme-tokens.d.ts +9 -0
- package/dist/design-tokens/resolve-theme-tokens.d.ts.map +1 -0
- package/dist/design-tokens/resolve-theme-tokens.js +27 -0
- package/dist/design-tokens/resolve-theme-tokens.js.map +1 -0
- package/dist/design-tokens/use-theme-tokens.cjs +26 -0
- package/dist/design-tokens/use-theme-tokens.cjs.map +1 -0
- package/dist/design-tokens/use-theme-tokens.d.ts +28 -0
- package/dist/design-tokens/use-theme-tokens.d.ts.map +1 -0
- package/dist/design-tokens/use-theme-tokens.js +26 -0
- package/dist/design-tokens/use-theme-tokens.js.map +1 -0
- package/dist/effects/index.d.ts +2 -0
- package/dist/effects/index.d.ts.map +1 -0
- package/dist/effects/phaser-effects-bridge.cjs +48 -0
- package/dist/effects/phaser-effects-bridge.cjs.map +1 -0
- package/dist/effects/phaser-effects-bridge.d.ts +2 -0
- package/dist/effects/phaser-effects-bridge.d.ts.map +1 -0
- package/dist/effects/phaser-effects-bridge.js +30 -0
- package/dist/effects/phaser-effects-bridge.js.map +1 -0
- package/dist/effects/use-effect.cjs +155 -0
- package/dist/effects/use-effect.cjs.map +1 -0
- package/dist/effects/use-effect.d.ts +30 -0
- package/dist/effects/use-effect.d.ts.map +1 -0
- package/dist/effects/use-effect.js +155 -0
- package/dist/effects/use-effect.js.map +1 -0
- package/dist/fx/convenience-hooks/index.d.ts +7 -0
- package/dist/fx/convenience-hooks/index.d.ts.map +1 -0
- package/dist/fx/convenience-hooks/use-blur.cjs +18 -0
- package/dist/fx/convenience-hooks/use-blur.cjs.map +1 -0
- package/dist/fx/convenience-hooks/use-blur.d.ts +21 -0
- package/dist/fx/convenience-hooks/use-blur.d.ts.map +1 -0
- package/dist/fx/convenience-hooks/use-blur.js +18 -0
- package/dist/fx/convenience-hooks/use-blur.js.map +1 -0
- package/dist/fx/convenience-hooks/use-glow.cjs +18 -0
- package/dist/fx/convenience-hooks/use-glow.cjs.map +1 -0
- package/dist/fx/convenience-hooks/use-glow.d.ts +21 -0
- package/dist/fx/convenience-hooks/use-glow.d.ts.map +1 -0
- package/dist/fx/convenience-hooks/use-glow.js +18 -0
- package/dist/fx/convenience-hooks/use-glow.js.map +1 -0
- package/dist/fx/convenience-hooks/use-shadow.cjs +18 -0
- package/dist/fx/convenience-hooks/use-shadow.cjs.map +1 -0
- package/dist/fx/convenience-hooks/use-shadow.d.ts +21 -0
- package/dist/fx/convenience-hooks/use-shadow.d.ts.map +1 -0
- package/dist/fx/convenience-hooks/use-shadow.js +18 -0
- package/dist/fx/convenience-hooks/use-shadow.js.map +1 -0
- package/dist/fx/fx-creators/blur.cjs +20 -0
- package/dist/fx/fx-creators/blur.cjs.map +1 -0
- package/dist/fx/fx-creators/blur.d.ts +37 -0
- package/dist/fx/fx-creators/blur.d.ts.map +1 -0
- package/dist/fx/fx-creators/blur.js +20 -0
- package/dist/fx/fx-creators/blur.js.map +1 -0
- package/dist/fx/fx-creators/color-matrix.cjs +47 -0
- package/dist/fx/fx-creators/color-matrix.cjs.map +1 -0
- package/dist/fx/fx-creators/color-matrix.d.ts +31 -0
- package/dist/fx/fx-creators/color-matrix.d.ts.map +1 -0
- package/dist/fx/fx-creators/color-matrix.js +47 -0
- package/dist/fx/fx-creators/color-matrix.js.map +1 -0
- package/dist/fx/fx-creators/glow.cjs +27 -0
- package/dist/fx/fx-creators/glow.cjs.map +1 -0
- package/dist/fx/fx-creators/glow.d.ts +36 -0
- package/dist/fx/fx-creators/glow.d.ts.map +1 -0
- package/dist/fx/fx-creators/glow.js +27 -0
- package/dist/fx/fx-creators/glow.js.map +1 -0
- package/dist/fx/fx-creators/index.d.ts +10 -0
- package/dist/fx/fx-creators/index.d.ts.map +1 -0
- package/dist/fx/fx-creators/pixelate.cjs +20 -0
- package/dist/fx/fx-creators/pixelate.cjs.map +1 -0
- package/dist/fx/fx-creators/pixelate.d.ts +24 -0
- package/dist/fx/fx-creators/pixelate.d.ts.map +1 -0
- package/dist/fx/fx-creators/pixelate.js +20 -0
- package/dist/fx/fx-creators/pixelate.js.map +1 -0
- package/dist/fx/fx-creators/shadow.cjs +28 -0
- package/dist/fx/fx-creators/shadow.cjs.map +1 -0
- package/dist/fx/fx-creators/shadow.d.ts +43 -0
- package/dist/fx/fx-creators/shadow.d.ts.map +1 -0
- package/dist/fx/fx-creators/shadow.js +28 -0
- package/dist/fx/fx-creators/shadow.js.map +1 -0
- package/dist/fx/fx-creators/vignette.cjs +20 -0
- package/dist/fx/fx-creators/vignette.cjs.map +1 -0
- package/dist/fx/fx-creators/vignette.d.ts +33 -0
- package/dist/fx/fx-creators/vignette.d.ts.map +1 -0
- package/dist/fx/fx-creators/vignette.js +20 -0
- package/dist/fx/fx-creators/vignette.js.map +1 -0
- package/dist/fx/fx-registry.cjs +43 -0
- package/dist/fx/fx-registry.cjs.map +1 -0
- package/dist/fx/fx-registry.d.ts +59 -0
- package/dist/fx/fx-registry.d.ts.map +1 -0
- package/dist/fx/fx-registry.js +43 -0
- package/dist/fx/fx-registry.js.map +1 -0
- package/dist/fx/index.d.ts +51 -0
- package/dist/fx/index.d.ts.map +1 -0
- package/dist/fx/use-fx.cjs +54 -0
- package/dist/fx/use-fx.cjs.map +1 -0
- package/dist/fx/use-fx.d.ts +53 -0
- package/dist/fx/use-fx.d.ts.map +1 -0
- package/dist/fx/use-fx.js +54 -0
- package/dist/fx/use-fx.js.map +1 -0
- package/dist/gestures/gesture-manager.cjs +773 -0
- package/dist/gestures/gesture-manager.cjs.map +1 -0
- package/dist/gestures/gesture-manager.d.ts +158 -0
- package/dist/gestures/gesture-manager.d.ts.map +1 -0
- package/dist/gestures/gesture-manager.js +773 -0
- package/dist/gestures/gesture-manager.js.map +1 -0
- package/dist/gestures/gesture-types.cjs +9 -0
- package/dist/gestures/gesture-types.cjs.map +1 -0
- package/dist/gestures/gesture-types.d.ts +232 -0
- package/dist/gestures/gesture-types.d.ts.map +1 -0
- package/dist/gestures/gesture-types.js +9 -0
- package/dist/gestures/gesture-types.js.map +1 -0
- package/dist/hooks.cjs +193 -0
- package/dist/hooks.cjs.map +1 -0
- package/dist/hooks.d.ts +151 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +146 -0
- package/dist/hooks.js.map +1 -0
- package/dist/host.cjs +85 -0
- package/dist/host.cjs.map +1 -0
- package/dist/host.d.ts +78 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +85 -0
- package/dist/host.js.map +1 -0
- package/dist/index.cjs +614 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +273 -0
- package/dist/index.js.map +1 -0
- package/dist/jsx-dev-runtime.cjs +20 -0
- package/dist/jsx-dev-runtime.cjs.map +1 -0
- package/dist/jsx-dev-runtime.d.ts +8 -0
- package/dist/jsx-dev-runtime.d.ts.map +1 -0
- package/dist/jsx-dev-runtime.js +8 -0
- package/dist/jsx-dev-runtime.js.map +1 -0
- package/dist/jsx-runtime.cjs +16 -0
- package/dist/jsx-runtime.cjs.map +1 -0
- package/dist/jsx-runtime.d.ts +9 -0
- package/dist/jsx-runtime.d.ts.map +1 -0
- package/dist/jsx-runtime.js +7 -0
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/jsx-types.d.ts +40 -0
- package/dist/jsx-types.d.ts.map +1 -0
- package/dist/layout/appliers/background-applier.cjs +40 -0
- package/dist/layout/appliers/background-applier.cjs.map +1 -0
- package/dist/layout/appliers/background-applier.d.ts +16 -0
- package/dist/layout/appliers/background-applier.d.ts.map +1 -0
- package/dist/layout/appliers/background-applier.js +40 -0
- package/dist/layout/appliers/background-applier.js.map +1 -0
- package/dist/layout/index.d.ts +5 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/layout-engine-test-utils.d.ts +24 -0
- package/dist/layout/layout-engine-test-utils.d.ts.map +1 -0
- package/dist/layout/phaser-layout-bridge.cjs +41 -0
- package/dist/layout/phaser-layout-bridge.cjs.map +1 -0
- package/dist/layout/phaser-layout-bridge.d.ts +9 -0
- package/dist/layout/phaser-layout-bridge.d.ts.map +1 -0
- package/dist/layout/phaser-layout-bridge.js +40 -0
- package/dist/layout/phaser-layout-bridge.js.map +1 -0
- package/dist/layout/types.d.ts +14 -0
- package/dist/layout/types.d.ts.map +1 -0
- package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.cjs +39 -0
- package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.cjs.map +1 -0
- package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js +39 -0
- package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js.map +1 -0
- package/dist/particles/emit-zone.cjs +205 -0
- package/dist/particles/emit-zone.cjs.map +1 -0
- package/dist/particles/emit-zone.d.ts +88 -0
- package/dist/particles/emit-zone.d.ts.map +1 -0
- package/dist/particles/emit-zone.js +205 -0
- package/dist/particles/emit-zone.js.map +1 -0
- package/dist/particles/index.d.ts +8 -0
- package/dist/particles/index.d.ts.map +1 -0
- package/dist/particles/particle-types.d.ts +25 -0
- package/dist/particles/particle-types.d.ts.map +1 -0
- package/dist/particles/preset-registry.cjs +57 -0
- package/dist/particles/preset-registry.cjs.map +1 -0
- package/dist/particles/preset-registry.d.ts +49 -0
- package/dist/particles/preset-registry.d.ts.map +1 -0
- package/dist/particles/preset-registry.js +57 -0
- package/dist/particles/preset-registry.js.map +1 -0
- package/dist/particles/use-particles.cjs +67 -0
- package/dist/particles/use-particles.cjs.map +1 -0
- package/dist/particles/use-particles.d.ts +19 -0
- package/dist/particles/use-particles.d.ts.map +1 -0
- package/dist/particles/use-particles.js +67 -0
- package/dist/particles/use-particles.js.map +1 -0
- package/dist/particles/utils.cjs +82 -0
- package/dist/particles/utils.cjs.map +1 -0
- package/dist/particles/utils.d.ts +10 -0
- package/dist/particles/utils.d.ts.map +1 -0
- package/dist/particles/utils.js +82 -0
- package/dist/particles/utils.js.map +1 -0
- package/dist/phaser-bridges.cjs +148 -0
- package/dist/phaser-bridges.cjs.map +1 -0
- package/dist/phaser-bridges.d.ts +78 -0
- package/dist/phaser-bridges.d.ts.map +1 -0
- package/dist/phaser-bridges.js +131 -0
- package/dist/phaser-bridges.js.map +1 -0
- package/dist/phaser-host-adapter.cjs +148 -0
- package/dist/phaser-host-adapter.cjs.map +1 -0
- package/dist/phaser-host-adapter.d.ts +30 -0
- package/dist/phaser-host-adapter.d.ts.map +1 -0
- package/dist/phaser-host-adapter.js +148 -0
- package/dist/phaser-host-adapter.js.map +1 -0
- package/dist/phaser-runtime-types.d.ts +89 -0
- package/dist/phaser-runtime-types.d.ts.map +1 -0
- package/dist/phaser-surface-adapter.cjs +488 -0
- package/dist/phaser-surface-adapter.cjs.map +1 -0
- package/dist/phaser-surface-adapter.d.ts +74 -0
- package/dist/phaser-surface-adapter.d.ts.map +1 -0
- package/dist/phaser-surface-adapter.js +471 -0
- package/dist/phaser-surface-adapter.js.map +1 -0
- package/dist/phaser-vdom-runtime.cjs +63 -0
- package/dist/phaser-vdom-runtime.cjs.map +1 -0
- package/dist/phaser-vdom-runtime.d.ts +2 -0
- package/dist/phaser-vdom-runtime.d.ts.map +1 -0
- package/dist/phaser-vdom-runtime.js +63 -0
- package/dist/phaser-vdom-runtime.js.map +1 -0
- package/dist/plugin.cjs +182 -0
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.d.ts +161 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +165 -0
- package/dist/plugin.js.map +1 -0
- package/dist/render-context.cjs +106 -0
- package/dist/render-context.cjs.map +1 -0
- package/dist/render-context.d.ts +66 -0
- package/dist/render-context.d.ts.map +1 -0
- package/dist/render-context.js +106 -0
- package/dist/render-context.js.map +1 -0
- package/dist/scene-backgrounds.cjs +285 -0
- package/dist/scene-backgrounds.cjs.map +1 -0
- package/dist/scene-backgrounds.d.ts +69 -0
- package/dist/scene-backgrounds.d.ts.map +1 -0
- package/dist/scene-backgrounds.js +268 -0
- package/dist/scene-backgrounds.js.map +1 -0
- package/dist/theme-base.d.ts +133 -0
- package/dist/theme-base.d.ts.map +1 -0
- package/dist/theme-custom.d.ts +13 -0
- package/dist/theme-custom.d.ts.map +1 -0
- package/dist/theme-defaults.cjs +29 -0
- package/dist/theme-defaults.cjs.map +1 -0
- package/dist/theme-defaults.d.ts +1 -0
- package/dist/theme-defaults.d.ts.map +1 -0
- package/dist/theme-defaults.js +28 -0
- package/dist/theme-defaults.js.map +1 -0
- package/dist/theme.cjs +34 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.d.ts +36 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +32 -0
- package/dist/theme.js.map +1 -0
- package/dist/tooltip/tooltip-types.d.ts +6 -0
- package/dist/tooltip/tooltip-types.d.ts.map +1 -0
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/KeyboardInputManager.cjs +112 -0
- package/dist/utils/KeyboardInputManager.cjs.map +1 -0
- package/dist/utils/KeyboardInputManager.d.ts +48 -0
- package/dist/utils/KeyboardInputManager.d.ts.map +1 -0
- package/dist/utils/KeyboardInputManager.js +112 -0
- package/dist/utils/KeyboardInputManager.js.map +1 -0
- package/dist/utils/dom-input-manager.cjs +253 -0
- package/dist/utils/dom-input-manager.cjs.map +1 -0
- package/dist/utils/dom-input-manager.d.ts +113 -0
- package/dist/utils/dom-input-manager.d.ts.map +1 -0
- package/dist/utils/dom-input-manager.js +253 -0
- package/dist/utils/dom-input-manager.js.map +1 -0
- package/dist/utils/fast-deep-equal.cjs +7 -0
- package/dist/utils/fast-deep-equal.cjs.map +1 -0
- package/dist/utils/fast-deep-equal.d.ts +4 -0
- package/dist/utils/fast-deep-equal.d.ts.map +1 -0
- package/dist/utils/fast-deep-equal.js +7 -0
- package/dist/utils/fast-deep-equal.js.map +1 -0
- package/dist/utils/image-subtexture-registry.cjs +98 -0
- package/dist/utils/image-subtexture-registry.cjs.map +1 -0
- package/dist/utils/image-subtexture-registry.d.ts +17 -0
- package/dist/utils/image-subtexture-registry.d.ts.map +1 -0
- package/dist/utils/image-subtexture-registry.js +98 -0
- package/dist/utils/image-subtexture-registry.js.map +1 -0
- package/dist/utils/phaser-guards.cjs +15 -0
- package/dist/utils/phaser-guards.cjs.map +1 -0
- package/dist/utils/phaser-guards.d.ts +7 -0
- package/dist/utils/phaser-guards.d.ts.map +1 -0
- package/dist/utils/phaser-guards.js +15 -0
- package/dist/utils/phaser-guards.js.map +1 -0
- package/dist/utils/svg-texture.cjs +48 -0
- package/dist/utils/svg-texture.cjs.map +1 -0
- package/dist/utils/svg-texture.d.ts +34 -0
- package/dist/utils/svg-texture.d.ts.map +1 -0
- package/dist/utils/svg-texture.js +48 -0
- package/dist/utils/svg-texture.js.map +1 -0
- package/dist/utils/texture-registry.cjs +117 -0
- package/dist/utils/texture-registry.cjs.map +1 -0
- package/dist/utils/texture-registry.d.ts +53 -0
- package/dist/utils/texture-registry.d.ts.map +1 -0
- package/dist/utils/texture-registry.js +117 -0
- package/dist/utils/texture-registry.js.map +1 -0
- package/dist/vdom-host-types.d.ts +12 -0
- package/dist/vdom-host-types.d.ts.map +1 -0
- package/dist/vdom-registry.d.ts +27 -0
- package/dist/vdom-registry.d.ts.map +1 -0
- package/dist/vdom-utils.d.ts +16 -0
- package/dist/vdom-utils.d.ts.map +1 -0
- package/dist/vdom.cjs +36 -0
- package/dist/vdom.cjs.map +1 -0
- package/dist/vdom.d.ts +23 -0
- package/dist/vdom.d.ts.map +1 -0
- package/dist/vdom.js +36 -0
- package/dist/vdom.js.map +1 -0
- package/dist/vector/PhaserVectorDrawContext.cjs +97 -0
- package/dist/vector/PhaserVectorDrawContext.cjs.map +1 -0
- package/dist/vector/PhaserVectorDrawContext.d.ts +27 -0
- package/dist/vector/PhaserVectorDrawContext.d.ts.map +1 -0
- package/dist/vector/PhaserVectorDrawContext.js +97 -0
- package/dist/vector/PhaserVectorDrawContext.js.map +1 -0
- package/dist/vector/index.d.ts +2 -0
- package/dist/vector/index.d.ts.map +1 -0
- package/package.json +96 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { createVDOMRuntime } from "@number10/jsx-core/vdom";
|
|
2
|
+
import { SceneWrapper } from "./components/internal/SceneWrapper.js";
|
|
3
|
+
import { isSceneTarget, getParentContentSize, attachSurfaceContext, deriveHostContext, createDummyNode, extractScene, updateGestureHitAreaAfterLayout } from "./phaser-bridges.js";
|
|
4
|
+
import { PhaserHostAdapter } from "./phaser-host-adapter.js";
|
|
5
|
+
import { PhaserSurfaceAdapter } from "./phaser-surface-adapter.js";
|
|
6
|
+
import { getRenderContext } from "./render-context.js";
|
|
7
|
+
import { getThemedProps, themeRegistry } from "./theme.js";
|
|
8
|
+
import { setThemeRemountHandler } from "@number10/jsx-core";
|
|
9
|
+
function wrapRootVNode(type, props) {
|
|
10
|
+
const { width, height, disableAutoSize = false, key: _key, ...componentProps } = props;
|
|
11
|
+
if (disableAutoSize) {
|
|
12
|
+
return {
|
|
13
|
+
type,
|
|
14
|
+
props: { ...componentProps, width, height },
|
|
15
|
+
children: []
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const componentVNode = {
|
|
19
|
+
type,
|
|
20
|
+
props: { ...componentProps, width, height },
|
|
21
|
+
children: []
|
|
22
|
+
};
|
|
23
|
+
return {
|
|
24
|
+
type: SceneWrapper,
|
|
25
|
+
props: { width, height, children: componentVNode },
|
|
26
|
+
children: [],
|
|
27
|
+
__theme: themeRegistry.getGlobalTheme()
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const phaserHostAdapter = new PhaserHostAdapter();
|
|
31
|
+
const phaserSurfaceAdapter = new PhaserSurfaceAdapter();
|
|
32
|
+
const phaserVDOMRuntime = createVDOMRuntime(
|
|
33
|
+
{
|
|
34
|
+
hostAdapter: phaserHostAdapter,
|
|
35
|
+
surfaceAdapter: phaserSurfaceAdapter
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
createDummyNode,
|
|
39
|
+
getHostContext: deriveHostContext,
|
|
40
|
+
resolveProps: (type, theme, props) => getThemedProps(type, theme, props),
|
|
41
|
+
attachSurfaceContext,
|
|
42
|
+
getParentContentSize,
|
|
43
|
+
afterLayout: (container, parent) => {
|
|
44
|
+
const renderContext = getRenderContext(parent);
|
|
45
|
+
renderContext.deferLayout(() => updateGestureHitAreaAfterLayout(container));
|
|
46
|
+
},
|
|
47
|
+
wrapRootVNode,
|
|
48
|
+
extractSurfaceTarget: (parent) => extractScene(parent) ?? parent,
|
|
49
|
+
isSurfaceTarget: isSceneTarget
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
phaserSurfaceAdapter.setVDOM({
|
|
53
|
+
mount: phaserVDOMRuntime.mount,
|
|
54
|
+
patchVNode: phaserVDOMRuntime.patchVNode,
|
|
55
|
+
unmount: phaserVDOMRuntime.unmount
|
|
56
|
+
});
|
|
57
|
+
setThemeRemountHandler(() => {
|
|
58
|
+
phaserVDOMRuntime.remountAll();
|
|
59
|
+
});
|
|
60
|
+
export {
|
|
61
|
+
phaserVDOMRuntime
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=phaser-vdom-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phaser-vdom-runtime.js","sources":["../src/phaser-vdom-runtime.ts"],"sourcesContent":["import type {\n LayoutContainer,\n MountProps,\n Props,\n SurfaceTarget,\n VDOMOperations,\n VNode,\n VNodeLike,\n} from '@number10/jsx-core'\nimport { createVDOMRuntime } from '@number10/jsx-core/vdom'\nimport { SceneWrapper } from './components/internal/SceneWrapper'\nimport type { NodeType } from './core-types'\nimport {\n attachSurfaceContext,\n createDummyNode,\n deriveHostContext,\n extractScene,\n getParentContentSize,\n isSceneTarget,\n updateGestureHitAreaAfterLayout,\n} from './phaser-bridges'\nimport { PhaserHostAdapter } from './phaser-host-adapter'\nimport { PhaserSurfaceAdapter } from './phaser-surface-adapter'\nimport { getRenderContext } from './render-context'\nimport { getThemedProps, setThemeRemountHandler, themeRegistry } from './theme'\nimport type { PhaserPartialTheme } from './theme-base'\nimport type { ParentType } from './types'\n\nfunction wrapRootVNode(\n type: NodeType | ((props: unknown) => VNodeLike),\n props: MountProps & Record<string, unknown>\n): VNode {\n const { width, height, disableAutoSize = false, key: _key, ...componentProps } = props\n\n if (disableAutoSize) {\n return {\n type,\n props: { ...componentProps, width, height },\n children: [],\n }\n }\n\n const componentVNode: VNode = {\n type,\n props: { ...componentProps, width, height },\n children: [],\n }\n\n return {\n type: SceneWrapper,\n props: { width, height, children: componentVNode },\n children: [],\n __theme: themeRegistry.getGlobalTheme() as Record<string, unknown>,\n }\n}\n\nconst phaserHostAdapter = new PhaserHostAdapter()\nconst phaserSurfaceAdapter = new PhaserSurfaceAdapter()\n\nexport const phaserVDOMRuntime = createVDOMRuntime(\n {\n hostAdapter: phaserHostAdapter,\n surfaceAdapter: phaserSurfaceAdapter,\n },\n {\n createDummyNode,\n getHostContext: deriveHostContext,\n resolveProps: (type: string, theme: PhaserPartialTheme | undefined, props: Props) =>\n getThemedProps(type as never, theme as never, props as never),\n attachSurfaceContext,\n getParentContentSize,\n afterLayout: (container: LayoutContainer, parent: unknown) => {\n const renderContext = getRenderContext(parent as ParentType)\n renderContext.deferLayout(() => updateGestureHitAreaAfterLayout(container))\n },\n wrapRootVNode,\n extractSurfaceTarget: (parent: unknown) => (extractScene(parent) ?? parent) as SurfaceTarget,\n isSurfaceTarget: isSceneTarget,\n }\n)\n\n// Register Phaser's VDOM operations on the adapter for portable components\nphaserSurfaceAdapter.setVDOM({\n mount: phaserVDOMRuntime.mount as VDOMOperations['mount'],\n patchVNode: phaserVDOMRuntime.patchVNode as VDOMOperations['patchVNode'],\n unmount: phaserVDOMRuntime.unmount as VDOMOperations['unmount'],\n})\n\nsetThemeRemountHandler(() => {\n phaserVDOMRuntime.remountAll()\n})\n"],"names":[],"mappings":";;;;;;;;AA4BA,SAAS,cACP,MACA,OACO;AACP,QAAM,EAAE,OAAO,QAAQ,kBAAkB,OAAO,KAAK,MAAM,GAAG,eAAA,IAAmB;AAEjF,MAAI,iBAAiB;AACnB,WAAO;AAAA,MACL;AAAA,MACA,OAAO,EAAE,GAAG,gBAAgB,OAAO,OAAA;AAAA,MACnC,UAAU,CAAA;AAAA,IAAC;AAAA,EAEf;AAEA,QAAM,iBAAwB;AAAA,IAC5B;AAAA,IACA,OAAO,EAAE,GAAG,gBAAgB,OAAO,OAAA;AAAA,IACnC,UAAU,CAAA;AAAA,EAAC;AAGb,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,EAAE,OAAO,QAAQ,UAAU,eAAA;AAAA,IAClC,UAAU,CAAA;AAAA,IACV,SAAS,cAAc,eAAA;AAAA,EAAe;AAE1C;AAEA,MAAM,oBAAoB,IAAI,kBAAA;AAC9B,MAAM,uBAAuB,IAAI,qBAAA;AAE1B,MAAM,oBAAoB;AAAA,EAC/B;AAAA,IACE,aAAa;AAAA,IACb,gBAAgB;AAAA,EAAA;AAAA,EAElB;AAAA,IACE;AAAA,IACA,gBAAgB;AAAA,IAChB,cAAc,CAAC,MAAc,OAAuC,UAClE,eAAe,MAAe,OAAgB,KAAc;AAAA,IAC9D;AAAA,IACA;AAAA,IACA,aAAa,CAAC,WAA4B,WAAoB;AAC5D,YAAM,gBAAgB,iBAAiB,MAAoB;AAC3D,oBAAc,YAAY,MAAM,gCAAgC,SAAS,CAAC;AAAA,IAC5E;AAAA,IACA;AAAA,IACA,sBAAsB,CAAC,WAAqB,aAAa,MAAM,KAAK;AAAA,IACpE,iBAAiB;AAAA,EAAA;AAErB;AAGA,qBAAqB,QAAQ;AAAA,EAC3B,OAAO,kBAAkB;AAAA,EACzB,YAAY,kBAAkB;AAAA,EAC9B,SAAS,kBAAkB;AAC7B,CAAC;AAED,uBAAuB,MAAM;AAC3B,oBAAkB,WAAA;AACpB,CAAC;"}
|
package/dist/plugin.cjs
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const Phaser = require("phaser");
|
|
4
|
+
const vdom = require("./vdom.cjs");
|
|
5
|
+
function _interopNamespaceDefault(e) {
|
|
6
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
7
|
+
if (e) {
|
|
8
|
+
for (const k in e) {
|
|
9
|
+
if (k !== "default") {
|
|
10
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
11
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: () => e[k]
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
n.default = e;
|
|
19
|
+
return Object.freeze(n);
|
|
20
|
+
}
|
|
21
|
+
const Phaser__namespace = /* @__PURE__ */ _interopNamespaceDefault(Phaser);
|
|
22
|
+
function createPhaserJSXPlugin(config) {
|
|
23
|
+
return {
|
|
24
|
+
key: "PhaserJSX",
|
|
25
|
+
plugin: PhaserJSXPlugin,
|
|
26
|
+
start: true,
|
|
27
|
+
data: config
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
class PhaserJSXPlugin extends Phaser__namespace.Plugins.BasePlugin {
|
|
31
|
+
config;
|
|
32
|
+
mountHandle;
|
|
33
|
+
container;
|
|
34
|
+
targetScene;
|
|
35
|
+
/**
|
|
36
|
+
* Constructor - receives plugin manager and optional mapping
|
|
37
|
+
*/
|
|
38
|
+
constructor(pluginManager) {
|
|
39
|
+
super(pluginManager);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Init lifecycle - called first with config data
|
|
43
|
+
*/
|
|
44
|
+
init(data) {
|
|
45
|
+
if (data) {
|
|
46
|
+
this.config = { ...data };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Start lifecycle - called when plugin should start
|
|
51
|
+
*/
|
|
52
|
+
start() {
|
|
53
|
+
this.game.events.on("ready", this.onGameReady, this);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Game ready handler - scene system is now initialized
|
|
57
|
+
*/
|
|
58
|
+
onGameReady() {
|
|
59
|
+
const scenes = this.game.scene.scenes;
|
|
60
|
+
if (scenes.length > 0) {
|
|
61
|
+
const targetScene = scenes[0];
|
|
62
|
+
if (!targetScene) return;
|
|
63
|
+
this.targetScene = targetScene;
|
|
64
|
+
targetScene.events.once("create", this.onSceneCreate, this);
|
|
65
|
+
if (targetScene.scene.isActive()) {
|
|
66
|
+
this.onSceneCreate();
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
console.warn("[PhaserJSX Plugin] No scenes found to mount JSX");
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Scene create handler - auto-mount JSX
|
|
74
|
+
*/
|
|
75
|
+
onSceneCreate() {
|
|
76
|
+
const shouldAutoMount = this.config?.autoMount !== false;
|
|
77
|
+
if (shouldAutoMount && this.config?.component) {
|
|
78
|
+
this.mount();
|
|
79
|
+
if (this.config?.autoResize !== false) {
|
|
80
|
+
this.setupResizeHandler();
|
|
81
|
+
}
|
|
82
|
+
} else {
|
|
83
|
+
console.warn("[PhaserJSX Plugin] Auto-mount disabled or no component configured");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Setup resize event handler
|
|
88
|
+
*/
|
|
89
|
+
setupResizeHandler() {
|
|
90
|
+
if (!this.targetScene) return;
|
|
91
|
+
this.targetScene.scale.on("resize", this.onResize, this);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Handle scene resize - update component props
|
|
95
|
+
*/
|
|
96
|
+
onResize(gameSize) {
|
|
97
|
+
if (!this.mountHandle || !this.config?.component || !this.container) return;
|
|
98
|
+
const props = this.config.props || {};
|
|
99
|
+
const width = props.width ?? gameSize.width;
|
|
100
|
+
const height = props.height ?? gameSize.height;
|
|
101
|
+
this.mountHandle = vdom.mountJSX(this.container, this.config.component, {
|
|
102
|
+
...props,
|
|
103
|
+
width,
|
|
104
|
+
height
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Configure plugin
|
|
109
|
+
* Can be called from scene to set up component dynamically
|
|
110
|
+
*/
|
|
111
|
+
configure(component, props) {
|
|
112
|
+
const newConfig = {
|
|
113
|
+
component
|
|
114
|
+
};
|
|
115
|
+
if (props !== void 0) {
|
|
116
|
+
newConfig.props = props;
|
|
117
|
+
}
|
|
118
|
+
this.config = {
|
|
119
|
+
...this.config,
|
|
120
|
+
...newConfig
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Mount JSX component
|
|
125
|
+
*/
|
|
126
|
+
mount() {
|
|
127
|
+
if (!this.targetScene) {
|
|
128
|
+
console.warn("[PhaserJSX Plugin] No scene available for mounting");
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (!this.config?.component) {
|
|
132
|
+
console.warn("[PhaserJSX Plugin] No component configured for mounting");
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (!this.container) {
|
|
136
|
+
const containerConfig = this.config.container || {};
|
|
137
|
+
this.container = this.targetScene.add.container(
|
|
138
|
+
containerConfig.x ?? 0,
|
|
139
|
+
containerConfig.y ?? 0
|
|
140
|
+
);
|
|
141
|
+
this.container.setDepth(containerConfig.depth ?? 100);
|
|
142
|
+
}
|
|
143
|
+
const props = this.config.props || {};
|
|
144
|
+
const width = props.width ?? this.targetScene.scale.width;
|
|
145
|
+
const height = props.height ?? this.targetScene.scale.height;
|
|
146
|
+
this.mountHandle = vdom.mountJSX(this.container, this.config.component, {
|
|
147
|
+
...props,
|
|
148
|
+
width,
|
|
149
|
+
height
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Unmount JSX component
|
|
154
|
+
*/
|
|
155
|
+
unmount() {
|
|
156
|
+
if (this.mountHandle) {
|
|
157
|
+
this.mountHandle.unmount();
|
|
158
|
+
this.mountHandle = void 0;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Destroy lifecycle - cleanup
|
|
163
|
+
*/
|
|
164
|
+
destroy() {
|
|
165
|
+
this.unmount();
|
|
166
|
+
if (this.container) {
|
|
167
|
+
this.container.destroy();
|
|
168
|
+
this.container = void 0;
|
|
169
|
+
}
|
|
170
|
+
this.game.events.off("ready", this.onGameReady, this);
|
|
171
|
+
if (this.targetScene) {
|
|
172
|
+
this.targetScene.events.off("create", this.onSceneCreate, this);
|
|
173
|
+
this.targetScene.scale.off("resize", this.onResize, this);
|
|
174
|
+
}
|
|
175
|
+
this.targetScene = void 0;
|
|
176
|
+
this.config = void 0;
|
|
177
|
+
super.destroy();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.PhaserJSXPlugin = PhaserJSXPlugin;
|
|
181
|
+
exports.createPhaserJSXPlugin = createPhaserJSXPlugin;
|
|
182
|
+
//# sourceMappingURL=plugin.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.cjs","sources":["../src/plugin.ts"],"sourcesContent":["/**\n * PhaserJSX Plugin for automatic JSX mounting\n * Enables declarative initialization via Phaser game config\n */\nimport * as Phaser from 'phaser'\nimport type { VNodeLike } from './types'\nimport { mountJSX, type MountHandle, type MountProps } from './vdom'\n\n/**\n * Plugin configuration\n */\nexport interface PhaserJSXPluginConfig<P = Record<string, unknown>> {\n /** Component to mount */\n component?: ((props: P & MountProps) => VNodeLike) | string\n /** Props for component (width and height are auto-injected from game size) */\n props?: P\n /** Container configuration */\n container?: {\n x?: number\n y?: number\n depth?: number\n }\n /** Auto-mount on scene create (default: true) */\n autoMount?: boolean\n /** Auto-resize on scale events (default: true) */\n autoResize?: boolean\n}\n\n/**\n * Extracts custom props from component function (excluding MountProps)\n */\ntype InferCustomProps<C> = C extends (props: infer P) => VNodeLike\n ? Omit<P, keyof MountProps>\n : never\n\n/**\n * Type-safe plugin entry for PhaserJSX Plugin\n * Use this in game config for proper TypeScript support\n *\n * @example\n * ```typescript\n * const config: Phaser.Types.Core.GameConfig = {\n * plugins: {\n * global: [\n * createPhaserJSXPlugin({\n * component: App,\n * props: { title: 'My App' },\n * autoResize: true\n * })\n * ]\n * }\n * }\n * ```\n */\nexport interface PhaserJSXPluginEntry<P = Record<string, unknown>> {\n key: string\n plugin: typeof PhaserJSXPlugin\n start: boolean\n data: PhaserJSXPluginConfig<P>\n}\n\n/**\n * Creates a type-safe PhaserJSX plugin entry for game config\n * Provides full IDE autocomplete and type checking for plugin configuration\n * Automatically infers component props for full type safety\n *\n * @param config - Plugin configuration with component and props\n * @returns Type-safe plugin entry for Phaser game config\n *\n * @example\n * ```typescript\n * // Full type safety - TypeScript infers AppProps from component\n * createPhaserJSXPlugin({\n * component: App,\n * props: { title: 'My App' }, // Only valid AppProps allowed!\n * autoResize: true\n * })\n * ```\n */\nexport function createPhaserJSXPlugin<C extends (props: unknown) => VNodeLike>(config: {\n component: C\n props?: InferCustomProps<C>\n autoMount?: boolean\n autoResize?: boolean\n container?: { x?: number; y?: number; depth?: number }\n}): PhaserJSXPluginEntry<InferCustomProps<C>>\n\n/**\n * Creates a PhaserJSX plugin entry (string component variant)\n */\nexport function createPhaserJSXPlugin<P = Record<string, unknown>>(\n config: PhaserJSXPluginConfig<P>\n): PhaserJSXPluginEntry<P>\n\n/**\n * Implementation\n */\nexport function createPhaserJSXPlugin<P = Record<string, unknown>>(\n config: PhaserJSXPluginConfig<P>\n): PhaserJSXPluginEntry<P> {\n return {\n key: 'PhaserJSX',\n plugin: PhaserJSXPlugin,\n start: true,\n data: config,\n }\n}\n\n/**\n * PhaserJSX Plugin\n * Provides automatic JSX mounting through Phaser plugin system\n *\n * @example\n * ```typescript\n * // In game config\n * plugins: {\n * global: [{\n * key: 'PhaserJSX',\n * plugin: PhaserJSXPlugin,\n * start: true,\n * data: {\n * component: App,\n * props: { width: '100%', height: '100%' }\n * }\n * }]\n * }\n * ```\n */\nexport class PhaserJSXPlugin extends Phaser.Plugins.BasePlugin {\n private config: PhaserJSXPluginConfig | undefined\n private mountHandle: MountHandle | undefined\n private container: Phaser.GameObjects.Container | undefined\n private targetScene: Phaser.Scene | undefined\n\n /**\n * Constructor - receives plugin manager and optional mapping\n */\n constructor(pluginManager: Phaser.Plugins.PluginManager) {\n super(pluginManager)\n }\n\n /**\n * Init lifecycle - called first with config data\n */\n override init(data?: PhaserJSXPluginConfig): void {\n if (data) {\n this.config = { ...data }\n }\n }\n\n /**\n * Start lifecycle - called when plugin should start\n */\n override start(): void {\n // Listen for scene being added to the scene manager\n this.game.events.on('ready', this.onGameReady, this)\n }\n\n /**\n * Game ready handler - scene system is now initialized\n */\n private onGameReady(): void {\n // Get first scene\n const scenes = this.game.scene.scenes\n\n if (scenes.length > 0) {\n const targetScene = scenes[0]\n if (!targetScene) return\n\n this.targetScene = targetScene\n\n // Listen to scene events\n targetScene.events.once('create', this.onSceneCreate, this)\n\n // If scene is already created, mount immediately\n if (targetScene.scene.isActive()) {\n this.onSceneCreate()\n }\n } else {\n console.warn('[PhaserJSX Plugin] No scenes found to mount JSX')\n }\n }\n\n /**\n * Scene create handler - auto-mount JSX\n */\n private onSceneCreate(): void {\n // Auto-mount if enabled and component is configured\n const shouldAutoMount = this.config?.autoMount !== false\n if (shouldAutoMount && this.config?.component) {\n this.mount()\n // Setup resize handler if auto-resize is enabled (default: true)\n if (this.config?.autoResize !== false) {\n this.setupResizeHandler()\n }\n } else {\n console.warn('[PhaserJSX Plugin] Auto-mount disabled or no component configured')\n }\n }\n\n /**\n * Setup resize event handler\n */\n private setupResizeHandler(): void {\n if (!this.targetScene) return\n\n // Listen to scale resize events\n this.targetScene.scale.on('resize', this.onResize, this)\n }\n\n /**\n * Handle scene resize - update component props\n */\n private onResize(gameSize: Phaser.Structs.Size): void {\n if (!this.mountHandle || !this.config?.component || !this.container) return\n\n // Get current props\n const props = this.config.props || {}\n const width = (props as { width?: unknown }).width ?? gameSize.width\n const height = (props as { height?: unknown }).height ?? gameSize.height\n\n // Call mountJSX again with same container and component\n // This will trigger a patch since mount already exists for this container\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.mountHandle = mountJSX(this.container, this.config.component as any, {\n ...props,\n width,\n height,\n })\n }\n\n /**\n * Configure plugin\n * Can be called from scene to set up component dynamically\n */\n configure(\n component: ((props: unknown) => VNodeLike) | string,\n props?: MountProps & Record<string, unknown>\n ): void {\n const newConfig: PhaserJSXPluginConfig = {\n component,\n }\n if (props !== undefined) {\n newConfig.props = props\n }\n this.config = {\n ...this.config,\n ...newConfig,\n }\n }\n\n /**\n * Mount JSX component\n */\n mount(): void {\n if (!this.targetScene) {\n console.warn('[PhaserJSX Plugin] No scene available for mounting')\n return\n }\n\n if (!this.config?.component) {\n console.warn('[PhaserJSX Plugin] No component configured for mounting')\n return\n }\n\n // Create container if not exists\n if (!this.container) {\n const containerConfig = this.config.container || {}\n this.container = this.targetScene.add.container(\n containerConfig.x ?? 0,\n containerConfig.y ?? 0\n )\n this.container.setDepth(containerConfig.depth ?? 100)\n }\n\n // Get dimensions from config or use scene dimensions\n const props = this.config.props || {}\n const width = (props as { width?: unknown }).width ?? this.targetScene.scale.width\n const height = (props as { height?: unknown }).height ?? this.targetScene.scale.height\n\n // Mount JSX\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.mountHandle = mountJSX(this.container, this.config.component as any, {\n ...props,\n width,\n height,\n })\n }\n\n /**\n * Unmount JSX component\n */\n unmount(): void {\n if (this.mountHandle) {\n this.mountHandle.unmount()\n this.mountHandle = undefined\n }\n }\n\n /**\n * Destroy lifecycle - cleanup\n */\n override destroy(): void {\n // Unmount JSX\n this.unmount()\n\n // Remove container\n if (this.container) {\n this.container.destroy()\n this.container = undefined\n }\n\n // Remove listeners\n this.game.events.off('ready', this.onGameReady, this)\n if (this.targetScene) {\n this.targetScene.events.off('create', this.onSceneCreate, this)\n this.targetScene.scale.off('resize', this.onResize, this)\n }\n\n // Clear references\n this.targetScene = undefined\n this.config = undefined\n\n super.destroy()\n }\n}\n"],"names":["Phaser","mountJSX"],"mappings":"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"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { VNodeLike } from './types';
|
|
2
|
+
import { MountProps } from './vdom';
|
|
3
|
+
/**
|
|
4
|
+
* PhaserJSX Plugin for automatic JSX mounting
|
|
5
|
+
* Enables declarative initialization via Phaser game config
|
|
6
|
+
*/
|
|
7
|
+
import * as Phaser from 'phaser';
|
|
8
|
+
/**
|
|
9
|
+
* Plugin configuration
|
|
10
|
+
*/
|
|
11
|
+
export interface PhaserJSXPluginConfig<P = Record<string, unknown>> {
|
|
12
|
+
/** Component to mount */
|
|
13
|
+
component?: ((props: P & MountProps) => VNodeLike) | string;
|
|
14
|
+
/** Props for component (width and height are auto-injected from game size) */
|
|
15
|
+
props?: P;
|
|
16
|
+
/** Container configuration */
|
|
17
|
+
container?: {
|
|
18
|
+
x?: number;
|
|
19
|
+
y?: number;
|
|
20
|
+
depth?: number;
|
|
21
|
+
};
|
|
22
|
+
/** Auto-mount on scene create (default: true) */
|
|
23
|
+
autoMount?: boolean;
|
|
24
|
+
/** Auto-resize on scale events (default: true) */
|
|
25
|
+
autoResize?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Extracts custom props from component function (excluding MountProps)
|
|
29
|
+
*/
|
|
30
|
+
type InferCustomProps<C> = C extends (props: infer P) => VNodeLike ? Omit<P, keyof MountProps> : never;
|
|
31
|
+
/**
|
|
32
|
+
* Type-safe plugin entry for PhaserJSX Plugin
|
|
33
|
+
* Use this in game config for proper TypeScript support
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* const config: Phaser.Types.Core.GameConfig = {
|
|
38
|
+
* plugins: {
|
|
39
|
+
* global: [
|
|
40
|
+
* createPhaserJSXPlugin({
|
|
41
|
+
* component: App,
|
|
42
|
+
* props: { title: 'My App' },
|
|
43
|
+
* autoResize: true
|
|
44
|
+
* })
|
|
45
|
+
* ]
|
|
46
|
+
* }
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export interface PhaserJSXPluginEntry<P = Record<string, unknown>> {
|
|
51
|
+
key: string;
|
|
52
|
+
plugin: typeof PhaserJSXPlugin;
|
|
53
|
+
start: boolean;
|
|
54
|
+
data: PhaserJSXPluginConfig<P>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Creates a type-safe PhaserJSX plugin entry for game config
|
|
58
|
+
* Provides full IDE autocomplete and type checking for plugin configuration
|
|
59
|
+
* Automatically infers component props for full type safety
|
|
60
|
+
*
|
|
61
|
+
* @param config - Plugin configuration with component and props
|
|
62
|
+
* @returns Type-safe plugin entry for Phaser game config
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* // Full type safety - TypeScript infers AppProps from component
|
|
67
|
+
* createPhaserJSXPlugin({
|
|
68
|
+
* component: App,
|
|
69
|
+
* props: { title: 'My App' }, // Only valid AppProps allowed!
|
|
70
|
+
* autoResize: true
|
|
71
|
+
* })
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function createPhaserJSXPlugin<C extends (props: unknown) => VNodeLike>(config: {
|
|
75
|
+
component: C;
|
|
76
|
+
props?: InferCustomProps<C>;
|
|
77
|
+
autoMount?: boolean;
|
|
78
|
+
autoResize?: boolean;
|
|
79
|
+
container?: {
|
|
80
|
+
x?: number;
|
|
81
|
+
y?: number;
|
|
82
|
+
depth?: number;
|
|
83
|
+
};
|
|
84
|
+
}): PhaserJSXPluginEntry<InferCustomProps<C>>;
|
|
85
|
+
/**
|
|
86
|
+
* Creates a PhaserJSX plugin entry (string component variant)
|
|
87
|
+
*/
|
|
88
|
+
export declare function createPhaserJSXPlugin<P = Record<string, unknown>>(config: PhaserJSXPluginConfig<P>): PhaserJSXPluginEntry<P>;
|
|
89
|
+
/**
|
|
90
|
+
* PhaserJSX Plugin
|
|
91
|
+
* Provides automatic JSX mounting through Phaser plugin system
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* // In game config
|
|
96
|
+
* plugins: {
|
|
97
|
+
* global: [{
|
|
98
|
+
* key: 'PhaserJSX',
|
|
99
|
+
* plugin: PhaserJSXPlugin,
|
|
100
|
+
* start: true,
|
|
101
|
+
* data: {
|
|
102
|
+
* component: App,
|
|
103
|
+
* props: { width: '100%', height: '100%' }
|
|
104
|
+
* }
|
|
105
|
+
* }]
|
|
106
|
+
* }
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export declare class PhaserJSXPlugin extends Phaser.Plugins.BasePlugin {
|
|
110
|
+
private config;
|
|
111
|
+
private mountHandle;
|
|
112
|
+
private container;
|
|
113
|
+
private targetScene;
|
|
114
|
+
/**
|
|
115
|
+
* Constructor - receives plugin manager and optional mapping
|
|
116
|
+
*/
|
|
117
|
+
constructor(pluginManager: Phaser.Plugins.PluginManager);
|
|
118
|
+
/**
|
|
119
|
+
* Init lifecycle - called first with config data
|
|
120
|
+
*/
|
|
121
|
+
init(data?: PhaserJSXPluginConfig): void;
|
|
122
|
+
/**
|
|
123
|
+
* Start lifecycle - called when plugin should start
|
|
124
|
+
*/
|
|
125
|
+
start(): void;
|
|
126
|
+
/**
|
|
127
|
+
* Game ready handler - scene system is now initialized
|
|
128
|
+
*/
|
|
129
|
+
private onGameReady;
|
|
130
|
+
/**
|
|
131
|
+
* Scene create handler - auto-mount JSX
|
|
132
|
+
*/
|
|
133
|
+
private onSceneCreate;
|
|
134
|
+
/**
|
|
135
|
+
* Setup resize event handler
|
|
136
|
+
*/
|
|
137
|
+
private setupResizeHandler;
|
|
138
|
+
/**
|
|
139
|
+
* Handle scene resize - update component props
|
|
140
|
+
*/
|
|
141
|
+
private onResize;
|
|
142
|
+
/**
|
|
143
|
+
* Configure plugin
|
|
144
|
+
* Can be called from scene to set up component dynamically
|
|
145
|
+
*/
|
|
146
|
+
configure(component: ((props: unknown) => VNodeLike) | string, props?: MountProps & Record<string, unknown>): void;
|
|
147
|
+
/**
|
|
148
|
+
* Mount JSX component
|
|
149
|
+
*/
|
|
150
|
+
mount(): void;
|
|
151
|
+
/**
|
|
152
|
+
* Unmount JSX component
|
|
153
|
+
*/
|
|
154
|
+
unmount(): void;
|
|
155
|
+
/**
|
|
156
|
+
* Destroy lifecycle - cleanup
|
|
157
|
+
*/
|
|
158
|
+
destroy(): void;
|
|
159
|
+
}
|
|
160
|
+
export {};
|
|
161
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import * as Phaser from "phaser";
|
|
2
|
+
import { mountJSX } from "./vdom.js";
|
|
3
|
+
function createPhaserJSXPlugin(config) {
|
|
4
|
+
return {
|
|
5
|
+
key: "PhaserJSX",
|
|
6
|
+
plugin: PhaserJSXPlugin,
|
|
7
|
+
start: true,
|
|
8
|
+
data: config
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
class PhaserJSXPlugin extends Phaser.Plugins.BasePlugin {
|
|
12
|
+
config;
|
|
13
|
+
mountHandle;
|
|
14
|
+
container;
|
|
15
|
+
targetScene;
|
|
16
|
+
/**
|
|
17
|
+
* Constructor - receives plugin manager and optional mapping
|
|
18
|
+
*/
|
|
19
|
+
constructor(pluginManager) {
|
|
20
|
+
super(pluginManager);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Init lifecycle - called first with config data
|
|
24
|
+
*/
|
|
25
|
+
init(data) {
|
|
26
|
+
if (data) {
|
|
27
|
+
this.config = { ...data };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Start lifecycle - called when plugin should start
|
|
32
|
+
*/
|
|
33
|
+
start() {
|
|
34
|
+
this.game.events.on("ready", this.onGameReady, this);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Game ready handler - scene system is now initialized
|
|
38
|
+
*/
|
|
39
|
+
onGameReady() {
|
|
40
|
+
const scenes = this.game.scene.scenes;
|
|
41
|
+
if (scenes.length > 0) {
|
|
42
|
+
const targetScene = scenes[0];
|
|
43
|
+
if (!targetScene) return;
|
|
44
|
+
this.targetScene = targetScene;
|
|
45
|
+
targetScene.events.once("create", this.onSceneCreate, this);
|
|
46
|
+
if (targetScene.scene.isActive()) {
|
|
47
|
+
this.onSceneCreate();
|
|
48
|
+
}
|
|
49
|
+
} else {
|
|
50
|
+
console.warn("[PhaserJSX Plugin] No scenes found to mount JSX");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Scene create handler - auto-mount JSX
|
|
55
|
+
*/
|
|
56
|
+
onSceneCreate() {
|
|
57
|
+
const shouldAutoMount = this.config?.autoMount !== false;
|
|
58
|
+
if (shouldAutoMount && this.config?.component) {
|
|
59
|
+
this.mount();
|
|
60
|
+
if (this.config?.autoResize !== false) {
|
|
61
|
+
this.setupResizeHandler();
|
|
62
|
+
}
|
|
63
|
+
} else {
|
|
64
|
+
console.warn("[PhaserJSX Plugin] Auto-mount disabled or no component configured");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Setup resize event handler
|
|
69
|
+
*/
|
|
70
|
+
setupResizeHandler() {
|
|
71
|
+
if (!this.targetScene) return;
|
|
72
|
+
this.targetScene.scale.on("resize", this.onResize, this);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Handle scene resize - update component props
|
|
76
|
+
*/
|
|
77
|
+
onResize(gameSize) {
|
|
78
|
+
if (!this.mountHandle || !this.config?.component || !this.container) return;
|
|
79
|
+
const props = this.config.props || {};
|
|
80
|
+
const width = props.width ?? gameSize.width;
|
|
81
|
+
const height = props.height ?? gameSize.height;
|
|
82
|
+
this.mountHandle = mountJSX(this.container, this.config.component, {
|
|
83
|
+
...props,
|
|
84
|
+
width,
|
|
85
|
+
height
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Configure plugin
|
|
90
|
+
* Can be called from scene to set up component dynamically
|
|
91
|
+
*/
|
|
92
|
+
configure(component, props) {
|
|
93
|
+
const newConfig = {
|
|
94
|
+
component
|
|
95
|
+
};
|
|
96
|
+
if (props !== void 0) {
|
|
97
|
+
newConfig.props = props;
|
|
98
|
+
}
|
|
99
|
+
this.config = {
|
|
100
|
+
...this.config,
|
|
101
|
+
...newConfig
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Mount JSX component
|
|
106
|
+
*/
|
|
107
|
+
mount() {
|
|
108
|
+
if (!this.targetScene) {
|
|
109
|
+
console.warn("[PhaserJSX Plugin] No scene available for mounting");
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (!this.config?.component) {
|
|
113
|
+
console.warn("[PhaserJSX Plugin] No component configured for mounting");
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (!this.container) {
|
|
117
|
+
const containerConfig = this.config.container || {};
|
|
118
|
+
this.container = this.targetScene.add.container(
|
|
119
|
+
containerConfig.x ?? 0,
|
|
120
|
+
containerConfig.y ?? 0
|
|
121
|
+
);
|
|
122
|
+
this.container.setDepth(containerConfig.depth ?? 100);
|
|
123
|
+
}
|
|
124
|
+
const props = this.config.props || {};
|
|
125
|
+
const width = props.width ?? this.targetScene.scale.width;
|
|
126
|
+
const height = props.height ?? this.targetScene.scale.height;
|
|
127
|
+
this.mountHandle = mountJSX(this.container, this.config.component, {
|
|
128
|
+
...props,
|
|
129
|
+
width,
|
|
130
|
+
height
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Unmount JSX component
|
|
135
|
+
*/
|
|
136
|
+
unmount() {
|
|
137
|
+
if (this.mountHandle) {
|
|
138
|
+
this.mountHandle.unmount();
|
|
139
|
+
this.mountHandle = void 0;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Destroy lifecycle - cleanup
|
|
144
|
+
*/
|
|
145
|
+
destroy() {
|
|
146
|
+
this.unmount();
|
|
147
|
+
if (this.container) {
|
|
148
|
+
this.container.destroy();
|
|
149
|
+
this.container = void 0;
|
|
150
|
+
}
|
|
151
|
+
this.game.events.off("ready", this.onGameReady, this);
|
|
152
|
+
if (this.targetScene) {
|
|
153
|
+
this.targetScene.events.off("create", this.onSceneCreate, this);
|
|
154
|
+
this.targetScene.scale.off("resize", this.onResize, this);
|
|
155
|
+
}
|
|
156
|
+
this.targetScene = void 0;
|
|
157
|
+
this.config = void 0;
|
|
158
|
+
super.destroy();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
export {
|
|
162
|
+
PhaserJSXPlugin,
|
|
163
|
+
createPhaserJSXPlugin
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["../src/plugin.ts"],"sourcesContent":["/**\n * PhaserJSX Plugin for automatic JSX mounting\n * Enables declarative initialization via Phaser game config\n */\nimport * as Phaser from 'phaser'\nimport type { VNodeLike } from './types'\nimport { mountJSX, type MountHandle, type MountProps } from './vdom'\n\n/**\n * Plugin configuration\n */\nexport interface PhaserJSXPluginConfig<P = Record<string, unknown>> {\n /** Component to mount */\n component?: ((props: P & MountProps) => VNodeLike) | string\n /** Props for component (width and height are auto-injected from game size) */\n props?: P\n /** Container configuration */\n container?: {\n x?: number\n y?: number\n depth?: number\n }\n /** Auto-mount on scene create (default: true) */\n autoMount?: boolean\n /** Auto-resize on scale events (default: true) */\n autoResize?: boolean\n}\n\n/**\n * Extracts custom props from component function (excluding MountProps)\n */\ntype InferCustomProps<C> = C extends (props: infer P) => VNodeLike\n ? Omit<P, keyof MountProps>\n : never\n\n/**\n * Type-safe plugin entry for PhaserJSX Plugin\n * Use this in game config for proper TypeScript support\n *\n * @example\n * ```typescript\n * const config: Phaser.Types.Core.GameConfig = {\n * plugins: {\n * global: [\n * createPhaserJSXPlugin({\n * component: App,\n * props: { title: 'My App' },\n * autoResize: true\n * })\n * ]\n * }\n * }\n * ```\n */\nexport interface PhaserJSXPluginEntry<P = Record<string, unknown>> {\n key: string\n plugin: typeof PhaserJSXPlugin\n start: boolean\n data: PhaserJSXPluginConfig<P>\n}\n\n/**\n * Creates a type-safe PhaserJSX plugin entry for game config\n * Provides full IDE autocomplete and type checking for plugin configuration\n * Automatically infers component props for full type safety\n *\n * @param config - Plugin configuration with component and props\n * @returns Type-safe plugin entry for Phaser game config\n *\n * @example\n * ```typescript\n * // Full type safety - TypeScript infers AppProps from component\n * createPhaserJSXPlugin({\n * component: App,\n * props: { title: 'My App' }, // Only valid AppProps allowed!\n * autoResize: true\n * })\n * ```\n */\nexport function createPhaserJSXPlugin<C extends (props: unknown) => VNodeLike>(config: {\n component: C\n props?: InferCustomProps<C>\n autoMount?: boolean\n autoResize?: boolean\n container?: { x?: number; y?: number; depth?: number }\n}): PhaserJSXPluginEntry<InferCustomProps<C>>\n\n/**\n * Creates a PhaserJSX plugin entry (string component variant)\n */\nexport function createPhaserJSXPlugin<P = Record<string, unknown>>(\n config: PhaserJSXPluginConfig<P>\n): PhaserJSXPluginEntry<P>\n\n/**\n * Implementation\n */\nexport function createPhaserJSXPlugin<P = Record<string, unknown>>(\n config: PhaserJSXPluginConfig<P>\n): PhaserJSXPluginEntry<P> {\n return {\n key: 'PhaserJSX',\n plugin: PhaserJSXPlugin,\n start: true,\n data: config,\n }\n}\n\n/**\n * PhaserJSX Plugin\n * Provides automatic JSX mounting through Phaser plugin system\n *\n * @example\n * ```typescript\n * // In game config\n * plugins: {\n * global: [{\n * key: 'PhaserJSX',\n * plugin: PhaserJSXPlugin,\n * start: true,\n * data: {\n * component: App,\n * props: { width: '100%', height: '100%' }\n * }\n * }]\n * }\n * ```\n */\nexport class PhaserJSXPlugin extends Phaser.Plugins.BasePlugin {\n private config: PhaserJSXPluginConfig | undefined\n private mountHandle: MountHandle | undefined\n private container: Phaser.GameObjects.Container | undefined\n private targetScene: Phaser.Scene | undefined\n\n /**\n * Constructor - receives plugin manager and optional mapping\n */\n constructor(pluginManager: Phaser.Plugins.PluginManager) {\n super(pluginManager)\n }\n\n /**\n * Init lifecycle - called first with config data\n */\n override init(data?: PhaserJSXPluginConfig): void {\n if (data) {\n this.config = { ...data }\n }\n }\n\n /**\n * Start lifecycle - called when plugin should start\n */\n override start(): void {\n // Listen for scene being added to the scene manager\n this.game.events.on('ready', this.onGameReady, this)\n }\n\n /**\n * Game ready handler - scene system is now initialized\n */\n private onGameReady(): void {\n // Get first scene\n const scenes = this.game.scene.scenes\n\n if (scenes.length > 0) {\n const targetScene = scenes[0]\n if (!targetScene) return\n\n this.targetScene = targetScene\n\n // Listen to scene events\n targetScene.events.once('create', this.onSceneCreate, this)\n\n // If scene is already created, mount immediately\n if (targetScene.scene.isActive()) {\n this.onSceneCreate()\n }\n } else {\n console.warn('[PhaserJSX Plugin] No scenes found to mount JSX')\n }\n }\n\n /**\n * Scene create handler - auto-mount JSX\n */\n private onSceneCreate(): void {\n // Auto-mount if enabled and component is configured\n const shouldAutoMount = this.config?.autoMount !== false\n if (shouldAutoMount && this.config?.component) {\n this.mount()\n // Setup resize handler if auto-resize is enabled (default: true)\n if (this.config?.autoResize !== false) {\n this.setupResizeHandler()\n }\n } else {\n console.warn('[PhaserJSX Plugin] Auto-mount disabled or no component configured')\n }\n }\n\n /**\n * Setup resize event handler\n */\n private setupResizeHandler(): void {\n if (!this.targetScene) return\n\n // Listen to scale resize events\n this.targetScene.scale.on('resize', this.onResize, this)\n }\n\n /**\n * Handle scene resize - update component props\n */\n private onResize(gameSize: Phaser.Structs.Size): void {\n if (!this.mountHandle || !this.config?.component || !this.container) return\n\n // Get current props\n const props = this.config.props || {}\n const width = (props as { width?: unknown }).width ?? gameSize.width\n const height = (props as { height?: unknown }).height ?? gameSize.height\n\n // Call mountJSX again with same container and component\n // This will trigger a patch since mount already exists for this container\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.mountHandle = mountJSX(this.container, this.config.component as any, {\n ...props,\n width,\n height,\n })\n }\n\n /**\n * Configure plugin\n * Can be called from scene to set up component dynamically\n */\n configure(\n component: ((props: unknown) => VNodeLike) | string,\n props?: MountProps & Record<string, unknown>\n ): void {\n const newConfig: PhaserJSXPluginConfig = {\n component,\n }\n if (props !== undefined) {\n newConfig.props = props\n }\n this.config = {\n ...this.config,\n ...newConfig,\n }\n }\n\n /**\n * Mount JSX component\n */\n mount(): void {\n if (!this.targetScene) {\n console.warn('[PhaserJSX Plugin] No scene available for mounting')\n return\n }\n\n if (!this.config?.component) {\n console.warn('[PhaserJSX Plugin] No component configured for mounting')\n return\n }\n\n // Create container if not exists\n if (!this.container) {\n const containerConfig = this.config.container || {}\n this.container = this.targetScene.add.container(\n containerConfig.x ?? 0,\n containerConfig.y ?? 0\n )\n this.container.setDepth(containerConfig.depth ?? 100)\n }\n\n // Get dimensions from config or use scene dimensions\n const props = this.config.props || {}\n const width = (props as { width?: unknown }).width ?? this.targetScene.scale.width\n const height = (props as { height?: unknown }).height ?? this.targetScene.scale.height\n\n // Mount JSX\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.mountHandle = mountJSX(this.container, this.config.component as any, {\n ...props,\n width,\n height,\n })\n }\n\n /**\n * Unmount JSX component\n */\n unmount(): void {\n if (this.mountHandle) {\n this.mountHandle.unmount()\n this.mountHandle = undefined\n }\n }\n\n /**\n * Destroy lifecycle - cleanup\n */\n override destroy(): void {\n // Unmount JSX\n this.unmount()\n\n // Remove container\n if (this.container) {\n this.container.destroy()\n this.container = undefined\n }\n\n // Remove listeners\n this.game.events.off('ready', this.onGameReady, this)\n if (this.targetScene) {\n this.targetScene.events.off('create', this.onSceneCreate, this)\n this.targetScene.scale.off('resize', this.onResize, this)\n }\n\n // Clear references\n this.targetScene = undefined\n this.config = undefined\n\n super.destroy()\n }\n}\n"],"names":[],"mappings":"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"}
|