{"version":3,"file":"FederatedEvent.mjs","sources":["../../src/events/FederatedEvent.ts"],"sourcesContent":["import { Point } from '../maths/point/Point';\n\nimport type { Container } from '../scene/container/Container';\nimport type { EventBoundary } from './EventBoundary';\n\n/**\n * A PixiJS compatible {@code Touch} event.\n * @memberof events\n */\nexport interface PixiTouch extends Touch\n{\n    button: number;\n    buttons: number;\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    layerX: number;\n    layerY: number;\n    offsetX: number;\n    offsetY: number;\n    isNormalized: boolean;\n    type: string;\n}\n\n/**\n * An DOM-compatible synthetic event implementation that is \"forwarded\" on behalf of an original\n * FederatedEvent or native {@link https://dom.spec.whatwg.org/#event Event}.\n * @typeParam N - The type of native event held.\n * @memberof events\n */\nexport class FederatedEvent<N extends UIEvent | PixiTouch = UIEvent | PixiTouch> implements UIEvent\n{\n    /** Flags whether this event bubbles. This will take effect only if it is set before propagation. */\n    public bubbles = true;\n\n    /** @deprecated since 7.0.0 */\n    public cancelBubble = true;\n\n    /**\n     * Flags whether this event can be canceled using {@link FederatedEvent.preventDefault}. This is always\n     * false (for now).\n     */\n    public readonly cancelable = false;\n\n    /**\n     * Flag added for compatibility with DOM {@code Event}. It is not used in the Federated Events\n     * API.\n     * @see https://dom.spec.whatwg.org/#dom-event-composed\n     */\n    public readonly composed = false;\n\n    /** The listeners of the event target that are being notified. */\n    public currentTarget: Container;\n\n    /** Flags whether the default response of the user agent was prevent through this event. */\n    public defaultPrevented = false;\n\n    /**\n     * The propagation phase.\n     * @default {@link FederatedEvent.NONE}\n     */\n    public eventPhase = FederatedEvent.prototype.NONE;\n\n    /** Flags whether this is a user-trusted event */\n    public isTrusted: boolean;\n\n    /** @deprecated since 7.0.0 */\n    public returnValue: boolean;\n\n    /** @deprecated since 7.0.0 */\n    public srcElement: EventTarget;\n\n    /** The event target that this will be dispatched to. */\n    public target: Container;\n\n    /** The timestamp of when the event was created. */\n    public timeStamp: number;\n\n    /** The type of event, e.g. {@code \"mouseup\"}. */\n    public type: string;\n\n    /** The native event that caused the foremost original event. */\n    public nativeEvent: N;\n\n    /** The original event that caused this event, if any. */\n    public originalEvent: FederatedEvent<N>;\n\n    /** Flags whether propagation was stopped. */\n    public propagationStopped = false;\n\n    /** Flags whether propagation was immediately stopped. */\n    public propagationImmediatelyStopped = false;\n\n    /** The composed path of the event's propagation. The {@code target} is at the end. */\n    public path: Container[];\n\n    /** The {@link EventBoundary} that manages this event. Null for root events. */\n    public readonly manager: EventBoundary;\n\n    /** Event-specific detail */\n    public detail: number;\n\n    /** The global Window object. */\n    public view: WindowProxy;\n\n    /**\n     * Not supported.\n     * @deprecated since 7.0.0\n     */\n    public which: number;\n\n    /** The coordinates of the event relative to the nearest DOM layer. This is a non-standard property. */\n    public layer: Point = new Point();\n\n    /** @readonly */\n    get layerX(): number { return this.layer.x; }\n\n    /** @readonly */\n    get layerY(): number { return this.layer.y; }\n\n    /** The coordinates of the event relative to the DOM document. This is a non-standard property. */\n    public page: Point = new Point();\n\n    /** @readonly */\n    get pageX(): number { return this.page.x; }\n\n    /** @readonly */\n    get pageY(): number { return this.page.y; }\n\n    /**\n     * @param manager - The event boundary which manages this event. Propagation can only occur\n     *  within the boundary's jurisdiction.\n     */\n    constructor(manager: EventBoundary)\n    {\n        this.manager = manager;\n    }\n\n    /**\n     * Fallback for the deprecated @code{InteractionEvent.data}.\n     * @deprecated since 7.0.0\n     */\n    get data(): this\n    {\n        return this;\n    }\n\n    /** The propagation path for this event. Alias for {@link EventBoundary.propagationPath}. */\n    public composedPath(): Container[]\n    {\n        // Find the propagation path if it isn't cached or if the target has changed since since\n        // the last evaluation.\n        if (this.manager && (!this.path || this.path[this.path.length - 1] !== this.target))\n        {\n            this.path = this.target ? this.manager.propagationPath(this.target) : [];\n        }\n\n        return this.path;\n    }\n\n    /**\n     * Unimplemented method included for implementing the DOM interface {@code Event}. It will throw an {@code Error}.\n     * @deprecated\n     * @param _type\n     * @param _bubbles\n     * @param _cancelable\n     */\n    public initEvent(_type: string, _bubbles?: boolean, _cancelable?: boolean): void\n    {\n        throw new Error('initEvent() is a legacy DOM API. It is not implemented in the Federated Events API.');\n    }\n\n    /**\n     * Unimplemented method included for implementing the DOM interface {@code UIEvent}. It will throw an {@code Error}.\n     * @deprecated\n     * @param _typeArg\n     * @param _bubblesArg\n     * @param _cancelableArg\n     * @param _viewArg\n     * @param _detailArg\n     */\n    public initUIEvent(_typeArg: string, _bubblesArg?: boolean, _cancelableArg?: boolean, _viewArg?: Window | null,\n        _detailArg?: number): void\n    {\n        throw new Error('initUIEvent() is a legacy DOM API. It is not implemented in the Federated Events API.');\n    }\n\n    /** Prevent default behavior of PixiJS and the user agent. */\n    public preventDefault(): void\n    {\n        if (this.nativeEvent instanceof Event && this.nativeEvent.cancelable)\n        {\n            this.nativeEvent.preventDefault();\n        }\n\n        this.defaultPrevented = true;\n    }\n\n    /**\n     * Stop this event from propagating to any addition listeners, including on the\n     * {@link FederatedEventTarget.currentTarget currentTarget} and also the following\n     * event targets on the propagation path.\n     */\n    public stopImmediatePropagation(): void\n    {\n        this.propagationImmediatelyStopped = true;\n    }\n\n    /**\n     * Stop this event from propagating to the next {@link FederatedEventTarget}. The rest of the listeners\n     * on the {@link FederatedEventTarget.currentTarget currentTarget} will still be notified.\n     */\n    public stopPropagation(): void\n    {\n        this.propagationStopped = true;\n    }\n\n    public readonly NONE = 0;\n    public readonly CAPTURING_PHASE = 1;\n    public readonly AT_TARGET = 2;\n    public readonly BUBBLING_PHASE = 3;\n}\n"],"names":[],"mappings":"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"}