@ngutil/common 0.0.52 → 0.0.55

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.
@@ -1,4 +1,5 @@
1
+ import { isTruthy } from "../util";
1
2
  export function coerceBoolAttr(value) {
2
- return value != null && `${value}` !== "false";
3
+ return isTruthy(value) || (typeof value === "string" && value !== "false");
3
4
  }
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbC1hdHRyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9jb2VyY2UvYm9vbC1hdHRyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBbUI7SUFDOUMsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLEtBQUssT0FBTyxDQUFBO0FBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBCb29sZWFuSW5wdXQgPSBzdHJpbmcgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZFxuXG5leHBvcnQgZnVuY3Rpb24gY29lcmNlQm9vbEF0dHIodmFsdWU6IEJvb2xlYW5JbnB1dCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGAke3ZhbHVlfWAgIT09IFwiZmFsc2VcIlxufVxuIl19
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbC1hdHRyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9jb2VyY2UvYm9vbC1hdHRyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFJbEMsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFtQjtJQUM5QyxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUE7QUFDOUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzVHJ1dGh5IH0gZnJvbSBcIi4uL3V0aWxcIlxuXG5leHBvcnQgdHlwZSBCb29sZWFuSW5wdXQgPSBzdHJpbmcgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZFxuXG5leHBvcnQgZnVuY3Rpb24gY29lcmNlQm9vbEF0dHIodmFsdWU6IEJvb2xlYW5JbnB1dCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1RydXRoeSh2YWx1ZSkgfHwgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZSAhPT0gXCJmYWxzZVwiKVxufVxuIl19
@@ -74,10 +74,10 @@ export class Destructible {
74
74
  dispose() {
75
75
  this.ngOnDestroy();
76
76
  }
77
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Destructible, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
78
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: Destructible, ngImport: i0 }); }
77
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: Destructible, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
78
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: Destructible, ngImport: i0 }); }
79
79
  }
80
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Destructible, decorators: [{
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: Destructible, decorators: [{
81
81
  type: Directive
82
82
  }] });
83
83
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzdHJ1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2Rlc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUE7QUFFcEQsT0FBTyxFQUFjLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQTs7QUFNbEUsTUFBTSxPQUFPLFFBQVE7SUFDUixHQUFHLENBQXNCO0lBR2xDLFlBQVksRUFBZTtRQUhsQixRQUFHLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQTtRQUN6QixPQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUdoQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFBO0lBQzFCLENBQUM7SUFFRCxHQUFHLENBQUksQ0FBZ0I7UUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3JDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUF3QixDQUFJO1FBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ2YsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hDLENBQUM7UUFFRCxPQUFPLENBQUMsQ0FBQTtJQUNaLENBQUM7SUFFRCxJQUFJLENBQWlCLEVBQUs7UUFDdEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ2hCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUE7WUFDNUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQzFCLENBQUM7UUFDTCxDQUFDLENBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLE1BQU0sRUFBRSxDQUFBO1FBQ1osQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM3QixDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUE7SUFDYixDQUFDO0lBRUQsR0FBRyxDQUFDLENBQWE7UUFDYixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLENBQUMsRUFBRSxDQUFBO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN4QixDQUFDO0lBQ0wsQ0FBQztJQUVELEdBQUc7UUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDdkIsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQUdELE1BQU0sT0FBZ0IsWUFBWTtJQURsQztRQUVJLGNBQWM7UUFDTCxNQUFDLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQTtLQVk5QjtJQVZHLGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNaLE9BQVEsSUFBWSxDQUFDLENBQUMsQ0FBQTtJQUMxQixDQUFDO0lBRUQsY0FBYztJQUNkLE9BQU87UUFDSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDdEIsQ0FBQzs4R0FiaUIsWUFBWTtrR0FBWixZQUFZOzsyRkFBWixZQUFZO2tCQURqQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IE9ic2VydmFibGUsIHNoYXJlLCBTdWJqZWN0LCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgSURpc3Bvc2FibGUge1xuICAgIGRpc3Bvc2UoKTogdm9pZFxufVxuXG5leHBvcnQgY2xhc3MgRGVzdHJ1Y3Qge1xuICAgIHJlYWRvbmx5ICNvbiA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcbiAgICByZWFkb25seSBvbiA9IHRoaXMuI29uLnBpcGUoc2hhcmUoKSlcblxuICAgIGNvbnN0cnVjdG9yKGZuPzogKCkgPT4gdm9pZCkge1xuICAgICAgICBpZiAoZm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5hbnkoZm4pXG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGRvbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLiNvbi5jbG9zZWRcbiAgICB9XG5cbiAgICBzdWI8VD4obzogT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgICByZXR1cm4gby5waXBlKHRha2UoMCkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gby5waXBlKHRha2VVbnRpbCh0aGlzLm9uKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRpc3Bvc2FibGU8VCBleHRlbmRzIElEaXNwb3NhYmxlPihkOiBUKTogVCB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICAgIGQuZGlzcG9zZSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uLnN1YnNjcmliZShkLmRpc3Bvc2UuYmluZChkKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkXG4gICAgfVxuXG4gICAgbm9kZTxUIGV4dGVuZHMgTm9kZT4oZWw6IFQpOiBUIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gZWwucGFyZW50Tm9kZVxuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChlbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgICByZW1vdmUoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbi5zdWJzY3JpYmUocmVtb3ZlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVsXG4gICAgfVxuXG4gICAgYW55KGY6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgICAgZigpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uLnN1YnNjcmliZShmKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcnVuKCkge1xuICAgICAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgICAgICAgdGhpcy4jb24ubmV4dCgpXG4gICAgICAgICAgICB0aGlzLiNvbi5jb21wbGV0ZSgpXG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERlc3RydWN0aWJsZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgSURpc3Bvc2FibGUge1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgZCA9IG5ldyBEZXN0cnVjdCgpXG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmQucnVuKClcbiAgICAgICAgZGVsZXRlICh0aGlzIGFzIGFueSkuZFxuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgZGlzcG9zZSgpIHtcbiAgICAgICAgdGhpcy5uZ09uRGVzdHJveSgpXG4gICAgfVxufVxuIl19
package/esm2022/index.mjs CHANGED
@@ -1,5 +1,4 @@
1
1
  export { Destruct, Destructible } from "./destruct";
2
- export { DisabledState, Disabled } from "./disabled";
3
2
  export { NumberWithUnit, UNIT_REGEX, NUMBER_REGEX } from "./number-with-unit";
4
3
  export { coerceBoolAttr } from "./coerce/bool-attr";
5
4
  export { coerceElement, isElementInput } from "./coerce/element";
@@ -7,8 +6,7 @@ export * from "./form";
7
6
  // export { StateChain, StateChainHandler } from "./state-chain"
8
7
  export { rawCancelAnimationFrame, rawClearInterval, rawClearTimeout, rawRequestAnimationFrame, rawSetInterval, rawSetTimeout, __zone_symbol__ } from "./unngzone";
9
8
  export { FastDOM } from "./dom";
10
- export { Busy, BusyTrackerState, BusyTracker } from "./busy";
11
9
  export { isPrimitive } from "./types/primitive";
12
10
  export { deepClone, deepFreeze, isPlainObject, toSorted, isFalsy, isTruthy } from "./util";
