@ngutil/common 0.0.48 → 0.0.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/esm2022/index.mjs CHANGED
@@ -4,10 +4,11 @@ export { NumberWithUnit, UNIT_REGEX, NUMBER_REGEX } from "./number-with-unit";
4
4
  export { coerceBoolAttr } from "./coerce/bool-attr";
5
5
  export { coerceElement, isElementInput } from "./coerce/element";
6
6
  export * from "./form";
7
- export { StateChain } from "./state-chain";
7
+ // export { StateChain, StateChainHandler } from "./state-chain"
8
8
  export { rawCancelAnimationFrame, rawClearInterval, rawClearTimeout, rawRequestAnimationFrame, rawSetInterval, rawSetTimeout, __zone_symbol__ } from "./unngzone";
9
9
  export { FastDOM } from "./dom";
10
10
  export { Busy, BusyTrackerState, BusyTracker } from "./busy";
11
11
  export { isPrimitive } from "./types/primitive";
12
12
  export { deepClone, deepFreeze, isPlainObject, toSorted, isFalsy, isTruthy } from "./util";
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFlLE1BQU0sWUFBWSxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQXVCLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVsRyxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLG9CQUFvQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRTlFLGNBQWMsUUFBUSxDQUFBO0FBRXRCLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0sZUFBZSxDQUFBO0FBRTdELE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZix3QkFBd0IsRUFDeEIsY0FBYyxFQUNkLGFBQWEsRUFDYixlQUFlLEVBQ2xCLE1BQU0sWUFBWSxDQUFBO0FBQ25CLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBNEMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBT3RHLE9BQU8sRUFBdUIsV0FBVyxFQUErQixNQUFNLG1CQUFtQixDQUFBO0FBRWpHLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENvbm5lY3RQcm90b2NvbCB9IGZyb20gXCIuL2Nvbm5lY3QtcHJvdG9jb2xcIlxuZXhwb3J0IHsgRGVzdHJ1Y3QsIERlc3RydWN0aWJsZSwgSURpc3Bvc2FibGUgfSBmcm9tIFwiLi9kZXN0cnVjdFwiXG5leHBvcnQgeyBEaXNhYmxlZFN0YXRlLCBEaXNhYmxlZCB9IGZyb20gXCIuL2Rpc2FibGVkXCJcbmV4cG9ydCB7IE51bWJlcldpdGhVbml0LCBOdW1iZXJXaXRoVW5pdElucHV0LCBVTklUX1JFR0VYLCBOVU1CRVJfUkVHRVggfSBmcm9tIFwiLi9udW1iZXItd2l0aC11bml0XCJcblxuZXhwb3J0IHsgY29lcmNlQm9vbEF0dHIsIEJvb2xlYW5JbnB1dCB9IGZyb20gXCIuL2NvZXJjZS9ib29sLWF0dHJcIlxuZXhwb3J0IHsgY29lcmNlRWxlbWVudCwgRWxlbWVudElucHV0LCBpc0VsZW1lbnRJbnB1dCB9IGZyb20gXCIuL2NvZXJjZS9lbGVtZW50XCJcblxuZXhwb3J0ICogZnJvbSBcIi4vZm9ybVwiXG5cbmV4cG9ydCB7IFN0YXRlQ2hhaW4sIFN0YXRlQ2hhaW5IYW5kbGVyIH0gZnJvbSBcIi4vc3RhdGUtY2hhaW5cIlxuXG5leHBvcnQge1xuICAgIHJhd0NhbmNlbEFuaW1hdGlvbkZyYW1lLFxuICAgIHJhd0NsZWFySW50ZXJ2YWwsXG4gICAgcmF3Q2xlYXJUaW1lb3V0LFxuICAgIHJhd1JlcXVlc3RBbmltYXRpb25GcmFtZSxcbiAgICByYXdTZXRJbnRlcnZhbCxcbiAgICByYXdTZXRUaW1lb3V0LFxuICAgIF9fem9uZV9zeW1ib2xfX1xufSBmcm9tIFwiLi91bm5nem9uZVwiXG5leHBvcnQgeyBGYXN0RE9NIH0gZnJvbSBcIi4vZG9tXCJcbmV4cG9ydCB7IEJ1c3ksIEJ1c3lFdmVudCwgQnVzeUV2ZW50UGFyYW1zLCBCdXN5UHJvZ3Jlc3MsIEJ1c3lUcmFja2VyU3RhdGUsIEJ1c3lUcmFja2VyIH0gZnJvbSBcIi4vYnVzeVwiXG5cbmV4cG9ydCB7IENvbmNhdCB9IGZyb20gXCIuL3R5cGVzL2NvbmNhdFwiXG5leHBvcnQgeyBFdmFsLCBJZkFueSwgSXNBbnksIElmVHVwbGUsIElzVHVwbGUsIFR1cGxlSXRlbXMsIE9iamVjdEtleSwgTWF4UmVjdXJzaW9uIH0gZnJvbSBcIi4vdHlwZXMvdXRpbFwiXG5leHBvcnQgeyBGbGF0dGVuLCBGbGF0dGVuS2V5cyB9IGZyb20gXCIuL3R5cGVzL2ZsYXR0ZW5cIlxuZXhwb3J0IHsgTWVyZ2VVbmlvbiB9IGZyb20gXCIuL3R5cGVzL21lcmdlLXVuaW9uXCJcbmV4cG9ydCB7IE51bWJlclJhbmdlIH0gZnJvbSBcIi4vdHlwZXMvbnVtYmVyLXJhbmdlXCJcbmV4cG9ydCB7IFByaW1pdGl2ZSwgQnVpbHRpbnMsIGlzUHJpbWl0aXZlLCBBc1ByaW1pdGl2ZSwgVG9QcmltaXRpdmVNYXAgfSBmcm9tIFwiLi90eXBlcy9wcmltaXRpdmVcIlxuZXhwb3J0IHsgRGVlcFJlYWRvbmx5LCBSZWFkb25seURhdGUgfSBmcm9tIFwiLi90eXBlcy9yZWFkb25seVwiXG5leHBvcnQgeyBkZWVwQ2xvbmUsIGRlZXBGcmVlemUsIGlzUGxhaW5PYmplY3QsIHRvU29ydGVkLCBpc0ZhbHN5LCBpc1RydXRoeSB9IGZyb20gXCIuL3V0aWxcIlxuIl19
13
+ export * from "./lifecycle";
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFlLE1BQU0sWUFBWSxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQXVCLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVsRyxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLG9CQUFvQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRTlFLGNBQWMsUUFBUSxDQUFBO0FBRXRCLGdFQUFnRTtBQUVoRSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3hCLGNBQWMsRUFDZCxhQUFhLEVBQ2IsZUFBZSxFQUNsQixNQUFNLFlBQVksQ0FBQTtBQUNuQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQTRDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQU90RyxPQUFPLEVBQXVCLFdBQVcsRUFBK0IsTUFBTSxtQkFBbUIsQ0FBQTtBQUVqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDMUYsY0FBYyxhQUFhLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBDb25uZWN0UHJvdG9jb2wgfSBmcm9tIFwiLi9jb25uZWN0LXByb3RvY29sXCJcbmV4cG9ydCB7IERlc3RydWN0LCBEZXN0cnVjdGlibGUsIElEaXNwb3NhYmxlIH0gZnJvbSBcIi4vZGVzdHJ1Y3RcIlxuZXhwb3J0IHsgRGlzYWJsZWRTdGF0ZSwgRGlzYWJsZWQgfSBmcm9tIFwiLi9kaXNhYmxlZFwiXG5leHBvcnQgeyBOdW1iZXJXaXRoVW5pdCwgTnVtYmVyV2l0aFVuaXRJbnB1dCwgVU5JVF9SRUdFWCwgTlVNQkVSX1JFR0VYIH0gZnJvbSBcIi4vbnVtYmVyLXdpdGgtdW5pdFwiXG5cbmV4cG9ydCB7IGNvZXJjZUJvb2xBdHRyLCBCb29sZWFuSW5wdXQgfSBmcm9tIFwiLi9jb2VyY2UvYm9vbC1hdHRyXCJcbmV4cG9ydCB7IGNvZXJjZUVsZW1lbnQsIEVsZW1lbnRJbnB1dCwgaXNFbGVtZW50SW5wdXQgfSBmcm9tIFwiLi9jb2VyY2UvZWxlbWVudFwiXG5cbmV4cG9ydCAqIGZyb20gXCIuL2Zvcm1cIlxuXG4vLyBleHBvcnQgeyBTdGF0ZUNoYWluLCBTdGF0ZUNoYWluSGFuZGxlciB9IGZyb20gXCIuL3N0YXRlLWNoYWluXCJcblxuZXhwb3J0IHtcbiAgICByYXdDYW5jZWxBbmltYXRpb25GcmFtZSxcbiAgICByYXdDbGVhckludGVydmFsLFxuICAgIHJhd0NsZWFyVGltZW91dCxcbiAgICByYXdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsXG4gICAgcmF3U2V0SW50ZXJ2YWwsXG4gICAgcmF3U2V0VGltZW91dCxcbiAgICBfX3pvbmVfc3ltYm9sX19cbn0gZnJvbSBcIi4vdW5uZ3pvbmVcIlxuZXhwb3J0IHsgRmFzdERPTSB9IGZyb20gXCIuL2RvbVwiXG5leHBvcnQgeyBCdXN5LCBCdXN5RXZlbnQsIEJ1c3lFdmVudFBhcmFtcywgQnVzeVByb2dyZXNzLCBCdXN5VHJhY2tlclN0YXRlLCBCdXN5VHJhY2tlciB9IGZyb20gXCIuL2J1c3lcIlxuXG5leHBvcnQgeyBDb25jYXQgfSBmcm9tIFwiLi90eXBlcy9jb25jYXRcIlxuZXhwb3J0IHsgRXZhbCwgSWZBbnksIElzQW55LCBJZlR1cGxlLCBJc1R1cGxlLCBUdXBsZUl0ZW1zLCBPYmplY3RLZXksIE1heFJlY3Vyc2lvbiB9IGZyb20gXCIuL3R5cGVzL3V0aWxcIlxuZXhwb3J0IHsgRmxhdHRlbiwgRmxhdHRlbktleXMgfSBmcm9tIFwiLi90eXBlcy9mbGF0dGVuXCJcbmV4cG9ydCB7IE1lcmdlVW5pb24gfSBmcm9tIFwiLi90eXBlcy9tZXJnZS11bmlvblwiXG5leHBvcnQgeyBOdW1iZXJSYW5nZSB9IGZyb20gXCIuL3R5cGVzL251bWJlci1yYW5nZVwiXG5leHBvcnQgeyBQcmltaXRpdmUsIEJ1aWx0aW5zLCBpc1ByaW1pdGl2ZSwgQXNQcmltaXRpdmUsIFRvUHJpbWl0aXZlTWFwIH0gZnJvbSBcIi4vdHlwZXMvcHJpbWl0aXZlXCJcbmV4cG9ydCB7IERlZXBSZWFkb25seSwgUmVhZG9ubHlEYXRlIH0gZnJvbSBcIi4vdHlwZXMvcmVhZG9ubHlcIlxuZXhwb3J0IHsgZGVlcENsb25lLCBkZWVwRnJlZXplLCBpc1BsYWluT2JqZWN0LCB0b1NvcnRlZCwgaXNGYWxzeSwgaXNUcnV0aHkgfSBmcm9tIFwiLi91dGlsXCJcbmV4cG9ydCAqIGZyb20gXCIuL2xpZmVjeWNsZVwiXG4iXX0=
@@ -0,0 +1,156 @@
1
+ import { catchError, concat, concatMap, filter, forkJoin, from, map, Observable, of, reduce, ReplaySubject, scan, share, shareReplay, Subject, take, takeLast, takeUntil, takeWhile, tap, throwError } from "rxjs";
2
+ import { flatten } from "lodash";
3
+ export class StopLifecycle extends Error {
4
+ }
5
+ export class Lifecycle {
6
+ #handlers;
7
+ #until;
8
+ #trigger;
9
+ #status;
10
+ constructor(states) {
11
+ this.#handlers = {};
12
+ this.#until = new Subject();
13
+ this.#trigger = new Subject();
14
+ this.#status = this.#trigger.pipe(takeUntil(this.#until), scan((result, trigger) => {
15
+ if (!result[trigger]) {
16
+ result[trigger] = this.#run(trigger).pipe(tap(executed => {
17
+ if (executed === false) {
18
+ delete result[trigger];
19
+ }
20
+ }), map(executed => [trigger, !!executed]), shareReplay(1));
21
+ }
22
+ return result;
23
+ }, {}), concatMap(triggers => {
24
+ const srcs = Object.values(triggers);
25
+ return concat(...srcs).pipe(takeWhile(([_, executed]) => executed, false), reduce((result, [name, executed]) => {
26
+ return { ...result, [name]: executed };
27
+ }, {}));
28
+ }), tap(status => {
29
+ if (this.#handlers == null) {
30
+ return;
31
+ }
32
+ for (const [k, v] of Object.entries(status)) {
33
+ if (v) {
34
+ delete this.#handlers[k];
35
+ }
36
+ }
37
+ }), share());
38
+ this.status$ = this.#status.pipe(shareReplay(1));
39
+ this.current$ = new ReplaySubject();
40
+ this.states = { ...states };
41
+ for (const value of Object.values(states)) {
42
+ if (value.order == null) {
43
+ value.order = "parallel";
44
+ }
45
+ }
46
+ }
47
+ on(state, fn) {
48
+ if (state in this.#handlers) {
49
+ this.#handlers[state].push(fn);
50
+ }
51
+ else {
52
+ this.#handlers[state] = [fn];
53
+ }
54
+ return () => {
55
+ const idx = this.#handlers[state].indexOf(fn);
56
+ if (idx > -1) {
57
+ this.#handlers[state].splice(idx, 1);
58
+ }
59
+ };
60
+ }
61
+ onExecute(state) {
62
+ return this.current$.pipe(takeUntil(this.#until), filter(current => current === state));
63
+ }
64
+ onDone(state) {
65
+ return this.status$.pipe(filter(status => status[state]), take(1));
66
+ }
67
+ run(...states) {
68
+ const flattened = flatten(states).filter((v, i, a) => a.indexOf(v) === i);
69
+ const expectedCount = flattened.length;
70
+ return new Observable((dest) => {
71
+ dest.add(this.#status.subscribe(currentStatus => {
72
+ const executedCount = Object.entries(currentStatus).reduce((result, [name, done]) => result + (done && flattened.includes(name) ? 1 : 0), 0);
73
+ if (executedCount >= expectedCount) {
74
+ dest.next();
75
+ dest.complete();
76
+ }
77
+ }));
78
+ for (const s of flattened) {
79
+ this.#trigger.next(s);
80
+ }
81
+ });
82
+ }
83
+ /**
84
+ * Run this state changes on other state
85
+ */
86
+ control(state, remap) {
87
+ const remove = [];
88
+ for (const selfState of Object.keys(this.states)) {
89
+ const otherState = remap?.[selfState] || selfState;
90
+ if (otherState in state.states) {
91
+ remove.push(this.on(selfState, () => state.run(otherState)));
92
+ }
93
+ }
94
+ return () => {
95
+ for (const fn of remove) {
96
+ fn();
97
+ }
98
+ };
99
+ }
100
+ destroy() {
101
+ ;
102
+ this.#handlers = null;
103
+ this.#until.next();
104
+ this.#until.complete();
105
+ }
106
+ #run(state) {
107
+ if (this.#handlers == null || !this.states[state]) {
108
+ return of(true);
109
+ }
110
+ return new Observable((dest) => {
111
+ this.current$.next(state);
112
+ const handlers = this.#handlers[state];
113
+ if (handlers == null || handlers.length === 0) {
114
+ dest.next(true);
115
+ dest.complete();
116
+ return;
117
+ }
118
+ const observables = handlers.map(handler => {
119
+ const observable = handler();
120
+ if (observable == null) {
121
+ return of(null);
122
+ }
123
+ else {
124
+ return from(observable);
125
+ }
126
+ });
127
+ const config = this.states[state];
128
+ if (observables.length === 1) {
129
+ return observables[0].pipe(map(() => true)).subscribe(dest);
130
+ }
131
+ else if (config.order === "parallel") {
132
+ return forkJoin(observables)
133
+ .pipe(map(() => true))
134
+ .subscribe(dest);
135
+ }
136
+ else if (config.order === "sequential") {
137
+ return concat(...observables)
138
+ .pipe(map(() => true))
139
+ .subscribe(dest);
140
+ }
141
+ else {
142
+ dest.next(true);
143
+ dest.complete();
144
+ }
145
+ return;
146
+ }).pipe(takeLast(1), catchError(error => {
147
+ if (error instanceof StopLifecycle) {
148
+ return of(false);
149
+ }
150
+ else {
151
+ return throwError(() => error);
152
+ }
153
+ }));
154
+ }
155
+ }
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9saWZlY3ljbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFVBQVUsRUFDVixNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsSUFBSSxFQUNKLEdBQUcsRUFDSCxVQUFVLEVBRVYsRUFBRSxFQUNGLE1BQU0sRUFDTixhQUFhLEVBQ2IsSUFBSSxFQUNKLEtBQUssRUFDTCxXQUFXLEVBQ1gsT0FBTyxFQUVQLElBQUksRUFDSixRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxHQUFHLEVBQ0gsVUFBVSxFQUNiLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUloQyxNQUFNLE9BQU8sYUFBYyxTQUFRLEtBQUs7Q0FBRztBQVczQyxNQUFNLE9BQU8sU0FBUztJQUVULFNBQVMsQ0FBa0Q7SUFFM0QsTUFBTSxDQUFzQjtJQUM1QixRQUFRLENBQW1CO0lBQzNCLE9BQU8sQ0EyQ2Y7SUFLRCxZQUFZLE1BQVM7UUFwRFosY0FBUyxHQUFnRCxFQUFFLENBQUE7UUFFM0QsV0FBTSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUE7UUFDNUIsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFLLENBQUE7UUFDM0IsWUFBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNqQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUN0QixJQUFJLENBQ0EsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFZLENBQUMsQ0FBQyxJQUFJLENBQzFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDWCxJQUFJLFFBQVEsS0FBSyxLQUFLLEVBQUUsQ0FBQzt3QkFDckIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7b0JBQzFCLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBaUIsQ0FBQyxFQUN0RCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2pCLENBQUE7WUFDTCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUE7UUFDakIsQ0FBQyxFQUNELEVBQXlDLENBQzVDLEVBQ0QsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFvQyxDQUFBO1lBQ3ZFLE9BQU8sTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUN2QixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUM3QyxNQUFNLENBQ0YsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtnQkFDekIsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUE7WUFDMUMsQ0FBQyxFQUNELEVBQXdCLENBQzNCLENBQ0osQ0FBQTtRQUNMLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNULElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDekIsT0FBTTtZQUNWLENBQUM7WUFFRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNKLE9BQVEsSUFBSSxDQUFDLFNBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ3JDLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxFQUFFLENBQ1YsQ0FBQTtRQUVRLFlBQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMzQyxhQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUssQ0FBQTtRQUd0QyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQTtRQUUzQixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFBO1lBQzVCLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELEVBQUUsQ0FBQyxLQUFRLEVBQUUsRUFBb0I7UUFDN0IsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ25DLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7UUFFRCxPQUFPLEdBQUcsRUFBRTtZQUNSLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQzlDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ3pDLENBQUM7UUFDTCxDQUFDLENBQUE7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVE7UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNyQixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQ3ZDLENBQUE7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNwQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNWLENBQUE7SUFDTCxDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQUcsTUFBc0I7UUFDekIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ3pFLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUE7UUFDdEMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQXNCLEVBQUUsRUFBRTtZQUM3QyxJQUFJLENBQUMsR0FBRyxDQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUNuQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FDdEQsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNsRixDQUFDLENBQ0osQ0FBQTtnQkFFRCxJQUFJLGFBQWEsSUFBSSxhQUFhLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO29CQUNYLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtnQkFDbkIsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUNMLENBQUE7WUFFRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN6QixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQWdDLEtBQVEsRUFBRSxLQUErQjtRQUM1RSxNQUFNLE1BQU0sR0FBc0IsRUFBRSxDQUFBO1FBRXBDLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLFVBQVUsR0FBSSxLQUF3QixFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFBO1lBQ3RFLElBQUksVUFBVSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDdkUsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLEdBQUcsRUFBRTtZQUNSLEtBQUssTUFBTSxFQUFFLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3RCLEVBQUUsRUFBRSxDQUFBO1lBQ1IsQ0FBQztRQUNMLENBQUMsQ0FBQTtJQUNMLENBQUM7SUFFRCxPQUFPO1FBQ0gsQ0FBQztRQUFDLElBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBRUQsSUFBSSxDQUFDLEtBQVE7UUFDVCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ25CLENBQUM7UUFFRCxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsSUFBeUIsRUFBRSxFQUFFO1lBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBRXpCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDdEMsSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO2dCQUNmLE9BQU07WUFDVixDQUFDO1lBRUQsTUFBTSxXQUFXLEdBQTJCLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQy9ELE1BQU0sVUFBVSxHQUFHLE9BQU8sRUFBRSxDQUFBO2dCQUM1QixJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDckIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ25CLENBQUM7cUJBQU0sQ0FBQztvQkFDSixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtnQkFDM0IsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFBO1lBRUYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUVqQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDL0QsQ0FBQztpQkFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3JDLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQztxQkFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDckIsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3hCLENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFlBQVksRUFBRSxDQUFDO2dCQUN2QyxPQUFPLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQztxQkFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDckIsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3hCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNmLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtZQUNuQixDQUFDO1lBRUQsT0FBTTtRQUNWLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDSCxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQ1gsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2YsSUFBSSxLQUFLLFlBQVksYUFBYSxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3BCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNsQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgY2F0Y2hFcnJvcixcbiAgICBjb25jYXQsXG4gICAgY29uY2F0TWFwLFxuICAgIGZpbHRlcixcbiAgICBmb3JrSm9pbixcbiAgICBmcm9tLFxuICAgIG1hcCxcbiAgICBPYnNlcnZhYmxlLFxuICAgIE9ic2VydmFibGVJbnB1dCxcbiAgICBvZixcbiAgICByZWR1Y2UsXG4gICAgUmVwbGF5U3ViamVjdCxcbiAgICBzY2FuLFxuICAgIHNoYXJlLFxuICAgIHNoYXJlUmVwbGF5LFxuICAgIFN1YmplY3QsXG4gICAgU3Vic2NyaWJlcixcbiAgICB0YWtlLFxuICAgIHRha2VMYXN0LFxuICAgIHRha2VVbnRpbCxcbiAgICB0YWtlV2hpbGUsXG4gICAgdGFwLFxuICAgIHRocm93RXJyb3Jcbn0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSBcImxvZGFzaFwiXG5cbmV4cG9ydCB0eXBlIExpZmVjeWNsZUhhbmRsZXIgPSAoKSA9PiBPYnNlcnZhYmxlSW5wdXQ8dW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkIHwgdm9pZFxuXG5leHBvcnQgY2xhc3MgU3RvcExpZmVjeWNsZSBleHRlbmRzIEVycm9yIHt9XG5cbmV4cG9ydCB0eXBlIExpZmVjeWNsZU9wdGlvbnMgPSBSZWNvcmQ8c3RyaW5nLCB7IG9yZGVyPzogXCJwYXJhbGxlbFwiIHwgXCJzZXF1ZW50aWFsXCI7IGNhbmNlbGxhYmxlPzogYm9vbGVhbiB9PlxuXG5leHBvcnQgdHlwZSBMaWZlY3ljbGVSZW1hcDxBLCBCPiA9XG4gICAgQSBleHRlbmRzIExpZmVjeWNsZTxpbmZlciBBTywgaW5mZXIgQVM+XG4gICAgICAgID8gQiBleHRlbmRzIExpZmVjeWNsZTxpbmZlciBCTywgaW5mZXIgQlM+XG4gICAgICAgICAgICA/IFBhcnRpYWw8eyBbSyBpbiBBU106IEJTIH0+XG4gICAgICAgICAgICA6IG5ldmVyXG4gICAgICAgIDogbmV2ZXJcblxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZTxUIGV4dGVuZHMgTGlmZWN5Y2xlT3B0aW9ucywgUyBleHRlbmRzIGtleW9mIFQgPSBrZXlvZiBUPiB7XG4gICAgcmVhZG9ubHkgc3RhdGVzOiBUXG4gICAgcmVhZG9ubHkgI2hhbmRsZXJzOiBQYXJ0aWFsPFJlY29yZDxTLCBBcnJheTxMaWZlY3ljbGVIYW5kbGVyPj4+ID0ge31cblxuICAgIHJlYWRvbmx5ICN1bnRpbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcbiAgICByZWFkb25seSAjdHJpZ2dlciA9IG5ldyBTdWJqZWN0PFM+KClcbiAgICByZWFkb25seSAjc3RhdHVzID0gdGhpcy4jdHJpZ2dlci5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy4jdW50aWwpLFxuICAgICAgICBzY2FuKFxuICAgICAgICAgICAgKHJlc3VsdCwgdHJpZ2dlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0W3RyaWdnZXJdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFt0cmlnZ2VyXSA9IHRoaXMuI3J1bih0cmlnZ2VyIGFzIFMpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXAoZXhlY3V0ZWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleGVjdXRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFt0cmlnZ2VyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKGV4ZWN1dGVkID0+IFt0cmlnZ2VyLCAhIWV4ZWN1dGVkXSBhcyBbUywgYm9vbGVhbl0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge30gYXMgUmVjb3JkPFMsIE9ic2VydmFibGU8W1MsIGJvb2xlYW5dPj5cbiAgICAgICAgKSxcbiAgICAgICAgY29uY2F0TWFwKHRyaWdnZXJzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNyY3MgPSBPYmplY3QudmFsdWVzKHRyaWdnZXJzKSBhcyBBcnJheTxPYnNlcnZhYmxlPFtTLCBib29sZWFuXT4+XG4gICAgICAgICAgICByZXR1cm4gY29uY2F0KC4uLnNyY3MpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVdoaWxlKChbXywgZXhlY3V0ZWRdKSA9PiBleGVjdXRlZCwgZmFsc2UpLFxuICAgICAgICAgICAgICAgIHJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdCwgW25hbWUsIGV4ZWN1dGVkXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucmVzdWx0LCBbbmFtZV06IGV4ZWN1dGVkIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge30gYXMgUmVjb3JkPFMsIGJvb2xlYW4+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICB9KSxcbiAgICAgICAgdGFwKHN0YXR1cyA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaGFuZGxlcnMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhzdGF0dXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICh0aGlzLiNoYW5kbGVycyBhcyBhbnkpW2tdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmUoKVxuICAgIClcblxuICAgIHJlYWRvbmx5IHN0YXR1cyQgPSB0aGlzLiNzdGF0dXMucGlwZShzaGFyZVJlcGxheSgxKSlcbiAgICByZWFkb25seSBjdXJyZW50JCA9IG5ldyBSZXBsYXlTdWJqZWN0PFM+KClcblxuICAgIGNvbnN0cnVjdG9yKHN0YXRlczogVCkge1xuICAgICAgICB0aGlzLnN0YXRlcyA9IHsgLi4uc3RhdGVzIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIE9iamVjdC52YWx1ZXMoc3RhdGVzKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLm9yZGVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5vcmRlciA9IFwicGFyYWxsZWxcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb24oc3RhdGU6IFMsIGZuOiBMaWZlY3ljbGVIYW5kbGVyKSB7XG4gICAgICAgIGlmIChzdGF0ZSBpbiB0aGlzLiNoYW5kbGVycykge1xuICAgICAgICAgICAgdGhpcy4jaGFuZGxlcnNbc3RhdGVdIS5wdXNoKGZuKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jaGFuZGxlcnNbc3RhdGVdID0gW2ZuXVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuI2hhbmRsZXJzW3N0YXRlXSEuaW5kZXhPZihmbilcbiAgICAgICAgICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2hhbmRsZXJzW3N0YXRlXSEuc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRXhlY3V0ZShzdGF0ZTogUykge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50JC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuI3VudGlsKSxcbiAgICAgICAgICAgIGZpbHRlcihjdXJyZW50ID0+IGN1cnJlbnQgPT09IHN0YXRlKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgb25Eb25lKHN0YXRlOiBTKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXR1cyQucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihzdGF0dXMgPT4gc3RhdHVzW3N0YXRlXSksXG4gICAgICAgICAgICB0YWtlKDEpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBydW4oLi4uc3RhdGVzOiBBcnJheTxTIHwgU1tdPikge1xuICAgICAgICBjb25zdCBmbGF0dGVuZWQgPSBmbGF0dGVuKHN0YXRlcykuZmlsdGVyKCh2LCBpLCBhKSA9PiBhLmluZGV4T2YodikgPT09IGkpXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkQ291bnQgPSBmbGF0dGVuZWQubGVuZ3RoXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoZGVzdDogU3Vic2NyaWJlcjx2b2lkPikgPT4ge1xuICAgICAgICAgICAgZGVzdC5hZGQoXG4gICAgICAgICAgICAgICAgdGhpcy4jc3RhdHVzLnN1YnNjcmliZShjdXJyZW50U3RhdHVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhlY3V0ZWRDb3VudCA9IE9iamVjdC5lbnRyaWVzKGN1cnJlbnRTdGF0dXMpLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQsIFtuYW1lLCBkb25lXSkgPT4gcmVzdWx0ICsgKGRvbmUgJiYgZmxhdHRlbmVkLmluY2x1ZGVzKG5hbWUgYXMgUykgPyAxIDogMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhlY3V0ZWRDb3VudCA+PSBleHBlY3RlZENvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Lm5leHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5jb21wbGV0ZSgpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgZmxhdHRlbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jdHJpZ2dlci5uZXh0KHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVuIHRoaXMgc3RhdGUgY2hhbmdlcyBvbiBvdGhlciBzdGF0ZVxuICAgICAqL1xuICAgIGNvbnRyb2w8VCBleHRlbmRzIExpZmVjeWNsZTxhbnksIGFueT4+KHN0YXRlOiBULCByZW1hcD86IExpZmVjeWNsZVJlbWFwPHRoaXMsIFQ+KSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZTogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3Qgc2VsZlN0YXRlIG9mIE9iamVjdC5rZXlzKHRoaXMuc3RhdGVzKSkge1xuICAgICAgICAgICAgY29uc3Qgb3RoZXJTdGF0ZSA9IChyZW1hcCBhcyB1bmtub3duIGFzIGFueSk/LltzZWxmU3RhdGVdIHx8IHNlbGZTdGF0ZVxuICAgICAgICAgICAgaWYgKG90aGVyU3RhdGUgaW4gc3RhdGUuc3RhdGVzKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlLnB1c2godGhpcy5vbihzZWxmU3RhdGUgYXMgYW55LCAoKSA9PiBzdGF0ZS5ydW4ob3RoZXJTdGF0ZSkpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZm4gb2YgcmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgZm4oKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgOyh0aGlzIGFzIGFueSkuI2hhbmRsZXJzID0gbnVsbFxuICAgICAgICB0aGlzLiN1bnRpbC5uZXh0KClcbiAgICAgICAgdGhpcy4jdW50aWwuY29tcGxldGUoKVxuICAgIH1cblxuICAgICNydW4oc3RhdGU6IFMpIHtcbiAgICAgICAgaWYgKHRoaXMuI2hhbmRsZXJzID09IG51bGwgfHwgIXRoaXMuc3RhdGVzW3N0YXRlXSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKGRlc3Q6IFN1YnNjcmliZXI8Ym9vbGVhbj4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCQubmV4dChzdGF0ZSlcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLiNoYW5kbGVyc1tzdGF0ZV1cbiAgICAgICAgICAgIGlmIChoYW5kbGVycyA9PSBudWxsIHx8IGhhbmRsZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRlc3QubmV4dCh0cnVlKVxuICAgICAgICAgICAgICAgIGRlc3QuY29tcGxldGUoKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlczogQXJyYXk8T2JzZXJ2YWJsZTxhbnk+PiA9IGhhbmRsZXJzLm1hcChoYW5kbGVyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlID0gaGFuZGxlcigpXG4gICAgICAgICAgICAgICAgaWYgKG9ic2VydmFibGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbClcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJvbShvYnNlcnZhYmxlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuc3RhdGVzW3N0YXRlXVxuXG4gICAgICAgICAgICBpZiAob2JzZXJ2YWJsZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVzWzBdLnBpcGUobWFwKCgpID0+IHRydWUpKS5zdWJzY3JpYmUoZGVzdClcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLm9yZGVyID09PSBcInBhcmFsbGVsXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4ob2JzZXJ2YWJsZXMpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKG1hcCgoKSA9PiB0cnVlKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShkZXN0KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcub3JkZXIgPT09IFwic2VxdWVudGlhbFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmNhdCguLi5vYnNlcnZhYmxlcylcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwKCgpID0+IHRydWUpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGRlc3QpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlc3QubmV4dCh0cnVlKVxuICAgICAgICAgICAgICAgIGRlc3QuY29tcGxldGUoKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgIHRha2VMYXN0KDEpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3RvcExpZmVjeWNsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH1cbn1cbiJdfQ==
@@ -1,9 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
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, ReplaySubject, concat, catchError, of, from, forkJoin } from 'rxjs';
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
4
  import { NgControl } from '@angular/forms';
