@ngutil/layout 0.0.3-dev.8 → 0.0.3
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/docking/docking-content.component.d.ts +1 -1
- package/docking/docking-layout.component.d.ts +1 -3
- package/docking/docking-panel.component.d.ts +10 -4
- package/esm2022/docking/docking-content.component.mjs +3 -3
- package/esm2022/docking/docking-layout.component.mjs +16 -140
- package/esm2022/docking/docking-panel.component.mjs +70 -15
- package/esm2022/index.mjs +2 -2
- package/esm2022/l9/state.mjs +1 -9
- package/esm2022/services/slots.service.mjs +240 -0
- package/fesm2022/ngutil-layout.mjs +322 -269
- package/fesm2022/ngutil-layout.mjs.map +1 -1
- package/index.d.ts +1 -1
- package/l9/state.d.ts +1 -3
- package/package.json +4 -2
- package/services/slots.service.d.ts +69 -0
- package/esm2022/util/dimension-watcher.mjs +0 -84
- package/esm2022/util/dimension.mjs +0 -2
- package/esm2022/util/index.mjs +0 -3
- package/esm2022/util/media-watcher.mjs +0 -29
- package/esm2022/util/rect.mjs +0 -2
- package/util/dimension-watcher.d.ts +0 -4
- package/util/dimension.d.ts +0 -5
- package/util/index.d.ts +0 -4
- package/util/media-watcher.d.ts +0 -5
- package/util/rect.d.ts +0 -5
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import { Component, ElementRef, inject, Input, Output } from "@angular/core";
|
|
2
|
-
import { BehaviorSubject, combineLatest, map, of, shareReplay, switchMap } from "rxjs";
|
|
1
|
+
import { Component, ElementRef, inject, Input, Output, ViewChild } from "@angular/core";
|
|
2
|
+
import { BehaviorSubject, combineLatest, map, of, ReplaySubject, shareReplay, switchMap } from "rxjs";
|
|
3
3
|
import { coerceBoolAttr, Destructible, FastDOM, NumberWithUnit } from "@ngutil/common";
|
|
4
|
+
import { DimensionWatcher } from "@ngutil/style";
|
|
4
5
|
import { L9Range } from "../l9/range";
|
|
5
|
-
import { watchDimension } from "../util";
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
const DEFAULT_POSITION = L9Range.coerce("left");
|
|
8
|
+
const HIDDEN_SIZE = new NumberWithUnit(0, "px");
|
|
9
|
+
const AUTO_SIZE = NumberWithUnit.coerce("auto");
|
|
8
10
|
export class DockingPanelComponent extends Destructible {
|
|
11
|
+
#dimWatcher;
|
|
9
12
|
set positionInput(val) {
|
|
10
13
|
const coerced = L9Range.coerce(val);
|
|
11
|
-
console.log("SET POSITION", coerced, this.position.value.isEq(coerced));
|
|
12
14
|
if (coerced.orient === "rect") {
|
|
13
15
|
throw new Error(`Invalid position value: ${val}`);
|
|
14
16
|
}
|
|
@@ -49,19 +51,22 @@ export class DockingPanelComponent extends Destructible {
|
|
|
49
51
|
}
|
|
50
52
|
#minimizable;
|
|
51
53
|
#minimizableAuto;
|
|
54
|
+
#contentSize;
|
|
52
55
|
#autoSize;
|
|
53
56
|
constructor() {
|
|
54
57
|
super();
|
|
55
58
|
this.el = inject((ElementRef));
|
|
59
|
+
this.#dimWatcher = inject(DimensionWatcher);
|
|
56
60
|
this.position = new BehaviorSubject(DEFAULT_POSITION);
|
|
57
|
-
this.state = new BehaviorSubject("
|
|
58
|
-
this.mode = new BehaviorSubject("
|
|
59
|
-
this.#fullSize = new BehaviorSubject(
|
|
60
|
-
this.#miniSize = new BehaviorSubject(
|
|
61
|
+
this.state = new BehaviorSubject("full");
|
|
62
|
+
this.mode = new BehaviorSubject("rigid");
|
|
63
|
+
this.#fullSize = new BehaviorSubject(AUTO_SIZE);
|
|
64
|
+
this.#miniSize = new BehaviorSubject(HIDDEN_SIZE);
|
|
61
65
|
this.#minimizable = false;
|
|
62
66
|
this.#minimizableAuto = true;
|
|
67
|
+
this.#contentSize = new ReplaySubject(1);
|
|
63
68
|
this.#autoSize = combineLatest({
|
|
64
|
-
dim:
|
|
69
|
+
dim: this.#contentSize,
|
|
65
70
|
pos: this.position
|
|
66
71
|
}).pipe(map(({ dim, pos }) => {
|
|
67
72
|
if (pos.orient === "horizontal") {
|
|
@@ -92,7 +97,8 @@ export class DockingPanelComponent extends Destructible {
|
|
|
92
97
|
state: this.state,
|
|
93
98
|
mode: this.mode,
|
|
94
99
|
fullSize: this.fullSize,
|
|
95
|
-
miniSize: this.miniSize
|
|
100
|
+
miniSize: this.miniSize,
|
|
101
|
+
contentSize: this.#contentSize
|
|
96
102
|
});
|
|
97
103
|
this.d.sub(this.changes).subscribe(changes => {
|
|
98
104
|
if (this.#minimizableAuto) {
|
|
@@ -104,13 +110,51 @@ export class DockingPanelComponent extends Destructible {
|
|
|
104
110
|
mode: changes.mode,
|
|
105
111
|
side: changes.position.orient === "horizontal" ? changes.position.cells[0].v : changes.position.cells[0].h
|
|
106
112
|
});
|
|
113
|
+
const isHorizontal = changes.position.orient === "horizontal";
|
|
114
|
+
let w = null;
|
|
115
|
+
let h = null;
|
|
116
|
+
// TODO: when change state from mini -> hidden, currently wrong behavior
|
|
117
|
+
// the good behavior is to not gain fullSize ang go to hidden
|
|
118
|
+
if (changes.state === "mini") {
|
|
119
|
+
if (isHorizontal) {
|
|
120
|
+
h = changes.miniSize.unit === "auto" ? changes.contentSize.height : changes.miniSize;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
w = changes.miniSize.unit === "auto" ? changes.contentSize.width : changes.miniSize;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
if (isHorizontal) {
|
|
128
|
+
h = changes.fullSize.unit === "auto" ? changes.contentSize.height : changes.fullSize;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
w = changes.fullSize.unit === "auto" ? changes.contentSize.width : changes.fullSize;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
FastDOM.setStyle(this.el.nativeElement, {
|
|
135
|
+
"--docking-panel-w": w != null ? `${w}` : null,
|
|
136
|
+
"--docking-panel-h": h != null ? `${h}` : null,
|
|
137
|
+
"--docking-panel-content-w": changes.contentSize.width,
|
|
138
|
+
"--docking-panel-content-h": changes.contentSize.height
|
|
139
|
+
}, () => FastDOM.setAttributes(this.el.nativeElement, { animate: "" }));
|
|
107
140
|
});
|
|
108
141
|
}
|
|
142
|
+
ngAfterViewInit() {
|
|
143
|
+
this.d
|
|
144
|
+
.sub(this.#dimWatcher.watch(this.content, "scroll-box"))
|
|
145
|
+
.pipe(map(dim => {
|
|
146
|
+
return {
|
|
147
|
+
width: new NumberWithUnit(dim.width, "px"),
|
|
148
|
+
height: new NumberWithUnit(dim.height, "px")
|
|
149
|
+
};
|
|
150
|
+
}))
|
|
151
|
+
.subscribe(this.#contentSize);
|
|
152
|
+
}
|
|
109
153
|
open() {
|
|
110
154
|
this.state.next("full");
|
|
111
155
|
}
|
|
112
156
|
close() {
|
|
113
|
-
this.state.next("
|
|
157
|
+
this.state.next("hidden");
|
|
114
158
|
}
|
|
115
159
|
minimize() {
|
|
116
160
|
if (this.minimizable) {
|
|
@@ -118,12 +162,23 @@ export class DockingPanelComponent extends Destructible {
|
|
|
118
162
|
}
|
|
119
163
|
}
|
|
120
164
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DockingPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
121
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: DockingPanelComponent, isStandalone: true, selector: "nu-docking-panel", inputs: { positionInput: ["position", "positionInput"], stateInput: ["state", "stateInput"], modeInput: ["mode", "modeInput"], fullSizeInput: ["fullSize", "fullSizeInput"], miniSizeInput: ["miniSize", "miniSizeInput"], minimizable: "minimizable" }, outputs: { state: "stateChanges" },
|
|
165
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: DockingPanelComponent, isStandalone: true, selector: "nu-docking-panel", inputs: { positionInput: ["position", "positionInput"], stateInput: ["state", "stateInput"], modeInput: ["mode", "modeInput"], fullSizeInput: ["fullSize", "fullSizeInput"], miniSizeInput: ["miniSize", "miniSizeInput"], minimizable: "minimizable" }, outputs: { state: "stateChanges" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, read: ElementRef, static: true }], exportAs: ["nuDockingPanel"], usesInheritance: true, ngImport: i0, template: `
|
|
166
|
+
<div class="content" #content>
|
|
167
|
+
<ng-content></ng-content>
|
|
168
|
+
</div>
|
|
169
|
+
`, isInline: true, styles: [":host{---docking-panel-t: var(--docking-panel-t, auto);---docking-panel-r: var(--docking-panel-r, auto);---docking-panel-b: var(--docking-panel-b, auto);---docking-panel-l: var(--docking-panel-l, auto);---docking-panel-w: var(--docking-panel-w, auto);---docking-panel-h: var(--docking-panel-h, auto);---docking-panel-content-w: var(--docking-panel-content-w, var(---docking-panel-w));---docking-panel-content-g: var(--docking-panel-content-g, var(---docking-panel-h));display:flex;flex-flow:column nowrap;align-items:stretch;position:absolute;box-sizing:border-box;overflow:hidden;top:var(---docking-panel-t);right:var(---docking-panel-r);bottom:var(---docking-panel-b);left:var(---docking-panel-l);width:var(---docking-panel-w);height:var(---docking-panel-h)}:host[animate]{transition:transform var(---docking-layout-anim-duration) var(---docking-layout-anim-ease),width var(---docking-layout-anim-duration) var(---docking-layout-anim-ease),height var(---docking-layout-anim-duration) var(---docking-layout-anim-ease)}:host[side=top],:host[side=left]{---docking-panel-t-hide: -100%;---docking-panel-t-visible: 0%}:host[side=bottom],:host[side=right]{---docking-panel-t-hide: 100%;---docking-panel-t-visible: 0%}:host[state=hidden][orient=horizontal]{transform:translateY(var(---docking-panel-t-hide))}:host[state=hidden][orient=vertical]{transform:translate(var(---docking-panel-t-hide))}:host:not([state=hidden])[orient=horizontal]{transform:translateY(var(---docking-panel-t-visible))}:host:not([state=hidden])[orient=vertical]{transform:translate(var(---docking-panel-t-visible))}\n"] }); }
|
|
122
170
|
}
|
|
123
171
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DockingPanelComponent, decorators: [{
|
|
124
172
|
type: Component,
|
|
125
|
-
args: [{ standalone: true, selector: "nu-docking-panel", exportAs: "nuDockingPanel", template:
|
|
126
|
-
|
|
173
|
+
args: [{ standalone: true, selector: "nu-docking-panel", exportAs: "nuDockingPanel", template: `
|
|
174
|
+
<div class="content" #content>
|
|
175
|
+
<ng-content></ng-content>
|
|
176
|
+
</div>
|
|
177
|
+
`, styles: [":host{---docking-panel-t: var(--docking-panel-t, auto);---docking-panel-r: var(--docking-panel-r, auto);---docking-panel-b: var(--docking-panel-b, auto);---docking-panel-l: var(--docking-panel-l, auto);---docking-panel-w: var(--docking-panel-w, auto);---docking-panel-h: var(--docking-panel-h, auto);---docking-panel-content-w: var(--docking-panel-content-w, var(---docking-panel-w));---docking-panel-content-g: var(--docking-panel-content-g, var(---docking-panel-h));display:flex;flex-flow:column nowrap;align-items:stretch;position:absolute;box-sizing:border-box;overflow:hidden;top:var(---docking-panel-t);right:var(---docking-panel-r);bottom:var(---docking-panel-b);left:var(---docking-panel-l);width:var(---docking-panel-w);height:var(---docking-panel-h)}:host[animate]{transition:transform var(---docking-layout-anim-duration) var(---docking-layout-anim-ease),width var(---docking-layout-anim-duration) var(---docking-layout-anim-ease),height var(---docking-layout-anim-duration) var(---docking-layout-anim-ease)}:host[side=top],:host[side=left]{---docking-panel-t-hide: -100%;---docking-panel-t-visible: 0%}:host[side=bottom],:host[side=right]{---docking-panel-t-hide: 100%;---docking-panel-t-visible: 0%}:host[state=hidden][orient=horizontal]{transform:translateY(var(---docking-panel-t-hide))}:host[state=hidden][orient=vertical]{transform:translate(var(---docking-panel-t-hide))}:host:not([state=hidden])[orient=horizontal]{transform:translateY(var(---docking-panel-t-visible))}:host:not([state=hidden])[orient=vertical]{transform:translate(var(---docking-panel-t-visible))}\n"] }]
|
|
178
|
+
}], ctorParameters: () => [], propDecorators: { content: [{
|
|
179
|
+
type: ViewChild,
|
|
180
|
+
args: ["content", { read: ElementRef, static: true }]
|
|
181
|
+
}], positionInput: [{
|
|
127
182
|
type: Input,
|
|
128
183
|
args: ["position"]
|
|
129
184
|
}], stateInput: [{
|
|
@@ -145,4 +200,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
145
200
|
type: Input,
|
|
146
201
|
args: ["minimizable"]
|
|
147
202
|
}] } });
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2luZy1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2RvY2tpbmcvZG9ja2luZy1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRWxHLE9BQU8sRUFFSCxjQUFjLEVBQ2QsWUFBWSxFQUNaLE9BQU8sRUFDUCxjQUFjLEVBRWpCLE1BQU0sZ0JBQWdCLENBQUE7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBZSxNQUFNLGFBQWEsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFBOztBQUt4QyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7QUFTL0MsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFlBQVk7SUFHbkQsSUFDSSxhQUFhLENBQUMsR0FBMEI7UUFDeEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVuQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFFdkUsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDckQsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMvQixDQUFDO0lBQ0wsQ0FBQztJQUdELElBQ0ksVUFBVSxDQUFDLEdBQXNCO1FBQ2pDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDeEIsQ0FBQztJQUNMLENBQUM7SUFJRCxJQUNJLFNBQVMsQ0FBQyxHQUFxQjtRQUMvQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZCLENBQUM7SUFDTCxDQUFDO0lBR0QsSUFDSSxhQUFhLENBQUMsR0FBd0I7UUFDdEMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDaEQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNoQyxDQUFDO0lBQ0wsQ0FBQztJQUNRLFNBQVMsQ0FBZ0U7SUFFbEYsSUFDSSxhQUFhLENBQUMsR0FBd0I7UUFDdEMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDaEQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNoQyxDQUFDO0lBQ0wsQ0FBQztJQUNRLFNBQVMsQ0FBZ0U7SUFFbEYsSUFDSSxXQUFXLENBQUMsR0FBaUI7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQTtJQUNqQyxDQUFDO0lBQ0QsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFBO0lBQzVCLENBQUM7SUFDRCxZQUFZLENBQWlCO0lBQzdCLGdCQUFnQixDQUFnQjtJQUV2QixTQUFTLENBWWpCO0lBZ0NEO1FBQ0ksS0FBSyxFQUFFLENBQUE7UUE3R0YsT0FBRSxHQUFHLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFBO1FBZ0JwQyxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQVUsZ0JBQWdCLENBQUMsQ0FBQTtRQVN6RCxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQW9CLFdBQVcsQ0FBQyxDQUFBO1FBUTNELFNBQUksR0FBRyxJQUFJLGVBQWUsQ0FBbUIsU0FBUyxDQUFDLENBQUE7UUFTdkQsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFpQixjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFTekUsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFpQixjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFVbEYsaUJBQVksR0FBWSxLQUFLLENBQUE7UUFDN0IscUJBQWdCLEdBQVksSUFBSSxDQUFBO1FBRXZCLGNBQVMsR0FBRyxhQUFhLENBQUM7WUFDL0IsR0FBRyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUM7WUFDeEQsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUNqQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssWUFBWSxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQTtZQUNyQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFBO1lBQ3BCLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2pCLENBQUE7UUFFUSxhQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ25DLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNiLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFBO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNuQixDQUFDO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNqQixDQUFBO1FBRVEsYUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUNuQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDYixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQTtZQUN6QixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbkIsQ0FBQztRQUNMLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDakIsQ0FBQTtRQUVRLFlBQU8sR0FBRyxhQUFhLENBQUM7WUFDN0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQzFCLENBQUMsQ0FBQTtRQUtFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDekMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFBO1lBQ3hELENBQUM7WUFFRCxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFO2dCQUN6QyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07Z0JBQy9CLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbEIsSUFBSSxFQUNBLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNHLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELElBQUk7UUFDQSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMzQixDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDM0IsQ0FBQztJQUNMLENBQUM7OEdBM0lRLHFCQUFxQjtrR0FBckIscUJBQXFCLDhaQUZwQiwyQkFBMkI7OzJGQUU1QixxQkFBcUI7a0JBUGpDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLGtCQUFrQixZQUNsQixnQkFBZ0IsWUFFaEIsMkJBQTJCO3dEQU1qQyxhQUFhO3NCQURoQixLQUFLO3VCQUFDLFVBQVU7Z0JBaUJiLFVBQVU7c0JBRGIsS0FBSzt1QkFBQyxPQUFPO2dCQU9MLEtBQUs7c0JBRGIsTUFBTTt1QkFBQyxjQUFjO2dCQUlsQixTQUFTO3NCQURaLEtBQUs7dUJBQUMsTUFBTTtnQkFTVCxhQUFhO3NCQURoQixLQUFLO3VCQUFDLFVBQVU7Z0JBVWIsYUFBYTtzQkFEaEIsS0FBSzt1QkFBQyxVQUFVO2dCQVViLFdBQVc7c0JBRGQsS0FBSzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbmplY3QsIElucHV0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHtcbiAgICBCb29sZWFuSW5wdXQsXG4gICAgY29lcmNlQm9vbEF0dHIsXG4gICAgRGVzdHJ1Y3RpYmxlLFxuICAgIEZhc3RET00sXG4gICAgTnVtYmVyV2l0aFVuaXQsXG4gICAgTnVtYmVyV2l0aFVuaXRJbnB1dFxufSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBMOVJhbmdlLCBMOVJhbmdlTmFtZSB9IGZyb20gXCIuLi9sOS9yYW5nZVwiXG5pbXBvcnQgeyB3YXRjaERpbWVuc2lvbiB9IGZyb20gXCIuLi91dGlsXCJcblxuZXhwb3J0IHR5cGUgRG9ja2luZ1BhbmVsU3RhdGUgPSBcImZ1bGxcIiB8IFwibWluaVwiIHwgXCJpbnZpc2libGVcIlxuZXhwb3J0IHR5cGUgRG9ja2luZ1BhbmVsTW9kZSA9IFwib3ZlcmxheVwiIHwgXCJlbWJlZGRlZFwiXG5cbmNvbnN0IERFRkFVTFRfUE9TSVRJT04gPSBMOVJhbmdlLmNvZXJjZShcImxlZnRcIilcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJudS1kb2NraW5nLXBhbmVsXCIsXG4gICAgZXhwb3J0QXM6IFwibnVEb2NraW5nUGFuZWxcIixcbiAgICBzdHlsZVVybDogXCIuL2RvY2tpbmctcGFuZWwuY29tcG9uZW50LnNjc3NcIixcbiAgICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gXG59KVxuZXhwb3J0IGNsYXNzIERvY2tpbmdQYW5lbENvbXBvbmVudCBleHRlbmRzIERlc3RydWN0aWJsZSB7XG4gICAgcmVhZG9ubHkgZWwgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pXG5cbiAgICBASW5wdXQoXCJwb3NpdGlvblwiKVxuICAgIHNldCBwb3NpdGlvbklucHV0KHZhbDogTDlSYW5nZSB8IEw5UmFuZ2VOYW1lKSB7XG4gICAgICAgIGNvbnN0IGNvZXJjZWQgPSBMOVJhbmdlLmNvZXJjZSh2YWwpXG5cbiAgICAgICAgY29uc29sZS5sb2coXCJTRVQgUE9TSVRJT05cIiwgY29lcmNlZCwgdGhpcy5wb3NpdGlvbi52YWx1ZS5pc0VxKGNvZXJjZWQpKVxuXG4gICAgICAgIGlmIChjb2VyY2VkLm9yaWVudCA9PT0gXCJyZWN0XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3NpdGlvbiB2YWx1ZTogJHt2YWx9YClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5wb3NpdGlvbi52YWx1ZS5pc0VxKGNvZXJjZWQpKSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLm5leHQoY29lcmNlZClcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWFkb25seSBwb3NpdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TDlSYW5nZT4oREVGQVVMVF9QT1NJVElPTilcblxuICAgIEBJbnB1dChcInN0YXRlXCIpXG4gICAgc2V0IHN0YXRlSW5wdXQodmFsOiBEb2NraW5nUGFuZWxTdGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS52YWx1ZSAhPT0gdmFsKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlLm5leHQodmFsKVxuICAgICAgICB9XG4gICAgfVxuICAgIEBPdXRwdXQoXCJzdGF0ZUNoYW5nZXNcIilcbiAgICByZWFkb25seSBzdGF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RG9ja2luZ1BhbmVsU3RhdGU+KFwiaW52aXNpYmxlXCIpXG5cbiAgICBASW5wdXQoXCJtb2RlXCIpXG4gICAgc2V0IG1vZGVJbnB1dCh2YWw6IERvY2tpbmdQYW5lbE1vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZS52YWx1ZSAhPT0gdmFsKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGUubmV4dCh2YWwpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVhZG9ubHkgbW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RG9ja2luZ1BhbmVsTW9kZT4oXCJvdmVybGF5XCIpXG5cbiAgICBASW5wdXQoXCJmdWxsU2l6ZVwiKVxuICAgIHNldCBmdWxsU2l6ZUlucHV0KHZhbDogTnVtYmVyV2l0aFVuaXRJbnB1dCkge1xuICAgICAgICBjb25zdCBjb2VyY2VkID0gTnVtYmVyV2l0aFVuaXQuY29lcmNlKHZhbCwgXCJweFwiKVxuICAgICAgICBpZiAodGhpcy4jZnVsbFNpemUudmFsdWUgIT09IGNvZXJjZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI2Z1bGxTaXplLm5leHQoY29lcmNlZClcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWFkb25seSAjZnVsbFNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE51bWJlcldpdGhVbml0PihOdW1iZXJXaXRoVW5pdC5jb2VyY2UoMCkpXG5cbiAgICBASW5wdXQoXCJtaW5pU2l6ZVwiKVxuICAgIHNldCBtaW5pU2l6ZUlucHV0KHZhbDogTnVtYmVyV2l0aFVuaXRJbnB1dCkge1xuICAgICAgICBjb25zdCBjb2VyY2VkID0gTnVtYmVyV2l0aFVuaXQuY29lcmNlKHZhbCwgXCJweFwiKVxuICAgICAgICBpZiAodGhpcy4jbWluaVNpemUudmFsdWUgIT09IGNvZXJjZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI21pbmlTaXplLm5leHQoY29lcmNlZClcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWFkb25seSAjbWluaVNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE51bWJlcldpdGhVbml0PihOdW1iZXJXaXRoVW5pdC5jb2VyY2UoMCkpXG5cbiAgICBASW5wdXQoXCJtaW5pbWl6YWJsZVwiKVxuICAgIHNldCBtaW5pbWl6YWJsZSh2YWw6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLiNtaW5pbWl6YWJsZSA9IGNvZXJjZUJvb2xBdHRyKHZhbClcbiAgICAgICAgdGhpcy4jbWluaW1pemFibGVBdXRvID0gZmFsc2VcbiAgICB9XG4gICAgZ2V0IG1pbmltaXphYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy4jbWluaW1pemFibGVcbiAgICB9XG4gICAgI21pbmltaXphYmxlOiBib29sZWFuID0gZmFsc2VcbiAgICAjbWluaW1pemFibGVBdXRvOiBib29sZWFuID0gdHJ1ZVxuXG4gICAgcmVhZG9ubHkgI2F1dG9TaXplID0gY29tYmluZUxhdGVzdCh7XG4gICAgICAgIGRpbTogd2F0Y2hEaW1lbnNpb24odGhpcy5lbC5uYXRpdmVFbGVtZW50LCBcInNjcm9sbC1ib3hcIiksXG4gICAgICAgIHBvczogdGhpcy5wb3NpdGlvblxuICAgIH0pLnBpcGUoXG4gICAgICAgIG1hcCgoeyBkaW0sIHBvcyB9KSA9PiB7XG4gICAgICAgICAgICBpZiAocG9zLm9yaWVudCA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGltLmhlaWdodFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGltLndpZHRoXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGZ1bGxTaXplID0gdGhpcy4jZnVsbFNpemUucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHNpemUgPT4ge1xuICAgICAgICAgICAgaWYgKHNpemUudW5pdCA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4jYXV0b1NpemVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHNpemUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IG1pbmlTaXplID0gdGhpcy4jbWluaVNpemUucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHNpemUgPT4ge1xuICAgICAgICAgICAgaWYgKHNpemUudW5pdCA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4jYXV0b1NpemVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHNpemUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGNoYW5nZXMgPSBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgcG9zaXRpb246IHRoaXMucG9zaXRpb24sXG4gICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgIGZ1bGxTaXplOiB0aGlzLmZ1bGxTaXplLFxuICAgICAgICBtaW5pU2l6ZTogdGhpcy5taW5pU2l6ZVxuICAgIH0pXG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKVxuXG4gICAgICAgIHRoaXMuZC5zdWIodGhpcy5jaGFuZ2VzKS5zdWJzY3JpYmUoY2hhbmdlcyA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy4jbWluaW1pemFibGVBdXRvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jbWluaW1pemFibGUgPSB0aGlzLiNtaW5pU2l6ZS52YWx1ZS52YWx1ZSAhPT0gMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBGYXN0RE9NLnNldEF0dHJpYnV0ZXModGhpcy5lbC5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IGNoYW5nZXMuc3RhdGUsXG4gICAgICAgICAgICAgICAgb3JpZW50OiBjaGFuZ2VzLnBvc2l0aW9uLm9yaWVudCxcbiAgICAgICAgICAgICAgICBtb2RlOiBjaGFuZ2VzLm1vZGUsXG4gICAgICAgICAgICAgICAgc2lkZTpcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5wb3NpdGlvbi5vcmllbnQgPT09IFwiaG9yaXpvbnRhbFwiID8gY2hhbmdlcy5wb3NpdGlvbi5jZWxsc1swXS52IDogY2hhbmdlcy5wb3NpdGlvbi5jZWxsc1swXS5oXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIG9wZW4oKSB7XG4gICAgICAgIHRoaXMuc3RhdGUubmV4dChcImZ1bGxcIilcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5uZXh0KFwiaW52aXNpYmxlXCIpXG4gICAgfVxuXG4gICAgbWluaW1pemUoKSB7XG4gICAgICAgIGlmICh0aGlzLm1pbmltaXphYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlLm5leHQoXCJtaW5pXCIpXG4gICAgICAgIH1cbiAgICB9XG59XG5cbnR5cGUgQ2hhbmdlc09ic2VydmFibGUgPSB0eXBlb2YgRG9ja2luZ1BhbmVsQ29tcG9uZW50LnByb3RvdHlwZS5jaGFuZ2VzXG5leHBvcnQgdHlwZSBEb2NraW5nUGFuZWxDaGFuZ2VzID0gQ2hhbmdlc09ic2VydmFibGUgZXh0ZW5kcyBPYnNlcnZhYmxlPGluZmVyIFQ+ID8gVCA6IG5ldmVyXG4iXX0=
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2luZy1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2RvY2tpbmcvZG9ja2luZy1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV0RyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRWpILE9BQU8sRUFFSCxjQUFjLEVBQ2QsWUFBWSxFQUNaLE9BQU8sRUFDUCxjQUFjLEVBRWpCLE1BQU0sZ0JBQWdCLENBQUE7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRWhELE9BQU8sRUFBRSxPQUFPLEVBQWUsTUFBTSxhQUFhLENBQUE7O0FBS2xELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUMvQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDL0MsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQWEvQyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsWUFBWTtJQUUxQyxXQUFXLENBQTJCO0lBSS9DLElBQ0ksYUFBYSxDQUFDLEdBQTBCO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbkMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENB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a0JBQWtCLFlBQ2xCLGdCQUFnQixZQUVoQjs7OztLQUlUO3dEQU1RLE9BQU87c0JBRGYsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSXBELGFBQWE7c0JBRGhCLEtBQUs7dUJBQUMsVUFBVTtnQkFjYixVQUFVO3NCQURiLEtBQUs7dUJBQUMsT0FBTztnQkFPTCxLQUFLO3NCQURiLE1BQU07dUJBQUMsY0FBYztnQkFJbEIsU0FBUztzQkFEWixLQUFLO3VCQUFDLE1BQU07Z0JBU1QsYUFBYTtzQkFEaEIsS0FBSzt1QkFBQyxVQUFVO2dCQVViLGFBQWE7c0JBRGhCLEtBQUs7dUJBQUMsVUFBVTtnQkFVYixXQUFXO3NCQURkLEtBQUs7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHtcbiAgICBCb29sZWFuSW5wdXQsXG4gICAgY29lcmNlQm9vbEF0dHIsXG4gICAgRGVzdHJ1Y3RpYmxlLFxuICAgIEZhc3RET00sXG4gICAgTnVtYmVyV2l0aFVuaXQsXG4gICAgTnVtYmVyV2l0aFVuaXRJbnB1dFxufSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuaW1wb3J0IHsgRGltZW5zaW9uV2F0Y2hlciB9IGZyb20gXCJAbmd1dGlsL3N0eWxlXCJcblxuaW1wb3J0IHsgTDlSYW5nZSwgTDlSYW5nZU5hbWUgfSBmcm9tIFwiLi4vbDkvcmFuZ2VcIlxuXG5leHBvcnQgdHlwZSBEb2NraW5nUGFuZWxTdGF0ZSA9IFwiZnVsbFwiIHwgXCJtaW5pXCIgfCBcImhpZGRlblwiXG5leHBvcnQgdHlwZSBEb2NraW5nUGFuZWxNb2RlID0gXCJvdmVyXCIgfCBcInB1c2hcIiB8IFwicmlnaWRcIlxuXG5jb25zdCBERUZBVUxUX1BPU0lUSU9OID0gTDlSYW5nZS5jb2VyY2UoXCJsZWZ0XCIpXG5jb25zdCBISURERU5fU0laRSA9IG5ldyBOdW1iZXJXaXRoVW5pdCgwLCBcInB4XCIpXG5jb25zdCBBVVRPX1NJWkUgPSBOdW1iZXJXaXRoVW5pdC5jb2VyY2UoXCJhdXRvXCIpXG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6IFwibnUtZG9ja2luZy1wYW5lbFwiLFxuICAgIGV4cG9ydEFzOiBcIm51RG9ja2luZ1BhbmVsXCIsXG4gICAgc3R5bGVVcmw6IFwiLi9kb2NraW5nLXBhbmVsLmNvbXBvbmVudC5zY3NzXCIsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIiAjY29udGVudD5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgYFxufSlcbmV4cG9ydCBjbGFzcyBEb2NraW5nUGFuZWxDb21wb25lbnQgZXh0ZW5kcyBEZXN0cnVjdGlibGUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICByZWFkb25seSBlbCA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50PilcbiAgICByZWFkb25seSAjZGltV2F0Y2hlciA9IGluamVjdChEaW1lbnNpb25XYXRjaGVyKVxuICAgIEBWaWV3Q2hpbGQoXCJjb250ZW50XCIsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcmVhZG9ubHkgY29udGVudCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG5cbiAgICBASW5wdXQoXCJwb3NpdGlvblwiKVxuICAgIHNldCBwb3NpdGlvbklucHV0KHZhbDogTDlSYW5nZSB8IEw5UmFuZ2VOYW1lKSB7XG4gICAgICAgIGNvbnN0IGNvZXJjZWQgPSBMOVJhbmdlLmNvZXJjZSh2YWwpXG4gICAgICAgIGlmIChjb2VyY2VkLm9yaWVudCA9PT0gXCJyZWN0XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3NpdGlvbiB2YWx1ZTogJHt2YWx9YClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5wb3NpdGlvbi52YWx1ZS5pc0VxKGNvZXJjZWQpKSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLm5leHQoY29lcmNlZClcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWFkb25seSBwb3NpdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TDlSYW5nZT4oREVGQVVMVF9QT1NJVElPTilcblxuICAgIEBJbnB1dChcInN0YXRlXCIpXG4gICAgc2V0IHN0YXRlSW5wdXQodmFsOiBEb2NraW5nUGFuZWxTdGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS52YWx1ZSAhPT0gdmFsKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlLm5leHQodmFsKVxuICAgICAgICB9XG4gICAgfVxuICAgIEBPdXRwdXQoXCJzdGF0ZUNoYW5nZXNcIilcbiAgICByZWFkb25seSBzdGF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RG9ja2luZ1BhbmVsU3RhdGU+KFwiZnVsbFwiKVxuXG4gICAgQElucHV0KFwibW9kZVwiKVxuICAgIHNldCBtb2RlSW5wdXQodmFsOiBEb2NraW5nUGFuZWxNb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUudmFsdWUgIT09IHZhbCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlLm5leHQodmFsKVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlYWRvbmx5IG1vZGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERvY2tpbmdQYW5lbE1vZGU+KFwicmlnaWRcIilcblxuICAgIEBJbnB1dChcImZ1bGxTaXplXCIpXG4gICAgc2V0IGZ1bGxTaXplSW5wdXQodmFsOiBOdW1iZXJXaXRoVW5pdElucHV0KSB7XG4gICAgICAgIGNvbnN0IGNvZXJjZWQgPSBOdW1iZXJXaXRoVW5pdC5jb2VyY2UodmFsLCBcInB4XCIpXG4gICAgICAgIGlmICh0aGlzLiNmdWxsU2l6ZS52YWx1ZSAhPT0gY29lcmNlZCkge1xuICAgICAgICAgICAgdGhpcy4jZnVsbFNpemUubmV4dChjb2VyY2VkKVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlYWRvbmx5ICNmdWxsU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TnVtYmVyV2l0aFVuaXQ+KEFVVE9fU0laRSlcblxuICAgIEBJbnB1dChcIm1pbmlTaXplXCIpXG4gICAgc2V0IG1pbmlTaXplSW5wdXQodmFsOiBOdW1iZXJXaXRoVW5pdElucHV0KSB7XG4gICAgICAgIGNvbnN0IGNvZXJjZWQgPSBOdW1iZXJXaXRoVW5pdC5jb2VyY2UodmFsLCBcInB4XCIpXG4gICAgICAgIGlmICh0aGlzLiNtaW5pU2l6ZS52YWx1ZSAhPT0gY29lcmNlZCkge1xuICAgICAgICAgICAgdGhpcy4jbWluaVNpemUubmV4dChjb2VyY2VkKVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlYWRvbmx5ICNtaW5pU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TnVtYmVyV2l0aFVuaXQ+KEhJRERFTl9TSVpFKVxuXG4gICAgQElucHV0KFwibWluaW1pemFibGVcIilcbiAgICBzZXQgbWluaW1pemFibGUodmFsOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy4jbWluaW1pemFibGUgPSBjb2VyY2VCb29sQXR0cih2YWwpXG4gICAgICAgIHRoaXMuI21pbmltaXphYmxlQXV0byA9IGZhbHNlXG4gICAgfVxuICAgIGdldCBtaW5pbWl6YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI21pbmltaXphYmxlXG4gICAgfVxuICAgICNtaW5pbWl6YWJsZTogYm9vbGVhbiA9IGZhbHNlXG4gICAgI21pbmltaXphYmxlQXV0bzogYm9vbGVhbiA9IHRydWVcblxuICAgIHJlYWRvbmx5ICNjb250ZW50U2l6ZSA9IG5ldyBSZXBsYXlTdWJqZWN0PHsgd2lkdGg6IE51bWJlcldpdGhVbml0OyBoZWlnaHQ6IE51bWJlcldpdGhVbml0IH0+KDEpXG5cbiAgICByZWFkb25seSAjYXV0b1NpemUgPSBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgZGltOiB0aGlzLiNjb250ZW50U2l6ZSxcbiAgICAgICAgcG9zOiB0aGlzLnBvc2l0aW9uXG4gICAgfSkucGlwZShcbiAgICAgICAgbWFwKCh7IGRpbSwgcG9zIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChwb3Mub3JpZW50ID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBkaW0uaGVpZ2h0XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBkaW0ud2lkdGhcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgZnVsbFNpemUgPSB0aGlzLiNmdWxsU2l6ZS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoc2l6ZSA9PiB7XG4gICAgICAgICAgICBpZiAoc2l6ZS51bml0ID09PSBcImF1dG9cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiNhdXRvU2l6ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2Yoc2l6ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgbWluaVNpemUgPSB0aGlzLiNtaW5pU2l6ZS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoc2l6ZSA9PiB7XG4gICAgICAgICAgICBpZiAoc2l6ZS51bml0ID09PSBcImF1dG9cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiNhdXRvU2l6ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2Yoc2l6ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgY2hhbmdlcyA9IGNvbWJpbmVMYXRlc3Qoe1xuICAgICAgICBwb3NpdGlvbjogdGhpcy5wb3NpdGlvbixcbiAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgZnVsbFNpemU6IHRoaXMuZnVsbFNpemUsXG4gICAgICAgIG1pbmlTaXplOiB0aGlzLm1pbmlTaXplLFxuICAgICAgICBjb250ZW50U2l6ZTogdGhpcy4jY29udGVudFNpemVcbiAgICB9KVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKClcblxuICAgICAgICB0aGlzLmQuc3ViKHRoaXMuY2hhbmdlcykuc3Vic2NyaWJlKGNoYW5nZXMgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuI21pbmltaXphYmxlQXV0bykge1xuICAgICAgICAgICAgICAgIHRoaXMuI21pbmltaXphYmxlID0gdGhpcy4jbWluaVNpemUudmFsdWUudmFsdWUgIT09IDBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgRmFzdERPTS5zZXRBdHRyaWJ1dGVzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBjaGFuZ2VzLnN0YXRlLFxuICAgICAgICAgICAgICAgIG9yaWVudDogY2hhbmdlcy5wb3NpdGlvbi5vcmllbnQsXG4gICAgICAgICAgICAgICAgbW9kZTogY2hhbmdlcy5tb2RlLFxuICAgICAgICAgICAgICAgIHNpZGU6XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMucG9zaXRpb24ub3JpZW50ID09PSBcImhvcml6b250YWxcIiA/IGNoYW5nZXMucG9zaXRpb24uY2VsbHNbMF0udiA6IGNoYW5nZXMucG9zaXRpb24uY2VsbHNbMF0uaFxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gY2hhbmdlcy5wb3NpdGlvbi5vcmllbnQgPT09IFwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICBsZXQgdyA9IG51bGxcbiAgICAgICAgICAgIGxldCBoID0gbnVsbFxuXG4gICAgICAgICAgICAvLyBUT0RPOiB3aGVuIGNoYW5nZSBzdGF0ZSBmcm9tIG1pbmkgLT4gaGlkZGVuLCBjdXJyZW50bHkgd3JvbmcgYmVoYXZpb3JcbiAgICAgICAgICAgIC8vIHRoZSBnb29kIGJlaGF2aW9yIGlzIHRvIG5vdCBnYWluIGZ1bGxTaXplIGFuZyBnbyB0byBoaWRkZW5cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnN0YXRlID09PSBcIm1pbmlcIikge1xuICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaCA9IGNoYW5nZXMubWluaVNpemUudW5pdCA9PT0gXCJhdXRvXCIgPyBjaGFuZ2VzLmNvbnRlbnRTaXplLmhlaWdodCA6IGNoYW5nZXMubWluaVNpemVcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3ID0gY2hhbmdlcy5taW5pU2l6ZS51bml0ID09PSBcImF1dG9cIiA/IGNoYW5nZXMuY29udGVudFNpemUud2lkdGggOiBjaGFuZ2VzLm1pbmlTaXplXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGggPSBjaGFuZ2VzLmZ1bGxTaXplLnVuaXQgPT09IFwiYXV0b1wiID8gY2hhbmdlcy5jb250ZW50U2l6ZS5oZWlnaHQgOiBjaGFuZ2VzLmZ1bGxTaXplXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdyA9IGNoYW5nZXMuZnVsbFNpemUudW5pdCA9PT0gXCJhdXRvXCIgPyBjaGFuZ2VzLmNvbnRlbnRTaXplLndpZHRoIDogY2hhbmdlcy5mdWxsU2l6ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgRmFzdERPTS5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcIi0tZG9ja2luZy1wYW5lbC13XCI6IHcgIT0gbnVsbCA/IGAke3d9YCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiLS1kb2NraW5nLXBhbmVsLWhcIjogaCAhPSBudWxsID8gYCR7aH1gIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCItLWRvY2tpbmctcGFuZWwtY29udGVudC13XCI6IGNoYW5nZXMuY29udGVudFNpemUud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIFwiLS1kb2NraW5nLXBhbmVsLWNvbnRlbnQtaFwiOiBjaGFuZ2VzLmNvbnRlbnRTaXplLmhlaWdodFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKCkgPT4gRmFzdERPTS5zZXRBdHRyaWJ1dGVzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgeyBhbmltYXRlOiBcIlwiIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRcbiAgICAgICAgICAgIC5zdWIodGhpcy4jZGltV2F0Y2hlci53YXRjaCh0aGlzLmNvbnRlbnQsIFwic2Nyb2xsLWJveFwiKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChkaW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG5ldyBOdW1iZXJXaXRoVW5pdChkaW0ud2lkdGgsIFwicHhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG5ldyBOdW1iZXJXaXRoVW5pdChkaW0uaGVpZ2h0LCBcInB4XCIpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLiNjb250ZW50U2l6ZSlcbiAgICB9XG5cbiAgICBvcGVuKCkge1xuICAgICAgICB0aGlzLnN0YXRlLm5leHQoXCJmdWxsXCIpXG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuc3RhdGUubmV4dChcImhpZGRlblwiKVxuICAgIH1cblxuICAgIG1pbmltaXplKCkge1xuICAgICAgICBpZiAodGhpcy5taW5pbWl6YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5uZXh0KFwibWluaVwiKVxuICAgICAgICB9XG4gICAgfVxufVxuXG50eXBlIENoYW5nZXNPYnNlcnZhYmxlID0gdHlwZW9mIERvY2tpbmdQYW5lbENvbXBvbmVudC5wcm90b3R5cGUuY2hhbmdlc1xuZXhwb3J0IHR5cGUgRG9ja2luZ1BhbmVsQ2hhbmdlcyA9IENoYW5nZXNPYnNlcnZhYmxlIGV4dGVuZHMgT2JzZXJ2YWJsZTxpbmZlciBUPiA/IFQgOiBuZXZlclxuIl19
|
package/esm2022/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from "./util";
|
|
2
1
|
export * from "./l9";
|
|
3
2
|
export * from "./docking";
|
|
4
|
-
|
|
3
|
+
export * from "./services/slots.service";
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsTUFBTSxDQUFBO0FBQ3BCLGNBQWMsV0FBVyxDQUFBO0FBQ3pCLGNBQWMsMEJBQTBCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9sOVwiXG5leHBvcnQgKiBmcm9tIFwiLi9kb2NraW5nXCJcbmV4cG9ydCAqIGZyb20gXCIuL3NlcnZpY2VzL3Nsb3RzLnNlcnZpY2VcIlxuIl19
|
package/esm2022/l9/state.mjs
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { BehaviorSubject, map, shareReplay } from "rxjs";
|
|
2
|
-
import { L9Range } from "./range";
|
|
3
2
|
export class L9State {
|
|
4
3
|
#dims;
|
|
5
4
|
constructor(prefix) {
|
|
@@ -18,12 +17,5 @@ export class L9State {
|
|
|
18
17
|
return res;
|
|
19
18
|
}), shareReplay(1));
|
|
20
19
|
}
|
|
21
|
-
update(range, dim) {
|
|
22
|
-
range = L9Range.coerce(range);
|
|
23
|
-
const dims = { ...this.#dims.value };
|
|
24
|
-
// for (const cell of range.horizontals) {
|
|
25
|
-
// dims[cell] = dim.width
|
|
26
|
-
// }
|
|
27
|
-
}
|
|
28
20
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2w5L3N0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFjLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQVdwRSxNQUFNLE9BQU8sT0FBTztJQUNQLEtBQUssQ0FBa0M7SUFxQmhELFlBQTRCLE1BQVM7UUFBVCxXQUFNLEdBQU4sTUFBTSxDQUFHO1FBckI1QixVQUFLLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUE7UUFFdkMsVUFBSyxHQUErQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDeEQsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1AsTUFBTSxHQUFHLEdBQW1CLEVBQUUsQ0FBQTtZQUU5QixLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDWixTQUFRO2dCQUNaLENBQUM7Z0JBRUQsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUMzQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsSUFBSSxVQUFVLElBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBO2dCQUN6RixHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsSUFBSSxVQUFVLElBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFBO1lBQzlGLENBQUM7WUFFRCxPQUFPLEdBQUcsQ0FBQTtRQUNkLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDakIsQ0FBQTtJQUV1QyxDQUFDO0NBQzVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5IH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyB0eXBlIERpbWVuc2lvbiB9IGZyb20gXCJAbmd1dGlsL3N0eWxlXCJcblxuaW1wb3J0IHsgTDlDZWxsTmFtZSwgTDlIb3Jpem9udGFsLCBMOVZlcnRpY2FsIH0gZnJvbSBcIi4vcmFuZ2VcIlxuXG5leHBvcnQgdHlwZSBMOVN0YXRlVmFyPFQgZXh0ZW5kcyBzdHJpbmc+ID0gYC0tJHtUfS0ke0w5VmVydGljYWx9LSR7TDlIb3Jpem9udGFsfS0ke1wid1wiIHwgXCJoXCJ9YFxuZXhwb3J0IHR5cGUgTDlTdHlsZVZhcnM8VCBleHRlbmRzIHN0cmluZz4gPSB7IFtrZXkgaW4gTDlTdGF0ZVZhcjxUPl0/OiBzdHJpbmcgfVxuXG50eXBlIEw5RGltcyA9IHsgW2tleSBpbiBMOUNlbGxOYW1lXT86IERpbWVuc2lvbiB9XG5cbmV4cG9ydCBjbGFzcyBMOVN0YXRlPFQgZXh0ZW5kcyBzdHJpbmc+IHtcbiAgICByZWFkb25seSAjZGltcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TDlEaW1zPih7fSlcblxuICAgIHJlYWRvbmx5IHN0eWxlOiBPYnNlcnZhYmxlPEw5U3R5bGVWYXJzPFQ+PiA9IHRoaXMuI2RpbXMucGlwZShcbiAgICAgICAgbWFwKGRpbXMgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzOiBMOVN0eWxlVmFyczxUPiA9IHt9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGRpbXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHYgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IFt2ZXJ0aWNhbCwgaG9yaXpvbnRhbF0gPSBrLnNwbGl0KFwiOlwiKVxuICAgICAgICAgICAgICAgIHJlc1tgLS0ke3RoaXMucHJlZml4fS0ke3ZlcnRpY2FsfS0ke2hvcml6b250YWx9LXdgIGFzIEw5U3RhdGVWYXI8VD5dID0gdi53aWR0aC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgcmVzW2AtLSR7dGhpcy5wcmVmaXh9LSR7dmVydGljYWx9LSR7aG9yaXpvbnRhbH0taGAgYXMgTDlTdGF0ZVZhcjxUPl0gPSB2LmhlaWdodC50b1N0cmluZygpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHByZWZpeDogVCkge31cbn1cbiJdfQ==
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { Directive, inject, Injectable, Injector, TemplateRef, ViewContainerRef } from "@angular/core";
|
|
2
|
+
import { BehaviorSubject, distinctUntilChanged, finalize, map, of, scan, shareReplay, Subject, switchMap, tap } from "rxjs";
|
|
3
|
+
import { Destructible } from "@ngutil/common";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
const SLOT_REGEX = /^([^:\s]+)(?::(\d+))?(?:\s+as\s+(.*?))?$/i;
|
|
6
|
+
export class SlotDef {
|
|
7
|
+
constructor(slot, tpl) {
|
|
8
|
+
this.tpl = tpl;
|
|
9
|
+
const match = slot.match(SLOT_REGEX);
|
|
10
|
+
if (!match) {
|
|
11
|
+
console.warn(`Invalid slot definition: ${slot}`);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
this.slot = match[1];
|
|
15
|
+
this.order = match[2] != null ? Number(match[2]) : Infinity;
|
|
16
|
+
this.id = match[3];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
dispose() {
|
|
20
|
+
this.viewRef?.destroy();
|
|
21
|
+
this.viewRef = undefined;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* @Directive({selector: "ng-template[xyzSlot]", inputs: [{name: "slot", alias: "xyzSlot"}]})
|
|
26
|
+
* class XYZSlotDirective extends SlotDirective<XYZComponentSlots> { }
|
|
27
|
+
*
|
|
28
|
+
* @Directive({selector: "ng-template[xyzSlotOutlet]", inputs: [{name: "slot", alias: "xyzSlotOutlet"}]})
|
|
29
|
+
* class XYZSlotOutletDirective extends SlotOutletDirective<XYZComponentSlots> { }
|
|
30
|
+
*
|
|
31
|
+
*
|
|
32
|
+
* @Component({provides: [SlotsService]})
|
|
33
|
+
* class XYZComponent {
|
|
34
|
+
* slots: inject(SlotsService<XYZComponentSlots>)
|
|
35
|
+
* }
|
|
36
|
+
*
|
|
37
|
+
*
|
|
38
|
+
*/
|
|
39
|
+
export class SlotsService extends Destructible {
|
|
40
|
+
#events = new Subject();
|
|
41
|
+
#entries = this.#events.pipe(scan((entries, event) => {
|
|
42
|
+
if (event.type === "add") {
|
|
43
|
+
const index = entries.findIndex(value => value === event.def);
|
|
44
|
+
if (index > -1) {
|
|
45
|
+
entries[index] = event.def;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
entries.push(event.def);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else if (event.type === "del") {
|
|
52
|
+
const index = entries.findIndex(value => value === event.def);
|
|
53
|
+
if (index > -1) {
|
|
54
|
+
entries.splice(index, 1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return entries;
|
|
58
|
+
}, []), tap(entries => {
|
|
59
|
+
entries.sort((a, b) => {
|
|
60
|
+
if (a.slot === b.slot) {
|
|
61
|
+
return a.order - b.order;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
return a.slot.localeCompare(b.slot);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}), shareReplay(1));
|
|
68
|
+
constructor() {
|
|
69
|
+
super();
|
|
70
|
+
// XXX: need to collect entries from the beginning
|
|
71
|
+
this.d.sub(this.#entries).subscribe();
|
|
72
|
+
}
|
|
73
|
+
addTpl(def) {
|
|
74
|
+
this.#events.next({ type: "add", def });
|
|
75
|
+
}
|
|
76
|
+
delTpl(def) {
|
|
77
|
+
this.#events.next({ type: "del", def });
|
|
78
|
+
}
|
|
79
|
+
#watchers = {};
|
|
80
|
+
watch(slot) {
|
|
81
|
+
const existing = this.#watchers[slot];
|
|
82
|
+
if (existing == null) {
|
|
83
|
+
return (this.#watchers[slot] = this.#watch(slot));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
return existing;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
#watch(slot) {
|
|
90
|
+
return this.#entries.pipe(map(entries => entries.filter(entry => entry.slot === slot)), distinctUntilChanged((prev, curr) => {
|
|
91
|
+
if (prev.length === curr.length) {
|
|
92
|
+
for (let i = 0; i < prev.length; i++) {
|
|
93
|
+
if (prev[i] !== curr[i]) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}), finalize(() => {
|
|
103
|
+
delete this.#watchers[slot];
|
|
104
|
+
}), shareReplay(1));
|
|
105
|
+
}
|
|
106
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
107
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotsService }); }
|
|
108
|
+
}
|
|
109
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotsService, decorators: [{
|
|
110
|
+
type: Injectable
|
|
111
|
+
}], ctorParameters: () => [] });
|
|
112
|
+
export class SlotDirective {
|
|
113
|
+
constructor() {
|
|
114
|
+
this.tpl = inject((TemplateRef));
|
|
115
|
+
}
|
|
116
|
+
set slot(slot) {
|
|
117
|
+
if (this.#slot !== slot) {
|
|
118
|
+
this.#slot = slot;
|
|
119
|
+
if (this.#slotDef) {
|
|
120
|
+
this.slotSvc.delTpl(this.#slotDef);
|
|
121
|
+
}
|
|
122
|
+
this.#slotDef = new SlotDef(slot, this.tpl);
|
|
123
|
+
this.slotSvc.addTpl(this.#slotDef);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
get slot() {
|
|
127
|
+
return this.#slot;
|
|
128
|
+
}
|
|
129
|
+
#slot;
|
|
130
|
+
#slotDef;
|
|
131
|
+
ngOnDestroy() {
|
|
132
|
+
if (this.#slotDef) {
|
|
133
|
+
this.slotSvc.delTpl(this.#slotDef);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
137
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.3", type: SlotDirective, ngImport: i0 }); }
|
|
138
|
+
}
|
|
139
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotDirective, decorators: [{
|
|
140
|
+
type: Directive
|
|
141
|
+
}] });
|
|
142
|
+
export class SlotOutletDirective extends Destructible {
|
|
143
|
+
set slot(slot) {
|
|
144
|
+
if (this.#slot.value !== slot) {
|
|
145
|
+
this.#slot.next(slot);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
get slot() {
|
|
149
|
+
return this.#slot.value;
|
|
150
|
+
}
|
|
151
|
+
#slot;
|
|
152
|
+
#watch;
|
|
153
|
+
#views;
|
|
154
|
+
constructor() {
|
|
155
|
+
super();
|
|
156
|
+
this.vcr = inject(ViewContainerRef);
|
|
157
|
+
this.injector = inject(Injector);
|
|
158
|
+
this.#slot = new BehaviorSubject(null);
|
|
159
|
+
this.#watch = this.#slot.pipe(switchMap(slot => {
|
|
160
|
+
if (slot) {
|
|
161
|
+
return this.slotSvc.watch(slot);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
return of([]);
|
|
165
|
+
}
|
|
166
|
+
}));
|
|
167
|
+
this.#views = [];
|
|
168
|
+
this.#onEntriesChanged = (entries) => {
|
|
169
|
+
const { remove, undecided } = this.#determineActions(entries);
|
|
170
|
+
for (const r of remove) {
|
|
171
|
+
r.dispose();
|
|
172
|
+
const idx = this.#views.indexOf(r);
|
|
173
|
+
if (idx >= 0) {
|
|
174
|
+
this.#views.splice(idx, 1);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
this.#views.length = 0;
|
|
178
|
+
for (const [pos, entry] of undecided.entries()) {
|
|
179
|
+
if (entry.viewRef && !entry.viewRef.destroyed) {
|
|
180
|
+
const currentPos = this.vcr.indexOf(entry.viewRef);
|
|
181
|
+
if (currentPos !== pos) {
|
|
182
|
+
this.vcr.insert(entry.viewRef, pos);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
;
|
|
187
|
+
entry.viewRef = this.vcr.createEmbeddedView(entry.tpl, null, {
|
|
188
|
+
index: pos,
|
|
189
|
+
injector: this.injector
|
|
190
|
+
});
|
|
191
|
+
entry.viewRef.markForCheck();
|
|
192
|
+
}
|
|
193
|
+
this.#views.push(entry);
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
this.d.any(this.#clearViews.bind(this));
|
|
197
|
+
}
|
|
198
|
+
ngOnInit() {
|
|
199
|
+
this.d.sub(this.#watch).subscribe(this.#onEntriesChanged);
|
|
200
|
+
}
|
|
201
|
+
#onEntriesChanged;
|
|
202
|
+
#determineActions(entries) {
|
|
203
|
+
const byId = {};
|
|
204
|
+
let remove = [];
|
|
205
|
+
const undecided = [];
|
|
206
|
+
for (const entry of entries) {
|
|
207
|
+
if (entry.id != null) {
|
|
208
|
+
if (!byId[entry.id]) {
|
|
209
|
+
byId[entry.id] = [entry];
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
byId[entry.id].push(entry);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
undecided.push(entry);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
for (const values of Object.values(byId)) {
|
|
220
|
+
remove = remove.concat(values.slice(0, -1));
|
|
221
|
+
undecided.push(values[values.length - 1]);
|
|
222
|
+
}
|
|
223
|
+
for (const current of this.#views) {
|
|
224
|
+
if (!undecided.includes(current)) {
|
|
225
|
+
remove.push(current);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return { remove, undecided };
|
|
229
|
+
}
|
|
230
|
+
#clearViews() {
|
|
231
|
+
this.vcr.clear();
|
|
232
|
+
this.#views = [];
|
|
233
|
+
}
|
|
234
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotOutletDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
235
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.3", type: SlotOutletDirective, usesInheritance: true, ngImport: i0 }); }
|
|
236
|
+
}
|
|
237
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotOutletDirective, decorators: [{
|
|
238
|
+
type: Directive
|
|
239
|
+
}], ctorParameters: () => [] });
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xheW91dC9zcmMvc2VydmljZXMvc2xvdHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxFQUdSLFdBQVcsRUFDWCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUE7QUFFdEIsT0FBTyxFQUNILGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsUUFBUSxFQUNSLEdBQUcsRUFFSCxFQUFFLEVBQ0YsSUFBSSxFQUNKLFdBQVcsRUFDWCxPQUFPLEVBQ1AsU0FBUyxFQUNULEdBQUcsRUFDTixNQUFNLE1BQU0sQ0FBQTtBQUViLE9BQU8sRUFBRSxZQUFZLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQTs7QUFRMUQsTUFBTSxVQUFVLEdBQUcsMkNBQTJDLENBQUE7QUFFOUQsTUFBTSxPQUFPLE9BQU87SUFNaEIsWUFDSSxJQUFhLEVBQ0csR0FBWTtRQUFaLFFBQUcsR0FBSCxHQUFHLENBQVM7UUFFNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNwQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLDRCQUE0QixJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFRLENBQUE7WUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtZQUMzRCxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUss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QVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3hCLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUE7SUFDcEIsQ0FBQzs4R0FuR2lCLG1CQUFtQjtrR0FBbkIsbUJBQW1COzsyRkFBbkIsbUJBQW1CO2tCQUR4QyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRW1iZWRkZWRWaWV3UmVmLFxuICAgIGluamVjdCxcbiAgICBJbmplY3RhYmxlLFxuICAgIEluamVjdG9yLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7XG4gICAgQmVoYXZpb3JTdWJqZWN0LFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIGZpbmFsaXplLFxuICAgIG1hcCxcbiAgICBPYnNlcnZhYmxlLFxuICAgIG9mLFxuICAgIHNjYW4sXG4gICAgc2hhcmVSZXBsYXksXG4gICAgU3ViamVjdCxcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFwXG59IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgRGVzdHJ1Y3RpYmxlLCBJRGlzcG9zYWJsZSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbnR5cGUgU2xvdE9yZGVyID0gYDoke251bWJlcn1gXG50eXBlIFNsb3RJZCA9IGAgYXMgJHtzdHJpbmd9YFxuZXhwb3J0IHR5cGUgU2xvdDxUIGV4dGVuZHMgc3RyaW5nPiA9IGAke1R9JHtTbG90T3JkZXIgfCBcIlwifSR7U2xvdElkIHwgXCJcIn1gXG5leHBvcnQgdHlwZSBTbG90VHBsID0gVGVtcGxhdGVSZWY8YW55PlxuZXhwb3J0IHR5cGUgU2xvdFZpZXdSZWYgPSBFbWJlZGRlZFZpZXdSZWY8YW55PlxuXG5jb25zdCBTTE9UX1JFR0VYID0gL14oW146XFxzXSspKD86OihcXGQrKSk/KD86XFxzK2FzXFxzKyguKj8pKT8kL2lcblxuZXhwb3J0IGNsYXNzIFNsb3REZWY8VCBleHRlbmRzIHN0cmluZz4gaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gICAgcmVhZG9ubHkgc2xvdCE6IFRcbiAgICByZWFkb25seSBvcmRlciE6IG51bWJlclxuICAgIHJlYWRvbmx5IGlkPzogc3RyaW5nXG4gICAgcmVhZG9ubHkgdmlld1JlZj86IFNsb3RWaWV3UmVmXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgc2xvdDogU2xvdDxUPixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHRwbDogU2xvdFRwbFxuICAgICkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHNsb3QubWF0Y2goU0xPVF9SRUdFWClcbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIHNsb3QgZGVmaW5pdGlvbjogJHtzbG90fWApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNsb3QgPSBtYXRjaFsxXSBhcyBhbnlcbiAgICAgICAgICAgIHRoaXMub3JkZXIgPSBtYXRjaFsyXSAhPSBudWxsID8gTnVtYmVyKG1hdGNoWzJdKSA6IEluZmluaXR5XG4gICAgICAgICAgICB0aGlzLmlkID0gbWF0Y2hbM10gYXMgc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkaXNwb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdSZWY/LmRlc3Ryb3koKVxuICAgICAgICA7KHRoaXMgYXMgeyB2aWV3UmVmPzogU2xvdFZpZXdSZWYgfSkudmlld1JlZiA9IHVuZGVmaW5lZFxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbG90RXZlbnQ8VCBleHRlbmRzIHN0cmluZz4ge1xuICAgIHR5cGU6IFwiYWRkXCIgfCBcImRlbFwiXG4gICAgZGVmOiBTbG90RGVmPFQ+XG59XG5cbi8qKlxuICogQERpcmVjdGl2ZSh7c2VsZWN0b3I6IFwibmctdGVtcGxhdGVbeHl6U2xvdF1cIiwgaW5wdXRzOiBbe25hbWU6IFwic2xvdFwiLCBhbGlhczogXCJ4eXpTbG90XCJ9XX0pXG4gKiBjbGFzcyBYWVpTbG90RGlyZWN0aXZlIGV4dGVuZHMgU2xvdERpcmVjdGl2ZTxYWVpDb21wb25lbnRTbG90cz4geyB9XG4gKlxuICogQERpcmVjdGl2ZSh7c2VsZWN0b3I6IFwibmctdGVtcGxhdGVbeHl6U2xvdE91dGxldF1cIiwgaW5wdXRzOiBbe25hbWU6IFwic2xvdFwiLCBhbGlhczogXCJ4eXpTbG90T3V0bGV0XCJ9XX0pXG4gKiBjbGFzcyBYWVpTbG90T3V0bGV0RGlyZWN0aXZlIGV4dGVuZHMgU2xvdE91dGxldERpcmVjdGl2ZTxYWVpDb21wb25lbnRTbG90cz4geyB9XG4gKlxuICpcbiAqIEBDb21wb25lbnQoe3Byb3ZpZGVzOiBbU2xvdHNTZXJ2aWNlXX0pXG4gKiBjbGFzcyBYWVpDb21wb25lbnQge1xuICogICAgICBzbG90czogaW5qZWN0KFNsb3RzU2VydmljZTxYWVpDb21wb25lbnRTbG90cz4pXG4gKiB9XG4gKlxuICpcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNsb3RzU2VydmljZTxUIGV4dGVuZHMgc3RyaW5nID0gYW55PiBleHRlbmRzIERlc3RydWN0aWJsZSB7XG4gICAgI2V2ZW50cyA9IG5ldyBTdWJqZWN0PFNsb3RFdmVudDxUPj4oKVxuXG4gICAgI2VudHJpZXMgPSB0aGlzLiNldmVudHMucGlwZShcbiAgICAgICAgc2NhbigoZW50cmllcywgZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC50eXBlID09PSBcImFkZFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBlbnRyaWVzLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZSA9PT0gZXZlbnQuZGVmKVxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJpZXNbaW5kZXhdID0gZXZlbnQuZGVmXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKGV2ZW50LmRlZilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09IFwiZGVsXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGVudHJpZXMuZmluZEluZGV4KHZhbHVlID0+IHZhbHVlID09PSBldmVudC5kZWYpXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICAgICAgfSwgW10gYXMgU2xvdERlZjxUPltdKSxcbiAgICAgICAgdGFwKGVudHJpZXMgPT4ge1xuICAgICAgICAgICAgZW50cmllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGEuc2xvdCA9PT0gYi5zbG90KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm9yZGVyIC0gYi5vcmRlclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnNsb3QubG9jYWxlQ29tcGFyZShiLnNsb3QpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKClcbiAgICAgICAgLy8gWFhYOiBuZWVkIHRvIGNvbGxlY3QgZW50cmllcyBmcm9tIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgdGhpcy5kLnN1Yih0aGlzLiNlbnRyaWVzKS5zdWJzY3JpYmUoKVxuICAgIH1cblxuICAgIGFkZFRwbChkZWY6IFNsb3REZWY8VD4pIHtcbiAgICAgICAgdGhpcy4jZXZlbnRzLm5leHQoeyB0eXBlOiBcImFkZFwiLCBkZWYgfSlcbiAgICB9XG5cbiAgICBkZWxUcGwoZGVmOiBTbG90RGVmPFQ+KSB7XG4gICAgICAgIHRoaXMuI2V2ZW50cy5uZXh0KHsgdHlwZTogXCJkZWxcIiwgZGVmIH0pXG4gICAgfVxuXG4gICAgI3dhdGNoZXJzOiB7IFtrZXkgaW4gVF06IE9ic2VydmFibGU8QXJyYXk8U2xvdERlZjxUPj4+IH0gPSB7fSBhcyBhbnlcblxuICAgIHdhdGNoKHNsb3Q6IFQpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLiN3YXRjaGVyc1tzbG90XVxuICAgICAgICBpZiAoZXhpc3RpbmcgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiN3YXRjaGVyc1tzbG90XSA9IHRoaXMuI3dhdGNoKHNsb3QpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjd2F0Y2goc2xvdDogVCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZW50cmllcy5waXBlKFxuICAgICAgICAgICAgbWFwKGVudHJpZXMgPT4gZW50cmllcy5maWx0ZXIoZW50cnkgPT4gZW50cnkuc2xvdCA9PT0gc2xvdCkpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJldi5sZW5ndGggPT09IGN1cnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZbaV0gIT09IGN1cnJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLiN3YXRjaGVyc1tzbG90XVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgICApXG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTbG90RGlyZWN0aXZlPFQgZXh0ZW5kcyBzdHJpbmcsIEMgPSBhbnk+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVhZG9ubHkgc2xvdFN2YzogU2xvdHNTZXJ2aWNlPFQ+XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRwbCA9IGluamVjdChUZW1wbGF0ZVJlZjxDPilcblxuICAgIHNldCBzbG90KHNsb3Q6IFNsb3Q8VD4pIHtcbiAgICAgICAgaWYgKHRoaXMuI3Nsb3QgIT09IHNsb3QpIHtcbiAgICAgICAgICAgIHRoaXMuI3Nsb3QgPSBzbG90XG5cbiAgICAgICAgICAgIGlmICh0aGlzLiNzbG90RGVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zbG90U3ZjLmRlbFRwbCh0aGlzLiNzbG90RGVmKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiNzbG90RGVmID0gbmV3IFNsb3REZWY8VD4oc2xvdCwgdGhpcy50cGwpXG4gICAgICAgICAgICB0aGlzLnNsb3RTdmMuYWRkVHBsKHRoaXMuI3Nsb3REZWYpXG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHNsb3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNzbG90XG4gICAgfVxuICAgICNzbG90ITogU2xvdDxUPlxuICAgICNzbG90RGVmPzogU2xvdERlZjxUPlxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLiNzbG90RGVmKSB7XG4gICAgICAgICAgICB0aGlzLnNsb3RTdmMuZGVsVHBsKHRoaXMuI3Nsb3REZWYpXG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNsb3RPdXRsZXREaXJlY3RpdmU8VCBleHRlbmRzIHN0cmluZz4gZXh0ZW5kcyBEZXN0cnVjdGlibGUgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCByZWFkb25seSBzbG90U3ZjOiBTbG90c1NlcnZpY2U8VD5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmNyOiBWaWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvciA9IGluamVjdChJbmplY3RvcilcblxuICAgIHNldCBzbG90KHNsb3Q6IFQgfCBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLiNzbG90LnZhbHVlICE9PSBzbG90KSB7XG4gICAgICAgICAgICB0aGlzLiNzbG90Lm5leHQoc2xvdClcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgc2xvdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Nsb3QudmFsdWVcbiAgICB9XG4gICAgI3Nsb3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFQgfCBudWxsPihudWxsKVxuXG4gICAgI3dhdGNoID0gdGhpcy4jc2xvdC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoc2xvdCA9PiB7XG4gICAgICAgICAgICBpZiAoc2xvdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNsb3RTdmMud2F0Y2goc2xvdClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIClcblxuICAgICN2aWV3czogQXJyYXk8U2xvdERlZjxhbnk+PiA9IFtdXG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKVxuICAgICAgICB0aGlzLmQuYW55KHRoaXMuI2NsZWFyVmlld3MuYmluZCh0aGlzKSlcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kLnN1Yih0aGlzLiN3YXRjaCkuc3Vic2NyaWJlKHRoaXMuI29uRW50cmllc0NoYW5nZWQpXG4gICAgfVxuXG4gICAgI29uRW50cmllc0NoYW5nZWQgPSAoZW50cmllczogQXJyYXk8U2xvdERlZjxUPj4pID0+IHtcbiAgICAgICAgY29uc3QgeyByZW1vdmUsIHVuZGVjaWRlZCB9ID0gdGhpcy4jZGV0ZXJtaW5lQWN0aW9ucyhlbnRyaWVzKVxuXG4gICAgICAgIGZvciAoY29uc3QgciBvZiByZW1vdmUpIHtcbiAgICAgICAgICAgIHIuZGlzcG9zZSgpXG4gICAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLiN2aWV3cy5pbmRleE9mKHIpXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLiN2aWV3cy5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4jdmlld3MubGVuZ3RoID0gMFxuICAgICAgICBmb3IgKGNvbnN0IFtwb3MsIGVudHJ5XSBvZiB1bmRlY2lkZWQuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkudmlld1JlZiAmJiAhZW50cnkudmlld1JlZi5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UG9zID0gdGhpcy52Y3IuaW5kZXhPZihlbnRyeS52aWV3UmVmKVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UG9zICE9PSBwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52Y3IuaW5zZXJ0KGVudHJ5LnZpZXdSZWYsIHBvcylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIDsoZW50cnkgYXMgeyB2aWV3UmVmOiBTbG90Vmlld1JlZiB9KS52aWV3UmVmID0gdGhpcy52Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KGVudHJ5LnRwbCwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICBpbmRleDogcG9zLFxuICAgICAgICAgICAgICAgICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgZW50cnkudmlld1JlZiEubWFya0ZvckNoZWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI3ZpZXdzLnB1c2goZW50cnkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjZGV0ZXJtaW5lQWN0aW9ucyhlbnRyaWVzOiBBcnJheTxTbG90RGVmPFQ+Pikge1xuICAgICAgICBjb25zdCBieUlkOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PFNsb3REZWY8VD4+IH0gPSB7fVxuICAgICAgICBsZXQgcmVtb3ZlOiBBcnJheTxTbG90RGVmPFQ+PiA9IFtdXG4gICAgICAgIGNvbnN0IHVuZGVjaWRlZDogQXJyYXk8U2xvdERlZjxUPj4gPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgICAgaWYgKGVudHJ5LmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWJ5SWRbZW50cnkuaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ5SWRbZW50cnkuaWRdID0gW2VudHJ5XVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJ5SWRbZW50cnkuaWRdLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bmRlY2lkZWQucHVzaChlbnRyeSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWVzIG9mIE9iamVjdC52YWx1ZXMoYnlJZCkpIHtcbiAgICAgICAgICAgIHJlbW92ZSA9IHJlbW92ZS5jb25jYXQodmFsdWVzLnNsaWNlKDAsIC0xKSlcbiAgICAgICAgICAgIHVuZGVjaWRlZC5wdXNoKHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV0pXG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnQgb2YgdGhpcy4jdmlld3MpIHtcbiAgICAgICAgICAgIGlmICghdW5kZWNpZGVkLmluY2x1ZGVzKGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlLnB1c2goY3VycmVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHJlbW92ZSwgdW5kZWNpZGVkIH1cbiAgICB9XG5cbiAgICAjY2xlYXJWaWV3cygpIHtcbiAgICAgICAgdGhpcy52Y3IuY2xlYXIoKVxuICAgICAgICB0aGlzLiN2aWV3cyA9IFtdXG4gICAgfVxufVxuIl19
|