13
11
  export * from "./lifecycle";
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFlLE1BQU0sWUFBWSxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQXVCLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVsRyxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLG9CQUFvQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRTlFLGNBQWMsUUFBUSxDQUFBO0FBRXRCLGdFQUFnRTtBQUVoRSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3hCLGNBQWMsRUFDZCxhQUFhLEVBQ2IsZUFBZSxFQUNsQixNQUFNLFlBQVksQ0FBQTtBQUNuQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQTRDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQU90RyxPQUFPLEVBQXVCLFdBQVcsRUFBK0IsTUFBTSxtQkFBbUIsQ0FBQTtBQUVqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDMUYsY0FBYyxhQUFhLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBDb25uZWN0UHJvdG9jb2wgfSBmcm9tIFwiLi9jb25uZWN0LXByb3RvY29sXCJcbmV4cG9ydCB7IERlc3RydWN0LCBEZXN0cnVjdGlibGUsIElEaXNwb3NhYmxlIH0gZnJvbSBcIi4vZGVzdHJ1Y3RcIlxuZXhwb3J0IHsgRGlzYWJsZWRTdGF0ZSwgRGlzYWJsZWQgfSBmcm9tIFwiLi9kaXNhYmxlZFwiXG5leHBvcnQgeyBOdW1iZXJXaXRoVW5pdCwgTnVtYmVyV2l0aFVuaXRJbnB1dCwgVU5JVF9SRUdFWCwgTlVNQkVSX1JFR0VYIH0gZnJvbSBcIi4vbnVtYmVyLXdpdGgtdW5pdFwiXG5cbmV4cG9ydCB7IGNvZXJjZUJvb2xBdHRyLCBCb29sZWFuSW5wdXQgfSBmcm9tIFwiLi9jb2VyY2UvYm9vbC1hdHRyXCJcbmV4cG9ydCB7IGNvZXJjZUVsZW1lbnQsIEVsZW1lbnRJbnB1dCwgaXNFbGVtZW50SW5wdXQgfSBmcm9tIFwiLi9jb2VyY2UvZWxlbWVudFwiXG5cbmV4cG9ydCAqIGZyb20gXCIuL2Zvcm1cIlxuXG4vLyBleHBvcnQgeyBTdGF0ZUNoYWluLCBTdGF0ZUNoYWluSGFuZGxlciB9IGZyb20gXCIuL3N0YXRlLWNoYWluXCJcblxuZXhwb3J0IHtcbiAgICByYXdDYW5jZWxBbmltYXRpb25GcmFtZSxcbiAgICByYXdDbGVhckludGVydmFsLFxuICAgIHJhd0NsZWFyVGltZW91dCxcbiAgICByYXdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsXG4gICAgcmF3U2V0SW50ZXJ2YWwsXG4gICAgcmF3U2V0VGltZW91dCxcbiAgICBfX3pvbmVfc3ltYm9sX19cbn0gZnJvbSBcIi4vdW5uZ3pvbmVcIlxuZXhwb3J0IHsgRmFzdERPTSB9IGZyb20gXCIuL2RvbVwiXG5leHBvcnQgeyBCdXN5LCBCdXN5RXZlbnQsIEJ1c3lFdmVudFBhcmFtcywgQnVzeVByb2dyZXNzLCBCdXN5VHJhY2tlclN0YXRlLCBCdXN5VHJhY2tlciB9IGZyb20gXCIuL2J1c3lcIlxuXG5leHBvcnQgeyBDb25jYXQgfSBmcm9tIFwiLi90eXBlcy9jb25jYXRcIlxuZXhwb3J0IHsgRXZhbCwgSWZBbnksIElzQW55LCBJZlR1cGxlLCBJc1R1cGxlLCBUdXBsZUl0ZW1zLCBPYmplY3RLZXksIE1heFJlY3Vyc2lvbiB9IGZyb20gXCIuL3R5cGVzL3V0aWxcIlxuZXhwb3J0IHsgRmxhdHRlbiwgRmxhdHRlbktleXMgfSBmcm9tIFwiLi90eXBlcy9mbGF0dGVuXCJcbmV4cG9ydCB7IE1lcmdlVW5pb24gfSBmcm9tIFwiLi90eXBlcy9tZXJnZS11bmlvblwiXG5leHBvcnQgeyBOdW1iZXJSYW5nZSB9IGZyb20gXCIuL3R5cGVzL251bWJlci1yYW5nZVwiXG5leHBvcnQgeyBQcmltaXRpdmUsIEJ1aWx0aW5zLCBpc1ByaW1pdGl2ZSwgQXNQcmltaXRpdmUsIFRvUHJpbWl0aXZlTWFwIH0gZnJvbSBcIi4vdHlwZXMvcHJpbWl0aXZlXCJcbmV4cG9ydCB7IERlZXBSZWFkb25seSwgUmVhZG9ubHlEYXRlIH0gZnJvbSBcIi4vdHlwZXMvcmVhZG9ubHlcIlxuZXhwb3J0IHsgZGVlcENsb25lLCBkZWVwRnJlZXplLCBpc1BsYWluT2JqZWN0LCB0b1NvcnRlZCwgaXNGYWxzeSwgaXNUcnV0aHkgfSBmcm9tIFwiLi91dGlsXCJcbmV4cG9ydCAqIGZyb20gXCIuL2xpZmVjeWNsZVwiXG4iXX0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFlLE1BQU0sWUFBWSxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQXVCLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVsRyxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLG9CQUFvQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRTlFLGNBQWMsUUFBUSxDQUFBO0FBRXRCLGdFQUFnRTtBQUVoRSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3hCLGNBQWMsRUFDZCxhQUFhLEVBQ2IsZUFBZSxFQUNsQixNQUFNLFlBQVksQ0FBQTtBQUNuQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBTy9CLE9BQU8sRUFBdUIsV0FBVyxFQUErQixNQUFNLG1CQUFtQixDQUFBO0FBRWpHLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUMxRixjQUFjLGFBQWEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENvbm5lY3RQcm90b2NvbCB9IGZyb20gXCIuL2Nvbm5lY3QtcHJvdG9jb2xcIlxuZXhwb3J0IHsgRGVzdHJ1Y3QsIERlc3RydWN0aWJsZSwgSURpc3Bvc2FibGUgfSBmcm9tIFwiLi9kZXN0cnVjdFwiXG5leHBvcnQgeyBOdW1iZXJXaXRoVW5pdCwgTnVtYmVyV2l0aFVuaXRJbnB1dCwgVU5JVF9SRUdFWCwgTlVNQkVSX1JFR0VYIH0gZnJvbSBcIi4vbnVtYmVyLXdpdGgtdW5pdFwiXG5cbmV4cG9ydCB7IGNvZXJjZUJvb2xBdHRyLCBCb29sZWFuSW5wdXQgfSBmcm9tIFwiLi9jb2VyY2UvYm9vbC1hdHRyXCJcbmV4cG9ydCB7IGNvZXJjZUVsZW1lbnQsIEVsZW1lbnRJbnB1dCwgaXNFbGVtZW50SW5wdXQgfSBmcm9tIFwiLi9jb2VyY2UvZWxlbWVudFwiXG5cbmV4cG9ydCAqIGZyb20gXCIuL2Zvcm1cIlxuXG4vLyBleHBvcnQgeyBTdGF0ZUNoYWluLCBTdGF0ZUNoYWluSGFuZGxlciB9IGZyb20gXCIuL3N0YXRlLWNoYWluXCJcblxuZXhwb3J0IHtcbiAgICByYXdDYW5jZWxBbmltYXRpb25GcmFtZSxcbiAgICByYXdDbGVhckludGVydmFsLFxuICAgIHJhd0NsZWFyVGltZW91dCxcbiAgICByYXdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsXG4gICAgcmF3U2V0SW50ZXJ2YWwsXG4gICAgcmF3U2V0VGltZW91dCxcbiAgICBfX3pvbmVfc3ltYm9sX19cbn0gZnJvbSBcIi4vdW5uZ3pvbmVcIlxuZXhwb3J0IHsgRmFzdERPTSB9IGZyb20gXCIuL2RvbVwiXG5cbmV4cG9ydCB7IENvbmNhdCB9IGZyb20gXCIuL3R5cGVzL2NvbmNhdFwiXG5leHBvcnQgeyBFdmFsLCBJZkFueSwgSXNBbnksIElmVHVwbGUsIElzVHVwbGUsIFR1cGxlSXRlbXMsIE9iamVjdEtleSwgTWF4UmVjdXJzaW9uIH0gZnJvbSBcIi4vdHlwZXMvdXRpbFwiXG5leHBvcnQgeyBGbGF0dGVuLCBGbGF0dGVuS2V5cyB9IGZyb20gXCIuL3R5cGVzL2ZsYXR0ZW5cIlxuZXhwb3J0IHsgTWVyZ2VVbmlvbiB9IGZyb20gXCIuL3R5cGVzL21lcmdlLXVuaW9uXCJcbmV4cG9ydCB7IE51bWJlclJhbmdlIH0gZnJvbSBcIi4vdHlwZXMvbnVtYmVyLXJhbmdlXCJcbmV4cG9ydCB7IFByaW1pdGl2ZSwgQnVpbHRpbnMsIGlzUHJpbWl0aXZlLCBBc1ByaW1pdGl2ZSwgVG9QcmltaXRpdmVNYXAgfSBmcm9tIFwiLi90eXBlcy9wcmltaXRpdmVcIlxuZXhwb3J0IHsgRGVlcFJlYWRvbmx5LCBSZWFkb25seURhdGUgfSBmcm9tIFwiLi90eXBlcy9yZWFkb25seVwiXG5leHBvcnQgeyBkZWVwQ2xvbmUsIGRlZXBGcmVlemUsIGlzUGxhaW5PYmplY3QsIHRvU29ydGVkLCBpc0ZhbHN5LCBpc1RydXRoeSB9IGZyb20gXCIuL3V0aWxcIlxuZXhwb3J0ICogZnJvbSBcIi4vbGlmZWN5Y2xlXCJcbiJdfQ==
@@ -1,9 +1,8 @@
1
1
  import * as i0 from '@angular/core';
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, startWith, debounceTime, distinctUntilChanged, concatMap, concat, takeWhile, reduce, ReplaySubject, of, from, forkJoin, takeLast, catchError } from 'rxjs';
4
- import { NgControl } from '@angular/forms';
5
- import { toSignal, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
6
- import { isEqual, cloneDeep, isPlainObject as isPlainObject$1, flatten } from 'lodash';
2
+ import { Directive, ElementRef } from '@angular/core';
3
+ import { Subject, share, take, takeUntil, startWith, map, debounceTime, distinctUntilChanged, shareReplay, scan, tap, concatMap, concat, takeWhile, reduce, ReplaySubject, filter, Observable, of, from, forkJoin, takeLast, catchError, throwError } from 'rxjs';
4
+ import { cloneDeep, isPlainObject as isPlainObject$1, isEqual, flatten } from 'lodash';
5
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
6
  export { isPrimitive } from 'utility-types';
8
7
 
9
8
  class Destruct {
@@ -79,343 +78,13 @@ class Destructible {
79
78
  dispose() {
80
79
  this.ngOnDestroy();
81
80
  }
82
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Destructible, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
83
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: Destructible, ngImport: i0 }); }
81
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: Destructible, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
82
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: Destructible, ngImport: i0 }); }
84
83
  }
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Destructible, decorators: [{
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: Destructible, decorators: [{
86
85
  type: Directive
87
86
  }] });
88
87
 
