@ngutil/aria 0.0.69 → 0.0.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,44 @@
1
+ import { Position } from "@ngutil/style";
2
+ export type GestureDomEvent<T extends GestureEvent> = T extends GestureEvent<infer N> ? CustomEvent<T> & {
3
+ type: N;
4
+ } : never;
5
+ export interface GestureEvent<T extends string = string> {
6
+ readonly type: T;
7
+ readonly origin: GestureOrigin;
8
+ readonly target: HTMLElement;
9
+ readonly pointerType: GesturePointerType;
10
+ readonly phase: GesturePhase;
11
+ readonly pointers: ReadonlyArray<GesturePointer>;
12
+ readonly timeStamp: number;
13
+ readonly elapsed: number;
14
+ readonly scrollDistance?: Position;
15
+ }
16
+ export type PointersPosition = ReadonlyArray<Readonly<Position>>;
17
+ export interface GesturePointer {
18
+ readonly start: Position;
19
+ readonly current: Position;
20
+ readonly end?: Position;
21
+ readonly distance: Position;
22
+ readonly direction: {
23
+ x: -1 | 0 | 1;
24
+ y: -1 | 0 | 1;
25
+ };
26
+ }
27
+ export type GestureOrigin = MouseEvent | TouchEvent;
28
+ export declare const enum GesturePointerType {
29
+ Mouse = "mouse",
30
+ Touch = "touch"
31
+ }
32
+ export declare const enum GesturePhase {
33
+ Start = "start",
34
+ Moving = "moving",
35
+ End = "end"
36
+ }
37
+ export interface GestureListenerConfig {
38
+ options?: AddEventListenerOptions;
39
+ pointerType: GesturePointerType;
40
+ phase: GesturePhase;
41
+ }
42
+ export declare const Listeners: {
43
+ [key: string]: GestureListenerConfig;
44
+ };
@@ -0,0 +1,12 @@
1
+ import { Observable } from "rxjs";
2
+ import { Gesture, GestureCaptureState, GestureOptions } from "./gesture";
3
+ import { GestureEvent } from "./gesture-event";
4
+ export type GestureLongtapEvent = GestureEvent<"gesture-longtap">;
5
+ export type GestureLongtapOptions = GestureOptions<GestureLongTapImpl>;
6
+ export declare class GestureLongTapImpl extends Gesture<GestureLongtapEvent> {
7
+ constructor(options?: GestureLongtapOptions);
8
+ capture(events: Observable<GestureEvent>): Observable<GestureCaptureState>;
9
+ handle(events: Observable<GestureEvent>): Observable<import("utility-types").Mutable<GestureLongtapEvent>>;
10
+ }
11
+ export declare function gestureLongTap(options?: GestureLongtapOptions): GestureLongTapImpl;
12
+ export declare const GestureLongTap: GestureLongTapImpl;
@@ -0,0 +1,12 @@
1
+ import { Observable } from "rxjs";
2
+ import { Gesture, GestureCaptureState, GestureOptions } from "./gesture";
3
+ import { GestureEvent } from "./gesture-event";
4
+ export type GestureTapEvent = GestureEvent<"gesture-tap">;
5
+ export type GestureTapOptions = GestureOptions<GestureTapImpl>;
6
+ export declare class GestureTapImpl extends Gesture<GestureTapEvent> {
7
+ constructor(options?: GestureTapOptions);
8
+ capture(events: Observable<GestureEvent>): Observable<GestureCaptureState>;
9
+ handle(events: Observable<GestureEvent>): Observable<import("utility-types").Mutable<GestureTapEvent>>;
10
+ }
11
+ export declare function gestureTap(options?: GestureTapOptions): GestureTapImpl;
12
+ export declare const GestureTap: GestureTapImpl;
@@ -0,0 +1,35 @@
1
+ import { Observable } from "rxjs";
2
+ import { FunctionKeys, Mutable } from "utility-types";
3
+ import { GestureEvent, GesturePointerType } from "./gesture-event";
4
+ export declare const enum GestureCaptureState {
5
+ Unchecked = 0,
6
+ Pending = 1,
7
+ Skip = 2,
8
+ Maybe = 3,
9
+ Instant = 4
10
+ }
11
+ type _GestureOptions = Partial<Omit<Gesture<any>, "filterListeners" | "name" | FunctionKeys<Gesture<any>>>>;
12
+ export type GestureOptions<T extends object> = Partial<Omit<T, keyof Gesture<any> | FunctionKeys<T>>> & _GestureOptions;
13
+ export declare abstract class Gesture<T extends GestureEvent = GestureEvent> {
14
+ readonly name: string;
15
+ readonly distanceInclusion = 10;
16
+ readonly timeWithin = 300;
17
+ readonly priority = 0;
18
+ readonly includeScrollDistance: boolean;
19
+ readonly filterPointerTypes: Array<GesturePointerType>;
20
+ readonly filterMouseButtons: Array<number>;
21
+ readonly filterListeners: Array<keyof DocumentEventMap>;
22
+ constructor(name: string, listeners: Array<keyof DocumentEventMap>, options?: _GestureOptions);
23
+ /**
24
+ * Test if the gesture should be captured.
25
+ * ! important, dont rely on this object state, because not always create a new object
26
+ */
27
+ abstract capture(events: Observable<GestureEvent>): Observable<GestureCaptureState>;
28
+ /**
29
+ * Transform input event, to gesture event
30
+ * ! important, dont rely on this object state, because not always create a new object
31
+ */
32
+ handle(events: Observable<GestureEvent>): Observable<Mutable<T>>;
33
+ filterByEvent: <T_1 extends GestureEvent>(event: T_1) => event is T_1;
34
+ }
35
+ export {};
@@ -0,0 +1,22 @@
1
+ import { Observable } from "rxjs";
2
+ import { ElementInput } from "@ngutil/common";
3
+ import { Gesture } from "./gesture";
4
+ import { GestureDomEvent } from "./gesture-event";
5
+ import * as i0 from "@angular/core";
6
+ type GesturesToEventsType<T extends Array<Gesture>> = T extends Array<infer G> ? (G extends Gesture<infer E> ? E : never) : never;
7
+ type GestureEventDiscriminator<T> = T extends {
8
+ type: infer N;
9
+ } ? {
10
+ type: N;
11
+ } & T : never;
12
+ export type GestureWatchReturns<T extends Array<Gesture>> = Observable<GestureEventDiscriminator<GesturesToEventsType<T>>>;
13
+ export type GestureListenReturns<T extends Array<Gesture>> = Observable<GestureDomEvent<GesturesToEventsType<T>>>;
14
+ export declare class GestureService {
15
+ #private;
16
+ constructor();
17
+ listen<T extends Array<Gesture>>(el: ElementInput, ...gestures: T): GestureListenReturns<T>;
18
+ watch<T extends Array<Gesture>>(el: ElementInput, ...gestures: T): GestureWatchReturns<T>;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<GestureService, never>;
20
+ static ɵprov: i0.ɵɵInjectableDeclaration<GestureService>;
21
+ }
22
+ export {};
@@ -1,2 +1,6 @@
1
- export * from "./gestures";
2
- export * from "./gestures.service";
1
+ export * from "./gesture-drag";
2
+ export * from "./gesture-event";
3
+ export * from "./gesture-longtap";
4
+ export * from "./gesture-tap";
5
+ export * from "./gesture.service";
6
+ export * from "./gesture";
package/package.json CHANGED
@@ -1,15 +1,16 @@
1
1
  {
2
2
  "name": "@ngutil/aria",
3
- "version": "0.0.69",
3
+ "version": "0.0.71",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "18.2.6",
6
6
  "@angular/common": "18.2.6",
7
7
  "@angular/core": "18.2.6",
8
+ "lodash-es": "^4.17.21",
8
9
  "rxjs": "^7.8.1",
9
10
  "tabbable": "^6.2.0",
10
11
  "utility-types": "^3.11.0",
11
- "@ngutil/common": "0.0.69",
12
- "@ngutil/style": "0.0.69"
12
+ "@ngutil/style": "0.0.71",
13
+ "@ngutil/common": "0.0.71"
13
14
  },
