{"version":3,"file":"EventSystem.mjs","sources":["../../src/events/EventSystem.ts"],"sourcesContent":["import { ExtensionType } from '../extensions/Extensions';\nimport { EventBoundary } from './EventBoundary';\nimport { EventsTicker } from './EventTicker';\nimport { FederatedPointerEvent } from './FederatedPointerEvent';\nimport { FederatedWheelEvent } from './FederatedWheelEvent';\n\nimport type { ExtensionMetadata } from '../extensions/Extensions';\nimport type { PointData } from '../maths/point/PointData';\nimport type { System } from '../rendering/renderers/shared/system/System';\nimport type { Renderer } from '../rendering/renderers/types';\nimport type { PixiTouch } from './FederatedEvent';\nimport type { EventMode } from './FederatedEventTarget';\nimport type { FederatedMouseEvent } from './FederatedMouseEvent';\n\nconst MOUSE_POINTER_ID = 1;\nconst TOUCH_TO_POINTER: Record<string, string> = {\n    touchstart: 'pointerdown',\n    touchend: 'pointerup',\n    touchendoutside: 'pointerupoutside',\n    touchmove: 'pointermove',\n    touchcancel: 'pointercancel',\n};\n\n/** @ignore */\nexport interface EventSystemOptions\n{\n    /**\n     * The default event mode mode for all display objects.\n     * (included in the **pixi.js** and **pixi.js-legacy** bundle), otherwise it will be ignored.\n     */\n    eventMode?: EventMode;\n\n    /**\n     * The event features that are enabled by the EventSystem\n     * (included in the **pixi.js** and **pixi.js-legacy** bundle), otherwise it will be ignored.\n     * @example\n     * const app = new Application({\n     *   view: canvas,\n     *   events: {\n     *     move: true,\n     *     globalMove: false,\n     *     click: true,\n     *     wheel: true,\n     *   },\n     * });\n     */\n    eventFeatures?: Partial<EventSystemFeatures>\n}\n\n/**\n * The event features that are enabled by the EventSystem\n * (included in the **pixi.js** and **pixi.js-legacy** bundle), otherwise it will be ignored.\n * @since 7.2.0\n * @memberof events\n */\nexport interface EventSystemFeatures\n{\n    /**\n     * Enables pointer events associated with pointer movement:\n     * - `pointermove` / `mousemove` / `touchmove`\n     * - `pointerout` / `mouseout`\n     * - `pointerover` / `mouseover`\n     */\n    move: boolean;\n    // eslint-disable-next-line jsdoc/multiline-blocks\n    /**\n     * Enables global pointer move events:\n     * - `globalpointermove`\n     * - `globalmousemove`\n     * - `globaltouchemove`\n     */\n    globalMove: boolean;\n    /**\n     * Enables pointer events associated with clicking:\n     * - `pointerup` / `mouseup` / `touchend` / 'rightup'\n     * - `pointerupoutside` / `mouseupoutside` / `touchendoutside` / 'rightupoutside'\n     * - `pointerdown` / 'mousedown' / `touchstart` / 'rightdown'\n     * - `click` / `tap`\n     */\n    click: boolean;\n    /** - Enables wheel events. */\n    wheel: boolean;\n}\n\n/**\n * The system for handling UI events.\n * @memberof events\n */\nexport class EventSystem implements System<EventSystemOptions>\n{\n    /** @ignore */\n    public static extension: ExtensionMetadata = {\n        name: 'events',\n        type: [\n            ExtensionType.WebGLSystem,\n            ExtensionType.CanvasSystem,\n            ExtensionType.WebGPUSystem,\n        ],\n        priority: -1,\n    };\n\n    /**\n     * The event features that are enabled by the EventSystem\n     * (included in the **pixi.js** and **pixi.js-legacy** bundle), otherwise it will be ignored.\n     * @since 7.2.0\n     */\n    public static defaultEventFeatures: EventSystemFeatures = {\n        /** Enables pointer events associated with pointer movement. */\n        move: true,\n        /** Enables global pointer move events. */\n        globalMove: true,\n        /** Enables pointer events associated with clicking. */\n        click: true,\n        /** Enables wheel events. */\n        wheel: true,\n    };\n\n    private static _defaultEventMode: EventMode;\n\n    /**\n     * The default interaction mode for all display objects.\n     * @see Container.eventMode\n     * @type {EventMode}\n     * @readonly\n     * @since 7.2.0\n     */\n    public static get defaultEventMode()\n    {\n        return this._defaultEventMode;\n    }\n\n    /**\n     * The {@link EventBoundary} for the stage.\n     *\n     * The {@link EventBoundary#rootTarget rootTarget} of this root boundary is automatically set to\n     * the last rendered object before any event processing is initiated. This means the main scene\n     * needs to be rendered atleast once before UI events will start propagating.\n     *\n     * The root boundary should only be changed during initialization. Otherwise, any state held by the\n     * event boundary may be lost (like hovered & pressed Containers).\n     */\n    public readonly rootBoundary: EventBoundary;\n\n    /** Does the device support touch events https://www.w3.org/TR/touch-events/ */\n    public readonly supportsTouchEvents = 'ontouchstart' in globalThis;\n\n    /** Does the device support pointer events https://www.w3.org/Submission/pointer-events/ */\n    public readonly supportsPointerEvents = !!globalThis.PointerEvent;\n\n    /**\n     * Should default browser actions automatically be prevented.\n     * Does not apply to pointer events for backwards compatibility\n     * preventDefault on pointer events stops mouse events from firing\n     * Thus, for every pointer event, there will always be either a mouse of touch event alongside it.\n     * @default true\n     */\n    public autoPreventDefault: boolean;\n\n    /**\n     * Dictionary of how different cursor modes are handled. Strings are handled as CSS cursor\n     * values, objects are handled as dictionaries of CSS values for {@code domElement},\n     * and functions are called instead of changing the CSS.\n     * Default CSS cursor values are provided for 'default' and 'pointer' modes.\n     */\n    public cursorStyles: Record<string, string | ((mode: string) => void) | CSSStyleDeclaration>;\n\n    /**\n     * The DOM element to which the root event listeners are bound. This is automatically set to\n     * the renderer's {@link Renderer#view view}.\n     */\n    public domElement: HTMLElement = null;\n\n    /** The resolution used to convert between the DOM client space into world space. */\n    public resolution = 1;\n\n    /** The renderer managing this {@link EventSystem}. */\n    public renderer: Renderer;\n\n    /**\n     * The event features that are enabled by the EventSystem\n     * (included in the **pixi.js** and **pixi.js-legacy** bundle), otherwise it will be ignored.\n     * @since 7.2.0\n     * @example\n     * const app = new Application()\n     * app.renderer.events.features.globalMove = false\n     *\n     * // to override all features use Object.assign\n     * Object.assign(app.renderer.events.features, {\n     *  move: false,\n     *  globalMove: false,\n     *  click: false,\n     *  wheel: false,\n     * })\n     */\n    public readonly features: EventSystemFeatures;\n\n    private _currentCursor: string;\n    private readonly _rootPointerEvent: FederatedPointerEvent;\n    private readonly _rootWheelEvent: FederatedWheelEvent;\n    private _eventsAdded: boolean;\n\n    /**\n     * @param {Renderer} renderer\n     */\n    constructor(renderer: Renderer)\n    {\n        this.renderer = renderer;\n        this.rootBoundary = new EventBoundary(null);\n        EventsTicker.init(this);\n\n        this.autoPreventDefault = true;\n        this._eventsAdded = false;\n\n        this._rootPointerEvent = new FederatedPointerEvent(null);\n        this._rootWheelEvent = new FederatedWheelEvent(null);\n\n        this.cursorStyles = {\n            default: 'inherit',\n            pointer: 'pointer',\n        };\n\n        this.features = new Proxy({ ...EventSystem.defaultEventFeatures }, {\n            set: (target, key, value) =>\n            {\n                if (key === 'globalMove')\n                {\n                    this.rootBoundary.enableGlobalMoveEvents = value;\n                }\n                target[key as keyof EventSystemFeatures] = value;\n\n                return true;\n            }\n        });\n\n        this._onPointerDown = this._onPointerDown.bind(this);\n        this._onPointerMove = this._onPointerMove.bind(this);\n        this._onPointerUp = this._onPointerUp.bind(this);\n        this._onPointerOverOut = this._onPointerOverOut.bind(this);\n        this.onWheel = this.onWheel.bind(this);\n    }\n\n    /**\n     * Runner init called, view is available at this point.\n     * @ignore\n     */\n    public init(options: EventSystemOptions): void\n    {\n        const { canvas, resolution } = this.renderer;\n\n        this.setTargetElement(canvas as HTMLCanvasElement);\n        this.resolution = resolution;\n        EventSystem._defaultEventMode = options.eventMode ?? 'passive';\n        Object.assign(this.features, options.eventFeatures ?? {});\n        this.rootBoundary.enableGlobalMoveEvents = this.features.globalMove;\n    }\n\n    /**\n     * Handle changing resolution.\n     * @ignore\n     */\n    public resolutionChange(resolution: number): void\n    {\n        this.resolution = resolution;\n    }\n\n    /** Destroys all event listeners and detaches the renderer. */\n    public destroy(): void\n    {\n        this.setTargetElement(null);\n        this.renderer = null;\n        this._currentCursor = null;\n    }\n\n    /**\n     * Sets the current cursor mode, handling any callbacks or CSS style changes.\n     * @param mode - cursor mode, a key from the cursorStyles dictionary\n     */\n    public setCursor(mode: string): void\n    {\n        mode = mode || 'default';\n        let applyStyles = true;\n\n        // offscreen canvas does not support setting styles, but cursor modes can be functions,\n        // in order to handle pixi rendered cursors, so we can't bail\n        if (globalThis.OffscreenCanvas && this.domElement instanceof OffscreenCanvas)\n        {\n            applyStyles = false;\n        }\n        // if the mode didn't actually change, bail early\n        if (this._currentCursor === mode)\n        {\n            return;\n        }\n        this._currentCursor = mode;\n        const style = this.cursorStyles[mode];\n\n        // only do things if there is a cursor style for it\n        if (style)\n        {\n            switch (typeof style)\n            {\n                case 'string':\n                    // string styles are handled as cursor CSS\n                    if (applyStyles)\n                    {\n                        this.domElement.style.cursor = style;\n                    }\n                    break;\n                case 'function':\n                    // functions are just called, and passed the cursor mode\n                    style(mode);\n                    break;\n                case 'object':\n                    // if it is an object, assume that it is a dictionary of CSS styles,\n                    // apply it to the interactionDOMElement\n                    if (applyStyles)\n                    {\n                        Object.assign(this.domElement.style, style);\n                    }\n                    break;\n            }\n        }\n        else if (applyStyles && typeof mode === 'string' && !Object.prototype.hasOwnProperty.call(this.cursorStyles, mode))\n        {\n            // if it mode is a string (not a Symbol) and cursorStyles doesn't have any entry\n            // for the mode, then assume that the dev wants it to be CSS for the cursor.\n            this.domElement.style.cursor = mode;\n        }\n    }\n\n    /**\n     * The global pointer event.\n     * Useful for getting the pointer position without listening to events.\n     * @since 7.2.0\n     */\n    public get pointer(): Readonly<FederatedPointerEvent>\n    {\n        return this._rootPointerEvent;\n    }\n\n    /**\n     * Event handler for pointer down events on {@link EventSystem#domElement this.domElement}.\n     * @param nativeEvent - The native mouse/pointer/touch event.\n     */\n    private _onPointerDown(nativeEvent: MouseEvent | PointerEvent | TouchEvent): void\n    {\n        if (!this.features.click) return;\n        this.rootBoundary.rootTarget = this.renderer.lastObjectRendered;\n\n        const events = this._normalizeToPointerData(nativeEvent);\n\n        /*\n         * No need to prevent default on natural pointer events, as there are no side effects\n         * Normalized events, however, may have the double mousedown/touchstart issue on the native android browser,\n         * so still need to be prevented.\n         */\n\n        // Guaranteed that there will be at least one event in events, and all events must have the same pointer type\n\n        if (this.autoPreventDefault && (events[0] as any).isNormalized)\n        {\n            const cancelable = nativeEvent.cancelable || !('cancelable' in nativeEvent);\n\n            if (cancelable)\n            {\n                nativeEvent.preventDefault();\n            }\n        }\n\n        for (let i = 0, j = events.length; i < j; i++)\n        {\n            const nativeEvent = events[i];\n            const federatedEvent = this._bootstrapEvent(this._rootPointerEvent, nativeEvent);\n\n            this.rootBoundary.mapEvent(federatedEvent);\n        }\n\n        this.setCursor(this.rootBoundary.cursor);\n    }\n\n    /**\n     * Event handler for pointer move events on on {@link EventSystem#domElement this.domElement}.\n     * @param nativeEvent - The native mouse/pointer/touch events.\n     */\n    private _onPointerMove(nativeEvent: MouseEvent | PointerEvent | TouchEvent): void\n    {\n        if (!this.features.move) return;\n        this.rootBoundary.rootTarget = this.renderer.lastObjectRendered;\n\n        EventsTicker.pointerMoved();\n\n        const normalizedEvents = this._normalizeToPointerData(nativeEvent);\n\n        for (let i = 0, j = normalizedEvents.length; i < j; i++)\n        {\n            const event = this._bootstrapEvent(this._rootPointerEvent, normalizedEvents[i]);\n\n            this.rootBoundary.mapEvent(event);\n        }\n\n        this.setCursor(this.rootBoundary.cursor);\n    }\n\n    /**\n     * Event handler for pointer up events on {@link EventSystem#domElement this.domElement}.\n     * @param nativeEvent - The native mouse/pointer/touch event.\n     */\n    private _onPointerUp(nativeEvent: MouseEvent | PointerEvent | TouchEvent): void\n    {\n        if (!this.features.click) return;\n        this.rootBoundary.rootTarget = this.renderer.lastObjectRendered;\n\n        let target = nativeEvent.target;\n\n        // if in shadow DOM use composedPath to access target\n        if (nativeEvent.composedPath && nativeEvent.composedPath().length > 0)\n        {\n            target = nativeEvent.composedPath()[0];\n        }\n\n        const outside = target !== this.domElement ? 'outside' : '';\n        const normalizedEvents = this._normalizeToPointerData(nativeEvent);\n\n        for (let i = 0, j = normalizedEvents.length; i < j; i++)\n        {\n            const event = this._bootstrapEvent(this._rootPointerEvent, normalizedEvents[i]);\n\n            event.type += outside;\n\n            this.rootBoundary.mapEvent(event);\n        }\n\n        this.setCursor(this.rootBoundary.cursor);\n    }\n\n    /**\n     * Event handler for pointer over & out events on {@link EventSystem#domElement this.domElement}.\n     * @param nativeEvent - The native mouse/pointer/touch event.\n     */\n    private _onPointerOverOut(nativeEvent: MouseEvent | PointerEvent | TouchEvent): void\n    {\n        if (!this.features.click) return;\n        this.rootBoundary.rootTarget = this.renderer.lastObjectRendered;\n\n        const normalizedEvents = this._normalizeToPointerData(nativeEvent);\n\n        for (let i = 0, j = normalizedEvents.length; i < j; i++)\n        {\n            const event = this._bootstrapEvent(this._rootPointerEvent, normalizedEvents[i]);\n\n            this.rootBoundary.mapEvent(event);\n        }\n\n        this.setCursor(this.rootBoundary.cursor);\n    }\n\n    /**\n     * Passive handler for `wheel` events on {@link EventSystem.domElement this.domElement}.\n     * @param nativeEvent - The native wheel event.\n     */\n    protected onWheel(nativeEvent: WheelEvent): void\n    {\n        if (!this.features.wheel) return;\n        const wheelEvent = this.normalizeWheelEvent(nativeEvent);\n\n        this.rootBoundary.rootTarget = this.renderer.lastObjectRendered;\n        this.rootBoundary.mapEvent(wheelEvent);\n    }\n\n    /**\n     * Sets the {@link EventSystem#domElement domElement} and binds event listeners.\n     *\n     * To deregister the current DOM element without setting a new one, pass {@code null}.\n     * @param element - The new DOM element.\n     */\n    public setTargetElement(element: HTMLElement): void\n    {\n        this._removeEvents();\n        this.domElement = element;\n        EventsTicker.domElement = element;\n        this._addEvents();\n    }\n\n    /** Register event listeners on {@link Renderer#domElement this.domElement}. */\n    private _addEvents(): void\n    {\n        if (this._eventsAdded || !this.domElement)\n        {\n            return;\n        }\n\n        EventsTicker.addTickerListener();\n\n        const style = this.domElement.style as CrossCSSStyleDeclaration;\n\n        if (style)\n        {\n            if ((globalThis.navigator as any).msPointerEnabled)\n            {\n                style.msContentZooming = 'none';\n                style.msTouchAction = 'none';\n            }\n            else if (this.supportsPointerEvents)\n            {\n                style.touchAction = 'none';\n            }\n        }\n\n        /*\n         * These events are added first, so that if pointer events are normalized, they are fired\n         * in the same order as non-normalized events. ie. pointer event 1st, mouse / touch 2nd\n         */\n        if (this.supportsPointerEvents)\n        {\n            globalThis.document.addEventListener('pointermove', this._onPointerMove, true);\n            this.domElement.addEventListener('pointerdown', this._onPointerDown, true);\n            // pointerout is fired in addition to pointerup (for touch events) and pointercancel\n            // we already handle those, so for the purposes of what we do in onPointerOut, we only\n            // care about the pointerleave event\n            this.domElement.addEventListener('pointerleave', this._onPointerOverOut, true);\n            this.domElement.addEventListener('pointerover', this._onPointerOverOut, true);\n            // globalThis.addEventListener('pointercancel', this.onPointerCancel, true);\n            globalThis.addEventListener('pointerup', this._onPointerUp, true);\n        }\n        else\n        {\n            globalThis.document.addEventListener('mousemove', this._onPointerMove, true);\n            this.domElement.addEventListener('mousedown', this._onPointerDown, true);\n            this.domElement.addEventListener('mouseout', this._onPointerOverOut, true);\n            this.domElement.addEventListener('mouseover', this._onPointerOverOut, true);\n            globalThis.addEventListener('mouseup', this._onPointerUp, true);\n\n            if (this.supportsTouchEvents)\n            {\n                this.domElement.addEventListener('touchstart', this._onPointerDown, true);\n                // this.domElement.addEventListener('touchcancel', this.onPointerCancel, true);\n                this.domElement.addEventListener('touchend', this._onPointerUp, true);\n                this.domElement.addEventListener('touchmove', this._onPointerMove, true);\n            }\n        }\n\n        this.domElement.addEventListener('wheel', this.onWheel, {\n            passive: true,\n            capture: true,\n        });\n\n        this._eventsAdded = true;\n    }\n\n    /** Unregister event listeners on {@link EventSystem#domElement this.domElement}. */\n    private _removeEvents(): void\n    {\n        if (!this._eventsAdded || !this.domElement)\n        {\n            return;\n        }\n\n        EventsTicker.removeTickerListener();\n\n        const style = this.domElement.style as CrossCSSStyleDeclaration;\n\n        // offscreen canvas does not have style, so check first\n        if (style)\n        {\n            if ((globalThis.navigator as any).msPointerEnabled)\n            {\n                style.msContentZooming = '';\n                style.msTouchAction = '';\n            }\n            else if (this.supportsPointerEvents)\n            {\n                style.touchAction = '';\n            }\n        }\n\n        if (this.supportsPointerEvents)\n        {\n            globalThis.document.removeEventListener('pointermove', this._onPointerMove, true);\n            this.domElement.removeEventListener('pointerdown', this._onPointerDown, true);\n            this.domElement.removeEventListener('pointerleave', this._onPointerOverOut, true);\n            this.domElement.removeEventListener('pointerover', this._onPointerOverOut, true);\n            // globalThis.removeEventListener('pointercancel', this.onPointerCancel, true);\n            globalThis.removeEventListener('pointerup', this._onPointerUp, true);\n        }\n        else\n        {\n            globalThis.document.removeEventListener('mousemove', this._onPointerMove, true);\n            this.domElement.removeEventListener('mousedown', this._onPointerDown, true);\n            this.domElement.removeEventListener('mouseout', this._onPointerOverOut, true);\n            this.domElement.removeEventListener('mouseover', this._onPointerOverOut, true);\n            globalThis.removeEventListener('mouseup', this._onPointerUp, true);\n\n            if (this.supportsTouchEvents)\n            {\n                this.domElement.removeEventListener('touchstart', this._onPointerDown, true);\n                // this.domElement.removeEventListener('touchcancel', this.onPointerCancel, true);\n                this.domElement.removeEventListener('touchend', this._onPointerUp, true);\n                this.domElement.removeEventListener('touchmove', this._onPointerMove, true);\n            }\n        }\n\n        this.domElement.removeEventListener('wheel', this.onWheel, true);\n\n        this.domElement = null;\n        this._eventsAdded = false;\n    }\n\n    /**\n     * Maps x and y coords from a DOM object and maps them correctly to the PixiJS view. The\n     * resulting value is stored in the point. This takes into account the fact that the DOM\n     * element could be scaled and positioned anywhere on the screen.\n     * @param  {PointData} point - the point that the result will be stored in\n     * @param  {number} x - the x coord of the position to map\n     * @param  {number} y - the y coord of the position to map\n     */\n    public mapPositionToPoint(point: PointData, x: number, y: number): void\n    {\n        const rect = this.domElement.isConnected\n            ? this.domElement.getBoundingClientRect()\n            : {\n                x: 0,\n                y: 0,\n                width: (this.domElement as any).width,\n                height: (this.domElement as any).height,\n                left: 0,\n                top: 0\n            };\n\n        const resolutionMultiplier = 1.0 / this.resolution;\n\n        point.x = ((x - rect.left) * ((this.domElement as any).width / rect.width)) * resolutionMultiplier;\n        point.y = ((y - rect.top) * ((this.domElement as any).height / rect.height)) * resolutionMultiplier;\n    }\n\n    /**\n     * Ensures that the original event object contains all data that a regular pointer event would have\n     * @param event - The original event data from a touch or mouse event\n     * @returns An array containing a single normalized pointer event, in the case of a pointer\n     *  or mouse event, or a multiple normalized pointer events if there are multiple changed touches\n     */\n    private _normalizeToPointerData(event: TouchEvent | MouseEvent | PointerEvent): PointerEvent[]\n    {\n        const normalizedEvents = [];\n\n        if (this.supportsTouchEvents && event instanceof TouchEvent)\n        {\n            for (let i = 0, li = event.changedTouches.length; i < li; i++)\n            {\n                const touch = event.changedTouches[i] as PixiTouch;\n\n                if (typeof touch.button === 'undefined') touch.button = 0;\n                if (typeof touch.buttons === 'undefined') touch.buttons = 1;\n                if (typeof touch.isPrimary === 'undefined')\n                {\n                    touch.isPrimary = event.touches.length === 1 && event.type === 'touchstart';\n                }\n                if (typeof touch.width === 'undefined') touch.width = touch.radiusX || 1;\n                if (typeof touch.height === 'undefined') touch.height = touch.radiusY || 1;\n                if (typeof touch.tiltX === 'undefined') touch.tiltX = 0;\n                if (typeof touch.tiltY === 'undefined') touch.tiltY = 0;\n                if (typeof touch.pointerType === 'undefined') touch.pointerType = 'touch';\n                if (typeof touch.pointerId === 'undefined') touch.pointerId = touch.identifier || 0;\n                if (typeof touch.pressure === 'undefined') touch.pressure = touch.force || 0.5;\n                if (typeof touch.twist === 'undefined') touch.twist = 0;\n                if (typeof touch.tangentialPressure === 'undefined') touch.tangentialPressure = 0;\n                // TODO: Remove these, as layerX/Y is not a standard, is deprecated, has uneven\n                // support, and the fill ins are not quite the same\n                // offsetX/Y might be okay, but is not the same as clientX/Y when the canvas's top\n                // left is not 0,0 on the page\n                if (typeof touch.layerX === 'undefined') touch.layerX = touch.offsetX = touch.clientX;\n                if (typeof touch.layerY === 'undefined') touch.layerY = touch.offsetY = touch.clientY;\n\n                // mark the touch as normalized, just so that we know we did it\n                touch.isNormalized = true;\n                touch.type = event.type;\n\n                normalizedEvents.push(touch);\n            }\n        }\n        // apparently PointerEvent subclasses MouseEvent, so yay\n        else if (!globalThis.MouseEvent\n            || (event instanceof MouseEvent && (!this.supportsPointerEvents || !(event instanceof globalThis.PointerEvent))))\n        {\n            const tempEvent = event as PixiPointerEvent;\n\n            if (typeof tempEvent.isPrimary === 'undefined') tempEvent.isPrimary = true;\n            if (typeof tempEvent.width === 'undefined') tempEvent.width = 1;\n            if (typeof tempEvent.height === 'undefined') tempEvent.height = 1;\n            if (typeof tempEvent.tiltX === 'undefined') tempEvent.tiltX = 0;\n            if (typeof tempEvent.tiltY === 'undefined') tempEvent.tiltY = 0;\n            if (typeof tempEvent.pointerType === 'undefined') tempEvent.pointerType = 'mouse';\n            if (typeof tempEvent.pointerId === 'undefined') tempEvent.pointerId = MOUSE_POINTER_ID;\n            if (typeof tempEvent.pressure === 'undefined') tempEvent.pressure = 0.5;\n            if (typeof tempEvent.twist === 'undefined') tempEvent.twist = 0;\n            if (typeof tempEvent.tangentialPressure === 'undefined') tempEvent.tangentialPressure = 0;\n\n            // mark the mouse event as normalized, just so that we know we did it\n            tempEvent.isNormalized = true;\n\n            normalizedEvents.push(tempEvent);\n        }\n        else\n        {\n            normalizedEvents.push(event);\n        }\n\n        return normalizedEvents as PointerEvent[];\n    }\n\n    /**\n     * Normalizes the native {@link https://w3c.github.io/uievents/#interface-wheelevent WheelEvent}.\n     *\n     * The returned {@link FederatedWheelEvent} is a shared instance. It will not persist across\n     * multiple native wheel events.\n     * @param nativeEvent - The native wheel event that occurred on the canvas.\n     * @returns A federated wheel event.\n     */\n    protected normalizeWheelEvent(nativeEvent: WheelEvent): FederatedWheelEvent\n    {\n        const event = this._rootWheelEvent;\n\n        this._transferMouseData(event, nativeEvent);\n\n        // When WheelEvent is triggered by scrolling with mouse wheel, reading WheelEvent.deltaMode\n        // before deltaX/deltaY/deltaZ on Firefox will result in WheelEvent.DOM_DELTA_LINE (1),\n        // while reading WheelEvent.deltaMode after deltaX/deltaY/deltaZ on Firefox or reading\n        // in any order on other browsers will result in WheelEvent.DOM_DELTA_PIXEL (0).\n        // Therefore, we need to read WheelEvent.deltaMode after deltaX/deltaY/deltaZ in order to\n        // make its behavior more consistent across browsers.\n        // @see https://github.com/pixijs/pixijs/issues/8970\n        event.deltaX = nativeEvent.deltaX;\n        event.deltaY = nativeEvent.deltaY;\n        event.deltaZ = nativeEvent.deltaZ;\n        event.deltaMode = nativeEvent.deltaMode;\n\n        this.mapPositionToPoint(event.screen, nativeEvent.clientX, nativeEvent.clientY);\n        event.global.copyFrom(event.screen);\n        event.offset.copyFrom(event.screen);\n\n        event.nativeEvent = nativeEvent;\n        event.type = nativeEvent.type;\n\n        return event;\n    }\n\n    /**\n     * Normalizes the `nativeEvent` into a federateed {@link FederatedPointerEvent}.\n     * @param event\n     * @param nativeEvent\n     */\n    private _bootstrapEvent(event: FederatedPointerEvent, nativeEvent: PointerEvent): FederatedPointerEvent\n    {\n        event.originalEvent = null;\n        event.nativeEvent = nativeEvent;\n\n        event.pointerId = nativeEvent.pointerId;\n        event.width = nativeEvent.width;\n        event.height = nativeEvent.height;\n        event.isPrimary = nativeEvent.isPrimary;\n        event.pointerType = nativeEvent.pointerType;\n        event.pressure = nativeEvent.pressure;\n        event.tangentialPressure = nativeEvent.tangentialPressure;\n        event.tiltX = nativeEvent.tiltX;\n        event.tiltY = nativeEvent.tiltY;\n        event.twist = nativeEvent.twist;\n        this._transferMouseData(event, nativeEvent);\n\n        this.mapPositionToPoint(event.screen, nativeEvent.clientX, nativeEvent.clientY);\n        event.global.copyFrom(event.screen);// global = screen for top-level\n        event.offset.copyFrom(event.screen);// EventBoundary recalculates using its rootTarget\n\n        event.isTrusted = nativeEvent.isTrusted;\n        if (event.type === 'pointerleave')\n        {\n            event.type = 'pointerout';\n        }\n        if (event.type.startsWith('mouse'))\n        {\n            event.type = event.type.replace('mouse', 'pointer');\n        }\n        if (event.type.startsWith('touch'))\n        {\n            event.type = TOUCH_TO_POINTER[event.type] || event.type;\n        }\n\n        return event;\n    }\n\n    /**\n     * Transfers base & mouse event data from the {@code nativeEvent} to the federated event.\n     * @param event\n     * @param nativeEvent\n     */\n    private _transferMouseData(event: FederatedMouseEvent, nativeEvent: MouseEvent): void\n    {\n        event.isTrusted = nativeEvent.isTrusted;\n        event.srcElement = nativeEvent.srcElement;\n        event.timeStamp = performance.now();\n        event.type = nativeEvent.type;\n\n        event.altKey = nativeEvent.altKey;\n        event.button = nativeEvent.button;\n        event.buttons = nativeEvent.buttons;\n        event.client.x = nativeEvent.clientX;\n        event.client.y = nativeEvent.clientY;\n        event.ctrlKey = nativeEvent.ctrlKey;\n        event.metaKey = nativeEvent.metaKey;\n        event.movement.x = nativeEvent.movementX;\n        event.movement.y = nativeEvent.movementY;\n        event.page.x = nativeEvent.pageX;\n        event.page.y = nativeEvent.pageY;\n        event.relatedTarget = null;\n        event.shiftKey = nativeEvent.shiftKey;\n    }\n}\n\ninterface CrossCSSStyleDeclaration extends CSSStyleDeclaration\n{\n    msContentZooming: string;\n    msTouchAction: string;\n}\n\ninterface PixiPointerEvent extends PointerEvent\n{\n    isPrimary: boolean;\n    width: number;\n    height: number;\n    tiltX: number;\n    tiltY: number;\n    pointerType: string;\n    pointerId: number;\n    pressure: number;\n    twist: number;\n    tangentialPressure: number;\n    isNormalized: boolean;\n    type: string;\n}\n"],"names":["nativeEvent"],"mappings":"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"}