{"version":3,"file":"taiga-ui-event-plugins.mjs","sources":["../../../projects/ng-event-plugins/src/types/longtap.event.ts","../../../projects/ng-event-plugins/src/utils/is-ios.ts","../../../projects/ng-event-plugins/src/events/longtap.event.ts","../../../projects/ng-event-plugins/src/plugins/timed-event.plugin.ts","../../../projects/ng-event-plugins/src/plugins/debounce.plugin.ts","../../../projects/ng-event-plugins/src/plugins/abstract.plugin.ts","../../../projects/ng-event-plugins/src/plugins/global.plugin.ts","../../../projects/ng-event-plugins/src/plugins/options.plugin.ts","../../../projects/ng-event-plugins/src/plugins/prevent.plugin.ts","../../../projects/ng-event-plugins/src/plugins/resize.plugin.ts","../../../projects/ng-event-plugins/src/plugins/self.plugin.ts","../../../projects/ng-event-plugins/src/plugins/silent.plugin.ts","../../../projects/ng-event-plugins/src/plugins/stop.plugin.ts","../../../projects/ng-event-plugins/src/plugins/throttle.plugin.ts","../../../projects/ng-event-plugins/src/plugins/zoneless.plugin.ts","../../../projects/ng-event-plugins/src/constants/plugins.ts","../../../projects/ng-event-plugins/src/decorators/should-call.ts","../../../projects/ng-event-plugins/src/utils/as-callable.ts","../../../projects/ng-event-plugins/src/taiga-ui-event-plugins.ts"],"sourcesContent":["interface LongtapEventInit extends EventInit {\n    clientX: number;\n    clientY: number;\n}\n\nexport class LongtapEvent extends CustomEvent<{\n    clientX: number;\n    clientY: number;\n}> {\n    constructor(type: string, {clientX, clientY, ...eventInitDict}: LongtapEventInit) {\n        super(type, {...eventInitDict, detail: {clientX, clientY}});\n    }\n}\n","export const isIos = ({userAgent, maxTouchPoints}: Navigator): boolean =>\n    /ipad|iphone|ipod/i.test(userAgent) ||\n    (/^((?!chrome|android).)*safari/i.test(userAgent) && maxTouchPoints > 1);\n","import type {EventManager} from '@angular/platform-browser';\n\nimport type {EventManagerPlugin} from '../types/event-manager-plugin';\nimport {LongtapEvent} from '../types/longtap.event';\nimport {isIos} from '../utils/is-ios';\n\nconst TAP_DELAY = 700;\nconst SAFE_NAVIGATOR = typeof navigator === 'undefined' ? null : navigator;\nconst MOVE_THRESHOLD = 15;\n\nexport class LongtapEventPlugin implements EventManagerPlugin {\n    private readonly isIOS = !!SAFE_NAVIGATOR && isIos(SAFE_NAVIGATOR);\n\n    public readonly manager!: EventManager;\n\n    public addEventListener(\n        element: HTMLElement,\n        _event: string,\n        handler: (event: Event) => void,\n    ): Function {\n        const removeLongtapEventPolyfill = this.isIOS\n            ? this.listenTouchEvents(element)\n            : this.listenContextmenuEvent(element);\n\n        element.addEventListener('longtap', handler);\n\n        return () => {\n            removeLongtapEventPolyfill();\n\n            element.removeEventListener('longtap', handler);\n        };\n    }\n\n    public supports(event: string): boolean {\n        return event === 'longtap';\n    }\n\n    private listenContextmenuEvent(element: HTMLElement): Function {\n        return this.manager.addEventListener(\n            element,\n            'contextmenu.prevent.stop',\n            ({clientX, clientY}: MouseEvent) => {\n                this.dispatchLongtapEvent(element, clientX, clientY);\n            },\n        );\n    }\n\n    private listenTouchEvents(element: HTMLElement): Function {\n        let longTapTimeout: any = null;\n        let touchStartCoords: {\n            clientX: number;\n            clientY: number;\n        } | null = null;\n\n        const reset = (): void => {\n            clearTimeout(longTapTimeout);\n            touchStartCoords = null;\n            longTapTimeout = null;\n        };\n\n        const removeTouchstartListener = this.manager.addEventListener(\n            element,\n            'touchstart.zoneless.passive',\n            ({touches}: TouchEvent) => {\n                const touch = touches[0];\n\n                if (!touch) {\n                    return;\n                }\n\n                const {clientX, clientY} = touch;\n\n                touchStartCoords = {clientX, clientY};\n\n                longTapTimeout = setTimeout(() => {\n                    this.dispatchLongtapEvent(element, clientX, clientY);\n                    reset();\n                }, TAP_DELAY);\n            },\n        );\n\n        const removeTouchmoveListener = this.manager.addEventListener(\n            element,\n            'touchmove.zoneless.passive',\n            ({touches}: TouchEvent) => {\n                const touch = touches[0];\n\n                if (!touch || !touchStartCoords) {\n                    return;\n                }\n\n                const {clientX, clientY} = touch;\n\n                if (\n                    Math.hypot(\n                        clientX - touchStartCoords.clientX,\n                        clientY - touchStartCoords.clientY,\n                    ) <= MOVE_THRESHOLD\n                ) {\n                    return;\n                }\n\n                reset();\n            },\n        );\n\n        const removeTouchcancelListener = this.manager.addEventListener(\n            element,\n            'touchcancel.zoneless.passive',\n            reset,\n        );\n\n        const removeTouchendListener = this.manager.addEventListener(\n            element,\n            'touchend.zoneless.passive',\n            reset,\n        );\n\n        return () => {\n            removeTouchstartListener();\n            removeTouchmoveListener();\n            removeTouchcancelListener();\n            removeTouchendListener();\n        };\n    }\n\n    private dispatchLongtapEvent(\n        element: HTMLElement,\n        clientX: number,\n        clientY: number,\n    ): void {\n        element.dispatchEvent(\n            new LongtapEvent('longtap', {\n                clientX,\n                clientY,\n                bubbles: false,\n                cancelable: false,\n                composed: false,\n            }),\n        );\n    }\n}\n","import type {EventManager} from '@angular/platform-browser';\n\nimport type {EventManagerPlugin} from '../types/event-manager-plugin';\n\nexport abstract class TimedEventPlugin implements EventManagerPlugin {\n    protected abstract readonly regExp: RegExp;\n\n    public manager!: EventManager;\n\n    public abstract addEventListener(\n        element: HTMLElement,\n        event: string,\n        handler: Function,\n    ): Function;\n\n    public supports(event: string): boolean {\n        return this.regExp.test(event);\n    }\n\n    protected getDelay(event: string): number {\n        const match = this.regExp.exec(event);\n\n        if (!match?.groups) {\n            throw new Error(`Invalid event: ${event}`);\n        }\n\n        const {time, units} = match.groups;\n\n        switch (units) {\n            case 'ms':\n                return Number(time);\n            case 's':\n                return Number(time) * 1000;\n            default:\n                throw new Error(`Invalid event: ${event}`);\n        }\n    }\n\n    protected unwrap(event: string): string {\n        return event.replace(this.regExp, '');\n    }\n}\n","import {TimedEventPlugin} from './timed-event.plugin';\n\nexport class DebounceEventPlugin extends TimedEventPlugin {\n    protected override readonly regExp = /\\.debounce~(?<time>\\d+)(?<units>ms|s)/;\n\n    public override addEventListener(\n        element: HTMLElement,\n        eventName: string,\n        handler: Function,\n    ): Function {\n        let timeout: ReturnType<typeof setTimeout> | undefined;\n\n        const unsubscribe = this.manager.addEventListener(\n            element,\n            this.unwrap(eventName),\n            (event: Event): void => {\n                clearTimeout(timeout);\n\n                timeout = setTimeout(() => {\n                    handler(event);\n                }, this.getDelay(eventName));\n            },\n        );\n\n        return () => {\n            clearTimeout(timeout);\n            unsubscribe();\n        };\n    }\n}\n","import type {EventManager} from '@angular/platform-browser';\n\nimport type {EventManagerPlugin} from '../types/event-manager-plugin';\n\nexport abstract class AbstractEventPlugin implements EventManagerPlugin {\n    protected abstract readonly modifier: string;\n\n    public manager!: EventManager;\n\n    public abstract addEventListener(\n        element: HTMLElement,\n        event: string,\n        handler: Function,\n    ): Function;\n\n    public supports(event: string): boolean {\n        return event.includes(this.modifier);\n    }\n\n    protected unwrap(event: string): string {\n        return event\n            .split('.')\n            .filter((v) => !this.modifier.includes(v))\n            .join('.');\n    }\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\nimport {DOCUMENT} from '@angular/common';\nimport {inject, Injectable, InjectionToken} from '@angular/core';\n\nimport {AbstractEventPlugin} from './abstract.plugin';\n\nexport const GLOBAL_HANDLER = new InjectionToken<(name: string) => EventTarget>(\n    ngDevMode ? '[GLOBAL_HANDLER]: Global event target handler' : '',\n    {\n        factory: () => {\n            const document = inject(DOCUMENT);\n\n            return (name) =>\n                name === 'body'\n                    ? document.body\n                    : (document.defaultView as any)[name] ||\n                      document.createElement('div');\n        },\n    },\n);\n\n@Injectable()\nexport class GlobalEventPlugin extends AbstractEventPlugin {\n    private readonly handler: Function = inject(GLOBAL_HANDLER);\n    protected readonly modifier = '>';\n\n    public addEventListener(_: HTMLElement, event: string, handler: Function): Function {\n        return this.manager.addEventListener(\n            this.handler(event.split('>')[0]),\n            event.split('>')?.[1] ?? '',\n            handler,\n        );\n    }\n}\n","import {Injectable} from '@angular/core';\n\nimport {AbstractEventPlugin} from './abstract.plugin';\n\n@Injectable()\nexport class OptionsEventPlugin extends AbstractEventPlugin {\n    protected readonly modifier = 'capture.once.passive';\n\n    public override supports(event: string): boolean {\n        return event.includes('.') && !this.unwrap(event).includes('.');\n    }\n\n    public addEventListener(\n        element: HTMLElement,\n        event: string,\n        handler: EventListener,\n    ): Function {\n        const unwrap = this.unwrap(event);\n        const capture = event.includes('.capture');\n\n        element.addEventListener(unwrap, handler, {\n            capture,\n            once: event.includes('.once'),\n            passive: event.includes('.passive'),\n        });\n\n        return () => element.removeEventListener(unwrap, handler, {capture});\n    }\n}\n","import {Injectable} from '@angular/core';\n\nimport {AbstractEventPlugin} from './abstract.plugin';\n\n@Injectable()\nexport class PreventEventPlugin extends AbstractEventPlugin {\n    protected readonly modifier = '.prevent';\n\n    public addEventListener(\n        element: HTMLElement,\n        event: string,\n        handler: Function,\n    ): Function {\n        return this.manager.addEventListener(\n            element,\n            this.unwrap(event),\n            (event: Event): void => {\n                event.preventDefault();\n                handler(event);\n            },\n        );\n    }\n}\n","import {Injectable} from '@angular/core';\n\nimport {AbstractEventPlugin} from './abstract.plugin';\n\n@Injectable()\nexport class ResizePlugin extends AbstractEventPlugin {\n    public readonly modifier = 'resize';\n\n    public override supports(event: string): boolean {\n        return event === 'resize';\n    }\n\n    public addEventListener(\n        element: HTMLElement,\n        event: string,\n        handler: ResizeObserverCallback,\n    ): Function {\n        if (typeof ResizeObserver === 'undefined' || !(element instanceof Element)) {\n            element.addEventListener(event, handler as unknown as EventListener);\n\n            return () =>\n                element.removeEventListener(event, handler as unknown as EventListener);\n        }\n\n        const observer = new ResizeObserver(handler);\n\n        observer.observe(element);\n\n        return () => observer.disconnect();\n    }\n}\n","import {Injectable} from '@angular/core';\n\nimport {AbstractEventPlugin} from './abstract.plugin';\n\n@Injectable()\nexport class SelfEventPlugin extends AbstractEventPlugin {\n    protected readonly modifier = '.self';\n\n    public addEventListener(\n        element: HTMLElement,\n        event: string,\n        handler: Function,\n    ): Function {\n        return this.manager.addEventListener(\n            element,\n            this.unwrap(event),\n            (event: Event) => {\n                if (event.target === event.currentTarget) {\n                    handler(event);\n                }\n            },\n        );\n    }\n}\n","import type {NgZone} from '@angular/core';\nimport {Injectable} from '@angular/core';\n\nimport {AbstractEventPlugin} from './abstract.plugin';\n\n/**\n * @deprecated: drop in v5.x\n */\n@Injectable()\nexport class SilentEventPlugin extends AbstractEventPlugin {\n    public static ngZone?: NgZone;\n\n    public readonly modifier: string = '.silent';\n\n    public addEventListener(\n        element: HTMLElement,\n        event: string,\n        handler: Function,\n    ): Function {\n        SilentEventPlugin.ngZone = this.manager.getZone();\n\n        return SilentEventPlugin.ngZone.runOutsideAngular(() =>\n            this.manager.addEventListener(element, this.unwrap(event), handler),\n        );\n    }\n}\n","import {Injectable} from '@angular/core';\n\nimport {AbstractEventPlugin} from './abstract.plugin';\n\n@Injectable()\nexport class StopEventPlugin extends AbstractEventPlugin {\n    protected readonly modifier = '.stop';\n\n    public addEventListener(\n        element: HTMLElement,\n        event: string,\n        handler: Function,\n    ): Function {\n        return this.manager.addEventListener(\n            element,\n            this.unwrap(event),\n            (event: Event): void => {\n                event.stopPropagation();\n                handler(event);\n            },\n        );\n    }\n}\n","import {TimedEventPlugin} from './timed-event.plugin';\n\nexport class ThrottleEventPlugin extends TimedEventPlugin {\n    protected override readonly regExp = /\\.throttle~(?<time>\\d+)(?<units>ms|s)/;\n\n    public override addEventListener(\n        element: HTMLElement,\n        eventName: string,\n        handler: Function,\n    ): Function {\n        let timeout: ReturnType<typeof setTimeout> | undefined;\n\n        const unsubscribe = this.manager.addEventListener(\n            element,\n            this.unwrap(eventName),\n            (event: Event): void => {\n                if (timeout !== undefined) {\n                    return;\n                }\n\n                handler(event);\n\n                timeout = setTimeout(() => {\n                    timeout = undefined;\n                }, this.getDelay(eventName));\n            },\n        );\n\n        return () => {\n            clearTimeout(timeout);\n            unsubscribe();\n        };\n    }\n}\n","import {Injectable} from '@angular/core';\n\nimport {SilentEventPlugin} from './silent.plugin';\n\n@Injectable()\nexport class ZonelessPlugin extends SilentEventPlugin {\n    public override readonly modifier = '.zoneless';\n}\n","import type {Provider} from '@angular/core';\nimport {EVENT_MANAGER_PLUGINS} from '@angular/platform-browser';\n\nimport {LongtapEventPlugin} from '../events/longtap.event';\nimport {DebounceEventPlugin} from '../plugins/debounce.plugin';\nimport {GlobalEventPlugin} from '../plugins/global.plugin';\nimport {OptionsEventPlugin} from '../plugins/options.plugin';\nimport {PreventEventPlugin} from '../plugins/prevent.plugin';\nimport {ResizePlugin} from '../plugins/resize.plugin';\nimport {SelfEventPlugin} from '../plugins/self.plugin';\nimport {SilentEventPlugin} from '../plugins/silent.plugin';\nimport {StopEventPlugin} from '../plugins/stop.plugin';\nimport {ThrottleEventPlugin} from '../plugins/throttle.plugin';\nimport {ZonelessPlugin} from '../plugins/zoneless.plugin';\n\nconst PLUGINS = [\n    SilentEventPlugin,\n    ZonelessPlugin,\n    SelfEventPlugin,\n    GlobalEventPlugin,\n    OptionsEventPlugin,\n    PreventEventPlugin,\n    ResizePlugin,\n    StopEventPlugin,\n    LongtapEventPlugin,\n    DebounceEventPlugin,\n    ThrottleEventPlugin,\n];\n\n/**\n * @deprecated: use {@link provideEventPlugins}\n */\nexport const NG_EVENT_PLUGINS: Provider[] = PLUGINS.map((useClass) => ({\n    provide: EVENT_MANAGER_PLUGINS,\n    multi: true,\n    useClass,\n}));\n\nexport function provideEventPlugins(): Provider[] {\n    return NG_EVENT_PLUGINS;\n}\n","import {SilentEventPlugin} from '../plugins/silent.plugin';\n\nexport type Predicate<T> = (this: T, ...args: any[]) => boolean;\n\nexport function shouldCall<T>(predicate: Predicate<T>): MethodDecorator {\n    return (_target, _key, desc: PropertyDescriptor) => {\n        const {value} = desc;\n\n        desc.value = function (this: T, ...args: any[]) {\n            if (!predicate.apply(this, args)) {\n                return;\n            }\n\n            if (SilentEventPlugin.ngZone) {\n                SilentEventPlugin.ngZone.run(() => value.apply(this, args));\n            } else {\n                value.apply(this, args);\n            }\n        };\n    };\n}\n","export function asCallable<T>(a: T): Function & T {\n    return a as any;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}