@number10/phaserjsx 4.0.0 → 4.2.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 (64) hide show
  1. package/README.md +30 -0
  2. package/dist/chunk-C2EiDwsr.cjs +35 -0
  3. package/dist/clip/index.cjs +8 -0
  4. package/dist/clip/index.d.ts +3 -0
  5. package/dist/clip/index.d.ts.map +1 -0
  6. package/dist/clip/index.js +2 -0
  7. package/dist/clip/stencil-clip-depth.d.ts +10 -0
  8. package/dist/clip/stencil-clip-depth.d.ts.map +1 -0
  9. package/dist/clip/stencil-clip-extension.d.ts +18 -0
  10. package/dist/clip/stencil-clip-extension.d.ts.map +1 -0
  11. package/dist/clip/stencil-clip-fbo-bridge.d.ts +7 -0
  12. package/dist/clip/stencil-clip-fbo-bridge.d.ts.map +1 -0
  13. package/dist/clip/stencil-clip-renderer.d.ts +7 -0
  14. package/dist/clip/stencil-clip-renderer.d.ts.map +1 -0
  15. package/dist/clip/stencil-clip-state.d.ts +28 -0
  16. package/dist/clip/stencil-clip-state.d.ts.map +1 -0
  17. package/dist/clip/stencil-clip-types.d.ts +67 -0
  18. package/dist/clip/stencil-clip-types.d.ts.map +1 -0
  19. package/dist/clip/stencil-clip.d.ts +9 -42
  20. package/dist/clip/stencil-clip.d.ts.map +1 -1
  21. package/dist/clip-CHmjztBQ.cjs +705 -0
  22. package/dist/clip-CHmjztBQ.cjs.map +1 -0
  23. package/dist/clip-CPufWCSD.js +668 -0
  24. package/dist/clip-CPufWCSD.js.map +1 -0
  25. package/dist/components/appliers/applyBackground.d.ts +2 -1
  26. package/dist/components/appliers/applyBackground.d.ts.map +1 -1
  27. package/dist/components/appliers/applyTooltip.d.ts.map +1 -1
  28. package/dist/components/backgroundImage.d.ts +12 -0
  29. package/dist/components/backgroundImage.d.ts.map +1 -0
  30. package/dist/components/creators/createBackground.d.ts +2 -1
  31. package/dist/components/creators/createBackground.d.ts.map +1 -1
  32. package/dist/components/custom/Accordion.d.ts.map +1 -1
  33. package/dist/components/custom/DebugPanel.d.ts +30 -0
  34. package/dist/components/custom/DebugPanel.d.ts.map +1 -0
  35. package/dist/components/custom/Dropdown.d.ts.map +1 -1
  36. package/dist/components/custom/Toggle.d.ts.map +1 -1
  37. package/dist/components/custom/index.cjs +2 -1
  38. package/dist/components/custom/index.d.ts +1 -0
  39. package/dist/components/custom/index.d.ts.map +1 -1
  40. package/dist/components/custom/index.js +2 -2
  41. package/dist/components/primitives/graphics.d.ts +2 -2
  42. package/dist/components/primitives/view.d.ts.map +1 -1
  43. package/dist/{custom-oy3mBnrW.js → custom-BXDJDGOl.js} +439 -485
  44. package/dist/custom-BXDJDGOl.js.map +1 -0
  45. package/dist/{custom-BN31OAJq.cjs → custom-DTd4LxDn.cjs} +459 -518
  46. package/dist/custom-DTd4LxDn.cjs.map +1 -0
  47. package/dist/gestures/gesture-manager.d.ts +1 -1
  48. package/dist/hooks.d.ts +9 -8
  49. package/dist/hooks.d.ts.map +1 -1
  50. package/dist/index.cjs +105 -106
  51. package/dist/index.cjs.map +1 -1
  52. package/dist/index.d.ts +1 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +96 -105
  55. package/dist/index.js.map +1 -1
  56. package/dist/layout/appliers/background-applier.d.ts.map +1 -1
  57. package/dist/layout/layout-engine.d.ts.map +1 -1
  58. package/dist/layout/types.d.ts +2 -1
  59. package/dist/layout/types.d.ts.map +1 -1
  60. package/dist/scene-backgrounds.d.ts +51 -1
  61. package/dist/scene-backgrounds.d.ts.map +1 -1
  62. package/package.json +8 -2
  63. package/dist/custom-BN31OAJq.cjs.map +0 -1
  64. package/dist/custom-oy3mBnrW.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clip-CHmjztBQ.cjs","names":[],"sources":["../src/clip/stencil-clip-depth.ts","../src/clip/stencil-clip-fbo-bridge.ts","../src/clip/stencil-clip-renderer.ts","../src/clip/stencil-clip-state.ts","../src/clip/stencil-clip.ts","../src/clip/stencil-clip-extension.ts","../src/clip/index.ts"],"sourcesContent":["import type * as Phaser from 'phaser'\n\n/**\n * Shared depth counter per GL context.\n * Incremented before each clip's INCR pass, decremented after the DECR pass.\n */\nconst _depthByGl = new WeakMap<WebGLRenderingContext, { value: number }>()\n\nconst _prerenderHooked = new WeakSet<Phaser.Game>()\n\nexport function getDepth(gl: WebGLRenderingContext): { value: number } {\n let d = _depthByGl.get(gl)\n if (!d) {\n d = { value: 0 }\n _depthByGl.set(gl, d)\n }\n return d\n}\n\n/**\n * Registers a per-frame prerender listener that resets stencil clip state.\n * Registered at most once per Phaser.Game instance.\n */\nexport function ensurePrerenderReset(\n gl: WebGLRenderingContext,\n game: Phaser.Game,\n resetFboState: (gl: WebGLRenderingContext) => void\n): void {\n if (_prerenderHooked.has(game)) return\n _prerenderHooked.add(game)\n game.events.on('prerender', () => {\n const d = _depthByGl.get(gl)\n if (d) d.value = 0\n resetFboState(gl)\n })\n}\n","/**\n * Saved stencil state captured just before entering an off-screen FBO.\n * All fields are raw GL enum values / integers from gl.getParameter.\n */\ninterface SavedStencil {\n func: number\n ref: number\n valueMask: number\n fail: number\n zfail: number\n zpass: number\n writeMask: number\n}\n\ninterface FboPatchState {\n /** Last framebuffer bound through the patched bindFramebuffer call. */\n current: WebGLFramebuffer | null\n /** Stencil state saved when transitioning from main framebuffer to an FBO. */\n saved: SavedStencil | null\n}\n\nconst _fboPatchByGl = new WeakMap<WebGLRenderingContext, FboPatchState>()\n\nexport function resetFboPatchState(gl: WebGLRenderingContext): void {\n const fbo = _fboPatchByGl.get(gl)\n if (fbo) {\n fbo.current = null\n fbo.saved = null\n }\n}\n\n/**\n * Patches gl.bindFramebuffer once per GL context so that the stencil test is\n * disabled while Phaser renders PostFX / RenderTextures into off-screen FBOs.\n */\nexport function ensureFboPatch(gl: WebGLRenderingContext): void {\n if (_fboPatchByGl.has(gl)) return\n\n const state: FboPatchState = { current: null, saved: null }\n _fboPatchByGl.set(gl, state)\n\n const origBind = gl.bindFramebuffer.bind(gl)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(gl as any).bindFramebuffer = (target: number, fb: WebGLFramebuffer | null) => {\n const wasMain = state.current === null\n const willBeMain = fb === null\n const enteringOffscreen = wasMain && !willBeMain\n const leavingOffscreen = !wasMain && willBeMain\n\n if (enteringOffscreen && (gl.getParameter(gl.STENCIL_TEST) as boolean)) {\n state.saved = {\n func: gl.getParameter(gl.STENCIL_FUNC) as number,\n ref: gl.getParameter(gl.STENCIL_REF) as number,\n valueMask: gl.getParameter(gl.STENCIL_VALUE_MASK) as number,\n fail: gl.getParameter(gl.STENCIL_FAIL) as number,\n zfail: gl.getParameter(gl.STENCIL_PASS_DEPTH_FAIL) as number,\n zpass: gl.getParameter(gl.STENCIL_PASS_DEPTH_PASS) as number,\n writeMask: gl.getParameter(gl.STENCIL_WRITEMASK) as number,\n }\n gl.disable(gl.STENCIL_TEST)\n }\n\n origBind(target, fb)\n state.current = fb\n\n if (leavingOffscreen && state.saved) {\n gl.enable(gl.STENCIL_TEST)\n gl.stencilFunc(state.saved.func, state.saved.ref, state.saved.valueMask)\n gl.stencilOp(state.saved.fail, state.saved.zfail, state.saved.zpass)\n gl.stencilMask(state.saved.writeMask)\n state.saved = null\n }\n }\n}\n","import type * as Phaser from 'phaser'\nimport type { BitmapMaskState, MaskState } from './stencil-clip-state'\nimport type { StencilBitmapTexture } from './stencil-clip-types'\n\nexport type GLPolyfilled = WebGLRenderingContext & {\n bindVertexArray(vao: WebGLVertexArrayObject | null): void\n}\n\ntype GLWrapperLike = {\n state?: {\n bindings?: {\n activeTexture?: number\n arrayBuffer?: unknown\n program?: unknown\n }\n vao?: unknown\n }\n update?(state: unknown, force?: boolean, vaoLast?: boolean): void\n updateBindingsActiveTexture?(state: unknown, force?: boolean): void\n}\n\ntype SavedPhaserGLState = {\n activeTexture: number | undefined\n arrayBuffer: unknown\n program: unknown\n vao: unknown\n}\n\nfunction savePhaserGLState(renderer: Phaser.Renderer.WebGL.WebGLRenderer): SavedPhaserGLState {\n const glWrapper = renderer.glWrapper as unknown as GLWrapperLike\n\n // Phaser 4 caches GL bindings; raw gl.* restoration is not enough.\n return {\n activeTexture: glWrapper.state?.bindings?.activeTexture,\n arrayBuffer: glWrapper.state?.bindings?.arrayBuffer ?? null,\n program: glWrapper.state?.bindings?.program ?? null,\n vao: glWrapper.state?.vao ?? null,\n }\n}\n\nfunction restorePhaserGLState(\n renderer: Phaser.Renderer.WebGL.WebGLRenderer,\n saved: SavedPhaserGLState,\n fallbackActiveTexture: number\n): void {\n const glWrapper = renderer.glWrapper as unknown as GLWrapperLike\n\n if (glWrapper.update) {\n // Keep Phaser's cached state aligned after this custom stencil shader pass.\n glWrapper.update(\n {\n bindings: {\n activeTexture: saved.activeTexture ?? fallbackActiveTexture,\n arrayBuffer: saved.arrayBuffer,\n program: saved.program,\n },\n vao: saved.vao,\n },\n true\n )\n return\n }\n\n glWrapper.updateBindingsActiveTexture?.(\n {\n bindings: {\n activeTexture: saved.activeTexture ?? fallbackActiveTexture,\n },\n },\n true\n )\n}\n\nconst ROUND_RECT_VERT_SRC = `\nattribute vec2 a_ndc;\nattribute vec2 a_loc;\nvarying vec2 v_loc;\nvoid main(){gl_Position=vec4(a_ndc,0.,1.);v_loc=a_loc;}\n`\n\nconst ROUND_RECT_FRAG_SRC = `\nprecision mediump float;\nvarying vec2 v_loc;\nuniform vec2 u_halfSize;\nuniform vec4 u_radii;\nfloat sdRoundedBox(vec2 p,vec2 b,vec4 r){\n r.xy=p.x>0.?r.yz:r.xw;\n r.x =p.y>0.?r.y :r.x;\n vec2 q=abs(p)-b+r.x;\n return length(max(q,0.))+min(max(q.x,q.y),0.)-r.x;\n}\nvoid main(){\n if(sdRoundedBox(v_loc,u_halfSize,u_radii)>0.)discard;\n gl_FragColor=vec4(0.);\n}\n`\n\nconst BITMAP_VERT_SRC = `\nattribute vec2 a_ndc;\nattribute vec2 a_uv;\nvarying vec2 v_uv;\nvoid main(){gl_Position=vec4(a_ndc,0.,1.);v_uv=a_uv;}\n`\n\nconst BITMAP_FRAG_SRC = `\nprecision mediump float;\nvarying vec2 v_uv;\nuniform sampler2D u_texture;\nuniform float u_alphaThreshold;\nuniform float u_invertAlpha;\nvoid main(){\n float a=texture2D(u_texture,v_uv).a;\n bool keep=u_invertAlpha>0.5 ? a<u_alphaThreshold : a>=u_alphaThreshold;\n if(!keep)discard;\n gl_FragColor=vec4(0.);\n}\n`\n\nconst _roundRectProgByGl = new WeakMap<WebGLRenderingContext, WebGLProgram>()\nconst _bitmapProgByGl = new WeakMap<WebGLRenderingContext, WebGLProgram>()\n\nfunction createProgram(gl: WebGLRenderingContext, vertSrc: string, fragSrc: string): WebGLProgram {\n const vs = gl.createShader(gl.VERTEX_SHADER) as WebGLShader\n gl.shaderSource(vs, vertSrc)\n gl.compileShader(vs)\n\n const fs = gl.createShader(gl.FRAGMENT_SHADER) as WebGLShader\n gl.shaderSource(fs, fragSrc)\n gl.compileShader(fs)\n\n const prog = gl.createProgram() as WebGLProgram\n gl.attachShader(prog, vs)\n gl.attachShader(prog, fs)\n gl.linkProgram(prog)\n\n return prog\n}\n\nfunction getRoundRectProg(gl: WebGLRenderingContext): WebGLProgram {\n let prog = _roundRectProgByGl.get(gl)\n if (prog) return prog\n\n prog = createProgram(gl, ROUND_RECT_VERT_SRC, ROUND_RECT_FRAG_SRC)\n _roundRectProgByGl.set(gl, prog)\n return prog\n}\n\nfunction getBitmapProg(gl: WebGLRenderingContext): WebGLProgram {\n let prog = _bitmapProgByGl.get(gl)\n if (prog) return prog\n\n prog = createProgram(gl, BITMAP_VERT_SRC, BITMAP_FRAG_SRC)\n _bitmapProgByGl.set(gl, prog)\n return prog\n}\n\ninterface RoundRectShaderLocs {\n ndc: number\n loc: number\n halfSize: WebGLUniformLocation | null\n radii: WebGLUniformLocation | null\n}\n\ninterface BitmapShaderLocs {\n ndc: number\n uv: number\n texture: WebGLUniformLocation | null\n alphaThreshold: WebGLUniformLocation | null\n invertAlpha: WebGLUniformLocation | null\n}\n\nconst _roundRectLocsByProg = new WeakMap<WebGLProgram, RoundRectShaderLocs>()\nconst _bitmapLocsByProg = new WeakMap<WebGLProgram, BitmapShaderLocs>()\n\nfunction getRoundRectShaderLocs(\n gl: WebGLRenderingContext,\n prog: WebGLProgram\n): RoundRectShaderLocs {\n let l = _roundRectLocsByProg.get(prog)\n if (!l) {\n l = {\n ndc: gl.getAttribLocation(prog, 'a_ndc'),\n loc: gl.getAttribLocation(prog, 'a_loc'),\n halfSize: gl.getUniformLocation(prog, 'u_halfSize'),\n radii: gl.getUniformLocation(prog, 'u_radii'),\n }\n _roundRectLocsByProg.set(prog, l)\n }\n return l\n}\n\nfunction getBitmapShaderLocs(gl: WebGLRenderingContext, prog: WebGLProgram): BitmapShaderLocs {\n let l = _bitmapLocsByProg.get(prog)\n if (!l) {\n l = {\n ndc: gl.getAttribLocation(prog, 'a_ndc'),\n uv: gl.getAttribLocation(prog, 'a_uv'),\n texture: gl.getUniformLocation(prog, 'u_texture'),\n alphaThreshold: gl.getUniformLocation(prog, 'u_alphaThreshold'),\n invertAlpha: gl.getUniformLocation(prog, 'u_invertAlpha'),\n }\n _bitmapLocsByProg.set(prog, l)\n }\n return l\n}\n\nconst STRIDE = 16\n\nfunction drawRoundRectMaskShape(\n gl: GLPolyfilled,\n scene: Phaser.Scene,\n matrix: Phaser.GameObjects.Components.TransformMatrix,\n cameraMatrix: Phaser.GameObjects.Components.TransformMatrix | undefined,\n offsetX: number,\n offsetY: number,\n w: number,\n h: number,\n logW: number,\n logH: number,\n radii: [number, number, number, number],\n vertBuf: WebGLBuffer,\n verts: Float32Array\n): void {\n const { a, b, c, d, tx, ty } = matrix\n const hw = w / 2\n const hh = h / 2\n const cx = offsetX + hw\n const cy = offsetY + hh\n\n const corners = [\n [cx - hw, cy - hh],\n [cx + hw, cy - hh],\n [cx + hw, cy + hh],\n [cx - hw, cy + hh],\n ] as const\n\n for (let i = 0; i < 4; i++) {\n const corner = corners[i] as [number, number]\n const lx = corner[0]\n const ly = corner[1]\n const wx = a * lx + c * ly + tx\n const wy = b * lx + d * ly + ty\n const sx = cameraMatrix ? cameraMatrix.getX(wx, wy) : wx\n const sy = cameraMatrix ? cameraMatrix.getY(wx, wy) : wy\n verts[i * 4 + 0] = (sx / logW) * 2 - 1\n verts[i * 4 + 1] = 1 - (sy / logH) * 2\n verts[i * 4 + 2] = lx - cx\n verts[i * 4 + 3] = ly - cy\n }\n\n const prevProg = gl.getParameter(gl.CURRENT_PROGRAM) as WebGLProgram | null\n const prevBuf = gl.getParameter(gl.ARRAY_BUFFER_BINDING) as WebGLBuffer | null\n const prevVAO = gl.getParameter(0x85b5) as WebGLVertexArrayObject | null\n const prevActiveTextureUnit = (gl.getParameter(gl.ACTIVE_TEXTURE) as number) - gl.TEXTURE0\n const renderer = scene.renderer as Phaser.Renderer.WebGL.WebGLRenderer\n const savedPhaserState = savePhaserGLState(renderer)\n\n gl.bindVertexArray(null)\n gl.bindBuffer(gl.ARRAY_BUFFER, vertBuf)\n gl.bufferSubData(gl.ARRAY_BUFFER, 0, verts)\n\n const prog = getRoundRectProg(gl)\n gl.useProgram(prog)\n\n const locs = getRoundRectShaderLocs(gl, prog)\n gl.enableVertexAttribArray(locs.ndc)\n gl.vertexAttribPointer(locs.ndc, 2, gl.FLOAT, false, STRIDE, 0)\n gl.enableVertexAttribArray(locs.loc)\n gl.vertexAttribPointer(locs.loc, 2, gl.FLOAT, false, STRIDE, 8)\n\n gl.uniform2f(locs.halfSize, hw, hh)\n gl.uniform4f(locs.radii, radii[0], radii[1], radii[2], radii[3])\n\n gl.drawArrays(gl.TRIANGLE_FAN, 0, 4)\n\n gl.disableVertexAttribArray(locs.ndc)\n gl.disableVertexAttribArray(locs.loc)\n\n gl.bindBuffer(gl.ARRAY_BUFFER, prevBuf)\n gl.useProgram(prevProg)\n gl.bindVertexArray(prevVAO)\n restorePhaserGLState(renderer, savedPhaserState, prevActiveTextureUnit)\n}\n\ntype BitmapFrameInfo = {\n glTexture: Phaser.Renderer.WebGL.Wrappers.WebGLTextureWrapper\n width: number\n height: number\n u0: number\n v0: number\n u1: number\n v1: number\n}\n\nfunction isTextureFrame(value: StencilBitmapTexture): value is Phaser.Textures.Frame {\n return typeof value === 'object' && value !== null && 'glTexture' in value && 'u0' in value\n}\n\nfunction resolveBitmapFrame(scene: Phaser.Scene, source: BitmapMaskState): BitmapFrameInfo | null {\n const frame = isTextureFrame(source.texture)\n ? source.texture\n : typeof source.texture === 'string'\n ? scene.textures.getFrame(source.texture, source.frame)\n : source.texture.get(source.frame)\n\n if (!frame?.glTexture?.webGLTexture) return null\n\n return {\n glTexture: frame.glTexture,\n width: source.width ?? frame.cutWidth ?? frame.realWidth,\n height: source.height ?? frame.cutHeight ?? frame.realHeight,\n u0: frame.u0,\n v0: frame.v0,\n u1: frame.u1,\n v1: frame.v1,\n }\n}\n\nfunction drawBitmapMaskShape(\n gl: GLPolyfilled,\n scene: Phaser.Scene,\n matrix: Phaser.GameObjects.Components.TransformMatrix,\n cameraMatrix: Phaser.GameObjects.Components.TransformMatrix | undefined,\n source: BitmapMaskState,\n frameInfo: BitmapFrameInfo,\n logW: number,\n logH: number,\n vertBuf: WebGLBuffer,\n verts: Float32Array\n): void {\n const { a, b, c, d, tx, ty } = matrix\n const x0 = source.offsetX\n const y0 = source.offsetY\n const x1 = x0 + frameInfo.width\n const y1 = y0 + frameInfo.height\n\n const corners = [\n [x0, y0, frameInfo.u0, frameInfo.v0],\n [x1, y0, frameInfo.u1, frameInfo.v0],\n [x1, y1, frameInfo.u1, frameInfo.v1],\n [x0, y1, frameInfo.u0, frameInfo.v1],\n ] as const\n\n for (let i = 0; i < 4; i++) {\n const corner = corners[i] as (typeof corners)[number]\n const lx = corner[0]\n const ly = corner[1]\n const wx = a * lx + c * ly + tx\n const wy = b * lx + d * ly + ty\n const sx = cameraMatrix ? cameraMatrix.getX(wx, wy) : wx\n const sy = cameraMatrix ? cameraMatrix.getY(wx, wy) : wy\n verts[i * 4 + 0] = (sx / logW) * 2 - 1\n verts[i * 4 + 1] = 1 - (sy / logH) * 2\n verts[i * 4 + 2] = corner[2]\n verts[i * 4 + 3] = corner[3]\n }\n\n const prevProg = gl.getParameter(gl.CURRENT_PROGRAM) as WebGLProgram | null\n const prevBuf = gl.getParameter(gl.ARRAY_BUFFER_BINDING) as WebGLBuffer | null\n const prevVAO = gl.getParameter(0x85b5) as WebGLVertexArrayObject | null\n const prevActiveTextureUnit = (gl.getParameter(gl.ACTIVE_TEXTURE) as number) - gl.TEXTURE0\n const renderer = scene.renderer as Phaser.Renderer.WebGL.WebGLRenderer\n const savedPhaserState = savePhaserGLState(renderer)\n\n gl.bindVertexArray(null)\n gl.bindBuffer(gl.ARRAY_BUFFER, vertBuf)\n gl.bufferSubData(gl.ARRAY_BUFFER, 0, verts)\n\n const prog = getBitmapProg(gl)\n gl.useProgram(prog)\n\n const locs = getBitmapShaderLocs(gl, prog)\n gl.enableVertexAttribArray(locs.ndc)\n gl.vertexAttribPointer(locs.ndc, 2, gl.FLOAT, false, STRIDE, 0)\n gl.enableVertexAttribArray(locs.uv)\n gl.vertexAttribPointer(locs.uv, 2, gl.FLOAT, false, STRIDE, 8)\n\n const textureUnits = renderer.glTextureUnits\n const prevTexture = textureUnits.units[0] ?? null\n\n textureUnits.bind(frameInfo.glTexture, 0)\n gl.uniform1i(locs.texture, 0)\n gl.uniform1f(locs.alphaThreshold, source.alphaThreshold)\n gl.uniform1f(locs.invertAlpha, source.invertAlpha ? 1 : 0)\n\n gl.drawArrays(gl.TRIANGLE_FAN, 0, 4)\n\n gl.disableVertexAttribArray(locs.ndc)\n gl.disableVertexAttribArray(locs.uv)\n\n textureUnits.bind(prevTexture, 0)\n renderer.glWrapper.updateBindingsActiveTexture({\n bindings: {\n activeTexture: prevActiveTextureUnit,\n },\n })\n gl.bindBuffer(gl.ARRAY_BUFFER, prevBuf)\n gl.useProgram(prevProg)\n gl.bindVertexArray(prevVAO)\n restorePhaserGLState(renderer, savedPhaserState, prevActiveTextureUnit)\n}\n\nexport function drawMaskShape(\n gl: GLPolyfilled,\n scene: Phaser.Scene,\n matrix: Phaser.GameObjects.Components.TransformMatrix,\n cameraMatrix: Phaser.GameObjects.Components.TransformMatrix | undefined,\n source: MaskState,\n logW: number,\n logH: number,\n vertBuf: WebGLBuffer,\n verts: Float32Array\n): void {\n if (source.kind === 'bitmap') {\n const frameInfo = resolveBitmapFrame(scene, source)\n if (!frameInfo) return\n drawBitmapMaskShape(\n gl,\n scene,\n matrix,\n cameraMatrix,\n source,\n frameInfo,\n logW,\n logH,\n vertBuf,\n verts\n )\n return\n }\n\n drawRoundRectMaskShape(\n gl,\n scene,\n matrix,\n cameraMatrix,\n source.offsetX,\n source.offsetY,\n source.width,\n source.height,\n logW,\n logH,\n source.radii,\n vertBuf,\n verts\n )\n}\n","import type {\n StencilBitmapClipSource,\n StencilBitmapTexture,\n StencilClipSource,\n StencilClipUpdate,\n StencilCornerRadius,\n StencilRoundRectClipSource,\n} from './stencil-clip-types'\n\nexport type RoundRectMaskState = {\n kind: 'roundRect'\n width: number\n height: number\n offsetX: number\n offsetY: number\n radii: [number, number, number, number]\n}\n\nexport type BitmapMaskState = {\n kind: 'bitmap'\n texture: StencilBitmapTexture\n frame: string | number | undefined\n width: number | undefined\n height: number | undefined\n offsetX: number\n offsetY: number\n alphaThreshold: number\n invertAlpha: boolean\n}\n\nexport type MaskState = RoundRectMaskState | BitmapMaskState\n\nfunction resolveRadii(\n r: number | StencilCornerRadius | undefined\n): [number, number, number, number] {\n if (!r) return [0, 0, 0, 0]\n if (typeof r === 'number') return [r, r, r, r]\n return [r.tl ?? 0, r.tr ?? 0, r.br ?? 0, r.bl ?? 0]\n}\n\n/** Returns true when a source/update selects the bitmap mask renderer. */\nexport function isBitmapStencilClipSource(\n source: StencilClipUpdate\n): source is Partial<StencilBitmapClipSource> & { kind: 'bitmap' } {\n return source.kind === 'bitmap'\n}\n\nfunction toRoundRectState(source: StencilRoundRectClipSource): RoundRectMaskState {\n return {\n kind: 'roundRect',\n width: source.width,\n height: source.height,\n offsetX: source.offsetX ?? 0,\n offsetY: source.offsetY ?? 0,\n radii: source.kind === 'rect' ? [0, 0, 0, 0] : resolveRadii(source.cornerRadius),\n }\n}\n\nfunction toBitmapState(source: StencilBitmapClipSource): BitmapMaskState {\n return {\n kind: 'bitmap',\n texture: source.texture,\n frame: source.frame,\n width: source.width,\n height: source.height,\n offsetX: source.offsetX ?? 0,\n offsetY: source.offsetY ?? 0,\n alphaThreshold: source.alphaThreshold ?? 0.5,\n invertAlpha: source.invertAlpha ?? false,\n }\n}\n\nexport function toMaskState(source: StencilClipSource): MaskState {\n return isBitmapStencilClipSource(source) ? toBitmapState(source) : toRoundRectState(source)\n}\n\nexport function mergeMaskState(current: MaskState, update: StencilClipUpdate): MaskState {\n if (isBitmapStencilClipSource(update)) {\n if (current.kind !== 'bitmap' || update.texture !== undefined) {\n return toBitmapState(update as StencilBitmapClipSource)\n }\n\n return {\n kind: 'bitmap',\n texture: current.texture,\n frame: update.frame !== undefined ? update.frame : current.frame,\n width: update.width !== undefined ? update.width : current.width,\n height: update.height !== undefined ? update.height : current.height,\n offsetX: update.offsetX !== undefined ? update.offsetX : current.offsetX,\n offsetY: update.offsetY !== undefined ? update.offsetY : current.offsetY,\n alphaThreshold:\n update.alphaThreshold !== undefined ? update.alphaThreshold : current.alphaThreshold,\n invertAlpha: update.invertAlpha !== undefined ? update.invertAlpha : current.invertAlpha,\n }\n }\n\n if (current.kind === 'bitmap' && update.kind === undefined) {\n const bitmapUpdate = update as Partial<StencilBitmapClipSource>\n return {\n kind: 'bitmap',\n texture: current.texture,\n frame: bitmapUpdate.frame !== undefined ? bitmapUpdate.frame : current.frame,\n width: bitmapUpdate.width !== undefined ? bitmapUpdate.width : current.width,\n height: bitmapUpdate.height !== undefined ? bitmapUpdate.height : current.height,\n offsetX: bitmapUpdate.offsetX !== undefined ? bitmapUpdate.offsetX : current.offsetX,\n offsetY: bitmapUpdate.offsetY !== undefined ? bitmapUpdate.offsetY : current.offsetY,\n alphaThreshold:\n bitmapUpdate.alphaThreshold !== undefined\n ? bitmapUpdate.alphaThreshold\n : current.alphaThreshold,\n invertAlpha:\n bitmapUpdate.invertAlpha !== undefined ? bitmapUpdate.invertAlpha : current.invertAlpha,\n }\n }\n\n if (current.kind === 'bitmap') {\n return toRoundRectState(update as StencilRoundRectClipSource)\n }\n\n const roundUpdate = update as Partial<StencilRoundRectClipSource>\n return {\n kind: 'roundRect',\n width: roundUpdate.width !== undefined ? roundUpdate.width : current.width,\n height: roundUpdate.height !== undefined ? roundUpdate.height : current.height,\n offsetX: roundUpdate.offsetX !== undefined ? roundUpdate.offsetX : current.offsetX,\n offsetY: roundUpdate.offsetY !== undefined ? roundUpdate.offsetY : current.offsetY,\n radii:\n roundUpdate.kind === 'rect'\n ? [0, 0, 0, 0]\n : 'cornerRadius' in roundUpdate\n ? resolveRadii(roundUpdate.cornerRadius)\n : current.radii,\n }\n}\n","/**\n * WebGL stencil-buffer clip for Phaser 4 Containers.\n *\n * Supports arbitrary nesting via the INCR/DECR model: each clip level\n * increments the stencil on enter and decrements on exit, so child clips are\n * automatically intersected with their parent clips at the hardware level.\n *\n * Shape variants:\n * - Plain rectangle (cornerRadius omitted or 0)\n * - Rounded rectangle (uniform radius or per-corner object)\n *\n * A single SDF-based shader handles both variants. For plain rectangles\n * u_radii is vec4(0) and the `discard` branch never fires — no overhead\n * compared to a rectangle-only shader.\n *\n * Transforms (translate, scale, rotation) are fully supported: the quad\n * corners are transformed through `container.getWorldTransformMatrix()` at\n * render time, so no per-layout world-position tracking is needed.\n */\nimport * as Phaser from 'phaser'\nimport { ensurePrerenderReset, getDepth } from './stencil-clip-depth'\nimport { ensureFboPatch, resetFboPatchState } from './stencil-clip-fbo-bridge'\nimport { drawMaskShape, type GLPolyfilled } from './stencil-clip-renderer'\nimport { mergeMaskState, toMaskState } from './stencil-clip-state'\nimport type { StencilClipHandle, StencilClipSource } from './stencil-clip-types'\n\nexport { isBitmapStencilClipSource } from './stencil-clip-state'\nexport type {\n StencilBitmapClipSource,\n StencilBitmapTexture,\n StencilClipHandle,\n StencilClipShape,\n StencilClipSource,\n StencilClipUpdate,\n StencilCornerRadius,\n StencilRoundRectClipSource,\n} from './stencil-clip-types'\n\n// ── Internal Phaser type helpers ──────────────────────────────────────────────\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ContainerRenderFn = (renderer: any, go: any, ...rest: any[]) => void\n\ntype RNManager = { finishBatch(): void }\ntype CameraLike = {\n getViewMatrix(forceComposite?: boolean): Phaser.GameObjects.Components.TransformMatrix\n}\n\ntype DrawingContextLike = {\n camera?: CameraLike\n useCanvas?: boolean\n}\n\ntype GLWrapperLike = {\n state?: {\n bindings?: {\n arrayBuffer?: unknown\n }\n }\n updateBindingsArrayBuffer?(state: unknown, force?: boolean): void\n}\n\n// ── Attachment symbol ─────────────────────────────────────────────────────────\n\nconst STENCIL_HANDLE = Symbol('stencilClipHandle')\n\n/** Returns the active stencil clip handle attached to a container, if any. */\nexport function getStencilClipHandle(\n container: Phaser.GameObjects.Container\n): StencilClipHandle | undefined {\n return (container as unknown as { [STENCIL_HANDLE]?: StencilClipHandle })[STENCIL_HANDLE]\n}\n\n/** Removes any active stencil clip from a container. */\nexport function clearStencilClip(container: Phaser.GameObjects.Container): void {\n getStencilClipHandle(container)?.destroy()\n}\n\n// ── Public API ────────────────────────────────────────────────────────────────\n\n/**\n * Applies a WebGL stencil-buffer clip to a Phaser 4 Container.\n *\n * The clip rectangle is expressed in the container's **local coordinate\n * space**. `offsetX`/`offsetY` mark the top-left corner (default 0/0), so\n * a container whose visual area starts at its local origin can be clipped with\n * `applyStencilClip(container, { width, height })`.\n *\n * **Nesting** is handled transparently: each clip level occupies one stencil\n * value (0 = no clip, 1 = depth 0, 2 = depth 1, …). Child clips are always\n * the intersection of their own shape and all ancestor shapes.\n *\n * **Transforms** (translate, scale, rotation) are re-evaluated from\n * `container.getWorldTransformMatrix()` on every frame, so animated or\n * scroll-driven containers clip correctly without any manual update call.\n *\n * If a stencil clip is already attached to the container, calling this\n * function again calls `handle.update(shape)` on the existing handle and\n * returns it.\n *\n * @param container - The container to clip.\n * @param source - Clip source in the container's local coordinate space.\n * @returns A handle to modify dimensions / corner radii or remove the clip.\n */\nexport function applyStencilClip(\n container: Phaser.GameObjects.Container,\n source: StencilClipSource\n): StencilClipHandle {\n const obj = container as unknown as {\n _renderSteps: Array<ContainerRenderFn | undefined>\n addRenderStep(fn: ContainerRenderFn, index?: number): Phaser.GameObjects.Container\n [STENCIL_HANDLE]?: StencilClipHandle\n }\n\n // Re-use existing handle if already attached.\n if (obj[STENCIL_HANDLE]) {\n obj[STENCIL_HANDLE].update(source)\n return obj[STENCIL_HANDLE]\n }\n\n // No-op for non-WebGL renderers.\n if (container.scene.renderer.type !== Phaser.WEBGL) {\n return { update() {}, destroy() {} }\n }\n\n const renderer = container.scene.renderer as Phaser.Renderer.WebGL.WebGLRenderer\n const gl = renderer.gl as GLPolyfilled\n const glWrapper = renderer.glWrapper as unknown as GLWrapperLike\n\n ensurePrerenderReset(gl, container.scene.game, resetFboPatchState)\n ensureFboPatch(gl)\n\n // Persistent vertex buffer: 4 vertices × 4 floats × 4 bytes = 64 bytes.\n const previousArrayBuffer = glWrapper.state?.bindings?.arrayBuffer ?? null\n const vertBuf = gl.createBuffer() as WebGLBuffer\n gl.bindBuffer(gl.ARRAY_BUFFER, vertBuf)\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(16), gl.DYNAMIC_DRAW)\n gl.bindBuffer(gl.ARRAY_BUFFER, null)\n // Creating the buffer mutates raw GL state; restore Phaser's cached binding too.\n glWrapper.updateBindingsArrayBuffer?.(\n {\n bindings: {\n arrayBuffer: previousArrayBuffer,\n },\n },\n true\n )\n\n const verts = new Float32Array(16)\n\n let maskSource = toMaskState(source)\n let destroyed = false\n\n const wrapper: ContainerRenderFn = (\n webglRenderer,\n go,\n drawingContext,\n parentMatrix,\n renderStep = 0,\n displayList,\n displayListIndex\n ) => {\n const renderNext = () => {\n go.renderWebGLStep(\n webglRenderer,\n go,\n drawingContext,\n parentMatrix,\n renderStep + 1,\n displayList,\n displayListIndex\n )\n }\n\n if (destroyed) {\n renderNext()\n return\n }\n\n const matrix = container.getWorldTransformMatrix()\n const context = drawingContext as DrawingContextLike\n const cameraMatrix = context.camera?.getViewMatrix(!context.useCanvas)\n const rn = (webglRenderer as unknown as { renderNodes: RNManager }).renderNodes\n const depth = getDepth(gl)\n const myDepth = depth.value++\n\n const logW = webglRenderer.width as number\n const logH = webglRenderer.height as number\n\n // ── Push: write clip shape into stencil buffer ────────────────────────\n rn.finishBatch()\n\n if (myDepth === 0) gl.enable(gl.STENCIL_TEST)\n\n gl.colorMask(false, false, false, false)\n gl.stencilMask(0xff)\n // Write only where the stencil already equals myDepth (parent's level).\n gl.stencilFunc(gl.EQUAL, myDepth, 0xff)\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR)\n\n drawMaskShape(gl, container.scene, matrix, cameraMatrix, maskSource, logW, logH, vertBuf, verts)\n\n // ── Content render: test for myDepth+1, protect stencil ──────────────\n gl.colorMask(true, true, true, true)\n gl.stencilFunc(gl.EQUAL, myDepth + 1, 0xff)\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP)\n gl.stencilMask(0x00)\n\n renderNext()\n\n // ── Pop: restore parent depth via DECR ────────────────────────────────\n rn.finishBatch()\n\n gl.colorMask(false, false, false, false)\n gl.stencilMask(0xff)\n gl.stencilFunc(gl.EQUAL, myDepth + 1, 0xff)\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR)\n\n drawMaskShape(gl, container.scene, matrix, cameraMatrix, maskSource, logW, logH, vertBuf, verts)\n\n gl.colorMask(true, true, true, true)\n depth.value--\n\n if (myDepth === 0) {\n // Outermost clip: disable stencil test and lift write protection.\n gl.disable(gl.STENCIL_TEST)\n gl.stencilMask(0xff)\n } else {\n // Nested clip: restore the parent's content-render stencil state so\n // remaining siblings of this container are still clipped correctly.\n gl.stencilFunc(gl.EQUAL, myDepth, 0xff)\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP)\n gl.stencilMask(0x00)\n }\n }\n\n const handle: StencilClipHandle = {\n update(s) {\n maskSource = mergeMaskState(maskSource, s)\n },\n destroy() {\n if (destroyed) return\n destroyed = true\n gl.deleteBuffer(vertBuf)\n const index = obj._renderSteps.indexOf(wrapper)\n if (index !== -1) obj._renderSteps.splice(index, 1)\n delete obj[STENCIL_HANDLE]\n },\n }\n\n obj.addRenderStep(wrapper, 0)\n obj[STENCIL_HANDLE] = handle\n\n return handle\n}\n","/* eslint-disable @typescript-eslint/no-namespace */\nimport * as Phaser from 'phaser'\nimport {\n applyStencilClip,\n clearStencilClip,\n getStencilClipHandle,\n type StencilClipHandle,\n type StencilClipSource,\n type StencilClipUpdate,\n} from './stencil-clip'\n\ntype AnyFn = (...args: unknown[]) => unknown\n\ninterface ExtensionHandle {\n restore(): void\n}\n\nfunction addMethod<T extends object, K extends PropertyKey>(\n proto: T,\n methodName: K,\n fn: unknown\n): ExtensionHandle {\n const hadOwn = Object.prototype.hasOwnProperty.call(proto, methodName)\n const previous = (proto as Record<PropertyKey, unknown>)[methodName]\n\n if (!hadOwn) {\n ;(proto as Record<PropertyKey, unknown>)[methodName] = fn\n }\n\n return {\n restore: () => {\n if (!hadOwn) {\n delete (proto as Record<PropertyKey, unknown>)[methodName]\n } else {\n ;(proto as Record<PropertyKey, unknown>)[methodName] = previous\n }\n },\n }\n}\n\nfunction wrapMethod<T extends object, K extends keyof T & string>(\n proto: T,\n methodName: K,\n wrapper: (original: AnyFn, self: unknown, ...args: unknown[]) => unknown\n): ExtensionHandle {\n const original = proto[methodName] as unknown as AnyFn\n\n if (typeof original !== 'function') {\n return { restore() {} }\n }\n\n const wrapped: AnyFn = function (this: unknown, ...args: unknown[]) {\n return wrapper(original, this, ...args)\n }\n\n ;(proto as Record<string, unknown>)[methodName] = wrapped\n\n return {\n restore: () => {\n ;(proto as Record<string, unknown>)[methodName] = original\n },\n }\n}\n\nlet installed = false\nlet restoreHandles: ExtensionHandle[] = []\n\nfunction canCreateStencilClipSource(source: StencilClipUpdate): source is StencilClipSource {\n if (source.kind === 'bitmap') {\n return source.texture !== undefined\n }\n\n return source.width !== undefined && source.height !== undefined\n}\n\n/** Installs stencil clip helpers on Phaser.GameObjects.Container.prototype. */\nexport function installStencilClipExtension(): void {\n if (installed) return\n installed = true\n\n const proto = Phaser.GameObjects.Container.prototype as Phaser.GameObjects.Container &\n Record<string, unknown>\n\n restoreHandles.push(\n addMethod(\n proto,\n 'setStencilClip',\n function (this: Phaser.GameObjects.Container, source: StencilClipSource) {\n applyStencilClip(this, source)\n return this\n }\n )\n )\n\n restoreHandles.push(\n addMethod(\n proto,\n 'updateStencilClip',\n function (this: Phaser.GameObjects.Container, source: StencilClipUpdate) {\n const handle = getStencilClipHandle(this)\n if (handle) handle.update(source)\n else if (canCreateStencilClipSource(source)) applyStencilClip(this, source)\n return this\n }\n )\n )\n\n restoreHandles.push(\n addMethod(proto, 'clearStencilClip', function (this: Phaser.GameObjects.Container) {\n clearStencilClip(this)\n return this\n })\n )\n\n restoreHandles.push(\n addMethod(proto, 'getStencilClipHandle', function (this: Phaser.GameObjects.Container) {\n return getStencilClipHandle(this)\n })\n )\n\n restoreHandles.push(\n wrapMethod(proto, 'destroy', (original, self, ...args) => {\n clearStencilClip(self as Phaser.GameObjects.Container)\n return original.apply(self, args)\n })\n )\n}\n\n/** Restores Phaser prototypes to their previous state. Intended for tests/HMR. */\nexport function uninstallStencilClipExtension(): void {\n for (const handle of [...restoreHandles].reverse()) handle.restore()\n restoreHandles = []\n installed = false\n}\n\ndeclare global {\n namespace Phaser {\n namespace GameObjects {\n interface Container {\n setStencilClip(source: StencilClipSource): this\n updateStencilClip(source: StencilClipUpdate): this\n clearStencilClip(): this\n getStencilClipHandle(): StencilClipHandle | undefined\n }\n }\n }\n}\n","export * from './stencil-clip'\nexport * from './stencil-clip-extension'\n\nimport { installStencilClipExtension } from './stencil-clip-extension'\n\ninstallStencilClipExtension()\n"],"mappings":"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"}