@ngutil/aria 0.0.80 → 0.0.82

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.
Files changed (36) hide show
  1. package/fesm2022/ngutil-aria.mjs +88 -65
  2. package/fesm2022/ngutil-aria.mjs.map +1 -1
  3. package/focus/focus-state.directive.d.ts +1 -2
  4. package/focus/focus.service.d.ts +1 -1
  5. package/focus/focusable.directive.d.ts +0 -1
  6. package/package.json +7 -9
  7. package/ui-state/abstract.d.ts +1 -1
  8. package/ui-state/dirty.directive.d.ts +9 -0
  9. package/ui-state/index.d.ts +5 -3
  10. package/ui-state/progress-state.d.ts +1 -1
  11. package/esm2022/activity/activity.service.mjs +0 -49
  12. package/esm2022/activity/index.mjs +0 -2
  13. package/esm2022/focus/focus-state.directive.mjs +0 -63
  14. package/esm2022/focus/focus-trap.directive.mjs +0 -25
  15. package/esm2022/focus/focus.service.mjs +0 -145
  16. package/esm2022/focus/focusable.directive.mjs +0 -52
  17. package/esm2022/focus/index.mjs +0 -5
  18. package/esm2022/gestures/gesture-drag.mjs +0 -81
  19. package/esm2022/gestures/gesture-event.mjs +0 -44
  20. package/esm2022/gestures/gesture-longtap.mjs +0 -34
  21. package/esm2022/gestures/gesture-tap.mjs +0 -37
  22. package/esm2022/gestures/gesture.mjs +0 -66
  23. package/esm2022/gestures/gesture.service.mjs +0 -279
  24. package/esm2022/gestures/index.mjs +0 -7
  25. package/esm2022/index.mjs +0 -6
  26. package/esm2022/keystroke/index.mjs +0 -2
  27. package/esm2022/keystroke/keystroke.service.mjs +0 -92
  28. package/esm2022/ngutil-aria.mjs +0 -5
  29. package/esm2022/ui-state/abstract.mjs +0 -41
  30. package/esm2022/ui-state/busy.directive.mjs +0 -27
  31. package/esm2022/ui-state/disabled.directive.mjs +0 -28
  32. package/esm2022/ui-state/index.mjs +0 -25
  33. package/esm2022/ui-state/progress-state.mjs +0 -141
  34. package/esm2022/ui-state/readonly.directive.mjs +0 -27
  35. package/esm2022/ui-state/selector.mjs +0 -308
  36. package/esm2022/ui-state/ui-state.mjs +0 -91
@@ -1,6 +1,5 @@
1
1
  import { Observable } from "rxjs";
2
- import { ElementInput } from "dist/packages/common";
3
- import { ConnectProtocol } from "@ngutil/common";
2
+ import { ConnectProtocol, ElementInput } from "@ngutil/common";
4
3
  import { FocusChanges } from "./focus.service";
5
4
  import * as i0 from "@angular/core";
6
5
  export declare class FocusState implements ConnectProtocol {
@@ -21,7 +21,7 @@ export declare class FocusService {
21
21
  queryFocusable(inside: ElementInput): FocusableElement[];
22
22
  getFirstFocusable(inside: ElementInput): FocusableElement | undefined;
23
23
  isFocusable(node: ElementInput): boolean;
24
- focusTrap(inside: ElementInput, deferCaptureElements?: boolean): import("@angular/cdk/a11y").FocusTrap;
24
+ focusTrap(inside: ElementInput, deferCaptureElements?: boolean): import("@angular/cdk/a11y-module.d-DrV0SO0k").FocusTrap;
25
25
  static ɵfac: i0.ɵɵFactoryDeclaration<FocusService, never>;
26
26
  static ɵprov: i0.ɵɵInjectableDeclaration<FocusService>;
27
27
  }
@@ -7,7 +7,6 @@ export declare class Focusable implements ConnectProtocol {
7
7
  readonly focusable: import("@angular/core").InputSignal<number | boolean>;
8
8
  readonly tabindex: import("@angular/core").InputSignalWithTransform<number, any>;
9
9
  readonly _tabindex: import("@angular/core").Signal<number>;
10
- constructor();
11
10
  connect(value: Focusable | FocusState | ElementInput): import("rxjs").Observable<unknown>;
12
11
  static ɵfac: i0.ɵɵFactoryDeclaration<Focusable, never>;
13
12
  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: {}; }]>;
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@ngutil/aria",
3
- "version": "0.0.80",
3
+ "version": "0.0.82",
4
4
  "peerDependencies": {
5
- "@angular/cdk": "18.2.6",
6
- "@angular/common": "18.2.6",
7
- "@angular/core": "18.2.6",
8
- "lodash-es": "^4.17.21",
5
+ "@angular/cdk": "19.2.11",
6
+ "@angular/common": "19.2.8",
7
+ "@angular/core": "19.2.8",
8
+ "es-toolkit": "^1.35.0",
9
9
  "rxjs": "^7.8.1",
10
10
  "tabbable": "^6.2.0",
11
11
  "utility-types": "^3.11.0",
12
- "@ngutil/common": "0.0.80",
13
- "@ngutil/style": "0.0.80"
12
+ "@ngutil/common": "0.0.82",
13
+ "@ngutil/style": "0.0.82"
14
14
  },
15
15
  "publishConfig": {
16
16
  "access": "public",
@@ -25,8 +25,6 @@
25
25
  },
26
26
  ".": {
27
27
  "types": "./index.d.ts",
28
- "esm2022": "./esm2022/ngutil-aria.mjs",
29
- "esm": "./esm2022/ngutil-aria.mjs",
30
28
  "default": "./fesm2022/ngutil-aria.mjs"
31
29
  }
32
30
  },
@@ -15,5 +15,5 @@ export declare abstract class AbstractUiState<N extends string> {
15
15
  intercept(source: string): <S>(src: Observable<S>) => Observable<S>;
16
16
  wrap<T>(observable: Observable<T>, source: string): Observable<T>;
17
17
  static ɵfac: i0.ɵɵFactoryDeclaration<AbstractUiState<any>, never>;
18
- static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractUiState<any>, never, never, {}, {}, never, never, false, never>;
18
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractUiState<any>, never, never, {}, {}, never, never, true, never>;
19
19
  }
