@ngutil/layout 0.0.63 → 0.0.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,215 +1,70 @@
1
- import { Component, ElementRef, inject, Input, Output, ViewChild } from "@angular/core";
2
- import { BehaviorSubject, combineLatest, map, of, ReplaySubject, shareReplay, switchMap } from "rxjs";
3
- import { coerceBoolAttr, Destructible, FastDOM, NumberWithUnit } from "@ngutil/common";
1
+ import { Component, computed, ElementRef, inject, input, model, viewChild } from "@angular/core";
2
+ import { takeUntilDestroyed, toObservable, toSignal } from "@angular/core/rxjs-interop";
3
+ import { switchMap } from "rxjs";
4
+ import { coerceBoolAttr } from "@ngutil/common";
4
5
  import { DimensionWatcher } from "@ngutil/style";
5
6
  import { L9Range } from "../l9/range";
6
7
  import * as i0 from "@angular/core";
7
8
  const DEFAULT_POSITION = L9Range.coerce("left");
8
- const HIDDEN_SIZE = new NumberWithUnit(0, "px");
9
- const AUTO_SIZE = NumberWithUnit.coerce("auto");
10
- export class DockingPanelComponent extends Destructible {
11
- #dimWatcher;
12
- set positionInput(val) {
13
- const coerced = L9Range.coerce(val);
14
- if (coerced.orient === "rect") {
15
- throw new Error(`Invalid position value: ${val}`);
16
- }
17
- if (!this.position.value.isEq(coerced)) {
18
- this.position.next(coerced);
19
- }
20
- }
21
- set stateInput(val) {
22
- if (this.state.value !== val) {
23
- this.state.next(val);
24
- }
25
- }
26
- set modeInput(val) {
27
- if (this.mode.value !== val) {
28
- this.mode.next(val);
29
- }
30
- }
31
- set fullSizeInput(val) {
32
- const coerced = NumberWithUnit.coerce(val, "px");
33
- if (this.#fullSize.value !== coerced) {
34
- this.#fullSize.next(coerced);
35
- }
36
- }
37
- #fullSize;
38
- set miniSizeInput(val) {
39
- const coerced = NumberWithUnit.coerce(val, "px");
40
- if (this.#miniSize.value !== coerced) {
41
- this.#miniSize.next(coerced);
42
- }
43
- }
44
- #miniSize;
45
- set minimizable(val) {
46
- this.#minimizable = coerceBoolAttr(val);
47
- this.#minimizableAuto = false;
48
- }
49
- get minimizable() {
50
- return this.#minimizable;
51
- }
52
- #minimizable;
53
- #minimizableAuto;
54
- set backdrop(val) {
55
- this.#backdrop = coerceBoolAttr(val);
56
- }
57
- get backdrop() {
58
- return this.#backdrop;
59
- }
60
- #backdrop;
61
- #contentSize;
62
- #autoSize;
63
- // TODO: better animation handling in min -> hidden -> min -> full
9
+ export class DockingPanelComponent {
64
10
  constructor() {
65
- super();
66
- this.el = inject((ElementRef));
67
11
  this.#dimWatcher = inject(DimensionWatcher);
68
- this.position = new BehaviorSubject(DEFAULT_POSITION);
69
- this.state = new BehaviorSubject("full");
70
- this.mode = new BehaviorSubject("rigid");
71
- this.#fullSize = new BehaviorSubject(AUTO_SIZE);
72
- this.#miniSize = new BehaviorSubject(HIDDEN_SIZE);
73
- this.#minimizable = false;
74
- this.#minimizableAuto = true;
75
- this.#backdrop = false;
76
- this.#contentSize = new ReplaySubject(1);
77
- this.#autoSize = combineLatest({
78
- dim: this.#contentSize,
79
- pos: this.position
80
- }).pipe(map(({ dim, pos }) => {
81
- if (pos.orient === "horizontal") {
82
- return dim.height;
83
- }
84
- else {
85
- return dim.width;
86
- }
87
- }), shareReplay(1));
88
- this.fullSize = this.#fullSize.pipe(switchMap(size => {
89
- if (size.unit === "auto") {
90
- return this.#autoSize;
91
- }
92
- else {
93
- return of(size);
94
- }
95
- }), shareReplay(1));
96
- this.miniSize = this.#miniSize.pipe(switchMap(size => {
97
- if (size.unit === "auto") {
98
- return this.#autoSize;
99
- }
100
- else {
101
- return of(size);
102
- }
103
- }), shareReplay(1));
104
- this.changes = combineLatest({
105
- position: this.position,
106
- state: this.state,
107
- mode: this.mode,
108
- fullSize: this.fullSize,
109
- miniSize: this.miniSize,
110
- contentSize: this.#contentSize
12
+ this.el = inject(ElementRef);
13
+ this.position = input(DEFAULT_POSITION, { transform: L9Range.coerce });
14
+ // TODO: linkedSignal
15
+ this.opened = model(false);
16
+ this._opened = computed(() => coerceBoolAttr(this.opened()));
17
+ this.mode = input("rigid");
18
+ this.maxSize = input(undefined);
19
+ this.backdrop = input(false);
20
+ this.gridArea = computed(() => this.position().intoGridArea());
21
+ this.orient = computed(() => this.position().orient);
22
+ this.side = computed(() => {
23
+ const pos = this.position();
24
+ return pos.orient === "horizontal" ? pos.cells[0].v : pos.cells[0].h;
111
25
  });
112
- this.d.sub(this.changes).subscribe(changes => {
113
- if (this.#minimizableAuto) {
114
- this.#minimizable = this.#miniSize.value.value !== 0;
26
+ this.content = viewChild.required("content", { read: ElementRef });
27
+ this.dimension$ = toObservable(this.content).pipe(switchMap(content => this.#dimWatcher.watch(content, "border-box")), takeUntilDestroyed());
28
+ this.dimension = toSignal(this.dimension$);
29
+ this.contentSize = computed(() => {
30
+ const dim = this.dimension();
31
+ if (!dim) {
32
+ return 0;
115
33
  }
116
- FastDOM.setAttributes(this.el.nativeElement, {
117
- state: changes.state,
118
- orient: changes.position.orient,
119
- mode: changes.mode,
120
- side: changes.position.orient === "horizontal" ? changes.position.cells[0].v : changes.position.cells[0].h
121
- });
122
- const isHorizontal = changes.position.orient === "horizontal";
123
- let w = null;
124
- let h = null;
125
- // TODO: when change state from mini -> hidden, currently wrong behavior
126
- // the good behavior is to not gain fullSize ang go to hidden
127
- if (changes.state === "mini") {
128
- if (isHorizontal) {
129
- h = changes.miniSize.unit === "auto" ? changes.contentSize.height : changes.miniSize;
130
- }
131
- else {
132
- w = changes.miniSize.unit === "auto" ? changes.contentSize.width : changes.miniSize;
133
- }
134
- }
135
- else {
136
- if (isHorizontal) {
137
- h = changes.fullSize.unit === "auto" ? changes.contentSize.height : changes.fullSize;
138
- }
139
- else {
140
- w = changes.fullSize.unit === "auto" ? changes.contentSize.width : changes.fullSize;
141
- }
142
- }
143
- FastDOM.setStyle(this.el.nativeElement, {
144
- "--docking-panel-w": w != null ? `${w}` : null,
145
- "--docking-panel-h": h != null ? `${h}` : null,
146
- "--docking-panel-content-w": changes.contentSize.width,
147
- "--docking-panel-content-h": changes.contentSize.height
148
- }, () => FastDOM.setAttributes(this.el.nativeElement, { animate: "" }));
34
+ return this.orient() === "horizontal" ? dim.height : dim.width;
149
35
  });
150
36
  }
151
- ngAfterViewInit() {
152
- this.d
153
- .sub(this.#dimWatcher.watch(this.content, "scroll-box"))
154
- .pipe(map(dim => {
155
- return {
156
- width: new NumberWithUnit(dim.width, "px"),
157
- height: new NumberWithUnit(dim.height, "px")
158
- };
159
- }))
160
- .subscribe(this.#contentSize);
161
- }
37
+ #dimWatcher;
38
+ // readonly backdropSize = computed(() => {
39
+ // const mode = this.backdrop()
40
+ // if (mode === true || mode === "full") {
41
+ // return L9Range.coerce("top:left-bottom:right").intoGridArea()
42
+ // } else if (mode === "panel-size") {
43
+ // const pos = this.position()
44
+ // if (pos.orient === "horizontal") {
45
+ // }
46
+ // return ""
47
+ // }
48
+ // return null
49
+ // })
162
50
  open() {
163
- this.state.next("full");
51
+ this.opened.set(true);
164
52
  }
165
53
  close() {
166
- this.state.next("hidden");
167
- }
168
- minimize() {
169
- if (this.minimizable) {
170
- this.state.next("mini");
171
- }
54
+ this.opened.set(false);
172
55
  }
173
56
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DockingPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
174
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", 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", backdrop: "backdrop" }, outputs: { state: "stateChanges" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, read: ElementRef, static: true }], exportAs: ["nuDockingPanel"], usesInheritance: true, ngImport: i0, template: `
175
- <div class="nu-docking-wrapper" #content>
176
- <ng-content></ng-content>
177
- </div>
178
- `, 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]{animation:var(---docking-layout-anim-duration) var(---docking-layout-anim-ease) hide;animation-fill-mode:forwards}: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]){visibility:visible}: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))}:host .nu-docking-wrapper{display:flex;flex-direction:column;align-items:stretch}:host[orient=horizontal] .nu-docking-wrapper{width:100%;min-width:100%;max-width:100%}:host[orient=vertical] .nu-docking-wrapper{height:100%;min-height:100%;max-height:100%}@keyframes hide{99%{visibility:visible}to{visibility:hidden}}\n"] }); }
57
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.6", type: DockingPanelComponent, isStandalone: true, selector: "nu-docking-panel", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, opened: { classPropertyName: "opened", publicName: "opened", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, maxSize: { classPropertyName: "maxSize", publicName: "maxSize", isSignal: true, isRequired: false, transformFunction: null }, backdrop: { classPropertyName: "backdrop", publicName: "backdrop", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "openedChange" }, host: { properties: { "style.grid-area": "gridArea()", "style.--nudp-content-size.px": "contentSize()", "attr.state": "_opened() ? 'opened' : 'closed'", "attr.orient": "orient()", "attr.side": "side()", "attr.mode": "mode()" } }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, read: ElementRef, isSignal: true }], exportAs: ["nuDockingPanel"], ngImport: i0, template: `<div class="wrapper" #content><ng-content /></div>`, isInline: true, styles: [":host{--nudp-tx: 0;--nudp-ty: 0;--nudp-t: auto;--nudp-r: auto;--nudp-b: auto;--nudp-l: auto;display:block;position:relative;z-index:100}:host .wrapper{all:inherit;display:grid;grid-template-columns:auto;grid-template-rows:auto;align-items:stretch;justify-items:stretch;position:absolute;top:var(--nudp-t);right:var(--nudp-r);bottom:var(--nudp-b);left:var(--nudp-l);width:auto;height:auto;transition:transform .2s cubic-bezier(0,0,.2,1);transform:translate(var(--nudp-tx),var(--nudp-ty))}:host[mode=rigid]{overflow:clip}:host[mode=rigid][orient=horizontal]{transition:height .2s cubic-bezier(0,0,.2,1);height:var(--nudp-content-size)}:host[mode=rigid][orient=horizontal][state=closed]{height:0px}:host[mode=rigid][orient=vertical]{transition:width .2s cubic-bezier(0,0,.2,1);width:var(--nudp-content-size)}:host[mode=rigid][orient=vertical][state=closed]{width:0}:host[mode=over]{z-index:300}:host[orient=horizontal]{--nudp-l: 0px;--nudp-r: 0px}:host[orient=horizontal][side=top]{--nudp-t: 0px}:host[orient=horizontal][side=top][state=closed]{--nudp-ty: -100%}:host[orient=horizontal][side=bottom]{--nudp-b: 0px}:host[orient=horizontal][side=bottom][state=closed]{--nudp-ty: 100%}:host[orient=horizontal]:not([mode=rigid]){height:0px}:host[orient=vertical]{--nudp-t: 0px;--nudp-b: 0px}:host[orient=vertical][side=left]{--nudp-l: 0px}:host[orient=vertical][side=left][state=closed]{--nudp-tx: -100%}:host[orient=vertical][side=right]{--nudp-r: 0px}:host[orient=vertical][side=right][state=closed]{--nudp-tx: 100%}:host[orient=vertical]:not([mode=rigid]){width:0px}\n"] }); }
179
58
  }
