@ngutil/common 0.0.24 → 0.0.26
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/coerce/element.d.ts +3 -0
- package/esm2022/coerce/bool-attr.mjs +4 -0
- package/esm2022/coerce/element.mjs +8 -0
- package/esm2022/disabled.mjs +18 -3
- package/esm2022/index.mjs +5 -3
- package/esm2022/state-chain.mjs +120 -0
- package/fesm2022/ngutil-common.mjs +146 -5
- package/fesm2022/ngutil-common.mjs.map +1 -1
- package/index.d.ts +4 -2
- package/package.json +1 -1
- package/state-chain.d.ts +24 -0
- package/esm2022/bool-attr.mjs +0 -4
- /package/{bool-attr.d.ts → coerce/bool-attr.d.ts} +0 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export function coerceBoolAttr(value) {
|
|
2
|
+
return value != null && `${value}` !== "false";
|
|
3
|
+
}
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbC1hdHRyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9jb2VyY2UvYm9vbC1hdHRyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBbUI7SUFDOUMsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLEtBQUssT0FBTyxDQUFBO0FBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBCb29sZWFuSW5wdXQgPSBzdHJpbmcgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZFxuXG5leHBvcnQgZnVuY3Rpb24gY29lcmNlQm9vbEF0dHIodmFsdWU6IEJvb2xlYW5JbnB1dCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGAke3ZhbHVlfWAgIT09IFwiZmFsc2VcIlxufVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ElementRef } from "@angular/core";
|
|
2
|
+
export function coerceElement(value) {
|
|
3
|
+
if (value instanceof ElementRef) {
|
|
4
|
+
return value.nativeElement;
|
|
5
|
+
}
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29lcmNlL2VsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUkxQyxNQUFNLFVBQVUsYUFBYSxDQUFJLEtBQXdCO0lBQ3JELElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRSxDQUFDO1FBQzlCLE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQTtJQUM5QixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUE7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmV4cG9ydCB0eXBlIEVsZW1lbnRJbnB1dDxUIGV4dGVuZHMgRWxlbWVudCA9IEhUTUxFbGVtZW50PiA9IFQgfCBFbGVtZW50UmVmPFQ+XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2VyY2VFbGVtZW50PFQ+KHZhbHVlOiBUIHwgRWxlbWVudFJlZjxUPik6IFQge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnRSZWYpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm5hdGl2ZUVsZW1lbnRcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG59XG4iXX0=
|
package/esm2022/disabled.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
var _a;
|
|
2
2
|
import { computed, Directive, effect, inject, input, signal } from "@angular/core";
|
|
3
|
+
import { NgControl } from "@angular/forms";
|
|
3
4
|
import { Busy } from "./busy";
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
|
-
const INPUT = Symbol("INPUT");
|
|
6
6
|
/**
|
|
7
7
|
* @example
|
|
8
8
|
* ```typescript
|
|
@@ -54,10 +54,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
|
|
|
54
54
|
*/
|
|
55
55
|
export class Disabled {
|
|
56
56
|
#state;
|
|
57
|
+
#control;
|
|
57
58
|
constructor() {
|
|
58
59
|
this.#state = inject(DisabledState, { self: true });
|
|
60
|
+
this.#control = inject(NgControl, { self: true, optional: true });
|
|
59
61
|
this.nuDisabled = input(false);
|
|
60
|
-
effect(() => this.#state.set(this.nuDisabled()));
|
|
62
|
+
effect(() => this.#state.set(this.nuDisabled()), { allowSignalWrites: true });
|
|
63
|
+
effect(() => {
|
|
64
|
+
const control = this.#control?.control;
|
|
65
|
+
if (!control) {
|
|
66
|
+
// TODO: retry
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (this.#state.isDisabled()) {
|
|
70
|
+
control.enabled && control.disable();
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
control.disabled && control.enable();
|
|
74
|
+
}
|
|
75
|
+
});
|
|
61
76
|
}
|
|
62
77
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Disabled, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
63
78
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.6", type: Disabled, isStandalone: true, selector: "[nuDisabled]", inputs: { nuDisabled: { classPropertyName: "nuDisabled", publicName: "nuDisabled", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: DisabledState }], ngImport: i0 }); }
|
|
@@ -70,4 +85,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
|
|
|
70
85
|
hostDirectives: [DisabledState]
|
|
71
86
|
}]
|
|
72
87
|
}], ctorParameters: () => [] });
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzYWJsZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2Rpc2FibGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUE7QUFDMUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRTFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUE7O0FBRTdCOzs7Ozs7Ozs7Ozs7R0FZRztBQVFILE1BQU0sT0FBTyxhQUFhO0lBQ2IsT0FBTyxDQUE0RDtJQUNuRSxLQUFLLENBQStDO0lBQ3BELFNBQVMsQ0FBeUI7SUFNM0M7UUFSUyxZQUFPLEdBQUcsTUFBTSxDQUFDLEVBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDbkUsVUFBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ3BELGNBQVMsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUE7UUFFbEMsZUFBVSxHQUFvQixRQUFRLENBQzNDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FDekYsQ0FBQTtRQUdHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQWM7UUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM3QixDQUFDOzhHQWZRLGFBQWE7a0dBQWIsYUFBYTs7OzJGQUFiLGFBQWE7a0JBUHpCLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxZQUFZO29CQUN0QixJQUFJLEVBQUU7d0JBQ0YsaUJBQWlCLEVBQUUsY0FBYztxQkFDcEM7aUJBQ0o7O0FBbUJEOzs7Ozs7O0dBT0c7QUFNSCxNQUFNLE9BQU8sUUFBUTtJQUNSLE1BQU0sQ0FBd0M7SUFDOUMsUUFBUSxDQUFvRDtJQUdyRTtRQUpTLFdBQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDOUMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzVELGVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7UUFHOUIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUM3RSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUE7WUFDdEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNYLGNBQWM7Z0JBQ2QsT0FBTTtZQUNWLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7WUFDeEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFBO1lBQ3hDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7OEdBcEJRLFFBQVE7a0dBQVIsUUFBUSxpT0EvQlIsYUFBYTs7MkZBK0JiLFFBQVE7a0JBTHBCLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxjQUFjO29CQUN4QixjQUFjLEVBQUUsQ0FBQyxhQUFhLENBQUM7aUJBQ2xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIERpcmVjdGl2ZSwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBzaWduYWwsIFNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiXG5cbmltcG9ydCB7IEJ1c3kgfSBmcm9tIFwiLi9idXN5XCJcblxuLyoqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogQENvbXBvbmVudCh7XG4gKiAgIHN0YW5kYWxvbmU6IHRydWUsXG4gKiAgIGhvc3REaXJlY3RpdmVzOiBbRGlzYWJsZWRTdGF0ZV0sXG4gKiAgIHRlbXBsYXRlOiBgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRTdGF0ZS5pc0Rpc2FibGVkKClcIj5TdWJtaXQ8L2J1dHRvbj5gLFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBCdXR0b24ge1xuICogICByZWFkb25seSBkaXNhYmxlZFN0YXRlID0gaW5qZWN0KERpc2FibGVkU3RhdGUpXG4gKiB9XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBleHBvcnRBczogXCJudURpc2FibGVkXCIsXG4gICAgaG9zdDoge1xuICAgICAgICBcIlthdHRyLmRpc2FibGVkXVwiOiBcImlzRGlzYWJsZWQoKVwiXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBEaXNhYmxlZFN0YXRlIHtcbiAgICByZWFkb25seSAjcGFyZW50ID0gaW5qZWN0KERpc2FibGVkU3RhdGUsIHsgc2tpcFNlbGY6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgcmVhZG9ubHkgI2J1c3kgPSBpbmplY3QoQnVzeSwgeyBzZWxmOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KVxuICAgIHJlYWRvbmx5ICNkaXNhYmxlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSlcblxuICAgIHJlYWRvbmx5IGlzRGlzYWJsZWQ6IFNpZ25hbDxib29sZWFuPiA9IGNvbXB1dGVkKFxuICAgICAgICAoKSA9PiAhISh0aGlzLiNwYXJlbnQ/LmlzRGlzYWJsZWQoKSB8fCB0aGlzLiNidXN5Py5pc090aGVyc0J1c3koKSB8fCB0aGlzLiNkaXNhYmxlZCgpKVxuICAgIClcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4gdGhpcy5pc0Rpc2FibGVkKCkpXG4gICAgfVxuXG4gICAgc2V0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuI2Rpc2FibGVkLnNldCh2YWx1ZSlcbiAgICB9XG59XG5cbi8qKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqICAgIDxmb3JtIG51RGlzYWJsZWQgbnVCdXN5PVwic3VibWl0XCI+XG4gKiAgICAgIDxidXR0b24gW251RGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCIgbnVCdXN5PVwic3VibWl0XCI+U3VibWl0PC9idXR0b24+XG4gKiAgICA8L2Zvcm0+XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEaXNhYmxlZF1cIixcbiAgICBob3N0RGlyZWN0aXZlczogW0Rpc2FibGVkU3RhdGVdXG59KVxuZXhwb3J0IGNsYXNzIERpc2FibGVkIHtcbiAgICByZWFkb25seSAjc3RhdGUgPSBpbmplY3QoRGlzYWJsZWRTdGF0ZSwgeyBzZWxmOiB0cnVlIH0pXG4gICAgcmVhZG9ubHkgI2NvbnRyb2wgPSBpbmplY3QoTmdDb250cm9sLCB7IHNlbGY6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgcmVhZG9ubHkgbnVEaXNhYmxlZCA9IGlucHV0KGZhbHNlKVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB0aGlzLiNzdGF0ZS5zZXQodGhpcy5udURpc2FibGVkKCkpLCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy4jY29udHJvbD8uY29udHJvbFxuICAgICAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogcmV0cnlcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuI3N0YXRlLmlzRGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuZW5hYmxlZCAmJiBjb250cm9sLmRpc2FibGUoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLmRpc2FibGVkICYmIGNvbnRyb2wuZW5hYmxlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG5cbi8vIEBEaXJlY3RpdmUoe1xuLy8gICAgIHN0YW5kYWxvbmU6IHRydWUsXG4vLyAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbi8vICAgICBzZWxlY3RvcjogXCJbbnVEaXNhYmxlZF1bZm9ybUNvbnRyb2xdLFtudURpc2FibGVkXVtmb3JtQ29udHJvbE5hbWVdLFtudURpc2FibGVkXVtmb3JtR3JvdXBdLFtudURpc2FibGVkXVtmb3JtR3JvdXBOYW1lXVwiXG4vLyB9KVxuLy8gZXhwb3J0IGNsYXNzIEZvcm1Db250cm9sRGlzYWJsZWQge1xuLy8gICAgIHJlYWRvbmx5ICNkaXNhYmxlZCA9IGluamVjdChEaXNhYmxlZFN0YXRlLCB7IHNlbGY6IHRydWUgfSlcbi8vICAgICByZWFkb25seSAjY29udHJvbCA9IGluamVjdChOZ0NvbnRyb2wsIHsgc2VsZjogdHJ1ZSB9KVxuXG4vLyAgICAgY29uc3RydWN0b3IoKSB7XG4vLyAgICAgICAgIGVmZmVjdCgoKSA9PiB7XG4vLyAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy4jY29udHJvbC5jb250cm9sXG4vLyAgICAgICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbi8vICAgICAgICAgICAgICAgICAvLyBUT0RPOiByZXRyeVxuLy8gICAgICAgICAgICAgICAgIHJldHVyblxuLy8gICAgICAgICAgICAgfVxuXG4vLyAgICAgICAgICAgICBpZiAodGhpcy4jZGlzYWJsZWQuaXNEaXNhYmxlZCgpKSB7XG4vLyAgICAgICAgICAgICAgICAgY29udHJvbC5lbmFibGVkICYmIGNvbnRyb2wuZGlzYWJsZSgpXG4vLyAgICAgICAgICAgICB9IGVsc2Uge1xuLy8gICAgICAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZWQgJiYgY29udHJvbC5lbmFibGUoKVxuLy8gICAgICAgICAgICAgfVxuLy8gICAgICAgICB9KVxuLy8gICAgIH1cbi8vIH1cbiJdfQ==
|
package/esm2022/index.mjs
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
export { Destruct, Destructible } from "./destruct";
|
|
2
2
|
export { DisabledState, Disabled } from "./disabled";
|
|
3
3
|
export { NumberWithUnit, UNIT_REGEX, NUMBER_REGEX } from "./number-with-unit";
|
|
4
|
-
export { coerceBoolAttr } from "./bool-attr";
|
|
5
|
-
export {
|
|
4
|
+
export { coerceBoolAttr } from "./coerce/bool-attr";
|
|
5
|
+
export { coerceElement } from "./coerce/element";
|
|
6
|
+
export { StateChain } from "./state-chain";
|
|
7
|
+
export { rawCancelAnimationFrame, rawClearInterval, rawClearTimeout, rawRequestAnimationFrame, rawSetInterval, rawSetTimeout, __zone_symbol__ } from "./unngzone";
|
|
6
8
|
export { FastDOM } from "./dom";
|
|
7
9
|
export { Busy, BusyTrackerState, BusyTracker } from "./busy";
|
|
8
10
|
export { isPrimitive } from "./types/primitive";
|
|
9
11
|
export { deepClone, deepFreeze, isPlainObject, toSorted } from "./util";
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFlLE1BQU0sWUFBWSxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQXVCLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVsRyxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLG9CQUFvQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0sa0JBQWtCLENBQUE7QUFFOUQsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxlQUFlLENBQUE7QUFFN0QsT0FBTyxFQUNILHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLHdCQUF3QixFQUN4QixjQUFjLEVBQ2QsYUFBYSxFQUNiLGVBQWUsRUFDbEIsTUFBTSxZQUFZLENBQUE7QUFDbkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUMvQixPQUFPLEVBQUUsSUFBSSxFQUE0QyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFPdEcsT0FBTyxFQUF1QixXQUFXLEVBQStCLE1BQU0sbUJBQW1CLENBQUE7QUFFakcsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENvbm5lY3RQcm90b2NvbCB9IGZyb20gXCIuL2Nvbm5lY3QtcHJvdG9jb2xcIlxuZXhwb3J0IHsgRGVzdHJ1Y3QsIERlc3RydWN0aWJsZSwgSURpc3Bvc2FibGUgfSBmcm9tIFwiLi9kZXN0cnVjdFwiXG5leHBvcnQgeyBEaXNhYmxlZFN0YXRlLCBEaXNhYmxlZCB9IGZyb20gXCIuL2Rpc2FibGVkXCJcbmV4cG9ydCB7IE51bWJlcldpdGhVbml0LCBOdW1iZXJXaXRoVW5pdElucHV0LCBVTklUX1JFR0VYLCBOVU1CRVJfUkVHRVggfSBmcm9tIFwiLi9udW1iZXItd2l0aC11bml0XCJcblxuZXhwb3J0IHsgY29lcmNlQm9vbEF0dHIsIEJvb2xlYW5JbnB1dCB9IGZyb20gXCIuL2NvZXJjZS9ib29sLWF0dHJcIlxuZXhwb3J0IHsgY29lcmNlRWxlbWVudCwgRWxlbWVudElucHV0IH0gZnJvbSBcIi4vY29lcmNlL2VsZW1lbnRcIlxuXG5leHBvcnQgeyBTdGF0ZUNoYWluLCBTdGF0ZUNoYWluSGFuZGxlciB9IGZyb20gXCIuL3N0YXRlLWNoYWluXCJcblxuZXhwb3J0IHtcbiAgICByYXdDYW5jZWxBbmltYXRpb25GcmFtZSxcbiAgICByYXdDbGVhckludGVydmFsLFxuICAgIHJhd0NsZWFyVGltZW91dCxcbiAgICByYXdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsXG4gICAgcmF3U2V0SW50ZXJ2YWwsXG4gICAgcmF3U2V0VGltZW91dCxcbiAgICBfX3pvbmVfc3ltYm9sX19cbn0gZnJvbSBcIi4vdW5uZ3pvbmVcIlxuZXhwb3J0IHsgRmFzdERPTSB9IGZyb20gXCIuL2RvbVwiXG5leHBvcnQgeyBCdXN5LCBCdXN5RXZlbnQsIEJ1c3lFdmVudFBhcmFtcywgQnVzeVByb2dyZXNzLCBCdXN5VHJhY2tlclN0YXRlLCBCdXN5VHJhY2tlciB9IGZyb20gXCIuL2J1c3lcIlxuXG5leHBvcnQgeyBDb25jYXQgfSBmcm9tIFwiLi90eXBlcy9jb25jYXRcIlxuZXhwb3J0IHsgRXZhbCwgSWZBbnksIElzQW55LCBJZlR1cGxlLCBJc1R1cGxlLCBUdXBsZUl0ZW1zLCBPYmplY3RLZXksIE1heFJlY3Vyc2lvbiB9IGZyb20gXCIuL3R5cGVzL3V0aWxcIlxuZXhwb3J0IHsgRmxhdHRlbiwgRmxhdHRlbktleXMgfSBmcm9tIFwiLi90eXBlcy9mbGF0dGVuXCJcbmV4cG9ydCB7IE1lcmdlVW5pb24gfSBmcm9tIFwiLi90eXBlcy9tZXJnZS11bmlvblwiXG5leHBvcnQgeyBOdW1iZXJSYW5nZSB9IGZyb20gXCIuL3R5cGVzL251bWJlci1yYW5nZVwiXG5leHBvcnQgeyBQcmltaXRpdmUsIEJ1aWx0aW5zLCBpc1ByaW1pdGl2ZSwgQXNQcmltaXRpdmUsIFRvUHJpbWl0aXZlTWFwIH0gZnJvbSBcIi4vdHlwZXMvcHJpbWl0aXZlXCJcbmV4cG9ydCB7IERlZXBSZWFkb25seSwgUmVhZG9ubHlEYXRlIH0gZnJvbSBcIi4vdHlwZXMvcmVhZG9ubHlcIlxuZXhwb3J0IHsgZGVlcENsb25lLCBkZWVwRnJlZXplLCBpc1BsYWluT2JqZWN0LCB0b1NvcnRlZCB9IGZyb20gXCIuL3V0aWxcIlxuIl19
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { catchError, concat, forkJoin, from, map, Observable, of, ReplaySubject, tap, throwError } from "rxjs";
|
|
2
|
+
export class StopStateChain extends Error {
|
|
3
|
+
}
|
|
4
|
+
export class StateChain {
|
|
5
|
+
#executed;
|
|
6
|
+
#handlers;
|
|
7
|
+
#current;
|
|
8
|
+
constructor(states) {
|
|
9
|
+
this.#executed = [];
|
|
10
|
+
this.#handlers = {};
|
|
11
|
+
this.#current = new ReplaySubject(1);
|
|
12
|
+
this.current$ = this.#current.asObservable();
|
|
13
|
+
this.states = { ...states };
|
|
14
|
+
for (const value of Object.values(states)) {
|
|
15
|
+
if (value.order == null) {
|
|
16
|
+
value.order = "parallel";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
on(state, fn) {
|
|
21
|
+
if (state in this.#handlers) {
|
|
22
|
+
this.#handlers[state].push(fn);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
this.#handlers[state] = [fn];
|
|
26
|
+
}
|
|
27
|
+
return () => {
|
|
28
|
+
const idx = this.#handlers[state].indexOf(fn);
|
|
29
|
+
if (idx > -1) {
|
|
30
|
+
this.#handlers[state].splice(idx, 1);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Run this state changes on other state
|
|
36
|
+
*/
|
|
37
|
+
control(state, remap) {
|
|
38
|
+
const remove = [];
|
|
39
|
+
for (const selfState of Object.keys(this.states)) {
|
|
40
|
+
const otherState = remap?.[selfState] || selfState;
|
|
41
|
+
if (otherState in state.states) {
|
|
42
|
+
remove.push(this.on(selfState, () => state.run([otherState])));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return () => {
|
|
46
|
+
for (const fn of remove) {
|
|
47
|
+
fn();
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
run(states) {
|
|
52
|
+
if (states.length === 0) {
|
|
53
|
+
throw new Error("Missing states");
|
|
54
|
+
}
|
|
55
|
+
const executed = [];
|
|
56
|
+
return concat(...states.map(state => this.#run(state).pipe(tap(s => s && executed.push(s))))).pipe(catchError(err => (err instanceof StopStateChain ? of(executed) : throwError(() => err))));
|
|
57
|
+
}
|
|
58
|
+
#run(state) {
|
|
59
|
+
const options = this.states[state];
|
|
60
|
+
return new Observable(dst => {
|
|
61
|
+
if (this.#executed.includes(state)) {
|
|
62
|
+
dst.next(state);
|
|
63
|
+
dst.complete();
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
this.#executed.push(state);
|
|
67
|
+
this.#current.next(state);
|
|
68
|
+
const handlers = this.#handlers[state];
|
|
69
|
+
if (handlers == null || handlers.length === 0) {
|
|
70
|
+
dst.next(state);
|
|
71
|
+
dst.complete();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const observables = handlers
|
|
75
|
+
.map(handler => {
|
|
76
|
+
const result = handler();
|
|
77
|
+
if (result == null) {
|
|
78
|
+
return of(null);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
return from(result);
|
|
82
|
+
}
|
|
83
|
+
})
|
|
84
|
+
.map(handler => handler.pipe(catchError(err => {
|
|
85
|
+
if (err instanceof StopStateChain) {
|
|
86
|
+
const idx = this.#executed.indexOf(state);
|
|
87
|
+
if (idx > -1) {
|
|
88
|
+
this.#executed.splice(idx, 1);
|
|
89
|
+
}
|
|
90
|
+
dst.error(err);
|
|
91
|
+
dst.complete();
|
|
92
|
+
return of(null);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
return throwError(() => err);
|
|
96
|
+
}
|
|
97
|
+
})));
|
|
98
|
+
if (observables.length === 1) {
|
|
99
|
+
return observables[0].pipe(map(() => state)).subscribe(dst);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
if (options.order === "parallel") {
|
|
103
|
+
return forkJoin(observables)
|
|
104
|
+
.pipe(map(() => state))
|
|
105
|
+
.subscribe(dst);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
return concat(...observables)
|
|
109
|
+
.pipe(map(() => state))
|
|
110
|
+
.subscribe(dst);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
destroy() {
|
|
116
|
+
;
|
|
117
|
+
this.#handlers = null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3N0YXRlLWNoYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFDUixJQUFJLEVBQ0osR0FBRyxFQUNILFVBQVUsRUFFVixFQUFFLEVBQ0YsYUFBYSxFQUNiLEdBQUcsRUFDSCxVQUFVLEVBQ2IsTUFBTSxNQUFNLENBQUE7QUFJYixNQUFNLE9BQU8sY0FBZSxTQUFRLEtBQUs7Q0FBRztBQVc1QyxNQUFNLE9BQU8sVUFBVTtJQUVWLFNBQVMsQ0FBVTtJQUNuQixTQUFTLENBQW1EO0lBRXJFLFFBQVEsQ0FBMEI7SUFHbEMsWUFBWSxNQUFTO1FBTlosY0FBUyxHQUFRLEVBQUUsQ0FBQTtRQUNuQixjQUFTLEdBQWlELEVBQUUsQ0FBQTtRQUVyRSxhQUFRLEdBQUcsSUFBSSxhQUFhLENBQUksQ0FBQyxDQUFDLENBQUE7UUFDekIsYUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUE7UUFHNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUE7UUFFM0IsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDeEMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN0QixLQUFLLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQTtZQUM1QixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxFQUFFLENBQUMsS0FBUSxFQUFFLEVBQXFCO1FBQzlCLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBRSxDQUFDLElBQUksQ0FBQyxFQUFF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Q0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDaEMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUNMLENBQ0osQ0FBQTtZQUVMLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUMvRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUMvQixPQUFPLFFBQVEsQ0FBQyxXQUFXLENBQUM7eUJBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ3RCLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDdkIsQ0FBQztxQkFBTSxDQUFDO29CQUNKLE9BQU8sTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDO3lCQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUN0QixTQUFTLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ3ZCLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsT0FBTztRQUNILENBQUM7UUFBQyxJQUFZLENBQUMsU0FBUyxHQUFHLElBQVcsQ0FBQTtJQUMxQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGNhdGNoRXJyb3IsXG4gICAgY29uY2F0LFxuICAgIGZvcmtKb2luLFxuICAgIGZyb20sXG4gICAgbWFwLFxuICAgIE9ic2VydmFibGUsXG4gICAgT2JzZXJ2YWJsZUlucHV0LFxuICAgIG9mLFxuICAgIFJlcGxheVN1YmplY3QsXG4gICAgdGFwLFxuICAgIHRocm93RXJyb3Jcbn0gZnJvbSBcInJ4anNcIlxuXG5leHBvcnQgdHlwZSBTdGF0ZUNoYWluSGFuZGxlciA9ICgpID0+IE9ic2VydmFibGVJbnB1dDx1bmtub3duPiB8IG51bGwgfCB1bmRlZmluZWQgfCB2b2lkXG5cbmV4cG9ydCBjbGFzcyBTdG9wU3RhdGVDaGFpbiBleHRlbmRzIEVycm9yIHt9XG5cbmV4cG9ydCB0eXBlIFN0YXRlT3B0aW9ucyA9IFJlY29yZDxzdHJpbmcsIHsgb3JkZXI/OiBcInBhcmFsbGVsXCIgfCBcInNlcXVlbnRpYWxcIjsgY2FuY2VsbGFibGU/OiBib29sZWFuIH0+XG5cbmV4cG9ydCB0eXBlIFN0YXRlUmVtYXA8QSwgQj4gPVxuICAgIEEgZXh0ZW5kcyBTdGF0ZUNoYWluPGluZmVyIEFPLCBpbmZlciBBUz5cbiAgICAgICAgPyBCIGV4dGVuZHMgU3RhdGVDaGFpbjxpbmZlciBCTywgaW5mZXIgQlM+XG4gICAgICAgICAgICA/IFBhcnRpYWw8eyBbSyBpbiBBU106IEJTIH0+XG4gICAgICAgICAgICA6IG5ldmVyXG4gICAgICAgIDogbmV2ZXJcblxuZXhwb3J0IGNsYXNzIFN0YXRlQ2hhaW48VCBleHRlbmRzIFN0YXRlT3B0aW9ucywgUyBleHRlbmRzIHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCA9IGtleW9mIFQ+IHtcbiAgICByZWFkb25seSBzdGF0ZXM6IFRcbiAgICByZWFkb25seSAjZXhlY3V0ZWQ6IFNbXSA9IFtdXG4gICAgcmVhZG9ubHkgI2hhbmRsZXJzOiBQYXJ0aWFsPFJlY29yZDxTLCBBcnJheTxTdGF0ZUNoYWluSGFuZGxlcj4+PiA9IHt9XG5cbiAgICAjY3VycmVudCA9IG5ldyBSZXBsYXlTdWJqZWN0PFM+KDEpXG4gICAgcmVhZG9ubHkgY3VycmVudCQgPSB0aGlzLiNjdXJyZW50LmFzT2JzZXJ2YWJsZSgpXG5cbiAgICBjb25zdHJ1Y3RvcihzdGF0ZXM6IFQpIHtcbiAgICAgICAgdGhpcy5zdGF0ZXMgPSB7IC4uLnN0YXRlcyB9XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBPYmplY3QudmFsdWVzKHN0YXRlcykpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5vcmRlciA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUub3JkZXIgPSBcInBhcmFsbGVsXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uKHN0YXRlOiBTLCBmbjogU3RhdGVDaGFpbkhhbmRsZXIpIHtcbiAgICAgICAgaWYgKHN0YXRlIGluIHRoaXMuI2hhbmRsZXJzKSB7XG4gICAgICAgICAgICB0aGlzLiNoYW5kbGVyc1tzdGF0ZV0hLnB1c2goZm4pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNoYW5kbGVyc1tzdGF0ZV0gPSBbZm5dXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gdGhpcy4jaGFuZGxlcnNbc3RhdGVdIS5pbmRleE9mKGZuKVxuICAgICAgICAgICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jaGFuZGxlcnNbc3RhdGVdIS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVuIHRoaXMgc3RhdGUgY2hhbmdlcyBvbiBvdGhlciBzdGF0ZVxuICAgICAqL1xuICAgIGNvbnRyb2w8VCBleHRlbmRzIFN0YXRlQ2hhaW48YW55LCBhbnk+PihzdGF0ZTogVCwgcmVtYXA/OiBTdGF0ZVJlbWFwPHRoaXMsIFQ+KSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZTogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXVxuICAgICAgICBmb3IgKGNvbnN0IHNlbGZTdGF0ZSBvZiBPYmplY3Qua2V5cyh0aGlzLnN0YXRlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IG90aGVyU3RhdGUgPSAocmVtYXAgYXMgdW5rbm93biBhcyBhbnkpPy5bc2VsZlN0YXRlXSB8fCBzZWxmU3RhdGVcbiAgICAgICAgICAgIGlmIChvdGhlclN0YXRlIGluIHN0YXRlLnN0YXRlcykge1xuICAgICAgICAgICAgICAgIHJlbW92ZS5wdXNoKHRoaXMub24oc2VsZlN0YXRlIGFzIGFueSwgKCkgPT4gc3RhdGUucnVuKFtvdGhlclN0YXRlXSkpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZm4gb2YgcmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgZm4oKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcnVuKHN0YXRlczogU1tdKSB7XG4gICAgICAgIGlmIChzdGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHN0YXRlc1wiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhlY3V0ZWQ6IFNbXSA9IFtdXG4gICAgICAgIHJldHVybiBjb25jYXQoLi4uc3RhdGVzLm1hcChzdGF0ZSA9PiB0aGlzLiNydW4oc3RhdGUpLnBpcGUodGFwKHMgPT4gcyAmJiBleGVjdXRlZC5wdXNoKHMpKSkpKS5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4gKGVyciBpbnN0YW5jZW9mIFN0b3BTdGF0ZUNoYWluID8gb2YoZXhlY3V0ZWQpIDogdGhyb3dFcnJvcigoKSA9PiBlcnIpKSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgICNydW4oc3RhdGU6IFMpOiBPYnNlcnZhYmxlPFMgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnN0YXRlc1tzdGF0ZSBhcyBhbnldXG5cbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGRzdCA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy4jZXhlY3V0ZWQuaW5jbHVkZXMoc3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgZHN0Lm5leHQoc3RhdGUpXG4gICAgICAgICAgICAgICAgZHN0LmNvbXBsZXRlKClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2V4ZWN1dGVkLnB1c2goc3RhdGUpXG4gICAgICAgICAgICB0aGlzLiNjdXJyZW50Lm5leHQoc3RhdGUpXG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy4jaGFuZGxlcnNbc3RhdGVdXG4gICAgICAgICAgICBpZiAoaGFuZGxlcnMgPT0gbnVsbCB8fCBoYW5kbGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBkc3QubmV4dChzdGF0ZSlcbiAgICAgICAgICAgICAgICBkc3QuY29tcGxldGUoKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IGhhbmRsZXJzXG4gICAgICAgICAgICAgICAgLm1hcChoYW5kbGVyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlcigpXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJvbShyZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5tYXAoaGFuZGxlciA9PlxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFN0b3BTdGF0ZUNoYWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuI2V4ZWN1dGVkLmluZGV4T2Yoc3RhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZXhlY3V0ZWQuc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QuZXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QuY29tcGxldGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKG9ic2VydmFibGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlc1swXS5waXBlKG1hcCgoKSA9PiBzdGF0ZSkpLnN1YnNjcmliZShkc3QpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9yZGVyID09PSBcInBhcmFsbGVsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKG9ic2VydmFibGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwKCgpID0+IHN0YXRlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoZHN0KVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25jYXQoLi4ub2JzZXJ2YWJsZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShtYXAoKCkgPT4gc3RhdGUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShkc3QpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIDsodGhpcyBhcyBhbnkpLiNoYW5kbGVycyA9IG51bGwgYXMgYW55XG4gICAgfVxufVxuIl19
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Directive, inject, DestroyRef, computed, isSignal, Injectable, Inject, SkipSelf, Optional, input, signal, effect } from '@angular/core';
|
|
3
|
-
import { Subject, share, take, takeUntil, BehaviorSubject, scan, tap, map, shareReplay, Observable, finalize, isObservable, throwError, combineLatest, filter, switchMap } from 'rxjs';
|
|
2
|
+
import { Directive, inject, DestroyRef, computed, isSignal, Injectable, Inject, SkipSelf, Optional, input, signal, effect, ElementRef } from '@angular/core';
|
|
3
|
+
import { Subject, share, take, takeUntil, BehaviorSubject, scan, tap, map, shareReplay, Observable, finalize, isObservable, throwError, combineLatest, filter, switchMap, ReplaySubject, concat, catchError, of, from, forkJoin } from 'rxjs';
|
|
4
|
+
import { NgControl } from '@angular/forms';
|
|
4
5
|
import { toSignal, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
|
|
5
6
|
import { isEqual, cloneDeep, isPlainObject as isPlainObject$1 } from 'lodash';
|
|
6
7
|
export { isPrimitive } from 'utility-types';
|
|
@@ -332,7 +333,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
|
|
|
332
333
|
}] });
|
|
333
334
|
|
|
334
335
|
var _a;
|
|
335
|
-
const INPUT = Symbol("INPUT");
|
|
336
336
|
/**
|
|
337
337
|
* @example
|
|
338
338
|
* ```typescript
|
|
@@ -384,10 +384,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
|
|
|
384
384
|
*/
|
|
385
385
|
class Disabled {
|
|
386
386
|
#state;
|
|
387
|
+
#control;
|
|
387
388
|
constructor() {
|
|
388
389
|
this.#state = inject(DisabledState, { self: true });
|
|
390
|
+
this.#control = inject(NgControl, { self: true, optional: true });
|
|
389
391
|
this.nuDisabled = input(false);
|
|
390
|
-
effect(() => this.#state.set(this.nuDisabled()));
|
|
392
|
+
effect(() => this.#state.set(this.nuDisabled()), { allowSignalWrites: true });
|
|
393
|
+
effect(() => {
|
|
394
|
+
const control = this.#control?.control;
|
|
395
|
+
if (!control) {
|
|
396
|
+
// TODO: retry
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
if (this.#state.isDisabled()) {
|
|
400
|
+
control.enabled && control.disable();
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
control.disabled && control.enable();
|
|
404
|
+
}
|
|
405
|
+
});
|
|
391
406
|
}
|
|
392
407
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Disabled, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
393
408
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.6", type: Disabled, isStandalone: true, selector: "[nuDisabled]", inputs: { nuDisabled: { classPropertyName: "nuDisabled", publicName: "nuDisabled", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: DisabledState }], ngImport: i0 }); }
|
|
@@ -442,6 +457,132 @@ function coerceBoolAttr(value) {
|
|
|
442
457
|
return value != null && `${value}` !== "false";
|
|
443
458
|
}
|
|
444
459
|
|
|
460
|
+
function coerceElement(value) {
|
|
461
|
+
if (value instanceof ElementRef) {
|
|
462
|
+
return value.nativeElement;
|
|
463
|
+
}
|
|
464
|
+
return value;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
class StopStateChain extends Error {
|
|
468
|
+
}
|
|
469
|
+
class StateChain {
|
|
470
|
+
#executed;
|
|
471
|
+
#handlers;
|
|
472
|
+
#current;
|
|
473
|
+
constructor(states) {
|
|
474
|
+
this.#executed = [];
|
|
475
|
+
this.#handlers = {};
|
|
476
|
+
this.#current = new ReplaySubject(1);
|
|
477
|
+
this.current$ = this.#current.asObservable();
|
|
478
|
+
this.states = { ...states };
|
|
479
|
+
for (const value of Object.values(states)) {
|
|
480
|
+
if (value.order == null) {
|
|
481
|
+
value.order = "parallel";
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
on(state, fn) {
|
|
486
|
+
if (state in this.#handlers) {
|
|
487
|
+
this.#handlers[state].push(fn);
|
|
488
|
+
}
|
|
489
|
+
else {
|
|
490
|
+
this.#handlers[state] = [fn];
|
|
491
|
+
}
|
|
492
|
+
return () => {
|
|
493
|
+
const idx = this.#handlers[state].indexOf(fn);
|
|
494
|
+
if (idx > -1) {
|
|
495
|
+
this.#handlers[state].splice(idx, 1);
|
|
496
|
+
}
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* Run this state changes on other state
|
|
501
|
+
*/
|
|
502
|
+
control(state, remap) {
|
|
503
|
+
const remove = [];
|
|
504
|
+
for (const selfState of Object.keys(this.states)) {
|
|
505
|
+
const otherState = remap?.[selfState] || selfState;
|
|
506
|
+
if (otherState in state.states) {
|
|
507
|
+
remove.push(this.on(selfState, () => state.run([otherState])));
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
return () => {
|
|
511
|
+
for (const fn of remove) {
|
|
512
|
+
fn();
|
|
513
|
+
}
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
run(states) {
|
|
517
|
+
if (states.length === 0) {
|
|
518
|
+
throw new Error("Missing states");
|
|
519
|
+
}
|
|
520
|
+
const executed = [];
|
|
521
|
+
return concat(...states.map(state => this.#run(state).pipe(tap(s => s && executed.push(s))))).pipe(catchError(err => (err instanceof StopStateChain ? of(executed) : throwError(() => err))));
|
|
522
|
+
}
|
|
523
|
+
#run(state) {
|
|
524
|
+
const options = this.states[state];
|
|
525
|
+
return new Observable(dst => {
|
|
526
|
+
if (this.#executed.includes(state)) {
|
|
527
|
+
dst.next(state);
|
|
528
|
+
dst.complete();
|
|
529
|
+
return;
|
|
530
|
+
}
|
|
531
|
+
this.#executed.push(state);
|
|
532
|
+
this.#current.next(state);
|
|
533
|
+
const handlers = this.#handlers[state];
|
|
534
|
+
if (handlers == null || handlers.length === 0) {
|
|
535
|
+
dst.next(state);
|
|
536
|
+
dst.complete();
|
|
537
|
+
return;
|
|
538
|
+
}
|
|
539
|
+
const observables = handlers
|
|
540
|
+
.map(handler => {
|
|
541
|
+
const result = handler();
|
|
542
|
+
if (result == null) {
|
|
543
|
+
return of(null);
|
|
544
|
+
}
|
|
545
|
+
else {
|
|
546
|
+
return from(result);
|
|
547
|
+
}
|
|
548
|
+
})
|
|
549
|
+
.map(handler => handler.pipe(catchError(err => {
|
|
550
|
+
if (err instanceof StopStateChain) {
|
|
551
|
+
const idx = this.#executed.indexOf(state);
|
|
552
|
+
if (idx > -1) {
|
|
553
|
+
this.#executed.splice(idx, 1);
|
|
554
|
+
}
|
|
555
|
+
dst.error(err);
|
|
556
|
+
dst.complete();
|
|
557
|
+
return of(null);
|
|
558
|
+
}
|
|
559
|
+
else {
|
|
560
|
+
return throwError(() => err);
|
|
561
|
+
}
|
|
562
|
+
})));
|
|
563
|
+
if (observables.length === 1) {
|
|
564
|
+
return observables[0].pipe(map(() => state)).subscribe(dst);
|
|
565
|
+
}
|
|
566
|
+
else {
|
|
567
|
+
if (options.order === "parallel") {
|
|
568
|
+
return forkJoin(observables)
|
|
569
|
+
.pipe(map(() => state))
|
|
570
|
+
.subscribe(dst);
|
|
571
|
+
}
|
|
572
|
+
else {
|
|
573
|
+
return concat(...observables)
|
|
574
|
+
.pipe(map(() => state))
|
|
575
|
+
.subscribe(dst);
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
destroy() {
|
|
581
|
+
;
|
|
582
|
+
this.#handlers = null;
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
|
|
445
586
|
const Zone = window.Zone;
|
|
446
587
|
function __zone_symbol__(val) {
|
|
447
588
|
const symbol = typeof Zone !== "undefined" && Zone.__symbol__
|
|
@@ -581,5 +722,5 @@ function toSorted(items, fn) {
|
|
|
581
722
|
* Generated bundle index. Do not edit.
|
|
582
723
|
*/
|
|
583
724
|
|
|
584
|
-
export { Busy, BusyTracker, BusyTrackerState, Destruct, Destructible, Disabled, DisabledState, FastDOM, NUMBER_REGEX, NumberWithUnit, UNIT_REGEX, coerceBoolAttr, deepClone, deepFreeze, isPlainObject, rawCancelAnimationFrame, rawClearInterval, rawClearTimeout, rawRequestAnimationFrame, rawSetInterval, rawSetTimeout, toSorted };
|
|
725
|
+
export { Busy, BusyTracker, BusyTrackerState, Destruct, Destructible, Disabled, DisabledState, FastDOM, NUMBER_REGEX, NumberWithUnit, StateChain, UNIT_REGEX, __zone_symbol__, coerceBoolAttr, coerceElement, deepClone, deepFreeze, isPlainObject, rawCancelAnimationFrame, rawClearInterval, rawClearTimeout, rawRequestAnimationFrame, rawSetInterval, rawSetTimeout, toSorted };
|
|
585
726
|
//# sourceMappingURL=ngutil-common.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngutil-common.mjs","sources":["../../../../packages/common/src/destruct.ts","../../../../packages/common/src/busy.ts","../../../../packages/common/src/disabled.ts","../../../../packages/common/src/number-with-unit.ts","../../../../packages/common/src/bool-attr.ts","../../../../packages/common/src/unngzone.ts","../../../../packages/common/src/dom.ts","../../../../packages/common/src/util.ts","../../../../packages/common/src/ngutil-common.ts"],"sourcesContent":["import { Directive, OnDestroy } from \"@angular/core\"\n\nimport { Observable, share, Subject, take, takeUntil } from \"rxjs\"\n\nexport interface IDisposable {\n dispose(): void\n}\n\nexport class Destruct {\n readonly #on = new Subject<void>()\n readonly on = this.#on.pipe(share())\n\n constructor(fn?: () => void) {\n if (fn != null) {\n this.any(fn)\n }\n }\n get done(): boolean {\n return this.#on.closed\n }\n\n sub<T>(o: Observable<T>): Observable<T> {\n if (this.done) {\n return o.pipe(take(0))\n } else {\n return o.pipe(takeUntil(this.on))\n }\n }\n\n disposable<T extends IDisposable>(d: T): T {\n if (this.done) {\n d.dispose()\n } else {\n this.on.subscribe(d.dispose.bind(d))\n }\n\n return d\n }\n\n node<T extends Node>(el: T): T {\n const remove = () => {\n const parent = el.parentNode\n if (parent) {\n parent.removeChild(el)\n }\n }\n if (this.done) {\n remove()\n } else {\n this.on.subscribe(remove)\n }\n\n return el\n }\n\n any(f: () => void): void {\n if (this.done) {\n f()\n } else {\n this.on.subscribe(f)\n }\n }\n\n run() {\n if (!this.done) {\n this.#on.next()\n this.#on.complete()\n }\n }\n}\n\n@Directive()\nexport abstract class Destructible implements OnDestroy, IDisposable {\n /** @ignore */\n readonly d = new Destruct()\n\n /** @ignore */\n ngOnDestroy() {\n this.d.run()\n delete (this as any).d\n }\n\n /** @ignore */\n dispose() {\n this.ngOnDestroy()\n }\n}\n","import {\n computed,\n DestroyRef,\n Directive,\n inject,\n Inject,\n Injectable,\n input,\n InputSignal,\n isSignal,\n Optional,\n Signal,\n SkipSelf\n} from \"@angular/core\"\nimport { takeUntilDestroyed, toObservable, toSignal } from \"@angular/core/rxjs-interop\"\n\nimport {\n BehaviorSubject,\n combineLatest,\n filter,\n finalize,\n isObservable,\n map,\n Observable,\n scan,\n shareReplay,\n switchMap,\n tap,\n throwError\n} from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { ConnectProtocol } from \"./connect-protocol\"\n\nexport type BusyProgress = { total: number; current: number; message?: string }\nexport type BusyEventParams = { busy?: boolean; progress?: BusyProgress }\nexport type BusyEvent = { name: string } & BusyEventParams\n\nexport type BusyConnectable = Observable<boolean | BusyEventParams> | BusyTracker<any> | Signal<boolean>\n\nexport class BusyTrackerState<T extends string> implements ConnectProtocol {\n readonly #events = new BehaviorSubject<BusyEvent | null>(null)\n\n #data: { [key: string]: BusyEventParams } = {}\n\n readonly current$ = this.#events.pipe(\n scan((state, current) => {\n if (current == null) {\n return state\n }\n\n if (current.busy == null) {\n delete state[current.name]\n } else {\n state[current.name] = { busy: current.busy, progress: current.progress }\n }\n return state\n }, {} as any),\n tap(state => (this.#data = state)),\n map(() => this),\n shareReplay(1)\n )\n\n get isBusy(): boolean {\n return Object.values(this.#data).some(v => v.busy)\n }\n\n get progress(): BusyProgress | undefined {\n let total = 0\n let current = 0\n const messages = []\n\n for (const v of Object.values(this.#data)) {\n if (v.progress) {\n total += v.progress.total\n current += v.progress.current\n if (v.progress.message) {\n messages.push(v.progress.message)\n }\n }\n }\n\n if (total !== 0 && current !== 0) {\n return { total, current, message: messages.length > 0 ? messages.join(\"\\n\") : undefined }\n }\n\n return undefined\n }\n\n is(name: T): boolean {\n return this.#data[name]?.busy === true\n }\n\n has(name: T): boolean {\n return this.#data[name] != null\n }\n\n set(name: T, busy: boolean | undefined, progress?: BusyProgress) {\n const current = this.#data[name]\n if (current == null || current.busy !== busy || !isEqual(current.progress, progress)) {\n this.#events.next({ name, busy, progress })\n }\n }\n\n get(name: T): BusyEventParams | undefined {\n return this.#data[name]\n }\n\n keys() {\n return Object.keys(this.#data)\n }\n\n entries() {\n return Object.entries(this.#data)\n }\n\n connect(o: Observable<typeof this> | typeof this, prefix?: string): Observable<unknown> {\n if (o instanceof BusyTrackerState) {\n return this.connect(o.current$, prefix)\n } else {\n return new Observable(() => {\n const otherKeys: string[] = []\n\n const sub = o.subscribe(otherState => {\n for (const [k, v] of otherState.entries()) {\n const key = prefix ? `${prefix}-${k}` : k\n if (!otherKeys.includes(key)) {\n otherKeys.push(key)\n }\n this.set(key as T, v.busy, v.progress)\n }\n })\n\n return () => {\n sub.unsubscribe()\n for (const k of otherKeys) {\n this.set(k as T, undefined, undefined)\n }\n }\n })\n }\n }\n}\n\n/**\n * ```ts\n * @Component({\n * provides: [BusyTracker],\n * template: `\n * <spinner *ngIf=\"busy.is('reload') | async\">\n * <spinner *ngIf=\"busy.any | async\">\n * <button nuBusy=\"reload\"></button>\n * `\n * })\n * export class Grid {\n * readonly busy = inject(BusyTracker<\"create\" | \"reload\" | \"update\" | \"delete\">)\n * }\n * ```\n */\n@Injectable()\nexport class BusyTracker<T extends string> implements ConnectProtocol {\n private readonly destroyRef = inject(DestroyRef)\n\n private readonly _state = this.parent\n ? (this.parent as unknown as { _state: BusyTrackerState<T> })._state\n : new BusyTrackerState()\n\n readonly state$ = this._state.current$\n\n readonly state: Signal<BusyTrackerState<T>> = toSignal(this.state$, { requireSync: true })\n\n readonly any = computed(() => this.state().isBusy)\n\n readonly progress = computed(() => this.state().progress)\n\n constructor(@Inject(BusyTracker) @SkipSelf() @Optional() private readonly parent?: BusyTracker<any>) {}\n\n init(name: T, busy: boolean, progress?: BusyProgress) {\n const state = this.state()\n if (!state.has(name)) {\n this.set(name, busy, progress)\n }\n }\n\n set(name: T, busy: boolean, progress?: BusyProgress) {\n this._state.set(name, busy, progress)\n }\n\n is(name: T): Observable<boolean> {\n return this.state$.pipe(map(state => state.is(name)))\n }\n\n watch(name: T): Observable<BusyEventParams | undefined> {\n return this.state$.pipe(map(state => state.get(name)))\n }\n\n /**\n * ```ts\n * observable.pipe(this.busy.rx(\"save\"))\n * ```\n */\n rx(name: T) {\n return <S>(src: Observable<S>) =>\n src.pipe(\n tap(() => this.set(name, true)),\n finalize(() => this.set(name, false))\n )\n }\n\n connect(value: BusyConnectable, name?: T): Observable<unknown> {\n if (isObservable(value)) {\n if (name == null) {\n return throwError(() => new Error(\"Missing `name` param\"))\n }\n\n return new Observable(() => {\n const sub = value.subscribe(busyValue => {\n if (typeof busyValue === \"boolean\") {\n this.set(name as T, busyValue)\n } else {\n this.set(name as T, !!busyValue.busy, busyValue.progress)\n }\n })\n return sub.unsubscribe.bind(sub)\n }).pipe(takeUntilDestroyed(this.destroyRef))\n } else if (value instanceof BusyTracker) {\n return this._state.connect(value.state$, name).pipe(takeUntilDestroyed(this.destroyRef))\n } else if (isSignal(value)) {\n return this.connect(toObservable(value), name)\n }\n return throwError(() => new Error(\"Unsupported Busy source\"))\n }\n}\n\n// TODO: BusyState directive\n\n/**\n * ```ts\n * @Component({\n * template: `\n * <button nuBusy=\"save\">SAVE</button>\n * <progress nuBusy=\"fileUpload\">\n * <progress nuBusy=\"*\">\n * `\n * })\n * ```\n */\n@Directive({\n standalone: true,\n selector: \"[nuBusy]\",\n exportAs: \"nuBusy\"\n})\nexport class Busy<T extends string> implements ConnectProtocol {\n readonly tracker: BusyTracker<T> = inject(BusyTracker, { skipSelf: true })\n\n readonly name: InputSignal<T> = input.required<T>({ alias: \"nuBusy\" })\n readonly #name = toObservable(this.name)\n\n readonly state$ = combineLatest({ name: this.#name, state: this.tracker.state$ }).pipe(\n map(({ name, state }) => {\n if (name === \"*\") {\n const isBusy = state.isBusy\n return {\n isBusy: isBusy,\n isOthersBusy: isBusy,\n progress: state.progress\n }\n }\n\n const self = state.get(name)\n if (self) {\n const isBusy = self.busy === true\n return {\n isBusy: isBusy,\n isOthersBusy: state.isBusy && !isBusy,\n progress: self.progress\n }\n } else {\n return {\n isBusy: false,\n isOthersBusy: state.isBusy,\n progress: undefined\n }\n }\n }),\n shareReplay(1)\n )\n\n readonly isBusy$ = this.state$.pipe(\n map(v => v.isBusy),\n shareReplay(1)\n )\n readonly isBusy = toSignal(this.isBusy$, { rejectErrors: true })\n\n readonly isOthersBusy$ = this.state$.pipe(\n map(v => v.isOthersBusy),\n shareReplay(1)\n )\n readonly isOthersBusy = toSignal(this.isOthersBusy$, { rejectErrors: true })\n\n readonly progress$ = this.state$.pipe(\n map(v => v.progress),\n shareReplay(1)\n )\n readonly progress = toSignal(this.progress$, { rejectErrors: true })\n\n connect(value: BusyConnectable) {\n return new Observable(() => {\n const tsub = this.#name\n .pipe(\n filter(name => name !== \"*\"),\n switchMap(name => this.tracker.connect(value, name))\n )\n .subscribe()\n return tsub.unsubscribe.bind(tsub)\n })\n }\n}\n","import { computed, Directive, effect, inject, input, signal, Signal } from \"@angular/core\"\n\nimport { Busy } from \"./busy\"\n\nconst INPUT = Symbol(\"INPUT\")\n\n/**\n * @example\n * ```typescript\n * @Component({\n * standalone: true,\n * hostDirectives: [DisabledState],\n * template: `<button [disabled]=\"disabledState.isDisabled()\">Submit</button>`,\n * })\n * export class Button {\n * readonly disabledState = inject(DisabledState)\n * }\n * ```\n */\n@Directive({\n standalone: true,\n exportAs: \"nuDisabled\",\n host: {\n \"[attr.disabled]\": \"isDisabled()\"\n }\n})\nexport class DisabledState {\n readonly #parent = inject(DisabledState, { skipSelf: true, optional: true })\n readonly #busy = inject(Busy, { self: true, optional: true })\n readonly #disabled = signal<boolean>(false)\n\n readonly isDisabled: Signal<boolean> = computed(\n () => !!(this.#parent?.isDisabled() || this.#busy?.isOthersBusy() || this.#disabled())\n )\n\n constructor() {\n effect(() => this.isDisabled())\n }\n\n set(value: boolean) {\n this.#disabled.set(value)\n }\n}\n\n/**\n * @example\n * ```html\n * <form nuDisabled nuBusy=\"submit\">\n * <button [nuDisabled]=\"form.invalid\" nuBusy=\"submit\">Submit</button>\n * </form>\n * ```\n */\n@Directive({\n standalone: true,\n selector: \"[nuDisabled]\",\n hostDirectives: [DisabledState]\n})\nexport class Disabled {\n readonly #state = inject(DisabledState, { self: true })\n readonly nuDisabled = input(false)\n\n constructor() {\n effect(() => this.#state.set(this.nuDisabled()))\n }\n}\n","export type NumberWithUnitInput = number | string | NumberWithUnit\n\nconst specials = [\"auto\", \"inherit\"]\n\nexport const UNIT_REGEX = \"v[h|w|min|max]|p[c|t|x]|[re|e|c|m]m|[l|c]h|%|in|Q|ex|m?s\"\nexport const NUMBER_REGEX = \"[+-]?(?:\\\\d*\\\\.\\\\d+|\\\\d+\\\\.\\\\d*|\\\\d+)\"\n\nconst regex = new RegExp(`^(${NUMBER_REGEX})\\\\s*(${UNIT_REGEX})?$`)\n\nexport class NumberWithUnit {\n static coerce(value: any, defaultUnit?: string) {\n if (specials.includes(value)) {\n return new NumberWithUnit(NaN, value)\n } else if (typeof value === \"string\") {\n const match = value.match(regex)\n if (match) {\n return new NumberWithUnit(Number(match[1]), match[2] || defaultUnit)\n }\n } else if (typeof value === \"number\") {\n return new NumberWithUnit(value, defaultUnit)\n }\n\n throw new Error(`Not implemented number with unit: ${value}`)\n }\n\n constructor(\n public readonly value: number,\n public readonly unit?: string\n ) {}\n\n toString() {\n if (isNaN(this.value)) {\n return this.unit\n } else if (this.unit != null) {\n return `${this.value}${this.unit}`\n } else {\n return `${this.value}`\n }\n }\n}\n","export type BooleanInput = string | boolean | null | undefined\n\nexport function coerceBoolAttr(value: BooleanInput): boolean {\n return value != null && `${value}` !== \"false\"\n}\n","export const Zone = (window as any).Zone\n\nexport function __zone_symbol__<T extends string>(val: T): T {\n const symbol =\n typeof Zone !== \"undefined\" && (Zone as any).__symbol__\n ? (Zone as any).__symbol__(val)\n : `__zone_symbol__${val}`\n return typeof window[symbol] !== \"undefined\" ? symbol : val\n}\n\nexport const rawSetTimeout = window[__zone_symbol__(\"setTimeout\")]\nexport const rawClearTimeout = window[__zone_symbol__(\"clearTimeout\")]\nexport const rawSetInterval = window[__zone_symbol__(\"setInterval\")]\nexport const rawClearInterval = window[__zone_symbol__(\"clearInterval\")]\nexport const rawRequestAnimationFrame = window[__zone_symbol__(\"requestAnimationFrame\")]\nexport const rawCancelAnimationFrame = window[__zone_symbol__(\"cancelAnimationFrame\")]\n","import { rawRequestAnimationFrame } from \"./unngzone\"\n\ntype FastDomHandler = () => void\n\nclass _FastDOM {\n #rafId: any\n #mutate: Array<FastDomHandler> = []\n #measure: Array<FastDomHandler> = []\n\n public mutate(handler: FastDomHandler) {\n this.#mutate.push(handler)\n this._schedule()\n }\n\n public mutateNext(handler: FastDomHandler) {\n this.#mutate.push(() => {\n this.#mutate.push(handler)\n })\n this._schedule()\n }\n\n public measure(handler: FastDomHandler) {\n this.#measure.push(handler)\n this._schedule()\n }\n\n public setStyle(el: HTMLElement, style: { [key: string]: any }, chain?: FastDomHandler) {\n this.mutate(() => {\n for (const [k, v] of Object.entries(style)) {\n if (v == null) {\n el.style.removeProperty(k)\n } else {\n el.style.setProperty(k, v)\n }\n }\n\n chain && chain()\n })\n }\n\n public setAttributes(el: HTMLElement, attrs: { [key: string]: any }, chain?: FastDomHandler) {\n this.mutate(() => {\n for (const [k, v] of Object.entries(attrs)) {\n if (v == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, v)\n }\n }\n\n chain && chain()\n })\n }\n\n private _schedule() {\n if (!this.#rafId) {\n this.#rafId = rawRequestAnimationFrame(this._apply.bind(this))\n }\n }\n\n private _apply() {\n this.#rafId = null\n\n const measure = this.#measure.slice()\n const mutate = this.#mutate.slice()\n this.#measure.length = 0\n this.#mutate.length = 0\n\n runQ(measure)\n runQ(mutate)\n\n if (this.#measure.length || this.#mutate.length) {\n this._schedule()\n }\n }\n}\n\nfunction runQ(items: FastDomHandler[]) {\n let item: FastDomHandler\n while ((item = items.shift()!)) {\n item()\n }\n}\n\nexport const FastDOM = new _FastDOM()\n","import { isPlainObject as _isPlainObject, cloneDeep } from \"lodash\"\n\nimport { DeepReadonly } from \"./types/readonly\"\n\n// export { deepFreeze }\n\nexport const deepClone: <T>(obj: T) => T = typeof structuredClone === \"function\" ? structuredClone : cloneDeep\n// export const deepFreeze: <T>(obj: T) => DeepReadonly<T> = o => Object.freeze(o) as any\nexport const isPlainObject: (arg: any) => arg is { [key: string]: any } = _isPlainObject as any\n\nexport function deepFreeze<T>(obj: T): DeepReadonly<T> {\n if (obj == null) {\n return obj as any\n }\n\n if (obj instanceof Map) {\n obj.clear =\n obj.delete =\n obj.set =\n function () {\n throw new Error(\"map is read-only\")\n }\n } else if (obj instanceof Set) {\n obj.add =\n obj.clear =\n obj.delete =\n function () {\n throw new Error(\"set is read-only\")\n }\n }\n\n // Freeze self\n Object.freeze(obj)\n\n Object.getOwnPropertyNames(obj).forEach(name => {\n const prop = (obj as any)[name]\n const type = typeof prop\n\n // Freeze prop if it is an object or function and also not already frozen\n if ((type === \"object\" || type === \"function\") && !Object.isFrozen(prop)) {\n deepFreeze(prop)\n }\n })\n\n return obj as any\n}\n\n/**\n * @example\n * ```ts\n * toSorted([{id: 1}, {id: 2}, {id: 3}], sortBy([{id: \"desc\"}]))\n * ```\n */\nexport function toSorted<T>(items: readonly T[], fn: (a: T, b: T) => number): T[] {\n if (typeof (items as any).toSorted === \"function\") {\n return (items as any).toSorted(fn)\n } else {\n return items.slice(0).sort(fn)\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_isPlainObject"],"mappings":";;;;;;;MAQa,QAAQ,CAAA;AACR,IAAA,GAAG,CAAsB;AAGlC,IAAA,WAAA,CAAY,EAAe,EAAA;AAHlB,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,OAAO,EAAQ,CAAA;QACzB,IAAE,CAAA,EAAA,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;AAGhC,QAAA,IAAI,EAAE,IAAI,IAAI,EAAE;AACZ,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;SACf;KACJ;AACD,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAA;KACzB;AAED,IAAA,GAAG,CAAI,CAAgB,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;SACzB;aAAM;YACH,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;SACpC;KACJ;AAED,IAAA,UAAU,CAAwB,CAAI,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,CAAC,CAAC,OAAO,EAAE,CAAA;SACd;aAAM;AACH,YAAA,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;SACvC;AAED,QAAA,OAAO,CAAC,CAAA;KACX;AAED,IAAA,IAAI,CAAiB,EAAK,EAAA;QACtB,MAAM,MAAM,GAAG,MAAK;AAChB,YAAA,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAA;YAC5B,IAAI,MAAM,EAAE;AACR,gBAAA,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;aACzB;AACL,SAAC,CAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,MAAM,EAAE,CAAA;SACX;aAAM;AACH,YAAA,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;SAC5B;AAED,QAAA,OAAO,EAAE,CAAA;KACZ;AAED,IAAA,GAAG,CAAC,CAAa,EAAA;AACb,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,CAAC,EAAE,CAAA;SACN;aAAM;AACH,YAAA,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;SACvB;KACJ;IAED,GAAG,GAAA;AACC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACZ,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;AACf,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;SACtB;KACJ;AACJ,CAAA;MAGqB,YAAY,CAAA;AADlC,IAAA,WAAA,GAAA;;AAGa,QAAA,IAAA,CAAA,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAA;AAY9B,KAAA;;IATG,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;QACZ,OAAQ,IAAY,CAAC,CAAC,CAAA;KACzB;;IAGD,OAAO,GAAA;QACH,IAAI,CAAC,WAAW,EAAE,CAAA;KACrB;8GAbiB,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAZ,YAAY,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADjC,SAAS;;;MC9BG,gBAAgB,CAAA;AAA7B,IAAA,WAAA,GAAA;AACa,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAmB,IAAI,CAAC,CAAA;QAE9D,IAAK,CAAA,KAAA,GAAuC,EAAE,CAAA;AAErC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CACjC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,KAAI;AACpB,YAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACjB,gBAAA,OAAO,KAAK,CAAA;aACf;AAED,YAAA,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;AACtB,gBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;aAC7B;iBAAM;AACH,gBAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAA;aAC3E;AACD,YAAA,OAAO,KAAK,CAAA;AAChB,SAAC,EAAE,EAAS,CAAC,EACb,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,EAClC,GAAG,CAAC,MAAM,IAAI,CAAC,EACf,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;KAiFJ;AArGY,IAAA,OAAO,CAA8C;AAE9D,IAAA,KAAK,CAAyC;AAoB9C,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAA;KACrD;AAED,IAAA,IAAI,QAAQ,GAAA;QACR,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,MAAM,QAAQ,GAAG,EAAE,CAAA;AAEnB,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACZ,gBAAA,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAA;AACzB,gBAAA,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAA;AAC7B,gBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE;oBACpB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;iBACpC;aACJ;SACJ;QAED,IAAI,KAAK,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE;YAC9B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,CAAA;SAC5F;AAED,QAAA,OAAO,SAAS,CAAA;KACnB;AAED,IAAA,EAAE,CAAC,IAAO,EAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;KACzC;AAED,IAAA,GAAG,CAAC,IAAO,EAAA;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAA;KAClC;AAED,IAAA,GAAG,CAAC,IAAO,EAAE,IAAyB,EAAE,QAAuB,EAAA;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;AAClF,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;SAC9C;KACJ;AAED,IAAA,GAAG,CAAC,IAAO,EAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;KAC1B;IAED,IAAI,GAAA;QACA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KACjC;IAED,OAAO,GAAA;QACH,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KACpC;IAED,OAAO,CAAC,CAAwC,EAAE,MAAe,EAAA;AAC7D,QAAA,IAAI,CAAC,YAAY,gBAAgB,EAAE;YAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;SAC1C;aAAM;AACH,YAAA,OAAO,IAAI,UAAU,CAAC,MAAK;gBACvB,MAAM,SAAS,GAAa,EAAE,CAAA;gBAE9B,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,UAAU,IAAG;AACjC,oBAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE;AACvC,wBAAA,MAAM,GAAG,GAAG,MAAM,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,CAAC,CAAE,CAAA,GAAG,CAAC,CAAA;wBACzC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC1B,4BAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;yBACtB;AACD,wBAAA,IAAI,CAAC,GAAG,CAAC,GAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAA;qBACzC;AACL,iBAAC,CAAC,CAAA;AAEF,gBAAA,OAAO,MAAK;oBACR,GAAG,CAAC,WAAW,EAAE,CAAA;AACjB,oBAAA,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;wBACvB,IAAI,CAAC,GAAG,CAAC,CAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;qBACzC;AACL,iBAAC,CAAA;AACL,aAAC,CAAC,CAAA;SACL;KACJ;AACJ,CAAA;AAED;;;;;;;;;;;;;;AAcG;MAEU,WAAW,CAAA;AAepB,IAAA,WAAA,CAA0E,MAAyB,EAAA;QAAzB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAmB;AAdlF,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QAE/B,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,MAAM;AACjC,cAAG,IAAI,CAAC,MAAqD,CAAC,MAAM;AACpE,cAAE,IAAI,gBAAgB,EAAE,CAAA;AAEnB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAA;AAE7B,QAAA,IAAA,CAAA,KAAK,GAAgC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;AAEjF,QAAA,IAAA,CAAA,GAAG,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAA;AAEzC,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAA;KAE8C;AAEvG,IAAA,IAAI,CAAC,IAAO,EAAE,IAAa,EAAE,QAAuB,EAAA;AAChD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAClB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;SACjC;KACJ;AAED,IAAA,GAAG,CAAC,IAAO,EAAE,IAAa,EAAE,QAAuB,EAAA;QAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;KACxC;AAED,IAAA,EAAE,CAAC,IAAO,EAAA;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;KACxD;AAED,IAAA,KAAK,CAAC,IAAO,EAAA;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;KACzD;AAED;;;;AAIG;AACH,IAAA,EAAE,CAAC,IAAO,EAAA;AACN,QAAA,OAAO,CAAI,GAAkB,KACzB,GAAG,CAAC,IAAI,CACJ,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAC/B,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CACxC,CAAA;KACR;IAED,OAAO,CAAC,KAAsB,EAAE,IAAQ,EAAA;AACpC,QAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AACrB,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;gBACd,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAA;aAC7D;AAED,YAAA,OAAO,IAAI,UAAU,CAAC,MAAK;gBACvB,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,IAAG;AACpC,oBAAA,IAAI,OAAO,SAAS,KAAK,SAAS,EAAE;AAChC,wBAAA,IAAI,CAAC,GAAG,CAAC,IAAS,EAAE,SAAS,CAAC,CAAA;qBACjC;yBAAM;AACH,wBAAA,IAAI,CAAC,GAAG,CAAC,IAAS,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;qBAC5D;AACL,iBAAC,CAAC,CAAA;gBACF,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;aACnC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;SAC/C;AAAM,aAAA,IAAI,KAAK,YAAY,WAAW,EAAE;YACrC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;SAC3F;AAAM,aAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;SACjD;QACD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAA;KAChE;AAvEQ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,kBAeA,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAftB,WAAW,EAAA,CAAA,CAAA,EAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;;0BAgBM,MAAM;2BAAC,WAAW,CAAA;;0BAAG,QAAQ;;0BAAI,QAAQ;;AA2D1D;AAEA;;;;;;;;;;AAUG;MAMU,IAAI,CAAA;AALjB,IAAA,WAAA,GAAA;QAMa,IAAO,CAAA,OAAA,GAAmB,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAEjE,IAAI,CAAA,IAAA,GAAmB,KAAK,CAAC,QAAQ,CAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;AAC7D,QAAA,IAAA,CAAA,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAE/B,QAAA,IAAA,CAAA,MAAM,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAClF,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAI;AACpB,YAAA,IAAI,IAAI,KAAK,GAAG,EAAE;AACd,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;gBAC3B,OAAO;AACH,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,YAAY,EAAE,MAAM;oBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;iBAC3B,CAAA;aACJ;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC5B,IAAI,IAAI,EAAE;AACN,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAA;gBACjC,OAAO;AACH,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,YAAY,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM;oBACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBAC1B,CAAA;aACJ;iBAAM;gBACH,OAAO;AACH,oBAAA,MAAM,EAAE,KAAK;oBACb,YAAY,EAAE,KAAK,CAAC,MAAM;AAC1B,oBAAA,QAAQ,EAAE,SAAS;iBACtB,CAAA;aACJ;AACL,SAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;QAEQ,IAAO,CAAA,OAAA,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAC/B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAClB,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;AACQ,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;QAEvD,IAAa,CAAA,aAAA,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CACrC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,EACxB,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;AACQ,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;QAEnE,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CACjC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EACpB,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;AACQ,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;AAavE,KAAA;AA7DY,IAAA,KAAK,CAA0B;AAkDxC,IAAA,OAAO,CAAC,KAAsB,EAAA;AAC1B,QAAA,OAAO,IAAI,UAAU,CAAC,MAAK;AACvB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AAClB,iBAAA,IAAI,CACD,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,EAC5B,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CACvD;AACA,iBAAA,SAAS,EAAE,CAAA;YAChB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACtC,SAAC,CAAC,CAAA;KACL;8GAhEQ,IAAI,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAJ,IAAI,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAJ,IAAI,EAAA,UAAA,EAAA,CAAA;kBALhB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,QAAQ,EAAE,QAAQ;AACrB,iBAAA,CAAA;;;;ACxPD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAE7B;;;;;;;;;;;;AAYG;MAQU,aAAa,CAAA;AACb,IAAA,OAAO,CAA4D;AACnE,IAAA,KAAK,CAA+C;AACpD,IAAA,SAAS,CAAyB;AAM3C,IAAA,WAAA,GAAA;AARS,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,EAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AACnE,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AACpD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAU,KAAK,CAAC,CAAA;AAElC,QAAA,IAAA,CAAA,UAAU,GAAoB,QAAQ,CAC3C,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CACzF,CAAA;QAGG,MAAM,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;KAClC;AAED,IAAA,GAAG,CAAC,KAAc,EAAA;AACd,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;KAC5B;8GAfQ,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,IAAI,EAAE;AACF,wBAAA,iBAAiB,EAAE,cAAc;AACpC,qBAAA;AACJ,iBAAA,CAAA;;AAmBD;;;;;;;AAOG;MAMU,QAAQ,CAAA;AACR,IAAA,MAAM,CAAwC;AAGvD,IAAA,WAAA,GAAA;QAHS,IAAM,CAAA,MAAA,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;AAC9C,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;AAG9B,QAAA,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;KACnD;8GANQ,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAR,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,iOA/BR,aAAa,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FA+Bb,QAAQ,EAAA,UAAA,EAAA,CAAA;kBALpB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,cAAc;oBACxB,cAAc,EAAE,CAAC,aAAa,CAAC;AAClC,iBAAA,CAAA;;;ACtDD,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AAE7B,MAAM,UAAU,GAAG,2DAA0D;AAC7E,MAAM,YAAY,GAAG,wCAAuC;AAEnE,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAK,EAAA,EAAA,YAAY,CAAS,MAAA,EAAA,UAAU,CAAK,GAAA,CAAA,CAAC,CAAA;MAEtD,cAAc,CAAA;AACvB,IAAA,OAAO,MAAM,CAAC,KAAU,EAAE,WAAoB,EAAA;AAC1C,QAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1B,YAAA,OAAO,IAAI,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;SACxC;AAAM,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAChC,IAAI,KAAK,EAAE;AACP,gBAAA,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAA;aACvE;SACJ;AAAM,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAClC,YAAA,OAAO,IAAI,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;SAChD;AAED,QAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,CAAA,CAAE,CAAC,CAAA;KAChE;IAED,WACoB,CAAA,KAAa,EACb,IAAa,EAAA;QADb,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;QACb,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAS;KAC7B;IAEJ,QAAQ,GAAA;AACJ,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACnB,OAAO,IAAI,CAAC,IAAI,CAAA;SACnB;AAAM,aAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;YAC1B,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAA,CAAE,CAAA;SACrC;aAAM;AACH,YAAA,OAAO,CAAG,EAAA,IAAI,CAAC,KAAK,EAAE,CAAA;SACzB;KACJ;AACJ;;ACrCK,SAAU,cAAc,CAAC,KAAmB,EAAA;IAC9C,OAAO,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK,CAAA,CAAE,KAAK,OAAO,CAAA;AAClD;;ACJO,MAAM,IAAI,GAAI,MAAc,CAAC,IAAI,CAAA;AAElC,SAAU,eAAe,CAAmB,GAAM,EAAA;IACpD,MAAM,MAAM,GACR,OAAO,IAAI,KAAK,WAAW,IAAK,IAAY,CAAC,UAAU;AACnD,UAAG,IAAY,CAAC,UAAU,CAAC,GAAG,CAAC;AAC/B,UAAE,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAA;AACjC,IAAA,OAAO,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,WAAW,GAAG,MAAM,GAAG,GAAG,CAAA;AAC/D,CAAC;AAEY,MAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,EAAC;AACrD,MAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC,EAAC;AACzD,MAAA,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,EAAC;AACvD,MAAA,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,EAAC;AAC3D,MAAA,wBAAwB,GAAG,MAAM,CAAC,eAAe,CAAC,uBAAuB,CAAC,EAAC;AAC3E,MAAA,uBAAuB,GAAG,MAAM,CAAC,eAAe,CAAC,sBAAsB,CAAC;;ACXrF,MAAM,QAAQ,CAAA;AACV,IAAA,MAAM,CAAK;IACX,OAAO,GAA0B,EAAE,CAAA;IACnC,QAAQ,GAA0B,EAAE,CAAA;AAE7B,IAAA,MAAM,CAAC,OAAuB,EAAA;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1B,IAAI,CAAC,SAAS,EAAE,CAAA;KACnB;AAEM,IAAA,UAAU,CAAC,OAAuB,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC9B,SAAC,CAAC,CAAA;QACF,IAAI,CAAC,SAAS,EAAE,CAAA;KACnB;AAEM,IAAA,OAAO,CAAC,OAAuB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC3B,IAAI,CAAC,SAAS,EAAE,CAAA;KACnB;AAEM,IAAA,QAAQ,CAAC,EAAe,EAAE,KAA6B,EAAE,KAAsB,EAAA;AAClF,QAAA,IAAI,CAAC,MAAM,CAAC,MAAK;AACb,YAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,IAAI,CAAC,IAAI,IAAI,EAAE;AACX,oBAAA,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;iBAC7B;qBAAM;oBACH,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;iBAC7B;aACJ;YAED,KAAK,IAAI,KAAK,EAAE,CAAA;AACpB,SAAC,CAAC,CAAA;KACL;AAEM,IAAA,aAAa,CAAC,EAAe,EAAE,KAA6B,EAAE,KAAsB,EAAA;AACvF,QAAA,IAAI,CAAC,MAAM,CAAC,MAAK;AACb,YAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,IAAI,CAAC,IAAI,IAAI,EAAE;AACX,oBAAA,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;iBACxB;qBAAM;AACH,oBAAA,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;iBACxB;aACJ;YAED,KAAK,IAAI,KAAK,EAAE,CAAA;AACpB,SAAC,CAAC,CAAA;KACL;IAEO,SAAS,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,CAAC,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;SACjE;KACJ;IAEO,MAAM,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAElB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;QAEvB,IAAI,CAAC,OAAO,CAAC,CAAA;QACb,IAAI,CAAC,MAAM,CAAC,CAAA;AAEZ,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAC7C,IAAI,CAAC,SAAS,EAAE,CAAA;SACnB;KACJ;AACJ,CAAA;AAED,SAAS,IAAI,CAAC,KAAuB,EAAA;AACjC,IAAA,IAAI,IAAoB,CAAA;IACxB,QAAQ,IAAI,GAAG,KAAK,CAAC,KAAK,EAAG,GAAG;AAC5B,QAAA,IAAI,EAAE,CAAA;KACT;AACL,CAAC;AAEY,MAAA,OAAO,GAAG,IAAI,QAAQ;;AChFnC;AAEa,MAAA,SAAS,GAAqB,OAAO,eAAe,KAAK,UAAU,GAAG,eAAe,GAAG,UAAS;AAC9G;AACO,MAAM,aAAa,GAAgDA,gBAAqB;AAEzF,SAAU,UAAU,CAAI,GAAM,EAAA;AAChC,IAAA,IAAI,GAAG,IAAI,IAAI,EAAE;AACb,QAAA,OAAO,GAAU,CAAA;KACpB;AAED,IAAA,IAAI,GAAG,YAAY,GAAG,EAAE;AACpB,QAAA,GAAG,CAAC,KAAK;AACL,YAAA,GAAG,CAAC,MAAM;AACV,gBAAA,GAAG,CAAC,GAAG;AACH,oBAAA,YAAA;AACI,wBAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;AACvC,qBAAC,CAAA;KACZ;AAAM,SAAA,IAAI,GAAG,YAAY,GAAG,EAAE;AAC3B,QAAA,GAAG,CAAC,GAAG;AACH,YAAA,GAAG,CAAC,KAAK;AACT,gBAAA,GAAG,CAAC,MAAM;AACN,oBAAA,YAAA;AACI,wBAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;AACvC,qBAAC,CAAA;KACZ;;AAGD,IAAA,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAElB,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;AAC3C,QAAA,MAAM,IAAI,GAAI,GAAW,CAAC,IAAI,CAAC,CAAA;AAC/B,QAAA,MAAM,IAAI,GAAG,OAAO,IAAI,CAAA;;AAGxB,QAAA,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,UAAU,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACtE,UAAU,CAAC,IAAI,CAAC,CAAA;SACnB;AACL,KAAC,CAAC,CAAA;AAEF,IAAA,OAAO,GAAU,CAAA;AACrB,CAAC;AAED;;;;;AAKG;AACa,SAAA,QAAQ,CAAI,KAAmB,EAAE,EAA0B,EAAA;AACvE,IAAA,IAAI,OAAQ,KAAa,CAAC,QAAQ,KAAK,UAAU,EAAE;AAC/C,QAAA,OAAQ,KAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;KACrC;SAAM;QACH,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;KACjC;AACL;;AC3DA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ngutil-common.mjs","sources":["../../../../packages/common/src/destruct.ts","../../../../packages/common/src/busy.ts","../../../../packages/common/src/disabled.ts","../../../../packages/common/src/number-with-unit.ts","../../../../packages/common/src/coerce/bool-attr.ts","../../../../packages/common/src/coerce/element.ts","../../../../packages/common/src/state-chain.ts","../../../../packages/common/src/unngzone.ts","../../../../packages/common/src/dom.ts","../../../../packages/common/src/util.ts","../../../../packages/common/src/ngutil-common.ts"],"sourcesContent":["import { Directive, OnDestroy } from \"@angular/core\"\n\nimport { Observable, share, Subject, take, takeUntil } from \"rxjs\"\n\nexport interface IDisposable {\n dispose(): void\n}\n\nexport class Destruct {\n readonly #on = new Subject<void>()\n readonly on = this.#on.pipe(share())\n\n constructor(fn?: () => void) {\n if (fn != null) {\n this.any(fn)\n }\n }\n get done(): boolean {\n return this.#on.closed\n }\n\n sub<T>(o: Observable<T>): Observable<T> {\n if (this.done) {\n return o.pipe(take(0))\n } else {\n return o.pipe(takeUntil(this.on))\n }\n }\n\n disposable<T extends IDisposable>(d: T): T {\n if (this.done) {\n d.dispose()\n } else {\n this.on.subscribe(d.dispose.bind(d))\n }\n\n return d\n }\n\n node<T extends Node>(el: T): T {\n const remove = () => {\n const parent = el.parentNode\n if (parent) {\n parent.removeChild(el)\n }\n }\n if (this.done) {\n remove()\n } else {\n this.on.subscribe(remove)\n }\n\n return el\n }\n\n any(f: () => void): void {\n if (this.done) {\n f()\n } else {\n this.on.subscribe(f)\n }\n }\n\n run() {\n if (!this.done) {\n this.#on.next()\n this.#on.complete()\n }\n }\n}\n\n@Directive()\nexport abstract class Destructible implements OnDestroy, IDisposable {\n /** @ignore */\n readonly d = new Destruct()\n\n /** @ignore */\n ngOnDestroy() {\n this.d.run()\n delete (this as any).d\n }\n\n /** @ignore */\n dispose() {\n this.ngOnDestroy()\n }\n}\n","import {\n computed,\n DestroyRef,\n Directive,\n inject,\n Inject,\n Injectable,\n input,\n InputSignal,\n isSignal,\n Optional,\n Signal,\n SkipSelf\n} from \"@angular/core\"\nimport { takeUntilDestroyed, toObservable, toSignal } from \"@angular/core/rxjs-interop\"\n\nimport {\n BehaviorSubject,\n combineLatest,\n filter,\n finalize,\n isObservable,\n map,\n Observable,\n scan,\n shareReplay,\n switchMap,\n tap,\n throwError\n} from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { ConnectProtocol } from \"./connect-protocol\"\n\nexport type BusyProgress = { total: number; current: number; message?: string }\nexport type BusyEventParams = { busy?: boolean; progress?: BusyProgress }\nexport type BusyEvent = { name: string } & BusyEventParams\n\nexport type BusyConnectable = Observable<boolean | BusyEventParams> | BusyTracker<any> | Signal<boolean>\n\nexport class BusyTrackerState<T extends string> implements ConnectProtocol {\n readonly #events = new BehaviorSubject<BusyEvent | null>(null)\n\n #data: { [key: string]: BusyEventParams } = {}\n\n readonly current$ = this.#events.pipe(\n scan((state, current) => {\n if (current == null) {\n return state\n }\n\n if (current.busy == null) {\n delete state[current.name]\n } else {\n state[current.name] = { busy: current.busy, progress: current.progress }\n }\n return state\n }, {} as any),\n tap(state => (this.#data = state)),\n map(() => this),\n shareReplay(1)\n )\n\n get isBusy(): boolean {\n return Object.values(this.#data).some(v => v.busy)\n }\n\n get progress(): BusyProgress | undefined {\n let total = 0\n let current = 0\n const messages = []\n\n for (const v of Object.values(this.#data)) {\n if (v.progress) {\n total += v.progress.total\n current += v.progress.current\n if (v.progress.message) {\n messages.push(v.progress.message)\n }\n }\n }\n\n if (total !== 0 && current !== 0) {\n return { total, current, message: messages.length > 0 ? messages.join(\"\\n\") : undefined }\n }\n\n return undefined\n }\n\n is(name: T): boolean {\n return this.#data[name]?.busy === true\n }\n\n has(name: T): boolean {\n return this.#data[name] != null\n }\n\n set(name: T, busy: boolean | undefined, progress?: BusyProgress) {\n const current = this.#data[name]\n if (current == null || current.busy !== busy || !isEqual(current.progress, progress)) {\n this.#events.next({ name, busy, progress })\n }\n }\n\n get(name: T): BusyEventParams | undefined {\n return this.#data[name]\n }\n\n keys() {\n return Object.keys(this.#data)\n }\n\n entries() {\n return Object.entries(this.#data)\n }\n\n connect(o: Observable<typeof this> | typeof this, prefix?: string): Observable<unknown> {\n if (o instanceof BusyTrackerState) {\n return this.connect(o.current$, prefix)\n } else {\n return new Observable(() => {\n const otherKeys: string[] = []\n\n const sub = o.subscribe(otherState => {\n for (const [k, v] of otherState.entries()) {\n const key = prefix ? `${prefix}-${k}` : k\n if (!otherKeys.includes(key)) {\n otherKeys.push(key)\n }\n this.set(key as T, v.busy, v.progress)\n }\n })\n\n return () => {\n sub.unsubscribe()\n for (const k of otherKeys) {\n this.set(k as T, undefined, undefined)\n }\n }\n })\n }\n }\n}\n\n/**\n * ```ts\n * @Component({\n * provides: [BusyTracker],\n * template: `\n * <spinner *ngIf=\"busy.is('reload') | async\">\n * <spinner *ngIf=\"busy.any | async\">\n * <button nuBusy=\"reload\"></button>\n * `\n * })\n * export class Grid {\n * readonly busy = inject(BusyTracker<\"create\" | \"reload\" | \"update\" | \"delete\">)\n * }\n * ```\n */\n@Injectable()\nexport class BusyTracker<T extends string> implements ConnectProtocol {\n private readonly destroyRef = inject(DestroyRef)\n\n private readonly _state = this.parent\n ? (this.parent as unknown as { _state: BusyTrackerState<T> })._state\n : new BusyTrackerState()\n\n readonly state$ = this._state.current$\n\n readonly state: Signal<BusyTrackerState<T>> = toSignal(this.state$, { requireSync: true })\n\n readonly any = computed(() => this.state().isBusy)\n\n readonly progress = computed(() => this.state().progress)\n\n constructor(@Inject(BusyTracker) @SkipSelf() @Optional() private readonly parent?: BusyTracker<any>) {}\n\n init(name: T, busy: boolean, progress?: BusyProgress) {\n const state = this.state()\n if (!state.has(name)) {\n this.set(name, busy, progress)\n }\n }\n\n set(name: T, busy: boolean, progress?: BusyProgress) {\n this._state.set(name, busy, progress)\n }\n\n is(name: T): Observable<boolean> {\n return this.state$.pipe(map(state => state.is(name)))\n }\n\n watch(name: T): Observable<BusyEventParams | undefined> {\n return this.state$.pipe(map(state => state.get(name)))\n }\n\n /**\n * ```ts\n * observable.pipe(this.busy.rx(\"save\"))\n * ```\n */\n rx(name: T) {\n return <S>(src: Observable<S>) =>\n src.pipe(\n tap(() => this.set(name, true)),\n finalize(() => this.set(name, false))\n )\n }\n\n connect(value: BusyConnectable, name?: T): Observable<unknown> {\n if (isObservable(value)) {\n if (name == null) {\n return throwError(() => new Error(\"Missing `name` param\"))\n }\n\n return new Observable(() => {\n const sub = value.subscribe(busyValue => {\n if (typeof busyValue === \"boolean\") {\n this.set(name as T, busyValue)\n } else {\n this.set(name as T, !!busyValue.busy, busyValue.progress)\n }\n })\n return sub.unsubscribe.bind(sub)\n }).pipe(takeUntilDestroyed(this.destroyRef))\n } else if (value instanceof BusyTracker) {\n return this._state.connect(value.state$, name).pipe(takeUntilDestroyed(this.destroyRef))\n } else if (isSignal(value)) {\n return this.connect(toObservable(value), name)\n }\n return throwError(() => new Error(\"Unsupported Busy source\"))\n }\n}\n\n// TODO: BusyState directive\n\n/**\n * ```ts\n * @Component({\n * template: `\n * <button nuBusy=\"save\">SAVE</button>\n * <progress nuBusy=\"fileUpload\">\n * <progress nuBusy=\"*\">\n * `\n * })\n * ```\n */\n@Directive({\n standalone: true,\n selector: \"[nuBusy]\",\n exportAs: \"nuBusy\"\n})\nexport class Busy<T extends string> implements ConnectProtocol {\n readonly tracker: BusyTracker<T> = inject(BusyTracker, { skipSelf: true })\n\n readonly name: InputSignal<T> = input.required<T>({ alias: \"nuBusy\" })\n readonly #name = toObservable(this.name)\n\n readonly state$ = combineLatest({ name: this.#name, state: this.tracker.state$ }).pipe(\n map(({ name, state }) => {\n if (name === \"*\") {\n const isBusy = state.isBusy\n return {\n isBusy: isBusy,\n isOthersBusy: isBusy,\n progress: state.progress\n }\n }\n\n const self = state.get(name)\n if (self) {\n const isBusy = self.busy === true\n return {\n isBusy: isBusy,\n isOthersBusy: state.isBusy && !isBusy,\n progress: self.progress\n }\n } else {\n return {\n isBusy: false,\n isOthersBusy: state.isBusy,\n progress: undefined\n }\n }\n }),\n shareReplay(1)\n )\n\n readonly isBusy$ = this.state$.pipe(\n map(v => v.isBusy),\n shareReplay(1)\n )\n readonly isBusy = toSignal(this.isBusy$, { rejectErrors: true })\n\n readonly isOthersBusy$ = this.state$.pipe(\n map(v => v.isOthersBusy),\n shareReplay(1)\n )\n readonly isOthersBusy = toSignal(this.isOthersBusy$, { rejectErrors: true })\n\n readonly progress$ = this.state$.pipe(\n map(v => v.progress),\n shareReplay(1)\n )\n readonly progress = toSignal(this.progress$, { rejectErrors: true })\n\n connect(value: BusyConnectable) {\n return new Observable(() => {\n const tsub = this.#name\n .pipe(\n filter(name => name !== \"*\"),\n switchMap(name => this.tracker.connect(value, name))\n )\n .subscribe()\n return tsub.unsubscribe.bind(tsub)\n })\n }\n}\n","import { computed, Directive, effect, inject, input, signal, Signal } from \"@angular/core\"\nimport { NgControl } from \"@angular/forms\"\n\nimport { Busy } from \"./busy\"\n\n/**\n * @example\n * ```typescript\n * @Component({\n * standalone: true,\n * hostDirectives: [DisabledState],\n * template: `<button [disabled]=\"disabledState.isDisabled()\">Submit</button>`,\n * })\n * export class Button {\n * readonly disabledState = inject(DisabledState)\n * }\n * ```\n */\n@Directive({\n standalone: true,\n exportAs: \"nuDisabled\",\n host: {\n \"[attr.disabled]\": \"isDisabled()\"\n }\n})\nexport class DisabledState {\n readonly #parent = inject(DisabledState, { skipSelf: true, optional: true })\n readonly #busy = inject(Busy, { self: true, optional: true })\n readonly #disabled = signal<boolean>(false)\n\n readonly isDisabled: Signal<boolean> = computed(\n () => !!(this.#parent?.isDisabled() || this.#busy?.isOthersBusy() || this.#disabled())\n )\n\n constructor() {\n effect(() => this.isDisabled())\n }\n\n set(value: boolean) {\n this.#disabled.set(value)\n }\n}\n\n/**\n * @example\n * ```html\n * <form nuDisabled nuBusy=\"submit\">\n * <button [nuDisabled]=\"form.invalid\" nuBusy=\"submit\">Submit</button>\n * </form>\n * ```\n */\n@Directive({\n standalone: true,\n selector: \"[nuDisabled]\",\n hostDirectives: [DisabledState]\n})\nexport class Disabled {\n readonly #state = inject(DisabledState, { self: true })\n readonly #control = inject(NgControl, { self: true, optional: true })\n readonly nuDisabled = input(false)\n\n constructor() {\n effect(() => this.#state.set(this.nuDisabled()), { allowSignalWrites: true })\n effect(() => {\n const control = this.#control?.control\n if (!control) {\n // TODO: retry\n return\n }\n\n if (this.#state.isDisabled()) {\n control.enabled && control.disable()\n } else {\n control.disabled && control.enable()\n }\n })\n }\n}\n\n// @Directive({\n// standalone: true,\n// // eslint-disable-next-line max-len\n// selector: \"[nuDisabled][formControl],[nuDisabled][formControlName],[nuDisabled][formGroup],[nuDisabled][formGroupName]\"\n// })\n// export class FormControlDisabled {\n// readonly #disabled = inject(DisabledState, { self: true })\n// readonly #control = inject(NgControl, { self: true })\n\n// constructor() {\n// effect(() => {\n// const control = this.#control.control\n// if (!control) {\n// // TODO: retry\n// return\n// }\n\n// if (this.#disabled.isDisabled()) {\n// control.enabled && control.disable()\n// } else {\n// control.disabled && control.enable()\n// }\n// })\n// }\n// }\n","export type NumberWithUnitInput = number | string | NumberWithUnit\n\nconst specials = [\"auto\", \"inherit\"]\n\nexport const UNIT_REGEX = \"v[h|w|min|max]|p[c|t|x]|[re|e|c|m]m|[l|c]h|%|in|Q|ex|m?s\"\nexport const NUMBER_REGEX = \"[+-]?(?:\\\\d*\\\\.\\\\d+|\\\\d+\\\\.\\\\d*|\\\\d+)\"\n\nconst regex = new RegExp(`^(${NUMBER_REGEX})\\\\s*(${UNIT_REGEX})?$`)\n\nexport class NumberWithUnit {\n static coerce(value: any, defaultUnit?: string) {\n if (specials.includes(value)) {\n return new NumberWithUnit(NaN, value)\n } else if (typeof value === \"string\") {\n const match = value.match(regex)\n if (match) {\n return new NumberWithUnit(Number(match[1]), match[2] || defaultUnit)\n }\n } else if (typeof value === \"number\") {\n return new NumberWithUnit(value, defaultUnit)\n }\n\n throw new Error(`Not implemented number with unit: ${value}`)\n }\n\n constructor(\n public readonly value: number,\n public readonly unit?: string\n ) {}\n\n toString() {\n if (isNaN(this.value)) {\n return this.unit\n } else if (this.unit != null) {\n return `${this.value}${this.unit}`\n } else {\n return `${this.value}`\n }\n }\n}\n","export type BooleanInput = string | boolean | null | undefined\n\nexport function coerceBoolAttr(value: BooleanInput): boolean {\n return value != null && `${value}` !== \"false\"\n}\n","import { ElementRef } from \"@angular/core\"\n\nexport type ElementInput<T extends Element = HTMLElement> = T | ElementRef<T>\n\nexport function coerceElement<T>(value: T | ElementRef<T>): T {\n if (value instanceof ElementRef) {\n return value.nativeElement\n }\n return value\n}\n","import {\n catchError,\n concat,\n forkJoin,\n from,\n map,\n Observable,\n ObservableInput,\n of,\n ReplaySubject,\n tap,\n throwError\n} from \"rxjs\"\n\nexport type StateChainHandler = () => ObservableInput<unknown> | null | undefined | void\n\nexport class StopStateChain extends Error {}\n\nexport type StateOptions = Record<string, { order?: \"parallel\" | \"sequential\"; cancellable?: boolean }>\n\nexport type StateRemap<A, B> =\n A extends StateChain<infer AO, infer AS>\n ? B extends StateChain<infer BO, infer BS>\n ? Partial<{ [K in AS]: BS }>\n : never\n : never\n\nexport class StateChain<T extends StateOptions, S extends string | number | symbol = keyof T> {\n readonly states: T\n readonly #executed: S[] = []\n readonly #handlers: Partial<Record<S, Array<StateChainHandler>>> = {}\n\n #current = new ReplaySubject<S>(1)\n readonly current$ = this.#current.asObservable()\n\n constructor(states: T) {\n this.states = { ...states }\n\n for (const value of Object.values(states)) {\n if (value.order == null) {\n value.order = \"parallel\"\n }\n }\n }\n\n on(state: S, fn: StateChainHandler) {\n if (state in this.#handlers) {\n this.#handlers[state]!.push(fn)\n } else {\n this.#handlers[state] = [fn]\n }\n\n return () => {\n const idx = this.#handlers[state]!.indexOf(fn)\n if (idx > -1) {\n this.#handlers[state]!.splice(idx, 1)\n }\n }\n }\n\n /**\n * Run this state changes on other state\n */\n control<T extends StateChain<any, any>>(state: T, remap?: StateRemap<this, T>) {\n const remove: Array<() => void> = []\n for (const selfState of Object.keys(this.states)) {\n const otherState = (remap as unknown as any)?.[selfState] || selfState\n if (otherState in state.states) {\n remove.push(this.on(selfState as any, () => state.run([otherState])))\n }\n }\n\n return () => {\n for (const fn of remove) {\n fn()\n }\n }\n }\n\n run(states: S[]) {\n if (states.length === 0) {\n throw new Error(\"Missing states\")\n }\n\n const executed: S[] = []\n return concat(...states.map(state => this.#run(state).pipe(tap(s => s && executed.push(s))))).pipe(\n catchError(err => (err instanceof StopStateChain ? of(executed) : throwError(() => err)))\n )\n }\n\n #run(state: S): Observable<S | null> {\n const options = this.states[state as any]\n\n return new Observable(dst => {\n if (this.#executed.includes(state)) {\n dst.next(state)\n dst.complete()\n return\n }\n this.#executed.push(state)\n this.#current.next(state)\n\n const handlers = this.#handlers[state]\n if (handlers == null || handlers.length === 0) {\n dst.next(state)\n dst.complete()\n return\n }\n\n const observables = handlers\n .map(handler => {\n const result = handler()\n if (result == null) {\n return of(null)\n } else {\n return from(result)\n }\n })\n .map(handler =>\n handler.pipe(\n catchError(err => {\n if (err instanceof StopStateChain) {\n const idx = this.#executed.indexOf(state)\n if (idx > -1) {\n this.#executed.splice(idx, 1)\n }\n dst.error(err)\n dst.complete()\n return of(null)\n } else {\n return throwError(() => err)\n }\n })\n )\n )\n\n if (observables.length === 1) {\n return observables[0].pipe(map(() => state)).subscribe(dst)\n } else {\n if (options.order === \"parallel\") {\n return forkJoin(observables)\n .pipe(map(() => state))\n .subscribe(dst)\n } else {\n return concat(...observables)\n .pipe(map(() => state))\n .subscribe(dst)\n }\n }\n })\n }\n\n destroy() {\n ;(this as any).#handlers = null as any\n }\n}\n","export const Zone = (window as any).Zone\n\nexport function __zone_symbol__<T extends string>(val: T): T {\n const symbol =\n typeof Zone !== \"undefined\" && (Zone as any).__symbol__\n ? (Zone as any).__symbol__(val)\n : `__zone_symbol__${val}`\n return typeof window[symbol] !== \"undefined\" ? symbol : val\n}\n\nexport const rawSetTimeout = window[__zone_symbol__(\"setTimeout\")]\nexport const rawClearTimeout = window[__zone_symbol__(\"clearTimeout\")]\nexport const rawSetInterval = window[__zone_symbol__(\"setInterval\")]\nexport const rawClearInterval = window[__zone_symbol__(\"clearInterval\")]\nexport const rawRequestAnimationFrame = window[__zone_symbol__(\"requestAnimationFrame\")]\nexport const rawCancelAnimationFrame = window[__zone_symbol__(\"cancelAnimationFrame\")]\n","import { rawRequestAnimationFrame } from \"./unngzone\"\n\ntype FastDomHandler = () => void\n\nclass _FastDOM {\n #rafId: any\n #mutate: Array<FastDomHandler> = []\n #measure: Array<FastDomHandler> = []\n\n public mutate(handler: FastDomHandler) {\n this.#mutate.push(handler)\n this._schedule()\n }\n\n public mutateNext(handler: FastDomHandler) {\n this.#mutate.push(() => {\n this.#mutate.push(handler)\n })\n this._schedule()\n }\n\n public measure(handler: FastDomHandler) {\n this.#measure.push(handler)\n this._schedule()\n }\n\n public setStyle(el: HTMLElement, style: { [key: string]: any }, chain?: FastDomHandler) {\n this.mutate(() => {\n for (const [k, v] of Object.entries(style)) {\n if (v == null) {\n el.style.removeProperty(k)\n } else {\n el.style.setProperty(k, v)\n }\n }\n\n chain && chain()\n })\n }\n\n public setAttributes(el: HTMLElement, attrs: { [key: string]: any }, chain?: FastDomHandler) {\n this.mutate(() => {\n for (const [k, v] of Object.entries(attrs)) {\n if (v == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, v)\n }\n }\n\n chain && chain()\n })\n }\n\n private _schedule() {\n if (!this.#rafId) {\n this.#rafId = rawRequestAnimationFrame(this._apply.bind(this))\n }\n }\n\n private _apply() {\n this.#rafId = null\n\n const measure = this.#measure.slice()\n const mutate = this.#mutate.slice()\n this.#measure.length = 0\n this.#mutate.length = 0\n\n runQ(measure)\n runQ(mutate)\n\n if (this.#measure.length || this.#mutate.length) {\n this._schedule()\n }\n }\n}\n\nfunction runQ(items: FastDomHandler[]) {\n let item: FastDomHandler\n while ((item = items.shift()!)) {\n item()\n }\n}\n\nexport const FastDOM = new _FastDOM()\n","import { isPlainObject as _isPlainObject, cloneDeep } from \"lodash\"\n\nimport { DeepReadonly } from \"./types/readonly\"\n\n// export { deepFreeze }\n\nexport const deepClone: <T>(obj: T) => T = typeof structuredClone === \"function\" ? structuredClone : cloneDeep\n// export const deepFreeze: <T>(obj: T) => DeepReadonly<T> = o => Object.freeze(o) as any\nexport const isPlainObject: (arg: any) => arg is { [key: string]: any } = _isPlainObject as any\n\nexport function deepFreeze<T>(obj: T): DeepReadonly<T> {\n if (obj == null) {\n return obj as any\n }\n\n if (obj instanceof Map) {\n obj.clear =\n obj.delete =\n obj.set =\n function () {\n throw new Error(\"map is read-only\")\n }\n } else if (obj instanceof Set) {\n obj.add =\n obj.clear =\n obj.delete =\n function () {\n throw new Error(\"set is read-only\")\n }\n }\n\n // Freeze self\n Object.freeze(obj)\n\n Object.getOwnPropertyNames(obj).forEach(name => {\n const prop = (obj as any)[name]\n const type = typeof prop\n\n // Freeze prop if it is an object or function and also not already frozen\n if ((type === \"object\" || type === \"function\") && !Object.isFrozen(prop)) {\n deepFreeze(prop)\n }\n })\n\n return obj as any\n}\n\n/**\n * @example\n * ```ts\n * toSorted([{id: 1}, {id: 2}, {id: 3}], sortBy([{id: \"desc\"}]))\n * ```\n */\nexport function toSorted<T>(items: readonly T[], fn: (a: T, b: T) => number): T[] {\n if (typeof (items as any).toSorted === \"function\") {\n return (items as any).toSorted(fn)\n } else {\n return items.slice(0).sort(fn)\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_isPlainObject"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -2,8 +2,10 @@ export { ConnectProtocol } from "./connect-protocol";
|
|
|
2
2
|
export { Destruct, Destructible, IDisposable } from "./destruct";
|
|
3
3
|
export { DisabledState, Disabled } from "./disabled";
|
|
4
4
|
export { NumberWithUnit, NumberWithUnitInput, UNIT_REGEX, NUMBER_REGEX } from "./number-with-unit";
|
|
5
|
-
export { coerceBoolAttr, BooleanInput } from "./bool-attr";
|
|
6
|
-
export {
|
|
5
|
+
export { coerceBoolAttr, BooleanInput } from "./coerce/bool-attr";
|
|
6
|
+
export { coerceElement, ElementInput } from "./coerce/element";
|
|
7
|
+
export { StateChain, StateChainHandler } from "./state-chain";
|
|
8
|
+
export { rawCancelAnimationFrame, rawClearInterval, rawClearTimeout, rawRequestAnimationFrame, rawSetInterval, rawSetTimeout, __zone_symbol__ } from "./unngzone";
|
|
7
9
|
export { FastDOM } from "./dom";
|
|
8
10
|
export { Busy, BusyEvent, BusyEventParams, BusyProgress, BusyTrackerState, BusyTracker } from "./busy";
|
|
9
11
|
export { Concat } from "./types/concat";
|
package/package.json
CHANGED
package/state-chain.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Observable, ObservableInput } from "rxjs";
|
|
2
|
+
export type StateChainHandler = () => ObservableInput<unknown> | null | undefined | void;
|
|
3
|
+
export declare class StopStateChain extends Error {
|
|
4
|
+
}
|
|
5
|
+
export type StateOptions = Record<string, {
|
|
6
|
+
order?: "parallel" | "sequential";
|
|
7
|
+
cancellable?: boolean;
|
|
8
|
+
}>;
|
|
9
|
+
export type StateRemap<A, B> = A extends StateChain<infer AO, infer AS> ? B extends StateChain<infer BO, infer BS> ? Partial<{
|
|
10
|
+
[K in AS]: BS;
|
|
11
|
+
}> : never : never;
|
|
12
|
+
export declare class StateChain<T extends StateOptions, S extends string | number | symbol = keyof T> {
|
|
13
|
+
#private;
|
|
14
|
+
readonly states: T;
|
|
15
|
+
readonly current$: Observable<S>;
|
|
16
|
+
constructor(states: T);
|
|
17
|
+
on(state: S, fn: StateChainHandler): () => void;
|
|
18
|
+
/**
|
|
19
|
+
* Run this state changes on other state
|
|
20
|
+
*/
|
|
21
|
+
control<T extends StateChain<any, any>>(state: T, remap?: StateRemap<this, T>): () => void;
|
|
22
|
+
run(states: S[]): Observable<S | S[] | null>;
|
|
23
|
+
destroy(): void;
|
|
24
|
+
}
|
package/esm2022/bool-attr.mjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export function coerceBoolAttr(value) {
|
|
2
|
-
return value != null && `${value}` !== "false";
|
|
3
|
-
}
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbC1hdHRyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9ib29sLWF0dHIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFtQjtJQUM5QyxPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsS0FBSyxPQUFPLENBQUE7QUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEJvb2xlYW5JbnB1dCA9IHN0cmluZyB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkXG5cbmV4cG9ydCBmdW5jdGlvbiBjb2VyY2VCb29sQXR0cih2YWx1ZTogQm9vbGVhbklucHV0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgYCR7dmFsdWV9YCAhPT0gXCJmYWxzZVwiXG59XG4iXX0=
|
|
File without changes
|