@number10/phaserjsx 4.1.0 → 4.3.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/README.md +14 -1
- package/dist/clip/index.cjs +7 -695
- package/dist/clip/index.js +1 -687
- 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-fbo-bridge.d.ts +7 -0
- package/dist/clip/stencil-clip-fbo-bridge.d.ts.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-state.d.ts +28 -0
- package/dist/clip/stencil-clip-state.d.ts.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.d.ts +3 -84
- package/dist/clip/stencil-clip.d.ts.map +1 -1
- package/dist/clip-CHmjztBQ.cjs +705 -0
- package/dist/clip-CHmjztBQ.cjs.map +1 -0
- package/dist/clip-CPufWCSD.js +668 -0
- package/dist/clip-CPufWCSD.js.map +1 -0
- package/dist/components/appliers/applyParticles.d.ts.map +1 -1
- package/dist/components/custom/Badge.d.ts +73 -0
- package/dist/components/custom/Badge.d.ts.map +1 -0
- package/dist/components/custom/Checkbox.d.ts +41 -0
- package/dist/components/custom/Checkbox.d.ts.map +1 -0
- package/dist/components/custom/DebugPanel.d.ts +30 -0
- package/dist/components/custom/DebugPanel.d.ts.map +1 -0
- package/dist/components/custom/Particles.d.ts +14 -3
- package/dist/components/custom/Particles.d.ts.map +1 -1
- package/dist/components/custom/Popover.d.ts +89 -0
- package/dist/components/custom/Popover.d.ts.map +1 -0
- package/dist/components/custom/ProgressBar.d.ts +52 -0
- package/dist/components/custom/ProgressBar.d.ts.map +1 -0
- package/dist/components/custom/Toggle.d.ts.map +1 -1
- package/dist/components/custom/index.cjs +15 -1
- package/dist/components/custom/index.d.ts +5 -0
- package/dist/components/custom/index.d.ts.map +1 -1
- package/dist/components/custom/index.js +2 -2
- package/dist/components/index.d.ts +5 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/primitives/graphics.d.ts +2 -2
- package/dist/components/primitives/particles.d.ts +14 -4
- package/dist/components/primitives/particles.d.ts.map +1 -1
- package/dist/components/primitives/tilesprite.d.ts +15 -19
- package/dist/components/primitives/tilesprite.d.ts.map +1 -1
- package/dist/{custom-Dp3yAJdU.cjs → custom-37gL0VZG.cjs} +1578 -264
- package/dist/custom-37gL0VZG.cjs.map +1 -0
- package/dist/{custom-C_w8D39m.js → custom-DMZASXll.js} +1455 -231
- package/dist/custom-DMZASXll.js.map +1 -0
- package/dist/gestures/gesture-manager.d.ts +1 -1
- package/dist/index.cjs +49 -111
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +29 -105
- package/dist/index.js.map +1 -1
- package/dist/particles/emit-zone.d.ts +34 -12
- package/dist/particles/emit-zone.d.ts.map +1 -1
- package/dist/particles/index.d.ts +1 -1
- package/dist/particles/index.d.ts.map +1 -1
- package/dist/particles/use-particles.d.ts +6 -2
- package/dist/particles/use-particles.d.ts.map +1 -1
- package/dist/theme-custom.d.ts +68 -0
- package/dist/theme-custom.d.ts.map +1 -1
- package/dist/theme-defaults.d.ts.map +1 -1
- package/package.json +3 -2
- package/dist/clip/index.cjs.map +0 -1
- package/dist/clip/index.js.map +0 -1
- package/dist/custom-C_w8D39m.js.map +0 -1
- package/dist/custom-Dp3yAJdU.cjs.map +0 -1
package/dist/theme-custom.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { AnimationConfig } from './animation/spring-physics';
|
|
2
|
+
import { BadgeSize, BadgeTone, BadgeVariant } from './components/custom/Badge';
|
|
2
3
|
import { ButtonVariant } from './components/custom/Button';
|
|
4
|
+
import { PopoverPlacement } from './components/custom/Popover';
|
|
3
5
|
import { SidebarSize, SidebarVariant } from './components/custom/Sidebar';
|
|
4
6
|
import { NestedComponentThemes, TextTheme, ViewTheme } from './theme-base';
|
|
5
7
|
import { ChildrenType } from './types';
|
|
@@ -15,6 +17,72 @@ export interface CustomComponentThemes {
|
|
|
15
17
|
size?: number;
|
|
16
18
|
innerSize?: number;
|
|
17
19
|
} & NestedComponentThemes;
|
|
20
|
+
Checkbox: {
|
|
21
|
+
color?: number;
|
|
22
|
+
checkedColor?: number;
|
|
23
|
+
indeterminateColor?: number;
|
|
24
|
+
labelStyle?: Phaser.Types.GameObjects.Text.TextStyle;
|
|
25
|
+
gap?: number;
|
|
26
|
+
size?: number;
|
|
27
|
+
disabledAlpha?: number;
|
|
28
|
+
labelPosition?: 'left' | 'right' | 'none';
|
|
29
|
+
} & NestedComponentThemes;
|
|
30
|
+
Badge: ViewTheme & {
|
|
31
|
+
tone?: BadgeTone;
|
|
32
|
+
variant?: BadgeVariant;
|
|
33
|
+
size?: BadgeSize;
|
|
34
|
+
textStyle?: Phaser.Types.GameObjects.Text.TextStyle;
|
|
35
|
+
disabledAlpha?: number;
|
|
36
|
+
dotSize?: number;
|
|
37
|
+
maxCount?: number;
|
|
38
|
+
} & NestedComponentThemes;
|
|
39
|
+
Tag: ViewTheme & {
|
|
40
|
+
tone?: BadgeTone;
|
|
41
|
+
variant?: BadgeVariant;
|
|
42
|
+
size?: BadgeSize;
|
|
43
|
+
textStyle?: Phaser.Types.GameObjects.Text.TextStyle;
|
|
44
|
+
disabledAlpha?: number;
|
|
45
|
+
closeSize?: number;
|
|
46
|
+
} & NestedComponentThemes;
|
|
47
|
+
Popover: ViewTheme & {
|
|
48
|
+
placement?: PopoverPlacement;
|
|
49
|
+
offset?: number;
|
|
50
|
+
depth?: number;
|
|
51
|
+
closeOnOutside?: boolean;
|
|
52
|
+
closeOnEscape?: boolean;
|
|
53
|
+
contentWidth?: number;
|
|
54
|
+
contentHeight?: number;
|
|
55
|
+
viewportPadding?: number;
|
|
56
|
+
} & NestedComponentThemes;
|
|
57
|
+
ContextMenu: ViewTheme & {
|
|
58
|
+
width?: number;
|
|
59
|
+
itemHeight?: number;
|
|
60
|
+
itemGap?: number;
|
|
61
|
+
itemPadding?: ViewTheme['padding'];
|
|
62
|
+
itemCornerRadius?: number;
|
|
63
|
+
textStyle?: Phaser.Types.GameObjects.Text.TextStyle;
|
|
64
|
+
disabledTextColor?: string;
|
|
65
|
+
dangerTextColor?: string;
|
|
66
|
+
dangerBackgroundColor?: number;
|
|
67
|
+
} & NestedComponentThemes;
|
|
68
|
+
ProgressBar: ViewTheme & {
|
|
69
|
+
orientation?: 'horizontal' | 'vertical';
|
|
70
|
+
labelPosition?: 'none' | 'inside' | 'top' | 'bottom' | 'left' | 'right';
|
|
71
|
+
trackColor?: number;
|
|
72
|
+
fillColor?: number;
|
|
73
|
+
borderColor?: number;
|
|
74
|
+
borderWidth?: number;
|
|
75
|
+
labelStyle?: Phaser.Types.GameObjects.Text.TextStyle;
|
|
76
|
+
disabledAlpha?: number;
|
|
77
|
+
gap?: number;
|
|
78
|
+
formatValue?: (props: {
|
|
79
|
+
value: number;
|
|
80
|
+
min: number;
|
|
81
|
+
max: number;
|
|
82
|
+
ratio: number;
|
|
83
|
+
percent: number;
|
|
84
|
+
}) => string;
|
|
85
|
+
} & NestedComponentThemes;
|
|
18
86
|
ScrollSlider: {
|
|
19
87
|
borderColor?: number;
|
|
20
88
|
trackColor?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-custom.d.ts","sourceRoot":"","sources":["../src/theme-custom.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theme-custom.d.ts","sourceRoot":"","sources":["../src/theme-custom.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-defaults.d.ts","sourceRoot":"","sources":["../src/theme-defaults.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAG3E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"theme-defaults.d.ts","sourceRoot":"","sources":["../src/theme-defaults.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAG3E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,gBAAgB,CAAA;AAqlBvB;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAAwC,CAAA;AAEnE;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,GAAE,UAAwB,EACpC,IAAI,GAAE,OAAO,GAAG,MAAgB,GAC/B,KAAK,CAGP"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@number10/phaserjsx",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Declarative Phaser 4 + UI renderer core library",
|
|
6
6
|
"author": "Michael Rieck (Michael--) <mr@number10.de>",
|
|
@@ -130,6 +130,7 @@
|
|
|
130
130
|
"test:coverage": "vitest run --coverage",
|
|
131
131
|
"lint": "eslint .",
|
|
132
132
|
"format": "prettier --write .",
|
|
133
|
-
"typecheck": "tsc --noEmit"
|
|
133
|
+
"typecheck": "tsc --noEmit",
|
|
134
|
+
"spell": "cspell \"**/*.{ts,tsx,js,mjs,cjs,json,md,yml,yaml,css,html}\""
|
|
134
135
|
}
|
|
135
136
|
}
|
package/dist/clip/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../../src/clip/stencil-clip.ts","../../src/clip/stencil-clip-extension.ts","../../src/clip/index.ts"],"sourcesContent":["/**\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'\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 }\n\ntype GLPolyfilled = WebGLRenderingContext & {\n bindVertexArray(vao: WebGLVertexArrayObject | null): void\n}\n\n// ── Public API types ──────────────────────────────────────────────────────────\n\n/** Per-corner radius specification (values in local/CSS units). */\nexport type StencilCornerRadius = {\n tl?: number\n tr?: number\n bl?: number\n br?: number\n}\n\n/** Describes a rounded-rectangle clip in the container's local coordinate space. */\nexport interface StencilRoundRectClipSource {\n /**\n * Clip source kind.\n * Omit for backwards-compatible `applyStencilClip(container, { width, height })` calls.\n */\n kind?: 'rect' | 'roundRect'\n /** Width of the clip rect in local units. */\n width: number\n /** Height of the clip rect in local units. */\n height: number\n /**\n * X coordinate of the top-left corner in local space.\n * Defaults to 0 (the container's local origin).\n */\n offsetX?: number\n /**\n * Y coordinate of the top-left corner in local space.\n * Defaults to 0 (the container's local origin).\n */\n offsetY?: number\n /**\n * Corner radii in local units.\n * A single number applies to all four corners uniformly.\n * An object sets each corner individually; missing corners default to 0.\n */\n cornerRadius?: number | StencilCornerRadius\n}\n\n/** Backwards-compatible alias for the original rounded-rectangle shape API. */\nexport type StencilClipShape = StencilRoundRectClipSource\n\n/** Texture reference accepted by bitmap stencil clips. */\nexport type StencilBitmapTexture = string | Phaser.Textures.Texture | Phaser.Textures.Frame\n\n/** Describes a bitmap alpha clip in the container's local coordinate space. */\nexport interface StencilBitmapClipSource {\n /** Selects the texture-alpha mask renderer. */\n kind: 'bitmap'\n /** Texture key, Phaser texture, or Phaser frame to sample for mask alpha. */\n texture: StencilBitmapTexture\n /** Optional frame name/index when `texture` is a key or Texture. */\n frame?: string | number\n /**\n * Width of the bitmap mask in local units.\n * Defaults to the selected frame's pixel width.\n */\n width?: number\n /**\n * Height of the bitmap mask in local units.\n * Defaults to the selected frame's pixel height.\n */\n height?: number\n /** X coordinate of the top-left corner in local space. Defaults to 0. */\n offsetX?: number\n /** Y coordinate of the top-left corner in local space. Defaults to 0. */\n offsetY?: number\n /** Minimum sampled alpha required to write the stencil. Defaults to 0.5. */\n alphaThreshold?: number\n /** Inverts the alpha test, clipping inside transparent pixels. Defaults to false. */\n invertAlpha?: boolean\n}\n\n/** Any mask source supported by the stencil clip renderer. */\nexport type StencilClipSource = StencilRoundRectClipSource | StencilBitmapClipSource\n\n/** Partial source updates accepted by an existing clip handle. */\nexport type StencilClipUpdate =\n | Partial<StencilRoundRectClipSource>\n | Partial<StencilBitmapClipSource>\n | StencilClipSource\n\n/** Handle returned by {@link applyStencilClip} to update or remove the clip. */\nexport interface StencilClipHandle {\n /**\n * Updates the clip source. Changes take effect on the next rendered frame.\n * @param source - Partial overrides merged with the current source, or a new source.\n */\n update(source: StencilClipUpdate): void\n /** Removes the clip and restores the container's original render step. */\n destroy(): void\n}\n\n// ── Per-GL-context stencil depth counter ─────────────────────────────────────\n\n/**\n * Shared depth counter per GL context.\n * Incremented before each clip's INCR pass, decremented after the DECR pass.\n * Reset to 0 at the start of every frame via a `prerender` hook.\n */\nconst _depthByGl = new WeakMap<WebGLRenderingContext, { value: number }>()\n\nfunction 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\nconst _prerenderHooked = new WeakSet<Phaser.Game>()\n\n/**\n * Registers a per-frame `prerender` listener that resets the depth counter.\n * Registered at most once per Phaser.Game instance.\n */\nfunction ensurePrerenderReset(gl: WebGLRenderingContext, game: Phaser.Game): 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 // Safety reset: rendering should start each frame on the main framebuffer.\n const fbo = _fboPatchByGl.get(gl)\n if (fbo) {\n fbo.current = null\n fbo.saved = null\n }\n })\n}\n\n// ── FBO / PostFX stencil-state bridge ────────────────────────────────────────\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\n/**\n * Patches `gl.bindFramebuffer` once per GL context so that the stencil test\n * is automatically disabled when Phaser switches to an off-screen FBO (for\n * PostFX / RenderTexture rendering) and restored when switching back.\n *\n * Without this, a PostFX child rendered inside a stencil-clipped container\n * would be invisible: the FBO's stencil buffer starts at 0 while the active\n * stencil test requires `EQUAL(myDepth + 1)`, causing every fragment to fail.\n *\n * The patch is installed once per GL context and remains active for the\n * lifetime of the renderer. It is a no-op when no stencil clip is active.\n */\nfunction 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 // First FBO entry while stencil is active: save full state and disable.\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 // Back to main framebuffer: restore the stencil state.\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\n// ── SDF stencil mask shader ───────────────────────────────────────────────────\n\n/**\n * Vertex attributes:\n * a_ndc vec2 — NDC clip-space position (CPU-computed from world transform)\n * a_loc vec2 — position relative to the clip rect's center (for SDF)\n *\n * All four corners are pre-transformed on the CPU so the vertex shader is a\n * pure pass-through. This correctly handles translation, scale, and rotation\n * without a matrix uniform.\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\n/**\n * SDF rounded-rectangle fragment shader.\n *\n * sdRoundedBox uses the IQ per-corner-radius technique:\n * r.xy = p.x > 0 ? r.yz : r.xw (right → tr/br, left → tl/bl)\n * r.x = p.y > 0 ? r.y : r.x (bottom or top within that pair)\n *\n * u_radii layout: (tl, tr, br, bl).\n *\n * For plain rectangles u_radii = vec4(0.0) and sdRoundedBox returns ≤ 0 for\n * all fragments inside the quad, so `discard` is never executed.\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\n/**\n * Returns (or lazily creates) the SDF stencil shader program for a GL context.\n * @param gl - The WebGL context.\n * @returns Compiled and linked 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\n/** Cached attribute and uniform locations resolved once per shader program. */\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\n/**\n * Returns (or resolves and caches) the attribute/uniform locations for a program.\n * @param gl - The WebGL context.\n * @param prog - The shader program.\n * @returns Cached locations.\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\n// ── Corner radius helpers ─────────────────────────────────────────────────────\n\n/**\n * Resolves the `cornerRadius` field to `[tl, tr, br, bl]` order matching the\n * `u_radii` vec4 uniform layout.\n * @param r - Raw corner radius value from the clip shape.\n * @returns Tuple `[tl, tr, br, bl]`.\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\ntype RoundRectMaskState = {\n kind: 'roundRect'\n width: number\n height: number\n offsetX: number\n offsetY: number\n radii: [number, number, number, number]\n}\n\ntype 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\ntype MaskState = RoundRectMaskState | BitmapMaskState\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\nfunction toMaskState(source: StencilClipSource): MaskState {\n return isBitmapStencilClipSource(source) ? toBitmapState(source) : toRoundRectState(source)\n}\n\nfunction 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// ── Mask quad drawing ─────────────────────────────────────────────────────────\n\n/** Stride in bytes: 4 floats × 4 bytes. */\nconst STRIDE = 16\n\n/**\n * Transforms the four clip-rect corners through the container's world matrix,\n * uploads them to the vertex buffer, and draws the quad into the stencil.\n *\n * Vertex buffer layout (16 floats / 4 vertices, TRIANGLE_FAN, TL→TR→BR→BL):\n * [ndcX, ndcY, locX, locY] × 4\n * where locX/Y is the position relative to the clip rect's center (for SDF).\n *\n * The three GL states tracked by Phaser's `WebGLGlobalWrapper`\n * (`CURRENT_PROGRAM`, `ARRAY_BUFFER_BINDING`, `VERTEX_ARRAY_BINDING`) are\n * saved and restored so its internal caches stay consistent.\n *\n * @param gl - The (VAO-polyfilled) WebGL context.\n * @param matrix - Container's current world transform matrix.\n * @param offsetX - Top-left X of the clip rect in local space.\n * @param offsetY - Top-left Y of the clip rect in local space.\n * @param w - Clip rect width in local units.\n * @param h - Clip rect height in local units.\n * @param logW - Logical game width (`renderer.width`).\n * @param logH - Logical game height (`renderer.height`).\n * @param radii - Per-corner radii tuple `[tl, tr, br, bl]`.\n * @param vertBuf - Persistent WebGLBuffer (64 bytes, DYNAMIC_DRAW).\n * @param verts - Reusable Float32Array(16) to avoid per-frame allocation.\n */\nfunction drawRoundRectMaskShape(\n gl: GLPolyfilled,\n matrix: Phaser.GameObjects.Components.TransformMatrix,\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 // Center of the clip rect in local space.\n const cx = offsetX + hw\n const cy = offsetY + hh\n\n // The four corners in local space (TL, TR, BR, BL).\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 // World position via affine transform.\n const wx = a * lx + c * ly + tx\n const wy = b * lx + d * ly + ty\n // NDC conversion using logical renderer dimensions.\n verts[i * 4 + 0] = (wx / logW) * 2 - 1\n verts[i * 4 + 1] = 1 - (wy / logH) * 2\n // SDF local position: relative to the clip rect's center.\n verts[i * 4 + 2] = lx - cx\n verts[i * 4 + 3] = ly - cy\n }\n\n // Save the three Phaser-tracked GL states.\n const prevProg = gl.getParameter(gl.CURRENT_PROGRAM) as WebGLProgram | null\n const prevBuf = gl.getParameter(gl.ARRAY_BUFFER_BINDING) as WebGLBuffer | null\n // VERTEX_ARRAY_BINDING (0x85B5): hardcoded because Phaser's OES polyfill\n // does NOT add this constant to the gl object.\n const prevVAO = gl.getParameter(0x85b5) as WebGLVertexArrayObject | null\n\n // Unbind Phaser's VAO so our attrib setup goes into the default VAO.\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 // Restore Phaser-tracked state.\n gl.bindBuffer(gl.ARRAY_BUFFER, prevBuf)\n gl.useProgram(prevProg)\n gl.bindVertexArray(prevVAO)\n}\n\ntype BitmapFrameInfo = {\n webGLTexture: WebGLTexture\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 webGLTexture: frame.glTexture.webGLTexture,\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 matrix: Phaser.GameObjects.Components.TransformMatrix,\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 verts[i * 4 + 0] = (wx / logW) * 2 - 1\n verts[i * 4 + 1] = 1 - (wy / 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 prevActiveTexture = gl.getParameter(gl.ACTIVE_TEXTURE) as number\n\n gl.activeTexture(gl.TEXTURE0)\n const prevTexture = gl.getParameter(gl.TEXTURE_BINDING_2D) as WebGLTexture | null\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 gl.bindTexture(gl.TEXTURE_2D, frameInfo.webGLTexture)\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 gl.bindTexture(gl.TEXTURE_2D, prevTexture)\n gl.activeTexture(prevActiveTexture)\n gl.bindBuffer(gl.ARRAY_BUFFER, prevBuf)\n gl.useProgram(prevProg)\n gl.bindVertexArray(prevVAO)\n}\n\nfunction drawMaskShape(\n gl: GLPolyfilled,\n scene: Phaser.Scene,\n matrix: Phaser.GameObjects.Components.TransformMatrix,\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(gl, matrix, source, frameInfo, logW, logH, vertBuf, verts)\n return\n }\n\n drawRoundRectMaskShape(\n gl,\n matrix,\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\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\n ensurePrerenderReset(gl, container.scene.game)\n ensureFboPatch(gl)\n\n // Persistent vertex buffer: 4 vertices × 4 floats × 4 bytes = 64 bytes.\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\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 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, 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, 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoIA,IAAM,6BAAa,IAAI,QAAkD;AAEzE,SAAS,SAAS,IAA8C;CAC9D,IAAI,IAAI,WAAW,IAAI,EAAE;CACzB,IAAI,CAAC,GAAG;EACN,IAAI,EAAE,OAAO,EAAE;EACf,WAAW,IAAI,IAAI,CAAC;CACtB;CACA,OAAO;AACT;AAEA,IAAM,mCAAmB,IAAI,QAAqB;;;;;AAMlD,SAAS,qBAAqB,IAA2B,MAAyB;CAChF,IAAI,iBAAiB,IAAI,IAAI,GAAG;CAChC,iBAAiB,IAAI,IAAI;CACzB,KAAK,OAAO,GAAG,mBAAmB;EAChC,MAAM,IAAI,WAAW,IAAI,EAAE;EAC3B,IAAI,GAAG,EAAE,QAAQ;EAEjB,MAAM,MAAM,cAAc,IAAI,EAAE;EAChC,IAAI,KAAK;GACP,IAAI,UAAU;GACd,IAAI,QAAQ;EACd;CACF,CAAC;AACH;AAyBA,IAAM,gCAAgB,IAAI,QAA8C;;;;;;;;;;;;;AAcxE,SAAS,eAAe,IAAiC;CACvD,IAAI,cAAc,IAAI,EAAE,GAAG;CAE3B,MAAM,QAAuB;EAAE,SAAS;EAAM,OAAO;CAAK;CAC1D,cAAc,IAAI,IAAI,KAAK;CAE3B,MAAM,WAAW,GAAG,gBAAgB,KAAK,EAAE;CAE1C,GAAY,mBAAmB,QAAgB,OAAgC;EAC9E,MAAM,UAAU,MAAM,YAAY;EAClC,MAAM,aAAa,OAAO;EAC1B,MAAM,oBAAoB,WAAW,CAAC;EACtC,MAAM,mBAAmB,CAAC,WAAW;EAErC,IAAI,qBAAsB,GAAG,aAAa,GAAG,YAAY,GAAe;GAEtE,MAAM,QAAQ;IACZ,MAAM,GAAG,aAAa,GAAG,YAAY;IACrC,KAAK,GAAG,aAAa,GAAG,WAAW;IACnC,WAAW,GAAG,aAAa,GAAG,kBAAkB;IAChD,MAAM,GAAG,aAAa,GAAG,YAAY;IACrC,OAAO,GAAG,aAAa,GAAG,uBAAuB;IACjD,OAAO,GAAG,aAAa,GAAG,uBAAuB;IACjD,WAAW,GAAG,aAAa,GAAG,iBAAiB;GACjD;GACA,GAAG,QAAQ,GAAG,YAAY;EAC5B;EAEA,SAAS,QAAQ,EAAE;EACnB,MAAM,UAAU;EAEhB,IAAI,oBAAoB,MAAM,OAAO;GAEnC,GAAG,OAAO,GAAG,YAAY;GACzB,GAAG,YAAY,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,MAAM,MAAM,SAAS;GACvE,GAAG,UAAU,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,KAAK;GACnE,GAAG,YAAY,MAAM,MAAM,SAAS;GACpC,MAAM,QAAQ;EAChB;CACF;AACF;;;;;;;;;;AAaA,IAAM,sBAAsB;;;;;;;;;;;;;;;;;;AAmB5B,IAAM,sBAAsB;;;;;;;;;;;;;;;;AAiB5B,IAAM,kBAAkB;;;;;;AAOxB,IAAM,kBAAkB;;;;;;;;;;;;;AAcxB,IAAM,qCAAqB,IAAI,QAA6C;AAC5E,IAAM,kCAAkB,IAAI,QAA6C;;;;;;AAOzE,SAAS,cAAc,IAA2B,SAAiB,SAA+B;CAChG,MAAM,KAAK,GAAG,aAAa,GAAG,aAAa;CAC3C,GAAG,aAAa,IAAI,OAAO;CAC3B,GAAG,cAAc,EAAE;CAEnB,MAAM,KAAK,GAAG,aAAa,GAAG,eAAe;CAC7C,GAAG,aAAa,IAAI,OAAO;CAC3B,GAAG,cAAc,EAAE;CAEnB,MAAM,OAAO,GAAG,cAAc;CAC9B,GAAG,aAAa,MAAM,EAAE;CACxB,GAAG,aAAa,MAAM,EAAE;CACxB,GAAG,YAAY,IAAI;CAEnB,OAAO;AACT;AAEA,SAAS,iBAAiB,IAAyC;CACjE,IAAI,OAAO,mBAAmB,IAAI,EAAE;CACpC,IAAI,MAAM,OAAO;CAEjB,OAAO,cAAc,IAAI,qBAAqB,mBAAmB;CACjE,mBAAmB,IAAI,IAAI,IAAI;CAC/B,OAAO;AACT;AAEA,SAAS,cAAc,IAAyC;CAC9D,IAAI,OAAO,gBAAgB,IAAI,EAAE;CACjC,IAAI,MAAM,OAAO;CAEjB,OAAO,cAAc,IAAI,iBAAiB,eAAe;CACzD,gBAAgB,IAAI,IAAI,IAAI;CAC5B,OAAO;AACT;AAkBA,IAAM,uCAAuB,IAAI,QAA2C;AAC5E,IAAM,oCAAoB,IAAI,QAAwC;;;;;;;AAQtE,SAAS,uBACP,IACA,MACqB;CACrB,IAAI,IAAI,qBAAqB,IAAI,IAAI;CACrC,IAAI,CAAC,GAAG;EACN,IAAI;GACF,KAAK,GAAG,kBAAkB,MAAM,OAAO;GACvC,KAAK,GAAG,kBAAkB,MAAM,OAAO;GACvC,UAAU,GAAG,mBAAmB,MAAM,YAAY;GAClD,OAAO,GAAG,mBAAmB,MAAM,SAAS;EAC9C;EACA,qBAAqB,IAAI,MAAM,CAAC;CAClC;CACA,OAAO;AACT;AAEA,SAAS,oBAAoB,IAA2B,MAAsC;CAC5F,IAAI,IAAI,kBAAkB,IAAI,IAAI;CAClC,IAAI,CAAC,GAAG;EACN,IAAI;GACF,KAAK,GAAG,kBAAkB,MAAM,OAAO;GACvC,IAAI,GAAG,kBAAkB,MAAM,MAAM;GACrC,SAAS,GAAG,mBAAmB,MAAM,WAAW;GAChD,gBAAgB,GAAG,mBAAmB,MAAM,kBAAkB;GAC9D,aAAa,GAAG,mBAAmB,MAAM,eAAe;EAC1D;EACA,kBAAkB,IAAI,MAAM,CAAC;CAC/B;CACA,OAAO;AACT;;;;;;;AAUA,SAAS,aACP,GACkC;CAClC,IAAI,CAAC,GAAG,OAAO;EAAC;EAAG;EAAG;EAAG;CAAC;CAC1B,IAAI,OAAO,MAAM,UAAU,OAAO;EAAC;EAAG;EAAG;EAAG;CAAC;CAC7C,OAAO;EAAC,EAAE,MAAM;EAAG,EAAE,MAAM;EAAG,EAAE,MAAM;EAAG,EAAE,MAAM;CAAC;AACpD;;AAGA,SAAgB,0BACd,QACiE;CACjE,OAAO,OAAO,SAAS;AACzB;AAyBA,SAAS,iBAAiB,QAAwD;CAChF,OAAO;EACL,MAAM;EACN,OAAO,OAAO;EACd,QAAQ,OAAO;EACf,SAAS,OAAO,WAAW;EAC3B,SAAS,OAAO,WAAW;EAC3B,OAAO,OAAO,SAAS,SAAS;GAAC;GAAG;GAAG;GAAG;EAAC,IAAI,aAAa,OAAO,YAAY;CACjF;AACF;AAEA,SAAS,cAAc,QAAkD;CACvE,OAAO;EACL,MAAM;EACN,SAAS,OAAO;EAChB,OAAO,OAAO;EACd,OAAO,OAAO;EACd,QAAQ,OAAO;EACf,SAAS,OAAO,WAAW;EAC3B,SAAS,OAAO,WAAW;EAC3B,gBAAgB,OAAO,kBAAkB;EACzC,aAAa,OAAO,eAAe;CACrC;AACF;AAEA,SAAS,YAAY,QAAsC;CACzD,OAAO,0BAA0B,MAAM,IAAI,cAAc,MAAM,IAAI,iBAAiB,MAAM;AAC5F;AAEA,SAAS,eAAe,SAAoB,QAAsC;CAChF,IAAI,0BAA0B,MAAM,GAAG;EACrC,IAAI,QAAQ,SAAS,YAAY,OAAO,YAAY,KAAA,GAClD,OAAO,cAAc,MAAiC;EAGxD,OAAO;GACL,MAAM;GACN,SAAS,QAAQ;GACjB,OAAO,OAAO,UAAU,KAAA,IAAY,OAAO,QAAQ,QAAQ;GAC3D,OAAO,OAAO,UAAU,KAAA,IAAY,OAAO,QAAQ,QAAQ;GAC3D,QAAQ,OAAO,WAAW,KAAA,IAAY,OAAO,SAAS,QAAQ;GAC9D,SAAS,OAAO,YAAY,KAAA,IAAY,OAAO,UAAU,QAAQ;GACjE,SAAS,OAAO,YAAY,KAAA,IAAY,OAAO,UAAU,QAAQ;GACjE,gBACE,OAAO,mBAAmB,KAAA,IAAY,OAAO,iBAAiB,QAAQ;GACxE,aAAa,OAAO,gBAAgB,KAAA,IAAY,OAAO,cAAc,QAAQ;EAC/E;CACF;CAEA,IAAI,QAAQ,SAAS,YAAY,OAAO,SAAS,KAAA,GAAW;EAC1D,MAAM,eAAe;EACrB,OAAO;GACL,MAAM;GACN,SAAS,QAAQ;GACjB,OAAO,aAAa,UAAU,KAAA,IAAY,aAAa,QAAQ,QAAQ;GACvE,OAAO,aAAa,UAAU,KAAA,IAAY,aAAa,QAAQ,QAAQ;GACvE,QAAQ,aAAa,WAAW,KAAA,IAAY,aAAa,SAAS,QAAQ;GAC1E,SAAS,aAAa,YAAY,KAAA,IAAY,aAAa,UAAU,QAAQ;GAC7E,SAAS,aAAa,YAAY,KAAA,IAAY,aAAa,UAAU,QAAQ;GAC7E,gBACE,aAAa,mBAAmB,KAAA,IAC5B,aAAa,iBACb,QAAQ;GACd,aACE,aAAa,gBAAgB,KAAA,IAAY,aAAa,cAAc,QAAQ;EAChF;CACF;CAEA,IAAI,QAAQ,SAAS,UACnB,OAAO,iBAAiB,MAAoC;CAG9D,MAAM,cAAc;CACpB,OAAO;EACL,MAAM;EACN,OAAO,YAAY,UAAU,KAAA,IAAY,YAAY,QAAQ,QAAQ;EACrE,QAAQ,YAAY,WAAW,KAAA,IAAY,YAAY,SAAS,QAAQ;EACxE,SAAS,YAAY,YAAY,KAAA,IAAY,YAAY,UAAU,QAAQ;EAC3E,SAAS,YAAY,YAAY,KAAA,IAAY,YAAY,UAAU,QAAQ;EAC3E,OACE,YAAY,SAAS,SACjB;GAAC;GAAG;GAAG;GAAG;EAAC,IACX,kBAAkB,cAChB,aAAa,YAAY,YAAY,IACrC,QAAQ;CAClB;AACF;;AAKA,IAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;AA0Bf,SAAS,uBACP,IACA,QACA,SACA,SACA,GACA,GACA,MACA,MACA,OACA,SACA,OACM;CACN,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,OAAO;CAC/B,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,IAAI;CAEf,MAAM,KAAK,UAAU;CACrB,MAAM,KAAK,UAAU;CAGrB,MAAM,UAAU;EACd,CAAC,KAAK,IAAI,KAAK,EAAE;EACjB,CAAC,KAAK,IAAI,KAAK,EAAE;EACjB,CAAC,KAAK,IAAI,KAAK,EAAE;EACjB,CAAC,KAAK,IAAI,KAAK,EAAE;CACnB;CAEA,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,MAAM,SAAS,QAAQ;EACvB,MAAM,KAAK,OAAO;EAClB,MAAM,KAAK,OAAO;EAElB,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK;EAC7B,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK;EAE7B,MAAM,IAAI,IAAI,KAAM,KAAK,OAAQ,IAAI;EACrC,MAAM,IAAI,IAAI,KAAK,IAAK,KAAK,OAAQ;EAErC,MAAM,IAAI,IAAI,KAAK,KAAK;EACxB,MAAM,IAAI,IAAI,KAAK,KAAK;CAC1B;CAGA,MAAM,WAAW,GAAG,aAAa,GAAG,eAAe;CACnD,MAAM,UAAU,GAAG,aAAa,GAAG,oBAAoB;CAGvD,MAAM,UAAU,GAAG,aAAa,KAAM;CAGtC,GAAG,gBAAgB,IAAI;CACvB,GAAG,WAAW,GAAG,cAAc,OAAO;CACtC,GAAG,cAAc,GAAG,cAAc,GAAG,KAAK;CAE1C,MAAM,OAAO,iBAAiB,EAAE;CAChC,GAAG,WAAW,IAAI;CAElB,MAAM,OAAO,uBAAuB,IAAI,IAAI;CAC5C,GAAG,wBAAwB,KAAK,GAAG;CACnC,GAAG,oBAAoB,KAAK,KAAK,GAAG,GAAG,OAAO,OAAO,QAAQ,CAAC;CAC9D,GAAG,wBAAwB,KAAK,GAAG;CACnC,GAAG,oBAAoB,KAAK,KAAK,GAAG,GAAG,OAAO,OAAO,QAAQ,CAAC;CAE9D,GAAG,UAAU,KAAK,UAAU,IAAI,EAAE;CAClC,GAAG,UAAU,KAAK,OAAO,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE;CAE/D,GAAG,WAAW,GAAG,cAAc,GAAG,CAAC;CAEnC,GAAG,yBAAyB,KAAK,GAAG;CACpC,GAAG,yBAAyB,KAAK,GAAG;CAGpC,GAAG,WAAW,GAAG,cAAc,OAAO;CACtC,GAAG,WAAW,QAAQ;CACtB,GAAG,gBAAgB,OAAO;AAC5B;AAYA,SAAS,eAAe,OAA6D;CACnF,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,eAAe,SAAS,QAAQ;AACxF;AAEA,SAAS,mBAAmB,OAAqB,QAAiD;CAChG,MAAM,QAAQ,eAAe,OAAO,OAAO,IACvC,OAAO,UACP,OAAO,OAAO,YAAY,WACxB,MAAM,SAAS,SAAS,OAAO,SAAS,OAAO,KAAK,IACpD,OAAO,QAAQ,IAAI,OAAO,KAAK;CAErC,IAAI,CAAC,OAAO,WAAW,cAAc,OAAO;CAE5C,OAAO;EACL,cAAc,MAAM,UAAU;EAC9B,OAAO,OAAO,SAAS,MAAM,YAAY,MAAM;EAC/C,QAAQ,OAAO,UAAU,MAAM,aAAa,MAAM;EAClD,IAAI,MAAM;EACV,IAAI,MAAM;EACV,IAAI,MAAM;EACV,IAAI,MAAM;CACZ;AACF;AAEA,SAAS,oBACP,IACA,QACA,QACA,WACA,MACA,MACA,SACA,OACM;CACN,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,OAAO;CAC/B,MAAM,KAAK,OAAO;CAClB,MAAM,KAAK,OAAO;CAClB,MAAM,KAAK,KAAK,UAAU;CAC1B,MAAM,KAAK,KAAK,UAAU;CAE1B,MAAM,UAAU;EACd;GAAC;GAAI;GAAI,UAAU;GAAI,UAAU;EAAE;EACnC;GAAC;GAAI;GAAI,UAAU;GAAI,UAAU;EAAE;EACnC;GAAC;GAAI;GAAI,UAAU;GAAI,UAAU;EAAE;EACnC;GAAC;GAAI;GAAI,UAAU;GAAI,UAAU;EAAE;CACrC;CAEA,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,MAAM,SAAS,QAAQ;EACvB,MAAM,KAAK,OAAO;EAClB,MAAM,KAAK,OAAO;EAClB,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK;EAC7B,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK;EAC7B,MAAM,IAAI,IAAI,KAAM,KAAK,OAAQ,IAAI;EACrC,MAAM,IAAI,IAAI,KAAK,IAAK,KAAK,OAAQ;EACrC,MAAM,IAAI,IAAI,KAAK,OAAO;EAC1B,MAAM,IAAI,IAAI,KAAK,OAAO;CAC5B;CAEA,MAAM,WAAW,GAAG,aAAa,GAAG,eAAe;CACnD,MAAM,UAAU,GAAG,aAAa,GAAG,oBAAoB;CACvD,MAAM,UAAU,GAAG,aAAa,KAAM;CACtC,MAAM,oBAAoB,GAAG,aAAa,GAAG,cAAc;CAE3D,GAAG,cAAc,GAAG,QAAQ;CAC5B,MAAM,cAAc,GAAG,aAAa,GAAG,kBAAkB;CAEzD,GAAG,gBAAgB,IAAI;CACvB,GAAG,WAAW,GAAG,cAAc,OAAO;CACtC,GAAG,cAAc,GAAG,cAAc,GAAG,KAAK;CAE1C,MAAM,OAAO,cAAc,EAAE;CAC7B,GAAG,WAAW,IAAI;CAElB,MAAM,OAAO,oBAAoB,IAAI,IAAI;CACzC,GAAG,wBAAwB,KAAK,GAAG;CACnC,GAAG,oBAAoB,KAAK,KAAK,GAAG,GAAG,OAAO,OAAO,QAAQ,CAAC;CAC9D,GAAG,wBAAwB,KAAK,EAAE;CAClC,GAAG,oBAAoB,KAAK,IAAI,GAAG,GAAG,OAAO,OAAO,QAAQ,CAAC;CAE7D,GAAG,YAAY,GAAG,YAAY,UAAU,YAAY;CACpD,GAAG,UAAU,KAAK,SAAS,CAAC;CAC5B,GAAG,UAAU,KAAK,gBAAgB,OAAO,cAAc;CACvD,GAAG,UAAU,KAAK,aAAa,OAAO,cAAc,IAAI,CAAC;CAEzD,GAAG,WAAW,GAAG,cAAc,GAAG,CAAC;CAEnC,GAAG,yBAAyB,KAAK,GAAG;CACpC,GAAG,yBAAyB,KAAK,EAAE;CAEnC,GAAG,YAAY,GAAG,YAAY,WAAW;CACzC,GAAG,cAAc,iBAAiB;CAClC,GAAG,WAAW,GAAG,cAAc,OAAO;CACtC,GAAG,WAAW,QAAQ;CACtB,GAAG,gBAAgB,OAAO;AAC5B;AAEA,SAAS,cACP,IACA,OACA,QACA,QACA,MACA,MACA,SACA,OACM;CACN,IAAI,OAAO,SAAS,UAAU;EAC5B,MAAM,YAAY,mBAAmB,OAAO,MAAM;EAClD,IAAI,CAAC,WAAW;EAChB,oBAAoB,IAAI,QAAQ,QAAQ,WAAW,MAAM,MAAM,SAAS,KAAK;EAC7E;CACF;CAEA,uBACE,IACA,QACA,OAAO,SACP,OAAO,SACP,OAAO,OACP,OAAO,QACP,MACA,MACA,OAAO,OACP,SACA,KACF;AACF;AAIA,IAAM,iBAAiB,OAAO,mBAAmB;;AAGjD,SAAgB,qBACd,WAC+B;CAC/B,OAAQ,UAAkE;AAC5E;;AAGA,SAAgB,iBAAiB,WAA+C;CAC9E,qBAAqB,SAAS,GAAG,QAAQ;AAC3C;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,SAAgB,iBACd,WACA,QACmB;CACnB,MAAM,MAAM;CAOZ,IAAI,IAAI,iBAAiB;EACvB,IAAI,gBAAgB,OAAO,MAAM;EACjC,OAAO,IAAI;CACb;CAGA,IAAI,UAAU,MAAM,SAAS,SAAS,OAAO,OAC3C,OAAO;EAAE,SAAS,CAAC;EAAG,UAAU,CAAC;CAAE;CAIrC,MAAM,KADW,UAAU,MAAM,SACb;CAEpB,qBAAqB,IAAI,UAAU,MAAM,IAAI;CAC7C,eAAe,EAAE;CAGjB,MAAM,UAAU,GAAG,aAAa;CAChC,GAAG,WAAW,GAAG,cAAc,OAAO;CACtC,GAAG,WAAW,GAAG,cAAc,IAAI,aAAa,EAAE,GAAG,GAAG,YAAY;CACpE,GAAG,WAAW,GAAG,cAAc,IAAI;CAEnC,MAAM,QAAQ,IAAI,aAAa,EAAE;CAEjC,IAAI,aAAa,YAAY,MAAM;CACnC,IAAI,YAAY;CAEhB,MAAM,WACJ,eACA,IACA,gBACA,cACA,aAAa,GACb,aACA,qBACG;EACH,MAAM,mBAAmB;GACvB,GAAG,gBACD,eACA,IACA,gBACA,cACA,aAAa,GACb,aACA,gBACF;EACF;EAEA,IAAI,WAAW;GACb,WAAW;GACX;EACF;EAEA,MAAM,SAAS,UAAU,wBAAwB;EACjD,MAAM,KAAM,cAAwD;EACpE,MAAM,QAAQ,SAAS,EAAE;EACzB,MAAM,UAAU,MAAM;EAEtB,MAAM,OAAO,cAAc;EAC3B,MAAM,OAAO,cAAc;EAG3B,GAAG,YAAY;EAEf,IAAI,YAAY,GAAG,GAAG,OAAO,GAAG,YAAY;EAE5C,GAAG,UAAU,OAAO,OAAO,OAAO,KAAK;EACvC,GAAG,YAAY,GAAI;EAEnB,GAAG,YAAY,GAAG,OAAO,SAAS,GAAI;EACtC,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;EAEtC,cAAc,IAAI,UAAU,OAAO,QAAQ,YAAY,MAAM,MAAM,SAAS,KAAK;EAGjF,GAAG,UAAU,MAAM,MAAM,MAAM,IAAI;EACnC,GAAG,YAAY,GAAG,OAAO,UAAU,GAAG,GAAI;EAC1C,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;EACtC,GAAG,YAAY,CAAI;EAEnB,WAAW;EAGX,GAAG,YAAY;EAEf,GAAG,UAAU,OAAO,OAAO,OAAO,KAAK;EACvC,GAAG,YAAY,GAAI;EACnB,GAAG,YAAY,GAAG,OAAO,UAAU,GAAG,GAAI;EAC1C,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;EAEtC,cAAc,IAAI,UAAU,OAAO,QAAQ,YAAY,MAAM,MAAM,SAAS,KAAK;EAEjF,GAAG,UAAU,MAAM,MAAM,MAAM,IAAI;EACnC,MAAM;EAEN,IAAI,YAAY,GAAG;GAEjB,GAAG,QAAQ,GAAG,YAAY;GAC1B,GAAG,YAAY,GAAI;EACrB,OAAO;GAGL,GAAG,YAAY,GAAG,OAAO,SAAS,GAAI;GACtC,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;GACtC,GAAG,YAAY,CAAI;EACrB;CACF;CAEA,MAAM,SAA4B;EAChC,OAAO,GAAG;GACR,aAAa,eAAe,YAAY,CAAC;EAC3C;EACA,UAAU;GACR,IAAI,WAAW;GACf,YAAY;GACZ,GAAG,aAAa,OAAO;GACvB,MAAM,QAAQ,IAAI,aAAa,QAAQ,OAAO;GAC9C,IAAI,UAAU,IAAI,IAAI,aAAa,OAAO,OAAO,CAAC;GAClD,OAAO,IAAI;EACb;CACF;CAEA,IAAI,cAAc,SAAS,CAAC;CAC5B,IAAI,kBAAkB;CAEtB,OAAO;AACT;;;ACz7BA,SAAS,UACP,OACA,YACA,IACiB;CACjB,MAAM,SAAS,OAAO,UAAU,eAAe,KAAK,OAAO,UAAU;CACrE,MAAM,WAAY,MAAuC;CAEzD,IAAI,CAAC,QACF,MAAwC,cAAc;CAGzD,OAAO,EACL,eAAe;EACb,IAAI,CAAC,QACH,OAAQ,MAAuC;OAE9C,MAAwC,cAAc;CAE3D,EACF;AACF;AAEA,SAAS,WACP,OACA,YACA,SACiB;CACjB,MAAM,WAAW,MAAM;CAEvB,IAAI,OAAO,aAAa,YACtB,OAAO,EAAE,UAAU,CAAC,EAAE;CAGxB,MAAM,UAAiB,SAAyB,GAAG,MAAiB;EAClE,OAAO,QAAQ,UAAU,MAAM,GAAG,IAAI;CACxC;CAEC,MAAmC,cAAc;CAElD,OAAO,EACL,eAAe;EACZ,MAAmC,cAAc;CACpD,EACF;AACF;AAEA,IAAI,YAAY;AAChB,IAAI,iBAAoC,CAAC;AAEzC,SAAS,2BAA2B,QAAwD;CAC1F,IAAI,OAAO,SAAS,UAClB,OAAO,OAAO,YAAY,KAAA;CAG5B,OAAO,OAAO,UAAU,KAAA,KAAa,OAAO,WAAW,KAAA;AACzD;;AAGA,SAAgB,8BAAoC;CAClD,IAAI,WAAW;CACf,YAAY;CAEZ,MAAM,QAAQ,OAAO,YAAY,UAAU;CAG3C,eAAe,KACb,UACE,OACA,kBACA,SAA8C,QAA2B;EACvE,iBAAiB,MAAM,MAAM;EAC7B,OAAO;CACT,CACF,CACF;CAEA,eAAe,KACb,UACE,OACA,qBACA,SAA8C,QAA2B;EACvE,MAAM,SAAS,qBAAqB,IAAI;EACxC,IAAI,QAAQ,OAAO,OAAO,MAAM;OAC3B,IAAI,2BAA2B,MAAM,GAAG,iBAAiB,MAAM,MAAM;EAC1E,OAAO;CACT,CACF,CACF;CAEA,eAAe,KACb,UAAU,OAAO,oBAAoB,WAA8C;EACjF,iBAAiB,IAAI;EACrB,OAAO;CACT,CAAC,CACH;CAEA,eAAe,KACb,UAAU,OAAO,wBAAwB,WAA8C;EACrF,OAAO,qBAAqB,IAAI;CAClC,CAAC,CACH;CAEA,eAAe,KACb,WAAW,OAAO,YAAY,UAAU,MAAM,GAAG,SAAS;EACxD,iBAAiB,IAAoC;EACrD,OAAO,SAAS,MAAM,MAAM,IAAI;CAClC,CAAC,CACH;AACF;;AAGA,SAAgB,gCAAsC;CACpD,KAAK,MAAM,UAAU,CAAC,GAAG,cAAc,EAAE,QAAQ,GAAG,OAAO,QAAQ;CACnE,iBAAiB,CAAC;CAClB,YAAY;AACd;;;AChIA,4BAA4B"}
|
package/dist/clip/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/clip/stencil-clip.ts","../../src/clip/stencil-clip-extension.ts","../../src/clip/index.ts"],"sourcesContent":["/**\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'\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 }\n\ntype GLPolyfilled = WebGLRenderingContext & {\n bindVertexArray(vao: WebGLVertexArrayObject | null): void\n}\n\n// ── Public API types ──────────────────────────────────────────────────────────\n\n/** Per-corner radius specification (values in local/CSS units). */\nexport type StencilCornerRadius = {\n tl?: number\n tr?: number\n bl?: number\n br?: number\n}\n\n/** Describes a rounded-rectangle clip in the container's local coordinate space. */\nexport interface StencilRoundRectClipSource {\n /**\n * Clip source kind.\n * Omit for backwards-compatible `applyStencilClip(container, { width, height })` calls.\n */\n kind?: 'rect' | 'roundRect'\n /** Width of the clip rect in local units. */\n width: number\n /** Height of the clip rect in local units. */\n height: number\n /**\n * X coordinate of the top-left corner in local space.\n * Defaults to 0 (the container's local origin).\n */\n offsetX?: number\n /**\n * Y coordinate of the top-left corner in local space.\n * Defaults to 0 (the container's local origin).\n */\n offsetY?: number\n /**\n * Corner radii in local units.\n * A single number applies to all four corners uniformly.\n * An object sets each corner individually; missing corners default to 0.\n */\n cornerRadius?: number | StencilCornerRadius\n}\n\n/** Backwards-compatible alias for the original rounded-rectangle shape API. */\nexport type StencilClipShape = StencilRoundRectClipSource\n\n/** Texture reference accepted by bitmap stencil clips. */\nexport type StencilBitmapTexture = string | Phaser.Textures.Texture | Phaser.Textures.Frame\n\n/** Describes a bitmap alpha clip in the container's local coordinate space. */\nexport interface StencilBitmapClipSource {\n /** Selects the texture-alpha mask renderer. */\n kind: 'bitmap'\n /** Texture key, Phaser texture, or Phaser frame to sample for mask alpha. */\n texture: StencilBitmapTexture\n /** Optional frame name/index when `texture` is a key or Texture. */\n frame?: string | number\n /**\n * Width of the bitmap mask in local units.\n * Defaults to the selected frame's pixel width.\n */\n width?: number\n /**\n * Height of the bitmap mask in local units.\n * Defaults to the selected frame's pixel height.\n */\n height?: number\n /** X coordinate of the top-left corner in local space. Defaults to 0. */\n offsetX?: number\n /** Y coordinate of the top-left corner in local space. Defaults to 0. */\n offsetY?: number\n /** Minimum sampled alpha required to write the stencil. Defaults to 0.5. */\n alphaThreshold?: number\n /** Inverts the alpha test, clipping inside transparent pixels. Defaults to false. */\n invertAlpha?: boolean\n}\n\n/** Any mask source supported by the stencil clip renderer. */\nexport type StencilClipSource = StencilRoundRectClipSource | StencilBitmapClipSource\n\n/** Partial source updates accepted by an existing clip handle. */\nexport type StencilClipUpdate =\n | Partial<StencilRoundRectClipSource>\n | Partial<StencilBitmapClipSource>\n | StencilClipSource\n\n/** Handle returned by {@link applyStencilClip} to update or remove the clip. */\nexport interface StencilClipHandle {\n /**\n * Updates the clip source. Changes take effect on the next rendered frame.\n * @param source - Partial overrides merged with the current source, or a new source.\n */\n update(source: StencilClipUpdate): void\n /** Removes the clip and restores the container's original render step. */\n destroy(): void\n}\n\n// ── Per-GL-context stencil depth counter ─────────────────────────────────────\n\n/**\n * Shared depth counter per GL context.\n * Incremented before each clip's INCR pass, decremented after the DECR pass.\n * Reset to 0 at the start of every frame via a `prerender` hook.\n */\nconst _depthByGl = new WeakMap<WebGLRenderingContext, { value: number }>()\n\nfunction 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\nconst _prerenderHooked = new WeakSet<Phaser.Game>()\n\n/**\n * Registers a per-frame `prerender` listener that resets the depth counter.\n * Registered at most once per Phaser.Game instance.\n */\nfunction ensurePrerenderReset(gl: WebGLRenderingContext, game: Phaser.Game): 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 // Safety reset: rendering should start each frame on the main framebuffer.\n const fbo = _fboPatchByGl.get(gl)\n if (fbo) {\n fbo.current = null\n fbo.saved = null\n }\n })\n}\n\n// ── FBO / PostFX stencil-state bridge ────────────────────────────────────────\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\n/**\n * Patches `gl.bindFramebuffer` once per GL context so that the stencil test\n * is automatically disabled when Phaser switches to an off-screen FBO (for\n * PostFX / RenderTexture rendering) and restored when switching back.\n *\n * Without this, a PostFX child rendered inside a stencil-clipped container\n * would be invisible: the FBO's stencil buffer starts at 0 while the active\n * stencil test requires `EQUAL(myDepth + 1)`, causing every fragment to fail.\n *\n * The patch is installed once per GL context and remains active for the\n * lifetime of the renderer. It is a no-op when no stencil clip is active.\n */\nfunction 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 // First FBO entry while stencil is active: save full state and disable.\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 // Back to main framebuffer: restore the stencil state.\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\n// ── SDF stencil mask shader ───────────────────────────────────────────────────\n\n/**\n * Vertex attributes:\n * a_ndc vec2 — NDC clip-space position (CPU-computed from world transform)\n * a_loc vec2 — position relative to the clip rect's center (for SDF)\n *\n * All four corners are pre-transformed on the CPU so the vertex shader is a\n * pure pass-through. This correctly handles translation, scale, and rotation\n * without a matrix uniform.\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\n/**\n * SDF rounded-rectangle fragment shader.\n *\n * sdRoundedBox uses the IQ per-corner-radius technique:\n * r.xy = p.x > 0 ? r.yz : r.xw (right → tr/br, left → tl/bl)\n * r.x = p.y > 0 ? r.y : r.x (bottom or top within that pair)\n *\n * u_radii layout: (tl, tr, br, bl).\n *\n * For plain rectangles u_radii = vec4(0.0) and sdRoundedBox returns ≤ 0 for\n * all fragments inside the quad, so `discard` is never executed.\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\n/**\n * Returns (or lazily creates) the SDF stencil shader program for a GL context.\n * @param gl - The WebGL context.\n * @returns Compiled and linked 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\n/** Cached attribute and uniform locations resolved once per shader program. */\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\n/**\n * Returns (or resolves and caches) the attribute/uniform locations for a program.\n * @param gl - The WebGL context.\n * @param prog - The shader program.\n * @returns Cached locations.\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\n// ── Corner radius helpers ─────────────────────────────────────────────────────\n\n/**\n * Resolves the `cornerRadius` field to `[tl, tr, br, bl]` order matching the\n * `u_radii` vec4 uniform layout.\n * @param r - Raw corner radius value from the clip shape.\n * @returns Tuple `[tl, tr, br, bl]`.\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\ntype RoundRectMaskState = {\n kind: 'roundRect'\n width: number\n height: number\n offsetX: number\n offsetY: number\n radii: [number, number, number, number]\n}\n\ntype 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\ntype MaskState = RoundRectMaskState | BitmapMaskState\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\nfunction toMaskState(source: StencilClipSource): MaskState {\n return isBitmapStencilClipSource(source) ? toBitmapState(source) : toRoundRectState(source)\n}\n\nfunction 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// ── Mask quad drawing ─────────────────────────────────────────────────────────\n\n/** Stride in bytes: 4 floats × 4 bytes. */\nconst STRIDE = 16\n\n/**\n * Transforms the four clip-rect corners through the container's world matrix,\n * uploads them to the vertex buffer, and draws the quad into the stencil.\n *\n * Vertex buffer layout (16 floats / 4 vertices, TRIANGLE_FAN, TL→TR→BR→BL):\n * [ndcX, ndcY, locX, locY] × 4\n * where locX/Y is the position relative to the clip rect's center (for SDF).\n *\n * The three GL states tracked by Phaser's `WebGLGlobalWrapper`\n * (`CURRENT_PROGRAM`, `ARRAY_BUFFER_BINDING`, `VERTEX_ARRAY_BINDING`) are\n * saved and restored so its internal caches stay consistent.\n *\n * @param gl - The (VAO-polyfilled) WebGL context.\n * @param matrix - Container's current world transform matrix.\n * @param offsetX - Top-left X of the clip rect in local space.\n * @param offsetY - Top-left Y of the clip rect in local space.\n * @param w - Clip rect width in local units.\n * @param h - Clip rect height in local units.\n * @param logW - Logical game width (`renderer.width`).\n * @param logH - Logical game height (`renderer.height`).\n * @param radii - Per-corner radii tuple `[tl, tr, br, bl]`.\n * @param vertBuf - Persistent WebGLBuffer (64 bytes, DYNAMIC_DRAW).\n * @param verts - Reusable Float32Array(16) to avoid per-frame allocation.\n */\nfunction drawRoundRectMaskShape(\n gl: GLPolyfilled,\n matrix: Phaser.GameObjects.Components.TransformMatrix,\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 // Center of the clip rect in local space.\n const cx = offsetX + hw\n const cy = offsetY + hh\n\n // The four corners in local space (TL, TR, BR, BL).\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 // World position via affine transform.\n const wx = a * lx + c * ly + tx\n const wy = b * lx + d * ly + ty\n // NDC conversion using logical renderer dimensions.\n verts[i * 4 + 0] = (wx / logW) * 2 - 1\n verts[i * 4 + 1] = 1 - (wy / logH) * 2\n // SDF local position: relative to the clip rect's center.\n verts[i * 4 + 2] = lx - cx\n verts[i * 4 + 3] = ly - cy\n }\n\n // Save the three Phaser-tracked GL states.\n const prevProg = gl.getParameter(gl.CURRENT_PROGRAM) as WebGLProgram | null\n const prevBuf = gl.getParameter(gl.ARRAY_BUFFER_BINDING) as WebGLBuffer | null\n // VERTEX_ARRAY_BINDING (0x85B5): hardcoded because Phaser's OES polyfill\n // does NOT add this constant to the gl object.\n const prevVAO = gl.getParameter(0x85b5) as WebGLVertexArrayObject | null\n\n // Unbind Phaser's VAO so our attrib setup goes into the default VAO.\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 // Restore Phaser-tracked state.\n gl.bindBuffer(gl.ARRAY_BUFFER, prevBuf)\n gl.useProgram(prevProg)\n gl.bindVertexArray(prevVAO)\n}\n\ntype BitmapFrameInfo = {\n webGLTexture: WebGLTexture\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 webGLTexture: frame.glTexture.webGLTexture,\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 matrix: Phaser.GameObjects.Components.TransformMatrix,\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 verts[i * 4 + 0] = (wx / logW) * 2 - 1\n verts[i * 4 + 1] = 1 - (wy / 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 prevActiveTexture = gl.getParameter(gl.ACTIVE_TEXTURE) as number\n\n gl.activeTexture(gl.TEXTURE0)\n const prevTexture = gl.getParameter(gl.TEXTURE_BINDING_2D) as WebGLTexture | null\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 gl.bindTexture(gl.TEXTURE_2D, frameInfo.webGLTexture)\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 gl.bindTexture(gl.TEXTURE_2D, prevTexture)\n gl.activeTexture(prevActiveTexture)\n gl.bindBuffer(gl.ARRAY_BUFFER, prevBuf)\n gl.useProgram(prevProg)\n gl.bindVertexArray(prevVAO)\n}\n\nfunction drawMaskShape(\n gl: GLPolyfilled,\n scene: Phaser.Scene,\n matrix: Phaser.GameObjects.Components.TransformMatrix,\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(gl, matrix, source, frameInfo, logW, logH, vertBuf, verts)\n return\n }\n\n drawRoundRectMaskShape(\n gl,\n matrix,\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\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\n ensurePrerenderReset(gl, container.scene.game)\n ensureFboPatch(gl)\n\n // Persistent vertex buffer: 4 vertices × 4 floats × 4 bytes = 64 bytes.\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\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 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, 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, 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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"}
|