180
59
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DockingPanelComponent, decorators: [{
181
60
  type: Component,
182
- args: [{ standalone: true, selector: "nu-docking-panel", exportAs: "nuDockingPanel", template: `
183
- <div class="nu-docking-wrapper" #content>
184
- <ng-content></ng-content>
185
- </div>
186
- `, 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]{animation:var(---docking-layout-anim-duration) var(---docking-layout-anim-ease) hide;animation-fill-mode:forwards}: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]){visibility:visible}: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))}:host .nu-docking-wrapper{display:flex;flex-direction:column;align-items:stretch}:host[orient=horizontal] .nu-docking-wrapper{width:100%;min-width:100%;max-width:100%}:host[orient=vertical] .nu-docking-wrapper{height:100%;min-height:100%;max-height:100%}@keyframes hide{99%{visibility:visible}to{visibility:hidden}}\n"] }]
187
- }], ctorParameters: () => [], propDecorators: { content: [{
188
- type: ViewChild,
189
- args: ["content", { read: ElementRef, static: true }]
190
- }], positionInput: [{
191
- type: Input,
192
- args: ["position"]
193
- }], stateInput: [{
194
- type: Input,
195
- args: ["state"]
196
- }], state: [{
197
- type: Output,
198
- args: ["stateChanges"]
199
- }], modeInput: [{
200
- type: Input,
201
- args: ["mode"]
202
- }], fullSizeInput: [{
203
- type: Input,
204
- args: ["fullSize"]
205
- }], miniSizeInput: [{
206
- type: Input,
207
- args: ["miniSize"]
208
- }], minimizable: [{
209
- type: Input,
210
- args: ["minimizable"]
211
- }], backdrop: [{
212
- type: Input,
213
- args: ["backdrop"]
214
- }] } });
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2luZy1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2RvY2tpbmcvZG9ja2luZy1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV0RyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRWpILE9BQU8sRUFFSCxjQUFjLEVBQ2QsWUFBWSxFQUNaLE9BQU8sRUFDUCxjQUFjLEVBRWpCLE1BQU0sZ0JBQWdCLENBQUE7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRWhELE9BQU8sRUFBRSxPQUFPLEVBQWUsTUFBTSxhQUFhLENBQUE7O0FBS2xELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUMvQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDL0MsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQWEvQyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsWUFBWTtJQUUxQyxXQUFXLENBQTJCO0lBSS9DLElBQ0ksYUFBYSxDQUFDLEdBQTBCO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbkMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENB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SixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMzQixDQUFDO0lBQ0wsQ0FBQzs4R0FyTVEscUJBQXFCO2tHQUFyQixxQkFBcUIsOGNBR0EsVUFBVSxnR0FUOUI7Ozs7S0FJVDs7MkZBRVEscUJBQXFCO2tCQVhqQyxTQUFTO2lDQUNNLElBQUksWUFDTixrQkFBa0IsWUFDbEIsZ0JBQWdCLFlBRWhCOzs7O0tBSVQ7d0RBTVEsT0FBTztzQkFEZixTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJcEQsYUFBYTtzQkFEaEIsS0FBSzt1QkFBQyxVQUFVO2dCQWNiLFVBQVU7c0JBRGIsS0FBSzt1QkFBQyxPQUFPO2dCQU9MLEtBQUs7c0JBRGIsTUFBTTt1QkFBQyxjQUFjO2dCQUlsQixTQUFTO3NCQURaLEtBQUs7dUJBQUMsTUFBTTtnQkFTVCxhQUFhO3NCQURoQixLQUFLO3VCQUFDLFVBQVU7Z0JBVWIsYUFBYTtzQkFEaEIsS0FBSzt1QkFBQyxVQUFVO2dCQVViLFdBQVc7c0JBRGQsS0FBSzt1QkFBQyxhQUFhO2dCQVloQixRQUFRO3NCQURYLEtBQUs7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHtcbiAgICBCb29sZWFuSW5wdXQsXG4gICAgY29lcmNlQm9vbEF0dHIsXG4gICAgRGVzdHJ1Y3RpYmxlLFxuICAgIEZhc3RET00sXG4gICAgTnVtYmVyV2l0aFVuaXQsXG4gICAgTnVtYmVyV2l0aFVuaXRJbnB1dFxufSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuaW1wb3J0IHsgRGltZW5zaW9uV2F0Y2hlciB9IGZyb20gXCJAbmd1dGlsL3N0eWxlXCJcblxuaW1wb3J0IHsgTDlSYW5nZSwgTDlSYW5nZU5hbWUgfSBmcm9tIFwiLi4vbDkvcmFuZ2VcIlxuXG5leHBvcnQgdHlwZSBEb2NraW5nUGFuZWxTdGF0ZSA9IFwiZnVsbFwiIHwgXCJtaW5pXCIgfCBcImhpZGRlblwiXG5leHBvcnQgdHlwZSBEb2NraW5nUGFuZWxNb2RlID0gXCJvdmVyXCIgfCBcInB1c2hcIiB8IFwicmlnaWRcIlxuXG5jb25zdCBERUZBVUxUX1BPU0lUSU9OID0gTDlSYW5nZS5jb2VyY2UoXCJsZWZ0XCIpXG5jb25zdCBISURERU5fU0laRSA9IG5ldyBOdW1iZXJXaXRoVW5pdCgwLCBcInB4XCIpXG5jb25zdCBBVVRPX1NJWkUgPSBOdW1iZXJXaXRoVW5pdC5jb2VyY2UoXCJhdXRvXCIpXG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6IFwibnUtZG9ja2luZy1wYW5lbFwiLFxuICAgIGV4cG9ydEFzOiBcIm51RG9ja2luZ1BhbmVsXCIsXG4gICAgc3R5bGVVcmw6IFwiLi9kb2NraW5nLXBhbmVsLmNvbXBvbmVudC5zY3NzXCIsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cIm51LWRvY2tpbmctd3JhcHBlclwiICNjb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIERvY2tpbmdQYW5lbENvbXBvbmVudCBleHRlbmRzIERlc3RydWN0aWJsZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIHJlYWRvbmx5IGVsID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KVxuICAgIHJlYWRvbmx5ICNkaW1XYXRjaGVyID0gaW5qZWN0KERpbWVuc2lvbldhdGNoZXIpXG4gICAgQFZpZXdDaGlsZChcImNvbnRlbnRcIiwgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICByZWFkb25seSBjb250ZW50ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cblxuICAgIEBJbnB1dChcInBvc2l0aW9uXCIpXG4gICAgc2V0IHBvc2l0aW9uSW5wdXQodmFsOiBMOVJhbmdlIHwgTDlSYW5nZU5hbWUpIHtcbiAgICAgICAgY29uc3QgY29lcmNlZCA9IEw5UmFuZ2UuY29lcmNlKHZhbClcbiAgICAgICAgaWYgKGNvZXJjZWQub3JpZW50ID09PSBcInJlY3RcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBvc2l0aW9uIHZhbHVlOiAke3ZhbH1gKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnBvc2l0aW9uLnZhbHVlLmlzRXEoY29lcmNlZCkpIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ubmV4dChjb2VyY2VkKVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlYWRvbmx5IHBvc2l0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMOVJhbmdlPihERUZBVUxUX1BPU0lUSU9OKVxuXG4gICAgQElucHV0KFwic3RhdGVcIilcbiAgICBzZXQgc3RhdGVJbnB1dCh2YWw6IERvY2tpbmdQYW5lbFN0YXRlKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLnZhbHVlICE9PSB2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUubmV4dCh2YWwpXG4gICAgICAgIH1cbiAgICB9XG4gICAgQE91dHB1dChcInN0YXRlQ2hhbmdlc1wiKVxuICAgIHJlYWRvbmx5IHN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEb2NraW5nUGFuZWxTdGF0ZT4oXCJmdWxsXCIpXG5cbiAgICBASW5wdXQoXCJtb2RlXCIpXG4gICAgc2V0IG1vZGVJbnB1dCh2YWw6IERvY2tpbmdQYW5lbE1vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZS52YWx1ZSAhPT0gdmFsKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGUubmV4dCh2YWwpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVhZG9ubHkgbW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RG9ja2luZ1BhbmVsTW9kZT4oXCJyaWdpZFwiKVxuXG4gICAgQElucHV0KFwiZnVsbFNpemVcIilcbiAgICBzZXQgZnVsbFNpemVJbnB1dCh2YWw6IE51bWJlcldpdGhVbml0SW5wdXQpIHtcbiAgICAgICAgY29uc3QgY29lcmNlZCA9IE51bWJlcldpdGhVbml0LmNvZXJjZSh2YWwsIFwicHhcIilcbiAgICAgICAgaWYgKHRoaXMuI2Z1bGxTaXplLnZhbHVlICE9PSBjb2VyY2VkKSB7XG4gICAgICAgICAgICB0aGlzLiNmdWxsU2l6ZS5uZXh0KGNvZXJjZWQpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVhZG9ubHkgI2Z1bGxTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOdW1iZXJXaXRoVW5pdD4oQVVUT19TSVpFKVxuXG4gICAgQElucHV0KFwibWluaVNpemVcIilcbiAgICBzZXQgbWluaVNpemVJbnB1dCh2YWw6IE51bWJlcldpdGhVbml0SW5wdXQpIHtcbiAgICAgICAgY29uc3QgY29lcmNlZCA9IE51bWJlcldpdGhVbml0LmNvZXJjZSh2YWwsIFwicHhcIilcbiAgICAgICAgaWYgKHRoaXMuI21pbmlTaXplLnZhbHVlICE9PSBjb2VyY2VkKSB7XG4gICAgICAgICAgICB0aGlzLiNtaW5pU2l6ZS5uZXh0KGNvZXJjZWQpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVhZG9ubHkgI21pbmlTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOdW1iZXJXaXRoVW5pdD4oSElEREVOX1NJWkUpXG5cbiAgICBASW5wdXQoXCJtaW5pbWl6YWJsZVwiKVxuICAgIHNldCBtaW5pbWl6YWJsZSh2YWw6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLiNtaW5pbWl6YWJsZSA9IGNvZXJjZUJvb2xBdHRyKHZhbClcbiAgICAgICAgdGhpcy4jbWluaW1pemFibGVBdXRvID0gZmFsc2VcbiAgICB9XG4gICAgZ2V0IG1pbmltaXphYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy4jbWluaW1pemFibGVcbiAgICB9XG4gICAgI21pbmltaXphYmxlOiBib29sZWFuID0gZmFsc2VcbiAgICAjbWluaW1pemFibGVBdXRvOiBib29sZWFuID0gdHJ1ZVxuXG4gICAgQElucHV0KFwiYmFja2Ryb3BcIilcbiAgICBzZXQgYmFja2Ryb3AodmFsOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy4jYmFja2Ryb3AgPSBjb2VyY2VCb29sQXR0cih2YWwpXG4gICAgfVxuICAgIGdldCBiYWNrZHJvcCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2JhY2tkcm9wXG4gICAgfVxuICAgICNiYWNrZHJvcDogYm9vbGVhbiA9IGZhbHNlXG5cbiAgICByZWFkb25seSAjY29udGVudFNpemUgPSBuZXcgUmVwbGF5U3ViamVjdDx7IHdpZHRoOiBOdW1iZXJXaXRoVW5pdDsgaGVpZ2h0OiBOdW1iZXJXaXRoVW5pdCB9PigxKVxuXG4gICAgcmVhZG9ubHkgI2F1dG9TaXplID0gY29tYmluZUxhdGVzdCh7XG4gICAgICAgIGRpbTogdGhpcy4jY29udGVudFNpemUsXG4gICAgICAgIHBvczogdGhpcy5wb3NpdGlvblxuICAgIH0pLnBpcGUoXG4gICAgICAgIG1hcCgoeyBkaW0sIHBvcyB9KSA9PiB7XG4gICAgICAgICAgICBpZiAocG9zLm9yaWVudCA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGltLmhlaWdodFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGltLndpZHRoXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGZ1bGxTaXplID0gdGhpcy4jZnVsbFNpemUucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHNpemUgPT4ge1xuICAgICAgICAgICAgaWYgKHNpemUudW5pdCA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4jYXV0b1NpemVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHNpemUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IG1pbmlTaXplID0gdGhpcy4jbWluaVNpemUucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHNpemUgPT4ge1xuICAgICAgICAgICAgaWYgKHNpemUudW5pdCA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4jYXV0b1NpemVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHNpemUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGNoYW5nZXMgPSBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgcG9zaXRpb246IHRoaXMucG9zaXRpb24sXG4gICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgIGZ1bGxTaXplOiB0aGlzLmZ1bGxTaXplLFxuICAgICAgICBtaW5pU2l6ZTogdGhpcy5taW5pU2l6ZSxcbiAgICAgICAgY29udGVudFNpemU6IHRoaXMuI2NvbnRlbnRTaXplXG4gICAgfSlcblxuICAgIC8vIFRPRE86IGJldHRlciBhbmltYXRpb24gaGFuZGxpbmcgaW4gbWluIC0+IGhpZGRlbiAtPiBtaW4gLT4gZnVsbFxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpXG5cbiAgICAgICAgdGhpcy5kLnN1Yih0aGlzLmNoYW5nZXMpLnN1YnNjcmliZShjaGFuZ2VzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNtaW5pbWl6YWJsZUF1dG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNtaW5pbWl6YWJsZSA9IHRoaXMuI21pbmlTaXplLnZhbHVlLnZhbHVlICE9PSAwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEZhc3RET00uc2V0QXR0cmlidXRlcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogY2hhbmdlcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICBvcmllbnQ6IGNoYW5nZXMucG9zaXRpb24ub3JpZW50LFxuICAgICAgICAgICAgICAgIG1vZGU6IGNoYW5nZXMubW9kZSxcbiAgICAgICAgICAgICAgICBzaWRlOlxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnBvc2l0aW9uLm9yaWVudCA9PT0gXCJob3Jpem9udGFsXCIgPyBjaGFuZ2VzLnBvc2l0aW9uLmNlbGxzWzBdLnYgOiBjaGFuZ2VzLnBvc2l0aW9uLmNlbGxzWzBdLmhcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGNoYW5nZXMucG9zaXRpb24ub3JpZW50ID09PSBcImhvcml6b250YWxcIlxuICAgICAgICAgICAgbGV0IHcgPSBudWxsXG4gICAgICAgICAgICBsZXQgaCA9IG51bGxcblxuICAgICAgICAgICAgLy8gVE9ETzogd2hlbiBjaGFuZ2Ugc3RhdGUgZnJvbSBtaW5pIC0+IGhpZGRlbiwgY3VycmVudGx5IHdyb25nIGJlaGF2aW9yXG4gICAgICAgICAgICAvLyB0aGUgZ29vZCBiZWhhdmlvciBpcyB0byBub3QgZ2FpbiBmdWxsU2l6ZSBhbmcgZ28gdG8gaGlkZGVuXG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5zdGF0ZSA9PT0gXCJtaW5pXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGggPSBjaGFuZ2VzLm1pbmlTaXplLnVuaXQgPT09IFwiYXV0b1wiID8gY2hhbmdlcy5jb250ZW50U2l6ZS5oZWlnaHQgOiBjaGFuZ2VzLm1pbmlTaXplXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdyA9IGNoYW5nZXMubWluaVNpemUudW5pdCA9PT0gXCJhdXRvXCIgPyBjaGFuZ2VzLmNvbnRlbnRTaXplLndpZHRoIDogY2hhbmdlcy5taW5pU2l6ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgICAgICBoID0gY2hhbmdlcy5mdWxsU2l6ZS51bml0ID09PSBcImF1dG9cIiA/IGNoYW5nZXMuY29udGVudFNpemUuaGVpZ2h0IDogY2hhbmdlcy5mdWxsU2l6ZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHcgPSBjaGFuZ2VzLmZ1bGxTaXplLnVuaXQgPT09IFwiYXV0b1wiID8gY2hhbmdlcy5jb250ZW50U2l6ZS53aWR0aCA6IGNoYW5nZXMuZnVsbFNpemVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEZhc3RET00uc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCItLWRvY2tpbmctcGFuZWwtd1wiOiB3ICE9IG51bGwgPyBgJHt3fWAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcIi0tZG9ja2luZy1wYW5lbC1oXCI6IGggIT0gbnVsbCA/IGAke2h9YCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiLS1kb2NraW5nLXBhbmVsLWNvbnRlbnQtd1wiOiBjaGFuZ2VzLmNvbnRlbnRTaXplLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICBcIi0tZG9ja2luZy1wYW5lbC1jb250ZW50LWhcIjogY2hhbmdlcy5jb250ZW50U2l6ZS5oZWlnaHRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICgpID0+IEZhc3RET00uc2V0QXR0cmlidXRlcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHsgYW5pbWF0ZTogXCJcIiB9KVxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kXG4gICAgICAgICAgICAuc3ViKHRoaXMuI2RpbVdhdGNoZXIud2F0Y2godGhpcy5jb250ZW50LCBcInNjcm9sbC1ib3hcIikpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoZGltID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBuZXcgTnVtYmVyV2l0aFVuaXQoZGltLndpZHRoLCBcInB4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBuZXcgTnVtYmVyV2l0aFVuaXQoZGltLmhlaWdodCwgXCJweFwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy4jY29udGVudFNpemUpXG4gICAgfVxuXG4gICAgb3BlbigpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5uZXh0KFwiZnVsbFwiKVxuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLnN0YXRlLm5leHQoXCJoaWRkZW5cIilcbiAgICB9XG5cbiAgICBtaW5pbWl6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubWluaW1pemFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUubmV4dChcIm1pbmlcIilcbiAgICAgICAgfVxuICAgIH1cbn1cblxudHlwZSBDaGFuZ2VzT2JzZXJ2YWJsZSA9IHR5cGVvZiBEb2NraW5nUGFuZWxDb21wb25lbnQucHJvdG90eXBlLmNoYW5nZXNcbmV4cG9ydCB0eXBlIERvY2tpbmdQYW5lbENoYW5nZXMgPSBDaGFuZ2VzT2JzZXJ2YWJsZSBleHRlbmRzIE9ic2VydmFibGU8aW5mZXIgVD4gPyBUIDogbmV2ZXJcbiJdfQ==
61
+ args: [{ selector: "nu-docking-panel", exportAs: "nuDockingPanel", standalone: true, host: {
62
+ "[style.grid-area]": "gridArea()",
63
+ "[style.--nudp-content-size.px]": "contentSize()",
64
+ "[attr.state]": "_opened() ? 'opened' : 'closed'",
65
+ "[attr.orient]": "orient()",
66
+ "[attr.side]": "side()",
67
+ "[attr.mode]": "mode()"
68
+ }, template: `<div class="wrapper" #content><ng-content /></div>`, styles: [":host{--nudp-tx: 0;--nudp-ty: 0;--nudp-t: auto;--nudp-r: auto;--nudp-b: auto;--nudp-l: auto;display:block;position:relative;z-index:100}:host .wrapper{all:inherit;display:grid;grid-template-columns:auto;grid-template-rows:auto;align-items:stretch;justify-items:stretch;position:absolute;top:var(--nudp-t);right:var(--nudp-r);bottom:var(--nudp-b);left:var(--nudp-l);width:auto;height:auto;transition:transform .2s cubic-bezier(0,0,.2,1);transform:translate(var(--nudp-tx),var(--nudp-ty))}:host[mode=rigid]{overflow:clip}:host[mode=rigid][orient=horizontal]{transition:height .2s cubic-bezier(0,0,.2,1);height:var(--nudp-content-size)}:host[mode=rigid][orient=horizontal][state=closed]{height:0px}:host[mode=rigid][orient=vertical]{transition:width .2s cubic-bezier(0,0,.2,1);width:var(--nudp-content-size)}:host[mode=rigid][orient=vertical][state=closed]{width:0}:host[mode=over]{z-index:300}:host[orient=horizontal]{--nudp-l: 0px;--nudp-r: 0px}:host[orient=horizontal][side=top]{--nudp-t: 0px}:host[orient=horizontal][side=top][state=closed]{--nudp-ty: -100%}:host[orient=horizontal][side=bottom]{--nudp-b: 0px}:host[orient=horizontal][side=bottom][state=closed]{--nudp-ty: 100%}:host[orient=horizontal]:not([mode=rigid]){height:0px}:host[orient=vertical]{--nudp-t: 0px;--nudp-b: 0px}:host[orient=vertical][side=left]{--nudp-l: 0px}:host[orient=vertical][side=left][state=closed]{--nudp-tx: -100%}:host[orient=vertical][side=right]{--nudp-r: 0px}:host[orient=vertical][side=right][state=closed]{--nudp-tx: 100%}:host[orient=vertical]:not([mode=rigid]){width:0px}\n"] }]
69
+ }] });
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2luZy1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2RvY2tpbmcvZG9ja2luZy1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNoRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBRXZGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBOztBQU1yQyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7QUFpQi9DLE1BQU0sT0FBTyxxQkFBcUI7SUFmbEM7UUFnQmEsZ0JBQVcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUN0QyxPQUFFLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRXZCLGFBQVEsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDMUUscUJBQXFCO1FBQ1osV0FBTSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQTtRQUM5QixZQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3ZELFNBQUksR0FBRyxLQUFLLENBQW1CLE9BQU8sQ0FBQyxDQUFBO1FBQ3ZDLFlBQU8sR0FBRyxLQUFLLENBQTRCLFNBQVMsQ0FBQyxDQUFBO1FBQ3JELGFBQVEsR0FBRyxLQUFLLENBQWUsS0FBSyxDQUFDLENBQUE7UUFFckMsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQTtRQUN6RCxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMvQyxTQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7WUFDM0IsT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hFLENBQUMsQ0FBQyxDQUFBO1FBRU8sWUFBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUE7UUFFN0QsZUFBVSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNqRCxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFDbkUsa0JBQWtCLEVBQUUsQ0FDdkIsQ0FBQTtRQUNRLGNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRXJDLGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7WUFDNUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNQLE9BQU8sQ0FBQyxDQUFBO1lBQ1osQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQTtRQUNsRSxDQUFDLENBQUMsQ0FBQTtLQXdCTDtJQXhEWSxXQUFXLENBQTJCO0lBa0MvQywyQ0FBMkM7SUFDM0MsbUNBQW1DO0lBQ25DLDhDQUE4QztJQUM5Qyx3RUFBd0U7SUFDeEUsMENBQTBDO0lBQzFDLHNDQUFzQztJQUN0Qyw2Q0FBNkM7SUFFN0MsWUFBWTtJQUVaLG9CQUFvQjtJQUNwQixRQUFRO0lBQ1Isa0JBQWtCO0lBQ2xCLEtBQUs7SUFFTCxJQUFJO1FBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMxQixDQUFDOzhHQXhEUSxxQkFBcUI7a0dBQXJCLHFCQUFxQixraUNBbUIyQixVQUFVLDJFQXJCekQsb0RBQW9EOzsyRkFFckQscUJBQXFCO2tCQWZqQyxTQUFTOytCQUNJLGtCQUFrQixZQUNsQixnQkFBZ0IsY0FDZCxJQUFJLFFBQ1Y7d0JBQ0YsbUJBQW1CLEVBQUUsWUFBWTt3QkFDakMsZ0NBQWdDLEVBQUUsZUFBZTt3QkFDakQsY0FBYyxFQUFFLGlDQUFpQzt3QkFDakQsZUFBZSxFQUFFLFVBQVU7d0JBQzNCLGFBQWEsRUFBRSxRQUFRO3dCQUN2QixhQUFhLEVBQUUsUUFBUTtxQkFDMUIsWUFFUyxvREFBb0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBtb2RlbCwgdmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wXCJcblxuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBjb2VyY2VCb29sQXR0ciB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5pbXBvcnQgeyBEaW1lbnNpb25XYXRjaGVyIH0gZnJvbSBcIkBuZ3V0aWwvc3R5bGVcIlxuXG5pbXBvcnQgeyBMOVJhbmdlIH0gZnJvbSBcIi4uL2w5L3JhbmdlXCJcblxuZXhwb3J0IHR5cGUgRG9ja2luZ1BhbmVsU3RhdGUgPSBcImZ1bGxcIiB8IFwibWluaVwiIHwgXCJoaWRkZW5cIlxuZXhwb3J0IHR5cGUgRG9ja2luZ1BhbmVsTW9kZSA9IFwib3ZlclwiIHwgXCJwdXNoXCIgfCBcInJpZ2lkXCJcbmV4cG9ydCB0eXBlIEJhY2tkcm9wTW9kZSA9IGJvb2xlYW4gfCBcImZ1bGxcIiB8IFwicGFuZWwtc2l6ZVwiXG5cbmNvbnN0IERFRkFVTFRfUE9TSVRJT04gPSBMOVJhbmdlLmNvZXJjZShcImxlZnRcIilcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibnUtZG9ja2luZy1wYW5lbFwiLFxuICAgIGV4cG9ydEFzOiBcIm51RG9ja2luZ1BhbmVsXCIsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBob3N0OiB7XG4gICAgICAgIFwiW3N0eWxlLmdyaWQtYXJlYV1cIjogXCJncmlkQXJlYSgpXCIsXG4gICAgICAgIFwiW3N0eWxlLi0tbnVkcC1jb250ZW50LXNpemUucHhdXCI6IFwiY29udGVudFNpemUoKVwiLFxuICAgICAgICBcIlthdHRyLnN0YXRlXVwiOiBcIl9vcGVuZWQoKSA/ICdvcGVuZWQnIDogJ2Nsb3NlZCdcIixcbiAgICAgICAgXCJbYXR0ci5vcmllbnRdXCI6IFwib3JpZW50KClcIixcbiAgICAgICAgXCJbYXR0ci5zaWRlXVwiOiBcInNpZGUoKVwiLFxuICAgICAgICBcIlthdHRyLm1vZGVdXCI6IFwibW9kZSgpXCJcbiAgICB9LFxuICAgIHN0eWxlVXJsOiBcIi4vZG9ja2luZy1wYW5lbC5jb21wb25lbnQuc2Nzc1wiLFxuICAgIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cIndyYXBwZXJcIiAjY29udGVudD48bmctY29udGVudCAvPjwvZGl2PmBcbn0pXG5leHBvcnQgY2xhc3MgRG9ja2luZ1BhbmVsQ29tcG9uZW50IHtcbiAgICByZWFkb25seSAjZGltV2F0Y2hlciA9IGluamVjdChEaW1lbnNpb25XYXRjaGVyKVxuICAgIHJlYWRvbmx5IGVsID0gaW5qZWN0KEVsZW1lbnRSZWYpXG5cbiAgICByZWFkb25seSBwb3NpdGlvbiA9IGlucHV0KERFRkFVTFRfUE9TSVRJT04sIHsgdHJhbnNmb3JtOiBMOVJhbmdlLmNvZXJjZSB9KVxuICAgIC8vIFRPRE86IGxpbmtlZFNpZ25hbFxuICAgIHJlYWRvbmx5IG9wZW5lZCA9IG1vZGVsPGJvb2xlYW4+KGZhbHNlKVxuICAgIHJlYWRvbmx5IF9vcGVuZWQgPSBjb21wdXRlZCgoKSA9PiBjb2VyY2VCb29sQXR0cih0aGlzLm9wZW5lZCgpKSlcbiAgICByZWFkb25seSBtb2RlID0gaW5wdXQ8RG9ja2luZ1BhbmVsTW9kZT4oXCJyaWdpZFwiKVxuICAgIHJlYWRvbmx5IG1heFNpemUgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsPih1bmRlZmluZWQpXG4gICAgcmVhZG9ubHkgYmFja2Ryb3AgPSBpbnB1dDxCYWNrZHJvcE1vZGU+KGZhbHNlKVxuXG4gICAgcmVhZG9ubHkgZ3JpZEFyZWEgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBvc2l0aW9uKCkuaW50b0dyaWRBcmVhKCkpXG4gICAgcmVhZG9ubHkgb3JpZW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wb3NpdGlvbigpLm9yaWVudClcbiAgICByZWFkb25seSBzaWRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLnBvc2l0aW9uKClcbiAgICAgICAgcmV0dXJuIHBvcy5vcmllbnQgPT09IFwiaG9yaXpvbnRhbFwiID8gcG9zLmNlbGxzWzBdLnYgOiBwb3MuY2VsbHNbMF0uaFxuICAgIH0pXG5cbiAgICByZWFkb25seSBjb250ZW50ID0gdmlld0NoaWxkLnJlcXVpcmVkKFwiY29udGVudFwiLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcblxuICAgIHJlYWRvbmx5IGRpbWVuc2lvbiQgPSB0b09ic2VydmFibGUodGhpcy5jb250ZW50KS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoY29udGVudCA9PiB0aGlzLiNkaW1XYXRjaGVyLndhdGNoKGNvbnRlbnQsIFwiYm9yZGVyLWJveFwiKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgKVxuICAgIHJlYWRvbmx5IGRpbWVuc2lvbiA9IHRvU2lnbmFsKHRoaXMuZGltZW5zaW9uJClcblxuICAgIHJlYWRvbmx5IGNvbnRlbnRTaXplID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBkaW0gPSB0aGlzLmRpbWVuc2lvbigpXG4gICAgICAgIGlmICghZGltKSB7XG4gICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWVudCgpID09PSBcImhvcml6b250YWxcIiA/IGRpbS5oZWlnaHQgOiBkaW0ud2lkdGhcbiAgICB9KVxuXG4gICAgLy8gcmVhZG9ubHkgYmFja2Ryb3BTaXplID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vICAgICBjb25zdCBtb2RlID0gdGhpcy5iYWNrZHJvcCgpXG4gICAgLy8gICAgIGlmIChtb2RlID09PSB0cnVlIHx8IG1vZGUgPT09IFwiZnVsbFwiKSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gTDlSYW5nZS5jb2VyY2UoXCJ0b3A6bGVmdC1ib3R0b206cmlnaHRcIikuaW50b0dyaWRBcmVhKClcbiAgICAvLyAgICAgfSBlbHNlIGlmIChtb2RlID09PSBcInBhbmVsLXNpemVcIikge1xuICAgIC8vICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5wb3NpdGlvbigpXG4gICAgLy8gICAgICAgICBpZiAocG9zLm9yaWVudCA9PT0gXCJob3Jpem9udGFsXCIpIHtcblxuICAgIC8vICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICByZXR1cm4gXCJcIlxuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHJldHVybiBudWxsXG4gICAgLy8gfSlcblxuICAgIG9wZW4oKSB7XG4gICAgICAgIHRoaXMub3BlbmVkLnNldCh0cnVlKVxuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLm9wZW5lZC5zZXQoZmFsc2UpXG4gICAgfVxufVxuIl19
@@ -1,26 +1,26 @@
1
- /**
2
- * -----------------------------------------------
3
- * | TOP:LEFT | TOP:CENTER | TOP:RIGHT |
4
- * -----------------------------------------------
5
- * | MIDDLE:LEFT | MIDDLE:CENTER | MIDDLE:RIGH |
6
- * -----------------------------------------------
7
- * | BOTTOMN:LEFT | BOTTOM:CENTER | BOTTOM:RIGHT |
8
- * -----------------------------------------------
9
- */
10
1
  const vertical = ["top", "middle", "bottom"];
