@taiga-ui/event-plugins
Version:
This is a library for optimizing performance sensitive events and declarative preventDefault and stopPropagation
1 lines • 29.2 kB
Source Map (JSON)
{"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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"}