{"version":3,"file":"FederatedEventTarget.mjs","sources":["../src/FederatedEventTarget.ts"],"sourcesContent":["import { DisplayObject } from 'pixijs/display';\nimport { FederatedEvent } from './FederatedEvent';\n\nimport type { utils } from 'pixijs/core';\nimport type { AllFederatedEventMap } from './FederatedEventMap';\nimport type { FederatedPointerEvent } from './FederatedPointerEvent';\nimport type { FederatedWheelEvent } from './FederatedWheelEvent';\n\nexport type Cursor = 'auto'\n| 'default'\n| 'none'\n| 'context-menu'\n| 'help'\n| 'pointer'\n| 'progress'\n| 'wait'\n| 'cell'\n| 'crosshair'\n| 'text'\n| 'vertical-text'\n| 'alias'\n| 'copy'\n| 'move'\n| 'no-drop'\n| 'not-allowed'\n| 'e-resize'\n| 'n-resize'\n| 'ne-resize'\n| 'nw-resize'\n| 's-resize'\n| 'se-resize'\n| 'sw-resize'\n| 'w-resize'\n| 'ns-resize'\n| 'ew-resize'\n| 'nesw-resize'\n| 'col-resize'\n| 'nwse-resize'\n| 'row-resize'\n| 'all-scroll'\n| 'zoom-in'\n| 'zoom-out'\n| 'grab'\n| 'grabbing';\n\n// @ignore - This is documented elsewhere.\nexport interface IHitArea\n{\n    contains(x: number, y: number): boolean;\n}\n\n/** Function type for handlers, e.g., onclick */\nexport type FederatedEventHandler<T= FederatedPointerEvent> = (event: T) => void;\n\n/**\n * Describes the shape for a {@link FederatedEvent}'s' `eventTarget`.\n * @memberof PIXI\n */\nexport interface FederatedEventTarget extends utils.EventEmitter, EventTarget\n{\n    /** The cursor preferred when the mouse pointer is hovering over. */\n    cursor: Cursor | string;\n\n    /** The parent of this event target. */\n    readonly parent?: FederatedEventTarget;\n\n    /** The children of this event target. */\n    readonly children?: ReadonlyArray<FederatedEventTarget>;\n\n    /** Whether this event target should fire UI events. */\n    interactive: boolean;\n\n    /** Whether this event target has any children that need UI events. This can be used optimize event propagation. */\n    interactiveChildren: boolean;\n\n    /** The hit-area specifies the area for which pointer events should be captured by this event target. */\n    hitArea: IHitArea | null;\n\n    // In Angular projects, zone.js is monkey patching the `EventTarget`\n    // by adding its own `removeAllListeners(event?: string): void;` method,\n    // so we have to override this signature when extending both `EventTarget` and `utils.EventEmitter`\n    // to make it compatible with Angular projects\n    // @see https://github.com/pixijs/pixijs/issues/8794\n\n    /** Remove all listeners, or those of the specified event. */\n    removeAllListeners(event?: string | symbol): this;\n\n    /** Handler for 'click' event */\n    onclick: FederatedEventHandler | null;\n    /** Handler for 'mousedown' event */\n    onmousedown: FederatedEventHandler | null;\n    /** Handler for 'mouseenter' event */\n    onmouseenter: FederatedEventHandler | null;\n    /** Handler for 'mouseleave' event */\n    onmouseleave: FederatedEventHandler | null;\n    /** Handler for 'mousemove' event */\n    onmousemove: FederatedEventHandler | null;\n    /** Handler for 'globalmousemove' event */\n    onglobalmousemove: FederatedEventHandler | null;\n    /** Handler for 'mouseout' event */\n    onmouseout: FederatedEventHandler | null;\n    /** Handler for 'mouseover' event */\n    onmouseover: FederatedEventHandler | null;\n    /** Handler for 'mouseup' event */\n    onmouseup: FederatedEventHandler | null;\n    /** Handler for 'mouseupoutside' event */\n    onmouseupoutside: FederatedEventHandler | null;\n    /** Handler for 'pointercancel' event */\n    onpointercancel: FederatedEventHandler | null;\n    /** Handler for 'pointerdown' event */\n    onpointerdown: FederatedEventHandler | null;\n    /** Handler for 'pointerenter' event */\n    onpointerenter: FederatedEventHandler | null;\n    /** Handler for 'pointerleave' event */\n    onpointerleave: FederatedEventHandler | null;\n    /** Handler for 'pointermove' event */\n    onpointermove: FederatedEventHandler | null;\n    /** Handler for 'globalpointermove' event */\n    onglobalpointermove: FederatedEventHandler | null;\n    /** Handler for 'pointerout' event */\n    onpointerout: FederatedEventHandler | null;\n    /** Handler for 'pointerover' event */\n    onpointerover: FederatedEventHandler | null;\n    /** Handler for 'pointertap' event */\n    onpointertap: FederatedEventHandler | null;\n    /** Handler for 'pointerup' event */\n    onpointerup: FederatedEventHandler | null;\n    /** Handler for 'pointerupoutside' event */\n    onpointerupoutside: FederatedEventHandler | null;\n    /** Handler for 'rightclick' event */\n    onrightclick: FederatedEventHandler | null;\n    /** Handler for 'rightdown' event */\n    onrightdown: FederatedEventHandler | null;\n    /** Handler for 'rightup' event */\n    onrightup: FederatedEventHandler | null;\n    /** Handler for 'rightupoutside' event */\n    onrightupoutside: FederatedEventHandler | null;\n    /** Handler for 'tap' event */\n    ontap: FederatedEventHandler | null;\n    /** Handler for 'touchcancel' event */\n    ontouchcancel: FederatedEventHandler | null;\n    /** Handler for 'touchend' event */\n    ontouchend: FederatedEventHandler | null;\n    /** Handler for 'touchendoutside' event */\n    ontouchendoutside: FederatedEventHandler | null;\n    /** Handler for 'touchmove' event */\n    ontouchmove: FederatedEventHandler | null;\n    /** Handler for 'globaltouchmove' event */\n    onglobaltouchmove: FederatedEventHandler | null;\n    /** Handler for 'touchstart' event */\n    ontouchstart: FederatedEventHandler | null;\n    /** Handler for 'wheel' event */\n    onwheel: FederatedEventHandler<FederatedWheelEvent> | null;\n}\n\ntype AddListenerOptions = boolean | AddEventListenerOptions;\ntype RemoveListenerOptions = boolean | EventListenerOptions;\n\nexport interface IFederatedDisplayObject\n    extends Omit<FederatedEventTarget, 'parent' | 'children' | keyof utils.EventEmitter | 'cursor'>\n{\n    addEventListener<K extends keyof AllFederatedEventMap>(\n        type: K,\n        listener: (e: AllFederatedEventMap[K]) => any,\n        options?: AddListenerOptions\n    ): void;\n    addEventListener(\n        type: string,\n        listener: EventListenerOrEventListenerObject,\n        options?: AddListenerOptions\n    ): void;\n    removeEventListener<K extends keyof AllFederatedEventMap>(\n        type: K,\n        listener: (e: AllFederatedEventMap[K]) => any,\n        options?: RemoveListenerOptions\n    ): void;\n    removeEventListener(\n        type: string,\n        listener: EventListenerOrEventListenerObject,\n        options?: RemoveListenerOptions\n    ): void;\n}\n\nexport const FederatedDisplayObject: IFederatedDisplayObject = {\n\n    /**\n     * Property-based event handler for the `click` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onclick = (event) => {\n     *  //some function here that happens on click\n     * }\n     */\n    onclick: null,\n\n    /**\n     * Property-based event handler for the `mousedown` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onmousedown = (event) => {\n     *  //some function here that happens on mousedown\n     * }\n     */\n    onmousedown: null,\n\n    /**\n     * Property-based event handler for the `mouseenter` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onmouseenter = (event) => {\n     *  //some function here that happens on mouseenter\n     * }\n     */\n    onmouseenter: null,\n\n    /**\n     * Property-based event handler for the `mouseleave` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onmouseleave = (event) => {\n     *  //some function here that happens on mouseleave\n     * }\n     */\n    onmouseleave: null,\n\n    /**\n     * Property-based event handler for the `mousemove` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onmousemove = (event) => {\n     *  //some function here that happens on mousemove\n     * }\n     */\n    onmousemove: null,\n\n    /**\n     * Property-based event handler for the `globalmousemove` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onglobalmousemove = (event) => {\n     *  //some function here that happens on globalmousemove\n     * }\n     */\n    onglobalmousemove: null,\n\n    /**\n     * Property-based event handler for the `mouseout` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onmouseout = (event) => {\n     *  //some function here that happens on mouseout\n     * }\n     */\n    onmouseout: null,\n\n    /**\n     * Property-based event handler for the `mouseover` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onmouseover = (event) => {\n     *  //some function here that happens on mouseover\n     * }\n     */\n    onmouseover:  null,\n\n    /**\n     * Property-based event handler for the `mouseup` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onmouseup = (event) => {\n     *  //some function here that happens on mouseup\n     * }\n     */\n    onmouseup:  null,\n\n    /**\n     * Property-based event handler for the `mouseupoutside` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onmouseupoutside = (event) => {\n     *  //some function here that happens on mouseupoutside\n     * }\n     */\n    onmouseupoutside:  null,\n\n    /**\n     * Property-based event handler for the `pointercancel` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onpointercancel = (event) => {\n     *  //some function here that happens on pointercancel\n     * }\n     */\n    onpointercancel:  null,\n\n    /**\n     * Property-based event handler for the `pointerdown` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onpointerdown = (event) => {\n     *  //some function here that happens on pointerdown\n     * }\n     */\n    onpointerdown:  null,\n\n    /**\n     * Property-based event handler for the `pointerenter` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onpointerenter = (event) => {\n     *  //some function here that happens on pointerenter\n     * }\n     */\n    onpointerenter:  null,\n\n    /**\n     * Property-based event handler for the `pointerleave` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onpointerleave = (event) => {\n     *  //some function here that happens on pointerleave\n     * }\n     */\n    onpointerleave:  null,\n\n    /**\n     * Property-based event handler for the `pointermove` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onpointermove = (event) => {\n     *  //some function here that happens on pointermove\n     * }\n     */\n    onpointermove:  null,\n\n    /**\n     * Property-based event handler for the `globalpointermove` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onglobalpointermove = (event) => {\n     *  //some function here that happens on globalpointermove\n     * }\n     */\n    onglobalpointermove:  null,\n\n    /**\n     * Property-based event handler for the `pointerout` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onpointerout = (event) => {\n     *  //some function here that happens on pointerout\n     * }\n     */\n    onpointerout:  null,\n\n    /**\n     * Property-based event handler for the `pointerover` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onpointerover = (event) => {\n     *  //some function here that happens on pointerover\n     * }\n     */\n    onpointerover:  null,\n\n    /**\n     * Property-based event handler for the `pointertap` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onpointertap = (event) => {\n     *  //some function here that happens on pointertap\n     * }\n     */\n    onpointertap:  null,\n\n    /**\n     * Property-based event handler for the `pointerup` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onpointerup = (event) => {\n     *  //some function here that happens on pointerup\n     * }\n     */\n    onpointerup:  null,\n\n    /**\n     * Property-based event handler for the `pointerupoutside` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onpointerupoutside = (event) => {\n     *  //some function here that happens on pointerupoutside\n     * }\n     */\n    onpointerupoutside:  null,\n\n    /**\n     * Property-based event handler for the `rightclick` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onrightclick = (event) => {\n     *  //some function here that happens on rightclick\n     * }\n     */\n    onrightclick:  null,\n\n    /**\n     * Property-based event handler for the `rightdown` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onrightdown = (event) => {\n     *  //some function here that happens on rightdown\n     * }\n     */\n    onrightdown:  null,\n\n    /**\n     * Property-based event handler for the `rightup` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onrightup = (event) => {\n     *  //some function here that happens on rightup\n     * }\n     */\n    onrightup:  null,\n\n    /**\n     * Property-based event handler for the `rightupoutside` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onrightupoutside = (event) => {\n     *  //some function here that happens on rightupoutside\n     * }\n     */\n    onrightupoutside:  null,\n\n    /**\n     * Property-based event handler for the `tap` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.ontap = (event) => {\n     *  //some function here that happens on tap\n     * }\n     */\n    ontap:  null,\n\n    /**\n     * Property-based event handler for the `touchcancel` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.ontouchcancel = (event) => {\n     *  //some function here that happens on touchcancel\n     * }\n     */\n    ontouchcancel:  null,\n\n    /**\n     * Property-based event handler for the `touchend` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.ontouchend = (event) => {\n     *  //some function here that happens on touchend\n     * }\n     */\n    ontouchend:  null,\n\n    /**\n     * Property-based event handler for the `touchendoutside` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.ontouchendoutside = (event) => {\n     *  //some function here that happens on touchendoutside\n     * }\n     */\n    ontouchendoutside:  null,\n\n    /**\n     * Property-based event handler for the `touchmove` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.ontouchmove = (event) => {\n     *  //some function here that happens on touchmove\n     * }\n     */\n    ontouchmove:  null,\n\n    /**\n     * Property-based event handler for the `globaltouchmove` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onglobaltouchmove = (event) => {\n     *  //some function here that happens on globaltouchmove\n     * }\n     */\n    onglobaltouchmove:  null,\n\n    /**\n     * Property-based event handler for the `touchstart` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.ontouchstart = (event) => {\n     *  //some function here that happens on touchstart\n     * }\n     */\n    ontouchstart:  null,\n\n    /**\n     * Property-based event handler for the `wheel` event.\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     * @example\n     * this.onwheel = (event) => {\n     *  //some function here that happens on wheel\n     * }\n     */\n    onwheel:  null,\n    /**\n     * Enable interaction events for the DisplayObject. Touch, pointer and mouse\n     * events will not be emitted unless `interactive` is set to `true`.\n     * @example\n     * import { Sprite } from 'pixijs/browser';\n     *\n     * const sprite = new Sprite(texture);\n     * sprite.interactive = true;\n     * sprite.on('tap', (event) => {\n     *     // Handle event\n     * });\n     * @memberof PIXI.DisplayObject#\n     */\n    interactive: false,\n\n    /**\n     * Determines if the children to the displayObject can be clicked/touched\n     * Setting this to false allows PixiJS to bypass a recursive `hitTest` function\n     * @memberof PIXI.Container#\n     */\n    interactiveChildren: true,\n\n    /**\n     * Interaction shape. Children will be hit first, then this shape will be checked.\n     * Setting this will cause this shape to be checked in hit tests rather than the displayObject's bounds.\n     * @example\n     * import { Rectangle, Sprite } from 'pixijs/browser';\n     *\n     * const sprite = new Sprite(texture);\n     * sprite.interactive = true;\n     * sprite.hitArea = new Rectangle(0, 0, 100, 100);\n     * @member {PIXI.IHitArea}\n     * @memberof PIXI.DisplayObject#\n     */\n    hitArea: null,\n\n    /**\n     * Unlike `on` or `addListener` which are methods from EventEmitter, `addEventListener`\n     * seeks to be compatible with the DOM's `addEventListener` with support for options.\n     * **IMPORTANT:** _Only_ available if using the `pixijs/events` package.\n     * @memberof PIXI.DisplayObject\n     * @param type - The type of event to listen to.\n     * @param listener - The listener callback or object.\n     * @param options - Listener options, used for capture phase.\n     * @example\n     * // Tell the user whether they did a single, double, triple, or nth click.\n     * button.addEventListener('click', {\n     *     handleEvent(e): {\n     *         let prefix;\n     *\n     *         switch (e.detail) {\n     *             case 1: prefix = 'single'; break;\n     *             case 2: prefix = 'double'; break;\n     *             case 3: prefix = 'triple'; break;\n     *             default: prefix = e.detail + 'th'; break;\n     *         }\n     *\n     *         console.log('That was a ' + prefix + 'click');\n     *     }\n     * });\n     *\n     * // But skip the first click!\n     * button.parent.addEventListener('click', function blockClickOnce(e) {\n     *     e.stopImmediatePropagation();\n     *     button.parent.removeEventListener('click', blockClickOnce, true);\n     * }, {\n     *     capture: true,\n     * });\n     */\n    addEventListener(\n        type: string,\n        listener: EventListenerOrEventListenerObject,\n        options?: AddListenerOptions\n    )\n    {\n        const capture = (typeof options === 'boolean' && options)\n            || (typeof options === 'object' && options.capture);\n        const context = typeof listener === 'function' ? undefined : listener;\n\n        type = capture ? `${type}capture` : type;\n        listener = typeof listener === 'function' ? listener : listener.handleEvent;\n\n        (this as unknown as utils.EventEmitter).on(type, listener, context);\n    },\n\n    /**\n     * Unlike `off` or `removeListener` which are methods from EventEmitter, `removeEventListener`\n     * seeks to be compatible with the DOM's `removeEventListener` with support for options.\n     * **IMPORTANT:** _Only_ available if using the `pixijs/events` package.\n     * @memberof PIXI.DisplayObject\n     * @param type - The type of event the listener is bound to.\n     * @param listener - The listener callback or object.\n     * @param options - The original listener options. This is required to deregister a capture phase listener.\n     */\n    removeEventListener(\n        type: string,\n        listener: EventListenerOrEventListenerObject,\n        options?: RemoveListenerOptions\n    )\n    {\n        const capture = (typeof options === 'boolean' && options)\n            || (typeof options === 'object' && options.capture);\n        const context = typeof listener === 'function' ? undefined : listener;\n\n        type = capture ? `${type}capture` : type;\n        listener = typeof listener === 'function' ? listener : listener.handleEvent;\n\n        (this as unknown as utils.EventEmitter).off(type, listener, context);\n    },\n\n    /**\n     * Dispatch the event on this {@link PIXI.DisplayObject} using the event's {@link PIXI.EventBoundary}.\n     *\n     * The target of the event is set to `this` and the `defaultPrevented` flag is cleared before dispatch.\n     *\n     * **IMPORTANT:** _Only_ available if using the `pixijs/events` package.\n     * @memberof PIXI.DisplayObject\n     * @param e - The event to dispatch.\n     * @returns Whether the {@link PIXI.FederatedEvent.preventDefault preventDefault}() method was not invoked.\n     * @example\n     * // Reuse a click event!\n     * button.dispatchEvent(clickEvent);\n     */\n    dispatchEvent(e: Event): boolean\n    {\n        if (!(e instanceof FederatedEvent))\n        {\n            throw new Error('DisplayObject cannot propagate events outside of the Federated Events API');\n        }\n\n        e.defaultPrevented = false;\n        e.path = null;\n        e.target = this as unknown as FederatedEventTarget;\n        e.manager.dispatchEvent(e);\n\n        return !e.defaultPrevented;\n    }\n};\n\nDisplayObject.mixin(FederatedDisplayObject);\n"],"names":[],"mappings":"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"}