Files
nothoughts/node_modules/pixi.js/lib/events/FederatedEventTarget.mjs.map
2025-08-04 18:57:35 +02:00

1 line
31 KiB
Plaintext

{"version":3,"file":"FederatedEventTarget.mjs","sources":["../../src/events/FederatedEventTarget.ts"],"sourcesContent":["import { EventSystem } from './EventSystem';\nimport { FederatedEvent } from './FederatedEvent';\n\nimport type EventEmitter from 'eventemitter3';\nimport type { Container } from '../scene/container/Container';\nimport type { AllFederatedEventMap } from './FederatedEventMap';\nimport type { FederatedPointerEvent } from './FederatedPointerEvent';\nimport type { FederatedWheelEvent } from './FederatedWheelEvent';\n\n/**\n * The type of cursor to use when the mouse pointer is hovering over.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/cursor\n *\n * Can be any valid CSS cursor value:\n * `auto`, `default`, `none`, `context-menu`, `help`, `pointer`, `progress`,\n * `wait`, `cell`, `crosshair`, `text`, `verticaltext`, `alias`, `copy`, `move`,\n * `nodrop`, `notallowed`, `eresize`, `nresize`, `neresize`, `nwresize`, `sresize`,\n * `seresize`, `swresize`, `wresize`, `nsresize`, `ewresize`, `neswresize`, `colresize`,\n * `nwseresize`, `rowresize`, `allscroll`, `zoomin`, `zoomout`, `grab`, `grabbing`\n * @memberof events\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/**\n * The hit area specifies the area for which pointer events should be captured by this event target.\n * @memberof events\n */\nexport interface IHitArea\n{\n /**\n * Checks if the x and y coordinates given are contained within this hit area.\n * @returns Whether the x and y coordinates are contained within this hit area.\n */\n contains(x: number, y: number): boolean;\n}\n\n/**\n * Function type for handlers, e.g., onclick\n * @memberof events\n */\nexport type FederatedEventHandler<T = FederatedPointerEvent> = (event: T) => void;\n\n/**\n * The type of interaction a Container can be.\n * This is the {@link scene.Container#eventMode|Container.eventMode} property of any {@link scene.Container}.\n *\n * Can be one of the following:\n * - `'none'`: Ignores all interaction events, even on its children.\n * - `'passive'`: **(default)** 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 *\n * `none` and `passive` are useful for optimizing interaction events on objects as it reduces the number of hit tests\n * PixiJS has to do. `auto` is useful for when you want to recreate how the DOM handles interaction events with\n * `pointer-events: auto`.\n * @since 7.2.0\n * @memberof events\n */\nexport type EventMode = 'none' | 'passive' | 'auto' | 'static' | 'dynamic';\n\n/**\n * The properties available for any interactive object.\n * @memberof events\n */\nexport interface FederatedOptions\n{\n /** The cursor preferred when the mouse pointer is hovering over. */\n cursor?: Cursor | string;\n /** The mode of interaction for this object */\n eventMode?: EventMode;\n /** Whether this event target should fire UI events. */\n interactive?: boolean\n /** Whether this event target has any children that need UI events. This can be used optimize event propagation. */\n interactiveChildren?: boolean;\n /** The hit-area specifies the area for which pointer events should be captured by this event target. */\n hitArea?: IHitArea | null;\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 IFederatedContainer extends FederatedOptions\n{\n /** The parent of this event target. */\n readonly parent?: Container;\n\n /** The children of this event target. */\n readonly children?: ReadonlyArray<Container>;\n\n _internalEventMode: EventMode;\n\n /** Returns true if the Container has interactive 'static' or 'dynamic' */\n isInteractive: () => boolean;\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 dispatchEvent(e: FederatedEvent): boolean;\n}\n\nexport const FederatedContainer: IFederatedContainer = {\n\n /**\n * Property-based event handler for the `click` event.\n * @memberof scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 scene.Container#\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 Container. Touch, pointer and mouse\n * @memberof scene.Container#\n */\n get interactive()\n {\n return this.eventMode === 'dynamic' || this.eventMode === 'static';\n },\n set interactive(value: boolean)\n {\n this.eventMode = value ? 'static' : 'passive';\n },\n /**\n * @ignore\n */\n _internalEventMode: undefined,\n /**\n * Enable interaction events for the Container. Touch, pointer and mouse.\n * There are 5 types of interaction settings:\n * - `'none'`: Ignores all interaction events, even on its children.\n * - `'passive'`: **(default)** 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 scene.Container#\n * @since 7.2.0\n */\n get eventMode()\n {\n return this._internalEventMode ?? EventSystem.defaultEventMode;\n },\n set eventMode(value)\n {\n this._internalEventMode = value;\n },\n\n /**\n * Determines if the container is interactive or not\n * @returns {boolean} Whether the container is interactive or not\n * @memberof scene.Container#\n * @since 7.2.0\n * @example\n * import { Sprite } from 'pixi.js';\n *\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(): boolean\n {\n return this.eventMode === 'static' || this.eventMode === 'dynamic';\n },\n\n /**\n * Determines if the children to the container can be clicked/touched\n * Setting this to false allows PixiJS to bypass a recursive `hitTest` function\n * @memberof scene.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 container'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 {IHitArea}\n * @memberof scene.Container#\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 * @memberof scene.Container\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 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 * @memberof scene.Container\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 EventEmitter).off(type, listener, context);\n },\n\n /**\n * Dispatch the event on this {@link Container} using the event's {@link EventBoundary}.\n *\n * The target of the event is set to `this` and the `defaultPrevented` flag is cleared before dispatch.\n * @memberof scene.Container\n * @param e - The event to dispatch.\n * @returns Whether the {@link 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('Container cannot propagate events outside of the Federated Events API');\n }\n\n e.defaultPrevented = false;\n e.path = null;\n e.target = this as Container;\n e.manager.dispatchEvent(e);\n\n return !e.defaultPrevented;\n }\n};\n"],"names":[],"mappings":"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"}