5
5
  import { toSignal, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
6
- import { isEqual, cloneDeep, isPlainObject as isPlainObject$1 } from 'lodash';
6
+ import { isEqual, cloneDeep, isPlainObject as isPlainObject$1, flatten } from 'lodash';
7
7
  export { isPrimitive } from 'utility-types';
8
8
 
9
9
  class Destruct {
@@ -574,128 +574,6 @@ function handleCommonOptions(o, opts) {
574
574
  return o.pipe(shareReplay(1));
575
575
  }
576
576
 
577
- class StopStateChain extends Error {
578
- }
579
- class StateChain {
580
- #executed;
581
- #handlers;
582
- #current;
583
- constructor(states) {
584
- this.#executed = [];
585
- this.#handlers = {};
586
- this.#current = new ReplaySubject(1);
587
- this.current$ = this.#current.asObservable();
588
- this.states = { ...states };
589
- for (const value of Object.values(states)) {
590
- if (value.order == null) {
591
- value.order = "parallel";
592
- }
593
- }
594
- }
595
- on(state, fn) {
596
- if (state in this.#handlers) {
597
- this.#handlers[state].push(fn);
598
- }
599
- else {
600
- this.#handlers[state] = [fn];
601
- }
602
- return () => {
603
- const idx = this.#handlers[state].indexOf(fn);
604
- if (idx > -1) {
605
- this.#handlers[state].splice(idx, 1);
606
- }
607
- };
608
- }
609
- /**
610
- * Run this state changes on other state
611
- */
612
- control(state, remap) {
613
- const remove = [];
614
- for (const selfState of Object.keys(this.states)) {
615
- const otherState = remap?.[selfState] || selfState;
616
- if (otherState in state.states) {
617
- remove.push(this.on(selfState, () => state.run([otherState])));
618
- }
619
- }
620
- return () => {
621
- for (const fn of remove) {
622
- fn();
623
- }
624
- };
625
- }
626
- run(states) {
627
- if (states.length === 0) {
628
- throw new Error("Missing states");
629
- }
630
- const executed = [];
631
- return concat(...states.map(state => this.#run(state).pipe(tap(s => s && executed.push(s))))).pipe(catchError(err => (err instanceof StopStateChain ? of(executed) : throwError(() => err))));
632
- }
633
- #run(state) {
634
- if (this.#handlers == null) {
635
- return of(null);
636
- }
637
- const options = this.states[state];
638
- return new Observable(dst => {
639
- if (this.#executed.includes(state)) {
640
- dst.next(state);
641
- dst.complete();
642
- return;
643
- }
644
- this.#executed.push(state);
645
- this.#current.next(state);
646
- const handlers = this.#handlers[state];
647
- if (handlers == null || handlers.length === 0) {
648
- dst.next(state);
649
- dst.complete();
650
- return;
651
- }
652
- const observables = handlers
653
- .map(handler => {
654
- const result = handler();
655
- if (result == null) {
656
- return of(null);
657
- }
658
- else {
659
- return from(result);
660
- }
661
- })
662
- .map(handler => handler.pipe(catchError(err => {
663
- if (err instanceof StopStateChain) {
664
- const idx = this.#executed.indexOf(state);
665
- if (idx > -1) {
666
- this.#executed.splice(idx, 1);
667
- }
668
- dst.error(err);
669
- dst.complete();
670
- return of(null);
671
- }
672
- else {
673
- return throwError(() => err);
674
- }
675
- })));
676
- if (observables.length === 1) {
677
- return observables[0].pipe(map(() => state)).subscribe(dst);
678
- }
679
- else {
680
- if (options.order === "parallel") {
681
- return forkJoin(observables)
682
- .pipe(map(() => state))
683
- .subscribe(dst);
684
- }
685
- else {
686
- return concat(...observables)
687
- .pipe(map(() => state))
688
- .subscribe(dst);
689
- }
690
- }
691
- });
692
- }
693
- destroy() {
694
- ;
695
- this.#handlers = null;
696
- }
697
- }
698
-
699
577
  const Zone = window.Zone;
700
578
  function __zone_symbol__(val) {
701
579
  const symbol = typeof Zone !== "undefined" && Zone.__symbol__
@@ -780,9 +658,163 @@ function runQ(items) {
780
658
  }
781
659
  const FastDOM = new _FastDOM();
782
660
 
661
+ class StopLifecycle extends Error {
662
+ }
663
+ class Lifecycle {
664
+ #handlers;
665
+ #until;
666
+ #trigger;
667
+ #status;
668
+ constructor(states) {
669
+ this.#handlers = {};
670
+ this.#until = new Subject();
671
+ this.#trigger = new Subject();
672
+ this.#status = this.#trigger.pipe(takeUntil(this.#until), scan((result, trigger) => {
673
+ if (!result[trigger]) {
674
+ result[trigger] = this.#run(trigger).pipe(tap(executed => {
675
+ if (executed === false) {
676
+ delete result[trigger];
677
+ }
678
+ }), map(executed => [trigger, !!executed]), shareReplay(1));
679
+ }
680
+ return result;
681
+ }, {}), concatMap(triggers => {
682
+ const srcs = Object.values(triggers);
683
+ return concat(...srcs).pipe(takeWhile(([_, executed]) => executed, false), reduce((result, [name, executed]) => {
684
+ return { ...result, [name]: executed };
685
+ }, {}));
686
+ }), tap(status => {
687
+ if (this.#handlers == null) {
688
+ return;
689
+ }
690
+ for (const [k, v] of Object.entries(status)) {
691
+ if (v) {
692
+ delete this.#handlers[k];
693
+ }
694
+ }
695
+ }), share());
696
+ this.status$ = this.#status.pipe(shareReplay(1));
697
+ this.current$ = new ReplaySubject();
698
+ this.states = { ...states };
699
+ for (const value of Object.values(states)) {
700
+ if (value.order == null) {
701
+ value.order = "parallel";
702
+ }
703
+ }
704
+ }
705
+ on(state, fn) {
706
+ if (state in this.#handlers) {
707
+ this.#handlers[state].push(fn);
708
+ }
709
+ else {
710
+ this.#handlers[state] = [fn];
711
+ }
712
+ return () => {
713
+ const idx = this.#handlers[state].indexOf(fn);
714
+ if (idx > -1) {
715
+ this.#handlers[state].splice(idx, 1);
716
+ }
717
+ };
718
+ }
719
+ onExecute(state) {
720
+ return this.current$.pipe(takeUntil(this.#until), filter(current => current === state));
721
+ }
722
+ onDone(state) {
723
+ return this.status$.pipe(filter(status => status[state]), take(1));
724
+ }
725
+ run(...states) {
726
+ const flattened = flatten(states).filter((v, i, a) => a.indexOf(v) === i);
727
+ const expectedCount = flattened.length;
728
+ return new Observable((dest) => {
729
+ dest.add(this.#status.subscribe(currentStatus => {
730
+ const executedCount = Object.entries(currentStatus).reduce((result, [name, done]) => result + (done && flattened.includes(name) ? 1 : 0), 0);
731
+ if (executedCount >= expectedCount) {
732
+ dest.next();
733
+ dest.complete();
734
+ }
735
+ }));
736
+ for (const s of flattened) {
737
+ this.#trigger.next(s);
738
+ }
739
+ });
740
+ }
741
+ /**
742
+ * Run this state changes on other state
743
+ */
744
+ control(state, remap) {
745
+ const remove = [];
746
+ for (const selfState of Object.keys(this.states)) {
747
+ const otherState = remap?.[selfState] || selfState;
748
+ if (otherState in state.states) {
749
+ remove.push(this.on(selfState, () => state.run(otherState)));
750
+ }
751
+ }
752
+ return () => {
753
+ for (const fn of remove) {
754
+ fn();
755
+ }
756
+ };
757
+ }
758
+ destroy() {
759
+ ;
760
+ this.#handlers = null;
761
+ this.#until.next();
762
+ this.#until.complete();
763
+ }
764
+ #run(state) {
765
+ if (this.#handlers == null || !this.states[state]) {
766
+ return of(true);
767
+ }
768
+ return new Observable((dest) => {
769
+ this.current$.next(state);
770
+ const handlers = this.#handlers[state];
771
+ if (handlers == null || handlers.length === 0) {
772
+ dest.next(true);
773
+ dest.complete();
774
+ return;
775
+ }
776
+ const observables = handlers.map(handler => {
777
+ const observable = handler();
778
+ if (observable == null) {
779
+ return of(null);
780
+ }
781
+ else {
782
+ return from(observable);
783
+ }
784
+ });
785
+ const config = this.states[state];
786
+ if (observables.length === 1) {
787
+ return observables[0].pipe(map(() => true)).subscribe(dest);
788
+ }
789
+ else if (config.order === "parallel") {
790
+ return forkJoin(observables)
791
+ .pipe(map(() => true))
792
+ .subscribe(dest);
793
+ }
794
+ else if (config.order === "sequential") {
795
+ return concat(...observables)
796
+ .pipe(map(() => true))
797
+ .subscribe(dest);
798
+ }
799
+ else {
800
+ dest.next(true);
801
+ dest.complete();
802
+ }
803
+ return;
804
+ }).pipe(takeLast(1), catchError(error => {
805
+ if (error instanceof StopLifecycle) {
806
+ return of(false);
807
+ }
808
+ else {
809
+ return throwError(() => error);
810
+ }
811
+ }));
812
+ }
813
+ }
814
+
783
815
  /**
784
816
  * Generated bundle index. Do not edit.
785
817
  */