@@ -0,0 +1,9 @@
1
+ import { AbstractUiState } from "./abstract";
2
+ import * as i0 from "@angular/core";
3
+ export declare class DirtyDirective extends AbstractUiState<"dirty"> {
4
+ readonly input: import("@angular/core").InputSignal<boolean>;
5
+ readonly when: import("@angular/core").InputSignal<string>;
6
+ constructor();
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<DirtyDirective, never>;
8
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DirtyDirective, "[nuDirty], [nuDirtyWhen]", ["dirty"], { "input": { "alias": "nuDirty"; "required": false; "isSignal": true; }; "when": { "alias": "nuDirtyWhen"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
9
+ }
@@ -1,15 +1,17 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./busy.directive";
3
- import * as i2 from "./disabled.directive";
4
- import * as i3 from "./readonly.directive";
3
+ import * as i2 from "./dirty.directive";
4
+ import * as i3 from "./disabled.directive";
5
+ import * as i4 from "./readonly.directive";
5
6
  export * from "./abstract";
6
7
  export * from "./busy.directive";
7
8
  export * from "./disabled.directive";
8
9
  export * from "./progress-state";
9
10
  export * from "./readonly.directive";
11
+ export * from "./dirty.directive";
10
12
  export * from "./ui-state";
11
13
  export declare class UiStateModule {
12
14
  static ɵfac: i0.ɵɵFactoryDeclaration<UiStateModule, never>;
13
- static ɵmod: i0.ɵɵNgModuleDeclaration<UiStateModule, never, [typeof i1.BusyDirective, typeof i2.DisabledDirective, typeof i3.ReadonlyDirective], [typeof i1.BusyDirective, typeof i2.DisabledDirective, typeof i3.ReadonlyDirective]>;
15
+ static ɵmod: i0.ɵɵNgModuleDeclaration<UiStateModule, never, [typeof i1.BusyDirective, typeof i2.DirtyDirective, typeof i3.DisabledDirective, typeof i4.ReadonlyDirective], [typeof i1.BusyDirective, typeof i2.DirtyDirective, typeof i3.DisabledDirective, typeof i4.ReadonlyDirective]>;
14
16
  static ɵinj: i0.ɵɵInjectorDeclaration<UiStateModule>;
15
17
  }
@@ -57,7 +57,7 @@ export declare class ProgressState {
57
57
  segment(name: string, distribution?: number): ProgressSegmentRef;
58
58
  connect(state: ProgressState, name: string, distribution?: number): Observable<void>;
59
59
  static ɵfac: i0.ɵɵFactoryDeclaration<ProgressState, never>;
60
- static ɵdir: i0.ɵɵDirectiveDeclaration<ProgressState, never, never, {}, {}, never, never, false, never>;
60
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ProgressState, never, never, {}, {}, never, never, true, never>;
61
61
  }
62
62
  export declare class ProgressSegmentRef {
63
63
  #private;
@@ -1,49 +0,0 @@
1
- import { DOCUMENT } from "@angular/common";
2
- import { inject, Injectable, NgZone } from "@angular/core";
3
- import { distinctUntilChanged, filter, fromEvent, map, merge, share, shareReplay, startWith, switchMap, take, throttleTime, timer } from "rxjs";
4
- import * as i0 from "@angular/core";
5
- const EVENT_OPTIONS = {
6
- capture: true,
7
- passive: true
8
- };
9
- const EVENT_ORIGIN = {
10
- keydown: "keyboard",
11
- mousedown: "mouse",
12
- mousemove: "mouse",
13
- touchstart: "touch"
14
- };
15
- export class ActivityService {
16
- constructor() {
17
- this.#zone = inject(NgZone);
18
- this.#doc = inject(DOCUMENT);
19
- this.events$ = this.#zone.runOutsideAngular(() => merge(fromEvent(this.#doc, "keydown", EVENT_OPTIONS), fromEvent(this.#doc, "mousedown", EVENT_OPTIONS), fromEvent(this.#doc, "mousemove", EVENT_OPTIONS), fromEvent(this.#doc, "touchstart", EVENT_OPTIONS)).pipe(map(event => {
20
- const type = event.type;
21
- return {
22
- origin: EVENT_ORIGIN[type],
23
- type: type,
24
- node: event.target
25
- };
26
- }), share()));
27
- }
28
- #zone;
29
- #doc;
30
- watchActivity(node) {
31
- if (node) {
32
- return this.events$.pipe(filter(event => event.node != null &&
33
- (event.node === node || (event.node instanceof HTMLElement && event.node.contains(node)))), shareReplay(1));
34
- }
35
- else {
36
- return this.events$;
37
- }
38
- }
39
- watchInactvity(timeout) {
40
- return this.events$.pipe(startWith(null), throttleTime(timeout / 2), switchMap(() => timer(0, timeout).pipe(take(2))), map(v => v !== 0), distinctUntilChanged(), shareReplay(1));
41
- }
42
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ActivityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
43
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ActivityService, providedIn: "root" }); }
44
- }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ActivityService, decorators: [{
46
- type: Injectable,
47
- args: [{ providedIn: "root" }]
48
- }] });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FyaWEvc3JjL2FjdGl2aXR5L2FjdGl2aXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUUxRCxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssRUFFTCxLQUFLLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFlBQVksRUFDWixLQUFLLEVBQ1IsTUFBTSxNQUFNLENBQUE7O0FBV2IsTUFBTSxhQUFhLEdBQTRCO0lBQzNDLE9BQU8sRUFBRSxJQUFJO0lBQ2IsT0FBTyxFQUFFLElBQUk7Q0FDaEIsQ0FBQTtBQUVELE1BQU0sWUFBWSxHQUFHO0lBQ2pCLE9BQU8sRUFBRSxVQUFVO0lBQ25CLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLFVBQVUsRUFBRSxPQUFPO0NBQ3RCLENBQUE7QUFHRCxNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQUVhLFVBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDdEIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixZQUFPLEdBQThCLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQzVFLEtBQUssQ0FDRCxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQzlDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsRUFDaEQsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxFQUNoRCxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQ3BELENBQUMsSUFBSSxDQUNGLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNSLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUE2QixDQUFBO1lBQ2hELE9BQU87Z0JBQ0gsTUFBTSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQW1CO2dCQUM1QyxJQUFJLEVBQUUsSUFBSTtnQkFDVixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQWE7YUFDNUIsQ0FBQTtRQUNMLENBQUMsQ0FBQyxFQUNGLEtBQUssRUFBRSxDQUNWLENBQ0osQ0FBQTtLQTJCSjtJQS9DWSxLQUFLLENBQWlCO0lBQ3RCLElBQUksQ0FBbUI7SUFxQmhDLGFBQWEsQ0FBQyxJQUFrQjtRQUM1QixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDcEIsTUFBTSxDQUNGLEtBQUssQ0FBQyxFQUFFLENBQ0osS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJO2dCQUNsQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksWUFBWSxXQUFXLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNoRyxFQUNELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDakIsQ0FBQTtRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO1FBQ3ZCLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQWU7UUFDMUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDcEIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUNmLFlBQVksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQ3pCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ2pCLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDakIsQ0FBQTtJQUNMLENBQUM7OEdBL0NRLGVBQWU7a0hBQWYsZUFBZSxjQURGLE1BQU07OzJGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHtcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgICBmaWx0ZXIsXG4gICAgZnJvbUV2ZW50LFxuICAgIG1hcCxcbiAgICBtZXJnZSxcbiAgICBPYnNlcnZhYmxlLFxuICAgIHNoYXJlLFxuICAgIHNoYXJlUmVwbGF5LFxuICAgIHN0YXJ0V2l0aCxcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFrZSxcbiAgICB0aHJvdHRsZVRpbWUsXG4gICAgdGltZXJcbn0gZnJvbSBcInJ4anNcIlxuXG4vLyBUT0RPOiBkZXRlY3QgcHJvZ3JhbSBhY3Rpdml0eVxuZXhwb3J0IHR5cGUgQWN0aXZpdHlPcmlnaW4gPSBcIm1vdXNlXCIgfCBcImtleWJvYXJkXCIgfCBcInRvdWNoXCIgfCBcInByb2dyYW1cIlxuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2aXR5RXZlbnQge1xuICAgIG9yaWdpbjogQWN0aXZpdHlPcmlnaW5cbiAgICB0eXBlOiBrZXlvZiB0eXBlb2YgRVZFTlRfT1JJR0lOXG4gICAgbm9kZT86IE5vZGVcbn1cblxuY29uc3QgRVZFTlRfT1BUSU9OUzogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBwYXNzaXZlOiB0cnVlXG59XG5cbmNvbnN0IEVWRU5UX09SSUdJTiA9IHtcbiAgICBrZXlkb3duOiBcImtleWJvYXJkXCIsXG4gICAgbW91c2Vkb3duOiBcIm1vdXNlXCIsXG4gICAgbW91c2Vtb3ZlOiBcIm1vdXNlXCIsXG4gICAgdG91Y2hzdGFydDogXCJ0b3VjaFwiXG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBBY3Rpdml0eVNlcnZpY2Uge1xuICAgIHJlYWRvbmx5ICN6b25lID0gaW5qZWN0KE5nWm9uZSlcbiAgICByZWFkb25seSAjZG9jID0gaW5qZWN0KERPQ1VNRU5UKVxuXG4gICAgcmVhZG9ubHkgZXZlbnRzJDogT2JzZXJ2YWJsZTxBY3Rpdml0eUV2ZW50PiA9IHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICBmcm9tRXZlbnQodGhpcy4jZG9jLCBcImtleWRvd25cIiwgRVZFTlRfT1BUSU9OUyksXG4gICAgICAgICAgICBmcm9tRXZlbnQodGhpcy4jZG9jLCBcIm1vdXNlZG93blwiLCBFVkVOVF9PUFRJT05TKSxcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLiNkb2MsIFwibW91c2Vtb3ZlXCIsIEVWRU5UX09QVElPTlMpLFxuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuI2RvYywgXCJ0b3VjaHN0YXJ0XCIsIEVWRU5UX09QVElPTlMpXG4gICAgICAgICkucGlwZShcbiAgICAgICAgICAgIG1hcChldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IGV2ZW50LnR5cGUgYXMgQWN0aXZpdHlFdmVudFtcInR5cGVcIl1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW46IEVWRU5UX09SSUdJTlt0eXBlXSBhcyBBY3Rpdml0eU9yaWdpbixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogZXZlbnQudGFyZ2V0IGFzIGFueVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICApXG4gICAgKVxuXG4gICAgd2F0Y2hBY3Rpdml0eShub2RlPzogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50cyQucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5ub2RlICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChldmVudC5ub2RlID09PSBub2RlIHx8IChldmVudC5ub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQubm9kZS5jb250YWlucyhub2RlKSkpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRzJFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2F0Y2hJbmFjdHZpdHkodGltZW91dDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV2ZW50cyQucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgICAgIHRocm90dGxlVGltZSh0aW1lb3V0IC8gMiksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGltZXIoMCwgdGltZW91dCkucGlwZSh0YWtlKDIpKSksXG4gICAgICAgICAgICBtYXAodiA9PiB2ICE9PSAwKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgICApXG4gICAgfVxufVxuIl19
@@ -1,2 +0,0 @@
1
- export * from "./activity.service";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9hY3Rpdml0eS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYWN0aXZpdHkuc2VydmljZVwiXG4iXX0=
@@ -1,63 +0,0 @@
1
- var _a;
2
- import { Directive, effect, ElementRef, inject } from "@angular/core";
3
- import { takeUntilDestroyed, toSignal } from "@angular/core/rxjs-interop";
4
- import { BehaviorSubject, combineLatest, debounceTime, map, Observable, of, shareReplay, switchMap } from "rxjs";
5
- import { isElementInput } from "@ngutil/common";
6
- import { FocusService } from "./focus.service";
7
- import * as i0 from "@angular/core";
8
- export class FocusState {
9
- #focus;
10
- #el;
11
- #parent;
12
- #default;
13
- #self;
14
- #connected;
15
- #connEvent;
16
- constructor() {
17
- this.#focus = inject(FocusService);
18
- this.#el = inject(ElementRef);
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 => (values.length === 0 ? of([]) : 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 });
30
- // TODO: miért kell ez?, ha nincs itt akkor nem frissül
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
- });
48
- }
49
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FocusState, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
50
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: FocusState, isStandalone: true, host: { properties: { "attr.focus": "origin()", "attr.focusWithin": "within()" } }, ngImport: i0 }); }
51
- }
52
- _a = FocusState;
53
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FocusState, decorators: [{
54
- type: Directive,
55
- args: [{
56
- standalone: true,
57
- host: {
58
- "[attr.focus]": "origin()",
59
- "[attr.focusWithin]": "within()"
60
- }
61
- }]
62
- }], ctorParameters: () => [] });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtc3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXJpYS9zcmMvZm9jdXMvZm9jdXMtc3RhdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUV6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUloSCxPQUFPLEVBQW1CLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWhFLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7O0FBUzVELE1BQU0sT0FBTyxVQUFVO0lBQ1YsTUFBTSxDQUF1QjtJQUM3QixHQUFHLENBQThDO0lBQ2pELE9BQU8sQ0FBeUQ7SUFDaEUsUUFBUSxDQUFrRTtJQUUxRSxLQUFLLENBQXlFO0lBRTlFLFVBQVUsQ0FBc0Q7SUFDaEUsVUFBVSxDQU1sQjtJQWVEO1FBN0JTLFdBQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDN0IsUUFBRyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUE7UUFDakQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxFQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ2hFLGFBQVEsR0FBaUIsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFBO1FBRTFF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LENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDbEcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFFckQsT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUE7Z0JBQ25DLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ2hDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNYLE9BQU8sR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUE7b0JBQ3RCLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO29CQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDakMsQ0FBQztZQUNMLENBQUMsQ0FBQTtRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQzs4R0FuRFEsVUFBVTtrR0FBVixVQUFVOzs7MkZBQVYsVUFBVTtrQkFQdEIsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFO3dCQUNGLGNBQWMsRUFBRSxVQUFVO3dCQUMxQixvQkFBb0IsRUFBRSxVQUFVO3FCQUNuQztpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvU2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wXCJcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IEVsZW1lbnRJbnB1dCB9IGZyb20gXCJkaXN0L3BhY2thZ2VzL2NvbW1vblwiXG5cbmltcG9ydCB7IENvbm5lY3RQcm90b2NvbCwgaXNFbGVtZW50SW5wdXQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBGb2N1c0NoYW5nZXMsIEZvY3VzU2VydmljZSB9IGZyb20gXCIuL2ZvY3VzLnNlcnZpY2VcIlxuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgXCJbYXR0ci5mb2N1c11cIjogXCJvcmlnaW4oKVwiLFxuICAgICAgICBcIlthdHRyLmZvY3VzV2l0aGluXVwiOiBcIndpdGhpbigpXCJcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEZvY3VzU3RhdGUgaW1wbGVtZW50cyBDb25uZWN0UHJvdG9jb2wge1xuICAgIHJlYWRvbmx5ICNmb2N1cyA9IGluamVjdChGb2N1c1NlcnZpY2UpXG4gICAgcmVhZG9ubHkgI2VsID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKVxuICAgIHJlYWRvbmx5ICNwYXJlbnQgPSBpbmplY3QoRm9jdXNTdGF0ZSwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUgfSlcbiAgICByZWFkb25seSAjZGVmYXVsdDogRm9jdXNDaGFuZ2VzID0geyBlbGVtZW50OiB0aGlzLiNlbC5uYXRpdmVFbGVtZW50LCBvcmlnaW46IG51bGwgfVxuXG4gICAgcmVhZG9ubHkgI3NlbGYgPSB0aGlzLiNmb2N1cy53YXRjaCh0aGlzLiNlbCkucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSwgc2hhcmVSZXBsYXkoMSkpXG5cbiAgICByZWFkb25seSAjY29ubmVjdGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPYnNlcnZhYmxlPEZvY3VzQ2hhbmdlcz5bXT4oW10pXG4gICAgcmVhZG9ubHkgI2Nvbm5FdmVudCA9IHRoaXMuI2Nvbm5lY3RlZC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodmFsdWVzID0+ICh2YWx1ZXMubGVuZ3RoID09PSAwID8gb2YoW10pIDogY29tYmluZUxhdGVzdCh2YWx1ZXMpKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgICBtYXAodmFsdWVzID0+IHZhbHVlcy5maWx0ZXIodiA9PiB2Lm9yaWdpbiAhPSBudWxsKSksXG4gICAgICAgIG1hcCh2YWx1ZXMgPT4gdmFsdWVzWzBdIHx8IHRoaXMuI2RlZmF1bHQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGV2ZW50JDogT2JzZXJ2YWJsZTxGb2N1c0NoYW5nZXM+ID0gY29tYmluZUxhdGVzdChbdGhpcy4jc2VsZiwgdGhpcy4jY29ubkV2ZW50XSkucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgIG1hcCh2YWx1ZXMgPT4gdmFsdWVzLmZpbmQodiA9PiB2Lm9yaWdpbiAhPSBudWxsKSB8fCB0aGlzLiNkZWZhdWx0KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICByZWFkb25seSBvcmlnaW4kID0gdGhpcy5ldmVudCQucGlwZShtYXAoZXZlbnQgPT4gZXZlbnQub3JpZ2luKSlcbiAgICByZWFkb25seSB3aXRoaW4kID0gdGhpcy5ldmVudCQucGlwZShtYXAoZXZlbnQgPT4gKGV2ZW50LmVsZW1lbnQgIT09IHRoaXMuI2VsLm5hdGl2ZUVsZW1lbnQgPyBldmVudC5vcmlnaW4gOiBudWxsKSkpXG5cbiAgICByZWFkb25seSBldmVudCA9IHRvU2lnbmFsKHRoaXMuZXZlbnQkLCB7IHJlamVjdEVycm9yczogdHJ1ZSwgbWFudWFsQ2xlYW51cDogdHJ1ZSB9KVxuICAgIHJlYWRvbmx5IG9yaWdpbiA9IHRvU2lnbmFsKHRoaXMub3JpZ2luJCwgeyByZWplY3RFcnJvcnM6IHRydWUsIG1hbnVhbENsZWFudXA6IHRydWUgfSlcbiAgICByZWFkb25seSB3aXRoaW4gPSB0b1NpZ25hbCh0aGlzLndpdGhpbiQsIHsgcmVqZWN0RXJyb3JzOiB0cnVlLCBtYW51YWxDbGVhbnVwOiB0cnVlIH0pXG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8gVE9ETzogbWnDqXJ0IGtlbGwgZXo/LCBoYSBuaW5jcyBpdHQgYWtrb3IgbmVtIGZyaXNzw7xsXG4gICAgICAgIGVmZmVjdCgoKSA9PiB0aGlzLm9yaWdpbigpLCB7IGFsbG93U2lnbmFsV3JpdGVzOiBmYWxzZSB9KVxuICAgICAgICB0aGlzLiNwYXJlbnQ/LmNvbm5lY3QodGhpcykucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKClcbiAgICB9XG5cbiAgICBjb25uZWN0KHZhbHVlOiBGb2N1c1N0YXRlIHwgRWxlbWVudElucHV0KSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSAoaXNFbGVtZW50SW5wdXQodmFsdWUpID8gdGhpcy4jZm9jdXMud2F0Y2godmFsdWUpIDogdmFsdWUuZXZlbnQkKS5waXBlKHNoYXJlUmVwbGF5KDEpKVxuICAgICAgICAgICAgdGhpcy4jY29ubmVjdGVkLm5leHQoWy4uLnRoaXMuI2Nvbm5lY3RlZC52YWx1ZSwgc3JjXSlcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IHRoaXMuI2Nvbm5lY3RlZC52YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IGN1cnJlbnQuaW5kZXhPZihzcmMpXG4gICAgICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBbLi4uY3VycmVudF1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNjb25uZWN0ZWQubmV4dChjdXJyZW50KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=
@@ -1,25 +0,0 @@
1
- import { ElementRef, inject } from "@angular/core";
2
- import { BehaviorSubject } from "rxjs";
3
- import { Destructible } from "@ngutil/common";
4
- import { FocusService } from "./focus.service";
5
- // TODO: implement
6
- export class FocusTrap extends Destructible {
7
- #manager = inject(FocusService);
8
- #el = inject((ElementRef));
9
- get enabled() {
10
- return this.#enabled.value;
11
- }
12
- set enabled(val) {
13
- if (this.#enabled.value !== val) {
14
- this.#enabled.next(val);
15
- }
16
- }
17
- #enabled = new BehaviorSubject(true);
18
- enable() {
19
- this.enabled = true;
20
- }
21
- disable() {
22
- this.enabled = false;
23
- }
24
- }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtdHJhcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9mb2N1cy9mb2N1cy10cmFwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFOUMsa0JBQWtCO0FBQ2xCLE1BQU0sT0FBTyxTQUFVLFNBQVEsWUFBWTtJQUN2QyxRQUFRLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQy9CLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUF1QixDQUFBLENBQUMsQ0FBQTtJQUVyQyxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFBO0lBQzlCLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFZO1FBQ3BCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDM0IsQ0FBQztJQUNMLENBQUM7SUFDRCxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUE7SUFFN0MsTUFBTTtRQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO0lBQ3ZCLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7SUFDeEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IERlc3RydWN0aWJsZSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IEZvY3VzU2VydmljZSB9IGZyb20gXCIuL2ZvY3VzLnNlcnZpY2VcIlxuXG4vLyBUT0RPOiBpbXBsZW1lbnRcbmV4cG9ydCBjbGFzcyBGb2N1c1RyYXAgZXh0ZW5kcyBEZXN0cnVjdGlibGUge1xuICAgICNtYW5hZ2VyID0gaW5qZWN0KEZvY3VzU2VydmljZSlcbiAgICAjZWwgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pXG5cbiAgICBnZXQgZW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2VuYWJsZWQudmFsdWVcbiAgICB9XG4gICAgc2V0IGVuYWJsZWQodmFsOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLiNlbmFibGVkLnZhbHVlICE9PSB2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuI2VuYWJsZWQubmV4dCh2YWwpXG4gICAgICAgIH1cbiAgICB9XG4gICAgI2VuYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpXG5cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcbiAgICB9XG5cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxuICAgIH1cbn1cbiJdfQ==
@@ -1,145 +0,0 @@
1
- import { FocusTrapFactory } from "@angular/cdk/a11y";
2
- import { DOCUMENT } from "@angular/common";
3
- import { inject, Injectable, NgZone } from "@angular/core";
4
- import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
5
- import { BehaviorSubject, combineLatest, connect, distinctUntilChanged, filter, finalize, map, merge, Observable, shareReplay, startWith, Subject, tap } from "rxjs";
6
- import { isEqual } from "lodash-es";
7
- import { focusable, isFocusable } from "tabbable";
8
- import { coerceElement } from "@ngutil/common";
9
- import { ActivityService } from "../activity";
10
- import * as i0 from "@angular/core";
11
- const EVENT_OPTIONS = {
12
- capture: true,
13
- passive: true
14
- };
15
- export class FocusService {
16
- constructor() {
17
- this.#activity = inject(ActivityService);
18
- this.#focusTrap = inject(FocusTrapFactory);
19
- this.#zone = inject(NgZone);
20
- this.#document = inject(DOCUMENT);
21
- this.#originOverrides = new BehaviorSubject(new Map());
22
- this.#focus = listener(this.#document, this.#zone, "focus", EVENT_OPTIONS).pipe(connect(focus => this.#zone.runOutsideAngular(() => {
23
- let lastFocused = null;
24
- const sideEffect = new Subject();
25
- // if element removed form document, emit blur & focus
26
- const mutation = new MutationObserver(mutations => {
27
- for (const mutation of mutations) {
28
- if (mutation.type === "childList" && mutation.removedNodes.length > 0) {
29
- for (const removed of Array.from(mutation.removedNodes)) {
30
- if (removed === lastFocused || removed.contains(lastFocused)) {
31
- this.#blurSide.next(lastFocused);
32
- sideEffect.next(this.#document.activeElement);
33
- return;
34
- }
35
- }
36
- }
37
- }
38
- });
39
- mutation.observe(this.#document, { subtree: true, childList: true });
40
- return merge(focus.pipe(tap(node => (lastFocused = node)), finalize(() => mutation.disconnect())), sideEffect);
41
- })), distinctUntilChanged(strictEq));
42
- this.#blurEvent = listener(this.#document, this.#zone, "blur", EVENT_OPTIONS).pipe(startWith(null));
43
- this.#blurSide = new Subject();
44
- this.#blur = merge(this.#blurEvent, this.#blurSide).pipe(distinctUntilChanged(strictEq));
45
- this.events = this.#zone.runOutsideAngular(() => combineLatest({
46
- activity: this.#activity.events$.pipe(filter(event => event.type !== "mousemove")),
47
- focus: this.#focus,
48
- blur: this.#blur.pipe(tap(el => this.#delOrigin(el))),
49
- overrides: this.#originOverrides
50
- }).pipe(takeUntilDestroyed(), map(({ activity, focus, blur, overrides }) => {
51
- const override = overrides.get(focus);
52
- // If focus in with alt+tab
53
- if (blur === document && activity.origin === "keyboard") {
54
- return { origin: override || "program", element: focus };
55
- }
56
- if (focus === document) {
57
- return { origin: override || "program", element: focus };
58
- }
59
- // If press tab button, first fire the event in the currently focused element
60
- if (focus === blur) {
61
- return null;
62
- }
63
- // When press tab, the activity is on the current fucesd element,
64
- // so when blur is changed to it, the focus change is completed
65
- if (activity.origin === "keyboard" && isActivityElement(activity.node, blur)) {
66
- return { origin: override || "keyboard", element: focus };
67
- }
68
- if (isActivityElement(activity.node, focus)) {
69
- return { origin: override || activity.origin, element: focus };
70
- }
71
- else {
72
- return { origin: override || "program", element: focus };
73
- }
74
- }), filter(v => !!v), distinctUntilChanged(isEqual), shareReplay({ bufferSize: 1, refCount: true })));
75
- }
76
- #activity;
77
- #focusTrap;
78
- #zone;
79
- #document;
80
- #originOverrides;
81
- #focus;
82
- #blurEvent;
83
- #blurSide;
84
- #blur;
85
- watch(element) {
86
- const el = coerceElement(element);
87
- return this.events.pipe(map(event => {
88
- if (event.element &&
89
- (event.element === el || (typeof el.contains === "function" && el.contains(event.element)))) {
90
- return event;
91
- }
92
- return { element: el, origin: null };
93
- }));
94
- }
95
- focus(node, origin) {
96
- this.#setOrigin(node, origin);
97
- coerceElement(node).focus();
98
- }
99
- queryFocusable(inside) {
100
- return focusable(coerceElement(inside), { includeContainer: false });
101
- }
102
- getFirstFocusable(inside) {
103
- return this.queryFocusable(inside)[0];
104
- }
105
- isFocusable(node) {
106
- return isFocusable(coerceElement(node));
107
- }
108
- focusTrap(inside, deferCaptureElements = false) {
109
- return this.#focusTrap.create(coerceElement(inside), deferCaptureElements);
110
- }
111
- #setOrigin(el, origin) {
112
- const target = coerceElement(el);
113
- const map = this.#originOverrides.value;
114
- map.set(target, origin);
115
- this.#originOverrides.next(map);
116
- }
117
- #delOrigin(el) {
118
- const target = coerceElement(el);
119
- const map = this.#originOverrides.value;
120
- map.delete(target);
121
- this.#originOverrides.next(map);
122
- }
123
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FocusService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
124
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FocusService, providedIn: "root" }); }
125
- }
126
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FocusService, decorators: [{
127
- type: Injectable,
128
- args: [{ providedIn: "root" }]
129
- }] });
130
- function isActivityElement(activityEl, focused) {
131
- return activityEl != null && focused != null && (activityEl === focused || focused.contains(activityEl));
132
- }
133
- function listener(doc, zone, type, options) {
134
- return new Observable((dst) => zone.runOutsideAngular(() => {
135
- const handler = (e) => {
136
- dst.next(e.target);
137
- };
138
- document.addEventListener(type, handler, options);
139
- return () => document.removeEventListener(type, handler, options);
140
- }));
141
- }
142
- function strictEq(a, b) {
143
- return a === b;
144
- }
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FyaWEvc3JjL2ZvY3VzL2ZvY3VzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUUvRCxPQUFPLEVBQ0gsZUFBZSxFQUNmLGFBQWEsRUFDYixPQUFPLEVBQ1Asb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUNILEtBQUssRUFDTCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFNBQVMsRUFDVCxPQUFPLEVBRVAsR0FBRyxFQUNOLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsU0FBUyxFQUF5QixXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU1RCxPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQTs7QUFFN0QsTUFBTSxhQUFhLEdBQTRCO0lBQzNDLE9BQU8sRUFBRSxJQUFJO0lBQ2IsT0FBTyxFQUFFLElBQUk7Q0FDaEIsQ0FBQTtBQWdCRCxNQUFNLE9BQU8sWUFBWTtJQUR6QjtRQUVhLGNBQVMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDbkMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQ3JDLFVBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxD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SUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c1RyYXBGYWN0b3J5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9hMTF5XCJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiXG5cbmltcG9ydCB7XG4gICAgQmVoYXZpb3JTdWJqZWN0LFxuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgY29ubmVjdCxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgICBmaWx0ZXIsXG4gICAgZmluYWxpemUsXG4gICAgbWFwLFxuICAgIG1lcmdlLFxuICAgIE9ic2VydmFibGUsXG4gICAgc2hhcmVSZXBsYXksXG4gICAgc3RhcnRXaXRoLFxuICAgIFN1YmplY3QsXG4gICAgU3Vic2NyaWJlcixcbiAgICB0YXBcbn0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSBcImxvZGFzaC1lc1wiXG5pbXBvcnQgeyBmb2N1c2FibGUsIHR5cGUgRm9jdXNhYmxlRWxlbWVudCwgaXNGb2N1c2FibGUgfSBmcm9tIFwidGFiYmFibGVcIlxuXG5pbXBvcnQgeyBjb2VyY2VFbGVtZW50LCBFbGVtZW50SW5wdXQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBBY3Rpdml0eU9yaWdpbiwgQWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSBcIi4uL2FjdGl2aXR5XCJcblxuY29uc3QgRVZFTlRfT1BUSU9OUzogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBwYXNzaXZlOiB0cnVlXG59XG5cbmV4cG9ydCB0eXBlIEZvY3VzT3JpZ2luID0gQWN0aXZpdHlPcmlnaW4gfCBudWxsXG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9jdXNDaGFuZ2VzIHtcbiAgICBvcmlnaW46IEZvY3VzT3JpZ2luXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb2N1c2FibGVFdmVudCB7XG4gICAgb3JpZ2luOiBGb2N1c09yaWdpblxuICAgIGV4YWN0OiBib29sZWFuXG4gICAgbm9kZTogTm9kZVxufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgRm9jdXNTZXJ2aWNlIHtcbiAgICByZWFkb25seSAjYWN0aXZpdHkgPSBpbmplY3QoQWN0aXZpdHlTZXJ2aWNlKVxuICAgIHJlYWRvbmx5ICNmb2N1c1RyYXAgPSBpbmplY3QoRm9jdXNUcmFwRmFjdG9yeSlcbiAgICByZWFkb25seSAjem9uZSA9IGluamVjdChOZ1pvbmUpXG4gICAgcmVhZG9ubHkgI2RvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKVxuXG4gICAgcmVhZG9ubHkgI29yaWdpbk92ZXJyaWRlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWFwPEhUTUxFbGVtZW50LCBGb2N1c09yaWdpbj4+KG5ldyBNYXAoKSlcblxuICAgIHJlYWRvbmx5ICNmb2N1cyA9IGxpc3RlbmVyKHRoaXMuI2RvY3VtZW50LCB0aGlzLiN6b25lLCBcImZvY3VzXCIsIEVWRU5UX09QVElPTlMpLnBpcGUoXG4gICAgICAgIGNvbm5lY3QoZm9jdXMgPT5cbiAgICAgICAgICAgIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBsYXN0Rm9jdXNlZDogTm9kZSB8IG51bGwgPSBudWxsXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lkZUVmZmVjdCA9IG5ldyBTdWJqZWN0PE5vZGU+KClcblxuICAgICAgICAgICAgICAgIC8vIGlmIGVsZW1lbnQgcmVtb3ZlZCBmb3JtIGRvY3VtZW50LCBlbWl0IGJsdXIgJiBmb2N1c1xuICAgICAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiICYmIG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZW1vdmVkIG9mIEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZCA9PT0gbGFzdEZvY3VzZWQgfHwgcmVtb3ZlZC5jb250YWlucyhsYXN0Rm9jdXNlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2JsdXJTaWRlLm5leHQobGFzdEZvY3VzZWQhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZUVmZmVjdC5uZXh0KHRoaXMuI2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgbXV0YXRpb24ub2JzZXJ2ZSh0aGlzLiNkb2N1bWVudCwgeyBzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUgfSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2UoXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXAobm9kZSA9PiAobGFzdEZvY3VzZWQgPSBub2RlKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiBtdXRhdGlvbi5kaXNjb25uZWN0KCkpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHNpZGVFZmZlY3RcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICApLFxuXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKHN0cmljdEVxKVxuICAgIClcblxuICAgIHJlYWRvbmx5ICNibHVyRXZlbnQgPSBsaXN0ZW5lcih0aGlzLiNkb2N1bWVudCwgdGhpcy4jem9uZSwgXCJibHVyXCIsIEVWRU5UX09QVElPTlMpLnBpcGUoc3RhcnRXaXRoKG51bGwpKVxuICAgIHJlYWRvbmx5ICNibHVyU2lkZSA9IG5ldyBTdWJqZWN0PE5vZGU+KClcbiAgICByZWFkb25seSAjYmx1ciA9IG1lcmdlKHRoaXMuI2JsdXJFdmVudCwgdGhpcy4jYmx1clNpZGUpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoc3RyaWN0RXEpKVxuXG4gICAgcmVhZG9ubHkgZXZlbnRzOiBPYnNlcnZhYmxlPEZvY3VzQ2hhbmdlcz4gPSB0aGlzLiN6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgIGNvbWJpbmVMYXRlc3Qoe1xuICAgICAgICAgICAgYWN0aXZpdHk6IHRoaXMuI2FjdGl2aXR5LmV2ZW50cyQucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQudHlwZSAhPT0gXCJtb3VzZW1vdmVcIikpLFxuICAgICAgICAgICAgZm9jdXM6IHRoaXMuI2ZvY3VzLFxuICAgICAgICAgICAgYmx1cjogdGhpcy4jYmx1ci5waXBlKHRhcChlbCA9PiB0aGlzLiNkZWxPcmlnaW4oZWwgYXMgYW55KSkpLFxuICAgICAgICAgICAgb3ZlcnJpZGVzOiB0aGlzLiNvcmlnaW5PdmVycmlkZXNcbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgICAgICAgbWFwKCh7IGFjdGl2aXR5LCBmb2N1cywgYmx1ciwgb3ZlcnJpZGVzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlcy5nZXQoZm9jdXMgYXMgYW55KVxuXG4gICAgICAgICAgICAgICAgLy8gSWYgZm9jdXMgaW4gd2l0aCBhbHQrdGFiXG4gICAgICAgICAgICAgICAgaWYgKGJsdXIgPT09IGRvY3VtZW50ICYmIGFjdGl2aXR5Lm9yaWdpbiA9PT0gXCJrZXlib2FyZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9yaWdpbjogb3ZlcnJpZGUgfHwgXCJwcm9ncmFtXCIsIGVsZW1lbnQ6IGZvY3VzIH0gc2F0aXNmaWVzIEZvY3VzQ2hhbmdlc1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChmb2N1cyA9PT0gZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb3JpZ2luOiBvdmVycmlkZSB8fCBcInByb2dyYW1cIiwgZWxlbWVudDogZm9jdXMgfSBzYXRpc2ZpZXMgRm9jdXNDaGFuZ2VzXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSWYgcHJlc3MgdGFiIGJ1dHRvbiwgZmlyc3QgZmlyZSB0aGUgZXZlbnQgaW4gdGhlIGN1cnJlbnRseSBmb2N1c2VkIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXMgPT09IGJsdXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHByZXNzIHRhYiwgdGhlIGFjdGl2aXR5IGlzIG9uIHRoZSBjdXJyZW50IGZ1Y2VzZCBlbGVtZW50LFxuICAgICAgICAgICAgICAgIC8vIHNvIHdoZW4gYmx1ciBpcyBjaGFuZ2VkIHRvIGl0LCB0aGUgZm9jdXMgY2hhbmdlIGlzIGNvbXBsZXRlZFxuICAgICAgICAgICAgICAgIGlmIChhY3Rpdml0eS5vcmlnaW4gPT09IFwia2V5Ym9hcmRcIiAmJiBpc0FjdGl2aXR5RWxlbWVudChhY3Rpdml0eS5ub2RlLCBibHVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvcmlnaW46IG92ZXJyaWRlIHx8IFwia2V5Ym9hcmRcIiwgZWxlbWVudDogZm9jdXMgfSBzYXRpc2ZpZXMgRm9jdXNDaGFuZ2VzXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZpdHlFbGVtZW50KGFjdGl2aXR5Lm5vZGUsIGZvY3VzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvcmlnaW46IG92ZXJyaWRlIHx8IGFjdGl2aXR5Lm9yaWdpbiwgZWxlbWVudDogZm9jdXMgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9yaWdpbjogb3ZlcnJpZGUgfHwgXCJwcm9ncmFtXCIsIGVsZW1lbnQ6IGZvY3VzIH0gc2F0aXNmaWVzIEZvY3VzQ2hhbmdlc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzRXF1YWwpLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgICAgICApXG4gICAgKVxuXG4gICAgd2F0Y2goZWxlbWVudDogRWxlbWVudElucHV0KSB7XG4gICAgICAgIGNvbnN0IGVsID0gY29lcmNlRWxlbWVudChlbGVtZW50KVxuICAgICAgICByZXR1cm4gdGhpcy5ldmVudHMucGlwZShcbiAgICAgICAgICAgIG1hcChldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBldmVudC5lbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgIChldmVudC5lbGVtZW50ID09PSBlbCB8fCAodHlwZW9mIGVsLmNvbnRhaW5zID09PSBcImZ1bmN0aW9uXCIgJiYgZWwuY29udGFpbnMoZXZlbnQuZWxlbWVudCkpKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZWxlbWVudDogZWwsIG9yaWdpbjogbnVsbCB9IGFzIEZvY3VzQ2hhbmdlc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIGZvY3VzKG5vZGU6IEVsZW1lbnRJbnB1dCwgb3JpZ2luOiBGb2N1c09yaWdpbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy4jc2V0T3JpZ2luKG5vZGUsIG9yaWdpbilcbiAgICAgICAgY29lcmNlRWxlbWVudChub2RlKS5mb2N1cygpXG4gICAgfVxuXG4gICAgcXVlcnlGb2N1c2FibGUoaW5zaWRlOiBFbGVtZW50SW5wdXQpOiBGb2N1c2FibGVFbGVtZW50W10ge1xuICAgICAgICByZXR1cm4gZm9jdXNhYmxlKGNvZXJjZUVsZW1lbnQoaW5zaWRlKSwgeyBpbmNsdWRlQ29udGFpbmVyOiBmYWxzZSB9KVxuICAgIH1cblxuICAgIGdldEZpcnN0Rm9jdXNhYmxlKGluc2lkZTogRWxlbWVudElucHV0KTogRm9jdXNhYmxlRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5Rm9jdXNhYmxlKGluc2lkZSlbMF1cbiAgICB9XG5cbiAgICBpc0ZvY3VzYWJsZShub2RlOiBFbGVtZW50SW5wdXQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlzRm9jdXNhYmxlKGNvZXJjZUVsZW1lbnQobm9kZSkpXG4gICAgfVxuXG4gICAgZm9jdXNUcmFwKGluc2lkZTogRWxlbWVudElucHV0LCBkZWZlckNhcHR1cmVFbGVtZW50czogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNmb2N1c1RyYXAuY3JlYXRlKGNvZXJjZUVsZW1lbnQoaW5zaWRlKSwgZGVmZXJDYXB0dXJlRWxlbWVudHMpXG4gICAgfVxuXG4gICAgI3NldE9yaWdpbihlbDogRWxlbWVudElucHV0LCBvcmlnaW46IEZvY3VzT3JpZ2luKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNvZXJjZUVsZW1lbnQoZWwpXG4gICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuI29yaWdpbk92ZXJyaWRlcy52YWx1ZVxuICAgICAgICBtYXAuc2V0KHRhcmdldCwgb3JpZ2luKVxuICAgICAgICB0aGlzLiNvcmlnaW5PdmVycmlkZXMubmV4dChtYXApXG4gICAgfVxuXG4gICAgI2RlbE9yaWdpbihlbDogRWxlbWVudElucHV0KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNvZXJjZUVsZW1lbnQoZWwpXG4gICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuI29yaWdpbk92ZXJyaWRlcy52YWx1ZVxuICAgICAgICBtYXAuZGVsZXRlKHRhcmdldClcbiAgICAgICAgdGhpcy4jb3JpZ2luT3ZlcnJpZGVzLm5leHQobWFwKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNBY3Rpdml0eUVsZW1lbnQoYWN0aXZpdHlFbD86IE5vZGUgfCBudWxsLCBmb2N1c2VkPzogTm9kZSB8IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWN0aXZpdHlFbCAhPSBudWxsICYmIGZvY3VzZWQgIT0gbnVsbCAmJiAoYWN0aXZpdHlFbCA9PT0gZm9jdXNlZCB8fCBmb2N1c2VkLmNvbnRhaW5zKGFjdGl2aXR5RWwpKVxufVxuXG5mdW5jdGlvbiBsaXN0ZW5lcihkb2M6IERvY3VtZW50LCB6b25lOiBOZ1pvbmUsIHR5cGU6IEV2ZW50W1widHlwZVwiXSwgb3B0aW9uczogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKGRzdDogU3Vic2NyaWJlcjxOb2RlPikgPT5cbiAgICAgICAgem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZHN0Lm5leHQoZS50YXJnZXQgYXMgTm9kZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgb3B0aW9ucylcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIG9wdGlvbnMpXG4gICAgICAgIH0pXG4gICAgKVxufVxuXG5mdW5jdGlvbiBzdHJpY3RFcShhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhID09PSBiXG59XG4iXX0=
@@ -1,52 +0,0 @@
1
- import { computed, Directive, effect, inject, input } from "@angular/core";
2
- import { isElementInput } from "@ngutil/common";
3
- import { FocusState } from "./focus-state.directive";
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "./focus-state.directive";
6
- // TODO: what happens when disabled is changed
7
- export class Focusable {
8
- constructor() {
9
- this.state = inject(FocusState);
10
- this.focusable = input(true, { alias: "nuFocusable" });
11
- this.tabindex = input(0, { transform: Number });
12
- this._tabindex = computed(() => {
13
- const focusable = this.focusable();
14
- const tabindex = this.tabindex();
15
- if (focusable === false) {
16
- return -1;
17
- }
18
- if (typeof focusable === "number") {
19
- return focusable;
20
- }
21
- if (focusable === true && tabindex != null && !isNaN(tabindex)) {
22
- return tabindex;
23
- }
24
- return 0;
25
- });
26
- // TODO: miért kell ez?, ha nincs itt akkor nem frissül
27
- effect(() => this._tabindex(), { allowSignalWrites: false });
28
- }
29
- connect(value) {
30
- if (value instanceof FocusState || isElementInput(value)) {
31
- return this.state.connect(value);
32
- }
33
- else {
34
- return this.state.connect(value.state);
35
- }
36
- }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: Focusable, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
38
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.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 }); }
39
- }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: Focusable, decorators: [{
41
- type: Directive,
42
- args: [{
43
- standalone: true,
44
- selector: "[nuFocusable]",
45
- exportAs: "nuFocusable",
46
- host: {
47
- "[attr.tabindex]": "_tabindex()"
48
- },
49
- hostDirectives: [FocusState]
50
- }]
51
- }], ctorParameters: () => [] });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXNhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FyaWEvc3JjL2ZvY3VzL2ZvY3VzYWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFMUUsT0FBTyxFQUFpQyxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUE7OztBQUVwRCw4Q0FBOEM7QUFXOUMsTUFBTSxPQUFPLFNBQVM7SUF5QmxCO1FBeEJTLFVBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFMUIsY0FBUyxHQUFHLEtBQUssQ0FBbUIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUE7UUFDbkUsYUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUUxQyxjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7WUFDbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO1lBRWhDLElBQUksU0FBUyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUN0QixPQUFPLENBQUMsQ0FBQyxDQUFBO1lBQ2IsQ0FBQztZQUVELElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sU0FBUyxDQUFBO1lBQ3BCLENBQUM7WUFFRCxJQUFJLFNBQVMsS0FBSyxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxPQUFPLFFBQVEsQ0FBQTtZQUNuQixDQUFDO1lBRUQsT0FBTyxDQUFDLENBQUE7UUFDWixDQUFDLENBQUMsQ0FBQTtRQUdFLHVEQUF1RDtRQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQTRDO1FBQ2hELElBQUksS0FBSyxZQUFZLFVBQVUsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3BDLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDMUMsQ0FBQztJQUNMLENBQUM7OEdBcENRLFNBQVM7a0dBQVQsU0FBUzs7MkZBQVQsU0FBUztrQkFUckIsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRSxhQUFhO29CQUN2QixJQUFJLEVBQUU7d0JBQ0YsaUJBQWlCLEVBQUUsYUFBYTtxQkFDbkM7b0JBQ0QsY0FBYyxFQUFFLENBQUMsVUFBVSxDQUFDO2lCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBEaXJlY3RpdmUsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHsgQ29ubmVjdFByb3RvY29sLCBFbGVtZW50SW5wdXQsIGlzRWxlbWVudElucHV0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgRm9jdXNTdGF0ZSB9IGZyb20gXCIuL2ZvY3VzLXN0YXRlLmRpcmVjdGl2ZVwiXG5cbi8vIFRPRE86IHdoYXQgaGFwcGVucyB3aGVuIGRpc2FibGVkIGlzIGNoYW5nZWRcblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVGb2N1c2FibGVdXCIsXG4gICAgZXhwb3J0QXM6IFwibnVGb2N1c2FibGVcIixcbiAgICBob3N0OiB7XG4gICAgICAgIFwiW2F0dHIudGFiaW5kZXhdXCI6IFwiX3RhYmluZGV4KClcIlxuICAgIH0sXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtGb2N1c1N0YXRlXVxufSlcbmV4cG9ydCBjbGFzcyBGb2N1c2FibGUgaW1wbGVtZW50cyBDb25uZWN0UHJvdG9jb2wge1xuICAgIHJlYWRvbmx5IHN0YXRlID0gaW5qZWN0KEZvY3VzU3RhdGUpXG5cbiAgICByZWFkb25seSBmb2N1c2FibGUgPSBpbnB1dDxib29sZWFuIHwgbnVtYmVyPih0cnVlLCB7IGFsaWFzOiBcIm51Rm9jdXNhYmxlXCIgfSlcbiAgICByZWFkb25seSB0YWJpbmRleCA9IGlucHV0KDAsIHsgdHJhbnNmb3JtOiBOdW1iZXIgfSlcblxuICAgIHJlYWRvbmx5IF90YWJpbmRleCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gdGhpcy5mb2N1c2FibGUoKVxuICAgICAgICBjb25zdCB0YWJpbmRleCA9IHRoaXMudGFiaW5kZXgoKVxuXG4gICAgICAgIGlmIChmb2N1c2FibGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZm9jdXNhYmxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9jdXNhYmxlID09PSB0cnVlICYmIHRhYmluZGV4ICE9IG51bGwgJiYgIWlzTmFOKHRhYmluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYmluZGV4XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMFxuICAgIH0pXG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8gVE9ETzogbWnDqXJ0IGtlbGwgZXo/LCBoYSBuaW5jcyBpdHQgYWtrb3IgbmVtIGZyaXNzw7xsXG4gICAgICAgIGVmZmVjdCgoKSA9PiB0aGlzLl90YWJpbmRleCgpLCB7IGFsbG93U2lnbmFsV3JpdGVzOiBmYWxzZSB9KVxuICAgIH1cblxuICAgIGNvbm5lY3QodmFsdWU6IEZvY3VzYWJsZSB8IEZvY3VzU3RhdGUgfCBFbGVtZW50SW5wdXQpIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRm9jdXNTdGF0ZSB8fCBpc0VsZW1lbnRJbnB1dCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmNvbm5lY3QodmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5jb25uZWN0KHZhbHVlLnN0YXRlKVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,5 +0,0 @@
1
- export * from "./focus.service";
2
- export * from "./focus-trap.directive";
3
- export * from "./focusable.directive";
4
- export * from "./focus-state.directive";
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9mb2N1cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlCQUFpQixDQUFBO0FBQy9CLGNBQWMsd0JBQXdCLENBQUE7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQTtBQUNyQyxjQUFjLHlCQUF5QixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZm9jdXMuc2VydmljZVwiXG5leHBvcnQgKiBmcm9tIFwiLi9mb2N1cy10cmFwLmRpcmVjdGl2ZVwiXG5leHBvcnQgKiBmcm9tIFwiLi9mb2N1c2FibGUuZGlyZWN0aXZlXCJcbmV4cG9ydCAqIGZyb20gXCIuL2ZvY3VzLXN0YXRlLmRpcmVjdGl2ZVwiXG4iXX0=