11
2
  const horizontal = ["left", "center", "right"];
3
+ export const L9GridTopLeft = { row: 1, col: 1 };
12
4
  export class L9Cell {
13
5
  static coerce(value) {
14
- const [v, h] = value.split(":");
15
- if (vertical.includes(v) && horizontal.includes(h)) {
16
- return new L9Cell(v, h);
6
+ const [v1, v2] = value.split(":");
7
+ const v = vertical.includes(v1) ? v1 : v2;
8
+ const h = horizontal.includes(v1) ? v1 : v2;
9
+ if (v === h) {
10
+ throw new Error(`Invalid cell value: ${value}`);
17
11
  }
18
- throw new Error(`Invalid cell value: ${value}`);
12
+ return new L9Cell(v, h);
19
13
  }
20
14
  constructor(v, h) {
21
15
  this.v = v;
22
16
  this.h = h;
23
17
  }
18
+ intoGridArea(gridTopLeft = L9GridTopLeft) {
19
+ return `${gridTopLeft.row + vertical.indexOf(this.v)}/${gridTopLeft.col + horizontal.indexOf(this.h)}`;
20
+ }
21
+ isEq(other) {
22
+ return this.v === other.v && this.h === other.h;
23
+ }
24
24
  }
25
25
  export class L9Range {
26
26
  static coerce(value) {
@@ -50,18 +50,40 @@ export class L9Range {
50
50
  }
51
51
  return false;
52
52
  }
53
+ intoGridArea(gridTopLeft = L9GridTopLeft) {
54
+ const start = this.cells[0];
55
+ const end = this.cells[this.cells.length - 1];
56
+ const endTopLeft = { row: gridTopLeft.row + 1, col: gridTopLeft.col + 1 };
57
+ return `${start.intoGridArea(gridTopLeft)}/${end.intoGridArea(endTopLeft)}`;
58
+ }
59
+ intoRect() {
60
+ const start = this.cells[0];
61
+ const end = this.cells[this.cells.length - 1];
62
+ const x = horizontal.indexOf(start.h);
63
+ const y = vertical.indexOf(start.v);
64
+ return { x, y, width: horizontal.indexOf(end.h) - x + 1, height: vertical.indexOf(end.v) - y + 1 };
65
+ }
53
66
  #determineOrient() {
54
- const { v: sv, h: sh } = this.cells[0];
55
- const { v: ev, h: eh } = this.cells[this.cells.length - 1];
56
- if (sv === ev) {
67
+ const rect = this.intoRect();
68
+ if (rect.width === rect.height) {
69
+ // corner
70
+ if (rect.x === rect.y) {
71
+ return "vertical";
72
+ }
73
+ if (rect.x === 0 || rect.x === 2) {
74
+ return "vertical";
75
+ }
76
+ else if (rect.y === 0 || rect.y === 2) {
77
+ return "horizontal";
78
+ }
79
+ }
80
+ else if (rect.width > rect.height) {
57
81
  return "horizontal";
58
82
  }
59
- else if (sh === eh) {
83
+ else if (rect.height > rect.width) {
60
84
  return "vertical";
61
85
  }
62
- else {
63
- return "rect";
64
- }
86
+ return "vertical";
65
87
  }
66
88
  }
67
89
  function parse(value) {
@@ -106,4 +128,4 @@ function parse(value) {
106
128
  }
107
129
  return cells;
108
130
  }
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2w5L3JhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBVSxDQUFBO0FBQ3JELE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQVUsQ0FBQTtBQVF2RCxNQUFNLE9BQU8sTUFBTTtJQUNmLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBaUI7UUFDM0IsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRS9CLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQVEsQ0FBQyxFQUFFLENBQUM7WUFDL0QsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFRLEVBQUUsQ0FBUSxDQUFDLENBQUE7UUFDekMsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDbkQsQ0FBQztJQUVELFlBQ29CLENBQWEsRUFDYixDQUFlO1FBRGYsTUFBQyxHQUFELENBQUMsQ0FBWTtRQUNiLE1BQUMsR0FBRCxDQUFDLENBQWM7SUFDaEMsQ0FBQztDQUNQO0FBRUQsTUFBTSxPQUFPLE9BQU87SUFDaEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUE0QjtRQUN0QyxJQUFJLEtBQUssWUFBWSxPQUFPLEVBQUUsQ0FBQztZQUMzQixPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDN0IsQ0FBQztJQUNMLENBQUM7SUFLRCxZQUFZLEtBQWtCO1FBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7SUFDekMsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFjO1FBQ2YsSUFBSSxLQUFLLFlBQVksT0FBTyxFQUFFLENBQUM7WUFDM0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUMvQixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBRWpDLElBQUksU0FBUyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMvRCxPQUFPLEtBQUssQ0FBQTtZQUNoQixDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUNsRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBRXJELElBQUksUUFBUSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxPQUFPLElBQUksQ0FBQTtZQUNmLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBRTFELElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ1osT0FBTyxZQUFZLENBQUE7UUFDdkIsQ0FBQzthQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ25CLE9BQU8sVUFBVSxDQUFBO1FBQ3JCLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxNQUFNLENBQUE7UUFDakIsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQUVELFNBQVMsS0FBSyxDQUFDLEtBQVU7SUFDckIsTUFBTSxLQUFLLEdBQWtCLEVBQUUsQ0FBQTtJQUUvQixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMzQixLQUFLLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDcEMsQ0FBQztJQUNMLENBQUM7U0FBTSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDcEMsQ0FBQztJQUNMLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQy9CLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUUzQixJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUMxRSxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDdEUsQ0FBQztRQUVELE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdEMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUVwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ2pGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFTLENBQUMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQVMsQ0FBQyxDQUFDLENBQUE7UUFDL0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQVMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBUyxDQUFDLENBQUMsQ0FBQTtRQUNyRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBUyxDQUFDLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFTLENBQUMsQ0FBQyxDQUFBO1FBRW5GLEtBQUssSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNyQyxLQUFLLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDeEQsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0IsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDcEMsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQixNQUFNLEtBQUssQ0FBQyxzQkFBc0IsS0FBSyxHQUFHLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIHwgVE9QOkxFRlQgICAgIHwgIFRPUDpDRU5URVIgICB8IFRPUDpSSUdIVCAgICB8XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogfCBNSURETEU6TEVGVCAgfCBNSURETEU6Q0VOVEVSIHwgTUlERExFOlJJR0ggIHxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiB8IEJPVFRPTU46TEVGVCB8IEJPVFRPTTpDRU5URVIgfCBCT1RUT006UklHSFQgfFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCB2ZXJ0aWNhbCA9IFtcInRvcFwiLCBcIm1pZGRsZVwiLCBcImJvdHRvbVwiXSBhcyBjb25zdFxuY29uc3QgaG9yaXpvbnRhbCA9IFtcImxlZnRcIiwgXCJjZW50ZXJcIiwgXCJyaWdodFwiXSBhcyBjb25zdFxuXG5leHBvcnQgdHlwZSBMOVZlcnRpY2FsID0gXCJ0b3BcIiB8IFwibWlkZGxlXCIgfCBcImJvdHRvbVwiXG5leHBvcnQgdHlwZSBMOUhvcml6b250YWwgPSBcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCJcbmV4cG9ydCB0eXBlIEw5Q2VsbE5hbWUgPSBgJHtMOVZlcnRpY2FsfToke0w5SG9yaXpvbnRhbH1gXG5leHBvcnQgdHlwZSBMOVJhbmdlTmFtZSA9IEw5VmVydGljYWwgfCBMOUhvcml6b250YWwgfCBMOUNlbGxOYW1lIHwgYCR7TDlDZWxsTmFtZX0tJHtMOUNlbGxOYW1lfWBcbmV4cG9ydCB0eXBlIEw5T3JpZW50ID0gXCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCIgfCBcInJlY3RcIlxuXG5leHBvcnQgY2xhc3MgTDlDZWxsIHtcbiAgICBzdGF0aWMgY29lcmNlKHZhbHVlOiBMOUNlbGxOYW1lKSB7XG4gICAgICAgIGNvbnN0IFt2LCBoXSA9IHZhbHVlLnNwbGl0KFwiOlwiKVxuXG4gICAgICAgIGlmICh2ZXJ0aWNhbC5pbmNsdWRlcyh2IGFzIGFueSkgJiYgaG9yaXpvbnRhbC5pbmNsdWRlcyhoIGFzIGFueSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTDlDZWxsKHYgYXMgYW55LCBoIGFzIGFueSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjZWxsIHZhbHVlOiAke3ZhbHVlfWApXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSB2OiBMOVZlcnRpY2FsLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgaDogTDlIb3Jpem9udGFsXG4gICAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgTDlSYW5nZSB7XG4gICAgc3RhdGljIGNvZXJjZSh2YWx1ZTogTDlSYW5nZSB8IEw5UmFuZ2VOYW1lKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEw5UmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMOVJhbmdlKHZhbHVlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVhZG9ubHkgY2VsbHM6IEFycmF5PEw5Q2VsbD5cbiAgICByZWFkb25seSBvcmllbnQ6IEw5T3JpZW50XG5cbiAgICBjb25zdHJ1Y3RvcihyYW5nZTogTDlSYW5nZU5hbWUpIHtcbiAgICAgICAgdGhpcy5jZWxscyA9IHBhcnNlKHJhbmdlKVxuICAgICAgICB0aGlzLm9yaWVudCA9IHRoaXMuI2RldGVybWluZU9yaWVudCgpXG4gICAgfVxuXG4gICAgaXNFcShvdGhlcjogTDlSYW5nZSkge1xuICAgICAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBMOVJhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxmRmlyc3QgPSB0aGlzLmNlbGxzWzBdXG4gICAgICAgICAgICBjb25zdCBvdGhlckZpcnN0ID0gb3RoZXIuY2VsbHNbMF1cblxuICAgICAgICAgICAgaWYgKHNlbGZGaXJzdC5oICE9PSBvdGhlckZpcnN0LmggfHwgc2VsZkZpcnN0LnYgIT09IG90aGVyRmlyc3Qudikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzZWxmTGFzdCA9IHRoaXMuY2VsbHNbdGhpcy5jZWxscy5sZW5ndGggLSAxXVxuICAgICAgICAgICAgY29uc3Qgb3RoZXJMYXN0ID0gb3RoZXIuY2VsbHNbb3RoZXIuY2VsbHMubGVuZ3RoIC0gMV1cblxuICAgICAgICAgICAgaWYgKHNlbGZMYXN0LmggPT09IG90aGVyTGFzdC5oICYmIHNlbGZMYXN0LnYgPT09IG90aGVyTGFzdC52KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAjZGV0ZXJtaW5lT3JpZW50KCk6IEw5T3JpZW50IHtcbiAgICAgICAgY29uc3QgeyB2OiBzdiwgaDogc2ggfSA9IHRoaXMuY2VsbHNbMF1cbiAgICAgICAgY29uc3QgeyB2OiBldiwgaDogZWggfSA9IHRoaXMuY2VsbHNbdGhpcy5jZWxscy5sZW5ndGggLSAxXVxuXG4gICAgICAgIGlmIChzdiA9PT0gZXYpIHtcbiAgICAgICAgICAgIHJldHVybiBcImhvcml6b250YWxcIlxuICAgICAgICB9IGVsc2UgaWYgKHNoID09PSBlaCkge1xuICAgICAgICAgICAgcmV0dXJuIFwidmVydGljYWxcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwicmVjdFwiXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlKHZhbHVlOiBhbnkpOiBBcnJheTxMOUNlbGw+IHtcbiAgICBjb25zdCBjZWxsczogQXJyYXk8TDlDZWxsPiA9IFtdXG5cbiAgICBpZiAodmVydGljYWwuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaCBvZiBob3Jpem9udGFsKSB7XG4gICAgICAgICAgICBjZWxscy5wdXNoKG5ldyBMOUNlbGwodmFsdWUsIGgpKVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChob3Jpem9udGFsLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmVydGljYWwpIHtcbiAgICAgICAgICAgIGNlbGxzLnB1c2gobmV3IEw5Q2VsbCh2LCB2YWx1ZSkpXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluY2x1ZGVzKFwiLVwiKSkge1xuICAgICAgICBjb25zdCBbYmVnaW4sIGVuZF0gPSB2YWx1ZS5zcGxpdChcIi1cIilcbiAgICAgICAgY29uc3QgYmVnaW5DZWxscyA9IHBhcnNlKGJlZ2luKVxuICAgICAgICBjb25zdCBlbmRDZWxscyA9IHBhcnNlKGVuZClcblxuICAgICAgICBpZiAoYmVnaW5DZWxscy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGJlZ2luIHJhbmdlIHZhbHVlOiAke2JlZ2lufWApXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW5kQ2VsbHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXJyZW50bHkgbm90IHN1cHBvcnRlZCBlbmQgcmFuZ2UgdmFsdWU6ICR7ZW5kfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHY6IGJ2LCBoOiBiaCB9ID0gYmVnaW5DZWxsc1swXVxuICAgICAgICBjb25zdCB7IHY6IGV2LCBoOiBlaCB9ID0gZW5kQ2VsbHNbMF1cblxuICAgICAgICBjb25zdCB2c3RhcnQgPSBNYXRoLm1pbih2ZXJ0aWNhbC5pbmRleE9mKGJ2IGFzIGFueSksIHZlcnRpY2FsLmluZGV4T2YoZXYgYXMgYW55KSlcbiAgICAgICAgY29uc3QgdmVuZCA9IE1hdGgubWF4KHZlcnRpY2FsLmluZGV4T2YoYnYgYXMgYW55KSwgdmVydGljYWwuaW5kZXhPZihldiBhcyBhbnkpKVxuICAgICAgICBjb25zdCBoc3RhcnQgPSBNYXRoLm1pbihob3Jpem9udGFsLmluZGV4T2YoYmggYXMgYW55KSwgaG9yaXpvbnRhbC5pbmRleE9mKGVoIGFzIGFueSkpXG4gICAgICAgIGNvbnN0IGhlbmQgPSBNYXRoLm1heChob3Jpem9udGFsLmluZGV4T2YoYmggYXMgYW55KSwgaG9yaXpvbnRhbC5pbmRleE9mKGVoIGFzIGFueSkpXG5cbiAgICAgICAgZm9yIChsZXQgdmkgPSB2c3RhcnQ7IHZpIDw9IHZlbmQ7IHZpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGhpID0gaHN0YXJ0OyBoaSA8PSBoZW5kOyBoaSsrKSB7XG4gICAgICAgICAgICAgICAgY2VsbHMucHVzaChuZXcgTDlDZWxsKHZlcnRpY2FsW3ZpXSwgaG9yaXpvbnRhbFtoaV0pKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICAgICAgY2VsbHMucHVzaChMOUNlbGwuY29lcmNlKHZhbHVlKSlcbiAgICB9XG5cbiAgICBpZiAoY2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IEVycm9yKGBVbmRlZmluZWQgbDljZWxsOiBcIiR7dmFsdWV9XCJgKVxuICAgIH1cblxuICAgIHJldHVybiBjZWxsc1xufVxuIl19
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2w5L3JhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQVUsQ0FBQTtBQUNyRCxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFVLENBQUE7QUFRdkQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUE7QUFFL0MsTUFBTSxPQUFPLE1BQU07SUFDZixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQWlCO1FBQzNCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNqQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUNoRCxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUVsRCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDbkQsQ0FBQztRQUVELE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBUSxFQUFFLENBQVEsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxZQUNvQixDQUFhLEVBQ2IsQ0FBZTtRQURmLE1BQUMsR0FBRCxDQUFDLENBQVk7UUFDYixNQUFDLEdBQUQsQ0FBQyxDQUFjO0lBQ2hDLENBQUM7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S0FBSyxDQUFDLDRDQUE0QyxHQUFHLEVBQUUsQ0FBQyxDQUFBO1FBQ3RFLENBQUM7UUFFRCxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQVMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBUyxDQUFDLENBQUMsQ0FBQTtRQUNqRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFTLENBQUMsQ0FBQyxDQUFBO1FBQy9FLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFTLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQVMsQ0FBQyxDQUFDLENBQUE7UUFDckYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQVMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBUyxDQUFDLENBQUMsQ0FBQTtRQUVuRixLQUFLLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDckMsS0FBSyxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNyQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3hELENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztTQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdCLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQ3BDLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckIsTUFBTSxLQUFLLENBQUMsc0JBQXNCLEtBQUssR0FBRyxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiB8IFRPUDpMRUZUICAgICB8ICBUT1A6Q0VOVEVSICAgfCBUT1A6UklHSFQgICAgfFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogfCBNSURETEU6TEVGVCAgfCBNSURETEU6Q0VOVEVSIHwgTUlERExFOlJJR0hUIHxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIHwgQk9UVE9NTjpMRUZUIHwgQk9UVE9NOkNFTlRFUiB8IEJPVFRPTTpSSUdIVCB8XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5pbXBvcnQgeyBSZWN0IH0gZnJvbSBcIkBuZ3V0aWwvc3R5bGVcIlxuXG5jb25zdCB2ZXJ0aWNhbCA9IFtcInRvcFwiLCBcIm1pZGRsZVwiLCBcImJvdHRvbVwiXSBhcyBjb25zdFxuY29uc3QgaG9yaXpvbnRhbCA9IFtcImxlZnRcIiwgXCJjZW50ZXJcIiwgXCJyaWdodFwiXSBhcyBjb25zdFxuXG5leHBvcnQgdHlwZSBMOVZlcnRpY2FsID0gKHR5cGVvZiB2ZXJ0aWNhbClbbnVtYmVyXVxuZXhwb3J0IHR5cGUgTDlIb3Jpem9udGFsID0gKHR5cGVvZiBob3Jpem9udGFsKVtudW1iZXJdXG5leHBvcnQgdHlwZSBMOUNlbGxOYW1lID0gYCR7TDlWZXJ0aWNhbH06JHtMOUhvcml6b250YWx9YCB8IGAke0w5SG9yaXpvbnRhbH06JHtMOVZlcnRpY2FsfWBcbmV4cG9ydCB0eXBlIEw5UmFuZ2VOYW1lID0gTDlWZXJ0aWNhbCB8IEw5SG9yaXpvbnRhbCB8IEw5Q2VsbE5hbWUgfCBgJHtMOUNlbGxOYW1lfS0ke0w5Q2VsbE5hbWV9YFxuZXhwb3J0IHR5cGUgTDlPcmllbnQgPSBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIlxuXG5leHBvcnQgY29uc3QgTDlHcmlkVG9wTGVmdCA9IHsgcm93OiAxLCBjb2w6IDEgfVxuXG5leHBvcnQgY2xhc3MgTDlDZWxsIHtcbiAgICBzdGF0aWMgY29lcmNlKHZhbHVlOiBMOUNlbGxOYW1lKSB7XG4gICAgICAgIGNvbnN0IFt2MSwgdjJdID0gdmFsdWUuc3BsaXQoXCI6XCIpXG4gICAgICAgIGNvbnN0IHYgPSB2ZXJ0aWNhbC5pbmNsdWRlcyh2MSBhcyBhbnkpID8gdjEgOiB2MlxuICAgICAgICBjb25zdCBoID0gaG9yaXpvbnRhbC5pbmNsdWRlcyh2MSBhcyBhbnkpID8gdjEgOiB2MlxuXG4gICAgICAgIGlmICh2ID09PSBoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2VsbCB2YWx1ZTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBMOUNlbGwodiBhcyBhbnksIGggYXMgYW55KVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgdjogTDlWZXJ0aWNhbCxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGg6IEw5SG9yaXpvbnRhbFxuICAgICkge31cblxuICAgIGludG9HcmlkQXJlYShncmlkVG9wTGVmdDogdHlwZW9mIEw5R3JpZFRvcExlZnQgPSBMOUdyaWRUb3BMZWZ0KSB7XG4gICAgICAgIHJldHVybiBgJHtncmlkVG9wTGVmdC5yb3cgKyB2ZXJ0aWNhbC5pbmRleE9mKHRoaXMudil9LyR7Z3JpZFRvcExlZnQuY29sICsgaG9yaXpvbnRhbC5pbmRleE9mKHRoaXMuaCl9YFxuICAgIH1cblxuICAgIGlzRXEob3RoZXI6IEw5Q2VsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ID09PSBvdGhlci52ICYmIHRoaXMuaCA9PT0gb3RoZXIuaFxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEw5UmFuZ2Uge1xuICAgIHN0YXRpYyBjb2VyY2UodmFsdWU6IEw5UmFuZ2UgfCBMOVJhbmdlTmFtZSkge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBMOVJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTDlSYW5nZSh2YWx1ZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlYWRvbmx5IGNlbGxzOiBBcnJheTxMOUNlbGw+XG4gICAgcmVhZG9ubHkgb3JpZW50OiBMOU9yaWVudFxuXG4gICAgY29uc3RydWN0b3IocmFuZ2U6IEw5UmFuZ2VOYW1lKSB7XG4gICAgICAgIHRoaXMuY2VsbHMgPSBwYXJzZShyYW5nZSlcbiAgICAgICAgdGhpcy5vcmllbnQgPSB0aGlzLiNkZXRlcm1pbmVPcmllbnQoKVxuICAgIH1cblxuICAgIGlzRXEob3RoZXI6IEw5UmFuZ2UpIHtcbiAgICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgTDlSYW5nZSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZkZpcnN0ID0gdGhpcy5jZWxsc1swXVxuICAgICAgICAgICAgY29uc3Qgb3RoZXJGaXJzdCA9IG90aGVyLmNlbGxzWzBdXG5cbiAgICAgICAgICAgIGlmIChzZWxmRmlyc3QuaCAhPT0gb3RoZXJGaXJzdC5oIHx8IHNlbGZGaXJzdC52ICE9PSBvdGhlckZpcnN0LnYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VsZkxhc3QgPSB0aGlzLmNlbGxzW3RoaXMuY2VsbHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgIGNvbnN0IG90aGVyTGFzdCA9IG90aGVyLmNlbGxzW290aGVyLmNlbGxzLmxlbmd0aCAtIDFdXG5cbiAgICAgICAgICAgIGlmIChzZWxmTGFzdC5oID09PSBvdGhlckxhc3QuaCAmJiBzZWxmTGFzdC52ID09PSBvdGhlckxhc3Qudikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaW50b0dyaWRBcmVhKGdyaWRUb3BMZWZ0OiB0eXBlb2YgTDlHcmlkVG9wTGVmdCA9IEw5R3JpZFRvcExlZnQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNlbGxzWzBdXG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuY2VsbHNbdGhpcy5jZWxscy5sZW5ndGggLSAxXVxuICAgICAgICBjb25zdCBlbmRUb3BMZWZ0ID0geyByb3c6IGdyaWRUb3BMZWZ0LnJvdyArIDEsIGNvbDogZ3JpZFRvcExlZnQuY29sICsgMSB9XG4gICAgICAgIHJldHVybiBgJHtzdGFydC5pbnRvR3JpZEFyZWEoZ3JpZFRvcExlZnQpfS8ke2VuZC5pbnRvR3JpZEFyZWEoZW5kVG9wTGVmdCl9YFxuICAgIH1cblxuICAgIGludG9SZWN0KCk6IFJlY3Qge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuY2VsbHNbMF1cbiAgICAgICAgY29uc3QgZW5kID0gdGhpcy5jZWxsc1t0aGlzLmNlbGxzLmxlbmd0aCAtIDFdXG4gICAgICAgIGNvbnN0IHggPSBob3Jpem9udGFsLmluZGV4T2Yoc3RhcnQuaClcbiAgICAgICAgY29uc3QgeSA9IHZlcnRpY2FsLmluZGV4T2Yoc3RhcnQudilcblxuICAgICAgICByZXR1cm4geyB4LCB5LCB3aWR0aDogaG9yaXpvbnRhbC5pbmRleE9mKGVuZC5oKSAtIHggKyAxLCBoZWlnaHQ6IHZlcnRpY2FsLmluZGV4T2YoZW5kLnYpIC0geSArIDEgfVxuICAgIH1cblxuICAgICNkZXRlcm1pbmVPcmllbnQoKTogTDlPcmllbnQge1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5pbnRvUmVjdCgpXG4gICAgICAgIGlmIChyZWN0LndpZHRoID09PSByZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgLy8gY29ybmVyXG4gICAgICAgICAgICBpZiAocmVjdC54ID09PSByZWN0LnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ2ZXJ0aWNhbFwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZWN0LnggPT09IDAgfHwgcmVjdC54ID09PSAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidmVydGljYWxcIlxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZWN0LnkgPT09IDAgfHwgcmVjdC55ID09PSAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVjdC53aWR0aCA+IHJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gXCJob3Jpem9udGFsXCJcbiAgICAgICAgfSBlbHNlIGlmIChyZWN0LmhlaWdodCA+IHJlY3Qud2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBcInZlcnRpY2FsXCJcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBcInZlcnRpY2FsXCJcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlKHZhbHVlOiBhbnkpOiBBcnJheTxMOUNlbGw+IHtcbiAgICBjb25zdCBjZWxsczogQXJyYXk8TDlDZWxsPiA9IFtdXG5cbiAgICBpZiAodmVydGljYWwuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaCBvZiBob3Jpem9udGFsKSB7XG4gICAgICAgICAgICBjZWxscy5wdXNoKG5ldyBMOUNlbGwodmFsdWUsIGgpKVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChob3Jpem9udGFsLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmVydGljYWwpIHtcbiAgICAgICAgICAgIGNlbGxzLnB1c2gobmV3IEw5Q2VsbCh2LCB2YWx1ZSkpXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluY2x1ZGVzKFwiLVwiKSkge1xuICAgICAgICBjb25zdCBbYmVnaW4sIGVuZF0gPSB2YWx1ZS5zcGxpdChcIi1cIilcbiAgICAgICAgY29uc3QgYmVnaW5DZWxscyA9IHBhcnNlKGJlZ2luKVxuICAgICAgICBjb25zdCBlbmRDZWxscyA9IHBhcnNlKGVuZClcblxuICAgICAgICBpZiAoYmVnaW5DZWxscy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGJlZ2luIHJhbmdlIHZhbHVlOiAke2JlZ2lufWApXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW5kQ2VsbHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXJyZW50bHkgbm90IHN1cHBvcnRlZCBlbmQgcmFuZ2UgdmFsdWU6ICR7ZW5kfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHY6IGJ2LCBoOiBiaCB9ID0gYmVnaW5DZWxsc1swXVxuICAgICAgICBjb25zdCB7IHY6IGV2LCBoOiBlaCB9ID0gZW5kQ2VsbHNbMF1cblxuICAgICAgICBjb25zdCB2c3RhcnQgPSBNYXRoLm1pbih2ZXJ0aWNhbC5pbmRleE9mKGJ2IGFzIGFueSksIHZlcnRpY2FsLmluZGV4T2YoZXYgYXMgYW55KSlcbiAgICAgICAgY29uc3QgdmVuZCA9IE1hdGgubWF4KHZlcnRpY2FsLmluZGV4T2YoYnYgYXMgYW55KSwgdmVydGljYWwuaW5kZXhPZihldiBhcyBhbnkpKVxuICAgICAgICBjb25zdCBoc3RhcnQgPSBNYXRoLm1pbihob3Jpem9udGFsLmluZGV4T2YoYmggYXMgYW55KSwgaG9yaXpvbnRhbC5pbmRleE9mKGVoIGFzIGFueSkpXG4gICAgICAgIGNvbnN0IGhlbmQgPSBNYXRoLm1heChob3Jpem9udGFsLmluZGV4T2YoYmggYXMgYW55KSwgaG9yaXpvbnRhbC5pbmRleE9mKGVoIGFzIGFueSkpXG5cbiAgICAgICAgZm9yIChsZXQgdmkgPSB2c3RhcnQ7IHZpIDw9IHZlbmQ7IHZpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGhpID0gaHN0YXJ0OyBoaSA8PSBoZW5kOyBoaSsrKSB7XG4gICAgICAgICAgICAgICAgY2VsbHMucHVzaChuZXcgTDlDZWxsKHZlcnRpY2FsW3ZpXSwgaG9yaXpvbnRhbFtoaV0pKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICAgICAgY2VsbHMucHVzaChMOUNlbGwuY29lcmNlKHZhbHVlKSlcbiAgICB9XG5cbiAgICBpZiAoY2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IEVycm9yKGBVbmRlZmluZWQgbDljZWxsOiBcIiR7dmFsdWV9XCJgKVxuICAgIH1cblxuICAgIHJldHVybiBjZWxsc1xufVxuIl19