786
818
 
787
- export { Busy, BusyTracker, BusyTrackerState, DEFAULT, Destruct, Destructible, Disabled, DisabledState, FastDOM, NUMBER_REGEX, NumberWithUnit, StateChain, UNIT_REGEX, VALUE_DEFAULT, __zone_symbol__, coerceBoolAttr, coerceElement, deepClone, deepFreeze, fcObservableProperty, fcObservableValue, isElementInput, isFalsy, isPlainObject, isTruthy, rawCancelAnimationFrame, rawClearInterval, rawClearTimeout, rawRequestAnimationFrame, rawSetInterval, rawSetTimeout, toSorted };
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 };
788
820
  //# 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/state-chain.ts","../../../../packages/common/src/unngzone.ts","../../../../packages/common/src/dom.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","import {\n catchError,\n concat,\n forkJoin,\n from,\n map,\n Observable,\n ObservableInput,\n of,\n ReplaySubject,\n tap,\n throwError\n} from \"rxjs\"\n\nexport type StateChainHandler = () => ObservableInput<unknown> | null | undefined | void\n\nexport class StopStateChain extends Error {}\n\nexport type StateOptions = Record<string, { order?: \"parallel\" | \"sequential\"; cancellable?: boolean }>\n\nexport type StateRemap<A, B> =\n A extends StateChain<infer AO, infer AS>\n ? B extends StateChain<infer BO, infer BS>\n ? Partial<{ [K in AS]: BS }>\n : never\n : never\n\nexport class StateChain<T extends StateOptions, S extends string | number | symbol = keyof T> {\n readonly states: T\n readonly #executed: S[] = []\n readonly #handlers: Partial<Record<S, Array<StateChainHandler>>> = {}\n\n #current = new ReplaySubject<S>(1)\n readonly current$ = this.#current.asObservable()\n\n constructor(states: T) {\n this.states = { ...states }\n\n for (const value of Object.values(states)) {\n if (value.order == null) {\n value.order = \"parallel\"\n }\n }\n }\n\n on(state: S, fn: StateChainHandler) {\n if (state in this.#handlers) {\n this.#handlers[state]!.push(fn)\n } else {\n this.#handlers[state] = [fn]\n }\n\n return () => {\n const idx = this.#handlers[state]!.indexOf(fn)\n if (idx > -1) {\n this.#handlers[state]!.splice(idx, 1)\n }\n }\n }\n\n /**\n * Run this state changes on other state\n */\n control<T extends StateChain<any, any>>(state: T, remap?: StateRemap<this, T>) {\n const remove: Array<() => void> = []\n for (const selfState of Object.keys(this.states)) {\n const otherState = (remap as unknown as any)?.[selfState] || selfState\n if (otherState in state.states) {\n remove.push(this.on(selfState as any, () => state.run([otherState])))\n }\n }\n\n return () => {\n for (const fn of remove) {\n fn()\n }\n }\n }\n\n run(states: S[]) {\n if (states.length === 0) {\n throw new Error(\"Missing states\")\n }\n\n const executed: S[] = []\n return concat(...states.map(state => this.#run(state).pipe(tap(s => s && executed.push(s))))).pipe(\n catchError(err => (err instanceof StopStateChain ? of(executed) : throwError(() => err)))\n )\n }\n\n #run(state: S): Observable<S | null> {\n if (this.#handlers == null) {\n return of(null)\n }\n const options = this.states[state as any]\n\n return new Observable(dst => {\n if (this.#executed.includes(state)) {\n dst.next(state)\n dst.complete()\n return\n }\n this.#executed.push(state)\n this.#current.next(state)\n\n const handlers = this.#handlers[state]\n if (handlers == null || handlers.length === 0) {\n dst.next(state)\n dst.complete()\n return\n }\n\n const observables = handlers\n .map(handler => {\n const result = handler()\n if (result == null) {\n return of(null)\n } else {\n return from(result)\n }\n })\n .map(handler =>\n handler.pipe(\n catchError(err => {\n if (err instanceof StopStateChain) {\n const idx = this.#executed.indexOf(state)\n if (idx > -1) {\n this.#executed.splice(idx, 1)\n }\n dst.error(err)\n dst.complete()\n return of(null)\n } else {\n return throwError(() => err)\n }\n })\n )\n )\n\n if (observables.length === 1) {\n return observables[0].pipe(map(() => state)).subscribe(dst)\n } else {\n if (options.order === \"parallel\") {\n return forkJoin(observables)\n .pipe(map(() => state))\n .subscribe(dst)\n } else {\n return concat(...observables)\n .pipe(map(() => state))\n .subscribe(dst)\n }\n }\n })\n }\n\n destroy() {\n ;(this as any).#handlers = null as any\n }\n}\n","export const Zone = (window as any).Zone\n\nexport function __zone_symbol__<T extends string>(val: T): T {\n const symbol =\n typeof Zone !== \"undefined\" && (Zone as any).__symbol__\n ? (Zone as any).__symbol__(val)\n : `__zone_symbol__${val}`\n return typeof window[symbol] !== \"undefined\" ? symbol : val\n}\n\nexport const rawSetTimeout = window[__zone_symbol__(\"setTimeout\")]\nexport const rawClearTimeout = window[__zone_symbol__(\"clearTimeout\")]\nexport const rawSetInterval = window[__zone_symbol__(\"setInterval\")]\nexport const rawClearInterval = window[__zone_symbol__(\"clearInterval\")]\nexport const rawRequestAnimationFrame = window[__zone_symbol__(\"requestAnimationFrame\")]\nexport const rawCancelAnimationFrame = window[__zone_symbol__(\"cancelAnimationFrame\")]\n","import { rawRequestAnimationFrame } from \"./unngzone\"\n\ntype FastDomHandler = () => void\n\nclass _FastDOM {\n #rafId: any\n #mutate: Array<FastDomHandler> = []\n #measure: Array<FastDomHandler> = []\n\n public mutate(handler: FastDomHandler) {\n this.#mutate.push(handler)\n this._schedule()\n }\n\n public mutateNext(handler: FastDomHandler) {\n this.#mutate.push(() => {\n this.#mutate.push(handler)\n })\n this._schedule()\n }\n\n public measure(handler: FastDomHandler) {\n this.#measure.push(handler)\n this._schedule()\n }\n\n public setStyle(el: HTMLElement, style: { [key: string]: any }, chain?: FastDomHandler) {\n this.mutate(() => {\n for (const [k, v] of Object.entries(style)) {\n if (v == null) {\n el.style.removeProperty(k)\n } else {\n el.style.setProperty(k, v)\n }\n }\n\n chain && chain()\n })\n }\n\n public setAttributes(el: HTMLElement, attrs: { [key: string]: any }, chain?: FastDomHandler) {\n this.mutate(() => {\n for (const [k, v] of Object.entries(attrs)) {\n if (v == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, v)\n }\n }\n\n chain && chain()\n })\n }\n\n private _schedule() {\n if (!this.#rafId) {\n this.#rafId = rawRequestAnimationFrame(this._apply.bind(this))\n }\n }\n\n private _apply() {\n this.#rafId = null\n\n const measure = this.#measure.slice()\n const mutate = this.#mutate.slice()\n this.#measure.length = 0\n this.#mutate.length = 0\n\n runQ(measure)\n runQ(mutate)\n\n if (this.#measure.length || this.#mutate.length) {\n this._schedule()\n }\n }\n}\n\nfunction runQ(items: FastDomHandler[]) {\n let item: FastDomHandler\n while ((item = items.shift()!)) {\n item()\n }\n}\n\nexport const FastDOM = new _FastDOM()\n","/**\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/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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"}
