@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,91 +0,0 @@
1
- var _a;
2
- import { computed, Directive, inject, signal, untracked } from "@angular/core";
3
- import { Observable } from "rxjs";
4
- import { deepClone } from "@ngutil/common";
5
- import { compile as compileSelector } from "./selector";
6
- import * as i0 from "@angular/core";
7
- export class UiState {
8
- constructor() {
9
- this.#parent = inject(_a, { skipSelf: true, optional: true });
10
- this.#self = signal({});
11
- this.merged = computed(() => {
12
- const parent = this.#parent?.merged();
13
- const self = this.#self();
14
- if (parent) {
15
- const result = deepClone(self);
16
- for (const [k, v] of Object.entries(parent)) {
17
- const parentIsTrue = Object.values(v).includes(true);
18
- const { self: _, ...parentWihtoutSelf } = v;
19
- if (result[k] != null) {
20
- result[k] = {
21
- ...parentWihtoutSelf,
22
- ...result[k],
23
- parent: parentIsTrue
24
- };
25
- }
26
- else {
27
- result[k] = { ...parentWihtoutSelf, parent: parentIsTrue };
28
- }
29
- }
30
- return result;
31
- }
32
- else {
33
- return self;
34
- }
35
- });
36
- this.value = computed(() => {
37
- const merged = this.merged();
38
- const result = {};
39
- for (const [k, v] of Object.entries(merged)) {
40
- result[k] = Object.values(v).includes(true);
41
- }
42
- return result;
43
- });
44
- this.inertSelector = signal("busy || disabled");
45
- }
46
- #parent;
47
- get root() {
48
- return this.#parent?.root || this;
49
- }
50
- #self;
51
- set(name, value, source = "self") {
52
- if (source === "parent") {
53
- console.error("can't set parent state");
54
- return;
55
- }
56
- const current = untracked(this.#self);
57
- const entry = current[name] || {};
58
- if (entry[source] !== value) {
59
- this.#self.set({ ...current, [name]: { ...entry, [source]: value } });
60
- }
61
- // TODO: maybe some option to propagate to root
62
- // const root = this.root
63
- // if (source !== "self" && root !== this) {
64
- // root.set(name, value, source)
65
- // }
66
- }
67
- is(selector = "*") {
68
- return compileSelector(selector)(this.merged());
69
- }
70
- intercept(name, source) {
71
- return (src) => this.wrap(src, name, source);
72
- }
73
- wrap(observable, name, source) {
74
- return new Observable(subscriber => {
75
- this.set(name, true, source);
76
- subscriber.add(() => this.set(name, false, source));
77
- return observable.subscribe(subscriber);
78
- });
79
- }
80
- isInert() {
81
- return this.is(this.inertSelector());
82
- }
83
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: UiState, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
84
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: UiState, isStandalone: true, ngImport: i0 }); }
85
- }
86
- _a = UiState;
87
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: UiState, decorators: [{
88
- type: Directive,
89
- args: [{ standalone: true }]
90
- }] });
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy91aS1zdGF0ZS91aS1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFOUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUlqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFMUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUE7O0FBc0J2RCxNQUFNLE9BQU8sT0FBTztJQURwQjtRQUVhLFlBQU8sR0FBRyxNQUFNLENBQUMsRUFBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQU03RCxVQUFLLEdBQUcsTUFBTSxDQUFpQixFQUFFLENBQUMsQ0FBQTtRQUVsQyxXQUFNLEdBQUcsUUFBUSxDQUFpQixHQUFHLEVBQUU7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQTtZQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDekIsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxNQUFNLE1BQU0sR0FBNEIsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUV2RCxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUMxQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtv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LEVBQUU7WUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBQzVCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFDbkQsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzNDLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUE7SUFDeEMsQ0FBQzs4R0F0RlEsT0FBTztrR0FBUCxPQUFPOzs7MkZBQVAsT0FBTztrQkFEbkIsU0FBUzttQkFBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgRGlyZWN0aXZlLCBpbmplY3QsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBNdXRhYmxlIH0gZnJvbSBcInV0aWxpdHktdHlwZXNcIlxuXG5pbXBvcnQgeyBkZWVwQ2xvbmUgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBjb21waWxlIGFzIGNvbXBpbGVTZWxlY3RvciB9IGZyb20gXCIuL3NlbGVjdG9yXCJcblxuLyoqXG4gKiB7XG4gKiAgYnVzeToge1xuICogICAgICBzZWxmOiB0cnVlLFxuICogICAgICBwYXJlbnQ6IGZhbHNlLFxuICogICAgICBkaXNhYmxlZDogZmFsc2VcbiAqICB9XG4gKiB9XG4gKi9cbmV4cG9ydCB0eXBlIFVpU3RhdGVEZXRhaWxzID0geyByZWFkb25seSBba2V5OiBzdHJpbmddOiBVaVN0YXRlRW50cnkgfVxuXG5leHBvcnQgdHlwZSBVaVN0YXRlRW50cnkgPSB7IHJlYWRvbmx5IFtrZXk6IFVpU3RhdGVTb3VyY2VdOiBib29sZWFuIH1cblxuZXhwb3J0IHR5cGUgVWlTdGF0ZVZhbHVlID0geyByZWFkb25seSBba2V5OiBzdHJpbmddOiBib29sZWFuIH1cblxuZXhwb3J0IHR5cGUgVWlTdGF0ZVNvdXJjZSA9IFwicGFyZW50XCIgfCBcInNlbGZcIiB8IHN0cmluZ1xuXG5leHBvcnQgdHlwZSBVaVN0YXRlU2VsZWN0b3IgPSBzdHJpbmdcblxuQERpcmVjdGl2ZSh7IHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBVaVN0YXRlPE4gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFMgZXh0ZW5kcyBVaVN0YXRlU291cmNlID0gVWlTdGF0ZVNvdXJjZT4ge1xuICAgIHJlYWRvbmx5ICNwYXJlbnQgPSBpbmplY3QoVWlTdGF0ZSwgeyBza2lwU2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSlcblxuICAgIGdldCByb290KCk6IFVpU3RhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFyZW50Py5yb290IHx8IHRoaXNcbiAgICB9XG5cbiAgICByZWFkb25seSAjc2VsZiA9IHNpZ25hbDxVaVN0YXRlRGV0YWlscz4oe30pXG5cbiAgICByZWFkb25seSBtZXJnZWQgPSBjb21wdXRlZDxVaVN0YXRlRGV0YWlscz4oKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLiNwYXJlbnQ/Lm1lcmdlZCgpXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzLiNzZWxmKClcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBNdXRhYmxlPFVpU3RhdGVEZXRhaWxzPiA9IGRlZXBDbG9uZShzZWxmKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SXNUcnVlID0gT2JqZWN0LnZhbHVlcyh2KS5pbmNsdWRlcyh0cnVlKVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2VsZjogXywgLi4ucGFyZW50V2lodG91dFNlbGYgfSA9IHZcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0W2tdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucGFyZW50V2lodG91dFNlbGYsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHRba10sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IHBhcmVudElzVHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tdID0geyAuLi5wYXJlbnRXaWh0b3V0U2VsZiwgcGFyZW50OiBwYXJlbnRJc1RydWUgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGZcbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICByZWFkb25seSB2YWx1ZSA9IGNvbXB1dGVkPFVpU3RhdGVWYWx1ZT4oKCkgPT4ge1xuICAgICAgICBjb25zdCBtZXJnZWQgPSB0aGlzLm1lcmdlZCgpXG4gICAgICAgIGNvbnN0IHJlc3VsdDogTXV0YWJsZTxVaVN0YXRlVmFsdWU+ID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhtZXJnZWQpKSB7XG4gICAgICAgICAgICByZXN1bHRba10gPSBPYmplY3QudmFsdWVzKHYpLmluY2x1ZGVzKHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSlcblxuICAgIHJlYWRvbmx5IGluZXJ0U2VsZWN0b3IgPSBzaWduYWwoXCJidXN5IHx8IGRpc2FibGVkXCIpXG5cbiAgICBzZXQobmFtZTogTiwgdmFsdWU6IGJvb2xlYW4sIHNvdXJjZTogUyA9IFwic2VsZlwiIGFzIFMpIHtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gXCJwYXJlbnRcIikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImNhbid0IHNldCBwYXJlbnQgc3RhdGVcIilcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudCA9IHVudHJhY2tlZCh0aGlzLiNzZWxmKVxuICAgICAgICBjb25zdCBlbnRyeSA9IGN1cnJlbnRbbmFtZV0gfHwge31cblxuICAgICAgICBpZiAoZW50cnlbc291cmNlXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuI3NlbGYuc2V0KHsgLi4uY3VycmVudCwgW25hbWVdOiB7IC4uLmVudHJ5LCBbc291cmNlXTogdmFsdWUgfSB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogbWF5YmUgc29tZSBvcHRpb24gdG8gcHJvcGFnYXRlIHRvIHJvb3RcbiAgICAgICAgLy8gY29uc3Qgcm9vdCA9IHRoaXMucm9vdFxuICAgICAgICAvLyBpZiAoc291cmNlICE9PSBcInNlbGZcIiAmJiByb290ICE9PSB0aGlzKSB7XG4gICAgICAgIC8vICAgICByb290LnNldChuYW1lLCB2YWx1ZSwgc291cmNlKVxuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgaXMoc2VsZWN0b3I6IFVpU3RhdGVTZWxlY3RvciA9IFwiKlwiKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjb21waWxlU2VsZWN0b3Ioc2VsZWN0b3IpKHRoaXMubWVyZ2VkKCkpXG4gICAgfVxuXG4gICAgaW50ZXJjZXB0KG5hbWU6IE4sIHNvdXJjZTogUykge1xuICAgICAgICByZXR1cm4gPFM+KHNyYzogT2JzZXJ2YWJsZTxTPikgPT4gdGhpcy53cmFwKHNyYywgbmFtZSwgc291cmNlKVxuICAgIH1cblxuICAgIHdyYXA8VD4ob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUPiwgbmFtZTogTiwgc291cmNlOiBTKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxUPihzdWJzY3JpYmVyID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0KG5hbWUsIHRydWUsIHNvdXJjZSlcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKCgpID0+IHRoaXMuc2V0KG5hbWUsIGZhbHNlLCBzb3VyY2UpKVxuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgaXNJbmVydCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXModGhpcy5pbmVydFNlbGVjdG9yKCkpXG4gICAgfVxufVxuIl19