@ngutil/aria 0.0.34 → 0.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/focus/focus-state.directive.mjs +38 -11
- package/esm2022/focus/focus.service.mjs +6 -4
- package/esm2022/focus/focusable.directive.mjs +11 -2
- package/fesm2022/ngutil-aria.mjs +50 -14
- package/fesm2022/ngutil-aria.mjs.map +1 -1
- package/focus/focus-state.directive.d.ts +11 -6
- package/focus/focus.service.d.ts +2 -4
- package/focus/focusable.directive.d.ts +5 -1
- package/package.json +2 -2
|
@@ -1,28 +1,55 @@
|
|
|
1
|
-
|
|
1
|
+
var _a;
|
|
2
|
+
import { Directive, effect, ElementRef, inject } from "@angular/core";
|
|
2
3
|
import { takeUntilDestroyed, toSignal } from "@angular/core/rxjs-interop";
|
|
3
|
-
import { shareReplay } from "rxjs";
|
|
4
|
+
import { BehaviorSubject, combineLatest, debounceTime, map, Observable, shareReplay, switchMap } from "rxjs";
|
|
5
|
+
import { isElementInput } from "@ngutil/common";
|
|
4
6
|
import { FocusService } from "./focus.service";
|
|
5
7
|
import * as i0 from "@angular/core";
|
|
6
8
|
export class FocusState {
|
|
7
9
|
#focus;
|
|
8
10
|
#el;
|
|
9
|
-
#
|
|
11
|
+
#parent;
|
|
12
|
+
#default;
|
|
13
|
+
#self;
|
|
14
|
+
#connected;
|
|
15
|
+
#connEvent;
|
|
10
16
|
constructor() {
|
|
11
17
|
this.#focus = inject(FocusService);
|
|
12
18
|
this.#el = inject(ElementRef);
|
|
13
|
-
this.#
|
|
14
|
-
this
|
|
15
|
-
this
|
|
16
|
-
this
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
this.#parent = inject(_a, { optional: true, skipSelf: true });
|
|
20
|
+
this.#default = { element: this.#el.nativeElement, origin: null };
|
|
21
|
+
this.#self = this.#focus.watch(this.#el).pipe(takeUntilDestroyed(), shareReplay(1));
|
|
22
|
+
this.#connected = new BehaviorSubject([]);
|
|
23
|
+
this.#connEvent = this.#connected.pipe(switchMap(values => combineLatest(values)), takeUntilDestroyed(), map(values => values.filter(v => v.origin != null)), map(values => values[0] || this.#default), shareReplay(1));
|
|
24
|
+
this.event$ = combineLatest([this.#self, this.#connEvent]).pipe(debounceTime(100), map(values => values.find(v => v.origin != null) || this.#default), shareReplay(1));
|
|
25
|
+
this.origin$ = this.event$.pipe(map(event => event.origin));
|
|
26
|
+
this.within$ = this.event$.pipe(map(event => (event.element !== this.#el.nativeElement ? event.origin : null)));
|
|
27
|
+
this.event = toSignal(this.event$, { rejectErrors: true, manualCleanup: true });
|
|
28
|
+
this.origin = toSignal(this.origin$, { rejectErrors: true, manualCleanup: true });
|
|
29
|
+
this.within = toSignal(this.within$, { rejectErrors: true, manualCleanup: true });
|
|
20
30
|
// TODO: miért kell ez?, ha nincs itt akkor nem frissül
|
|
21
31
|
effect(() => this.origin(), { allowSignalWrites: false });
|
|
32
|
+
this.#parent?.connect(this).pipe(takeUntilDestroyed()).subscribe();
|
|
33
|
+
}
|
|
34
|
+
connect(value) {
|
|
35
|
+
return new Observable(() => {
|
|
36
|
+
const src = (isElementInput(value) ? this.#focus.watch(value) : value.event$).pipe(shareReplay(1));
|
|
37
|
+
this.#connected.next([...this.#connected.value, src]);
|
|
38
|
+
return () => {
|
|
39
|
+
let current = this.#connected.value;
|
|
40
|
+
const idx = current.indexOf(src);
|
|
41
|
+
if (idx >= 0) {
|
|
42
|
+
current = [...current];
|
|
43
|
+
current.splice(idx, 1);
|
|
44
|
+
this.#connected.next(current);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
});
|
|
22
48
|
}
|
|
23
49
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: FocusState, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
24
50
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: FocusState, isStandalone: true, host: { properties: { "attr.focus": "origin()", "attr.focusWithin": "within()" } }, ngImport: i0 }); }
|
|
25
51
|
}
|
|
52
|
+
_a = FocusState;
|
|
26
53
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: FocusState, decorators: [{
|
|
27
54
|
type: Directive,
|
|
28
55
|
args: [{
|
|
@@ -33,4 +60,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
|
|
|
33
60
|
}
|
|
34
61
|
}]
|
|
35
62
|
}], ctorParameters: () => [] });
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtc3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXJpYS9zcmMvZm9jdXMvZm9jdXMtc3RhdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUV6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBSTVHLE9BQU8sRUFBbUIsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFaEUsT0FBTyxFQUFnQixZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTs7QUFTNUQsTUFBTSxPQUFPLFVBQVU7SUFDVixNQUFNLENBQXVCO0lBQzdCLEdBQUcsQ0FBOEM7SUFDakQsT0FBTyxDQUF5RDtJQUNoRSxRQUFRLENBQWtFO0lBRTFFLEtBQUssQ0FBeUU7SUFFOUUsVUFBVSxDQUFzRDtJQUNoRSxVQUFVLENBTWxCO0lBZUQ7UUE3QlMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUM3QixRQUFHLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQTtRQUNqRCxZQUFPLEdBQUcsTUFBTSxDQUFDLEVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDaEUsYUFBUSxHQUFpQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUE7UUFFMUUsVUFBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUU5RSxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQTZCLEVBQUUsQ0FBQyxDQUFBO1FBQ2hFLGVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDdEMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQzFDLGtCQUFrQixFQUFFLEVBQ3BCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQ25ELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3pDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDakIsQ0FBQTtRQUVRLFdBQU0sR0FBNkIsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3pGLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUNsRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2pCLENBQUE7UUFFUSxZQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDdEQsWUFBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTFHLFVBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDMUUsV0FBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUM1RSxXQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBR2pGLHVEQUF1RDtRQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUN6RCxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ3RFLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBZ0M7UUFDcEMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2xHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBRXJELE9BQU8sR0FBRyxFQUFFO2dCQUNSLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFBO2dCQUNuQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNoQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDWCxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFBO29CQUN0QixPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtvQkFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQ2pDLENBQUM7WUFDTCxDQUFDLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7OEdBbkRRLFVBQVU7a0dBQVYsVUFBVTs7OzJGQUFWLFVBQVU7a0JBUHRCLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDRixjQUFjLEVBQUUsVUFBVTt3QkFDMUIsb0JBQW9CLEVBQUUsVUFBVTtxQkFDbkM7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b1NpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiXG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBtYXAsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IEVsZW1lbnRJbnB1dCB9IGZyb20gXCJkaXN0L3BhY2thZ2VzL2NvbW1vblwiXG5cbmltcG9ydCB7IENvbm5lY3RQcm90b2NvbCwgaXNFbGVtZW50SW5wdXQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBGb2N1c0NoYW5nZXMsIEZvY3VzU2VydmljZSB9IGZyb20gXCIuL2ZvY3VzLnNlcnZpY2VcIlxuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgXCJbYXR0ci5mb2N1c11cIjogXCJvcmlnaW4oKVwiLFxuICAgICAgICBcIlthdHRyLmZvY3VzV2l0aGluXVwiOiBcIndpdGhpbigpXCJcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEZvY3VzU3RhdGUgaW1wbGVtZW50cyBDb25uZWN0UHJvdG9jb2wge1xuICAgIHJlYWRvbmx5ICNmb2N1cyA9IGluamVjdChGb2N1c1NlcnZpY2UpXG4gICAgcmVhZG9ubHkgI2VsID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKVxuICAgIHJlYWRvbmx5ICNwYXJlbnQgPSBpbmplY3QoRm9jdXNTdGF0ZSwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUgfSlcbiAgICByZWFkb25seSAjZGVmYXVsdDogRm9jdXNDaGFuZ2VzID0geyBlbGVtZW50OiB0aGlzLiNlbC5uYXRpdmVFbGVtZW50LCBvcmlnaW46IG51bGwgfVxuXG4gICAgcmVhZG9ubHkgI3NlbGYgPSB0aGlzLiNmb2N1cy53YXRjaCh0aGlzLiNlbCkucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSwgc2hhcmVSZXBsYXkoMSkpXG5cbiAgICByZWFkb25seSAjY29ubmVjdGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPYnNlcnZhYmxlPEZvY3VzQ2hhbmdlcz5bXT4oW10pXG4gICAgcmVhZG9ubHkgI2Nvbm5FdmVudCA9IHRoaXMuI2Nvbm5lY3RlZC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodmFsdWVzID0+IGNvbWJpbmVMYXRlc3QodmFsdWVzKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgICBtYXAodmFsdWVzID0+IHZhbHVlcy5maWx0ZXIodiA9PiB2Lm9yaWdpbiAhPSBudWxsKSksXG4gICAgICAgIG1hcCh2YWx1ZXMgPT4gdmFsdWVzWzBdIHx8IHRoaXMuI2RlZmF1bHQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGV2ZW50JDogT2JzZXJ2YWJsZTxGb2N1c0NoYW5nZXM+ID0gY29tYmluZUxhdGVzdChbdGhpcy4jc2VsZiwgdGhpcy4jY29ubkV2ZW50XSkucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgIG1hcCh2YWx1ZXMgPT4gdmFsdWVzLmZpbmQodiA9PiB2Lm9yaWdpbiAhPSBudWxsKSB8fCB0aGlzLiNkZWZhdWx0KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICByZWFkb25seSBvcmlnaW4kID0gdGhpcy5ldmVudCQucGlwZShtYXAoZXZlbnQgPT4gZXZlbnQub3JpZ2luKSlcbiAgICByZWFkb25seSB3aXRoaW4kID0gdGhpcy5ldmVudCQucGlwZShtYXAoZXZlbnQgPT4gKGV2ZW50LmVsZW1lbnQgIT09IHRoaXMuI2VsLm5hdGl2ZUVsZW1lbnQgPyBldmVudC5vcmlnaW4gOiBudWxsKSkpXG5cbiAgICByZWFkb25seSBldmVudCA9IHRvU2lnbmFsKHRoaXMuZXZlbnQkLCB7IHJlamVjdEVycm9yczogdHJ1ZSwgbWFudWFsQ2xlYW51cDogdHJ1ZSB9KVxuICAgIHJlYWRvbmx5IG9yaWdpbiA9IHRvU2lnbmFsKHRoaXMub3JpZ2luJCwgeyByZWplY3RFcnJvcnM6IHRydWUsIG1hbnVhbENsZWFudXA6IHRydWUgfSlcbiAgICByZWFkb25seSB3aXRoaW4gPSB0b1NpZ25hbCh0aGlzLndpdGhpbiQsIHsgcmVqZWN0RXJyb3JzOiB0cnVlLCBtYW51YWxDbGVhbnVwOiB0cnVlIH0pXG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8gVE9ETzogbWnDqXJ0IGtlbGwgZXo/LCBoYSBuaW5jcyBpdHQgYWtrb3IgbmVtIGZyaXNzw7xsXG4gICAgICAgIGVmZmVjdCgoKSA9PiB0aGlzLm9yaWdpbigpLCB7IGFsbG93U2lnbmFsV3JpdGVzOiBmYWxzZSB9KVxuICAgICAgICB0aGlzLiNwYXJlbnQ/LmNvbm5lY3QodGhpcykucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKClcbiAgICB9XG5cbiAgICBjb25uZWN0KHZhbHVlOiBGb2N1c1N0YXRlIHwgRWxlbWVudElucHV0KSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSAoaXNFbGVtZW50SW5wdXQodmFsdWUpID8gdGhpcy4jZm9jdXMud2F0Y2godmFsdWUpIDogdmFsdWUuZXZlbnQkKS5waXBlKHNoYXJlUmVwbGF5KDEpKVxuICAgICAgICAgICAgdGhpcy4jY29ubmVjdGVkLm5leHQoWy4uLnRoaXMuI2Nvbm5lY3RlZC52YWx1ZSwgc3JjXSlcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IHRoaXMuI2Nvbm5lY3RlZC52YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IGN1cnJlbnQuaW5kZXhPZihzcmMpXG4gICAgICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBbLi4uY3VycmVudF1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNjb25uZWN0ZWQubmV4dChjdXJyZW50KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=
|
|
@@ -4,6 +4,7 @@ import { inject, Inject, Injectable, NgZone } from "@angular/core";
|
|
|
4
4
|
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
|
5
5
|
import { combineLatest, filter, fromEvent, map, shareReplay, startWith } from "rxjs";
|
|
6
6
|
import { focusable, isFocusable } from "tabbable";
|
|
7
|
+
import { coerceElement } from "@ngutil/common";
|
|
7
8
|
import { ActivityService } from "../activity";
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
const EVENT_OPTIONS = {
|
|
@@ -48,13 +49,14 @@ export class FocusService {
|
|
|
48
49
|
}), filter(v => !!v), shareReplay(1));
|
|
49
50
|
});
|
|
50
51
|
}
|
|
51
|
-
watch(
|
|
52
|
+
watch(element) {
|
|
53
|
+
const el = coerceElement(element);
|
|
52
54
|
return this.events.pipe(map(event => {
|
|
53
55
|
if (event.element &&
|
|
54
|
-
(event.element ===
|
|
56
|
+
(event.element === el || (typeof el.contains === "function" && el.contains(event.element)))) {
|
|
55
57
|
return event;
|
|
56
58
|
}
|
|
57
|
-
return { element:
|
|
59
|
+
return { element: el, origin: null };
|
|
58
60
|
}));
|
|
59
61
|
}
|
|
60
62
|
focus(node, _origin) {
|
|
@@ -89,4 +91,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
|
|
|
89
91
|
function isActivityElement(activityEl, focused) {
|
|
90
92
|
return activityEl != null && focused != null && (activityEl === focused || focused.contains(activityEl));
|
|
91
93
|
}
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FyaWEvc3JjL2ZvY3VzL2ZvY3VzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBYyxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRWhHLE9BQU8sRUFBRSxTQUFTLEVBQXlCLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUV4RSxPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQTs7QUFFN0QsTUFBTSxhQUFhLEdBQTRCO0lBQzNDLE9BQU8sRUFBRSxJQUFJO0lBQ2IsT0FBTyxFQUFFLElBQUk7Q0FDaEIsQ0FBQTtBQWdCRCxNQUFNLE9BQU8sWUFBWTtJQUNaLFNBQVMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDbkMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBRzlDLFlBQThCLFFBQWtCLEVBQWtCLElBQVk7UUFDMUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ3RDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVB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SUFDaEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFtQjtRQUM5QixPQUFPLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQ3pELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFtQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDekMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFhO1FBQ3JCLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBbUIsRUFBRSx1QkFBZ0MsS0FBSztRQUNoRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO0lBQy9ELENBQUM7OEdBdkZRLFlBQVksa0JBS0QsUUFBUSxhQUE4QixNQUFNO2tIQUx2RCxZQUFZLGNBREMsTUFBTTs7MkZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFNakIsTUFBTTsyQkFBQyxRQUFROzswQkFBdUIsTUFBTTsyQkFBQyxNQUFNOztBQXFGcEUsU0FBUyxpQkFBaUIsQ0FBQyxVQUF3QixFQUFFLE9BQXFCO0lBQ3RFLE9BQU8sVUFBVSxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7QUFDNUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzVHJhcEZhY3RvcnkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2ExMXlcIlxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIlxuXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLCBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSwgc3RhcnRXaXRoIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBmb2N1c2FibGUsIHR5cGUgRm9jdXNhYmxlRWxlbWVudCwgaXNGb2N1c2FibGUgfSBmcm9tIFwidGFiYmFibGVcIlxuXG5pbXBvcnQgeyBBY3Rpdml0eU9yaWdpbiwgQWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSBcIi4uL2FjdGl2aXR5XCJcblxuY29uc3QgRVZFTlRfT1BUSU9OUzogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBwYXNzaXZlOiB0cnVlXG59XG5cbmV4cG9ydCB0eXBlIEZvY3VzT3JpZ2luID0gQWN0aXZpdHlPcmlnaW4gfCBudWxsXG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9jdXNDaGFuZ2VzIHtcbiAgICBvcmlnaW46IEZvY3VzT3JpZ2luXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb2N1c2FibGVFdmVudCB7XG4gICAgb3JpZ2luOiBGb2N1c09yaWdpblxuICAgIGV4YWN0OiBib29sZWFuXG4gICAgbm9kZTogTm9kZVxufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgRm9jdXNTZXJ2aWNlIHtcbiAgICByZWFkb25seSAjYWN0aXZpdHkgPSBpbmplY3QoQWN0aXZpdHlTZXJ2aWNlKVxuICAgIHJlYWRvbmx5ICNmb2N1c1RyYXAgPSBpbmplY3QoRm9jdXNUcmFwRmFjdG9yeSlcbiAgICByZWFkb25seSBldmVudHM6IE9ic2VydmFibGU8Rm9jdXNDaGFuZ2VzPlxuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnQ6IERvY3VtZW50LCBASW5qZWN0KE5nWm9uZSkgem9uZTogTmdab25lKSB7XG4gICAgICAgIHRoaXMuZXZlbnRzID0gem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb2N1cyA9IGZyb21FdmVudChkb2N1bWVudCwgXCJmb2N1c1wiLCBFVkVOVF9PUFRJT05TKS5waXBlKG1hcChlID0+IGUudGFyZ2V0IGFzIE5vZGUpKVxuICAgICAgICAgICAgY29uc3QgYmx1ciA9IGZyb21FdmVudChkb2N1bWVudCwgXCJibHVyXCIsIEVWRU5UX09QVElPTlMpLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgICAgIG1hcChlID0+IChlPy50YXJnZXQgYXMgTm9kZSkgfHwgbnVsbClcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3Qoe1xuICAgICAgICAgICAgICAgIGFjdGl2aXR5OiB0aGlzLiNhY3Rpdml0eS5ldmVudHMsXG4gICAgICAgICAgICAgICAgZm9jdXM6IGZvY3VzLFxuICAgICAgICAgICAgICAgIGJsdXI6IGJsdXJcbiAgICAgICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgICAgICAgICAgbWFwKCh7IGFjdGl2aXR5LCBmb2N1cywgYmx1ciB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHsgYWN0aXZpdHksIGZvY3VzLCBibHVyIH0pXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZm9jdXMgaW4gd2l0aCBhbHQrdGFiXG4gICAgICAgICAgICAgICAgICAgIGlmIChibHVyID09PSBkb2N1bWVudCAmJiBhY3Rpdml0eS5vcmlnaW4gPT09IFwia2V5Ym9hcmRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb3JpZ2luOiBcInByb2dyYW1cIiwgZWxlbWVudDogZm9jdXMgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvY3VzID09PSBkb2N1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb3JpZ2luOiBcInByb2dyYW1cIiwgZWxlbWVudDogZm9jdXMgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgcHJlc3MgdGFiIGJ1dHRvbiwgZmlyc3QgZmlyZSB0aGUgZXZlbnQgaW4gdGhlIGN1cnJlbnRseSBmb2N1c2VkIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvY3VzID09PSBibHVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBwcmVzcyB0YWIsIHRoZSBhY3Rpdml0eSBpcyBvbiB0aGUgY3VycmVudCBmdWNlc2QgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gd2hlbiBibHVyIGlzIGNoYW5nZWQgdG8gaXQsIHRoZSBmb2N1cyBjaGFuZ2UgaXMgY29tcGxldGVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpdml0eS5vcmlnaW4gPT09IFwia2V5Ym9hcmRcIiAmJiBpc0FjdGl2aXR5RWxlbWVudChhY3Rpdml0eS5ub2RlLCBibHVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb3JpZ2luOiBcImtleWJvYXJkXCIsIGVsZW1lbnQ6IGZvY3VzIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FjdGl2aXR5RWxlbWVudChhY3Rpdml0eS5ub2RlLCBmb2N1cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9yaWdpbjogYWN0aXZpdHkub3JpZ2luLCBlbGVtZW50OiBmb2N1cyB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvcmlnaW46IFwicHJvZ3JhbVwiLCBlbGVtZW50OiBmb2N1cyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgICAgICApIGFzIGFueVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHdhdGNoKG5vZGU6IE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRzLnBpcGUoXG4gICAgICAgICAgICBtYXAoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuZWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICAgICAoZXZlbnQuZWxlbWVudCA9PT0gbm9kZSB8fCAodHlwZW9mIG5vZGUuY29udGFpbnMgPT09IFwiZnVuY3Rpb25cIiAmJiBub2RlLmNvbnRhaW5zKGV2ZW50LmVsZW1lbnQpKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGVsZW1lbnQ6IG5vZGUsIG9yaWdpbjogbnVsbCB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgfVxuXG4gICAgZm9jdXMobm9kZTogSFRNTEVsZW1lbnQsIF9vcmlnaW46IEZvY3VzT3JpZ2luIHwgbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBmb2N1cyBvcmlnaW5cbiAgICAgICAgbm9kZS5mb2N1cygpXG4gICAgfVxuXG4gICAgcXVlcnlGb2N1c2FibGUoaW5zaWRlOiBIVE1MRWxlbWVudCk6IEZvY3VzYWJsZUVsZW1lbnRbXSB7XG4gICAgICAgIHJldHVybiBmb2N1c2FibGUoaW5zaWRlLCB7IGluY2x1ZGVDb250YWluZXI6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgZ2V0Rmlyc3RGb2N1c2FibGUoaW5zaWRlOiBIVE1MRWxlbWVudCk6IEZvY3VzYWJsZUVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeUZvY3VzYWJsZShpbnNpZGUpWzBdXG4gICAgfVxuXG4gICAgaXNGb2N1c2FibGUobm9kZTogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaXNGb2N1c2FibGUobm9kZSlcbiAgICB9XG5cbiAgICBmb2N1c1RyYXAoaW5zaWRlOiBIVE1MRWxlbWVudCwgZGVmZXJDYXB0dXJlRWxlbWVudHM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZm9jdXNUcmFwLmNyZWF0ZShpbnNpZGUsIGRlZmVyQ2FwdHVyZUVsZW1lbnRzKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNBY3Rpdml0eUVsZW1lbnQoYWN0aXZpdHlFbD86IE5vZGUgfCBudWxsLCBmb2N1c2VkPzogTm9kZSB8IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWN0aXZpdHlFbCAhPSBudWxsICYmIGZvY3VzZWQgIT0gbnVsbCAmJiAoYWN0aXZpdHlFbCA9PT0gZm9jdXNlZCB8fCBmb2N1c2VkLmNvbnRhaW5zKGFjdGl2aXR5RWwpKVxufVxuIl19
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FyaWEvc3JjL2ZvY3VzL2ZvY3VzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBYyxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRWhHLE9BQU8sRUFBRSxTQUFTLEVBQXlCLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFnQixNQUFNLGdCQUFnQixDQUFBO0FBRTVELE9BQU8sRUFBa0IsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFBOztBQUU3RCxNQUFNLGFBQWEsR0FBNEI7SUFDM0MsT0FBTyxFQUFFLElBQUk7SUFDYixPQUFPLEVBQUUsSUFBSTtDQUNoQixDQUFBO0FBZ0JELE1BQU0sT0FBTyxZQUFZO0lBQ1osU0FBUyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUNuQyxVQUFVLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFHOUMsWUFBOEIsUUFBa0IsRUFBa0IsSUFBWTtRQUMxRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsYUFB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TCxDQUFBO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFpQixFQUFFLE9BQTJCO1FBQ2hELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDaEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFtQjtRQUM5QixPQUFPLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQ3pELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFtQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDekMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFhO1FBQ3JCLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBbUIsRUFBRSx1QkFBZ0MsS0FBSztRQUNoRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO0lBQy9ELENBQUM7OEdBeEZRLFlBQVksa0JBS0QsUUFBUSxhQUE4QixNQUFNO2tIQUx2RCxZQUFZLGNBREMsTUFBTTs7MkZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFNakIsTUFBTTsyQkFBQyxRQUFROzswQkFBdUIsTUFBTTsyQkFBQyxNQUFNOztBQXNGcEUsU0FBUyxpQkFBaUIsQ0FBQyxVQUF3QixFQUFFLE9BQXFCO0lBQ3RFLE9BQU8sVUFBVSxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7QUFDNUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzVHJhcEZhY3RvcnkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2ExMXlcIlxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIlxuXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLCBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSwgc3RhcnRXaXRoIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBmb2N1c2FibGUsIHR5cGUgRm9jdXNhYmxlRWxlbWVudCwgaXNGb2N1c2FibGUgfSBmcm9tIFwidGFiYmFibGVcIlxuXG5pbXBvcnQgeyBjb2VyY2VFbGVtZW50LCBFbGVtZW50SW5wdXQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBBY3Rpdml0eU9yaWdpbiwgQWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSBcIi4uL2FjdGl2aXR5XCJcblxuY29uc3QgRVZFTlRfT1BUSU9OUzogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBwYXNzaXZlOiB0cnVlXG59XG5cbmV4cG9ydCB0eXBlIEZvY3VzT3JpZ2luID0gQWN0aXZpdHlPcmlnaW4gfCBudWxsXG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9jdXNDaGFuZ2VzIHtcbiAgICBvcmlnaW46IEZvY3VzT3JpZ2luXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb2N1c2FibGVFdmVudCB7XG4gICAgb3JpZ2luOiBGb2N1c09yaWdpblxuICAgIGV4YWN0OiBib29sZWFuXG4gICAgbm9kZTogTm9kZVxufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgRm9jdXNTZXJ2aWNlIHtcbiAgICByZWFkb25seSAjYWN0aXZpdHkgPSBpbmplY3QoQWN0aXZpdHlTZXJ2aWNlKVxuICAgIHJlYWRvbmx5ICNmb2N1c1RyYXAgPSBpbmplY3QoRm9jdXNUcmFwRmFjdG9yeSlcbiAgICByZWFkb25seSBldmVudHM6IE9ic2VydmFibGU8Rm9jdXNDaGFuZ2VzPlxuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnQ6IERvY3VtZW50LCBASW5qZWN0KE5nWm9uZSkgem9uZTogTmdab25lKSB7XG4gICAgICAgIHRoaXMuZXZlbnRzID0gem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb2N1cyA9IGZyb21FdmVudChkb2N1bWVudCwgXCJmb2N1c1wiLCBFVkVOVF9PUFRJT05TKS5waXBlKG1hcChlID0+IGUudGFyZ2V0IGFzIE5vZGUpKVxuICAgICAgICAgICAgY29uc3QgYmx1ciA9IGZyb21FdmVudChkb2N1bWVudCwgXCJibHVyXCIsIEVWRU5UX09QVElPTlMpLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgICAgIG1hcChlID0+IChlPy50YXJnZXQgYXMgTm9kZSkgfHwgbnVsbClcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3Qoe1xuICAgICAgICAgICAgICAgIGFjdGl2aXR5OiB0aGlzLiNhY3Rpdml0eS5ldmVudHMsXG4gICAgICAgICAgICAgICAgZm9jdXM6IGZvY3VzLFxuICAgICAgICAgICAgICAgIGJsdXI6IGJsdXJcbiAgICAgICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgICAgICAgICAgbWFwKCh7IGFjdGl2aXR5LCBmb2N1cywgYmx1ciB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHsgYWN0aXZpdHksIGZvY3VzLCBibHVyIH0pXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZm9jdXMgaW4gd2l0aCBhbHQrdGFiXG4gICAgICAgICAgICAgICAgICAgIGlmIChibHVyID09PSBkb2N1bWVudCAmJiBhY3Rpdml0eS5vcmlnaW4gPT09IFwia2V5Ym9hcmRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb3JpZ2luOiBcInByb2dyYW1cIiwgZWxlbWVudDogZm9jdXMgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvY3VzID09PSBkb2N1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb3JpZ2luOiBcInByb2dyYW1cIiwgZWxlbWVudDogZm9jdXMgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgcHJlc3MgdGFiIGJ1dHRvbiwgZmlyc3QgZmlyZSB0aGUgZXZlbnQgaW4gdGhlIGN1cnJlbnRseSBmb2N1c2VkIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvY3VzID09PSBibHVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBwcmVzcyB0YWIsIHRoZSBhY3Rpdml0eSBpcyBvbiB0aGUgY3VycmVudCBmdWNlc2QgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gd2hlbiBibHVyIGlzIGNoYW5nZWQgdG8gaXQsIHRoZSBmb2N1cyBjaGFuZ2UgaXMgY29tcGxldGVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpdml0eS5vcmlnaW4gPT09IFwia2V5Ym9hcmRcIiAmJiBpc0FjdGl2aXR5RWxlbWVudChhY3Rpdml0eS5ub2RlLCBibHVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb3JpZ2luOiBcImtleWJvYXJkXCIsIGVsZW1lbnQ6IGZvY3VzIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FjdGl2aXR5RWxlbWVudChhY3Rpdml0eS5ub2RlLCBmb2N1cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9yaWdpbjogYWN0aXZpdHkub3JpZ2luLCBlbGVtZW50OiBmb2N1cyB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvcmlnaW46IFwicHJvZ3JhbVwiLCBlbGVtZW50OiBmb2N1cyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgICAgICApIGFzIGFueVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHdhdGNoKGVsZW1lbnQ6IEVsZW1lbnRJbnB1dCkge1xuICAgICAgICBjb25zdCBlbCA9IGNvZXJjZUVsZW1lbnQoZWxlbWVudClcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRzLnBpcGUoXG4gICAgICAgICAgICBtYXAoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuZWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICAgICAoZXZlbnQuZWxlbWVudCA9PT0gZWwgfHwgKHR5cGVvZiBlbC5jb250YWlucyA9PT0gXCJmdW5jdGlvblwiICYmIGVsLmNvbnRhaW5zKGV2ZW50LmVsZW1lbnQpKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGVsZW1lbnQ6IGVsLCBvcmlnaW46IG51bGwgfSBhcyBGb2N1c0NoYW5nZXNcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBmb2N1cyhub2RlOiBIVE1MRWxlbWVudCwgX29yaWdpbjogRm9jdXNPcmlnaW4gfCBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IGZvY3VzIG9yaWdpblxuICAgICAgICBub2RlLmZvY3VzKClcbiAgICB9XG5cbiAgICBxdWVyeUZvY3VzYWJsZShpbnNpZGU6IEhUTUxFbGVtZW50KTogRm9jdXNhYmxlRWxlbWVudFtdIHtcbiAgICAgICAgcmV0dXJuIGZvY3VzYWJsZShpbnNpZGUsIHsgaW5jbHVkZUNvbnRhaW5lcjogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBnZXRGaXJzdEZvY3VzYWJsZShpbnNpZGU6IEhUTUxFbGVtZW50KTogRm9jdXNhYmxlRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5Rm9jdXNhYmxlKGluc2lkZSlbMF1cbiAgICB9XG5cbiAgICBpc0ZvY3VzYWJsZShub2RlOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpc0ZvY3VzYWJsZShub2RlKVxuICAgIH1cblxuICAgIGZvY3VzVHJhcChpbnNpZGU6IEhUTUxFbGVtZW50LCBkZWZlckNhcHR1cmVFbGVtZW50czogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNmb2N1c1RyYXAuY3JlYXRlKGluc2lkZSwgZGVmZXJDYXB0dXJlRWxlbWVudHMpXG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0FjdGl2aXR5RWxlbWVudChhY3Rpdml0eUVsPzogTm9kZSB8IG51bGwsIGZvY3VzZWQ/OiBOb2RlIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhY3Rpdml0eUVsICE9IG51bGwgJiYgZm9jdXNlZCAhPSBudWxsICYmIChhY3Rpdml0eUVsID09PSBmb2N1c2VkIHx8IGZvY3VzZWQuY29udGFpbnMoYWN0aXZpdHlFbCkpXG59XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { computed, Directive, effect, inject, input } from "@angular/core";
|
|
2
|
-
import { DisabledState } from "@ngutil/common";
|
|
2
|
+
import { DisabledState, isElementInput } from "@ngutil/common";
|
|
3
3
|
import { FocusState } from "./focus-state.directive";
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "./focus-state.directive";
|
|
@@ -8,6 +8,7 @@ export class Focusable {
|
|
|
8
8
|
#disabled;
|
|
9
9
|
constructor() {
|
|
10
10
|
this.#disabled = inject(DisabledState, { optional: true, self: true });
|
|
11
|
+
this.state = inject(FocusState);
|
|
11
12
|
this.focusable = input(true, { alias: "nuFocusable" });
|
|
12
13
|
this.tabindex = input(0, { transform: Number });
|
|
13
14
|
this._tabindex = computed(() => {
|
|
@@ -28,6 +29,14 @@ export class Focusable {
|
|
|
28
29
|
// TODO: miért kell ez?, ha nincs itt akkor nem frissül
|
|
29
30
|
effect(() => this._tabindex(), { allowSignalWrites: false });
|
|
30
31
|
}
|
|
32
|
+
connect(value) {
|
|
33
|
+
if (value instanceof FocusState || isElementInput(value)) {
|
|
34
|
+
return this.state.connect(value);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
return this.state.connect(value.state);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
31
40
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Focusable, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
32
41
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.6", type: Focusable, isStandalone: true, selector: "[nuFocusable]", inputs: { focusable: { classPropertyName: "focusable", publicName: "nuFocusable", isSignal: true, isRequired: false, transformFunction: null }, tabindex: { classPropertyName: "tabindex", publicName: "tabindex", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.tabindex": "_tabindex()" } }, exportAs: ["nuFocusable"], hostDirectives: [{ directive: i1.FocusState }], ngImport: i0 }); }
|
|
33
42
|
}
|
|
@@ -43,4 +52,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
|
|
|
43
52
|
hostDirectives: [FocusState]
|
|
44
53
|
}]
|
|
45
54
|
}], ctorParameters: () => [] });
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXNhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FyaWEvc3JjL2ZvY3VzL2ZvY3VzYWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFMUUsT0FBTyxFQUFtQixhQUFhLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRTdGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTs7O0FBRXBELDhDQUE4QztBQVc5QyxNQUFNLE9BQU8sU0FBUztJQUNULFNBQVMsQ0FBd0Q7SUEwQjFFO1FBMUJTLGNBQVMsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUNqRSxVQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRTFCLGNBQVMsR0FBRyxLQUFLLENBQW1CLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFBO1FBQ25FLGFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFFMUMsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1lBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtZQUNoQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFBO1lBRS9DLElBQUksU0FBUyxLQUFLLEtBQUssSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLENBQUMsQ0FBQTtZQUNiLENBQUM7WUFFRCxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNoQyxPQUFPLFNBQVMsQ0FBQTtZQUNwQixDQUFDO1lBRUQsSUFBSSxTQUFTLEtBQUssSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDN0QsT0FBTyxRQUFRLENBQUE7WUFDbkIsQ0FBQztZQUVELE9BQU8sQ0FBQyxDQUFBO1FBQ1osQ0FBQyxDQUFDLENBQUE7UUFHRSx1REFBdUQ7UUFDdkQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDaEUsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUE0QztRQUNoRCxJQUFJLEtBQUssWUFBWSxVQUFVLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzFDLENBQUM7SUFDTCxDQUFDOzhHQXRDUSxTQUFTO2tHQUFULFNBQVM7OzJGQUFULFNBQVM7a0JBVHJCLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUUsYUFBYTtvQkFDdkIsSUFBSSxFQUFFO3dCQUNGLGlCQUFpQixFQUFFLGFBQWE7cUJBQ25DO29CQUNELGNBQWMsRUFBRSxDQUFDLFVBQVUsQ0FBQztpQkFDL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgRGlyZWN0aXZlLCBlZmZlY3QsIGluamVjdCwgaW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IENvbm5lY3RQcm90b2NvbCwgRGlzYWJsZWRTdGF0ZSwgRWxlbWVudElucHV0LCBpc0VsZW1lbnRJbnB1dCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IEZvY3VzU3RhdGUgfSBmcm9tIFwiLi9mb2N1cy1zdGF0ZS5kaXJlY3RpdmVcIlxuXG4vLyBUT0RPOiB3aGF0IGhhcHBlbnMgd2hlbiBkaXNhYmxlZCBpcyBjaGFuZ2VkXG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6IFwiW251Rm9jdXNhYmxlXVwiLFxuICAgIGV4cG9ydEFzOiBcIm51Rm9jdXNhYmxlXCIsXG4gICAgaG9zdDoge1xuICAgICAgICBcIlthdHRyLnRhYmluZGV4XVwiOiBcIl90YWJpbmRleCgpXCJcbiAgICB9LFxuICAgIGhvc3REaXJlY3RpdmVzOiBbRm9jdXNTdGF0ZV1cbn0pXG5leHBvcnQgY2xhc3MgRm9jdXNhYmxlIGltcGxlbWVudHMgQ29ubmVjdFByb3RvY29sIHtcbiAgICByZWFkb25seSAjZGlzYWJsZWQgPSBpbmplY3QoRGlzYWJsZWRTdGF0ZSwgeyBvcHRpb25hbDogdHJ1ZSwgc2VsZjogdHJ1ZSB9KVxuICAgIHJlYWRvbmx5IHN0YXRlID0gaW5qZWN0KEZvY3VzU3RhdGUpXG5cbiAgICByZWFkb25seSBmb2N1c2FibGUgPSBpbnB1dDxib29sZWFuIHwgbnVtYmVyPih0cnVlLCB7IGFsaWFzOiBcIm51Rm9jdXNhYmxlXCIgfSlcbiAgICByZWFkb25seSB0YWJpbmRleCA9IGlucHV0KDAsIHsgdHJhbnNmb3JtOiBOdW1iZXIgfSlcblxuICAgIHJlYWRvbmx5IF90YWJpbmRleCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gdGhpcy5mb2N1c2FibGUoKVxuICAgICAgICBjb25zdCB0YWJpbmRleCA9IHRoaXMudGFiaW5kZXgoKVxuICAgICAgICBjb25zdCBpc0Rpc2FibGVkID0gdGhpcy4jZGlzYWJsZWQ/LmlzRGlzYWJsZWQoKVxuXG4gICAgICAgIGlmIChmb2N1c2FibGUgPT09IGZhbHNlIHx8IGlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBmb2N1c2FibGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb2N1c2FibGUgPT09IHRydWUgJiYgdGFiaW5kZXggIT0gbnVsbCAmJiAhaXNOYU4odGFiaW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFiaW5kZXhcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAwXG4gICAgfSlcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvLyBUT0RPOiBtacOpcnQga2VsbCBlej8sIGhhIG5pbmNzIGl0dCBha2tvciBuZW0gZnJpc3PDvGxcbiAgICAgICAgZWZmZWN0KCgpID0+IHRoaXMuX3RhYmluZGV4KCksIHsgYWxsb3dTaWduYWxXcml0ZXM6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgY29ubmVjdCh2YWx1ZTogRm9jdXNhYmxlIHwgRm9jdXNTdGF0ZSB8IEVsZW1lbnRJbnB1dCkge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb2N1c1N0YXRlIHx8IGlzRWxlbWVudElucHV0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuY29ubmVjdCh2YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmNvbm5lY3QodmFsdWUuc3RhdGUpXG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
package/fesm2022/ngutil-aria.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { DOCUMENT } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { NgZone, Injectable, Inject, inject, ElementRef,
|
|
4
|
-
import { Subject, distinctUntilChanged, shareReplay, filter, fromEvent, map, startWith, combineLatest, BehaviorSubject, Observable, share } from 'rxjs';
|
|
5
|
-
import { Destructible,
|
|
3
|
+
import { NgZone, Injectable, Inject, inject, ElementRef, effect, Directive, input, computed } from '@angular/core';
|
|
4
|
+
import { Subject, distinctUntilChanged, shareReplay, filter, fromEvent, map, startWith, combineLatest, BehaviorSubject, switchMap, debounceTime, Observable, share } from 'rxjs';
|
|
5
|
+
import { Destructible, coerceElement, isElementInput, DisabledState } from '@ngutil/common';
|
|
6
6
|
import { FocusTrapFactory } from '@angular/cdk/a11y';
|
|
7
7
|
import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
8
8
|
import { focusable, isFocusable } from 'tabbable';
|
|
@@ -117,13 +117,14 @@ class FocusService {
|
|
|
117
117
|
}), filter(v => !!v), shareReplay(1));
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
|
-
watch(
|
|
120
|
+
watch(element) {
|
|
121
|
+
const el = coerceElement(element);
|
|
121
122
|
return this.events.pipe(map(event => {
|
|
122
123
|
if (event.element &&
|
|
123
|
-
(event.element ===
|
|
124
|
+
(event.element === el || (typeof el.contains === "function" && el.contains(event.element)))) {
|
|
124
125
|
return event;
|
|
125
126
|
}
|
|
126
|
-
return { element:
|
|
127
|
+
return { element: el, origin: null };
|
|
127
128
|
}));
|
|
128
129
|
}
|
|
129
130
|
focus(node, _origin) {
|
|
@@ -180,26 +181,52 @@ class FocusTrap extends Destructible {
|
|
|
180
181
|
}
|
|
181
182
|
}
|
|
182
183
|
|
|
184
|
+
var _a;
|
|
183
185
|
class FocusState {
|
|
184
186
|
#focus;
|
|
185
187
|
#el;
|
|
186
|
-
#
|
|
188
|
+
#parent;
|
|
189
|
+
#default;
|
|
190
|
+
#self;
|
|
191
|
+
#connected;
|
|
192
|
+
#connEvent;
|
|
187
193
|
constructor() {
|
|
188
194
|
this.#focus = inject(FocusService);
|
|
189
195
|
this.#el = inject(ElementRef);
|
|
190
|
-
this.#
|
|
191
|
-
this
|
|
192
|
-
this
|
|
193
|
-
this
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
196
|
+
this.#parent = inject(_a, { optional: true, skipSelf: true });
|
|
197
|
+
this.#default = { element: this.#el.nativeElement, origin: null };
|
|
198
|
+
this.#self = this.#focus.watch(this.#el).pipe(takeUntilDestroyed(), shareReplay(1));
|
|
199
|
+
this.#connected = new BehaviorSubject([]);
|
|
200
|
+
this.#connEvent = this.#connected.pipe(switchMap(values => combineLatest(values)), takeUntilDestroyed(), map(values => values.filter(v => v.origin != null)), map(values => values[0] || this.#default), shareReplay(1));
|
|
201
|
+
this.event$ = combineLatest([this.#self, this.#connEvent]).pipe(debounceTime(100), map(values => values.find(v => v.origin != null) || this.#default), shareReplay(1));
|
|
202
|
+
this.origin$ = this.event$.pipe(map(event => event.origin));
|
|
203
|
+
this.within$ = this.event$.pipe(map(event => (event.element !== this.#el.nativeElement ? event.origin : null)));
|
|
204
|
+
this.event = toSignal(this.event$, { rejectErrors: true, manualCleanup: true });
|
|
205
|
+
this.origin = toSignal(this.origin$, { rejectErrors: true, manualCleanup: true });
|
|
206
|
+
this.within = toSignal(this.within$, { rejectErrors: true, manualCleanup: true });
|
|
197
207
|
// TODO: miért kell ez?, ha nincs itt akkor nem frissül
|
|
198
208
|
effect(() => this.origin(), { allowSignalWrites: false });
|
|
209
|
+
this.#parent?.connect(this).pipe(takeUntilDestroyed()).subscribe();
|
|
210
|
+
}
|
|
211
|
+
connect(value) {
|
|
212
|
+
return new Observable(() => {
|
|
213
|
+
const src = (isElementInput(value) ? this.#focus.watch(value) : value.event$).pipe(shareReplay(1));
|
|
214
|
+
this.#connected.next([...this.#connected.value, src]);
|
|
215
|
+
return () => {
|
|
216
|
+
let current = this.#connected.value;
|
|
217
|
+
const idx = current.indexOf(src);
|
|
218
|
+
if (idx >= 0) {
|
|
219
|
+
current = [...current];
|
|
220
|
+
current.splice(idx, 1);
|
|
221
|
+
this.#connected.next(current);
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
});
|
|
199
225
|
}
|
|
200
226
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: FocusState, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
201
227
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: FocusState, isStandalone: true, host: { properties: { "attr.focus": "origin()", "attr.focusWithin": "within()" } }, ngImport: i0 }); }
|
|
202
228
|
}
|
|
229
|
+
_a = FocusState;
|
|
203
230
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: FocusState, decorators: [{
|
|
204
231
|
type: Directive,
|
|
205
232
|
args: [{
|
|
@@ -216,6 +243,7 @@ class Focusable {
|
|
|
216
243
|
#disabled;
|
|
217
244
|
constructor() {
|
|
218
245
|
this.#disabled = inject(DisabledState, { optional: true, self: true });
|
|
246
|
+
this.state = inject(FocusState);
|
|
219
247
|
this.focusable = input(true, { alias: "nuFocusable" });
|
|
220
248
|
this.tabindex = input(0, { transform: Number });
|
|
221
249
|
this._tabindex = computed(() => {
|
|
@@ -236,6 +264,14 @@ class Focusable {
|
|
|
236
264
|
// TODO: miért kell ez?, ha nincs itt akkor nem frissül
|
|
237
265
|
effect(() => this._tabindex(), { allowSignalWrites: false });
|
|
238
266
|
}
|
|
267
|
+
connect(value) {
|
|
268
|
+
if (value instanceof FocusState || isElementInput(value)) {
|
|
269
|
+
return this.state.connect(value);
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
return this.state.connect(value.state);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
239
275
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Focusable, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
240
276
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.6", type: Focusable, isStandalone: true, selector: "[nuFocusable]", inputs: { focusable: { classPropertyName: "focusable", publicName: "nuFocusable", isSignal: true, isRequired: false, transformFunction: null }, tabindex: { classPropertyName: "tabindex", publicName: "tabindex", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.tabindex": "_tabindex()" } }, exportAs: ["nuFocusable"], hostDirectives: [{ directive: FocusState }], ngImport: i0 }); }
|
|
241
277
|
}
|
|
@@ -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/ngutil-aria.ts"],"sourcesContent":["import { DOCUMENT } from \"@angular/common\"\nimport { Inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, filter, Observable, shareReplay, Subject } from \"rxjs\"\n\nimport { Destructible } from \"@ngutil/common\"\n\n// TODO: detect program activity\nexport type ActivityOrigin = \"mouse\" | \"keyboard\" | \"touch\" | \"program\"\n\nexport interface ActivityEvent {\n origin: ActivityOrigin\n node?: Node\n}\n\nconst EVENT_OPTIONS: AddEventListenerOptions = {\n capture: true,\n passive: true\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class ActivityService extends Destructible {\n #activity!: Subject<ActivityEvent>\n\n readonly events!: Observable<ActivityEvent>\n\n constructor(@Inject(DOCUMENT) document: Document, @Inject(NgZone) zone: NgZone) {\n super()\n\n zone.runOutsideAngular(() => {\n this.#activity = new Subject()\n ;(this as { events: Observable<ActivityEvent> }).events = this.#activity.pipe(\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 shareReplay(1)\n )\n\n document.addEventListener(\"keydown\", this.#onKeydown, EVENT_OPTIONS)\n document.addEventListener(\"mousedown\", this.#onMouseDown, EVENT_OPTIONS)\n document.addEventListener(\"mousemove\", this.#onMouseMove, EVENT_OPTIONS)\n document.addEventListener(\"touchstart\", this.#onTouchStart, EVENT_OPTIONS)\n\n this.d.any(() => {\n document.removeEventListener(\"keydown\", this.#onKeydown, EVENT_OPTIONS)\n document.removeEventListener(\"mousedown\", this.#onMouseDown, EVENT_OPTIONS)\n document.removeEventListener(\"mousemove\", this.#onMouseMove, EVENT_OPTIONS)\n document.removeEventListener(\"touchstart\", this.#onTouchStart, EVENT_OPTIONS)\n })\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 throw Error(\"Not implemnted yet\")\n }\n\n #onKeydown = (event: KeyboardEvent) => {\n this.#activity.next({ origin: \"keyboard\", node: event.target as any })\n }\n\n #onMouseDown = (event: MouseEvent) => {\n this.#activity.next({ origin: \"mouse\", node: event.target as any })\n }\n\n #onMouseMove = (event: MouseEvent) => {\n // this.#activity.next({ origin: \"mouse\" })\n }\n\n #onTouchStart = (event: TouchEvent) => {\n this.#activity.next({ origin: \"touch\", node: event.target as any })\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, filter, fromEvent, map, Observable, shareReplay, startWith } from \"rxjs\"\n\nimport { focusable, type FocusableElement, isFocusable } from \"tabbable\"\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,\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(node: Node) {\n return this.events.pipe(\n map(event => {\n if (\n event.element &&\n (event.element === node || (typeof node.contains === \"function\" && node.contains(event.element)))\n ) {\n return event\n }\n return { element: node, origin: null }\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 { computed, Directive, effect, ElementRef, inject } from \"@angular/core\"\nimport { takeUntilDestroyed, toSignal } from \"@angular/core/rxjs-interop\"\n\nimport { shareReplay } from \"rxjs\"\n\nimport { 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 {\n readonly #focus = inject(FocusService)\n readonly #el = inject<ElementRef<HTMLElement>>(ElementRef)\n\n readonly #event = this.#focus.watch(this.#el.nativeElement).pipe(takeUntilDestroyed(), shareReplay(1))\n readonly event = toSignal(this.#event, { rejectErrors: true, manualCleanup: true })\n\n readonly origin = computed(() => this.event()?.origin)\n\n readonly within = computed(() => {\n const event = this.event()\n return event ? (event.element !== this.#el.nativeElement ? event.origin : null) : null\n })\n\n constructor() {\n // TODO: miért kell ez?, ha nincs itt akkor nem frissül\n effect(() => this.origin(), { allowSignalWrites: false })\n }\n}\n","import { computed, Directive, effect, inject, input } from \"@angular/core\"\n\nimport { DisabledState } 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 {\n readonly #disabled = inject(DisabledState, { optional: true, self: true })\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","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","/**\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/ngutil-aria.ts"],"sourcesContent":["import { DOCUMENT } from \"@angular/common\"\nimport { Inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, filter, Observable, shareReplay, Subject } from \"rxjs\"\n\nimport { Destructible } from \"@ngutil/common\"\n\n// TODO: detect program activity\nexport type ActivityOrigin = \"mouse\" | \"keyboard\" | \"touch\" | \"program\"\n\nexport interface ActivityEvent {\n origin: ActivityOrigin\n node?: Node\n}\n\nconst EVENT_OPTIONS: AddEventListenerOptions = {\n capture: true,\n passive: true\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class ActivityService extends Destructible {\n #activity!: Subject<ActivityEvent>\n\n readonly events!: Observable<ActivityEvent>\n\n constructor(@Inject(DOCUMENT) document: Document, @Inject(NgZone) zone: NgZone) {\n super()\n\n zone.runOutsideAngular(() => {\n this.#activity = new Subject()\n ;(this as { events: Observable<ActivityEvent> }).events = this.#activity.pipe(\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 shareReplay(1)\n )\n\n document.addEventListener(\"keydown\", this.#onKeydown, EVENT_OPTIONS)\n document.addEventListener(\"mousedown\", this.#onMouseDown, EVENT_OPTIONS)\n document.addEventListener(\"mousemove\", this.#onMouseMove, EVENT_OPTIONS)\n document.addEventListener(\"touchstart\", this.#onTouchStart, EVENT_OPTIONS)\n\n this.d.any(() => {\n document.removeEventListener(\"keydown\", this.#onKeydown, EVENT_OPTIONS)\n document.removeEventListener(\"mousedown\", this.#onMouseDown, EVENT_OPTIONS)\n document.removeEventListener(\"mousemove\", this.#onMouseMove, EVENT_OPTIONS)\n document.removeEventListener(\"touchstart\", this.#onTouchStart, EVENT_OPTIONS)\n })\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 throw Error(\"Not implemnted yet\")\n }\n\n #onKeydown = (event: KeyboardEvent) => {\n this.#activity.next({ origin: \"keyboard\", node: event.target as any })\n }\n\n #onMouseDown = (event: MouseEvent) => {\n this.#activity.next({ origin: \"mouse\", node: event.target as any })\n }\n\n #onMouseMove = (event: MouseEvent) => {\n // this.#activity.next({ origin: \"mouse\" })\n }\n\n #onTouchStart = (event: TouchEvent) => {\n this.#activity.next({ origin: \"touch\", node: event.target as any })\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, 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,\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, 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 => 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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["EVENT_OPTIONS","i1.FocusState"],"mappings":"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"}
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
import { ElementInput } from "dist/packages/common";
|
|
3
|
+
import { ConnectProtocol } from "@ngutil/common";
|
|
4
|
+
import { FocusChanges } from "./focus.service";
|
|
1
5
|
import * as i0 from "@angular/core";
|
|
2
|
-
export declare class FocusState {
|
|
6
|
+
export declare class FocusState implements ConnectProtocol {
|
|
3
7
|
#private;
|
|
4
|
-
readonly event
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
readonly event$: Observable<FocusChanges>;
|
|
9
|
+
readonly origin$: Observable<import("./focus.service").FocusOrigin>;
|
|
10
|
+
readonly within$: Observable<import("./focus.service").FocusOrigin>;
|
|
11
|
+
readonly event: import("@angular/core").Signal<FocusChanges | undefined>;
|
|
8
12
|
readonly origin: import("@angular/core").Signal<import("./focus.service").FocusOrigin | undefined>;
|
|
9
|
-
readonly within: import("@angular/core").Signal<import("./focus.service").FocusOrigin>;
|
|
13
|
+
readonly within: import("@angular/core").Signal<import("./focus.service").FocusOrigin | undefined>;
|
|
10
14
|
constructor();
|
|
15
|
+
connect(value: FocusState | ElementInput): Observable<unknown>;
|
|
11
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<FocusState, never>;
|
|
12
17
|
static ɵdir: i0.ɵɵDirectiveDeclaration<FocusState, never, never, {}, {}, never, never, true, never>;
|
|
13
18
|
}
|
package/focus/focus.service.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { NgZone } from "@angular/core";
|
|
2
2
|
import { Observable } from "rxjs";
|
|
3
3
|
import { type FocusableElement } from "tabbable";
|
|
4
|
+
import { ElementInput } from "@ngutil/common";
|
|
4
5
|
import { ActivityOrigin } from "../activity";
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
export type FocusOrigin = ActivityOrigin | null;
|
|
@@ -17,10 +18,7 @@ export declare class FocusService {
|
|
|
17
18
|
#private;
|
|
18
19
|
readonly events: Observable<FocusChanges>;
|
|
19
20
|
constructor(document: Document, zone: NgZone);
|
|
20
|
-
watch(
|
|
21
|
-
element: Node;
|
|
22
|
-
origin: null;
|
|
23
|
-
}>;
|
|
21
|
+
watch(element: ElementInput): Observable<FocusChanges>;
|
|
24
22
|
focus(node: HTMLElement, _origin: FocusOrigin | null): void;
|
|
25
23
|
queryFocusable(inside: HTMLElement): FocusableElement[];
|
|
26
24
|
getFirstFocusable(inside: HTMLElement): FocusableElement | undefined;
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
import { ConnectProtocol, ElementInput } from "@ngutil/common";
|
|
2
|
+
import { FocusState } from "./focus-state.directive";
|
|
1
3
|
import * as i0 from "@angular/core";
|
|
2
4
|
import * as i1 from "./focus-state.directive";
|
|
3
|
-
export declare class Focusable {
|
|
5
|
+
export declare class Focusable implements ConnectProtocol {
|
|
4
6
|
#private;
|
|
7
|
+
readonly state: FocusState;
|
|
5
8
|
readonly focusable: import("@angular/core").InputSignal<number | boolean>;
|
|
6
9
|
readonly tabindex: import("@angular/core").InputSignalWithTransform<number, any>;
|
|
7
10
|
readonly _tabindex: import("@angular/core").Signal<number>;
|
|
8
11
|
constructor();
|
|
12
|
+
connect(value: Focusable | FocusState | ElementInput): import("rxjs").Observable<unknown>;
|
|
9
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<Focusable, never>;
|
|
10
14
|
static ɵdir: i0.ɵɵDirectiveDeclaration<Focusable, "[nuFocusable]", ["nuFocusable"], { "focusable": { "alias": "nuFocusable"; "required": false; "isSignal": true; }; "tabindex": { "alias": "tabindex"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.FocusState; inputs: {}; outputs: {}; }]>;
|
|
11
15
|
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngutil/aria",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.36",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/cdk": "^17.3.6",
|
|
6
6
|
"@angular/common": "^17.3.6",
|
|
7
7
|
"@angular/core": "^17.3.6",
|
|
8
8
|
"rxjs": "^7.8.1",
|
|
9
9
|
"tabbable": "^6.2.0",
|
|
10
|
-
"@ngutil/common": "0.0.
|
|
10
|
+
"@ngutil/common": "0.0.36"
|
|
11
11
|
},
|
|
12
12
|
"publishConfig": {
|
|
13
13
|
"access": "public",
|