@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.
- package/esm2022/gestures/gesture-drag.mjs +93 -0
- package/esm2022/gestures/gesture-event.mjs +44 -0
- package/esm2022/gestures/gesture-longtap.mjs +36 -0
- package/esm2022/gestures/gesture-tap.mjs +33 -0
- package/esm2022/gestures/gesture.mjs +29 -0
- package/esm2022/gestures/gesture.service.mjs +279 -0
- package/esm2022/gestures/index.mjs +7 -3
- package/esm2022/ui-state/progress-state.mjs +2 -2
- package/fesm2022/ngutil-aria.mjs +408 -115
- package/fesm2022/ngutil-aria.mjs.map +1 -1
- package/gestures/gesture-drag.d.ts +20 -0
- package/gestures/gesture-event.d.ts +44 -0
- package/gestures/gesture-longtap.d.ts +12 -0
- package/gestures/gesture-tap.d.ts +12 -0
- package/gestures/gesture.d.ts +35 -0
- package/gestures/gesture.service.d.ts +22 -0
- package/gestures/index.d.ts +6 -2
- package/package.json +4 -3
- package/esm2022/gestures/gestures/_base.mjs +0 -55
- package/esm2022/gestures/gestures/dragging.mjs +0 -14
- package/esm2022/gestures/gestures/index.mjs +0 -3
- package/esm2022/gestures/gestures.service.mjs +0 -146
- package/gestures/gestures/_base.d.ts +0 -63
- package/gestures/gestures/dragging.d.ts +0 -4
- package/gestures/gestures/index.d.ts +0 -2
- package/gestures/gestures.service.d.ts +0 -10
|
@@ -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 {};
|
package/gestures/index.d.ts
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
export * from "./
|
|
2
|
-
export * from "./
|
|
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.
|
|
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/
|
|
12
|
-
"@ngutil/
|
|
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,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
|
-
}
|