14
15
  "publishConfig": {
15
16
  "access": "public",
@@ -1,55 +0,0 @@
1
- export function stateToEvent(state, type) {
2
- return {
3
- type: type,
4
- origin: state.origin,
5
- target: state.target,
6
- pointerType: state.pointerType,
7
- phase: state.phase,
8
- pointers: state.pointers
9
- };
10
- }
11
- export const Listeners = {
12
- mousedown: {
13
- target: "element" /* ListenerTarget.Element */,
14
- pointerType: "mouse" /* GesturePointerType.Mouse */,
15
- phase: "start" /* GesturePhase.Start */,
16
- options: { capture: true, passive: false }
17
- },
18
- mousemove: {
19
- target: "document" /* ListenerTarget.Document */,
20
- pointerType: "mouse" /* GesturePointerType.Mouse */,
21
- phase: "moving" /* GesturePhase.Moving */,
22
- options: { capture: true, passive: false }
23
- },
24
- mouseup: {
25
- target: "document" /* ListenerTarget.Document */,
26
- pointerType: "mouse" /* GesturePointerType.Mouse */,
27
- phase: "end" /* GesturePhase.End */,
28
- options: { capture: true, passive: true }
29
- },
30
- touchstart: {
31
- target: "element" /* ListenerTarget.Element */,
32
- pointerType: "touch" /* GesturePointerType.Touch */,
33
- phase: "start" /* GesturePhase.Start */,
34
- options: { capture: true, passive: false }
35
- },
36
- touchmove: {
37
- target: "document" /* ListenerTarget.Document */,
38
- pointerType: "touch" /* GesturePointerType.Touch */,
39
- phase: "moving" /* GesturePhase.Moving */,
40
- options: { capture: true, passive: false }
41
- },
42
- touchend: {
43
- target: "document" /* ListenerTarget.Document */,
44
- pointerType: "touch" /* GesturePointerType.Touch */,
45
- phase: "end" /* GesturePhase.End */,
46
- options: { capture: true, passive: false }
47
- },
48
- touchcancel: {
49
- target: "document" /* ListenerTarget.Document */,
50
- pointerType: "touch" /* GesturePointerType.Touch */,
51
- phase: "end" /* GesturePhase.End */,
52
- options: { capture: true, passive: true }
53
- }
54
- };
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2Jhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9nZXN0dXJlcy9nZXN0dXJlcy9fYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnRUEsTUFBTSxVQUFVLFlBQVksQ0FBeUIsS0FBd0IsRUFBRSxJQUFZO0lBQ3ZGLE9BQU87UUFDSCxJQUFJLEVBQUUsSUFBSTtRQUNWLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTztRQUNyQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU87UUFDckIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFZO1FBQy9CLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBTTtRQUNuQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVM7S0FDdkIsQ0FBQTtBQUNWLENBQUM7QUFjRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQXNDO0lBQ3hELFNBQVMsRUFBRTtRQUNQLE1BQU0sd0NBQXdCO1FBQzlCLFdBQVcsd0NBQTBCO1FBQ3JDLEtBQUssa0NBQW9CO1FBQ3pCLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtLQUM3QztJQUNELFNBQVMsRUFBRTtRQUNQLE1BQU0sMENBQXlCO1FBQy9CLFdBQVcsd0NBQTBCO1FBQ3JDLEtBQUssb0NBQXFCO1FBQzFCLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtLQUM3QztJQUNELE9BQU8sRUFBRTtRQUNMLE1BQU0sMENBQXlCO1FBQy9CLFdBQVcsd0NBQTBCO1FBQ3JDLEtBQUssOEJBQWtCO1FBQ3ZCLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtLQUM1QztJQUNELFVBQVUsRUFBRTtRQUNSLE1BQU0sd0NBQXdCO1FBQzlCLFdBQVcsd0NBQTBCO1FBQ3JDLEtBQUssa0NBQW9CO1FBQ3pCLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtLQUM3QztJQUNELFNBQVMsRUFBRTtRQUNQLE1BQU0sMENBQXlCO1FBQy9CLFdBQVcsd0NBQTBCO1FBQ3JDLEtBQUssb0NBQXFCO1FBQzFCLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtLQUM3QztJQUNELFFBQVEsRUFBRTtRQUNOLE1BQU0sMENBQXlCO1FBQy9CLFdBQVcsd0NBQTBCO1FBQ3JDLEtBQUssOEJBQWtCO1FBQ3ZCLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtLQUM3QztJQUNELFdBQVcsRUFBRTtRQUNULE1BQU0sMENBQXlCO1FBQy9CLFdBQVcsd0NBQTBCO1FBQ3JDLEtBQUssOEJBQWtCO1FBQ3ZCLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtLQUM1QztDQUNLLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBNdXRhYmxlIH0gZnJvbSBcInV0aWxpdHktdHlwZXNcIlxuXG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gXCJAbmd1dGlsL3N0eWxlXCJcblxuZXhwb3J0IGludGVyZmFjZSBHZXN0dXJlPFQgZXh0ZW5kcyBHZXN0dXJlRXZlbnQ+IHtcbiAgICBuYW1lOiBzdHJpbmdcbiAgICBwcmlvcml0eTogbnVtYmVyXG4gICAgbGlzdGVuZXJzPzogQXJyYXk8a2V5b2YgRG9jdW1lbnRFdmVudE1hcD5cbiAgICBoYW5kbGVyOiBHZXN0dXJlSGFuZGxlcjxUPlxufVxuXG5leHBvcnQgdHlwZSBHZXN0dXJlSGFuZGxlcjxUIGV4dGVuZHMgR2VzdHVyZUV2ZW50PiA9IChldmVudHM6IE9ic2VydmFibGU8R2VzdHVyZU1hdGNoU3RhdGU8VD4+KSA9PiBPYnNlcnZhYmxlPFQ+XG5cbmV4cG9ydCB0eXBlIEdlc3R1cmVMaXN0ZW5lciA9IHtcbiAgICBuYW1lOiBrZXlvZiBEb2N1bWVudEV2ZW50TWFwXG4gICAgdGFyZ2V0OiBMaXN0ZW5lclRhcmdldFxuICAgIC8vIG9wdGlvbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9uc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlc3R1cmVFdmVudDxUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG4gICAgcmVhZG9ubHkgdHlwZTogVFxuICAgIHJlYWRvbmx5IG9yaWdpbjogR2VzdHVyZU9yaWdpblxuICAgIHJlYWRvbmx5IHRhcmdldDogSFRNTEVsZW1lbnRcbiAgICByZWFkb25seSBwb2ludGVyVHlwZTogR2VzdHVyZVBvaW50ZXJUeXBlXG4gICAgcmVhZG9ubHkgcGhhc2U6IEdlc3R1cmVQaGFzZVxuICAgIHJlYWRvbmx5IHBvaW50ZXJzOiBSZWFkb25seUFycmF5PEdlc3R1cmVQb2ludGVyPlxuXG4gICAgcHJldmVudERlZmF1bHQoKTogdm9pZFxufVxuXG50eXBlIEdlc3R1cmVFdmVudEZpeEZpZWxkcyA9IFwidGFyZ2V0XCIgfCBcIm9yaWdpblwiIHwgXCJwb2ludGVyc1wiIHwgXCJwaGFzZVwiIHwgXCJwb2ludGVyVHlwZVwiIHwgXCJwcmV2ZW50RGVmYXVsdFwiXG5cbmV4cG9ydCB0eXBlIFBvaW50ZXJzUG9zaXRpb24gPSBSZWFkb25seUFycmF5PFJlYWRvbmx5PFBvc2l0aW9uPj5cblxuZXhwb3J0IGludGVyZmFjZSBHZXN0dXJlUG9pbnRlciB7XG4gICAgcmVhZG9ubHkgc3RhcnQ6IFBvc2l0aW9uXG4gICAgcmVhZG9ubHkgY3VycmVudDogUG9zaXRpb25cbiAgICByZWFkb25seSBlbmQ/OiBQb3NpdGlvblxuICAgIHJlYWRvbmx5IGRpc3RhbmNlOiBQb3NpdGlvblxuICAgIHJlYWRvbmx5IGRpcmVjdGlvbjogeyB4OiAtMSB8IDAgfCAxOyB5OiAtMSB8IDAgfCAxIH1cbn1cblxuZXhwb3J0IHR5cGUgR2VzdHVyZU9yaWdpbiA9IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50XG5cbmV4cG9ydCBjb25zdCBlbnVtIEdlc3R1cmVQb2ludGVyVHlwZSB7XG4gICAgTW91c2UgPSBcIm1vdXNlXCIsXG4gICAgVG91Y2ggPSBcInRvdWNoXCJcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gR2VzdHVyZVBoYXNlIHtcbiAgICBTdGFydCA9IFwic3RhcnRcIixcbiAgICBNb3ZpbmcgPSBcIm1vdmluZ1wiLFxuICAgIEVuZCA9IFwiZW5kXCJcbn1cblxuZXhwb3J0IHR5cGUgR2VzdHVyZU1hdGNoU3RhdGU8VCBleHRlbmRzIEdlc3R1cmVFdmVudCA9IEdlc3R1cmVFdmVudD4gPSBQYXJ0aWFsPFxuICAgIE11dGFibGU8T21pdDxULCBHZXN0dXJlRXZlbnRGaXhGaWVsZHM+PlxuPiAmXG4gICAgUGljazxULCBHZXN0dXJlRXZlbnRGaXhGaWVsZHM+ICYge1xuICAgICAgICByZWFkb25seSBwZW5kaW5nPzogQXJyYXk8c3RyaW5nPlxuICAgIH1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlVG9FdmVudDxUIGV4dGVuZHMgR2VzdHVyZUV2ZW50PihzdGF0ZTogR2VzdHVyZU1hdGNoU3RhdGUsIHR5cGU6IHN0cmluZyk6IFQge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIG9yaWdpbjogc3RhdGUub3JpZ2luISxcbiAgICAgICAgdGFyZ2V0OiBzdGF0ZS50YXJnZXQhLFxuICAgICAgICBwb2ludGVyVHlwZTogc3RhdGUucG9pbnRlclR5cGUhLFxuICAgICAgICBwaGFzZTogc3RhdGUucGhhc2UhLFxuICAgICAgICBwb2ludGVyczogc3RhdGUucG9pbnRlcnMhXG4gICAgfSBhcyBUXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdGVuZXJDb25maWcge1xuICAgIHRhcmdldDogTGlzdGVuZXJUYXJnZXRcbiAgICBvcHRpb25zPzogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnNcbiAgICBwb2ludGVyVHlwZTogR2VzdHVyZVBvaW50ZXJUeXBlXG4gICAgcGhhc2U6IEdlc3R1cmVQaGFzZVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBMaXN0ZW5lclRhcmdldCB7XG4gICAgRG9jdW1lbnQgPSBcImRvY3VtZW50XCIsXG4gICAgRWxlbWVudCA9IFwiZWxlbWVudFwiXG59XG5cbmV4cG9ydCBjb25zdCBMaXN0ZW5lcnM6IHsgW2tleTogc3RyaW5nXTogTGlzdGVuZXJDb25maWcgfSA9IHtcbiAgICBtb3VzZWRvd246IHtcbiAgICAgICAgdGFyZ2V0OiBMaXN0ZW5lclRhcmdldC5FbGVtZW50LFxuICAgICAgICBwb2ludGVyVHlwZTogR2VzdHVyZVBvaW50ZXJUeXBlLk1vdXNlLFxuICAgICAgICBwaGFzZTogR2VzdHVyZVBoYXNlLlN0YXJ0LFxuICAgICAgICBvcHRpb25zOiB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IGZhbHNlIH1cbiAgICB9LFxuICAgIG1vdXNlbW92ZToge1xuICAgICAgICB0YXJnZXQ6IExpc3RlbmVyVGFyZ2V0LkRvY3VtZW50LFxuICAgICAgICBwb2ludGVyVHlwZTogR2VzdHVyZVBvaW50ZXJUeXBlLk1vdXNlLFxuICAgICAgICBwaGFzZTogR2VzdHVyZVBoYXNlLk1vdmluZyxcbiAgICAgICAgb3B0aW9uczogeyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiBmYWxzZSB9XG4gICAgfSxcbiAgICBtb3VzZXVwOiB7XG4gICAgICAgIHRhcmdldDogTGlzdGVuZXJUYXJnZXQuRG9jdW1lbnQsXG4gICAgICAgIHBvaW50ZXJUeXBlOiBHZXN0dXJlUG9pbnRlclR5cGUuTW91c2UsXG4gICAgICAgIHBoYXNlOiBHZXN0dXJlUGhhc2UuRW5kLFxuICAgICAgICBvcHRpb25zOiB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfVxuICAgIH0sXG4gICAgdG91Y2hzdGFydDoge1xuICAgICAgICB0YXJnZXQ6IExpc3RlbmVyVGFyZ2V0LkVsZW1lbnQsXG4gICAgICAgIHBvaW50ZXJUeXBlOiBHZXN0dXJlUG9pbnRlclR5cGUuVG91Y2gsXG4gICAgICAgIHBoYXNlOiBHZXN0dXJlUGhhc2UuU3RhcnQsXG4gICAgICAgIG9wdGlvbnM6IHsgY2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogZmFsc2UgfVxuICAgIH0sXG4gICAgdG91Y2htb3ZlOiB7XG4gICAgICAgIHRhcmdldDogTGlzdGVuZXJUYXJnZXQuRG9jdW1lbnQsXG4gICAgICAgIHBvaW50ZXJUeXBlOiBHZXN0dXJlUG9pbnRlclR5cGUuVG91Y2gsXG4gICAgICAgIHBoYXNlOiBHZXN0dXJlUGhhc2UuTW92aW5nLFxuICAgICAgICBvcHRpb25zOiB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IGZhbHNlIH1cbiAgICB9LFxuICAgIHRvdWNoZW5kOiB7XG4gICAgICAgIHRhcmdldDogTGlzdGVuZXJUYXJnZXQuRG9jdW1lbnQsXG4gICAgICAgIHBvaW50ZXJUeXBlOiBHZXN0dXJlUG9pbnRlclR5cGUuVG91Y2gsXG4gICAgICAgIHBoYXNlOiBHZXN0dXJlUGhhc2UuRW5kLFxuICAgICAgICBvcHRpb25zOiB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IGZhbHNlIH1cbiAgICB9LFxuICAgIHRvdWNoY2FuY2VsOiB7XG4gICAgICAgIHRhcmdldDogTGlzdGVuZXJUYXJnZXQuRG9jdW1lbnQsXG4gICAgICAgIHBvaW50ZXJUeXBlOiBHZXN0dXJlUG9pbnRlclR5cGUuVG91Y2gsXG4gICAgICAgIHBoYXNlOiBHZXN0dXJlUGhhc2UuRW5kLFxuICAgICAgICBvcHRpb25zOiB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfVxuICAgIH1cbn0gYXMgY29uc3RcbiJdfQ==
@@ -1,14 +0,0 @@
1
- import { filter, map, tap } from "rxjs";
2
- import { stateToEvent } from "./_base";
3
- const TypeMap = {
4
- ["start" /* GesturePhase.Start */]: "dragging-start",
5
- ["moving" /* GesturePhase.Moving */]: "dragging-move",
6
- ["end" /* GesturePhase.End */]: "dragging-end"
7
- };
8
- export const Dragging = {
9
- name: "dragging",
10
- listeners: ["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend", "touchcancel"],
11
- priority: 0,
12
- handler: events => events.pipe(filter(state => !state.pending || state.pending.length === 0), tap(state => state.preventDefault()), map(state => stateToEvent(state, TypeMap[state.phase])))
13
- };
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9nZXN0dXJlcy9nZXN0dXJlcy9kcmFnZ2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFdkMsT0FBTyxFQUF1QyxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFNM0UsTUFBTSxPQUFPLEdBQUc7SUFDWixrQ0FBb0IsRUFBRSxnQkFBZ0I7SUFDdEMsb0NBQXFCLEVBQUUsZUFBZTtJQUN0Qyw4QkFBa0IsRUFBRSxjQUFjO0NBQ3JDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQTJCO0lBQzVDLElBQUksRUFBRSxVQUFVO0lBQ2hCLFNBQVMsRUFBRSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQztJQUN0RyxRQUFRLEVBQUUsQ0FBQztJQUNYLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUNkLE1BQU0sQ0FBQyxJQUFJLENBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUM3RCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUMsRUFDcEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDMUQ7Q0FDUixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgR2VzdHVyZSwgR2VzdHVyZUV2ZW50LCBHZXN0dXJlUGhhc2UsIHN0YXRlVG9FdmVudCB9IGZyb20gXCIuL19iYXNlXCJcblxuLy8gZXhwb3J0IHR5cGUgRHJhZ2dpbmdFdmVudCA9IEdlc3R1cmVFdmVudDxcImRyYWdnaW5nLXN0YXJ0XCIgfCBcImRyYWdnaW5nLWVuZFwiIHwgXCJkcmFnZ2luZy1tb3ZlXCI+XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJhZ2dpbmdFdmVudCBleHRlbmRzIEdlc3R1cmVFdmVudDxcImRyYWdnaW5nLXN0YXJ0XCIgfCBcImRyYWdnaW5nLWVuZFwiIHwgXCJkcmFnZ2luZy1tb3ZlXCI+IHt9XG5cbmNvbnN0IFR5cGVNYXAgPSB7XG4gICAgW0dlc3R1cmVQaGFzZS5TdGFydF06IFwiZHJhZ2dpbmctc3RhcnRcIixcbiAgICBbR2VzdHVyZVBoYXNlLk1vdmluZ106IFwiZHJhZ2dpbmctbW92ZVwiLFxuICAgIFtHZXN0dXJlUGhhc2UuRW5kXTogXCJkcmFnZ2luZy1lbmRcIlxufVxuXG5leHBvcnQgY29uc3QgRHJhZ2dpbmc6IEdlc3R1cmU8RHJhZ2dpbmdFdmVudD4gPSB7XG4gICAgbmFtZTogXCJkcmFnZ2luZ1wiLFxuICAgIGxpc3RlbmVyczogW1wibW91c2Vkb3duXCIsIFwibW91c2Vtb3ZlXCIsIFwibW91c2V1cFwiLCBcInRvdWNoc3RhcnRcIiwgXCJ0b3VjaG1vdmVcIiwgXCJ0b3VjaGVuZFwiLCBcInRvdWNoY2FuY2VsXCJdLFxuICAgIHByaW9yaXR5OiAwLFxuICAgIGhhbmRsZXI6IGV2ZW50cyA9PlxuICAgICAgICBldmVudHMucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihzdGF0ZSA9PiAhc3RhdGUucGVuZGluZyB8fCBzdGF0ZS5wZW5kaW5nLmxlbmd0aCA9PT0gMCksXG4gICAgICAgICAgICB0YXAoc3RhdGUgPT4gc3RhdGUucHJldmVudERlZmF1bHQoKSksXG4gICAgICAgICAgICBtYXAoc3RhdGUgPT4gc3RhdGVUb0V2ZW50KHN0YXRlLCBUeXBlTWFwW3N0YXRlLnBoYXNlXSkpXG4gICAgICAgIClcbn1cbiJdfQ==
@@ -1,3 +0,0 @@
1
- export * from "./_base";
2
- export * from "./dragging";
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9nZXN0dXJlcy9nZXN0dXJlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQTtBQUN2QixjQUFjLFlBQVksQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL19iYXNlXCJcbmV4cG9ydCAqIGZyb20gXCIuL2RyYWdnaW5nXCJcbiJdfQ==
@@ -1,146 +0,0 @@
1
- import { DOCUMENT } from "@angular/common";
2
- import { inject, Injectable, NgZone } from "@angular/core";
3
- import { concatMap, filter, finalize, fromEvent, map, merge, of, scan, share, startWith, takeWhile, tap } from "rxjs";
4
- import { flatten } from "lodash";
5
- import { coerceElement } from "@ngutil/common";
6
- import { Listeners } from "./gestures";
7
- import * as i0 from "@angular/core";
8
- export class GesturesService {
9
- #document = inject(DOCUMENT);
10
- #zone = inject(NgZone);
11
- #listeners = new Map();
12
- watch(el, ...gestures) {
13
- return this.#zone.runOutsideAngular(() => {
14
- const listeners = flatten(gestures.map(v => v.listeners || []));
15
- const { trigger, watch } = this.#getListeners(coerceElement(el), listeners);
16
- let pointerType;
17
- return trigger.pipe(filter(state => {
18
- if (pointerType == null) {
19
- pointerType = state.pointerType;
20
- }
21
- return pointerType === state.pointerType;
22
- }), concatMap(v => this.#zone.runOutsideAngular(() => {
23
- const watching = watch[pointerType].pipe(startWith(v), scan((state, curr) => updatePointers({ ...state, ...curr }), {}), takeWhile(state => state.phase !== "end" /* GesturePhase.End */, true), share());
24
- return merge(...gestures.map(v => v.handler(watching)));
25
- })));
26
- });
27
- }
28
- #getListeners(inputEl, listeners) {
29
- const triggers = [];
30
- const watches = {};
31
- for (const name of listeners) {
32
- const conf = Listeners[name];
33
- const container = conf.phase === "start" /* GesturePhase.Start */
34
- ? triggers
35
- : (watches[conf.pointerType] = watches[conf.pointerType] || []);
36
- if (container.indexOf(name) === -1) {
37
- container.push(name);
38
- }
39
- }
40
- if (triggers.length === 0) {
41
- throw Error("Missing start events");
42
- }
43
- const observable = (names) => {
44
- if (names.length === 0) {
45
- return of();
46
- }
47
- else if (names.length === 1) {
48
- return this.#getListener(inputEl, names[0]);
49
- }
50
- else {
51
- return merge(...names.map(v => this.#getListener(inputEl, v)));
52
- }
53
- };
54
- return {
55
- trigger: observable(triggers),
56
- watch: {
57
- ["mouse" /* GesturePointerType.Mouse */]: observable(watches["mouse" /* GesturePointerType.Mouse */]),
58
- ["touch" /* GesturePointerType.Touch */]: observable(watches["touch" /* GesturePointerType.Touch */])
59
- }
60
- };
61
- }
62
- #getListener(inputEl, name) {
63
- return this.#zone.runOutsideAngular(() => {
64
- const target = Listeners[name].target;
65
- const targetObj = target === "document" ? this.#document : inputEl;
66
- let targetListeners = this.#listeners.get(targetObj);
67
- if (targetListeners == null) {
68
- targetListeners = new Map();
69
- this.#listeners.set(targetObj, targetListeners);
70
- }
71
- let listener = targetListeners.get(name);
72
- if (listener == null) {
73
- const { phase, pointerType, options } = Listeners[name];
74
- const passive = options?.passive;
75
- listener = fromEvent(targetObj, name, options).pipe(finalize(() => {
76
- targetListeners.delete(name);
77
- }), map(origin => ({
78
- origin,
79
- phase,
80
- pointerType,
81
- preventDefault: passive === false ? origin.preventDefault.bind(origin) : noop
82
- })));
83
- if (phase === "start" /* GesturePhase.Start */) {
84
- listener = listener.pipe(tap(state => {
85
- ;
86
- state.target = state.origin.target;
87
- }));
88
- }
89
- listener = listener.pipe(share());
90
- targetListeners.set(name, listener);
91
- }
92
- return listener;
93
- });
94
- }
95
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: GesturesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
96
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: GesturesService, providedIn: "root" }); }
97
- }
98
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: GesturesService, decorators: [{
99
- type: Injectable,
100
- args: [{ providedIn: "root" }]
101
- }] });
102
- function pointersFromEvent(event) {
103
- if (event instanceof MouseEvent) {
104
- return [
105
- {
106
- x: event.clientX,
107
- y: event.clientY
108
- }
109
- ];
110
- }
111
- else {
112
- return Array.from(event.touches).map(t => {
113
- return { x: t.clientX, y: t.clientY };
114
- });
115
- }
116
- }
117
- function updatePointers(state) {
118
- if (state.phase === "start" /* GesturePhase.Start */) {
119
- state.pointers = pointersFromEvent(state.origin).map(v => {
120
- return { start: v, current: v, distance: { x: 0, y: 0 }, direction: { x: 0, y: 0 } };
121
- });
122
- }
123
- else if (state.pointers) {
124
- const pointers = pointersFromEvent(state.origin);
125
- if (pointers.length === 0) {
126
- return state;
127
- }
128
- state.pointers = state.pointers.map((v, i) => {
129
- const p = pointers[i];
130
- return {
131
- start: v.start,
132
- current: p,
133
- distance: { x: p.x - v.start.x, y: p.y - v.start.y },
134
- direction: { x: direction(v.start.x, p.x), y: direction(v.start.y, p.y) }
135
- };
136
- });
137
- }
138
- return state;
139
- }
140
- function direction(prev, curr) {
141
- return curr > prev ? 1 : curr < prev ? -1 : 0;
142
- }
143
- // const svc = new GesturesService()
144
- // const w = svc.watch(document.createElement("div"), DragAndDrop)
145
- function noop() { }
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdHVyZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FyaWEvc3JjL2dlc3R1cmVzL2dlc3R1cmVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUUxRCxPQUFPLEVBQ0gsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsU0FBUyxFQUNULEdBQUcsRUFDSCxLQUFLLEVBRUwsRUFBRSxFQUNGLElBQUksRUFDSixLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxHQUFHLEVBQ04sTUFBTSxNQUFNLENBQUE7QUFFYixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBR2hDLE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUE7QUFHNUQsT0FBTyxFQU9ILFNBQVMsRUFDWixNQUFNLFlBQVksQ0FBQTs7QUFHbkIsTUFBTSxPQUFPLGVBQWU7SUFDZixTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzVCLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDdEIsVUFBVSxHQUFHLElBQUksR0FBRyxFQUFzRSxDQUFBO0lBRW5HLEtBQUssQ0FBeUIsRUFBZ0IsRUFBRSxHQUFHLFFBQXNCO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDckMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDL0QsTUFBTSxFQUFFLE9BQU8s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LE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNyQixPQUFPO2dCQUNILEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztnQkFDZCxPQUFPLEVBQUUsQ0FBQztnQkFDVixRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDcEQsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7YUFDNUUsQ0FBQTtRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2hCLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxJQUFZLEVBQUUsSUFBWTtJQUN6QyxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNqRCxDQUFDO0FBRUQsb0NBQW9DO0FBQ3BDLGtFQUFrRTtBQUNsRSxTQUFTLElBQUksS0FBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQge1xuICAgIGNvbmNhdE1hcCxcbiAgICBmaWx0ZXIsXG4gICAgZmluYWxpemUsXG4gICAgZnJvbUV2ZW50LFxuICAgIG1hcCxcbiAgICBtZXJnZSxcbiAgICBPYnNlcnZhYmxlLFxuICAgIG9mLFxuICAgIHNjYW4sXG4gICAgc2hhcmUsXG4gICAgc3RhcnRXaXRoLFxuICAgIHRha2VXaGlsZSxcbiAgICB0YXBcbn0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSBcImxvZGFzaFwiXG5pbXBvcnQgeyBNdXRhYmxlIH0gZnJvbSBcInV0aWxpdHktdHlwZXNcIlxuXG5pbXBvcnQgeyBjb2VyY2VFbGVtZW50LCBFbGVtZW50SW5wdXQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tIFwiQG5ndXRpbC9zdHlsZVwiXG5cbmltcG9ydCB7XG4gICAgR2VzdHVyZSxcbiAgICBHZXN0dXJlRXZlbnQsXG4gICAgR2VzdHVyZU1hdGNoU3RhdGUsXG4gICAgR2VzdHVyZU9yaWdpbixcbiAgICBHZXN0dXJlUGhhc2UsXG4gICAgR2VzdHVyZVBvaW50ZXJUeXBlLFxuICAgIExpc3RlbmVyc1xufSBmcm9tIFwiLi9nZXN0dXJlc1wiXG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBHZXN0dXJlc1NlcnZpY2Uge1xuICAgIHJlYWRvbmx5ICNkb2N1bWVudCA9IGluamVjdChET0NVTUVOVClcbiAgICByZWFkb25seSAjem9uZSA9IGluamVjdChOZ1pvbmUpXG4gICAgcmVhZG9ubHkgI2xpc3RlbmVycyA9IG5ldyBNYXA8SFRNTEVsZW1lbnQgfCBEb2N1bWVudCwgTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxHZXN0dXJlTWF0Y2hTdGF0ZT4+PigpXG5cbiAgICB3YXRjaDxUIGV4dGVuZHMgR2VzdHVyZUV2ZW50PihlbDogRWxlbWVudElucHV0LCAuLi5nZXN0dXJlczogR2VzdHVyZTxUPltdKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLiN6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGZsYXR0ZW4oZ2VzdHVyZXMubWFwKHYgPT4gdi5saXN0ZW5lcnMgfHwgW10pKVxuICAgICAgICAgICAgY29uc3QgeyB0cmlnZ2VyLCB3YXRjaCB9ID0gdGhpcy4jZ2V0TGlzdGVuZXJzKGNvZXJjZUVsZW1lbnQoZWwpLCBsaXN0ZW5lcnMpXG5cbiAgICAgICAgICAgIGxldCBwb2ludGVyVHlwZTogR2VzdHVyZVBvaW50ZXJUeXBlIHwgdW5kZWZpbmVkXG4gICAgICAgICAgICByZXR1cm4gdHJpZ2dlci5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihzdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb2ludGVyVHlwZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyVHlwZSA9IHN0YXRlLnBvaW50ZXJUeXBlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvaW50ZXJUeXBlID09PSBzdGF0ZS5wb2ludGVyVHlwZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNvbmNhdE1hcCh2ID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2F0Y2hpbmcgPSB3YXRjaFtwb2ludGVyVHlwZSFdLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKHYpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSwgY3VycikgPT4gdXBkYXRlUG9pbnRlcnM8VD4oeyAuLi5zdGF0ZSwgLi4uY3VyciB9IGFzIFQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSBhcyBHZXN0dXJlTWF0Y2hTdGF0ZTxUPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVdoaWxlKHN0YXRlID0+IHN0YXRlLnBoYXNlICE9PSBHZXN0dXJlUGhhc2UuRW5kLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2UoLi4uZ2VzdHVyZXMubWFwKHYgPT4gdi5oYW5kbGVyKHdhdGNoaW5nKSkpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgICNnZXRMaXN0ZW5lcnM8VCBleHRlbmRzIEdlc3R1cmVFdmVudD4oaW5wdXRFbDogSFRNTEVsZW1lbnQsIGxpc3RlbmVyczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlcnM6IHN0cmluZ1tdID0gW11cbiAgICAgICAgY29uc3Qgd2F0Y2hlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgbGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBjb25mID0gTGlzdGVuZXJzW25hbWVdXG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9XG4gICAgICAgICAgICAgICAgY29uZi5waGFzZSA9PT0gR2VzdHVyZVBoYXNlLlN0YXJ0XG4gICAgICAgICAgICAgICAgICAgID8gdHJpZ2dlcnNcbiAgICAgICAgICAgICAgICAgICAgOiAod2F0Y2hlc1tjb25mLnBvaW50ZXJUeXBlXSA9IHdhdGNoZXNbY29uZi5wb2ludGVyVHlwZV0gfHwgW10pXG5cbiAgICAgICAgICAgIGlmIChjb250YWluZXIuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIucHVzaChuYW1lKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyaWdnZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJNaXNzaW5nIHN0YXJ0IGV2ZW50c1wiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSA9IChuYW1lczogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4jZ2V0TGlzdGVuZXI8VD4oaW5wdXRFbCwgbmFtZXNbMF0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZSguLi5uYW1lcy5tYXAodiA9PiB0aGlzLiNnZXRMaXN0ZW5lcjxUPihpbnB1dEVsLCB2KSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHJpZ2dlcjogb2JzZXJ2YWJsZSh0cmlnZ2VycyksXG4gICAgICAgICAgICB3YXRjaDoge1xuICAgICAgICAgICAgICAgIFtHZXN0dXJlUG9pbnRlclR5cGUuTW91c2VdOiBvYnNlcnZhYmxlKHdhdGNoZXNbR2VzdHVyZVBvaW50ZXJUeXBlLk1vdXNlXSksXG4gICAgICAgICAgICAgICAgW0dlc3R1cmVQb2ludGVyVHlwZS5Ub3VjaF06IG9ic2VydmFibGUod2F0Y2hlc1tHZXN0dXJlUG9pbnRlclR5cGUuVG91Y2hdKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2dldExpc3RlbmVyPFQgZXh0ZW5kcyBHZXN0dXJlRXZlbnQ+KGlucHV0RWw6IEhUTUxFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEdlc3R1cmVNYXRjaFN0YXRlPFQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLiN6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IExpc3RlbmVyc1tuYW1lXS50YXJnZXRcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldE9iaiA9IHRhcmdldCA9PT0gXCJkb2N1bWVudFwiID8gdGhpcy4jZG9jdW1lbnQgOiBpbnB1dEVsXG4gICAgICAgICAgICBsZXQgdGFyZ2V0TGlzdGVuZXJzID0gdGhpcy4jbGlzdGVuZXJzLmdldCh0YXJnZXRPYmopXG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRMaXN0ZW5lcnMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRhcmdldExpc3RlbmVycyA9IG5ldyBNYXAoKVxuICAgICAgICAgICAgICAgIHRoaXMuI2xpc3RlbmVycy5zZXQodGFyZ2V0T2JqLCB0YXJnZXRMaXN0ZW5lcnMpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBsaXN0ZW5lciA9IHRhcmdldExpc3RlbmVycy5nZXQobmFtZSlcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lciA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBwaGFzZSwgcG9pbnRlclR5cGUsIG9wdGlvbnMgfSA9IExpc3RlbmVyc1tuYW1lXVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhc3NpdmUgPSBvcHRpb25zPy5wYXNzaXZlXG5cbiAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IGZyb21FdmVudDxHZXN0dXJlT3JpZ2luPih0YXJnZXRPYmosIG5hbWUsIG9wdGlvbnMgYXMgYW55KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRMaXN0ZW5lcnMuZGVsZXRlKG5hbWUpXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4gPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IHBhc3NpdmUgPT09IGZhbHNlID8gb3JpZ2luLnByZXZlbnREZWZhdWx0LmJpbmQob3JpZ2luKSA6IG5vb3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSBhcyB1bmtub3duIGFzIEdlc3R1cmVNYXRjaFN0YXRlPFQ+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICBpZiAocGhhc2UgPT09IEdlc3R1cmVQaGFzZS5TdGFydCkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IGxpc3RlbmVyLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXAoc3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsoc3RhdGUgYXMgTXV0YWJsZTxHZXN0dXJlTWF0Y2hTdGF0ZT4pLnRhcmdldCA9IHN0YXRlLm9yaWdpbi50YXJnZXQgYXMgSFRNTEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IGxpc3RlbmVyLnBpcGUoc2hhcmUoKSlcblxuICAgICAgICAgICAgICAgIHRhcmdldExpc3RlbmVycy5zZXQobmFtZSwgbGlzdGVuZXIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lciBhcyBPYnNlcnZhYmxlPEdlc3R1cmVNYXRjaFN0YXRlPFQ+PlxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcG9pbnRlcnNGcm9tRXZlbnQoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogUG9zaXRpb25bXSB7XG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHg6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICAgICAgeTogZXZlbnQuY2xpZW50WVxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZXZlbnQudG91Y2hlcykubWFwKHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgeDogdC5jbGllbnRYLCB5OiB0LmNsaWVudFkgfVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9pbnRlcnM8VCBleHRlbmRzIEdlc3R1cmVFdmVudD4oc3RhdGU6IE11dGFibGU8VD4pOiBHZXN0dXJlTWF0Y2hTdGF0ZTxUPiB7XG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSBHZXN0dXJlUGhhc2UuU3RhcnQpIHtcbiAgICAgICAgc3RhdGUucG9pbnRlcnMgPSBwb2ludGVyc0Zyb21FdmVudChzdGF0ZS5vcmlnaW4pLm1hcCh2ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0OiB2LCBjdXJyZW50OiB2LCBkaXN0YW5jZTogeyB4OiAwLCB5OiAwIH0sIGRpcmVjdGlvbjogeyB4OiAwLCB5OiAwIH0gfVxuICAgICAgICB9KVxuICAgIH0gZWxzZSBpZiAoc3RhdGUucG9pbnRlcnMpIHtcbiAgICAgICAgY29uc3QgcG9pbnRlcnMgPSBwb2ludGVyc0Zyb21FdmVudChzdGF0ZS5vcmlnaW4pXG4gICAgICAgIGlmIChwb2ludGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUucG9pbnRlcnMgPSBzdGF0ZS5wb2ludGVycy5tYXAoKHYsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwb2ludGVyc1tpXVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGFydDogdi5zdGFydCxcbiAgICAgICAgICAgICAgICBjdXJyZW50OiBwLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlOiB7IHg6IHAueCAtIHYuc3RhcnQueCwgeTogcC55IC0gdi5zdGFydC55IH0sXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiB7IHg6IGRpcmVjdGlvbih2LnN0YXJ0LngsIHAueCksIHk6IGRpcmVjdGlvbih2LnN0YXJ0LnksIHAueSkgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZVxufVxuXG5mdW5jdGlvbiBkaXJlY3Rpb24ocHJldjogbnVtYmVyLCBjdXJyOiBudW1iZXIpOiAtMSB8IDAgfCAxIHtcbiAgICByZXR1cm4gY3VyciA+IHByZXYgPyAxIDogY3VyciA8IHByZXYgPyAtMSA6IDBcbn1cblxuLy8gY29uc3Qgc3ZjID0gbmV3IEdlc3R1cmVzU2VydmljZSgpXG4vLyBjb25zdCB3ID0gc3ZjLndhdGNoKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIERyYWdBbmREcm9wKVxuZnVuY3Rpb24gbm9vcCgpIHt9XG4iXX0=
@@ -1,63 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { Mutable } from "utility-types";
3
- import { Position } from "@ngutil/style";
4
- export interface Gesture<T extends GestureEvent> {
5
- name: string;
6
- priority: number;
7
- listeners?: Array<keyof DocumentEventMap>;
8
- handler: GestureHandler<T>;
9
- }
10
- export type GestureHandler<T extends GestureEvent> = (events: Observable<GestureMatchState<T>>) => Observable<T>;
11
- export type GestureListener = {
12
- name: keyof DocumentEventMap;
13
- target: ListenerTarget;
14
- };
15
- export interface GestureEvent<T extends string = string> {
16
- readonly type: T;
17
- readonly origin: GestureOrigin;
18
- readonly target: HTMLElement;
19
- readonly pointerType: GesturePointerType;
20
- readonly phase: GesturePhase;
21
- readonly pointers: ReadonlyArray<GesturePointer>;
22
- preventDefault(): void;
23
- }
24
- type GestureEventFixFields = "target" | "origin" | "pointers" | "phase" | "pointerType" | "preventDefault";
25
- export type PointersPosition = ReadonlyArray<Readonly<Position>>;
26
- export interface GesturePointer {
27
- readonly start: Position;
28
- readonly current: Position;
29
- readonly end?: Position;
30
- readonly distance: Position;
31
- readonly direction: {
32
- x: -1 | 0 | 1;
33
- y: -1 | 0 | 1;
34
- };
35
- }
36
- export type GestureOrigin = MouseEvent | TouchEvent;
37
- export declare const enum GesturePointerType {
38
- Mouse = "mouse",
39
- Touch = "touch"
40
- }
41
- export declare const enum GesturePhase {
42
- Start = "start",
43
- Moving = "moving",
44
- End = "end"
45
- }
46
- export type GestureMatchState<T extends GestureEvent = GestureEvent> = Partial<Mutable<Omit<T, GestureEventFixFields>>> & Pick<T, GestureEventFixFields> & {
47
- readonly pending?: Array<string>;
48
- };
49
- export declare function stateToEvent<T extends GestureEvent>(state: GestureMatchState, type: string): T;
50
- export interface ListenerConfig {
51
- target: ListenerTarget;
52
- options?: AddEventListenerOptions;
53
- pointerType: GesturePointerType;
54
- phase: GesturePhase;
55
- }
56
- export declare const enum ListenerTarget {
57
- Document = "document",
58
- Element = "element"
59
- }
60
- export declare const Listeners: {
61
- [key: string]: ListenerConfig;
62
- };
63
- export {};
@@ -1,4 +0,0 @@
1
- import { Gesture, GestureEvent } from "./_base";
2
- export interface DraggingEvent extends GestureEvent<"dragging-start" | "dragging-end" | "dragging-move"> {
3
- }
4
- export declare const Dragging: Gesture<DraggingEvent>;
@@ -1,2 +0,0 @@
1
- export * from "./_base";
2
- export * from "./dragging";
@@ -1,10 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { ElementInput } from "@ngutil/common";
3
- import { Gesture, GestureEvent } from "./gestures";
4
- import * as i0 from "@angular/core";
5
- export declare class GesturesService {
6
- #private;
7
- watch<T extends GestureEvent>(el: ElementInput, ...gestures: Gesture<T>[]): Observable<T>;
8
- static ɵfac: i0.ɵɵFactoryDeclaration<GesturesService, never>;
9
- static ɵprov: i0.ɵɵInjectableDeclaration<GesturesService>;
10
- }