{"version":3,"file":"FederatedEventTarget.mjs","sources":["../src/FederatedEventTarget.ts"],"sourcesContent":["import { utils } from '@pixi/core';\nimport { DisplayObject } from '@pixi/display';\nimport { EventSystem } from './EventSystem';\nimport { FederatedEvent } from './FederatedEvent';\n\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/**\n * Function type for handlers, e.g., onclick\n * @memberof PIXI\n */\nexport type FederatedEventHandler = (event: T) => void;\n\n/**\n * The type of interaction a DisplayObject can be. For more information on values and their meaning,\n * see {@link PIXI.DisplayObject.eventMode DisplayObject's eventMode property}.\n * @memberof PIXI\n * @since 7.2.0\n */\nexport type EventMode = 'none' | 'passive' | 'auto' | 'static' | 'dynamic';\n\n/**\n * Describes the shape for a {@link PIXI.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;\n\n /** Whether this event target should fire UI events. */\n interactive: boolean\n _internalInteractive: boolean;\n /** The mode of interaction for this object */\n eventMode: EventMode;\n _internalEventMode: EventMode;\n\n /** Returns true if the DisplayObject has interactive 'static' or 'dynamic' */\n isInteractive: () => 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 | null;\n}\n\ntype AddListenerOptions = boolean | AddEventListenerOptions;\ntype RemoveListenerOptions = boolean | EventListenerOptions;\n\nexport interface IFederatedDisplayObject\n extends Omit\n{\n addEventListener(\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(\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\nfunction convertEventModeToInteractiveMode(mode: EventMode): boolean\n{\n return mode === 'dynamic' || mode === 'static';\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 * @ignore\n */\n _internalInteractive: undefined,\n /**\n * Enable interaction events for the DisplayObject. Touch, pointer and mouse\n * @memberof PIXI.DisplayObject#\n */\n get interactive()\n {\n return this._internalInteractive ?? convertEventModeToInteractiveMode(EventSystem.defaultEventMode);\n },\n set interactive(value: boolean)\n {\n if (process.env.DEBUG)\n {\n utils.deprecation(\n '7.2.0',\n // eslint-disable-next-line max-len\n `Setting interactive is deprecated, use eventMode = 'none'/'passive'/'auto'/'static'/'dynamic' instead.`\n );\n }\n\n this._internalInteractive = value;\n this.eventMode = value ? 'static' : 'auto';\n },\n /**\n * @ignore\n */\n _internalEventMode: undefined,\n /**\n * Enable interaction events for the DisplayObject. Touch, pointer and mouse.\n * This now replaces the `interactive` property.\n * There are 5 types of interaction settings:\n * - `'none'`: Ignores all interaction events, even on its children.\n * - `'passive'`: Does not emit events and ignores all hit testing on itself and non-interactive children.\n * Interactive children will still emit events.\n * - `'auto'`: Does not emit events but is hit tested if parent is interactive. Same as `interactive = false` in v7\n * - `'static'`: Emit events and is hit tested. Same as `interaction = true` in v7\n * - `'dynamic'`: Emits events and is hit tested but will also receive mock interaction events fired from a ticker to\n * allow for interaction when the mouse isn't moving\n * @example\n * import { Sprite } from 'pixi.js';\n *\n * const sprite = new Sprite(texture);\n * sprite.eventMode = 'static';\n * sprite.on('tap', (event) => {\n * // Handle event\n * });\n * @memberof PIXI.DisplayObject#\n * @since 7.2.0\n */\n get eventMode()\n {\n return this._internalEventMode ?? EventSystem.defaultEventMode;\n },\n set eventMode(value)\n {\n this._internalInteractive = convertEventModeToInteractiveMode(value);\n this._internalEventMode = value;\n },\n\n /**\n * Determines if the displayObject is interactive or not\n * @returns {boolean} Whether the displayObject is interactive or not\n * @memberof PIXI.DisplayObject#\n * @since 7.2.0\n * @example\n * import { Sprite } from 'pixi.js';\n * const sprite = new Sprite(texture);\n * sprite.eventMode = 'static';\n * sprite.isInteractive(); // true\n *\n * sprite.eventMode = 'dynamic';\n * sprite.isInteractive(); // true\n *\n * sprite.eventMode = 'none';\n * sprite.isInteractive(); // false\n *\n * sprite.eventMode = 'passive';\n * sprite.isInteractive(); // false\n *\n * sprite.eventMode = 'auto';\n * sprite.isInteractive(); // false\n */\n isInteractive()\n {\n return this.eventMode === 'static' || this.eventMode === 'dynamic';\n },\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 'pixi.js';\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 `@pixi/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 signal = typeof options === 'object' ? options.signal : undefined;\n const once = typeof options === 'object' ? (options.once === true) : false;\n const context = typeof listener === 'function' ? undefined : listener;\n\n type = capture ? `${type}capture` : type;\n const listenerFn = typeof listener === 'function' ? listener : listener.handleEvent;\n\n const emitter = (this as unknown as utils.EventEmitter);\n\n if (signal)\n {\n signal.addEventListener('abort', () =>\n {\n emitter.off(type, listenerFn, context);\n });\n }\n\n if (once)\n {\n emitter.once(type, listenerFn, context);\n }\n else\n {\n emitter.on(type, listenerFn, context);\n }\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 `@pixi/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 `@pixi/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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"}