@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.
- package/fesm2022/ngutil-aria.mjs +88 -65
- package/fesm2022/ngutil-aria.mjs.map +1 -1
- package/focus/focus-state.directive.d.ts +1 -2
- package/focus/focus.service.d.ts +1 -1
- package/focus/focusable.directive.d.ts +0 -1
- package/package.json +7 -9
- package/ui-state/abstract.d.ts +1 -1
- package/ui-state/dirty.directive.d.ts +9 -0
- package/ui-state/index.d.ts +5 -3
- package/ui-state/progress-state.d.ts +1 -1
- package/esm2022/activity/activity.service.mjs +0 -49
- package/esm2022/activity/index.mjs +0 -2
- package/esm2022/focus/focus-state.directive.mjs +0 -63
- package/esm2022/focus/focus-trap.directive.mjs +0 -25
- package/esm2022/focus/focus.service.mjs +0 -145
- package/esm2022/focus/focusable.directive.mjs +0 -52
- package/esm2022/focus/index.mjs +0 -5
- package/esm2022/gestures/gesture-drag.mjs +0 -81
- package/esm2022/gestures/gesture-event.mjs +0 -44
- package/esm2022/gestures/gesture-longtap.mjs +0 -34
- package/esm2022/gestures/gesture-tap.mjs +0 -37
- package/esm2022/gestures/gesture.mjs +0 -66
- package/esm2022/gestures/gesture.service.mjs +0 -279
- package/esm2022/gestures/index.mjs +0 -7
- package/esm2022/index.mjs +0 -6
- package/esm2022/keystroke/index.mjs +0 -2
- package/esm2022/keystroke/keystroke.service.mjs +0 -92
- package/esm2022/ngutil-aria.mjs +0 -5
- package/esm2022/ui-state/abstract.mjs +0 -41
- package/esm2022/ui-state/busy.directive.mjs +0 -27
- package/esm2022/ui-state/disabled.directive.mjs +0 -28
- package/esm2022/ui-state/index.mjs +0 -25
- package/esm2022/ui-state/progress-state.mjs +0 -141
- package/esm2022/ui-state/readonly.directive.mjs +0 -27
- package/esm2022/ui-state/selector.mjs +0 -308
- 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
|