@ngutil/aria 0.0.51 → 0.0.53
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.
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { map, Observable, share,
|
|
4
|
-
import { coerceElement } from "@ngutil/common";
|
|
1
|
+
import { DOCUMENT } from "@angular/common";
|
|
2
|
+
import { inject, Injectable, NgZone } from "@angular/core";
|
|
3
|
+
import { distinctUntilChanged, EMPTY, filter, from, fromEvent, map, merge, Observable, of, share, shareReplay, startWith, switchMap } from "rxjs";
|
|
4
|
+
import { coerceElement, isElementInput } from "@ngutil/common";
|
|
5
|
+
import { FocusState } from "../focus";
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
export class KeystrokeService {
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
};
|
|
18
|
-
}).pipe(share());
|
|
19
|
-
#activatedKs = this.#keyEvent.pipe(map(event => {
|
|
20
|
-
const keystroke = eventToKeystroke(event);
|
|
21
|
-
const id = keystrokeId(keystroke);
|
|
22
|
-
return { event, keystrokes: this.#keystrokes[id] || [], keystroke };
|
|
23
|
-
}));
|
|
24
|
-
constructor() {
|
|
25
|
-
this.#activatedKs.pipe(takeUntilDestroyed()).subscribe(({ event, keystrokes, keystroke }) => {
|
|
26
|
-
for (const ks of keystrokes) {
|
|
27
|
-
if (event.defaultPrevented) {
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
if (ks.target === event.target ||
|
|
31
|
-
ks.target.contains(event.target) ||
|
|
32
|
-
document.activeElement === ks.target ||
|
|
33
|
-
ks.target.contains(document.activeElement)) {
|
|
34
|
-
ks.subject.next({ original: event, keystroke });
|
|
35
|
-
}
|
|
8
|
+
#document = inject(DOCUMENT);
|
|
9
|
+
#zone = inject(NgZone);
|
|
10
|
+
#keyEvent = this.#zone.runOutsideAngular(() => merge(fromEvent(this.#document, "keydown", { capture: true, passive: false }), fromEvent(this.#document, "keyup", { capture: true, passive: false })).pipe(filter(event => event.defaultPrevented === false), share()));
|
|
11
|
+
#focusEvent = this.#zone.runOutsideAngular(() => fromEvent(this.#document, "focus", { capture: true, passive: true }).pipe(startWith(null), map(() => this.#document.activeElement), shareReplay(1)));
|
|
12
|
+
watch(activation, ...keystrokes) {
|
|
13
|
+
return new Observable((dst) => this.#trigger(activation)
|
|
14
|
+
.pipe(distinctUntilChanged(), switchMap(enabled => {
|
|
15
|
+
console.log({ enabled }, keystrokes);
|
|
16
|
+
if (enabled) {
|
|
17
|
+
return this.#keyEvent;
|
|
36
18
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
this.#keystrokes[id] = [];
|
|
19
|
+
else {
|
|
20
|
+
return EMPTY;
|
|
21
|
+
}
|
|
22
|
+
}), map(event => {
|
|
23
|
+
if (event.defaultPrevented) {
|
|
24
|
+
return [];
|
|
44
25
|
}
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
26
|
+
const idFromEvent = keystrokeId(eventToKeystroke(event));
|
|
27
|
+
const matches = keystrokes
|
|
28
|
+
.filter(ks => keystrokeId(ks) === idFromEvent)
|
|
29
|
+
.map(ks => {
|
|
30
|
+
return {
|
|
31
|
+
original: event,
|
|
32
|
+
keystroke: ks
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
if (matches.length > 0) {
|
|
36
|
+
event.preventDefault();
|
|
37
|
+
}
|
|
38
|
+
return matches;
|
|
39
|
+
}), filter(matches => matches.length > 0), switchMap(matches => of(...matches)))
|
|
40
|
+
.subscribe(dst));
|
|
41
|
+
}
|
|
42
|
+
#trigger(activation) {
|
|
43
|
+
if (isElementInput(activation)) {
|
|
44
|
+
return this.#focusActivation(coerceElement(activation));
|
|
45
|
+
}
|
|
46
|
+
else if (activation instanceof FocusState) {
|
|
47
|
+
return activation.origin$.pipe(map(origin => origin != null));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return from(activation).pipe(switchMap(value => {
|
|
51
|
+
if (isElementInput(value) || value instanceof FocusState) {
|
|
52
|
+
return this.#trigger(value);
|
|
59
53
|
}
|
|
60
|
-
|
|
61
|
-
|
|
54
|
+
else {
|
|
55
|
+
return of(value);
|
|
56
|
+
}
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
#focusActivation(element) {
|
|
61
|
+
return this.#focusEvent.pipe(map(focused => focused === element || element.contains(focused)));
|
|
62
62
|
}
|
|
63
63
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: KeystrokeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
64
64
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: KeystrokeService, providedIn: "root" }); }
|
|
@@ -66,7 +66,7 @@ export class KeystrokeService {
|
|
|
66
66
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: KeystrokeService, decorators: [{
|
|
67
67
|
type: Injectable,
|
|
68
68
|
args: [{ providedIn: "root" }]
|
|
69
|
-
}]
|
|
69
|
+
}] });
|
|
70
70
|
function keystrokeId(ks) {
|
|
71
71
|
let res = ks.key;
|
|
72
72
|
if (ks.shift) {
|
|
@@ -90,4 +90,4 @@ function eventToKeystroke(event) {
|
|
|
90
90
|
state: event.type === "keyup" ? "up" : "down"
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5c3Ryb2tlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9rZXlzdHJva2Uva2V5c3Ryb2tlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUUvRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFjLE1BQU0sTUFBTSxDQUFBO0FBRWxFLE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUE7O0FBdUI1RCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2hCLFdBQVcsR0FBd0MsRUFBRSxDQUFBO0lBRXJELFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQThCLEVBQUUsRUFBRTtRQUNuRSxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUNyQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ25CLENBQUMsQ0FBQTtRQUNELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDaEUsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUU5RCxPQUFPLEdBQUcsRUFBRTtZQUNSLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7WUFDbkUsUUFBUSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxF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OlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiXG5cbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgc2hhcmUsIFN1YmplY3QsIFN1YnNjcmliZXIgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IGNvZXJjZUVsZW1lbnQsIEVsZW1lbnRJbnB1dCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgS2V5c3Ryb2tlIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVUlfRXZlbnRzL0tleWJvYXJkX2V2ZW50X2tleV92YWx1ZXNcbiAgICBrZXk6IEtleWJvYXJkRXZlbnRbXCJrZXlcIl1cbiAgICBzaGlmdD86IGJvb2xlYW5cbiAgICBjdHJsPzogYm9vbGVhblxuICAgIGFsdD86IGJvb2xlYW5cbiAgICBzdGF0ZTogXCJkb3duXCIgfCBcInVwXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLZXlzdHJva2VFdmVudCB7XG4gICAgb3JpZ2luYWw6IEtleWJvYXJkRXZlbnRcbiAgICBrZXlzdHJva2U6IEtleXN0cm9rZVxufVxuXG5pbnRlcmZhY2UgS2V5c3Ryb2tlRW50cnkge1xuICAgIGtleXN0cm9rZTogS2V5c3Ryb2tlXG4gICAgdGFyZ2V0OiBIVE1MRWxlbWVudFxuICAgIHN1YmplY3Q6IFN1YmplY3Q8S2V5c3Ryb2tlRXZlbnQ+XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBLZXlzdHJva2VTZXJ2aWNlIHtcbiAgICByZWFkb25seSAja2V5c3Ryb2tlczogeyBba2V5OiBzdHJpbmddOiBLZXlzdHJva2VFbnRyeVtdIH0gPSB7fVxuXG4gICAgcmVhZG9ubHkgI2tleUV2ZW50ID0gbmV3IE9ic2VydmFibGUoKGRzdDogU3Vic2NyaWJlcjxLZXlib2FyZEV2ZW50PikgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBkc3QubmV4dChldmVudClcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVyLCB7IGNhcHR1cmU6IHRydWUgfSlcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGhhbmRsZXIsIHsgY2FwdHVyZTogdHJ1ZSB9KVxuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVyLCB7IGNhcHR1cmU6IHRydWUgfSlcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBoYW5kbGVyLCB7IGNhcHR1cmU6IHRydWUgfSlcbiAgICAgICAgfVxuICAgIH0pLnBpcGUoc2hhcmUoKSlcblxuICAgIHJlYWRvbmx5ICNhY3RpdmF0ZWRLcyA9IHRoaXMuI2tleUV2ZW50LnBpcGUoXG4gICAgICAgIG1hcChldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzdHJva2UgPSBldmVudFRvS2V5c3Ryb2tlKGV2ZW50KVxuICAgICAgICAgICAgY29uc3QgaWQgPSBrZXlzdHJva2VJZChrZXlzdHJva2UpXG4gICAgICAgICAgICByZXR1cm4geyBldmVudCwga2V5c3Ryb2tlczogdGhpcy4ja2V5c3Ryb2tlc1tpZF0gfHwgW10sIGtleXN0cm9rZSB9XG4gICAgICAgIH0pXG4gICAgKVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuI2FjdGl2YXRlZEtzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoeyBldmVudCwga2V5c3Ryb2tlcywga2V5c3Ryb2tlIH0pID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga3Mgb2Yga2V5c3Ryb2tlcykge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAga3MudGFyZ2V0ID09PSBldmVudC50YXJnZXQgfHxcbiAgICAgICAgICAgICAgICAgICAga3MudGFyZ2V0LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSB8fFxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBrcy50YXJnZXQgfHxcbiAgICAgICAgICAgICAgICAgICAga3MudGFyZ2V0LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgTm9kZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAga3Muc3ViamVjdC5uZXh0KHsgb3JpZ2luYWw6IGV2ZW50LCBrZXlzdHJva2UgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgd2F0Y2godGFyZ2V0OiBFbGVtZW50SW5wdXQsIGtleXN0cm9rZTogS2V5c3Ryb2tlKTogT2JzZXJ2YWJsZTxLZXlzdHJva2VFdmVudD4ge1xuICAgICAgICBjb25zdCBpZCA9IGtleXN0cm9rZUlkKGtleXN0cm9rZSlcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChkc3Q6IFN1YnNjcmliZXI8S2V5c3Ryb2tlRXZlbnQ+KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuI2tleXN0cm9rZXNbaWRdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4ja2V5c3Ryb2tlc1tpZF0gPSBbXVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8S2V5c3Ryb2tlRXZlbnQ+KClcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5OiBLZXlzdHJva2VFbnRyeSA9IHsgdGFyZ2V0OiBjb2VyY2VFbGVtZW50KHRhcmdldCksIGtleXN0cm9rZSwgc3ViamVjdCB9XG4gICAgICAgICAgICBjb25zdCBzdWIgPSBzdWJqZWN0LnN1YnNjcmliZShkc3QpXG5cbiAgICAgICAgICAgIHRoaXMuI2tleXN0cm9rZXNbaWRdLnB1c2goZW50cnkpXG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4ja2V5c3Ryb2tlc1tpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlzdHJva2VzW2lkXS5pbmRleE9mKGVudHJ5KVxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzdHJva2VzW2lkXS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2tleXN0cm9rZXNbaWRdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuI2tleXN0cm9rZXNbaWRdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnBpcGUoc2hhcmUoKSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGtleXN0cm9rZUlkKGtzOiBLZXlzdHJva2UpOiBzdHJpbmcge1xuICAgIGxldCByZXMgPSBrcy5rZXlcbiAgICBpZiAoa3Muc2hpZnQpIHtcbiAgICAgICAgcmVzICs9IFwiK3NoaWZ0XCJcbiAgICB9XG4gICAgaWYgKGtzLmN0cmwpIHtcbiAgICAgICAgcmVzICs9IFwiK2N0cmxcIlxuICAgIH1cbiAgICBpZiAoa3MuYWx0KSB7XG4gICAgICAgIHJlcyArPSBcIithbHRcIlxuICAgIH1cbiAgICByZXMgKz0gYCR7a3Muc3RhdGV9YFxuICAgIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZXZlbnRUb0tleXN0cm9rZShldmVudDogS2V5Ym9hcmRFdmVudCk6IEtleXN0cm9rZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICAgIHNoaWZ0OiBldmVudC5zaGlmdEtleSxcbiAgICAgICAgY3RybDogZXZlbnQuY3RybEtleSxcbiAgICAgICAgYWx0OiBldmVudC5hbHRLZXksXG4gICAgICAgIHN0YXRlOiBldmVudC50eXBlID09PSBcImtleXVwXCIgPyBcInVwXCIgOiBcImRvd25cIlxuICAgIH1cbn1cbiJdfQ==
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5c3Ryb2tlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9rZXlzdHJva2Uva2V5c3Ryb2tlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUUxRCxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ0gsS0FBSyxFQUNMLFVBQVUsRUFDVixFQUFFLEVBQ0YsS0FBSyxFQUNMLFdBQVcsRUFDWCxTQUFTLEVBRVQsU0FBUyxFQUNaLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7QUFtQnJDLE1BQU0sT0FBTyxnQkFBZ0I7SUFDaEIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM1QixLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRXRCLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUNuRCxLQUFLLENBQ0QsU0FBUyxDQUFnQixJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQ3RGLFNBQVMsQ0FBZ0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUN2RixDQUFD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LEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztRQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUTtRQUNyQixJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDbkIsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNO1FBQ2pCLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNO0tBQ2hELENBQUE7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQge1xuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIEVNUFRZLFxuICAgIGZpbHRlcixcbiAgICBmcm9tLFxuICAgIGZyb21FdmVudCxcbiAgICBtYXAsXG4gICAgbWVyZ2UsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBvZixcbiAgICBzaGFyZSxcbiAgICBzaGFyZVJlcGxheSxcbiAgICBzdGFydFdpdGgsXG4gICAgU3Vic2NyaWJlcixcbiAgICBzd2l0Y2hNYXBcbn0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBjb2VyY2VFbGVtZW50LCBFbGVtZW50SW5wdXQsIGlzRWxlbWVudElucHV0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgRm9jdXNTdGF0ZSB9IGZyb20gXCIuLi9mb2N1c1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgS2V5c3Ryb2tlIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVUlfRXZlbnRzL0tleWJvYXJkX2V2ZW50X2tleV92YWx1ZXNcbiAgICBrZXk6IEtleWJvYXJkRXZlbnRbXCJrZXlcIl1cbiAgICBzaGlmdD86IGJvb2xlYW5cbiAgICBjdHJsPzogYm9vbGVhblxuICAgIGFsdD86IGJvb2xlYW5cbiAgICBzdGF0ZTogXCJkb3duXCIgfCBcInVwXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLZXlzdHJva2VFdmVudCB7XG4gICAgb3JpZ2luYWw6IEtleWJvYXJkRXZlbnRcbiAgICBrZXlzdHJva2U6IEtleXN0cm9rZVxufVxuXG5leHBvcnQgdHlwZSBLZXlzdHJva2VBY3RpdmF0aW9uID0gRWxlbWVudElucHV0IHwgRm9jdXNTdGF0ZSB8IE9ic2VydmFibGU8RWxlbWVudElucHV0IHwgRm9jdXNTdGF0ZSB8IGJvb2xlYW4+XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBLZXlzdHJva2VTZXJ2aWNlIHtcbiAgICByZWFkb25seSAjZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpXG4gICAgcmVhZG9ubHkgI3pvbmUgPSBpbmplY3QoTmdab25lKVxuXG4gICAgcmVhZG9ubHkgI2tleUV2ZW50ID0gdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICBtZXJnZShcbiAgICAgICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pih0aGlzLiNkb2N1bWVudCwgXCJrZXlkb3duXCIsIHsgY2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogZmFsc2UgfSksXG4gICAgICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4odGhpcy4jZG9jdW1lbnQsIFwia2V5dXBcIiwgeyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiBmYWxzZSB9KVxuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQuZGVmYXVsdFByZXZlbnRlZCA9PT0gZmFsc2UpLFxuICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICApXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgI2ZvY3VzRXZlbnQgPSB0aGlzLiN6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgIGZyb21FdmVudCh0aGlzLiNkb2N1bWVudCwgXCJmb2N1c1wiLCB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfSkucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLiNkb2N1bWVudC5hY3RpdmVFbGVtZW50KSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgIClcbiAgICApXG5cbiAgICB3YXRjaChhY3RpdmF0aW9uOiBLZXlzdHJva2VBY3RpdmF0aW9uLCAuLi5rZXlzdHJva2VzOiBLZXlzdHJva2VbXSk6IE9ic2VydmFibGU8S2V5c3Ryb2tlRXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChkc3Q6IFN1YnNjcmliZXI8S2V5c3Ryb2tlRXZlbnQ+KSA9PlxuICAgICAgICAgICAgdGhpcy4jdHJpZ2dlcihhY3RpdmF0aW9uKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoZW5hYmxlZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh7IGVuYWJsZWQgfSwga2V5c3Ryb2tlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2tleUV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkRnJvbUV2ZW50ID0ga2V5c3Ryb2tlSWQoZXZlbnRUb0tleXN0cm9rZShldmVudCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzID0ga2V5c3Ryb2tlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoa3MgPT4ga2V5c3Ryb2tlSWQoa3MpID09PSBpZEZyb21FdmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGtzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXN0cm9rZToga3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIobWF0Y2hlcyA9PiBtYXRjaGVzLmxlbmd0aCA+IDApLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAobWF0Y2hlcyA9PiBvZiguLi5tYXRjaGVzKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShkc3QpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAjdHJpZ2dlcihhY3RpdmF0aW9uOiBLZXlzdHJva2VBY3RpdmF0aW9uKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgSFRNTEVsZW1lbnQ+IHtcbiAgICAgICAgaWYgKGlzRWxlbWVudElucHV0KGFjdGl2YXRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZm9jdXNBY3RpdmF0aW9uKGNvZXJjZUVsZW1lbnQoYWN0aXZhdGlvbikpXG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aXZhdGlvbiBpbnN0YW5jZW9mIEZvY3VzU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3RpdmF0aW9uLm9yaWdpbiQucGlwZShtYXAob3JpZ2luID0+IG9yaWdpbiAhPSBudWxsKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tKGFjdGl2YXRpb24pLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRWxlbWVudElucHV0KHZhbHVlKSB8fCB2YWx1ZSBpbnN0YW5jZW9mIEZvY3VzU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiN0cmlnZ2VyKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNmb2N1c0FjdGl2YXRpb24oZWxlbWVudDogSFRNTEVsZW1lbnQpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2ZvY3VzRXZlbnQucGlwZShtYXAoZm9jdXNlZCA9PiBmb2N1c2VkID09PSBlbGVtZW50IHx8IGVsZW1lbnQuY29udGFpbnMoZm9jdXNlZCkpKVxuICAgIH1cbn1cblxuZnVuY3Rpb24ga2V5c3Ryb2tlSWQoa3M6IEtleXN0cm9rZSk6IHN0cmluZyB7XG4gICAgbGV0IHJlcyA9IGtzLmtleVxuICAgIGlmIChrcy5zaGlmdCkge1xuICAgICAgICByZXMgKz0gXCIrc2hpZnRcIlxuICAgIH1cbiAgICBpZiAoa3MuY3RybCkge1xuICAgICAgICByZXMgKz0gXCIrY3RybFwiXG4gICAgfVxuICAgIGlmIChrcy5hbHQpIHtcbiAgICAgICAgcmVzICs9IFwiK2FsdFwiXG4gICAgfVxuICAgIHJlcyArPSBgJHtrcy5zdGF0ZX1gXG4gICAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBldmVudFRvS2V5c3Ryb2tlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogS2V5c3Ryb2tlIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGV2ZW50LmtleSxcbiAgICAgICAgc2hpZnQ6IGV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICBjdHJsOiBldmVudC5jdHJsS2V5LFxuICAgICAgICBhbHQ6IGV2ZW50LmFsdEtleSxcbiAgICAgICAgc3RhdGU6IGV2ZW50LnR5cGUgPT09IFwia2V5dXBcIiA/IFwidXBcIiA6IFwiZG93blwiXG4gICAgfVxufVxuIl19
|
package/fesm2022/ngutil-aria.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DOCUMENT } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { inject, NgZone, Injectable, Inject, ElementRef, effect, Directive, input, computed } from '@angular/core';
|
|
4
|
-
import { merge, fromEvent, map, share, filter, shareReplay, startWith, throttleTime, switchMap, timer, take, distinctUntilChanged, combineLatest, BehaviorSubject, of, debounceTime, Observable,
|
|
4
|
+
import { merge, fromEvent, map, share, filter, shareReplay, startWith, throttleTime, switchMap, timer, take, distinctUntilChanged, combineLatest, BehaviorSubject, of, debounceTime, Observable, EMPTY, from, tap, concatMap, scan, takeWhile, finalize } from 'rxjs';
|
|
5
5
|
import { FocusTrapFactory } from '@angular/cdk/a11y';
|
|
6
6
|
import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
7
7
|
import { focusable, isFocusable } from 'tabbable';
|
|
@@ -274,61 +274,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
|
|
|
274
274
|
}], ctorParameters: () => [] });
|
|
275
275
|
|
|
276
276
|
class KeystrokeService {
|
|
277
|
-
#
|
|
278
|
-
#
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
};
|
|
288
|
-
}).pipe(share());
|
|
289
|
-
#activatedKs = this.#keyEvent.pipe(map(event => {
|
|
290
|
-
const keystroke = eventToKeystroke(event);
|
|
291
|
-
const id = keystrokeId(keystroke);
|
|
292
|
-
return { event, keystrokes: this.#keystrokes[id] || [], keystroke };
|
|
293
|
-
}));
|
|
294
|
-
constructor() {
|
|
295
|
-
this.#activatedKs.pipe(takeUntilDestroyed()).subscribe(({ event, keystrokes, keystroke }) => {
|
|
296
|
-
for (const ks of keystrokes) {
|
|
297
|
-
if (event.defaultPrevented) {
|
|
298
|
-
return;
|
|
299
|
-
}
|
|
300
|
-
if (ks.target === event.target ||
|
|
301
|
-
ks.target.contains(event.target) ||
|
|
302
|
-
document.activeElement === ks.target ||
|
|
303
|
-
ks.target.contains(document.activeElement)) {
|
|
304
|
-
ks.subject.next({ original: event, keystroke });
|
|
305
|
-
}
|
|
277
|
+
#document = inject(DOCUMENT);
|
|
278
|
+
#zone = inject(NgZone);
|
|
279
|
+
#keyEvent = this.#zone.runOutsideAngular(() => merge(fromEvent(this.#document, "keydown", { capture: true, passive: false }), fromEvent(this.#document, "keyup", { capture: true, passive: false })).pipe(filter(event => event.defaultPrevented === false), share()));
|
|
280
|
+
#focusEvent = this.#zone.runOutsideAngular(() => fromEvent(this.#document, "focus", { capture: true, passive: true }).pipe(startWith(null), map(() => this.#document.activeElement), shareReplay(1)));
|
|
281
|
+
watch(activation, ...keystrokes) {
|
|
282
|
+
return new Observable((dst) => this.#trigger(activation)
|
|
283
|
+
.pipe(distinctUntilChanged(), switchMap(enabled => {
|
|
284
|
+
console.log({ enabled }, keystrokes);
|
|
285
|
+
if (enabled) {
|
|
286
|
+
return this.#keyEvent;
|
|
306
287
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
watch(target, keystroke) {
|
|
310
|
-
const id = keystrokeId(keystroke);
|
|
311
|
-
return new Observable((dst) => {
|
|
312
|
-
if (!this.#keystrokes[id]) {
|
|
313
|
-
this.#keystrokes[id] = [];
|
|
288
|
+
else {
|
|
289
|
+
return EMPTY;
|
|
314
290
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
291
|
+
}), map(event => {
|
|
292
|
+
if (event.defaultPrevented) {
|
|
293
|
+
return [];
|
|
294
|
+
}
|
|
295
|
+
const idFromEvent = keystrokeId(eventToKeystroke(event));
|
|
296
|
+
const matches = keystrokes
|
|
297
|
+
.filter(ks => keystrokeId(ks) === idFromEvent)
|
|
298
|
+
.map(ks => {
|
|
299
|
+
return {
|
|
300
|
+
original: event,
|
|
301
|
+
keystroke: ks
|
|
302
|
+
};
|
|
303
|
+
});
|
|
304
|
+
if (matches.length > 0) {
|
|
305
|
+
event.preventDefault();
|
|
306
|
+
}
|
|
307
|
+
return matches;
|
|
308
|
+
}), filter(matches => matches.length > 0), switchMap(matches => of(...matches)))
|
|
309
|
+
.subscribe(dst));
|
|
310
|
+
}
|
|
311
|
+
#trigger(activation) {
|
|
312
|
+
if (isElementInput(activation)) {
|
|
313
|
+
return this.#focusActivation(coerceElement(activation));
|
|
314
|
+
}
|
|
315
|
+
else if (activation instanceof FocusState) {
|
|
316
|
+
return activation.origin$.pipe(map(origin => origin != null));
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
return from(activation).pipe(switchMap(value => {
|
|
320
|
+
if (isElementInput(value) || value instanceof FocusState) {
|
|
321
|
+
return this.#trigger(value);
|
|
329
322
|
}
|
|
330
|
-
|
|
331
|
-
|
|
323
|
+
else {
|
|
324
|
+
return of(value);
|
|
325
|
+
}
|
|
326
|
+
}));
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
#focusActivation(element) {
|
|
330
|
+
return this.#focusEvent.pipe(map(focused => focused === element || element.contains(focused)));
|
|
332
331
|
}
|
|
333
332
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: KeystrokeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
334
333
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: KeystrokeService, providedIn: "root" }); }
|
|
@@ -336,7 +335,7 @@ class KeystrokeService {
|
|
|
336
335
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: KeystrokeService, decorators: [{
|
|
337
336
|
type: Injectable,
|
|
338
337
|
args: [{ providedIn: "root" }]
|
|
339
|
-
}]
|
|
338
|
+
}] });
|
|
340
339
|
function keystrokeId(ks) {
|
|
341
340
|
let res = ks.key;
|
|
342
341
|
if (ks.shift) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngutil-aria.mjs","sources":["../../../../packages/aria/src/activity/activity.service.ts","../../../../packages/aria/src/focus/focus.service.ts","../../../../packages/aria/src/focus/focus-trap.directive.ts","../../../../packages/aria/src/focus/focus-state.directive.ts","../../../../packages/aria/src/focus/focusable.directive.ts","../../../../packages/aria/src/keystroke/keystroke.service.ts","../../../../packages/aria/src/gestures/gestures/_base.ts","../../../../packages/aria/src/gestures/gestures/dragging.ts","../../../../packages/aria/src/gestures/gestures.service.ts","../../../../packages/aria/src/ngutil-aria.ts"],"sourcesContent":["import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport {\n distinctUntilChanged,\n filter,\n fromEvent,\n map,\n merge,\n Observable,\n share,\n shareReplay,\n startWith,\n switchMap,\n take,\n throttleTime,\n timer\n} from \"rxjs\"\n\n// TODO: detect program activity\nexport type ActivityOrigin = \"mouse\" | \"keyboard\" | \"touch\" | \"program\"\n\nexport interface ActivityEvent {\n origin: ActivityOrigin\n type: keyof typeof EVENT_ORIGIN\n node?: Node\n}\n\nconst EVENT_OPTIONS: AddEventListenerOptions = {\n capture: true,\n passive: true\n}\n\nconst EVENT_ORIGIN = {\n keydown: \"keyboard\",\n mousedown: \"mouse\",\n mousemove: \"mouse\",\n touchstart: \"touch\"\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class ActivityService {\n readonly #zone = inject(NgZone)\n readonly #doc = inject(DOCUMENT)\n\n readonly events$: Observable<ActivityEvent> = this.#zone.runOutsideAngular(() =>\n merge(\n fromEvent(this.#doc, \"keydown\", EVENT_OPTIONS),\n fromEvent(this.#doc, \"mousedown\", EVENT_OPTIONS),\n fromEvent(this.#doc, \"mousemove\", EVENT_OPTIONS),\n fromEvent(this.#doc, \"touchstart\", EVENT_OPTIONS)\n ).pipe(\n map(event => {\n const type = event.type as ActivityEvent[\"type\"]\n return {\n origin: EVENT_ORIGIN[type] as ActivityOrigin,\n type: type,\n node: event.target as any\n }\n }),\n share()\n )\n )\n\n watchActivity(node?: HTMLElement) {\n if (node) {\n return this.events$.pipe(\n filter(\n event =>\n event.node != null &&\n (event.node === node || (event.node instanceof HTMLElement && event.node.contains(node)))\n ),\n shareReplay(1)\n )\n } else {\n return this.events$\n }\n }\n\n watchInactvity(timeout: number) {\n return this.events$.pipe(\n startWith(null),\n throttleTime(timeout / 2),\n switchMap(() => timer(0, timeout).pipe(take(2))),\n map(v => v !== 0),\n distinctUntilChanged(),\n shareReplay(1)\n )\n }\n}\n","import { FocusTrapFactory } from \"@angular/cdk/a11y\"\nimport { DOCUMENT } from \"@angular/common\"\nimport { inject, Inject, Injectable, NgZone } from \"@angular/core\"\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\"\n\nimport { combineLatest, distinctUntilChanged, filter, fromEvent, map, Observable, shareReplay, startWith } from \"rxjs\"\n\nimport { focusable, type FocusableElement, isFocusable } from \"tabbable\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { ActivityOrigin, ActivityService } from \"../activity\"\n\nconst EVENT_OPTIONS: AddEventListenerOptions = {\n capture: true,\n passive: true\n}\n\nexport type FocusOrigin = ActivityOrigin | null\n\nexport interface FocusChanges {\n origin: FocusOrigin\n element: HTMLElement\n}\n\nexport interface FocusableEvent {\n origin: FocusOrigin\n exact: boolean\n node: Node\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class FocusService {\n readonly #activity = inject(ActivityService)\n readonly #focusTrap = inject(FocusTrapFactory)\n readonly events: Observable<FocusChanges>\n\n constructor(@Inject(DOCUMENT) document: Document, @Inject(NgZone) zone: NgZone) {\n this.events = zone.runOutsideAngular(() => {\n const focus = fromEvent(document, \"focus\", EVENT_OPTIONS).pipe(map(e => e.target as Node))\n const blur = fromEvent(document, \"blur\", EVENT_OPTIONS).pipe(\n startWith(null),\n map(e => (e?.target as Node) || null)\n )\n\n return combineLatest({\n activity: this.#activity.events$.pipe(\n filter(event => event.type !== \"mousemove\"),\n distinctUntilChanged((prev, curr): boolean => {\n if (prev && curr) {\n return prev.origin === curr.origin && prev.node === curr.node\n } else {\n return false\n }\n })\n ),\n focus: focus,\n blur: blur\n }).pipe(\n takeUntilDestroyed(),\n map(({ activity, focus, blur }) => {\n // console.log({ activity, focus, blur })\n\n // If focus in with alt+tab\n if (blur === document && activity.origin === \"keyboard\") {\n return { origin: \"program\", element: focus }\n }\n\n if (focus === document) {\n return { origin: \"program\", element: focus }\n }\n\n // If press tab button, first fire the event in the currently focused element\n if (focus === blur) {\n return null\n }\n\n // When press tab, the activity is on the current fucesd element,\n // so when blur is changed to it, the focus change is completed\n if (activity.origin === \"keyboard\" && isActivityElement(activity.node, blur)) {\n return { origin: \"keyboard\", element: focus }\n }\n\n if (isActivityElement(activity.node, focus)) {\n return { origin: activity.origin, element: focus }\n } else {\n return { origin: \"program\", element: focus }\n }\n }),\n filter(v => !!v),\n shareReplay(1)\n ) as any\n })\n }\n\n watch(element: ElementInput) {\n const el = coerceElement(element)\n return this.events.pipe(\n map(event => {\n if (\n event.element &&\n (event.element === el || (typeof el.contains === \"function\" && el.contains(event.element)))\n ) {\n return event\n }\n return { element: el, origin: null } as FocusChanges\n })\n )\n }\n\n focus(node: HTMLElement, _origin: FocusOrigin | null) {\n // TODO: focus origin\n node.focus()\n }\n\n queryFocusable(inside: HTMLElement): FocusableElement[] {\n return focusable(inside, { includeContainer: false })\n }\n\n getFirstFocusable(inside: HTMLElement): FocusableElement | undefined {\n return this.queryFocusable(inside)[0]\n }\n\n isFocusable(node: Element): boolean {\n return isFocusable(node)\n }\n\n focusTrap(inside: HTMLElement, deferCaptureElements: boolean = false) {\n return this.#focusTrap.create(inside, deferCaptureElements)\n }\n}\n\nfunction isActivityElement(activityEl?: Node | null, focused?: Node | null): boolean {\n return activityEl != null && focused != null && (activityEl === focused || focused.contains(activityEl))\n}\n","import { ElementRef, inject } from \"@angular/core\"\n\nimport { BehaviorSubject } from \"rxjs\"\n\nimport { Destructible } from \"@ngutil/common\"\n\nimport { FocusService } from \"./focus.service\"\n\n// TODO: implement\nexport class FocusTrap extends Destructible {\n #manager = inject(FocusService)\n #el = inject(ElementRef<HTMLElement>)\n\n get enabled() {\n return this.#enabled.value\n }\n set enabled(val: boolean) {\n if (this.#enabled.value !== val) {\n this.#enabled.next(val)\n }\n }\n #enabled = new BehaviorSubject<boolean>(true)\n\n enable() {\n this.enabled = true\n }\n\n disable() {\n this.enabled = false\n }\n}\n","import { Directive, effect, ElementRef, inject } from \"@angular/core\"\nimport { takeUntilDestroyed, toSignal } from \"@angular/core/rxjs-interop\"\n\nimport { BehaviorSubject, combineLatest, debounceTime, map, Observable, of, shareReplay, switchMap } from \"rxjs\"\n\nimport { ElementInput } from \"dist/packages/common\"\n\nimport { ConnectProtocol, isElementInput } from \"@ngutil/common\"\n\nimport { FocusChanges, FocusService } from \"./focus.service\"\n\n@Directive({\n standalone: true,\n host: {\n \"[attr.focus]\": \"origin()\",\n \"[attr.focusWithin]\": \"within()\"\n }\n})\nexport class FocusState implements ConnectProtocol {\n readonly #focus = inject(FocusService)\n readonly #el = inject<ElementRef<HTMLElement>>(ElementRef)\n readonly #parent = inject(FocusState, { optional: true, skipSelf: true })\n readonly #default: FocusChanges = { element: this.#el.nativeElement, origin: null }\n\n readonly #self = this.#focus.watch(this.#el).pipe(takeUntilDestroyed(), shareReplay(1))\n\n readonly #connected = new BehaviorSubject<Observable<FocusChanges>[]>([])\n readonly #connEvent = this.#connected.pipe(\n switchMap(values => (values.length === 0 ? of([]) : combineLatest(values))),\n takeUntilDestroyed(),\n map(values => values.filter(v => v.origin != null)),\n map(values => values[0] || this.#default),\n shareReplay(1)\n )\n\n readonly event$: Observable<FocusChanges> = combineLatest([this.#self, this.#connEvent]).pipe(\n debounceTime(100),\n map(values => values.find(v => v.origin != null) || this.#default),\n shareReplay(1)\n )\n\n readonly origin$ = this.event$.pipe(map(event => event.origin))\n readonly within$ = this.event$.pipe(map(event => (event.element !== this.#el.nativeElement ? event.origin : null)))\n\n readonly event = toSignal(this.event$, { rejectErrors: true, manualCleanup: true })\n readonly origin = toSignal(this.origin$, { rejectErrors: true, manualCleanup: true })\n readonly within = toSignal(this.within$, { rejectErrors: true, manualCleanup: true })\n\n constructor() {\n // TODO: miért kell ez?, ha nincs itt akkor nem frissül\n effect(() => this.origin(), { allowSignalWrites: false })\n this.#parent?.connect(this).pipe(takeUntilDestroyed()).subscribe()\n }\n\n connect(value: FocusState | ElementInput) {\n return new Observable(() => {\n const src = (isElementInput(value) ? this.#focus.watch(value) : value.event$).pipe(shareReplay(1))\n this.#connected.next([...this.#connected.value, src])\n\n return () => {\n let current = this.#connected.value\n const idx = current.indexOf(src)\n if (idx >= 0) {\n current = [...current]\n current.splice(idx, 1)\n this.#connected.next(current)\n }\n }\n })\n }\n}\n","import { computed, Directive, effect, inject, input } from \"@angular/core\"\n\nimport { ConnectProtocol, DisabledState, ElementInput, isElementInput } from \"@ngutil/common\"\n\nimport { FocusState } from \"./focus-state.directive\"\n\n// TODO: what happens when disabled is changed\n\n@Directive({\n standalone: true,\n selector: \"[nuFocusable]\",\n exportAs: \"nuFocusable\",\n host: {\n \"[attr.tabindex]\": \"_tabindex()\"\n },\n hostDirectives: [FocusState]\n})\nexport class Focusable implements ConnectProtocol {\n readonly #disabled = inject(DisabledState, { optional: true, self: true })\n readonly state = inject(FocusState)\n\n readonly focusable = input<boolean | number>(true, { alias: \"nuFocusable\" })\n readonly tabindex = input(0, { transform: Number })\n\n readonly _tabindex = computed(() => {\n const focusable = this.focusable()\n const tabindex = this.tabindex()\n const isDisabled = this.#disabled?.isDisabled()\n\n if (focusable === false || isDisabled) {\n return -1\n }\n\n if (typeof focusable === \"number\") {\n return focusable\n }\n\n if (focusable === true && tabindex != null && !isNaN(tabindex)) {\n return tabindex\n }\n\n return 0\n })\n\n constructor() {\n // TODO: miért kell ez?, ha nincs itt akkor nem frissül\n effect(() => this._tabindex(), { allowSignalWrites: false })\n }\n\n connect(value: Focusable | FocusState | ElementInput) {\n if (value instanceof FocusState || isElementInput(value)) {\n return this.state.connect(value)\n } else {\n return this.state.connect(value.state)\n }\n }\n}\n","import { Injectable } from \"@angular/core\"\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\"\n\nimport { map, Observable, share, Subject, Subscriber } from \"rxjs\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nexport interface Keystroke {\n // https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values\n key: KeyboardEvent[\"key\"]\n shift?: boolean\n ctrl?: boolean\n alt?: boolean\n state: \"down\" | \"up\"\n}\n\nexport interface KeystrokeEvent {\n original: KeyboardEvent\n keystroke: Keystroke\n}\n\ninterface KeystrokeEntry {\n keystroke: Keystroke\n target: HTMLElement\n subject: Subject<KeystrokeEvent>\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class KeystrokeService {\n readonly #keystrokes: { [key: string]: KeystrokeEntry[] } = {}\n\n readonly #keyEvent = new Observable((dst: Subscriber<KeyboardEvent>) => {\n const handler = (event: KeyboardEvent) => {\n dst.next(event)\n }\n document.addEventListener(\"keydown\", handler, { capture: true })\n document.addEventListener(\"keyup\", handler, { capture: true })\n\n return () => {\n document.removeEventListener(\"keydown\", handler, { capture: true })\n document.removeEventListener(\"keyup\", handler, { capture: true })\n }\n }).pipe(share())\n\n readonly #activatedKs = this.#keyEvent.pipe(\n map(event => {\n const keystroke = eventToKeystroke(event)\n const id = keystrokeId(keystroke)\n return { event, keystrokes: this.#keystrokes[id] || [], keystroke }\n })\n )\n\n constructor() {\n this.#activatedKs.pipe(takeUntilDestroyed()).subscribe(({ event, keystrokes, keystroke }) => {\n for (const ks of keystrokes) {\n if (event.defaultPrevented) {\n return\n }\n\n if (\n ks.target === event.target ||\n ks.target.contains(event.target as Node) ||\n document.activeElement === ks.target ||\n ks.target.contains(document.activeElement as Node)\n ) {\n ks.subject.next({ original: event, keystroke })\n }\n }\n })\n }\n\n watch(target: ElementInput, keystroke: Keystroke): Observable<KeystrokeEvent> {\n const id = keystrokeId(keystroke)\n return new Observable((dst: Subscriber<KeystrokeEvent>) => {\n if (!this.#keystrokes[id]) {\n this.#keystrokes[id] = []\n }\n\n const subject = new Subject<KeystrokeEvent>()\n const entry: KeystrokeEntry = { target: coerceElement(target), keystroke, subject }\n const sub = subject.subscribe(dst)\n\n this.#keystrokes[id].push(entry)\n\n return () => {\n sub.unsubscribe()\n if (this.#keystrokes[id]) {\n const index = this.#keystrokes[id].indexOf(entry)\n if (index !== -1) {\n this.#keystrokes[id].splice(index, 1)\n }\n if (this.#keystrokes[id].length === 0) {\n delete this.#keystrokes[id]\n }\n }\n }\n }).pipe(share())\n }\n}\n\nfunction keystrokeId(ks: Keystroke): string {\n let res = ks.key\n if (ks.shift) {\n res += \"+shift\"\n }\n if (ks.ctrl) {\n res += \"+ctrl\"\n }\n if (ks.alt) {\n res += \"+alt\"\n }\n res += `${ks.state}`\n return res\n}\n\nfunction eventToKeystroke(event: KeyboardEvent): Keystroke {\n return {\n key: event.key,\n shift: event.shiftKey,\n ctrl: event.ctrlKey,\n alt: event.altKey,\n state: event.type === \"keyup\" ? \"up\" : \"down\"\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { Mutable } from \"utility-types\"\n\nimport { Position } from \"@ngutil/style\"\n\nexport interface Gesture<T extends GestureEvent> {\n name: string\n priority: number\n listeners?: Array<keyof DocumentEventMap>\n handler: GestureHandler<T>\n}\n\nexport type GestureHandler<T extends GestureEvent> = (events: Observable<GestureMatchState<T>>) => Observable<T>\n\nexport type GestureListener = {\n name: keyof DocumentEventMap\n target: ListenerTarget\n // options?: AddEventListenerOptions\n}\n\nexport interface GestureEvent<T extends string = string> {\n readonly type: T\n readonly origin: GestureOrigin\n readonly target: HTMLElement\n readonly pointerType: GesturePointerType\n readonly phase: GesturePhase\n readonly pointers: ReadonlyArray<GesturePointer>\n\n preventDefault(): void\n}\n\ntype GestureEventFixFields = \"target\" | \"origin\" | \"pointers\" | \"phase\" | \"pointerType\" | \"preventDefault\"\n\nexport type PointersPosition = ReadonlyArray<Readonly<Position>>\n\nexport interface GesturePointer {\n readonly start: Position\n readonly current: Position\n readonly end?: Position\n readonly distance: Position\n readonly direction: { x: -1 | 0 | 1; y: -1 | 0 | 1 }\n}\n\nexport type GestureOrigin = MouseEvent | TouchEvent\n\nexport const enum GesturePointerType {\n Mouse = \"mouse\",\n Touch = \"touch\"\n}\n\nexport const enum GesturePhase {\n Start = \"start\",\n Moving = \"moving\",\n End = \"end\"\n}\n\nexport type GestureMatchState<T extends GestureEvent = GestureEvent> = Partial<\n Mutable<Omit<T, GestureEventFixFields>>\n> &\n Pick<T, GestureEventFixFields> & {\n readonly pending?: Array<string>\n }\n\nexport function stateToEvent<T extends GestureEvent>(state: GestureMatchState, type: string): T {\n return {\n type: type,\n origin: state.origin!,\n target: state.target!,\n pointerType: state.pointerType!,\n phase: state.phase!,\n pointers: state.pointers!\n } as T\n}\n\nexport interface ListenerConfig {\n target: ListenerTarget\n options?: AddEventListenerOptions\n pointerType: GesturePointerType\n phase: GesturePhase\n}\n\nexport const enum ListenerTarget {\n Document = \"document\",\n Element = \"element\"\n}\n\nexport const Listeners: { [key: string]: ListenerConfig } = {\n mousedown: {\n target: ListenerTarget.Element,\n pointerType: GesturePointerType.Mouse,\n phase: GesturePhase.Start,\n options: { capture: true, passive: false }\n },\n mousemove: {\n target: ListenerTarget.Document,\n pointerType: GesturePointerType.Mouse,\n phase: GesturePhase.Moving,\n options: { capture: true, passive: false }\n },\n mouseup: {\n target: ListenerTarget.Document,\n pointerType: GesturePointerType.Mouse,\n phase: GesturePhase.End,\n options: { capture: true, passive: true }\n },\n touchstart: {\n target: ListenerTarget.Element,\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.Start,\n options: { capture: true, passive: false }\n },\n touchmove: {\n target: ListenerTarget.Document,\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.Moving,\n options: { capture: true, passive: false }\n },\n touchend: {\n target: ListenerTarget.Document,\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.End,\n options: { capture: true, passive: false }\n },\n touchcancel: {\n target: ListenerTarget.Document,\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.End,\n options: { capture: true, passive: true }\n }\n} as const\n","import { filter, map, tap } from \"rxjs\"\n\nimport { Gesture, GestureEvent, GesturePhase, stateToEvent } from \"./_base\"\n\n// export type DraggingEvent = GestureEvent<\"dragging-start\" | \"dragging-end\" | \"dragging-move\">\n\nexport interface DraggingEvent extends GestureEvent<\"dragging-start\" | \"dragging-end\" | \"dragging-move\"> {}\n\nconst TypeMap = {\n [GesturePhase.Start]: \"dragging-start\",\n [GesturePhase.Moving]: \"dragging-move\",\n [GesturePhase.End]: \"dragging-end\"\n}\n\nexport const Dragging: Gesture<DraggingEvent> = {\n name: \"dragging\",\n listeners: [\"mousedown\", \"mousemove\", \"mouseup\", \"touchstart\", \"touchmove\", \"touchend\", \"touchcancel\"],\n priority: 0,\n handler: events =>\n events.pipe(\n filter(state => !state.pending || state.pending.length === 0),\n tap(state => state.preventDefault()),\n map(state => stateToEvent(state, TypeMap[state.phase]))\n )\n}\n","import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport {\n concatMap,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n Observable,\n of,\n scan,\n share,\n startWith,\n takeWhile,\n tap\n} from \"rxjs\"\n\nimport { flatten } from \"lodash\"\nimport { Mutable } from \"utility-types\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\nimport { Position } from \"@ngutil/style\"\n\nimport {\n Gesture,\n GestureEvent,\n GestureMatchState,\n GestureOrigin,\n GesturePhase,\n GesturePointerType,\n Listeners\n} from \"./gestures\"\n\n@Injectable({ providedIn: \"root\" })\nexport class GesturesService {\n readonly #document = inject(DOCUMENT)\n readonly #zone = inject(NgZone)\n readonly #listeners = new Map<HTMLElement | Document, Map<string, Observable<GestureMatchState>>>()\n\n watch<T extends GestureEvent>(el: ElementInput, ...gestures: Gesture<T>[]): Observable<T> {\n return this.#zone.runOutsideAngular(() => {\n const listeners = flatten(gestures.map(v => v.listeners || []))\n const { trigger, watch } = this.#getListeners(coerceElement(el), listeners)\n\n let pointerType: GesturePointerType | undefined\n return trigger.pipe(\n filter(state => {\n if (pointerType == null) {\n pointerType = state.pointerType\n }\n return pointerType === state.pointerType\n }),\n concatMap(v =>\n this.#zone.runOutsideAngular(() => {\n const watching = watch[pointerType!].pipe(\n startWith(v),\n scan(\n (state, curr) => updatePointers<T>({ ...state, ...curr } as T),\n {} as GestureMatchState<T>\n ),\n takeWhile(state => state.phase !== GesturePhase.End, true),\n share()\n )\n return merge(...gestures.map(v => v.handler(watching)))\n })\n )\n )\n })\n }\n\n #getListeners<T extends GestureEvent>(inputEl: HTMLElement, listeners: string[]) {\n const triggers: string[] = []\n const watches: { [key: string]: string[] } = {}\n\n for (const name of listeners) {\n const conf = Listeners[name]\n\n const container =\n conf.phase === GesturePhase.Start\n ? triggers\n : (watches[conf.pointerType] = watches[conf.pointerType] || [])\n\n if (container.indexOf(name) === -1) {\n container.push(name)\n }\n }\n\n if (triggers.length === 0) {\n throw Error(\"Missing start events\")\n }\n\n const observable = (names: string[]) => {\n if (names.length === 0) {\n return of()\n } else if (names.length === 1) {\n return this.#getListener<T>(inputEl, names[0])\n } else {\n return merge(...names.map(v => this.#getListener<T>(inputEl, v)))\n }\n }\n\n return {\n trigger: observable(triggers),\n watch: {\n [GesturePointerType.Mouse]: observable(watches[GesturePointerType.Mouse]),\n [GesturePointerType.Touch]: observable(watches[GesturePointerType.Touch])\n }\n }\n }\n\n #getListener<T extends GestureEvent>(inputEl: HTMLElement, name: string): Observable<GestureMatchState<T>> {\n return this.#zone.runOutsideAngular(() => {\n const target = Listeners[name].target\n const targetObj = target === \"document\" ? this.#document : inputEl\n let targetListeners = this.#listeners.get(targetObj)\n\n if (targetListeners == null) {\n targetListeners = new Map()\n this.#listeners.set(targetObj, targetListeners)\n }\n\n let listener = targetListeners.get(name)\n if (listener == null) {\n const { phase, pointerType, options } = Listeners[name]\n const passive = options?.passive\n\n listener = fromEvent<GestureOrigin>(targetObj, name, options as any).pipe(\n finalize(() => {\n targetListeners.delete(name)\n }),\n map(\n origin =>\n ({\n origin,\n phase,\n pointerType,\n preventDefault: passive === false ? origin.preventDefault.bind(origin) : noop\n }) as unknown as GestureMatchState<T>\n )\n )\n\n if (phase === GesturePhase.Start) {\n listener = listener.pipe(\n tap(state => {\n ;(state as Mutable<GestureMatchState>).target = state.origin.target as HTMLElement\n })\n )\n }\n\n listener = listener.pipe(share())\n\n targetListeners.set(name, listener)\n }\n\n return listener as Observable<GestureMatchState<T>>\n })\n }\n}\n\nfunction pointersFromEvent(event: MouseEvent | TouchEvent): Position[] {\n if (event instanceof MouseEvent) {\n return [\n {\n x: event.clientX,\n y: event.clientY\n }\n ]\n } else {\n return Array.from(event.touches).map(t => {\n return { x: t.clientX, y: t.clientY }\n })\n }\n}\n\nfunction updatePointers<T extends GestureEvent>(state: Mutable<T>): GestureMatchState<T> {\n if (state.phase === GesturePhase.Start) {\n state.pointers = pointersFromEvent(state.origin).map(v => {\n return { start: v, current: v, distance: { x: 0, y: 0 }, direction: { x: 0, y: 0 } }\n })\n } else if (state.pointers) {\n const pointers = pointersFromEvent(state.origin)\n if (pointers.length === 0) {\n return state\n }\n\n state.pointers = state.pointers.map((v, i) => {\n const p = pointers[i]\n return {\n start: v.start,\n current: p,\n distance: { x: p.x - v.start.x, y: p.y - v.start.y },\n direction: { x: direction(v.start.x, p.x), y: direction(v.start.y, p.y) }\n }\n })\n }\n\n return state\n}\n\nfunction direction(prev: number, curr: number): -1 | 0 | 1 {\n return curr > prev ? 1 : curr < prev ? -1 : 0\n}\n\n// const svc = new GesturesService()\n// const w = svc.watch(document.createElement(\"div\"), DragAndDrop)\nfunction noop() {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["EVENT_OPTIONS","i1.FocusState"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngutil-aria.mjs","sources":["../../../../packages/aria/src/activity/activity.service.ts","../../../../packages/aria/src/focus/focus.service.ts","../../../../packages/aria/src/focus/focus-trap.directive.ts","../../../../packages/aria/src/focus/focus-state.directive.ts","../../../../packages/aria/src/focus/focusable.directive.ts","../../../../packages/aria/src/keystroke/keystroke.service.ts","../../../../packages/aria/src/gestures/gestures/_base.ts","../../../../packages/aria/src/gestures/gestures/dragging.ts","../../../../packages/aria/src/gestures/gestures.service.ts","../../../../packages/aria/src/ngutil-aria.ts"],"sourcesContent":["import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport {\n distinctUntilChanged,\n filter,\n fromEvent,\n map,\n merge,\n Observable,\n share,\n shareReplay,\n startWith,\n switchMap,\n take,\n throttleTime,\n timer\n} from \"rxjs\"\n\n// TODO: detect program activity\nexport type ActivityOrigin = \"mouse\" | \"keyboard\" | \"touch\" | \"program\"\n\nexport interface ActivityEvent {\n origin: ActivityOrigin\n type: keyof typeof EVENT_ORIGIN\n node?: Node\n}\n\nconst EVENT_OPTIONS: AddEventListenerOptions = {\n capture: true,\n passive: true\n}\n\nconst EVENT_ORIGIN = {\n keydown: \"keyboard\",\n mousedown: \"mouse\",\n mousemove: \"mouse\",\n touchstart: \"touch\"\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class ActivityService {\n readonly #zone = inject(NgZone)\n readonly #doc = inject(DOCUMENT)\n\n readonly events$: Observable<ActivityEvent> = this.#zone.runOutsideAngular(() =>\n merge(\n fromEvent(this.#doc, \"keydown\", EVENT_OPTIONS),\n fromEvent(this.#doc, \"mousedown\", EVENT_OPTIONS),\n fromEvent(this.#doc, \"mousemove\", EVENT_OPTIONS),\n fromEvent(this.#doc, \"touchstart\", EVENT_OPTIONS)\n ).pipe(\n map(event => {\n const type = event.type as ActivityEvent[\"type\"]\n return {\n origin: EVENT_ORIGIN[type] as ActivityOrigin,\n type: type,\n node: event.target as any\n }\n }),\n share()\n )\n )\n\n watchActivity(node?: HTMLElement) {\n if (node) {\n return this.events$.pipe(\n filter(\n event =>\n event.node != null &&\n (event.node === node || (event.node instanceof HTMLElement && event.node.contains(node)))\n ),\n shareReplay(1)\n )\n } else {\n return this.events$\n }\n }\n\n watchInactvity(timeout: number) {\n return this.events$.pipe(\n startWith(null),\n throttleTime(timeout / 2),\n switchMap(() => timer(0, timeout).pipe(take(2))),\n map(v => v !== 0),\n distinctUntilChanged(),\n shareReplay(1)\n )\n }\n}\n","import { FocusTrapFactory } from \"@angular/cdk/a11y\"\nimport { DOCUMENT } from \"@angular/common\"\nimport { inject, Inject, Injectable, NgZone } from \"@angular/core\"\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\"\n\nimport { combineLatest, distinctUntilChanged, filter, fromEvent, map, Observable, shareReplay, startWith } from \"rxjs\"\n\nimport { focusable, type FocusableElement, isFocusable } from \"tabbable\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { ActivityOrigin, ActivityService } from \"../activity\"\n\nconst EVENT_OPTIONS: AddEventListenerOptions = {\n capture: true,\n passive: true\n}\n\nexport type FocusOrigin = ActivityOrigin | null\n\nexport interface FocusChanges {\n origin: FocusOrigin\n element: HTMLElement\n}\n\nexport interface FocusableEvent {\n origin: FocusOrigin\n exact: boolean\n node: Node\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class FocusService {\n readonly #activity = inject(ActivityService)\n readonly #focusTrap = inject(FocusTrapFactory)\n readonly events: Observable<FocusChanges>\n\n constructor(@Inject(DOCUMENT) document: Document, @Inject(NgZone) zone: NgZone) {\n this.events = zone.runOutsideAngular(() => {\n const focus = fromEvent(document, \"focus\", EVENT_OPTIONS).pipe(map(e => e.target as Node))\n const blur = fromEvent(document, \"blur\", EVENT_OPTIONS).pipe(\n startWith(null),\n map(e => (e?.target as Node) || null)\n )\n\n return combineLatest({\n activity: this.#activity.events$.pipe(\n filter(event => event.type !== \"mousemove\"),\n distinctUntilChanged((prev, curr): boolean => {\n if (prev && curr) {\n return prev.origin === curr.origin && prev.node === curr.node\n } else {\n return false\n }\n })\n ),\n focus: focus,\n blur: blur\n }).pipe(\n takeUntilDestroyed(),\n map(({ activity, focus, blur }) => {\n // console.log({ activity, focus, blur })\n\n // If focus in with alt+tab\n if (blur === document && activity.origin === \"keyboard\") {\n return { origin: \"program\", element: focus }\n }\n\n if (focus === document) {\n return { origin: \"program\", element: focus }\n }\n\n // If press tab button, first fire the event in the currently focused element\n if (focus === blur) {\n return null\n }\n\n // When press tab, the activity is on the current fucesd element,\n // so when blur is changed to it, the focus change is completed\n if (activity.origin === \"keyboard\" && isActivityElement(activity.node, blur)) {\n return { origin: \"keyboard\", element: focus }\n }\n\n if (isActivityElement(activity.node, focus)) {\n return { origin: activity.origin, element: focus }\n } else {\n return { origin: \"program\", element: focus }\n }\n }),\n filter(v => !!v),\n shareReplay(1)\n ) as any\n })\n }\n\n watch(element: ElementInput) {\n const el = coerceElement(element)\n return this.events.pipe(\n map(event => {\n if (\n event.element &&\n (event.element === el || (typeof el.contains === \"function\" && el.contains(event.element)))\n ) {\n return event\n }\n return { element: el, origin: null } as FocusChanges\n })\n )\n }\n\n focus(node: HTMLElement, _origin: FocusOrigin | null) {\n // TODO: focus origin\n node.focus()\n }\n\n queryFocusable(inside: HTMLElement): FocusableElement[] {\n return focusable(inside, { includeContainer: false })\n }\n\n getFirstFocusable(inside: HTMLElement): FocusableElement | undefined {\n return this.queryFocusable(inside)[0]\n }\n\n isFocusable(node: Element): boolean {\n return isFocusable(node)\n }\n\n focusTrap(inside: HTMLElement, deferCaptureElements: boolean = false) {\n return this.#focusTrap.create(inside, deferCaptureElements)\n }\n}\n\nfunction isActivityElement(activityEl?: Node | null, focused?: Node | null): boolean {\n return activityEl != null && focused != null && (activityEl === focused || focused.contains(activityEl))\n}\n","import { ElementRef, inject } from \"@angular/core\"\n\nimport { BehaviorSubject } from \"rxjs\"\n\nimport { Destructible } from \"@ngutil/common\"\n\nimport { FocusService } from \"./focus.service\"\n\n// TODO: implement\nexport class FocusTrap extends Destructible {\n #manager = inject(FocusService)\n #el = inject(ElementRef<HTMLElement>)\n\n get enabled() {\n return this.#enabled.value\n }\n set enabled(val: boolean) {\n if (this.#enabled.value !== val) {\n this.#enabled.next(val)\n }\n }\n #enabled = new BehaviorSubject<boolean>(true)\n\n enable() {\n this.enabled = true\n }\n\n disable() {\n this.enabled = false\n }\n}\n","import { Directive, effect, ElementRef, inject } from \"@angular/core\"\nimport { takeUntilDestroyed, toSignal } from \"@angular/core/rxjs-interop\"\n\nimport { BehaviorSubject, combineLatest, debounceTime, map, Observable, of, shareReplay, switchMap } from \"rxjs\"\n\nimport { ElementInput } from \"dist/packages/common\"\n\nimport { ConnectProtocol, isElementInput } from \"@ngutil/common\"\n\nimport { FocusChanges, FocusService } from \"./focus.service\"\n\n@Directive({\n standalone: true,\n host: {\n \"[attr.focus]\": \"origin()\",\n \"[attr.focusWithin]\": \"within()\"\n }\n})\nexport class FocusState implements ConnectProtocol {\n readonly #focus = inject(FocusService)\n readonly #el = inject<ElementRef<HTMLElement>>(ElementRef)\n readonly #parent = inject(FocusState, { optional: true, skipSelf: true })\n readonly #default: FocusChanges = { element: this.#el.nativeElement, origin: null }\n\n readonly #self = this.#focus.watch(this.#el).pipe(takeUntilDestroyed(), shareReplay(1))\n\n readonly #connected = new BehaviorSubject<Observable<FocusChanges>[]>([])\n readonly #connEvent = this.#connected.pipe(\n switchMap(values => (values.length === 0 ? of([]) : combineLatest(values))),\n takeUntilDestroyed(),\n map(values => values.filter(v => v.origin != null)),\n map(values => values[0] || this.#default),\n shareReplay(1)\n )\n\n readonly event$: Observable<FocusChanges> = combineLatest([this.#self, this.#connEvent]).pipe(\n debounceTime(100),\n map(values => values.find(v => v.origin != null) || this.#default),\n shareReplay(1)\n )\n\n readonly origin$ = this.event$.pipe(map(event => event.origin))\n readonly within$ = this.event$.pipe(map(event => (event.element !== this.#el.nativeElement ? event.origin : null)))\n\n readonly event = toSignal(this.event$, { rejectErrors: true, manualCleanup: true })\n readonly origin = toSignal(this.origin$, { rejectErrors: true, manualCleanup: true })\n readonly within = toSignal(this.within$, { rejectErrors: true, manualCleanup: true })\n\n constructor() {\n // TODO: miért kell ez?, ha nincs itt akkor nem frissül\n effect(() => this.origin(), { allowSignalWrites: false })\n this.#parent?.connect(this).pipe(takeUntilDestroyed()).subscribe()\n }\n\n connect(value: FocusState | ElementInput) {\n return new Observable(() => {\n const src = (isElementInput(value) ? this.#focus.watch(value) : value.event$).pipe(shareReplay(1))\n this.#connected.next([...this.#connected.value, src])\n\n return () => {\n let current = this.#connected.value\n const idx = current.indexOf(src)\n if (idx >= 0) {\n current = [...current]\n current.splice(idx, 1)\n this.#connected.next(current)\n }\n }\n })\n }\n}\n","import { computed, Directive, effect, inject, input } from \"@angular/core\"\n\nimport { ConnectProtocol, DisabledState, ElementInput, isElementInput } from \"@ngutil/common\"\n\nimport { FocusState } from \"./focus-state.directive\"\n\n// TODO: what happens when disabled is changed\n\n@Directive({\n standalone: true,\n selector: \"[nuFocusable]\",\n exportAs: \"nuFocusable\",\n host: {\n \"[attr.tabindex]\": \"_tabindex()\"\n },\n hostDirectives: [FocusState]\n})\nexport class Focusable implements ConnectProtocol {\n readonly #disabled = inject(DisabledState, { optional: true, self: true })\n readonly state = inject(FocusState)\n\n readonly focusable = input<boolean | number>(true, { alias: \"nuFocusable\" })\n readonly tabindex = input(0, { transform: Number })\n\n readonly _tabindex = computed(() => {\n const focusable = this.focusable()\n const tabindex = this.tabindex()\n const isDisabled = this.#disabled?.isDisabled()\n\n if (focusable === false || isDisabled) {\n return -1\n }\n\n if (typeof focusable === \"number\") {\n return focusable\n }\n\n if (focusable === true && tabindex != null && !isNaN(tabindex)) {\n return tabindex\n }\n\n return 0\n })\n\n constructor() {\n // TODO: miért kell ez?, ha nincs itt akkor nem frissül\n effect(() => this._tabindex(), { allowSignalWrites: false })\n }\n\n connect(value: Focusable | FocusState | ElementInput) {\n if (value instanceof FocusState || isElementInput(value)) {\n return this.state.connect(value)\n } else {\n return this.state.connect(value.state)\n }\n }\n}\n","import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport {\n distinctUntilChanged,\n EMPTY,\n filter,\n from,\n fromEvent,\n map,\n merge,\n Observable,\n of,\n share,\n shareReplay,\n startWith,\n Subscriber,\n switchMap\n} from \"rxjs\"\n\nimport { coerceElement, ElementInput, isElementInput } from \"@ngutil/common\"\n\nimport { FocusState } from \"../focus\"\n\nexport interface Keystroke {\n // https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values\n key: KeyboardEvent[\"key\"]\n shift?: boolean\n ctrl?: boolean\n alt?: boolean\n state: \"down\" | \"up\"\n}\n\nexport interface KeystrokeEvent {\n original: KeyboardEvent\n keystroke: Keystroke\n}\n\nexport type KeystrokeActivation = ElementInput | FocusState | Observable<ElementInput | FocusState | boolean>\n\n@Injectable({ providedIn: \"root\" })\nexport class KeystrokeService {\n readonly #document = inject(DOCUMENT)\n readonly #zone = inject(NgZone)\n\n readonly #keyEvent = this.#zone.runOutsideAngular(() =>\n merge(\n fromEvent<KeyboardEvent>(this.#document, \"keydown\", { capture: true, passive: false }),\n fromEvent<KeyboardEvent>(this.#document, \"keyup\", { capture: true, passive: false })\n ).pipe(\n filter(event => event.defaultPrevented === false),\n share()\n )\n )\n\n readonly #focusEvent = this.#zone.runOutsideAngular(() =>\n fromEvent(this.#document, \"focus\", { capture: true, passive: true }).pipe(\n startWith(null),\n map(() => this.#document.activeElement),\n shareReplay(1)\n )\n )\n\n watch(activation: KeystrokeActivation, ...keystrokes: Keystroke[]): Observable<KeystrokeEvent> {\n return new Observable((dst: Subscriber<KeystrokeEvent>) =>\n this.#trigger(activation)\n .pipe(\n distinctUntilChanged(),\n switchMap(enabled => {\n console.log({ enabled }, keystrokes)\n if (enabled) {\n return this.#keyEvent\n } else {\n return EMPTY\n }\n }),\n map(event => {\n if (event.defaultPrevented) {\n return []\n }\n\n const idFromEvent = keystrokeId(eventToKeystroke(event))\n const matches = keystrokes\n .filter(ks => keystrokeId(ks) === idFromEvent)\n .map(ks => {\n return {\n original: event,\n keystroke: ks\n }\n })\n\n if (matches.length > 0) {\n event.preventDefault()\n }\n\n return matches\n }),\n filter(matches => matches.length > 0),\n switchMap(matches => of(...matches))\n )\n .subscribe(dst)\n )\n }\n\n #trigger(activation: KeystrokeActivation): Observable<boolean | HTMLElement> {\n if (isElementInput(activation)) {\n return this.#focusActivation(coerceElement(activation))\n } else if (activation instanceof FocusState) {\n return activation.origin$.pipe(map(origin => origin != null))\n } else {\n return from(activation).pipe(\n switchMap(value => {\n if (isElementInput(value) || value instanceof FocusState) {\n return this.#trigger(value)\n } else {\n return of(value)\n }\n })\n )\n }\n }\n\n #focusActivation(element: HTMLElement): Observable<boolean> {\n return this.#focusEvent.pipe(map(focused => focused === element || element.contains(focused)))\n }\n}\n\nfunction keystrokeId(ks: Keystroke): string {\n let res = ks.key\n if (ks.shift) {\n res += \"+shift\"\n }\n if (ks.ctrl) {\n res += \"+ctrl\"\n }\n if (ks.alt) {\n res += \"+alt\"\n }\n res += `${ks.state}`\n return res\n}\n\nfunction eventToKeystroke(event: KeyboardEvent): Keystroke {\n return {\n key: event.key,\n shift: event.shiftKey,\n ctrl: event.ctrlKey,\n alt: event.altKey,\n state: event.type === \"keyup\" ? \"up\" : \"down\"\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { Mutable } from \"utility-types\"\n\nimport { Position } from \"@ngutil/style\"\n\nexport interface Gesture<T extends GestureEvent> {\n name: string\n priority: number\n listeners?: Array<keyof DocumentEventMap>\n handler: GestureHandler<T>\n}\n\nexport type GestureHandler<T extends GestureEvent> = (events: Observable<GestureMatchState<T>>) => Observable<T>\n\nexport type GestureListener = {\n name: keyof DocumentEventMap\n target: ListenerTarget\n // options?: AddEventListenerOptions\n}\n\nexport interface GestureEvent<T extends string = string> {\n readonly type: T\n readonly origin: GestureOrigin\n readonly target: HTMLElement\n readonly pointerType: GesturePointerType\n readonly phase: GesturePhase\n readonly pointers: ReadonlyArray<GesturePointer>\n\n preventDefault(): void\n}\n\ntype GestureEventFixFields = \"target\" | \"origin\" | \"pointers\" | \"phase\" | \"pointerType\" | \"preventDefault\"\n\nexport type PointersPosition = ReadonlyArray<Readonly<Position>>\n\nexport interface GesturePointer {\n readonly start: Position\n readonly current: Position\n readonly end?: Position\n readonly distance: Position\n readonly direction: { x: -1 | 0 | 1; y: -1 | 0 | 1 }\n}\n\nexport type GestureOrigin = MouseEvent | TouchEvent\n\nexport const enum GesturePointerType {\n Mouse = \"mouse\",\n Touch = \"touch\"\n}\n\nexport const enum GesturePhase {\n Start = \"start\",\n Moving = \"moving\",\n End = \"end\"\n}\n\nexport type GestureMatchState<T extends GestureEvent = GestureEvent> = Partial<\n Mutable<Omit<T, GestureEventFixFields>>\n> &\n Pick<T, GestureEventFixFields> & {\n readonly pending?: Array<string>\n }\n\nexport function stateToEvent<T extends GestureEvent>(state: GestureMatchState, type: string): T {\n return {\n type: type,\n origin: state.origin!,\n target: state.target!,\n pointerType: state.pointerType!,\n phase: state.phase!,\n pointers: state.pointers!\n } as T\n}\n\nexport interface ListenerConfig {\n target: ListenerTarget\n options?: AddEventListenerOptions\n pointerType: GesturePointerType\n phase: GesturePhase\n}\n\nexport const enum ListenerTarget {\n Document = \"document\",\n Element = \"element\"\n}\n\nexport const Listeners: { [key: string]: ListenerConfig } = {\n mousedown: {\n target: ListenerTarget.Element,\n pointerType: GesturePointerType.Mouse,\n phase: GesturePhase.Start,\n options: { capture: true, passive: false }\n },\n mousemove: {\n target: ListenerTarget.Document,\n pointerType: GesturePointerType.Mouse,\n phase: GesturePhase.Moving,\n options: { capture: true, passive: false }\n },\n mouseup: {\n target: ListenerTarget.Document,\n pointerType: GesturePointerType.Mouse,\n phase: GesturePhase.End,\n options: { capture: true, passive: true }\n },\n touchstart: {\n target: ListenerTarget.Element,\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.Start,\n options: { capture: true, passive: false }\n },\n touchmove: {\n target: ListenerTarget.Document,\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.Moving,\n options: { capture: true, passive: false }\n },\n touchend: {\n target: ListenerTarget.Document,\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.End,\n options: { capture: true, passive: false }\n },\n touchcancel: {\n target: ListenerTarget.Document,\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.End,\n options: { capture: true, passive: true }\n }\n} as const\n","import { filter, map, tap } from \"rxjs\"\n\nimport { Gesture, GestureEvent, GesturePhase, stateToEvent } from \"./_base\"\n\n// export type DraggingEvent = GestureEvent<\"dragging-start\" | \"dragging-end\" | \"dragging-move\">\n\nexport interface DraggingEvent extends GestureEvent<\"dragging-start\" | \"dragging-end\" | \"dragging-move\"> {}\n\nconst TypeMap = {\n [GesturePhase.Start]: \"dragging-start\",\n [GesturePhase.Moving]: \"dragging-move\",\n [GesturePhase.End]: \"dragging-end\"\n}\n\nexport const Dragging: Gesture<DraggingEvent> = {\n name: \"dragging\",\n listeners: [\"mousedown\", \"mousemove\", \"mouseup\", \"touchstart\", \"touchmove\", \"touchend\", \"touchcancel\"],\n priority: 0,\n handler: events =>\n events.pipe(\n filter(state => !state.pending || state.pending.length === 0),\n tap(state => state.preventDefault()),\n map(state => stateToEvent(state, TypeMap[state.phase]))\n )\n}\n","import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport {\n concatMap,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n Observable,\n of,\n scan,\n share,\n startWith,\n takeWhile,\n tap\n} from \"rxjs\"\n\nimport { flatten } from \"lodash\"\nimport { Mutable } from \"utility-types\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\nimport { Position } from \"@ngutil/style\"\n\nimport {\n Gesture,\n GestureEvent,\n GestureMatchState,\n GestureOrigin,\n GesturePhase,\n GesturePointerType,\n Listeners\n} from \"./gestures\"\n\n@Injectable({ providedIn: \"root\" })\nexport class GesturesService {\n readonly #document = inject(DOCUMENT)\n readonly #zone = inject(NgZone)\n readonly #listeners = new Map<HTMLElement | Document, Map<string, Observable<GestureMatchState>>>()\n\n watch<T extends GestureEvent>(el: ElementInput, ...gestures: Gesture<T>[]): Observable<T> {\n return this.#zone.runOutsideAngular(() => {\n const listeners = flatten(gestures.map(v => v.listeners || []))\n const { trigger, watch } = this.#getListeners(coerceElement(el), listeners)\n\n let pointerType: GesturePointerType | undefined\n return trigger.pipe(\n filter(state => {\n if (pointerType == null) {\n pointerType = state.pointerType\n }\n return pointerType === state.pointerType\n }),\n concatMap(v =>\n this.#zone.runOutsideAngular(() => {\n const watching = watch[pointerType!].pipe(\n startWith(v),\n scan(\n (state, curr) => updatePointers<T>({ ...state, ...curr } as T),\n {} as GestureMatchState<T>\n ),\n takeWhile(state => state.phase !== GesturePhase.End, true),\n share()\n )\n return merge(...gestures.map(v => v.handler(watching)))\n })\n )\n )\n })\n }\n\n #getListeners<T extends GestureEvent>(inputEl: HTMLElement, listeners: string[]) {\n const triggers: string[] = []\n const watches: { [key: string]: string[] } = {}\n\n for (const name of listeners) {\n const conf = Listeners[name]\n\n const container =\n conf.phase === GesturePhase.Start\n ? triggers\n : (watches[conf.pointerType] = watches[conf.pointerType] || [])\n\n if (container.indexOf(name) === -1) {\n container.push(name)\n }\n }\n\n if (triggers.length === 0) {\n throw Error(\"Missing start events\")\n }\n\n const observable = (names: string[]) => {\n if (names.length === 0) {\n return of()\n } else if (names.length === 1) {\n return this.#getListener<T>(inputEl, names[0])\n } else {\n return merge(...names.map(v => this.#getListener<T>(inputEl, v)))\n }\n }\n\n return {\n trigger: observable(triggers),\n watch: {\n [GesturePointerType.Mouse]: observable(watches[GesturePointerType.Mouse]),\n [GesturePointerType.Touch]: observable(watches[GesturePointerType.Touch])\n }\n }\n }\n\n #getListener<T extends GestureEvent>(inputEl: HTMLElement, name: string): Observable<GestureMatchState<T>> {\n return this.#zone.runOutsideAngular(() => {\n const target = Listeners[name].target\n const targetObj = target === \"document\" ? this.#document : inputEl\n let targetListeners = this.#listeners.get(targetObj)\n\n if (targetListeners == null) {\n targetListeners = new Map()\n this.#listeners.set(targetObj, targetListeners)\n }\n\n let listener = targetListeners.get(name)\n if (listener == null) {\n const { phase, pointerType, options } = Listeners[name]\n const passive = options?.passive\n\n listener = fromEvent<GestureOrigin>(targetObj, name, options as any).pipe(\n finalize(() => {\n targetListeners.delete(name)\n }),\n map(\n origin =>\n ({\n origin,\n phase,\n pointerType,\n preventDefault: passive === false ? origin.preventDefault.bind(origin) : noop\n }) as unknown as GestureMatchState<T>\n )\n )\n\n if (phase === GesturePhase.Start) {\n listener = listener.pipe(\n tap(state => {\n ;(state as Mutable<GestureMatchState>).target = state.origin.target as HTMLElement\n })\n )\n }\n\n listener = listener.pipe(share())\n\n targetListeners.set(name, listener)\n }\n\n return listener as Observable<GestureMatchState<T>>\n })\n }\n}\n\nfunction pointersFromEvent(event: MouseEvent | TouchEvent): Position[] {\n if (event instanceof MouseEvent) {\n return [\n {\n x: event.clientX,\n y: event.clientY\n }\n ]\n } else {\n return Array.from(event.touches).map(t => {\n return { x: t.clientX, y: t.clientY }\n })\n }\n}\n\nfunction updatePointers<T extends GestureEvent>(state: Mutable<T>): GestureMatchState<T> {\n if (state.phase === GesturePhase.Start) {\n state.pointers = pointersFromEvent(state.origin).map(v => {\n return { start: v, current: v, distance: { x: 0, y: 0 }, direction: { x: 0, y: 0 } }\n })\n } else if (state.pointers) {\n const pointers = pointersFromEvent(state.origin)\n if (pointers.length === 0) {\n return state\n }\n\n state.pointers = state.pointers.map((v, i) => {\n const p = pointers[i]\n return {\n start: v.start,\n current: p,\n distance: { x: p.x - v.start.x, y: p.y - v.start.y },\n direction: { x: direction(v.start.x, p.x), y: direction(v.start.y, p.y) }\n }\n })\n }\n\n return state\n}\n\nfunction direction(prev: number, curr: number): -1 | 0 | 1 {\n return curr > prev ? 1 : curr < prev ? -1 : 0\n}\n\n// const svc = new GesturesService()\n// const w = svc.watch(document.createElement(\"div\"), DragAndDrop)\nfunction noop() {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["EVENT_OPTIONS","i1.FocusState"],"mappings":";;;;;;;;;;AA4BA,MAAMA,eAAa,GAA4B;AAC3C,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,OAAO,EAAE,IAAI;CAChB,CAAA;AAED,MAAM,YAAY,GAAG;AACjB,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,SAAS,EAAE,OAAO;AAClB,IAAA,SAAS,EAAE,OAAO;AAClB,IAAA,UAAU,EAAE,OAAO;CACtB,CAAA;MAGY,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEa,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACtB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAEvB,QAAA,IAAA,CAAA,OAAO,GAA8B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MACvE,KAAK,CACD,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAEA,eAAa,CAAC,EAC9C,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAEA,eAAa,CAAC,EAChD,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAEA,eAAa,CAAC,EAChD,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAEA,eAAa,CAAC,CACpD,CAAC,IAAI,CACF,GAAG,CAAC,KAAK,IAAG;AACR,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAA6B,CAAA;YAChD,OAAO;AACH,gBAAA,MAAM,EAAE,YAAY,CAAC,IAAI,CAAmB;AAC5C,gBAAA,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,KAAK,CAAC,MAAa;aAC5B,CAAA;AACL,SAAC,CAAC,EACF,KAAK,EAAE,CACV,CACJ,CAAA;AA2BJ,KAAA;AA/CY,IAAA,KAAK,CAAiB;AACtB,IAAA,IAAI,CAAmB;AAqBhC,IAAA,aAAa,CAAC,IAAkB,EAAA;QAC5B,IAAI,IAAI,EAAE;AACN,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACpB,MAAM,CACF,KAAK,IACD,KAAK,CAAC,IAAI,IAAI,IAAI;AAClB,iBAAC,KAAK,CAAC,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,IAAI,YAAY,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAChG,EACD,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;SACJ;aAAM;YACH,OAAO,IAAI,CAAC,OAAO,CAAA;SACtB;KACJ;AAED,IAAA,cAAc,CAAC,OAAe,EAAA;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACpB,SAAS,CAAC,IAAI,CAAC,EACf,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC,EACzB,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAChD,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EACjB,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;KACJ;8GA/CQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;AC3BlC,MAAM,aAAa,GAA4B;AAC3C,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,OAAO,EAAE,IAAI;CAChB,CAAA;MAgBY,YAAY,CAAA;AACZ,IAAA,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;AACnC,IAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAG9C,WAA8B,CAAA,QAAkB,EAAkB,IAAY,EAAA;QAC1E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAc,CAAC,CAAC,CAAA;AAC1F,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,IAAI,CACxD,SAAS,CAAC,IAAI,CAAC,EACf,GAAG,CAAC,CAAC,IAAK,CAAC,EAAE,MAAe,IAAI,IAAI,CAAC,CACxC,CAAA;AAED,YAAA,OAAO,aAAa,CAAC;AACjB,gBAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CACjC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,EAC3C,oBAAoB,CAAC,CAAC,IAAI,EAAE,IAAI,KAAa;AACzC,oBAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AACd,wBAAA,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAA;qBAChE;yBAAM;AACH,wBAAA,OAAO,KAAK,CAAA;qBACf;AACL,iBAAC,CAAC,CACL;AACD,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,IAAI,EAAE,IAAI;AACb,aAAA,CAAC,CAAC,IAAI,CACH,kBAAkB,EAAE,EACpB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAI;;;gBAI9B,IAAI,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE;oBACrD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;iBAC/C;AAED,gBAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;oBACpB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;iBAC/C;;AAGD,gBAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAChB,oBAAA,OAAO,IAAI,CAAA;iBACd;;;AAID,gBAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBAC1E,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;iBAChD;gBAED,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;oBACzC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;iBACrD;qBAAM;oBACH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;iBAC/C;AACL,aAAC,CAAC,EACF,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,WAAW,CAAC,CAAC,CAAC,CACV,CAAA;AACZ,SAAC,CAAC,CAAA;KACL;AAED,IAAA,KAAK,CAAC,OAAqB,EAAA;AACvB,QAAA,MAAM,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,GAAG,CAAC,KAAK,IAAG;YACR,IACI,KAAK,CAAC,OAAO;iBACZ,KAAK,CAAC,OAAO,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC,QAAQ,KAAK,UAAU,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAC7F;AACE,gBAAA,OAAO,KAAK,CAAA;aACf;YACD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAkB,CAAA;SACvD,CAAC,CACL,CAAA;KACJ;IAED,KAAK,CAAC,IAAiB,EAAE,OAA2B,EAAA;;QAEhD,IAAI,CAAC,KAAK,EAAE,CAAA;KACf;AAED,IAAA,cAAc,CAAC,MAAmB,EAAA;QAC9B,OAAO,SAAS,CAAC,MAAM,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAA;KACxD;AAED,IAAA,iBAAiB,CAAC,MAAmB,EAAA;QACjC,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;KACxC;AAED,IAAA,WAAW,CAAC,IAAa,EAAA;AACrB,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;KAC3B;AAED,IAAA,SAAS,CAAC,MAAmB,EAAE,oBAAA,GAAgC,KAAK,EAAA;QAChE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;KAC9D;8GAjGQ,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAKD,QAAQ,EAAA,EAAA,EAAA,KAAA,EAA8B,MAAM,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AALvD,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;0BAMjB,MAAM;2BAAC,QAAQ,CAAA;;0BAAuB,MAAM;2BAAC,MAAM,CAAA;;AA+FpE,SAAS,iBAAiB,CAAC,UAAwB,EAAE,OAAqB,EAAA;IACtE,OAAO,UAAU,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,KAAK,UAAU,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAA;AAC5G;;AC9HA;AACM,MAAO,SAAU,SAAQ,YAAY,CAAA;AACvC,IAAA,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;AAC/B,IAAA,GAAG,GAAG,MAAM,EAAC,UAAuB,EAAC,CAAA;AAErC,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAA;KAC7B;IACD,IAAI,OAAO,CAAC,GAAY,EAAA;QACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SAC1B;KACJ;AACD,IAAA,QAAQ,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAA;IAE7C,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;KACtB;IAED,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;KACvB;AACJ;;;MCZY,UAAU,CAAA;AACV,IAAA,MAAM,CAAuB;AAC7B,IAAA,GAAG,CAA8C;AACjD,IAAA,OAAO,CAAyD;AAChE,IAAA,QAAQ,CAAkE;AAE1E,IAAA,KAAK,CAAyE;AAE9E,IAAA,UAAU,CAAsD;AAChE,IAAA,UAAU,CAMlB;AAeD,IAAA,WAAA,GAAA;AA7BS,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;AAC7B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAA;AACjD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,EAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAChE,QAAA,IAAA,CAAA,QAAQ,GAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;QAE1E,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAE9E,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAA6B,EAAE,CAAC,CAAA;AAChE,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CACtC,SAAS,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAC3E,kBAAkB,EAAE,EACpB,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,EACnD,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EACzC,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;QAEQ,IAAM,CAAA,MAAA,GAA6B,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CACzF,YAAY,CAAC,GAAG,CAAC,EACjB,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAClE,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;AAEQ,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;AACtD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAE1G,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;AAC1E,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;AAC5E,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;;AAIjF,QAAA,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAA;AACzD,QAAA,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,EAAE,CAAA;KACrE;AAED,IAAA,OAAO,CAAC,KAAgC,EAAA;AACpC,QAAA,OAAO,IAAI,UAAU,CAAC,MAAK;AACvB,YAAA,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAClG,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;AAErD,YAAA,OAAO,MAAK;AACR,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAA;gBACnC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AAChC,gBAAA,IAAI,GAAG,IAAI,CAAC,EAAE;AACV,oBAAA,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAA;AACtB,oBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AACtB,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;iBAChC;AACL,aAAC,CAAA;AACL,SAAC,CAAC,CAAA;KACL;8GAnDQ,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;;2FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAPtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACF,wBAAA,cAAc,EAAE,UAAU;AAC1B,wBAAA,oBAAoB,EAAE,UAAU;AACnC,qBAAA;AACJ,iBAAA,CAAA;;;ACXD;MAWa,SAAS,CAAA;AACT,IAAA,SAAS,CAAwD;AA0B1E,IAAA,WAAA,GAAA;AA1BS,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;AACjE,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QAE1B,IAAS,CAAA,SAAA,GAAG,KAAK,CAAmB,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAA;QACnE,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAA;AAE1C,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC/B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;AAClC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,CAAA;AAE/C,YAAA,IAAI,SAAS,KAAK,KAAK,IAAI,UAAU,EAAE;gBACnC,OAAO,CAAC,CAAC,CAAA;aACZ;AAED,YAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AAC/B,gBAAA,OAAO,SAAS,CAAA;aACnB;AAED,YAAA,IAAI,SAAS,KAAK,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AAC5D,gBAAA,OAAO,QAAQ,CAAA;aAClB;AAED,YAAA,OAAO,CAAC,CAAA;AACZ,SAAC,CAAC,CAAA;;AAIE,QAAA,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAA;KAC/D;AAED,IAAA,OAAO,CAAC,KAA4C,EAAA;QAChD,IAAI,KAAK,YAAY,UAAU,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE;YACtD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;SACnC;aAAM;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;SACzC;KACJ;8GAtCQ,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,aAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAC,UAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBATrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,IAAI,EAAE;AACF,wBAAA,iBAAiB,EAAE,aAAa;AACnC,qBAAA;oBACD,cAAc,EAAE,CAAC,UAAU,CAAC;AAC/B,iBAAA,CAAA;;;MCyBY,gBAAgB,CAAA;AAChB,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAC5B,IAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AAEtB,IAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAC9C,KAAK,CACD,SAAS,CAAgB,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EACtF,SAAS,CAAgB,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CACvF,CAAC,IAAI,CACF,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK,CAAC,EACjD,KAAK,EAAE,CACV,CACJ,CAAA;IAEQ,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAChD,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CACrE,SAAS,CAAC,IAAI,CAAC,EACf,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EACvC,WAAW,CAAC,CAAC,CAAC,CACjB,CACJ,CAAA;AAED,IAAA,KAAK,CAAC,UAA+B,EAAE,GAAG,UAAuB,EAAA;AAC7D,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,GAA+B,KAClD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;aACpB,IAAI,CACD,oBAAoB,EAAE,EACtB,SAAS,CAAC,OAAO,IAAG;YAChB,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,CAAC,CAAA;YACpC,IAAI,OAAO,EAAE;gBACT,OAAO,IAAI,CAAC,SAAS,CAAA;aACxB;iBAAM;AACH,gBAAA,OAAO,KAAK,CAAA;aACf;AACL,SAAC,CAAC,EACF,GAAG,CAAC,KAAK,IAAG;AACR,YAAA,IAAI,KAAK,CAAC,gBAAgB,EAAE;AACxB,gBAAA,OAAO,EAAE,CAAA;aACZ;YAED,MAAM,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAA;YACxD,MAAM,OAAO,GAAG,UAAU;iBACrB,MAAM,CAAC,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC;iBAC7C,GAAG,CAAC,EAAE,IAAG;gBACN,OAAO;AACH,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,SAAS,EAAE,EAAE;iBAChB,CAAA;AACL,aAAC,CAAC,CAAA;AAEN,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpB,KAAK,CAAC,cAAc,EAAE,CAAA;aACzB;AAED,YAAA,OAAO,OAAO,CAAA;SACjB,CAAC,EACF,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EACrC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CACvC;AACA,aAAA,SAAS,CAAC,GAAG,CAAC,CACtB,CAAA;KACJ;AAED,IAAA,QAAQ,CAAC,UAA+B,EAAA;AACpC,QAAA,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE;YAC5B,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAA;SAC1D;AAAM,aAAA,IAAI,UAAU,YAAY,UAAU,EAAE;AACzC,YAAA,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,IAAI,IAAI,CAAC,CAAC,CAAA;SAChE;aAAM;YACH,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CACxB,SAAS,CAAC,KAAK,IAAG;gBACd,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,UAAU,EAAE;AACtD,oBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;iBAC9B;qBAAM;AACH,oBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;iBACnB;aACJ,CAAC,CACL,CAAA;SACJ;KACJ;AAED,IAAA,gBAAgB,CAAC,OAAoB,EAAA;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;KACjG;8GAnFQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;AAuFlC,SAAS,WAAW,CAAC,EAAa,EAAA;AAC9B,IAAA,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;AAChB,IAAA,IAAI,EAAE,CAAC,KAAK,EAAE;QACV,GAAG,IAAI,QAAQ,CAAA;KAClB;AACD,IAAA,IAAI,EAAE,CAAC,IAAI,EAAE;QACT,GAAG,IAAI,OAAO,CAAA;KACjB;AACD,IAAA,IAAI,EAAE,CAAC,GAAG,EAAE;QACR,GAAG,IAAI,MAAM,CAAA;KAChB;AACD,IAAA,GAAG,IAAI,CAAG,EAAA,EAAE,CAAC,KAAK,EAAE,CAAA;AACpB,IAAA,OAAO,GAAG,CAAA;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAoB,EAAA;IAC1C,OAAO;QACH,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,KAAK,EAAE,KAAK,CAAC,QAAQ;QACrB,IAAI,EAAE,KAAK,CAAC,OAAO;QACnB,GAAG,EAAE,KAAK,CAAC,MAAM;AACjB,QAAA,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,GAAG,IAAI,GAAG,MAAM;KAChD,CAAA;AACL;;ACtFgB,SAAA,YAAY,CAAyB,KAAwB,EAAE,IAAY,EAAA;IACvF,OAAO;AACH,QAAA,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,KAAK,CAAC,MAAO;QACrB,MAAM,EAAE,KAAK,CAAC,MAAO;QACrB,WAAW,EAAE,KAAK,CAAC,WAAY;QAC/B,KAAK,EAAE,KAAK,CAAC,KAAM;QACnB,QAAQ,EAAE,KAAK,CAAC,QAAS;KACvB,CAAA;AACV,CAAC;AAcY,MAAA,SAAS,GAAsC;AACxD,IAAA,SAAS,EAAE;AACP,QAAA,MAAM,EAAwB,SAAA;AAC9B,QAAA,WAAW,EAA0B,OAAA;AACrC,QAAA,KAAK,EAAoB,OAAA;QACzB,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;AAC7C,KAAA;AACD,IAAA,SAAS,EAAE;AACP,QAAA,MAAM,EAAyB,UAAA;AAC/B,QAAA,WAAW,EAA0B,OAAA;AACrC,QAAA,KAAK,EAAqB,QAAA;QAC1B,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;AAC7C,KAAA;AACD,IAAA,OAAO,EAAE;AACL,QAAA,MAAM,EAAyB,UAAA;AAC/B,QAAA,WAAW,EAA0B,OAAA;AACrC,QAAA,KAAK,EAAkB,KAAA;QACvB,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;AAC5C,KAAA;AACD,IAAA,UAAU,EAAE;AACR,QAAA,MAAM,EAAwB,SAAA;AAC9B,QAAA,WAAW,EAA0B,OAAA;AACrC,QAAA,KAAK,EAAoB,OAAA;QACzB,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;AAC7C,KAAA;AACD,IAAA,SAAS,EAAE;AACP,QAAA,MAAM,EAAyB,UAAA;AAC/B,QAAA,WAAW,EAA0B,OAAA;AACrC,QAAA,KAAK,EAAqB,QAAA;QAC1B,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;AAC7C,KAAA;AACD,IAAA,QAAQ,EAAE;AACN,QAAA,MAAM,EAAyB,UAAA;AAC/B,QAAA,WAAW,EAA0B,OAAA;AACrC,QAAA,KAAK,EAAkB,KAAA;QACvB,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;AAC7C,KAAA;AACD,IAAA,WAAW,EAAE;AACT,QAAA,MAAM,EAAyB,UAAA;AAC/B,QAAA,WAAW,EAA0B,OAAA;AACrC,QAAA,KAAK,EAAkB,KAAA;QACvB,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;AAC5C,KAAA;;;ACzHL,MAAM,OAAO,GAAG;AACZ,IAAA,CAAA,OAAA,4BAAsB,gBAAgB;AACtC,IAAA,CAAA,QAAA,6BAAuB,eAAe;AACtC,IAAA,CAAA,KAAA,0BAAoB,cAAc;CACrC,CAAA;AAEY,MAAA,QAAQ,GAA2B;AAC5C,IAAA,IAAI,EAAE,UAAU;AAChB,IAAA,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC;AACtG,IAAA,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,MAAM,IACX,MAAM,CAAC,IAAI,CACP,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,EAC7D,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,EACpC,GAAG,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAC1D;;;MCaI,eAAe,CAAA;AACf,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAC5B,IAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACtB,IAAA,UAAU,GAAG,IAAI,GAAG,EAAsE,CAAA;AAEnG,IAAA,KAAK,CAAyB,EAAgB,EAAE,GAAG,QAAsB,EAAA;AACrE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAK;AACrC,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAA;AAC/D,YAAA,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;AAE3E,YAAA,IAAI,WAA2C,CAAA;YAC/C,OAAO,OAAO,CAAC,IAAI,CACf,MAAM,CAAC,KAAK,IAAG;AACX,gBAAA,IAAI,WAAW,IAAI,IAAI,EAAE;AACrB,oBAAA,WAAW,GAAG,KAAK,CAAC,WAAW,CAAA;iBAClC;AACD,gBAAA,OAAO,WAAW,KAAK,KAAK,CAAC,WAAW,CAAA;AAC5C,aAAC,CAAC,EACF,SAAS,CAAC,CAAC,IACP,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAK;gBAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAY,CAAC,CAAC,IAAI,CACrC,SAAS,CAAC,CAAC,CAAC,EACZ,IAAI,CACA,CAAC,KAAK,EAAE,IAAI,KAAK,cAAc,CAAI,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,EAAO,CAAC,EAC9D,EAA0B,CAC7B,EACD,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAqB,KAAA,yBAAE,IAAI,CAAC,EAC1D,KAAK,EAAE,CACV,CAAA;AACD,gBAAA,OAAO,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;aAC1D,CAAC,CACL,CACJ,CAAA;AACL,SAAC,CAAC,CAAA;KACL;IAED,aAAa,CAAyB,OAAoB,EAAE,SAAmB,EAAA;QAC3E,MAAM,QAAQ,GAAa,EAAE,CAAA;QAC7B,MAAM,OAAO,GAAgC,EAAE,CAAA;AAE/C,QAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;AAC1B,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;AAE5B,YAAA,MAAM,SAAS,GACX,IAAI,CAAC,KAAK,KAAuB,OAAA;AAC7B,kBAAE,QAAQ;AACV,mBAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;YAEvE,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AAChC,gBAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACvB;SACJ;AAED,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,YAAA,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;SACtC;AAED,QAAA,MAAM,UAAU,GAAG,CAAC,KAAe,KAAI;AACnC,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpB,OAAO,EAAE,EAAE,CAAA;aACd;AAAM,iBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC3B,OAAO,IAAI,CAAC,YAAY,CAAI,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;aACjD;iBAAM;gBACH,OAAO,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAI,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;aACpE;AACL,SAAC,CAAA;QAED,OAAO;AACH,YAAA,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC7B,YAAA,KAAK,EAAE;AACH,gBAAA,CAAA,OAAA,kCAA4B,UAAU,CAAC,OAAO,wCAA0B,CAAC;AACzE,gBAAA,CAAA,OAAA,kCAA4B,UAAU,CAAC,OAAO,wCAA0B,CAAC;AAC5E,aAAA;SACJ,CAAA;KACJ;IAED,YAAY,CAAyB,OAAoB,EAAE,IAAY,EAAA;AACnE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAK;YACrC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;AACrC,YAAA,MAAM,SAAS,GAAG,MAAM,KAAK,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,OAAO,CAAA;YAClE,IAAI,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AAEpD,YAAA,IAAI,eAAe,IAAI,IAAI,EAAE;AACzB,gBAAA,eAAe,GAAG,IAAI,GAAG,EAAE,CAAA;gBAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;aAClD;YAED,IAAI,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACxC,YAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AAClB,gBAAA,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;AACvD,gBAAA,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,CAAA;AAEhC,gBAAA,QAAQ,GAAG,SAAS,CAAgB,SAAS,EAAE,IAAI,EAAE,OAAc,CAAC,CAAC,IAAI,CACrE,QAAQ,CAAC,MAAK;AACV,oBAAA,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;iBAC/B,CAAC,EACF,GAAG,CACC,MAAM,KACD;oBACG,MAAM;oBACN,KAAK;oBACL,WAAW;AACX,oBAAA,cAAc,EAAE,OAAO,KAAK,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI;iBAChF,CAAoC,CAC5C,CACJ,CAAA;gBAED,IAAI,KAAK,KAAuB,OAAA,2BAAE;oBAC9B,QAAQ,GAAG,QAAQ,CAAC,IAAI,CACpB,GAAG,CAAC,KAAK,IAAG;wBACR,CAAC;wBAAC,KAAoC,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAqB,CAAA;qBACrF,CAAC,CACL,CAAA;iBACJ;gBAED,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;AAEjC,gBAAA,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;aACtC;AAED,YAAA,OAAO,QAA4C,CAAA;AACvD,SAAC,CAAC,CAAA;KACL;8GA1HQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;AA8HlC,SAAS,iBAAiB,CAAC,KAA8B,EAAA;AACrD,IAAA,IAAI,KAAK,YAAY,UAAU,EAAE;QAC7B,OAAO;AACH,YAAA;gBACI,CAAC,EAAE,KAAK,CAAC,OAAO;gBAChB,CAAC,EAAE,KAAK,CAAC,OAAO;AACnB,aAAA;SACJ,CAAA;KACJ;SAAM;AACH,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;AACrC,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;AACzC,SAAC,CAAC,CAAA;KACL;AACL,CAAC;AAED,SAAS,cAAc,CAAyB,KAAiB,EAAA;AAC7D,IAAA,IAAI,KAAK,CAAC,KAAK,KAAA,OAAA,2BAAyB;AACpC,QAAA,KAAK,CAAC,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;AACrD,YAAA,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAA;AACxF,SAAC,CAAC,CAAA;KACL;AAAM,SAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;QACvB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AAChD,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,YAAA,OAAO,KAAK,CAAA;SACf;AAED,QAAA,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACzC,YAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;YACrB,OAAO;gBACH,KAAK,EAAE,CAAC,CAAC,KAAK;AACd,gBAAA,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AACpD,gBAAA,SAAS,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;aAC5E,CAAA;AACL,SAAC,CAAC,CAAA;KACL;AAED,IAAA,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,IAAY,EAAA;IACzC,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;AACjD,CAAC;AAED;AACA;AACA,SAAS,IAAI;;AC/Mb;;AAEG;;;;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Observable } from "rxjs";
|
|
2
2
|
import { ElementInput } from "@ngutil/common";
|
|
3
|
+
import { FocusState } from "../focus";
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export interface Keystroke {
|
|
5
6
|
key: KeyboardEvent["key"];
|
|
@@ -12,10 +13,10 @@ export interface KeystrokeEvent {
|
|
|
12
13
|
original: KeyboardEvent;
|
|
13
14
|
keystroke: Keystroke;
|
|
14
15
|
}
|
|
16
|
+
export type KeystrokeActivation = ElementInput | FocusState | Observable<ElementInput | FocusState | boolean>;
|
|
15
17
|
export declare class KeystrokeService {
|
|
16
18
|
#private;
|
|
17
|
-
|
|
18
|
-
watch(target: ElementInput, keystroke: Keystroke): Observable<KeystrokeEvent>;
|
|
19
|
+
watch(activation: KeystrokeActivation, ...keystrokes: Keystroke[]): Observable<KeystrokeEvent>;
|
|
19
20
|
static ɵfac: i0.ɵɵFactoryDeclaration<KeystrokeService, never>;
|
|
20
21
|
static ɵprov: i0.ɵɵInjectableDeclaration<KeystrokeService>;
|
|
21
22
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngutil/aria",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.53",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/cdk": "^17.3.6",
|
|
6
6
|
"@angular/common": "^17.3.6",
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
"rxjs": "^7.8.1",
|
|
9
9
|
"tabbable": "^6.2.0",
|
|
10
10
|
"utility-types": "^3.11.0",
|
|
11
|
-
"@ngutil/
|
|
12
|
-
"@ngutil/
|
|
11
|
+
"@ngutil/style": "0.0.53",
|
|
12
|
+
"@ngutil/common": "0.0.53"
|
|
13
13
|
},
|
|
14
14
|
"publishConfig": {
|
|
15
15
|
"access": "public",
|