{"version":3,"file":"ResizePlugin.mjs","sources":["../src/ResizePlugin.ts"],"sourcesContent":["import { extensions, ExtensionType } from 'pixijs/core';\n\nimport type { ExtensionMetadata, Renderer } from 'pixijs/core';\nimport type { IApplicationOptions } from './Application';\n\ntype ResizeableRenderer = Pick<Renderer, 'resize'>;\n\n/**\n * Middleware for for Application's resize functionality\n * @private\n * @class\n */\nexport class ResizePlugin\n{\n    /** @ignore */\n    static extension: ExtensionMetadata = ExtensionType.Application;\n\n    public static resizeTo: Window | HTMLElement;\n    public static resize: () => void;\n    public static renderer: ResizeableRenderer;\n    public static queueResize: () => void;\n    public static render: () => void;\n    private static _resizeId: number;\n    private static _resizeTo: Window | HTMLElement;\n    private static cancelResize: () => void;\n\n    /**\n     * Initialize the plugin with scope of application instance\n     * @static\n     * @private\n     * @param {object} [options] - See application options\n     */\n    static init(options?: IApplicationOptions): void\n    {\n        Object.defineProperty(this, 'resizeTo',\n            /**\n             * The HTML element or window to automatically resize the\n             * renderer's view element to match width and height.\n             * @member {Window|HTMLElement}\n             * @name resizeTo\n             * @memberof PIXI.Application#\n             */\n            {\n                set(dom: Window | HTMLElement)\n                {\n                    globalThis.removeEventListener('resize', this.queueResize);\n                    this._resizeTo = dom;\n                    if (dom)\n                    {\n                        globalThis.addEventListener('resize', this.queueResize);\n                        this.resize();\n                    }\n                },\n                get()\n                {\n                    return this._resizeTo;\n                },\n            });\n\n        /**\n         * Resize is throttled, so it's safe to call this multiple times per frame and it'll\n         * only be called once.\n         * @memberof PIXI.Application#\n         * @method queueResize\n         * @private\n         */\n        this.queueResize = (): void =>\n        {\n            if (!this._resizeTo)\n            {\n                return;\n            }\n\n            this.cancelResize();\n\n            // // Throttle resize events per raf\n            this._resizeId = requestAnimationFrame(() => this.resize());\n        };\n\n        /**\n         * Cancel the resize queue.\n         * @memberof PIXI.Application#\n         * @method cancelResize\n         * @private\n         */\n        this.cancelResize = (): void =>\n        {\n            if (this._resizeId)\n            {\n                cancelAnimationFrame(this._resizeId);\n                this._resizeId = null;\n            }\n        };\n\n        /**\n         * Execute an immediate resize on the renderer, this is not\n         * throttled and can be expensive to call many times in a row.\n         * Will resize only if `resizeTo` property is set.\n         * @memberof PIXI.Application#\n         * @method resize\n         */\n        this.resize = (): void =>\n        {\n            if (!this._resizeTo)\n            {\n                return;\n            }\n\n            // clear queue resize\n            this.cancelResize();\n\n            let width: number;\n            let height: number;\n\n            // Resize to the window\n            if (this._resizeTo === globalThis.window)\n            {\n                width = globalThis.innerWidth;\n                height = globalThis.innerHeight;\n            }\n            // Resize to other HTML entities\n            else\n            {\n                const { clientWidth, clientHeight } = this._resizeTo as HTMLElement;\n\n                width = clientWidth;\n                height = clientHeight;\n            }\n\n            this.renderer.resize(width, height);\n            this.render();\n        };\n\n        // On resize\n        this._resizeId = null;\n        this._resizeTo = null;\n        this.resizeTo = options.resizeTo || null;\n    }\n\n    /**\n     * Clean up the ticker, scoped to application\n     * @static\n     * @private\n     */\n    static destroy(): void\n    {\n        globalThis.removeEventListener('resize', this.queueResize);\n        this.cancelResize();\n        this.cancelResize = null;\n        this.queueResize = null;\n        this.resizeTo = null;\n        this.resize = null;\n    }\n}\n\nextensions.add(ResizePlugin);\n"],"names":[],"mappings":";;AAYO,MAAM,YACb,CAAA;AAAA,EAmBI,OAAO,KAAK,OACZ,EAAA;AACI,IAAO,MAAA,CAAA,cAAA,CAAe,MAAM,UAQxB,EAAA;AAAA,MACI,IAAI,GACJ,EAAA;AACI,QAAW,UAAA,CAAA,mBAAA,CAAoB,QAAU,EAAA,IAAA,CAAK,WAAW,CAAA,CAAA;AACzD,QAAA,IAAA,CAAK,SAAY,GAAA,GAAA,CAAA;AACjB,QAAA,IAAI,GACJ,EAAA;AACI,UAAW,UAAA,CAAA,gBAAA,CAAiB,QAAU,EAAA,IAAA,CAAK,WAAW,CAAA,CAAA;AACtD,UAAA,IAAA,CAAK,MAAO,EAAA,CAAA;AAAA,SAChB;AAAA,OACJ;AAAA,MACA,GACA,GAAA;AACI,QAAA,OAAO,IAAK,CAAA,SAAA,CAAA;AAAA,OAChB;AAAA,KACH,CAAA,CAAA;AASL,IAAA,IAAA,CAAK,cAAc,MACnB;AACI,MAAI,IAAA,CAAC,KAAK,SACV,EAAA;AACI,QAAA,OAAA;AAAA,OACJ;AAEA,MAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAGlB,MAAA,IAAA,CAAK,SAAY,GAAA,qBAAA,CAAsB,MAAM,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,KAC9D,CAAA;AAQA,IAAA,IAAA,CAAK,eAAe,MACpB;AACI,MAAA,IAAI,KAAK,SACT,EAAA;AACI,QAAA,oBAAA,CAAqB,KAAK,SAAS,CAAA,CAAA;AACnC,QAAA,IAAA,CAAK,SAAY,GAAA,IAAA,CAAA;AAAA,OACrB;AAAA,KACJ,CAAA;AASA,IAAA,IAAA,CAAK,SAAS,MACd;AACI,MAAI,IAAA,CAAC,KAAK,SACV,EAAA;AACI,QAAA,OAAA;AAAA,OACJ;AAGA,MAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAElB,MAAI,IAAA,KAAA,CAAA;AACJ,MAAI,IAAA,MAAA,CAAA;AAGJ,MAAI,IAAA,IAAA,CAAK,SAAc,KAAA,UAAA,CAAW,MAClC,EAAA;AACI,QAAA,KAAA,GAAQ,UAAW,CAAA,UAAA,CAAA;AACnB,QAAA,MAAA,GAAS,UAAW,CAAA,WAAA,CAAA;AAAA,OAIxB,MAAA;AACI,QAAM,MAAA,EAAE,WAAa,EAAA,YAAA,EAAA,GAAiB,IAAK,CAAA,SAAA,CAAA;AAE3C,QAAQ,KAAA,GAAA,WAAA,CAAA;AACR,QAAS,MAAA,GAAA,YAAA,CAAA;AAAA,OACb;AAEA,MAAK,IAAA,CAAA,QAAA,CAAS,MAAO,CAAA,KAAA,EAAO,MAAM,CAAA,CAAA;AAClC,MAAA,IAAA,CAAK,MAAO,EAAA,CAAA;AAAA,KAChB,CAAA;AAGA,IAAA,IAAA,CAAK,SAAY,GAAA,IAAA,CAAA;AACjB,IAAA,IAAA,CAAK,SAAY,GAAA,IAAA,CAAA;AACjB,IAAK,IAAA,CAAA,QAAA,GAAW,QAAQ,QAAY,IAAA,IAAA,CAAA;AAAA,GACxC;AAAA,EAOA,OAAO,OACP,GAAA;AACI,IAAW,UAAA,CAAA,mBAAA,CAAoB,QAAU,EAAA,IAAA,CAAK,WAAW,CAAA,CAAA;AACzD,IAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAClB,IAAA,IAAA,CAAK,YAAe,GAAA,IAAA,CAAA;AACpB,IAAA,IAAA,CAAK,WAAc,GAAA,IAAA,CAAA;AACnB,IAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAA;AAChB,IAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAA;AAAA,GAClB;AACJ,CAAA;AA1II,YAHS,CAGF,YAA+B,aAAc,CAAA,WAAA,CAAA;AA4IxD,UAAA,CAAW,IAAI,YAAY,CAAA;;;;"}