89
- class BusyTrackerState {
90
- constructor() {
91
- this.#events = new BehaviorSubject(null);
92
- this.#data = {};
93
- this.current$ = this.#events.pipe(scan((state, current) => {
94
- if (current == null) {
95
- return state;
96
- }
97
- if (current.busy == null) {
98
- delete state[current.name];
99
- }
100
- else {
101
- state[current.name] = { busy: current.busy, progress: current.progress };
102
- }
103
- return state;
104
- }, {}), tap(state => (this.#data = state)), map(() => this), shareReplay(1));
105
- }
106
- #events;
107
- #data;
108
- get isBusy() {
109
- return Object.values(this.#data).some(v => v.busy);
110
- }
111
- get progress() {
112
- let total = 0;
113
- let current = 0;
114
- const messages = [];
115
- for (const v of Object.values(this.#data)) {
116
- if (v.progress) {
117
- total += v.progress.total;
118
- current += v.progress.current;
119
- if (v.progress.message) {
120
- messages.push(v.progress.message);
121
- }
122
- }
123
- }
124
- if (total !== 0 && current !== 0) {
125
- return { total, current, message: messages.length > 0 ? messages.join("\n") : undefined };
126
- }
127
- return undefined;
128
- }
129
- is(name) {
130
- return this.#data[name]?.busy === true;
131
- }
132
- has(name) {
133
- return this.#data[name] != null;
134
- }
135
- set(name, busy, progress) {
136
- const current = this.#data[name];
137
- if (current == null || current.busy !== busy || !isEqual(current.progress, progress)) {
138
- this.#events.next({ name, busy, progress });
139
- }
140
- }
141
- get(name) {
142
- return this.#data[name];
143
- }
144
- keys() {
145
- return Object.keys(this.#data);
146
- }
147
- entries() {
148
- return Object.entries(this.#data);
149
- }
150
- connect(o, prefix) {
151
- if (o instanceof BusyTrackerState) {
152
- return this.connect(o.current$, prefix);
153
- }
154
- else {
155
- return new Observable(() => {
156
- const otherKeys = [];
157
- const sub = o.subscribe(otherState => {
158
- for (const [k, v] of otherState.entries()) {
159
- const key = prefix ? `${prefix}-${k}` : k;
160
- if (!otherKeys.includes(key)) {
161
- otherKeys.push(key);
162
- }
163
- this.set(key, v.busy, v.progress);
164
- }
165
- });
166
- return () => {
167
- sub.unsubscribe();
168
- for (const k of otherKeys) {
169
- this.set(k, undefined, undefined);
170
- }
171
- };
172
- });
173
- }
174
- }
175
- }
176
- /**
177
- * ```ts
178
- * @Component({
179
- * provides: [BusyTracker],
180
- * template: `
181
- * <spinner *ngIf="busy.is('reload') | async">
182
- * <spinner *ngIf="busy.any | async">
183
- * <button nuBusy="reload"></button>
184
- * `
185
- * })
186
- * export class Grid {
187
- * readonly busy = inject(BusyTracker<"create" | "reload" | "update" | "delete">)
188
- * }
189
- * ```
190
- */
191
- class BusyTracker {
192
- constructor(parent) {
193
- this.parent = parent;
194
- this.destroyRef = inject(DestroyRef);
195
- this._state = this.parent
196
- ? this.parent._state
197
- : new BusyTrackerState();
198
- this.state$ = this._state.current$;
199
- this.state = toSignal(this.state$, { requireSync: true });
200
- this.any = computed(() => this.state().isBusy);
201
- this.progress = computed(() => this.state().progress);
202
- }
203
- init(name, busy, progress) {
204
- const state = this.state();
205
- if (!state.has(name)) {
206
- this.set(name, busy, progress);
207
- }
208
- }
209
- set(name, busy, progress) {
210
- this._state.set(name, busy, progress);
211
- }
212
- is(name) {
213
- return this.state$.pipe(map(state => state.is(name)));
214
- }
215
- watch(name) {
216
- return this.state$.pipe(map(state => state.get(name)));
217
- }
218
- /**
219
- * ```ts
220
- * observable.pipe(this.busy.rx("save"))
221
- * ```
222
- */
223
- rx(name) {
224
- return (src) => src.pipe(tap(() => this.set(name, true)), finalize(() => this.set(name, false)));
225
- }
226
- connect(value, name) {
227
- if (isObservable(value)) {
228
- if (name == null) {
229
- return throwError(() => new Error("Missing `name` param"));
230
- }
231
- return new Observable(() => {
232
- const sub = value.subscribe(busyValue => {
233
- if (typeof busyValue === "boolean") {
234
- this.set(name, busyValue);
235
- }
236
- else {
237
- this.set(name, !!busyValue.busy, busyValue.progress);
238
- }
239
- });
240
- return sub.unsubscribe.bind(sub);
241
- }).pipe(takeUntilDestroyed(this.destroyRef));
242
- }
243
- else if (value instanceof BusyTracker) {
244
- return this._state.connect(value.state$, name).pipe(takeUntilDestroyed(this.destroyRef));
245
- }
246
- else if (isSignal(value)) {
247
- return this.connect(toObservable(value), name);
248
- }
249
- return throwError(() => new Error("Unsupported Busy source"));
250
- }
251
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: BusyTracker, deps: [{ token: BusyTracker, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
252
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: BusyTracker }); }
253
- }
254
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: BusyTracker, decorators: [{
255
- type: Injectable
256
- }], ctorParameters: () => [{ type: BusyTracker, decorators: [{
257
- type: Inject,
258
- args: [BusyTracker]
259
- }, {
260
- type: SkipSelf
261
- }, {
262
- type: Optional
263
- }] }] });
264
- // TODO: BusyState directive
265
- /**
266
- * ```ts
267
- * @Component({
268
- * template: `
269
- * <button nuBusy="save">SAVE</button>
270
- * <progress nuBusy="fileUpload">
271
- * <progress nuBusy="*">
272
- * `
273
- * })
274
- * ```
275
- */
276
- class Busy {
277
- constructor() {
278
- this.tracker = inject(BusyTracker, { skipSelf: true });
279
- this.name = input.required({ alias: "nuBusy" });
280
- this.#name = toObservable(this.name);
281
- this.state$ = combineLatest({ name: this.#name, state: this.tracker.state$ }).pipe(map(({ name, state }) => {
282
- if (name === "*") {
283
- const isBusy = state.isBusy;
284
- return {
285
- isBusy: isBusy,
286
- isOthersBusy: isBusy,
287
- progress: state.progress
288
- };
289
- }
290
- const self = state.get(name);
291
- if (self) {
292
- const isBusy = self.busy === true;
293
- return {
294
- isBusy: isBusy,
295
- isOthersBusy: state.isBusy && !isBusy,
296
- progress: self.progress
297
- };
298
- }
299
- else {
300
- return {
301
- isBusy: false,
302
- isOthersBusy: state.isBusy,
303
- progress: undefined
304
- };
305
- }
306
- }), shareReplay(1));
307
- this.isBusy$ = this.state$.pipe(map(v => v.isBusy), shareReplay(1));
308
- this.isBusy = toSignal(this.isBusy$, { rejectErrors: true });
309
- this.isOthersBusy$ = this.state$.pipe(map(v => v.isOthersBusy), shareReplay(1));
310
- this.isOthersBusy = toSignal(this.isOthersBusy$, { rejectErrors: true });
311
- this.progress$ = this.state$.pipe(map(v => v.progress), shareReplay(1));
312
- this.progress = toSignal(this.progress$, { rejectErrors: true });
313
- }
314
- #name;
315
- connect(value) {
316
- return new Observable(() => {
317
- const tsub = this.#name
318
- .pipe(filter(name => name !== "*"), switchMap(name => this.tracker.connect(value, name)))
319
- .subscribe();
320
- return tsub.unsubscribe.bind(tsub);
321
- });
322
- }
323
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Busy, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
324
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.6", type: Busy, isStandalone: true, selector: "[nuBusy]", inputs: { name: { classPropertyName: "name", publicName: "nuBusy", isSignal: true, isRequired: true, transformFunction: null } }, exportAs: ["nuBusy"], ngImport: i0 }); }
325
- }
326
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Busy, decorators: [{
327
- type: Directive,
328
- args: [{
329
- standalone: true,
330
- selector: "[nuBusy]",
331
- exportAs: "nuBusy"
332
- }]
333
- }] });
334
-
335
- var _a;
336
- /**
337
- * @example
338
- * ```typescript
339
- * @Component({
340
- * standalone: true,
341
- * hostDirectives: [DisabledState],
342
- * template: `<button [disabled]="disabledState.isDisabled()">Submit</button>`,
343
- * })
344
- * export class Button {
345
- * readonly disabledState = inject(DisabledState)
346
- * }
347
- * ```
348
- */
349
- class DisabledState {
350
- #parent;
351
- #busy;
352
- #disabled;
353
- constructor() {
354
- this.#parent = inject(_a, { skipSelf: true, optional: true });
355
- this.#busy = inject(Busy, { self: true, optional: true });
356
- this.#disabled = signal(false);
357
- this.isDisabled = computed(() => !!(this.#parent?.isDisabled() || this.#busy?.isOthersBusy() || this.#disabled()));
358
- effect(() => this.isDisabled());
359
- }
360
- set(value) {
361
- this.#disabled.set(value);
362
- }
363
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DisabledState, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
364
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: DisabledState, isStandalone: true, host: { properties: { "attr.disabled": "isDisabled() ? '' : null" } }, exportAs: ["nuDisabled"], ngImport: i0 }); }
365
- }
366
- _a = DisabledState;
367
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DisabledState, decorators: [{
368
- type: Directive,
369
- args: [{
370
- standalone: true,
371
- exportAs: "nuDisabled",
372
- host: {
373
- "[attr.disabled]": "isDisabled() ? '' : null"
374
- }
375
- }]
376
- }], ctorParameters: () => [] });
377
- /**
378
- * @example
379
- * ```html
380
- * <form nuDisabled nuBusy="submit">
381
- * <button [nuDisabled]="form.invalid" nuBusy="submit">Submit</button>
382
- * </form>
383
- * ```
384
- */
385
- class Disabled {
386
- #state;
387
- #control;
388
- constructor() {
389
- this.#state = inject(DisabledState, { self: true });
390
- this.#control = inject(NgControl, { self: true, optional: true });
391
- this.nuDisabled = input(false);
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
- });
406
- }
407
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Disabled, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
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 }); }
409
- }
410
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Disabled, decorators: [{
411
- type: Directive,
412
- args: [{
413
- standalone: true,
414
- selector: "[nuDisabled]",
415
- hostDirectives: [DisabledState]
416
- }]
417
- }], ctorParameters: () => [] });
418
-
419
88
  const specials = ["auto", "inherit"];
420
89
  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";
421
90
  const NUMBER_REGEX = "[+-]?(?:\\d*\\.\\d+|\\d+\\.\\d*|\\d+)";
@@ -456,20 +125,6 @@ class NumberWithUnit {
456
125
  }
457
126
  }
458
127
 
459
- function coerceBoolAttr(value) {
460
- return value != null && `${value}` !== "false";
461
- }
462
-
463
- function coerceElement(value) {
464
- if (value instanceof ElementRef) {
465
- return value.nativeElement;
466
- }
467
- return value;
468
- }
469
- function isElementInput(value) {
470
- return value instanceof Element || value instanceof ElementRef;
471
- }
472
-
473
128
  // export { deepFreeze }
474
129
  const deepClone = typeof structuredClone === "function" ? structuredClone : cloneDeep;
475
130
  // export const deepFreeze: <T>(obj: T) => DeepReadonly<T> = o => Object.freeze(o) as any
@@ -548,6 +203,20 @@ function isTruthy(value) {
548
203
  return !isFalsy(value);
549
204
  }
550
205
 
206
+ function coerceBoolAttr(value) {
207
+ return isTruthy(value) || (typeof value === "string" && value !== "false");
208
+ }
209
+
210
+ function coerceElement(value) {
211
+ if (value instanceof ElementRef) {
212
+ return value.nativeElement;
213
+ }
214
+ return value;
215
+ }
216
+ function isElementInput(value) {
217
+ return value instanceof Element || value instanceof ElementRef;
218
+ }
219
+
551
220
  const DEFAULT = { distinct: true, destruct: true };
552
221
  const VALUE_DEFAULT = { ...DEFAULT, falsyToNull: true };
