{"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/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 {EventManagerPlugin} from '@angular/platform-browser';\n\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 extends EventManagerPlugin {\n    private readonly isIOS = !!SAFE_NAVIGATOR && isIos(SAFE_NAVIGATOR);\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 {EventManagerPlugin} from '@angular/platform-browser';\n\nexport abstract class TimedEventPlugin extends EventManagerPlugin {\n    protected abstract readonly regExp: RegExp;\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 {DOCUMENT} from '@angular/common';\nimport {inject, Injectable} from '@angular/core';\nimport {EventManagerPlugin} from '@angular/platform-browser';\n\n@Injectable()\nexport abstract class AbstractEventPlugin extends EventManagerPlugin {\n    protected abstract readonly modifier: string;\n\n    constructor() {\n        super(inject(DOCUMENT));\n    }\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\n                    .split('.')\n                    .reduce<any>((obj, prop) => obj?.[prop], document.defaultView);\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 {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, type NgZone} from '@angular/core';\n\nimport {AbstractEventPlugin} from './abstract.plugin';\n\n@Injectable()\nexport class ZonelessPlugin extends AbstractEventPlugin {\n    public static ngZone?: NgZone;\n\n    public readonly modifier: string = '.zoneless';\n\n    public addEventListener(\n        element: HTMLElement,\n        event: string,\n        handler: Function,\n    ): Function {\n        ZonelessPlugin.ngZone = this.manager.getZone();\n\n        return ZonelessPlugin.ngZone?.runOutsideAngular(() =>\n            this.manager.addEventListener(element, this.unwrap(event), handler),\n        );\n    }\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 {StopEventPlugin} from '../plugins/stop.plugin';\nimport {ThrottleEventPlugin} from '../plugins/throttle.plugin';\nimport {ZonelessPlugin} from '../plugins/zoneless.plugin';\n\nconst PLUGINS = [\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 {ZonelessPlugin} from '../plugins/zoneless.plugin';\n\nexport function shouldCall<T>(predicate: (this: T, ...args: any[]) => boolean): any {\n    return (\n        original: Function,\n        _context: ClassMethodDecoratorContext,\n        desc?: PropertyDescriptor,\n    ): any => {\n        const value = desc?.value || original;\n        const result = function (this: T, ...args: any[]): void {\n            if (!predicate.apply(this, args)) {\n                return;\n            }\n\n            if (ZonelessPlugin.ngZone) {\n                ZonelessPlugin.ngZone.run(() => value.apply(this, args));\n            } else {\n                value.apply(this, args);\n            }\n        };\n\n        if (!desc) {\n            return result;\n        }\n\n        desc.value = result;\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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"}