package/index.d.ts CHANGED
@@ -5,7 +5,6 @@ export { NumberWithUnit, NumberWithUnitInput, UNIT_REGEX, NUMBER_REGEX } from ".
5
5
  export { coerceBoolAttr, BooleanInput } from "./coerce/bool-attr";
6
6
  export { coerceElement, ElementInput, isElementInput } from "./coerce/element";
7
7
  export * from "./form";
8
- export { StateChain, StateChainHandler } from "./state-chain";
9
8
  export { rawCancelAnimationFrame, rawClearInterval, rawClearTimeout, rawRequestAnimationFrame, rawSetInterval, rawSetTimeout, __zone_symbol__ } from "./unngzone";
10
9
  export { FastDOM } from "./dom";
11
10
  export { Busy, BusyEvent, BusyEventParams, BusyProgress, BusyTrackerState, BusyTracker } from "./busy";
@@ -17,3 +16,4 @@ export { NumberRange } from "./types/number-range";
17
16
  export { Primitive, Builtins, isPrimitive, AsPrimitive, ToPrimitiveMap } from "./types/primitive";
18
17
  export { DeepReadonly, ReadonlyDate } from "./types/readonly";
19
18
  export { deepClone, deepFreeze, isPlainObject, toSorted, isFalsy, isTruthy } from "./util";
