@taiga-ui/event-plugins
Version:
This is a library for optimizing performance sensitive events and declarative preventDefault and stopPropagation
1 lines • 27.5 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/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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"}