553
222
  function fcObservableValue(fc, opts = VALUE_DEFAULT) {
@@ -816,5 +485,5 @@ class Lifecycle {
816
485
  * Generated bundle index. Do not edit.
817
486
  */
818
487
 
819
- export { Busy, BusyTracker, BusyTrackerState, DEFAULT, Destruct, Destructible, Disabled, DisabledState, FastDOM, Lifecycle, NUMBER_REGEX, NumberWithUnit, StopLifecycle, UNIT_REGEX, VALUE_DEFAULT, __zone_symbol__, coerceBoolAttr, coerceElement, deepClone, deepFreeze, fcObservableProperty, fcObservableValue, isElementInput, isFalsy, isPlainObject, isTruthy, rawCancelAnimationFrame, rawClearInterval, rawClearTimeout, rawRequestAnimationFrame, rawSetInterval, rawSetTimeout, toSorted };
488
+ export { DEFAULT, Destruct, Destructible, FastDOM, Lifecycle, NUMBER_REGEX, NumberWithUnit, StopLifecycle, UNIT_REGEX, VALUE_DEFAULT, __zone_symbol__, coerceBoolAttr, coerceElement, deepClone, deepFreeze, fcObservableProperty, fcObservableValue, isElementInput, isFalsy, isPlainObject, isTruthy, rawCancelAnimationFrame, rawClearInterval, rawClearTimeout, rawRequestAnimationFrame, rawSetInterval, rawSetTimeout, toSorted };
820
489
  //# 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/coerce/bool-attr.ts","../../../../packages/common/src/coerce/element.ts","../../../../packages/common/src/util.ts","../../../../packages/common/src/form/observable.ts","../../../../packages/common/src/unngzone.ts","../../../../packages/common/src/dom.ts","../../../../packages/common/src/lifecycle.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() ? '' : null\"\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 (value instanceof NumberWithUnit) {\n return value\n } else 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\nexport function isElementInput(value: any): value is ElementInput {\n return value instanceof Element || value instanceof ElementRef\n}\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\nexport function isFalsy(value: any): boolean {\n if (value == null) {\n return true\n } else if (Array.isArray(value)) {\n return value.length === 0\n } else if (isPlainObject(value)) {\n return Object.keys(value).length === 0\n } else if (value instanceof Set) {\n return value.size === 0\n } else if (value instanceof Map) {\n return value.size === 0\n } else if (typeof value === \"string\") {\n return value.length === 0\n } else if (typeof value === \"number\") {\n return isNaN(value) || value === 0\n }\n return value === false\n}\n\nexport function isTruthy(value: any): boolean {\n return !isFalsy(value)\n}\n","import { takeUntilDestroyed } from \"@angular/core/rxjs-interop\"\nimport { FormControl } from \"@angular/forms\"\n\nimport { debounceTime, distinctUntilChanged, map, Observable, shareReplay, startWith } from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { isFalsy } from \"../util\"\n\nexport interface ObservableOptions {\n distinct?: boolean\n destruct?: boolean\n}\n\nexport interface ObservableValueOptions extends ObservableOptions {\n debounce?: number\n falsyToNull?: boolean\n}\n\nexport type FormControlProperties =\n | \"valid\"\n | \"invalid\"\n | \"status\"\n | \"pristine\"\n | \"dirty\"\n | \"touched\"\n | \"untouched\"\n | \"disabled\"\n | \"enabled\"\n | \"errors\"\n\nexport const DEFAULT: ObservableOptions = { distinct: true, destruct: true }\nexport const VALUE_DEFAULT: ObservableValueOptions = { ...DEFAULT, falsyToNull: true }\n\nexport function fcObservableValue<T, O extends ObservableValueOptions>(\n fc: FormControl<T>,\n opts: O = VALUE_DEFAULT as any\n): Observable<O extends { falsyToNull: true } ? T | null : T> {\n let result: Observable<any> = fc.valueChanges.pipe(\n startWith(null),\n map(() => fc.value)\n )\n\n if (opts.debounce) {\n result = result.pipe(debounceTime(opts.debounce))\n }\n\n if (opts.falsyToNull) {\n result = result.pipe(map(v => (isFalsy(v) ? null : v)))\n }\n\n return handleCommonOptions(result, opts) as any\n}\n\nexport function fcObservableProperty<T, P extends FormControlProperties>(\n fc: FormControl<T>,\n property: P,\n opts: ObservableOptions = DEFAULT\n): Observable<FormControl<T>[P]> {\n const result = fc.statusChanges.pipe(\n startWith(null),\n map(() => fc[property])\n )\n\n return handleCommonOptions(result, opts)\n}\n\nfunction handleCommonOptions<T>(o: Observable<T>, opts: ObservableOptions): Observable<T> {\n if (opts.distinct) {\n o = o.pipe(distinctUntilChanged(isEqual))\n }\n\n if (opts.destruct) {\n o = o.pipe(takeUntilDestroyed())\n }\n\n return o.pipe(shareReplay(1))\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 {\n catchError,\n concat,\n concatMap,\n filter,\n forkJoin,\n from,\n map,\n Observable,\n ObservableInput,\n of,\n reduce,\n ReplaySubject,\n scan,\n share,\n shareReplay,\n Subject,\n Subscriber,\n take,\n takeLast,\n takeUntil,\n takeWhile,\n tap,\n throwError\n} from \"rxjs\"\n\nimport { flatten } from \"lodash\"\n\nexport type LifecycleHandler = () => ObservableInput<unknown> | null | undefined | void\n\nexport class StopLifecycle extends Error {}\n\nexport type LifecycleOptions = Record<string, { order?: \"parallel\" | \"sequential\"; cancellable?: boolean }>\n\nexport type LifecycleRemap<A, B> =\n A extends Lifecycle<infer AO, infer AS>\n ? B extends Lifecycle<infer BO, infer BS>\n ? Partial<{ [K in AS]: BS }>\n : never\n : never\n\nexport class Lifecycle<T extends LifecycleOptions, S extends keyof T = keyof T> {\n readonly states: T\n readonly #handlers: Partial<Record<S, Array<LifecycleHandler>>> = {}\n\n readonly #until = new Subject<void>()\n readonly #trigger = new Subject<S>()\n readonly #status = this.#trigger.pipe(\n takeUntil(this.#until),\n scan(\n (result, trigger) => {\n if (!result[trigger]) {\n result[trigger] = this.#run(trigger as S).pipe(\n tap(executed => {\n if (executed === false) {\n delete result[trigger]\n }\n }),\n map(executed => [trigger, !!executed] as [S, boolean]),\n shareReplay(1)\n )\n }\n return result\n },\n {} as Record<S, Observable<[S, boolean]>>\n ),\n concatMap(triggers => {\n const srcs = Object.values(triggers) as Array<Observable<[S, boolean]>>\n return concat(...srcs).pipe(\n takeWhile(([_, executed]) => executed, false),\n reduce(\n (result, [name, executed]) => {\n return { ...result, [name]: executed }\n },\n {} as Record<S, boolean>\n )\n )\n }),\n tap(status => {\n if (this.#handlers == null) {\n return\n }\n\n for (const [k, v] of Object.entries(status)) {\n if (v) {\n delete (this.#handlers as any)[k]\n }\n }\n }),\n share()\n )\n\n readonly status$ = this.#status.pipe(shareReplay(1))\n readonly current$ = new ReplaySubject<S>()\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: LifecycleHandler) {\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 onExecute(state: S) {\n return this.current$.pipe(\n takeUntil(this.#until),\n filter(current => current === state)\n )\n }\n\n onDone(state: S) {\n return this.status$.pipe(\n filter(status => status[state]),\n take(1)\n )\n }\n\n run(...states: Array<S | S[]>) {\n const flattened = flatten(states).filter((v, i, a) => a.indexOf(v) === i)\n const expectedCount = flattened.length\n return new Observable((dest: Subscriber<void>) => {\n dest.add(\n this.#status.subscribe(currentStatus => {\n const executedCount = Object.entries(currentStatus).reduce(\n (result, [name, done]) => result + (done && flattened.includes(name as S) ? 1 : 0),\n 0\n )\n\n if (executedCount >= expectedCount) {\n dest.next()\n dest.complete()\n }\n })\n )\n\n for (const s of flattened) {\n this.#trigger.next(s)\n }\n })\n }\n\n /**\n * Run this state changes on other state\n */\n control<T extends Lifecycle<any, any>>(state: T, remap?: LifecycleRemap<this, T>) {\n const remove: Array<() => void> = []\n\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 destroy() {\n ;(this as any).#handlers = null\n this.#until.next()\n this.#until.complete()\n }\n\n #run(state: S) {\n if (this.#handlers == null || !this.states[state]) {\n return of(true)\n }\n\n return new Observable((dest: Subscriber<boolean>) => {\n this.current$.next(state)\n\n const handlers = this.#handlers[state]\n if (handlers == null || handlers.length === 0) {\n dest.next(true)\n dest.complete()\n return\n }\n\n const observables: Array<Observable<any>> = handlers.map(handler => {\n const observable = handler()\n if (observable == null) {\n return of(null)\n } else {\n return from(observable)\n }\n })\n\n const config = this.states[state]\n\n if (observables.length === 1) {\n return observables[0].pipe(map(() => true)).subscribe(dest)\n } else if (config.order === \"parallel\") {\n return forkJoin(observables)\n .pipe(map(() => true))\n .subscribe(dest)\n } else if (config.order === \"sequential\") {\n return concat(...observables)\n .pipe(map(() => true))\n .subscribe(dest)\n } else {\n dest.next(true)\n dest.complete()\n }\n\n return\n }).pipe(\n takeLast(1),\n catchError(error => {\n if (error instanceof StopLifecycle) {\n return of(false)\n } else {\n return throwError(() => error)\n }\n })\n )\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_isPlainObject"],"mappings":"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"}
1
+ {"version":3,"file":"ngutil-common.mjs","sources":["../../../../packages/common/src/destruct.ts","../../../../packages/common/src/number-with-unit.ts","../../../../packages/common/src/util.ts","../../../../packages/common/src/coerce/bool-attr.ts","../../../../packages/common/src/coerce/element.ts","../../../../packages/common/src/form/observable.ts","../../../../packages/common/src/unngzone.ts","../../../../packages/common/src/dom.ts","../../../../packages/common/src/lifecycle.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","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 (value instanceof NumberWithUnit) {\n return value\n } else 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","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\nexport function isFalsy(value: any): boolean {\n if (value == null) {\n return true\n } else if (Array.isArray(value)) {\n return value.length === 0\n } else if (isPlainObject(value)) {\n return Object.keys(value).length === 0\n } else if (value instanceof Set) {\n return value.size === 0\n } else if (value instanceof Map) {\n return value.size === 0\n } else if (typeof value === \"string\") {\n return value.length === 0\n } else if (typeof value === \"number\") {\n return isNaN(value) || value === 0\n }\n return value === false\n}\n\nexport function isTruthy(value: any): boolean {\n return !isFalsy(value)\n}\n","import { isTruthy } from \"../util\"\n\nexport type BooleanInput = string | boolean | null | undefined\n\nexport function coerceBoolAttr(value: BooleanInput): boolean {\n return isTruthy(value) || (typeof value === \"string\" && 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\nexport function isElementInput(value: any): value is ElementInput {\n return value instanceof Element || value instanceof ElementRef\n}\n","import { takeUntilDestroyed } from \"@angular/core/rxjs-interop\"\nimport { FormControl } from \"@angular/forms\"\n\nimport { debounceTime, distinctUntilChanged, map, Observable, shareReplay, startWith } from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { isFalsy } from \"../util\"\n\nexport interface ObservableOptions {\n distinct?: boolean\n destruct?: boolean\n}\n\nexport interface ObservableValueOptions extends ObservableOptions {\n debounce?: number\n falsyToNull?: boolean\n}\n\nexport type FormControlProperties =\n | \"valid\"\n | \"invalid\"\n | \"status\"\n | \"pristine\"\n | \"dirty\"\n | \"touched\"\n | \"untouched\"\n | \"disabled\"\n | \"enabled\"\n | \"errors\"\n\nexport const DEFAULT: ObservableOptions = { distinct: true, destruct: true }\nexport const VALUE_DEFAULT: ObservableValueOptions = { ...DEFAULT, falsyToNull: true }\n\nexport function fcObservableValue<T, O extends ObservableValueOptions>(\n fc: FormControl<T>,\n opts: O = VALUE_DEFAULT as any\n): Observable<O extends { falsyToNull: true } ? T | null : T> {\n let result: Observable<any> = fc.valueChanges.pipe(\n startWith(null),\n map(() => fc.value)\n )\n\n if (opts.debounce) {\n result = result.pipe(debounceTime(opts.debounce))\n }\n\n if (opts.falsyToNull) {\n result = result.pipe(map(v => (isFalsy(v) ? null : v)))\n }\n\n return handleCommonOptions(result, opts) as any\n}\n\nexport function fcObservableProperty<T, P extends FormControlProperties>(\n fc: FormControl<T>,\n property: P,\n opts: ObservableOptions = DEFAULT\n): Observable<FormControl<T>[P]> {\n const result = fc.statusChanges.pipe(\n startWith(null),\n map(() => fc[property])\n )\n\n return handleCommonOptions(result, opts)\n}\n\nfunction handleCommonOptions<T>(o: Observable<T>, opts: ObservableOptions): Observable<T> {\n if (opts.distinct) {\n o = o.pipe(distinctUntilChanged(isEqual))\n }\n\n if (opts.destruct) {\n o = o.pipe(takeUntilDestroyed())\n }\n\n return o.pipe(shareReplay(1))\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 {\n catchError,\n concat,\n concatMap,\n filter,\n forkJoin,\n from,\n map,\n Observable,\n ObservableInput,\n of,\n reduce,\n ReplaySubject,\n scan,\n share,\n shareReplay,\n Subject,\n Subscriber,\n take,\n takeLast,\n takeUntil,\n takeWhile,\n tap,\n throwError\n} from \"rxjs\"\n\nimport { flatten } from \"lodash\"\n\nexport type LifecycleHandler = () => ObservableInput<unknown> | null | undefined | void\n\nexport class StopLifecycle extends Error {}\n\nexport type LifecycleOptions = Record<string, { order?: \"parallel\" | \"sequential\"; cancellable?: boolean }>\n\nexport type LifecycleRemap<A, B> =\n A extends Lifecycle<infer AO, infer AS>\n ? B extends Lifecycle<infer BO, infer BS>\n ? Partial<{ [K in AS]: BS }>\n : never\n : never\n\nexport class Lifecycle<T extends LifecycleOptions, S extends keyof T = keyof T> {\n readonly states: T\n readonly #handlers: Partial<Record<S, Array<LifecycleHandler>>> = {}\n\n readonly #until = new Subject<void>()\n readonly #trigger = new Subject<S>()\n readonly #status = this.#trigger.pipe(\n takeUntil(this.#until),\n scan(\n (result, trigger) => {\n if (!result[trigger]) {\n result[trigger] = this.#run(trigger as S).pipe(\n tap(executed => {\n if (executed === false) {\n delete result[trigger]\n }\n }),\n map(executed => [trigger, !!executed] as [S, boolean]),\n shareReplay(1)\n )\n }\n return result\n },\n {} as Record<S, Observable<[S, boolean]>>\n ),\n concatMap(triggers => {\n const srcs = Object.values(triggers) as Array<Observable<[S, boolean]>>\n return concat(...srcs).pipe(\n takeWhile(([_, executed]) => executed, false),\n reduce(\n (result, [name, executed]) => {\n return { ...result, [name]: executed }\n },\n {} as Record<S, boolean>\n )\n )\n }),\n tap(status => {\n if (this.#handlers == null) {\n return\n }\n\n for (const [k, v] of Object.entries(status)) {\n if (v) {\n delete (this.#handlers as any)[k]\n }\n }\n }),\n share()\n )\n\n readonly status$ = this.#status.pipe(shareReplay(1))\n readonly current$ = new ReplaySubject<S>()\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: LifecycleHandler) {\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 onExecute(state: S) {\n return this.current$.pipe(\n takeUntil(this.#until),\n filter(current => current === state)\n )\n }\n\n onDone(state: S) {\n return this.status$.pipe(\n filter(status => status[state]),\n take(1)\n )\n }\n\n run(...states: Array<S | S[]>) {\n const flattened = flatten(states).filter((v, i, a) => a.indexOf(v) === i)\n const expectedCount = flattened.length\n return new Observable((dest: Subscriber<void>) => {\n dest.add(\n this.#status.subscribe(currentStatus => {\n const executedCount = Object.entries(currentStatus).reduce(\n (result, [name, done]) => result + (done && flattened.includes(name as S) ? 1 : 0),\n 0\n )\n\n if (executedCount >= expectedCount) {\n dest.next()\n dest.complete()\n }\n })\n )\n\n for (const s of flattened) {\n this.#trigger.next(s)\n }\n })\n }\n\n /**\n * Run this state changes on other state\n */\n control<T extends Lifecycle<any, any>>(state: T, remap?: LifecycleRemap<this, T>) {\n const remove: Array<() => void> = []\n\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 destroy() {\n ;(this as any).#handlers = null\n this.#until.next()\n this.#until.complete()\n }\n\n #run(state: S) {\n if (this.#handlers == null || !this.states[state]) {\n return of(true)\n }\n\n return new Observable((dest: Subscriber<boolean>) => {\n this.current$.next(state)\n\n const handlers = this.#handlers[state]\n if (handlers == null || handlers.length === 0) {\n dest.next(true)\n dest.complete()\n return\n }\n\n const observables: Array<Observable<any>> = handlers.map(handler => {\n const observable = handler()\n if (observable == null) {\n return of(null)\n } else {\n return from(observable)\n }\n })\n\n const config = this.states[state]\n\n if (observables.length === 1) {\n return observables[0].pipe(map(() => true)).subscribe(dest)\n } else if (config.order === \"parallel\") {\n return forkJoin(observables)\n .pipe(map(() => true))\n .subscribe(dest)\n } else if (config.order === \"sequential\") {\n return concat(...observables)\n .pipe(map(() => true))\n .subscribe(dest)\n } else {\n dest.next(true)\n dest.complete()\n }\n\n return\n }).pipe(\n takeLast(1),\n catchError(error => {\n if (error instanceof StopLifecycle) {\n return of(false)\n } else {\n return throwError(() => error)\n }\n })\n )\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
@@ -1,13 +1,11 @@
1
1
  export { ConnectProtocol } from "./connect-protocol";
2
2
  export { Destruct, Destructible, IDisposable } from "./destruct";
3
- export { DisabledState, Disabled } from "./disabled";
4
3
  export { NumberWithUnit, NumberWithUnitInput, UNIT_REGEX, NUMBER_REGEX } from "./number-with-unit";
5
4
  export { coerceBoolAttr, BooleanInput } from "./coerce/bool-attr";
6
5
  export { coerceElement, ElementInput, isElementInput } from "./coerce/element";
7
6
  export * from "./form";
8
7
  export { rawCancelAnimationFrame, rawClearInterval, rawClearTimeout, rawRequestAnimationFrame, rawSetInterval, rawSetTimeout, __zone_symbol__ } from "./unngzone";
9
8
  export { FastDOM } from "./dom";
10
- export { Busy, BusyEvent, BusyEventParams, BusyProgress, BusyTrackerState, BusyTracker } from "./busy";
11
9
  export { Concat } from "./types/concat";
12
10
  export { Eval, IfAny, IsAny, IfTuple, IsTuple, TupleItems, ObjectKey, MaxRecursion } from "./types/util";
13
11
  export { Flatten, FlattenKeys } from "./types/flatten";
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@ngutil/common",
3
- "version": "0.0.52",
3
+ "version": "0.0.55",
4
4
  "peerDependencies": {
5
- "@angular/cdk": "^17.3.6",
6
- "@angular/core": "^17.3.6",
5
+ "@angular/cdk": "18.2.6",
6
+ "@angular/core": "18.2.6",
7
7
  "lodash": "^4.17.21",
8
8
  "rxjs": "^7.8.1",
9
9
  "utility-types": "^3.11.0"
package/unngzone.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  export declare const Zone: any;
2
2
  export declare function __zone_symbol__<T extends string>(val: T): T;
3
- export declare const rawSetTimeout: ((handler: TimerHandler, timeout?: number | undefined, ...arguments: any[]) => number) & typeof setTimeout;
3
+ export declare const rawSetTimeout: ((handler: TimerHandler, timeout?: number, ...arguments: any[]) => number) & typeof setTimeout;
4
4
  export declare const rawClearTimeout: ((id: number | undefined) => void) & typeof clearTimeout;
5
- export declare const rawSetInterval: ((handler: TimerHandler, timeout?: number | undefined, ...arguments: any[]) => number) & typeof setInterval;
5
+ export declare const rawSetInterval: ((handler: TimerHandler, timeout?: number, ...arguments: any[]) => number) & typeof setInterval;
6
6
  export declare const rawClearInterval: ((id: number | undefined) => void) & typeof clearInterval;
7
7
  export declare const rawRequestAnimationFrame: ((callback: FrameRequestCallback) => number) & typeof requestAnimationFrame;
8
8
  export declare const rawCancelAnimationFrame: ((handle: number) => void) & typeof cancelAnimationFrame;
package/busy.d.ts DELETED
@@ -1,98 +0,0 @@
1
- import { InputSignal, Signal } from "@angular/core";
2
- import { Observable } from "rxjs";
3
- import { ConnectProtocol } from "./connect-protocol";
4
- import * as i0 from "@angular/core";
5
- export type BusyProgress = {
6
- total: number;
7
- current: number;
8
- message?: string;
9
- };
10
- export type BusyEventParams = {
11
- busy?: boolean;
12
- progress?: BusyProgress;
13
- };
14
- export type BusyEvent = {
15
- name: string;
16
- } & BusyEventParams;
17
- export type BusyConnectable = Observable<boolean | BusyEventParams> | BusyTracker<any> | Signal<boolean>;
18
- export declare class BusyTrackerState<T extends string> implements ConnectProtocol {
19
- #private;
20
- readonly current$: Observable<this>;
21
- get isBusy(): boolean;
22
- get progress(): BusyProgress | undefined;
23
- is(name: T): boolean;
24
- has(name: T): boolean;
25
- set(name: T, busy: boolean | undefined, progress?: BusyProgress): void;
26
- get(name: T): BusyEventParams | undefined;
27
- keys(): string[];
28
- entries(): [string, BusyEventParams][];
29
- connect(o: Observable<typeof this> | typeof this, prefix?: string): Observable<unknown>;
30
- }
31
- /**
32
- * ```ts
33
- * @Component({
34
- * provides: [BusyTracker],
35
- * template: `
36
- * <spinner *ngIf="busy.is('reload') | async">
37
- * <spinner *ngIf="busy.any | async">
38
- * <button nuBusy="reload"></button>
39
- * `
40
- * })
41
- * export class Grid {
42
- * readonly busy = inject(BusyTracker<"create" | "reload" | "update" | "delete">)
43
- * }
44
- * ```
45
- */
46
- export declare class BusyTracker<T extends string> implements ConnectProtocol {
47
- private readonly parent?;
48
- private readonly destroyRef;
49
- private readonly _state;
50
- readonly state$: Observable<BusyTrackerState<T>>;
51
- readonly state: Signal<BusyTrackerState<T>>;
52
- readonly any: Signal<boolean>;
53
- readonly progress: Signal<BusyProgress | undefined>;
54
- constructor(parent?: BusyTracker<any> | undefined);
55
- init(name: T, busy: boolean, progress?: BusyProgress): void;
56
- set(name: T, busy: boolean, progress?: BusyProgress): void;
57
- is(name: T): Observable<boolean>;
58
- watch(name: T): Observable<BusyEventParams | undefined>;
59
- /**
60
- * ```ts
61
- * observable.pipe(this.busy.rx("save"))
62
- * ```
63
- */
64
- rx(name: T): <S>(src: Observable<S>) => Observable<S>;
65
- connect(value: BusyConnectable, name?: T): Observable<unknown>;
66
- static ɵfac: i0.ɵɵFactoryDeclaration<BusyTracker<any>, [{ optional: true; skipSelf: true; }]>;
67
- static ɵprov: i0.ɵɵInjectableDeclaration<BusyTracker<any>>;
68
- }
69
- /**
70
- * ```ts
71
- * @Component({
72
- * template: `
73
- * <button nuBusy="save">SAVE</button>
74
- * <progress nuBusy="fileUpload">
75
- * <progress nuBusy="*">
76
- * `
77
- * })
78
- * ```
79
- */
80
- export declare class Busy<T extends string> implements ConnectProtocol {
81
- #private;
82
- readonly tracker: BusyTracker<T>;
83
- readonly name: InputSignal<T>;
84
- readonly state$: Observable<{
85
- isBusy: boolean;
86
- isOthersBusy: boolean;
87
- progress: BusyProgress | undefined;
88
- }>;
89
- readonly isBusy$: Observable<boolean>;
90
- readonly isBusy: Signal<boolean | undefined>;
91
- readonly isOthersBusy$: Observable<boolean>;
92
- readonly isOthersBusy: Signal<boolean | undefined>;
93
- readonly progress$: Observable<BusyProgress | undefined>;
94
- readonly progress: Signal<BusyProgress | undefined>;
95
- connect(value: BusyConnectable): Observable<unknown>;
96
- static ɵfac: i0.ɵɵFactoryDeclaration<Busy<any>, never>;
97
- static ɵdir: i0.ɵɵDirectiveDeclaration<Busy<any>, "[nuBusy]", ["nuBusy"], { "name": { "alias": "nuBusy"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
98
- }
package/disabled.d.ts DELETED
@@ -1,38 +0,0 @@
1
- import { Signal } from "@angular/core";
2
- import * as i0 from "@angular/core";
3
- /**
4
- * @example
5
- * ```typescript
6
- * @Component({
7
- * standalone: true,
8
- * hostDirectives: [DisabledState],
9
- * template: `<button [disabled]="disabledState.isDisabled()">Submit</button>`,
10
- * })
11
- * export class Button {
12
- * readonly disabledState = inject(DisabledState)
13
- * }
14
- * ```
15
- */
16
- export declare class DisabledState {
17
- #private;
18
- readonly isDisabled: Signal<boolean>;
19
- constructor();
20
- set(value: boolean): void;
21
- static ɵfac: i0.ɵɵFactoryDeclaration<DisabledState, never>;
22
- static ɵdir: i0.ɵɵDirectiveDeclaration<DisabledState, never, ["nuDisabled"], {}, {}, never, never, true, never>;
23
- }
24
- /**
25
- * @example
26
- * ```html
27
- * <form nuDisabled nuBusy="submit">
28
- * <button [nuDisabled]="form.invalid" nuBusy="submit">Submit</button>
29
- * </form>
30
- * ```
31
- */
32
- export declare class Disabled {
33
- #private;
34
- readonly nuDisabled: import("@angular/core").InputSignal<boolean>;
35
- constructor();
36
- static ɵfac: i0.ɵɵFactoryDeclaration<Disabled, never>;
37
- static ɵdir: i0.ɵɵDirectiveDeclaration<Disabled, "[nuDisabled]", never, { "nuDisabled": { "alias": "nuDisabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof DisabledState; inputs: {}; outputs: {}; }]>;
38
- }
package/esm2022/busy.mjs DELETED
@@ -1,251 +0,0 @@
1
- import { computed, DestroyRef, Directive, inject, Inject, Injectable, input, isSignal, Optional, SkipSelf } from "@angular/core";
2
- import { takeUntilDestroyed, toObservable, toSignal } from "@angular/core/rxjs-interop";
3
- import { BehaviorSubject, combineLatest, filter, finalize, isObservable, map, Observable, scan, shareReplay, switchMap, tap, throwError } from "rxjs";
4
- import { isEqual } from "lodash";
5
- import * as i0 from "@angular/core";
6
- export class BusyTrackerState {
7
- constructor() {
8
- this.#events = new BehaviorSubject(null);
9
- this.#data = {};
10
- this.current$ = this.#events.pipe(scan((state, current) => {
11
- if (current == null) {
12
- return state;
13
- }
14
- if (current.busy == null) {
15
- delete state[current.name];
16
- }
17
- else {
18
- state[current.name] = { busy: current.busy, progress: current.progress };
19
- }
20
- return state;
21
- }, {}), tap(state => (this.#data = state)), map(() => this), shareReplay(1));
22
- }
23
- #events;
24
- #data;
25
- get isBusy() {
26
- return Object.values(this.#data).some(v => v.busy);
27
- }
28
- get progress() {
29
- let total = 0;
30
- let current = 0;
31
- const messages = [];
32
- for (const v of Object.values(this.#data)) {
33
- if (v.progress) {
34
- total += v.progress.total;
35
- current += v.progress.current;
36
- if (v.progress.message) {
37
- messages.push(v.progress.message);
38
- }
39
- }
40
- }
41
- if (total !== 0 && current !== 0) {
42
- return { total, current, message: messages.length > 0 ? messages.join("\n") : undefined };
43
- }
44
- return undefined;
45
- }
46
- is(name) {
47
- return this.#data[name]?.busy === true;
48
- }
49
- has(name) {
50
- return this.#data[name] != null;
51
- }
52
- set(name, busy, progress) {
53
- const current = this.#data[name];
54
- if (current == null || current.busy !== busy || !isEqual(current.progress, progress)) {
55
- this.#events.next({ name, busy, progress });
56
- }
57
- }
58
- get(name) {
59
- return this.#data[name];
60
- }
61
- keys() {
62
- return Object.keys(this.#data);
63
- }
64
- entries() {
65
- return Object.entries(this.#data);
66
- }
67
- connect(o, prefix) {
68
- if (o instanceof BusyTrackerState) {
69
- return this.connect(o.current$, prefix);
70
- }
71
- else {
72
- return new Observable(() => {
73
- const otherKeys = [];
74
- const sub = o.subscribe(otherState => {
75
- for (const [k, v] of otherState.entries()) {
76
- const key = prefix ? `${prefix}-${k}` : k;
77
- if (!otherKeys.includes(key)) {
78
- otherKeys.push(key);
79
- }
80
- this.set(key, v.busy, v.progress);
81
- }
82
- });
83
- return () => {
84
- sub.unsubscribe();
85
- for (const k of otherKeys) {
86
- this.set(k, undefined, undefined);
87
- }
88
- };
89
- });
90
- }
91
- }
92
- }
93
- /**
94
- * ```ts
95
- * @Component({
96
- * provides: [BusyTracker],
97
- * template: `
98
- * <spinner *ngIf="busy.is('reload') | async">
99
- * <spinner *ngIf="busy.any | async">
100
- * <button nuBusy="reload"></button>
101
- * `
102
- * })
103
- * export class Grid {
104
- * readonly busy = inject(BusyTracker<"create" | "reload" | "update" | "delete">)
105
- * }
106
- * ```
107
- */
108
- export class BusyTracker {
109
- constructor(parent) {
110
- this.parent = parent;
111
- this.destroyRef = inject(DestroyRef);
112
- this._state = this.parent
113
- ? this.parent._state
114
- : new BusyTrackerState();
115
- this.state$ = this._state.current$;
116
- this.state = toSignal(this.state$, { requireSync: true });
117
- this.any = computed(() => this.state().isBusy);
118
- this.progress = computed(() => this.state().progress);
119
- }
120
- init(name, busy, progress) {
121
- const state = this.state();
122
- if (!state.has(name)) {
123
- this.set(name, busy, progress);
124
- }
125
- }
126
- set(name, busy, progress) {
127
- this._state.set(name, busy, progress);
128
- }
129
- is(name) {
130
- return this.state$.pipe(map(state => state.is(name)));
131
- }
132
- watch(name) {
133
- return this.state$.pipe(map(state => state.get(name)));
134
- }
135
- /**
136
- * ```ts
137
- * observable.pipe(this.busy.rx("save"))
138
- * ```
139
- */
140
- rx(name) {
141
- return (src) => src.pipe(tap(() => this.set(name, true)), finalize(() => this.set(name, false)));
142
- }
143
- connect(value, name) {
144
- if (isObservable(value)) {
145
- if (name == null) {
146
- return throwError(() => new Error("Missing `name` param"));
147
- }
148
- return new Observable(() => {
149
- const sub = value.subscribe(busyValue => {
150
- if (typeof busyValue === "boolean") {
151
- this.set(name, busyValue);
152
- }
153
- else {
154
- this.set(name, !!busyValue.busy, busyValue.progress);
155
- }
156
- });
157
- return sub.unsubscribe.bind(sub);
158
- }).pipe(takeUntilDestroyed(this.destroyRef));
159
- }
160
- else if (value instanceof BusyTracker) {
161
- return this._state.connect(value.state$, name).pipe(takeUntilDestroyed(this.destroyRef));
162
- }
163
- else if (isSignal(value)) {
164
- return this.connect(toObservable(value), name);
165
- }
166
- return throwError(() => new Error("Unsupported Busy source"));
167
- }
168
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: BusyTracker, deps: [{ token: BusyTracker, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
169
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: BusyTracker }); }
170
- }
171
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: BusyTracker, decorators: [{
172
- type: Injectable
173
- }], ctorParameters: () => [{ type: BusyTracker, decorators: [{
174
- type: Inject,
175
- args: [BusyTracker]
176
- }, {
177
- type: SkipSelf
178
- }, {
179
- type: Optional
180
- }] }] });
181
- // TODO: BusyState directive
182
- /**
183
- * ```ts
184
- * @Component({
185
- * template: `
186
- * <button nuBusy="save">SAVE</button>
187
- * <progress nuBusy="fileUpload">
188
- * <progress nuBusy="*">
189
- * `
190
- * })
191
- * ```
192
- */
193
- export class Busy {
194
- constructor() {
195
- this.tracker = inject(BusyTracker, { skipSelf: true });
196
- this.name = input.required({ alias: "nuBusy" });
197
- this.#name = toObservable(this.name);
198
- this.state$ = combineLatest({ name: this.#name, state: this.tracker.state$ }).pipe(map(({ name, state }) => {
199
- if (name === "*") {
200
- const isBusy = state.isBusy;
201
- return {
202
- isBusy: isBusy,
203
- isOthersBusy: isBusy,
204
- progress: state.progress
205
- };
206
- }
207
- const self = state.get(name);
208
- if (self) {
209
- const isBusy = self.busy === true;
210
- return {
211
- isBusy: isBusy,
212
- isOthersBusy: state.isBusy && !isBusy,
213
- progress: self.progress
214
- };
215
- }
216
- else {
217
- return {
218
- isBusy: false,
219
- isOthersBusy: state.isBusy,
220
- progress: undefined
221
- };
222
- }
223
- }), shareReplay(1));
224
- this.isBusy$ = this.state$.pipe(map(v => v.isBusy), shareReplay(1));
225
- this.isBusy = toSignal(this.isBusy$, { rejectErrors: true });
226
- this.isOthersBusy$ = this.state$.pipe(map(v => v.isOthersBusy), shareReplay(1));
227
- this.isOthersBusy = toSignal(this.isOthersBusy$, { rejectErrors: true });
228
- this.progress$ = this.state$.pipe(map(v => v.progress), shareReplay(1));
229
- this.progress = toSignal(this.progress$, { rejectErrors: true });
230
- }
231
- #name;
232
- connect(value) {
233
- return new Observable(() => {
234
- const tsub = this.#name
235
- .pipe(filter(name => name !== "*"), switchMap(name => this.tracker.connect(value, name)))
236
- .subscribe();
237
- return tsub.unsubscribe.bind(tsub);
238
- });
239
- }
240
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Busy, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
241
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.6", type: Busy, isStandalone: true, selector: "[nuBusy]", inputs: { name: { classPropertyName: "name", publicName: "nuBusy", isSignal: true, isRequired: true, transformFunction: null } }, exportAs: ["nuBusy"], ngImport: i0 }); }
242
- }
243
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Busy, decorators: [{
244
- type: Directive,
245
- args: [{
246
- standalone: true,
247
- selector: "[nuBusy]",
248
- exportAs: "nuBusy"
249
- }]
250
- }] });
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvYnVzeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsUUFBUSxFQUNSLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixVQUFVLEVBQ1YsS0FBSyxFQUVMLFFBQVEsRUFDUixRQUFRLEVBRVIsUUFBUSxFQUNYLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFdkYsT0FBTyxFQUNILGVBQWUsRUFDZixhQUFhLEVBQ2IsTUFBTSxFQUNOLFFBQVEsRUFDUixZQUFZLEVBQ1osR0FBRyxFQUNILFVBQVUsRUFDVixJQUFJLEVBQ0osV0FBVyxFQUNYLFNBQVMsRUFDVCxHQUFHLEVBQ0gsVUFBVSxFQUNiLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQTs7QUFVaEMsTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQUNhLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBbUIsSUFBSSxDQUFDLENBQUE7UUFFOUQsVUFBSyxHQUF1QyxFQUFFLENBQUE7UUFFckMsYUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNqQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDcEIsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sS0FBSyxDQUFBO1lBQ2hCLENBQUM7WUFFRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUM5QixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osS0FBSyxDQUFDLE9B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S0FBSztpQkFDbEIsSUFBSSxDQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFDNUIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQ3ZEO2lCQUNBLFNBQVMsRUFBRSxDQUFBO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdEMsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDOzhHQWhFUSxJQUFJO2tHQUFKLElBQUk7OzJGQUFKLElBQUk7a0JBTGhCLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxVQUFVO29CQUNwQixRQUFRLEVBQUUsUUFBUTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGNvbXB1dGVkLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIGluamVjdCxcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBpbnB1dCxcbiAgICBJbnB1dFNpZ25hbCxcbiAgICBpc1NpZ25hbCxcbiAgICBPcHRpb25hbCxcbiAgICBTaWduYWwsXG4gICAgU2tpcFNlbGZcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wXCJcblxuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgY29tYmluZUxhdGVzdCxcbiAgICBmaWx0ZXIsXG4gICAgZmluYWxpemUsXG4gICAgaXNPYnNlcnZhYmxlLFxuICAgIG1hcCxcbiAgICBPYnNlcnZhYmxlLFxuICAgIHNjYW4sXG4gICAgc2hhcmVSZXBsYXksXG4gICAgc3dpdGNoTWFwLFxuICAgIHRhcCxcbiAgICB0aHJvd0Vycm9yXG59IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gXCJsb2Rhc2hcIlxuXG5pbXBvcnQgeyBDb25uZWN0UHJvdG9jb2wgfSBmcm9tIFwiLi9jb25uZWN0LXByb3RvY29sXCJcblxuZXhwb3J0IHR5cGUgQnVzeVByb2dyZXNzID0geyB0b3RhbDogbnVtYmVyOyBjdXJyZW50OiBudW1iZXI7IG1lc3NhZ2U/OiBzdHJpbmcgfVxuZXhwb3J0IHR5cGUgQnVzeUV2ZW50UGFyYW1zID0geyBidXN5PzogYm9vbGVhbjsgcHJvZ3Jlc3M/OiBCdXN5UHJvZ3Jlc3MgfVxuZXhwb3J0IHR5cGUgQnVzeUV2ZW50ID0geyBuYW1lOiBzdHJpbmcgfSAmIEJ1c3lFdmVudFBhcmFtc1xuXG5leHBvcnQgdHlwZSBCdXN5Q29ubmVjdGFibGUgPSBPYnNlcnZhYmxlPGJvb2xlYW4gfCBCdXN5RXZlbnRQYXJhbXM+IHwgQnVzeVRyYWNrZXI8YW55PiB8IFNpZ25hbDxib29sZWFuPlxuXG5leHBvcnQgY2xhc3MgQnVzeVRyYWNrZXJTdGF0ZTxUIGV4dGVuZHMgc3RyaW5nPiBpbXBsZW1lbnRzIENvbm5lY3RQcm90b2NvbCB7XG4gICAgcmVhZG9ubHkgI2V2ZW50cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QnVzeUV2ZW50IHwgbnVsbD4obnVsbClcblxuICAgICNkYXRhOiB7IFtrZXk6IHN0cmluZ106IEJ1c3lFdmVudFBhcmFtcyB9ID0ge31cblxuICAgIHJlYWRvbmx5IGN1cnJlbnQkID0gdGhpcy4jZXZlbnRzLnBpcGUoXG4gICAgICAgIHNjYW4oKHN0YXRlLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoY3VycmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50LmJ1c3kgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZVtjdXJyZW50Lm5hbWVdXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXRlW2N1cnJlbnQubmFtZV0gPSB7IGJ1c3k6IGN1cnJlbnQuYnVzeSwgcHJvZ3Jlc3M6IGN1cnJlbnQucHJvZ3Jlc3MgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICAgIH0sIHt9IGFzIGFueSksXG4gICAgICAgIHRhcChzdGF0ZSA9PiAodGhpcy4jZGF0YSA9IHN0YXRlKSksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICBnZXQgaXNCdXN5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLiNkYXRhKS5zb21lKHYgPT4gdi5idXN5KVxuICAgIH1cblxuICAgIGdldCBwcm9ncmVzcygpOiBCdXN5UHJvZ3Jlc3MgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgdG90YWwgPSAwXG4gICAgICAgIGxldCBjdXJyZW50ID0gMFxuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCB2IG9mIE9iamVjdC52YWx1ZXModGhpcy4jZGF0YSkpIHtcbiAgICAgICAgICAgIGlmICh2LnByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgdG90YWwgKz0gdi5wcm9ncmVzcy50b3RhbFxuICAgICAgICAgICAgICAgIGN1cnJlbnQgKz0gdi5wcm9ncmVzcy5jdXJyZW50XG4gICAgICAgICAgICAgICAgaWYgKHYucHJvZ3Jlc3MubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKHYucHJvZ3Jlc3MubWVzc2FnZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG90YWwgIT09IDAgJiYgY3VycmVudCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdG90YWwsIGN1cnJlbnQsIG1lc3NhZ2U6IG1lc3NhZ2VzLmxlbmd0aCA+IDAgPyBtZXNzYWdlcy5qb2luKFwiXFxuXCIpIDogdW5kZWZpbmVkIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpcyhuYW1lOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLiNkYXRhW25hbWVdPy5idXN5ID09PSB0cnVlXG4gICAgfVxuXG4gICAgaGFzKG5hbWU6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RhdGFbbmFtZV0gIT0gbnVsbFxuICAgIH1cblxuICAgIHNldChuYW1lOiBULCBidXN5OiBib29sZWFuIHwgdW5kZWZpbmVkLCBwcm9ncmVzcz86IEJ1c3lQcm9ncmVzcykge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy4jZGF0YVtuYW1lXVxuICAgICAgICBpZiAoY3VycmVudCA9PSBudWxsIHx8IGN1cnJlbnQuYnVzeSAhPT0gYnVzeSB8fCAhaXNFcXVhbChjdXJyZW50LnByb2dyZXNzLCBwcm9ncmVzcykpIHtcbiAgICAgICAgICAgIHRoaXMuI2V2ZW50cy5uZXh0KHsgbmFtZSwgYnVzeSwgcHJvZ3Jlc3MgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldChuYW1lOiBUKTogQnVzeUV2ZW50UGFyYW1zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RhdGFbbmFtZV1cbiAgICB9XG5cbiAgICBrZXlzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy4jZGF0YSlcbiAgICB9XG5cbiAgICBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy4jZGF0YSlcbiAgICB9XG5cbiAgICBjb25uZWN0KG86IE9ic2VydmFibGU8dHlwZW9mIHRoaXM+IHwgdHlwZW9mIHRoaXMsIHByZWZpeD86IHN0cmluZyk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgICAgICBpZiAobyBpbnN0YW5jZW9mIEJ1c3lUcmFja2VyU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Qoby5jdXJyZW50JCwgcHJlZml4KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlcktleXM6IHN0cmluZ1tdID0gW11cblxuICAgICAgICAgICAgICAgIGNvbnN0IHN1YiA9IG8uc3Vic2NyaWJlKG90aGVyU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBvdGhlclN0YXRlLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fS0ke2t9YCA6IGtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3RoZXJLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcktleXMucHVzaChrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChrZXkgYXMgVCwgdi5idXN5LCB2LnByb2dyZXNzKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBvdGhlcktleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGsgYXMgVCwgdW5kZWZpbmVkLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIGBgYHRzXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgcHJvdmlkZXM6IFtCdXN5VHJhY2tlcl0sXG4gKiAgIHRlbXBsYXRlOiBgXG4gKiAgICAgPHNwaW5uZXIgKm5nSWY9XCJidXN5LmlzKCdyZWxvYWQnKSB8IGFzeW5jXCI+XG4gKiAgICAgPHNwaW5uZXIgKm5nSWY9XCJidXN5LmFueSB8IGFzeW5jXCI+XG4gKiAgICAgPGJ1dHRvbiBudUJ1c3k9XCJyZWxvYWRcIj48L2J1dHRvbj5cbiAqICAgYFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBHcmlkIHtcbiAqICAgcmVhZG9ubHkgYnVzeSA9IGluamVjdChCdXN5VHJhY2tlcjxcImNyZWF0ZVwiIHwgXCJyZWxvYWRcIiB8IFwidXBkYXRlXCIgfCBcImRlbGV0ZVwiPilcbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQnVzeVRyYWNrZXI8VCBleHRlbmRzIHN0cmluZz4gaW1wbGVtZW50cyBDb25uZWN0UHJvdG9jb2wge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGUgPSB0aGlzLnBhcmVudFxuICAgICAgICA/ICh0aGlzLnBhcmVudCBhcyB1bmtub3duIGFzIHsgX3N0YXRlOiBCdXN5VHJhY2tlclN0YXRlPFQ+IH0pLl9zdGF0ZVxuICAgICAgICA6IG5ldyBCdXN5VHJhY2tlclN0YXRlKClcblxuICAgIHJlYWRvbmx5IHN0YXRlJCA9IHRoaXMuX3N0YXRlLmN1cnJlbnQkXG5cbiAgICByZWFkb25seSBzdGF0ZTogU2lnbmFsPEJ1c3lUcmFja2VyU3RhdGU8VD4+ID0gdG9TaWduYWwodGhpcy5zdGF0ZSQsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSlcblxuICAgIHJlYWRvbmx5IGFueSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUoKS5pc0J1c3kpXG5cbiAgICByZWFkb25seSBwcm9ncmVzcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUoKS5wcm9ncmVzcylcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoQnVzeVRyYWNrZXIpIEBTa2lwU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50PzogQnVzeVRyYWNrZXI8YW55Pikge31cblxuICAgIGluaXQobmFtZTogVCwgYnVzeTogYm9vbGVhbiwgcHJvZ3Jlc3M/OiBCdXN5UHJvZ3Jlc3MpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlKClcbiAgICAgICAgaWYgKCFzdGF0ZS5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KG5hbWUsIGJ1c3ksIHByb2dyZXNzKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0KG5hbWU6IFQsIGJ1c3k6IGJvb2xlYW4sIHByb2dyZXNzPzogQnVzeVByb2dyZXNzKSB7XG4gICAgICAgIHRoaXMuX3N0YXRlLnNldChuYW1lLCBidXN5LCBwcm9ncmVzcylcbiAgICB9XG5cbiAgICBpcyhuYW1lOiBUKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlJC5waXBlKG1hcChzdGF0ZSA9PiBzdGF0ZS5pcyhuYW1lKSkpXG4gICAgfVxuXG4gICAgd2F0Y2gobmFtZTogVCk6IE9ic2VydmFibGU8QnVzeUV2ZW50UGFyYW1zIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlJC5waXBlKG1hcChzdGF0ZSA9PiBzdGF0ZS5nZXQobmFtZSkpKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGBgYHRzXG4gICAgICogb2JzZXJ2YWJsZS5waXBlKHRoaXMuYnVzeS5yeChcInNhdmVcIikpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcngobmFtZTogVCkge1xuICAgICAgICByZXR1cm4gPFM+KHNyYzogT2JzZXJ2YWJsZTxTPikgPT5cbiAgICAgICAgICAgIHNyYy5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnNldChuYW1lLCB0cnVlKSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5zZXQobmFtZSwgZmFsc2UpKVxuICAgICAgICAgICAgKVxuICAgIH1cblxuICAgIGNvbm5lY3QodmFsdWU6IEJ1c3lDb25uZWN0YWJsZSwgbmFtZT86IFQpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoXCJNaXNzaW5nIGBuYW1lYCBwYXJhbVwiKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWIgPSB2YWx1ZS5zdWJzY3JpYmUoYnVzeVZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBidXN5VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChuYW1lIGFzIFQsIGJ1c3lWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KG5hbWUgYXMgVCwgISFidXN5VmFsdWUuYnVzeSwgYnVzeVZhbHVlLnByb2dyZXNzKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ViLnVuc3Vic2NyaWJlLmJpbmQoc3ViKVxuICAgICAgICAgICAgfSkucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1c3lUcmFja2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuY29ubmVjdCh2YWx1ZS5zdGF0ZSQsIG5hbWUpLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgIH0gZWxzZSBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0KHRvT2JzZXJ2YWJsZSh2YWx1ZSksIG5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgQnVzeSBzb3VyY2VcIikpXG4gICAgfVxufVxuXG4vLyBUT0RPOiBCdXN5U3RhdGUgZGlyZWN0aXZlXG5cbi8qKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICB0ZW1wbGF0ZTogYFxuICogICAgIDxidXR0b24gbnVCdXN5PVwic2F2ZVwiPlNBVkU8L2J1dHRvbj5cbiAqICAgICA8cHJvZ3Jlc3MgbnVCdXN5PVwiZmlsZVVwbG9hZFwiPlxuICogICAgIDxwcm9ncmVzcyBudUJ1c3k9XCIqXCI+XG4gKiAgIGBcbiAqIH0pXG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVCdXN5XVwiLFxuICAgIGV4cG9ydEFzOiBcIm51QnVzeVwiXG59KVxuZXhwb3J0IGNsYXNzIEJ1c3k8VCBleHRlbmRzIHN0cmluZz4gaW1wbGVtZW50cyBDb25uZWN0UHJvdG9jb2wge1xuICAgIHJlYWRvbmx5IHRyYWNrZXI6IEJ1c3lUcmFja2VyPFQ+ID0gaW5qZWN0KEJ1c3lUcmFja2VyLCB7IHNraXBTZWxmOiB0cnVlIH0pXG5cbiAgICByZWFkb25seSBuYW1lOiBJbnB1dFNpZ25hbDxUPiA9IGlucHV0LnJlcXVpcmVkPFQ+KHsgYWxpYXM6IFwibnVCdXN5XCIgfSlcbiAgICByZWFkb25seSAjbmFtZSA9IHRvT2JzZXJ2YWJsZSh0aGlzLm5hbWUpXG5cbiAgICByZWFkb25seSBzdGF0ZSQgPSBjb21iaW5lTGF0ZXN0KHsgbmFtZTogdGhpcy4jbmFtZSwgc3RhdGU6IHRoaXMudHJhY2tlci5zdGF0ZSQgfSkucGlwZShcbiAgICAgICAgbWFwKCh7IG5hbWUsIHN0YXRlIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lID09PSBcIipcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQnVzeSA9IHN0YXRlLmlzQnVzeVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlzQnVzeTogaXNCdXN5LFxuICAgICAgICAgICAgICAgICAgICBpc090aGVyc0J1c3k6IGlzQnVzeSxcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHN0YXRlLnByb2dyZXNzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzZWxmID0gc3RhdGUuZ2V0KG5hbWUpXG4gICAgICAgICAgICBpZiAoc2VsZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQnVzeSA9IHNlbGYuYnVzeSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlzQnVzeTogaXNCdXN5LFxuICAgICAgICAgICAgICAgICAgICBpc090aGVyc0J1c3k6IHN0YXRlLmlzQnVzeSAmJiAhaXNCdXN5LFxuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogc2VsZi5wcm9ncmVzc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaXNCdXN5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNPdGhlcnNCdXN5OiBzdGF0ZS5pc0J1c3ksXG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGlzQnVzeSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgICAgICBtYXAodiA9PiB2LmlzQnVzeSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuICAgIHJlYWRvbmx5IGlzQnVzeSA9IHRvU2lnbmFsKHRoaXMuaXNCdXN5JCwgeyByZWplY3RFcnJvcnM6IHRydWUgfSlcblxuICAgIHJlYWRvbmx5IGlzT3RoZXJzQnVzeSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgICAgICBtYXAodiA9PiB2LmlzT3RoZXJzQnVzeSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuICAgIHJlYWRvbmx5IGlzT3RoZXJzQnVzeSA9IHRvU2lnbmFsKHRoaXMuaXNPdGhlcnNCdXN5JCwgeyByZWplY3RFcnJvcnM6IHRydWUgfSlcblxuICAgIHJlYWRvbmx5IHByb2dyZXNzJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCh2ID0+IHYucHJvZ3Jlc3MpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcbiAgICByZWFkb25seSBwcm9ncmVzcyA9IHRvU2lnbmFsKHRoaXMucHJvZ3Jlc3MkLCB7IHJlamVjdEVycm9yczogdHJ1ZSB9KVxuXG4gICAgY29ubmVjdCh2YWx1ZTogQnVzeUNvbm5lY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0c3ViID0gdGhpcy4jbmFtZVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIobmFtZSA9PiBuYW1lICE9PSBcIipcIiksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChuYW1lID0+IHRoaXMudHJhY2tlci5jb25uZWN0KHZhbHVlLCBuYW1lKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgICAgICAgICByZXR1cm4gdHN1Yi51bnN1YnNjcmliZS5iaW5kKHRzdWIpXG4gICAgICAgIH0pXG4gICAgfVxufVxuIl19
@@ -1,88 +0,0 @@
1
- var _a;
2
- import { computed, Directive, effect, inject, input, signal } from "@angular/core";
3
- import { NgControl } from "@angular/forms";
4
- import { Busy } from "./busy";
5
- import * as i0 from "@angular/core";
6
- /**
7
- * @example
8
- * ```typescript
9
- * @Component({
10
- * standalone: true,
11
- * hostDirectives: [DisabledState],
12
- * template: `<button [disabled]="disabledState.isDisabled()">Submit</button>`,
13
- * })
14
- * export class Button {
15
- * readonly disabledState = inject(DisabledState)
16
- * }
17
- * ```
18
- */
19
- export class DisabledState {
20
- #parent;
21
- #busy;
22
- #disabled;
23
- constructor() {
24
- this.#parent = inject(_a, { skipSelf: true, optional: true });
25
- this.#busy = inject(Busy, { self: true, optional: true });
26
- this.#disabled = signal(false);
27
- this.isDisabled = computed(() => !!(this.#parent?.isDisabled() || this.#busy?.isOthersBusy() || this.#disabled()));
28
- effect(() => this.isDisabled());
29
- }
30
- set(value) {
31
- this.#disabled.set(value);
32
- }
33
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DisabledState, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
34
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: DisabledState, isStandalone: true, host: { properties: { "attr.disabled": "isDisabled() ? '' : null" } }, exportAs: ["nuDisabled"], ngImport: i0 }); }
35
- }
36
- _a = DisabledState;
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DisabledState, decorators: [{
38
- type: Directive,
39
- args: [{
40
- standalone: true,
41
- exportAs: "nuDisabled",
42
- host: {
43
- "[attr.disabled]": "isDisabled() ? '' : null"
44
- }
45
- }]
46
- }], ctorParameters: () => [] });
47
- /**
48
- * @example
49
- * ```html
50
- * <form nuDisabled nuBusy="submit">
51
- * <button [nuDisabled]="form.invalid" nuBusy="submit">Submit</button>
52
- * </form>
53
- * ```
54
- */
55
- export class Disabled {
56
- #state;
57
- #control;
58
- constructor() {
59
- this.#state = inject(DisabledState, { self: true });
60
- this.#control = inject(NgControl, { self: true, optional: true });
61
- this.nuDisabled = input(false);
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
- });
76
- }
77
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Disabled, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
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 }); }
79
- }
80
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: Disabled, decorators: [{
81
- type: Directive,
82
- args: [{
83
- standalone: true,
84
- selector: "[nuDisabled]",
85
- hostDirectives: [DisabledState]
86
- }]
87
- }], ctorParameters: () => [] });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzYWJsZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2Rpc2FibGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUE7QUFDMUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRTFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUE7O0FBRTdCOzs7Ozs7Ozs7Ozs7R0FZRztBQVFILE1BQU0sT0FBTyxhQUFhO0lBQ2IsT0FBTyxDQUE0RDtJQUNuRSxLQUFLLENBQStDO0lBQ3BELFNBQVMsQ0FBeUI7SUFNM0M7UUFSUyxZQUFPLEdBQUcsTUFBTSxDQUFDLEVBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDbkUsVUFBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ3BELGNBQVMsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUE7UUFFbEMsZUFBVSxHQUFvQixRQUFRLENBQzNDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FDekYsQ0FBQTtRQUdHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQWM7UUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM3QixDQUFDOzhHQWZRLGFBQWE7a0dBQWIsYUFBYTs7OzJGQUFiLGFBQWE7a0JBUHpCLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxZQUFZO29CQUN0QixJQUFJLEVBQUU7d0JBQ0YsaUJBQWlCLEVBQUUsMEJBQTBCO3FCQUNoRDtpQkFDSjs7QUFtQkQ7Ozs7Ozs7R0FPRztBQU1ILE1BQU0sT0FBTyxRQUFRO0lBQ1IsTUFBTSxDQUF3QztJQUM5QyxRQUFRLENBQW9EO0lBR3JFO1FBSlMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUM5QyxhQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDNUQsZUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUc5QixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzdFLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQTtZQUN0QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ1gsY0FBYztnQkFDZCxPQUFNO1lBQ1YsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO2dCQUMzQixPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUN4QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUE7WUFDeEMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQzs4R0FwQlEsUUFBUTtrR0FBUixRQUFRLGlPQS9CUixhQUFhOzsyRkErQmIsUUFBUTtrQkFMcEIsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLGNBQWMsRUFBRSxDQUFDLGFBQWEsQ0FBQztpQkFDbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgRGlyZWN0aXZlLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIHNpZ25hbCwgU2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCJcblxuaW1wb3J0IHsgQnVzeSB9IGZyb20gXCIuL2J1c3lcIlxuXG4vKipcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHtcbiAqICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAqICAgaG9zdERpcmVjdGl2ZXM6IFtEaXNhYmxlZFN0YXRlXSxcbiAqICAgdGVtcGxhdGU6IGA8YnV0dG9uIFtkaXNhYmxlZF09XCJkaXNhYmxlZFN0YXRlLmlzRGlzYWJsZWQoKVwiPlN1Ym1pdDwvYnV0dG9uPmAsXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEJ1dHRvbiB7XG4gKiAgIHJlYWRvbmx5IGRpc2FibGVkU3RhdGUgPSBpbmplY3QoRGlzYWJsZWRTdGF0ZSlcbiAqIH1cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGV4cG9ydEFzOiBcIm51RGlzYWJsZWRcIixcbiAgICBob3N0OiB7XG4gICAgICAgIFwiW2F0dHIuZGlzYWJsZWRdXCI6IFwiaXNEaXNhYmxlZCgpID8gJycgOiBudWxsXCJcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIERpc2FibGVkU3RhdGUge1xuICAgIHJlYWRvbmx5ICNwYXJlbnQgPSBpbmplY3QoRGlzYWJsZWRTdGF0ZSwgeyBza2lwU2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSlcbiAgICByZWFkb25seSAjYnVzeSA9IGluamVjdChCdXN5LCB7IHNlbGY6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgcmVhZG9ubHkgI2Rpc2FibGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKVxuXG4gICAgcmVhZG9ubHkgaXNEaXNhYmxlZDogU2lnbmFsPGJvb2xlYW4+ID0gY29tcHV0ZWQoXG4gICAgICAgICgpID0+ICEhKHRoaXMuI3BhcmVudD8uaXNEaXNhYmxlZCgpIHx8IHRoaXMuI2J1c3k/LmlzT3RoZXJzQnVzeSgpIHx8IHRoaXMuI2Rpc2FibGVkKCkpXG4gICAgKVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB0aGlzLmlzRGlzYWJsZWQoKSlcbiAgICB9XG5cbiAgICBzZXQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy4jZGlzYWJsZWQuc2V0KHZhbHVlKVxuICAgIH1cbn1cblxuLyoqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogICAgPGZvcm0gbnVEaXNhYmxlZCBudUJ1c3k9XCJzdWJtaXRcIj5cbiAqICAgICAgPGJ1dHRvbiBbbnVEaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIiBudUJ1c3k9XCJzdWJtaXRcIj5TdWJtaXQ8L2J1dHRvbj5cbiAqICAgIDwvZm9ybT5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiBcIltudURpc2FibGVkXVwiLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbRGlzYWJsZWRTdGF0ZV1cbn0pXG5leHBvcnQgY2xhc3MgRGlzYWJsZWQge1xuICAgIHJlYWRvbmx5ICNzdGF0ZSA9IGluamVjdChEaXNhYmxlZFN0YXRlLCB7IHNlbGY6IHRydWUgfSlcbiAgICByZWFkb25seSAjY29udHJvbCA9IGluamVjdChOZ0NvbnRyb2wsIHsgc2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSlcbiAgICByZWFkb25seSBudURpc2FibGVkID0gaW5wdXQoZmFsc2UpXG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHRoaXMuI3N0YXRlLnNldCh0aGlzLm51RGlzYWJsZWQoKSksIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSlcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLiNjb250cm9sPy5jb250cm9sXG4gICAgICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiByZXRyeVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy4jc3RhdGUuaXNEaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5lbmFibGVkICYmIGNvbnRyb2wuZGlzYWJsZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZWQgJiYgY29udHJvbC5lbmFibGUoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuLy8gQERpcmVjdGl2ZSh7XG4vLyAgICAgc3RhbmRhbG9uZTogdHJ1ZSxcbi8vICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuLy8gICAgIHNlbGVjdG9yOiBcIltudURpc2FibGVkXVtmb3JtQ29udHJvbF0sW251RGlzYWJsZWRdW2Zvcm1Db250cm9sTmFtZV0sW251RGlzYWJsZWRdW2Zvcm1Hcm91cF0sW251RGlzYWJsZWRdW2Zvcm1Hcm91cE5hbWVdXCJcbi8vIH0pXG4vLyBleHBvcnQgY2xhc3MgRm9ybUNvbnRyb2xEaXNhYmxlZCB7XG4vLyAgICAgcmVhZG9ubHkgI2Rpc2FibGVkID0gaW5qZWN0KERpc2FibGVkU3RhdGUsIHsgc2VsZjogdHJ1ZSB9KVxuLy8gICAgIHJlYWRvbmx5ICNjb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwgeyBzZWxmOiB0cnVlIH0pXG5cbi8vICAgICBjb25zdHJ1Y3RvcigpIHtcbi8vICAgICAgICAgZWZmZWN0KCgpID0+IHtcbi8vICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLiNjb250cm9sLmNvbnRyb2xcbi8vICAgICAgICAgICAgIGlmICghY29udHJvbCkge1xuLy8gICAgICAgICAgICAgICAgIC8vIFRPRE86IHJldHJ5XG4vLyAgICAgICAgICAgICAgICAgcmV0dXJuXG4vLyAgICAgICAgICAgICB9XG5cbi8vICAgICAgICAgICAgIGlmICh0aGlzLiNkaXNhYmxlZC5pc0Rpc2FibGVkKCkpIHtcbi8vICAgICAgICAgICAgICAgICBjb250cm9sLmVuYWJsZWQgJiYgY29udHJvbC5kaXNhYmxlKClcbi8vICAgICAgICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICAgICAgICAgY29udHJvbC5kaXNhYmxlZCAmJiBjb250cm9sLmVuYWJsZSgpXG4vLyAgICAgICAgICAgICB9XG4vLyAgICAgICAgIH0pXG4vLyAgICAgfVxuLy8gfVxuIl19