19
+ export * from "./lifecycle";
package/lifecycle.d.ts ADDED
@@ -0,0 +1,27 @@
1
+ import { Observable, ObservableInput, ReplaySubject } from "rxjs";
2
+ export type LifecycleHandler = () => ObservableInput<unknown> | null | undefined | void;
3
+ export declare class StopLifecycle extends Error {
4
+ }
5
+ export type LifecycleOptions = Record<string, {
6
+ order?: "parallel" | "sequential";
7
+ cancellable?: boolean;
8
+ }>;
9
+ export type LifecycleRemap<A, B> = A extends Lifecycle<infer AO, infer AS> ? B extends Lifecycle<infer BO, infer BS> ? Partial<{
10
+ [K in AS]: BS;
11
+ }> : never : never;
12
+ export declare class Lifecycle<T extends LifecycleOptions, S extends keyof T = keyof T> {
13
+ #private;
14
+ readonly states: T;
15
+ readonly status$: Observable<Record<S, boolean>>;
16
+ readonly current$: ReplaySubject<S>;
17
+ constructor(states: T);
18
+ on(state: S, fn: LifecycleHandler): () => void;
19
+ onExecute(state: S): Observable<S>;
20
+ onDone(state: S): Observable<Record<S, boolean>>;
21
+ run(...states: Array<S | S[]>): Observable<void>;
22
+ /**
23
+ * Run this state changes on other state
24
+ */
25
+ control<T extends Lifecycle<any, any>>(state: T, remap?: LifecycleRemap<this, T>): () => void;
26
+ destroy(): void;
27
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngutil/common",
3
- "version": "0.0.48",
3
+ "version": "0.0.49",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^17.3.6",
6
6
  "@angular/core": "^17.3.6",
@@ -1,123 +0,0 @@
1
- import { catchError, concat, forkJoin, from, map, Observable, of, ReplaySubject, tap, throwError } from "rxjs";
2
- export class StopStateChain extends Error {
3
- }
4
- export class StateChain {
5
- #executed;
6
- #handlers;
7
- #current;
8
- constructor(states) {
9
- this.#executed = [];
10
- this.#handlers = {};
11
- this.#current = new ReplaySubject(1);
12
- this.current$ = this.#current.asObservable();
13
- this.states = { ...states };
14
- for (const value of Object.values(states)) {
15
- if (value.order == null) {
16
- value.order = "parallel";
17
- }
18
- }
19
- }
20
- on(state, fn) {
21
- if (state in this.#handlers) {
22
- this.#handlers[state].push(fn);
23
- }
24
- else {
25
- this.#handlers[state] = [fn];
26
- }
27
- return () => {
28
- const idx = this.#handlers[state].indexOf(fn);
29
- if (idx > -1) {
30
- this.#handlers[state].splice(idx, 1);
31
- }
32
- };
33
- }
34
- /**
35
- * Run this state changes on other state
36
- */
37
- control(state, remap) {
38
- const remove = [];
39
- for (const selfState of Object.keys(this.states)) {
40
- const otherState = remap?.[selfState] || selfState;
41
- if (otherState in state.states) {
42
- remove.push(this.on(selfState, () => state.run([otherState])));
43
- }
44
- }
45
- return () => {
46
- for (const fn of remove) {
47
- fn();
48
- }
49
- };
50
- }
51
- run(states) {
52
- if (states.length === 0) {
53
- throw new Error("Missing states");
54
- }
55
- const executed = [];
56
- return concat(...states.map(state => this.#run(state).pipe(tap(s => s && executed.push(s))))).pipe(catchError(err => (err instanceof StopStateChain ? of(executed) : throwError(() => err))));
57
- }
58
- #run(state) {
59
- if (this.#handlers == null) {
60
- return of(null);
61
- }
62
- const options = this.states[state];
63
- return new Observable(dst => {
64
- if (this.#executed.includes(state)) {
65
- dst.next(state);
66
- dst.complete();
67
- return;
68
- }
69
- this.#executed.push(state);
70
- this.#current.next(state);
71
- const handlers = this.#handlers[state];
72
- if (handlers == null || handlers.length === 0) {
73
- dst.next(state);
74
- dst.complete();
75
- return;
76
- }
77
- const observables = handlers
78
- .map(handler => {
79
- const result = handler();
80
- if (result == null) {
81
- return of(null);
82
- }
83
- else {
84
- return from(result);
85
- }
86
- })
87
- .map(handler => handler.pipe(catchError(err => {
88
- if (err instanceof StopStateChain) {
89
- const idx = this.#executed.indexOf(state);
90
- if (idx > -1) {
91
- this.#executed.splice(idx, 1);
92
- }
93
- dst.error(err);
94
- dst.complete();
95
- return of(null);
96
- }
97
- else {
98
- return throwError(() => err);
99
- }
100
- })));
101
- if (observables.length === 1) {
102
- return observables[0].pipe(map(() => state)).subscribe(dst);
103
- }
104
- else {
105
- if (options.order === "parallel") {
106
- return forkJoin(observables)
107
- .pipe(map(() => state))
108
- .subscribe(dst);
109
- }
110
- else {
111
- return concat(...observables)
112
- .pipe(map(() => state))
113
- .subscribe(dst);
114
- }
115
- }
116
- });
117
- }
118
- destroy() {
119
- ;
120
- this.#handlers = null;
121
- }
122
- }
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3N0YXRlLWNoYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFDUixJQUFJLEVBQ0osR0FBRyxFQUNILFVBQVUsRUFFVixFQUFFLEVBQ0YsYUFBYSxFQUNiLEdBQUcsRUFDSCxVQUFVLEVBQ2IsTUFBTSxNQUFNLENBQUE7QUFJYixNQUFNLE9BQU8sY0FBZSxTQUFRLEtBQUs7Q0FBRztBQVc1QyxNQUFNLE9BQU8sVUFBVTtJQUVWLFNBQVMsQ0FBVTtJQUNuQixTQUFTLENBQW1EO0lBRXJFLFFBQVEsQ0FBMEI7SUFHbEMsWUFBWSxNQUFTO1FBTlosY0FBUyxHQUFRLEVBQUUsQ0FBQTtRQUNuQixjQUFTLEdBQWlELEVBQUUsQ0FBQTtRQUVyRSxhQUFRLEdBQUcsSUFBSSxhQUFhLENBQUksQ0FBQyxDQUFDLENBQUE7UUFDekIsYUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUE7UUFHNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUE7UUFFM0IsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDeEMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN0QixLQUFLLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQTtZQUM1QixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxFQUFFLENBQUMsS0FBUSxFQUFFLEVBQXFCO1FBQzlCLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBRSxDQUFDLElBQUksQ0FBQyxFQUFF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QyxRQUFRLEVBQUUsQ0FBQTtvQkFDZCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDbkIsQ0FBQztxQkFBTSxDQUFDO29CQUNKLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNoQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FDSixDQUFBO1lBRUwsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMzQixPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQy9ELENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQy9CLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQzt5QkFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDdEIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUN2QixDQUFDO3FCQUFNLENBQUM7b0JBQ0osT0FBTyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUM7eUJBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ3RCLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDdkIsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxPQUFPO1FBQ0gsQ0FBQztRQUFDLElBQVksQ0FBQyxTQUFTLEdBQUcsSUFBVyxDQUFBO0lBQzFDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgY2F0Y2hFcnJvcixcbiAgICBjb25jYXQsXG4gICAgZm9ya0pvaW4sXG4gICAgZnJvbSxcbiAgICBtYXAsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBPYnNlcnZhYmxlSW5wdXQsXG4gICAgb2YsXG4gICAgUmVwbGF5U3ViamVjdCxcbiAgICB0YXAsXG4gICAgdGhyb3dFcnJvclxufSBmcm9tIFwicnhqc1wiXG5cbmV4cG9ydCB0eXBlIFN0YXRlQ2hhaW5IYW5kbGVyID0gKCkgPT4gT2JzZXJ2YWJsZUlucHV0PHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZCB8IHZvaWRcblxuZXhwb3J0IGNsYXNzIFN0b3BTdGF0ZUNoYWluIGV4dGVuZHMgRXJyb3Ige31cblxuZXhwb3J0IHR5cGUgU3RhdGVPcHRpb25zID0gUmVjb3JkPHN0cmluZywgeyBvcmRlcj86IFwicGFyYWxsZWxcIiB8IFwic2VxdWVudGlhbFwiOyBjYW5jZWxsYWJsZT86IGJvb2xlYW4gfT5cblxuZXhwb3J0IHR5cGUgU3RhdGVSZW1hcDxBLCBCPiA9XG4gICAgQSBleHRlbmRzIFN0YXRlQ2hhaW48aW5mZXIgQU8sIGluZmVyIEFTPlxuICAgICAgICA/IEIgZXh0ZW5kcyBTdGF0ZUNoYWluPGluZmVyIEJPLCBpbmZlciBCUz5cbiAgICAgICAgICAgID8gUGFydGlhbDx7IFtLIGluIEFTXTogQlMgfT5cbiAgICAgICAgICAgIDogbmV2ZXJcbiAgICAgICAgOiBuZXZlclxuXG5leHBvcnQgY2xhc3MgU3RhdGVDaGFpbjxUIGV4dGVuZHMgU3RhdGVPcHRpb25zLCBTIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sID0ga2V5b2YgVD4ge1xuICAgIHJlYWRvbmx5IHN0YXRlczogVFxuICAgIHJlYWRvbmx5ICNleGVjdXRlZDogU1tdID0gW11cbiAgICByZWFkb25seSAjaGFuZGxlcnM6IFBhcnRpYWw8UmVjb3JkPFMsIEFycmF5PFN0YXRlQ2hhaW5IYW5kbGVyPj4+ID0ge31cblxuICAgICNjdXJyZW50ID0gbmV3IFJlcGxheVN1YmplY3Q8Uz4oMSlcbiAgICByZWFkb25seSBjdXJyZW50JCA9IHRoaXMuI2N1cnJlbnQuYXNPYnNlcnZhYmxlKClcblxuICAgIGNvbnN0cnVjdG9yKHN0YXRlczogVCkge1xuICAgICAgICB0aGlzLnN0YXRlcyA9IHsgLi4uc3RhdGVzIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIE9iamVjdC52YWx1ZXMoc3RhdGVzKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLm9yZGVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5vcmRlciA9IFwicGFyYWxsZWxcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb24oc3RhdGU6IFMsIGZuOiBTdGF0ZUNoYWluSGFuZGxlcikge1xuICAgICAgICBpZiAoc3RhdGUgaW4gdGhpcy4jaGFuZGxlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuI2hhbmRsZXJzW3N0YXRlXSEucHVzaChmbilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2hhbmRsZXJzW3N0YXRlXSA9IFtmbl1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLiNoYW5kbGVyc1tzdGF0ZV0hLmluZGV4T2YoZm4pXG4gICAgICAgICAgICBpZiAoaWR4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNoYW5kbGVyc1tzdGF0ZV0hLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGhpcyBzdGF0ZSBjaGFuZ2VzIG9uIG90aGVyIHN0YXRlXG4gICAgICovXG4gICAgY29udHJvbDxUIGV4dGVuZHMgU3RhdGVDaGFpbjxhbnksIGFueT4+KHN0YXRlOiBULCByZW1hcD86IFN0YXRlUmVtYXA8dGhpcywgVD4pIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdXG4gICAgICAgIGZvciAoY29uc3Qgc2VsZlN0YXRlIG9mIE9iamVjdC5rZXlzKHRoaXMuc3RhdGVzKSkge1xuICAgICAgICAgICAgY29uc3Qgb3RoZXJTdGF0ZSA9IChyZW1hcCBhcyB1bmtub3duIGFzIGFueSk/LltzZWxmU3RhdGVdIHx8IHNlbGZTdGF0ZVxuICAgICAgICAgICAgaWYgKG90aGVyU3RhdGUgaW4gc3RhdGUuc3RhdGVzKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlLnB1c2godGhpcy5vbihzZWxmU3RhdGUgYXMgYW55LCAoKSA9PiBzdGF0ZS5ydW4oW290aGVyU3RhdGVdKSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmbiBvZiByZW1vdmUpIHtcbiAgICAgICAgICAgICAgICBmbigpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBydW4oc3RhdGVzOiBTW10pIHtcbiAgICAgICAgaWYgKHN0YXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgc3RhdGVzXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleGVjdXRlZDogU1tdID0gW11cbiAgICAgICAgcmV0dXJuIGNvbmNhdCguLi5zdGF0ZXMubWFwKHN0YXRlID0+IHRoaXMuI3J1bihzdGF0ZSkucGlwZSh0YXAocyA9PiBzICYmIGV4ZWN1dGVkLnB1c2gocykpKSkpLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiAoZXJyIGluc3RhbmNlb2YgU3RvcFN0YXRlQ2hhaW4gPyBvZihleGVjdXRlZCkgOiB0aHJvd0Vycm9yKCgpID0+IGVycikpKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgI3J1bihzdGF0ZTogUyk6IE9ic2VydmFibGU8UyB8IG51bGw+IHtcbiAgICAgICAgaWYgKHRoaXMuI2hhbmRsZXJzID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnN0YXRlc1tzdGF0ZSBhcyBhbnldXG5cbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGRzdCA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy4jZXhlY3V0ZWQuaW5jbHVkZXMoc3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgZHN0Lm5leHQoc3RhdGUpXG4gICAgICAgICAgICAgICAgZHN0LmNvbXBsZXRlKClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2V4ZWN1dGVkLnB1c2goc3RhdGUpXG4gICAgICAgICAgICB0aGlzLiNjdXJyZW50Lm5leHQoc3RhdGUpXG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy4jaGFuZGxlcnNbc3RhdGVdXG4gICAgICAgICAgICBpZiAoaGFuZGxlcnMgPT0gbnVsbCB8fCBoYW5kbGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBkc3QubmV4dChzdGF0ZSlcbiAgICAgICAgICAgICAgICBkc3QuY29tcGxldGUoKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IGhhbmRsZXJzXG4gICAgICAgICAgICAgICAgLm1hcChoYW5kbGVyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlcigpXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJvbShyZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5tYXAoaGFuZGxlciA9PlxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFN0b3BTdGF0ZUNoYWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuI2V4ZWN1dGVkLmluZGV4T2Yoc3RhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZXhlY3V0ZWQuc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QuZXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QuY29tcGxldGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKG9ic2VydmFibGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlc1swXS5waXBlKG1hcCgoKSA9PiBzdGF0ZSkpLnN1YnNjcmliZShkc3QpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9yZGVyID09PSBcInBhcmFsbGVsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKG9ic2VydmFibGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwKCgpID0+IHN0YXRlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoZHN0KVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25jYXQoLi4ub2JzZXJ2YWJsZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShtYXAoKCkgPT4gc3RhdGUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShkc3QpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIDsodGhpcyBhcyBhbnkpLiNoYW5kbGVycyA9IG51bGwgYXMgYW55XG4gICAgfVxufVxuIl19
package/state-chain.d.ts DELETED
@@ -1,24 +0,0 @@
1
- import { Observable, ObservableInput } from "rxjs";
2
- export type StateChainHandler = () => ObservableInput<unknown> | null | undefined | void;
3
- export declare class StopStateChain extends Error {
4
- }
5
- export type StateOptions = Record<string, {
6
- order?: "parallel" | "sequential";
7
- cancellable?: boolean;
8
- }>;
9
- export type StateRemap<A, B> = A extends StateChain<infer AO, infer AS> ? B extends StateChain<infer BO, infer BS> ? Partial<{
10
- [K in AS]: BS;
11
- }> : never : never;
12
- export declare class StateChain<T extends StateOptions, S extends string | number | symbol = keyof T> {
13
- #private;
14
- readonly states: T;
15
- readonly current$: Observable<S>;
16
- constructor(states: T);
17
- on(state: S, fn: StateChainHandler): () => void;
18
- /**
19
- * Run this state changes on other state
20
- */
21
- control<T extends StateChain<any, any>>(state: T, remap?: StateRemap<this, T>): () => void;
22
- run(states: S[]): Observable<S | S[] | null>;
23
- destroy(): void;
24
- }