@mintplayer/ng-bootstrap 15.26.2 → 15.27.0
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/dock/src/dock-panel-header/dock-panel-header.component.d.ts +2 -0
- package/esm2020/dock/src/dock/dock.component.mjs +3 -2
- package/esm2020/dock/src/dock-panel-header/dock-panel-header.component.mjs +68 -61
- package/fesm2015/mintplayer-ng-bootstrap-dock.mjs +69 -61
- package/fesm2015/mintplayer-ng-bootstrap-dock.mjs.map +1 -1
- package/fesm2020/mintplayer-ng-bootstrap-dock.mjs +69 -61
- package/fesm2020/mintplayer-ng-bootstrap-dock.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -2,6 +2,7 @@ import { ElementRef } from '@angular/core';
|
|
|
2
2
|
import { BsDockPanelComponent } from '../dock-panel/dock-panel.component';
|
|
3
3
|
import { BsDockComponent } from '../dock/dock.component';
|
|
4
4
|
import { BsDockPane } from '../panes/dock-pane';
|
|
5
|
+
import { RemoveFromPaneResult } from '../interfaces/remove-from-pane-result';
|
|
5
6
|
import { DragOperation } from '../interfaces/drag-operation';
|
|
6
7
|
import { BsDockService } from '../services/dock/dock.service';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
@@ -17,6 +18,7 @@ export declare class BsDockPanelHeaderComponent {
|
|
|
17
18
|
onMouseDown(ev: MouseEvent): void;
|
|
18
19
|
onMouseMove(ev: MouseEvent): void;
|
|
19
20
|
removeFromPaneBis(host: BsDockPane, pane: BsDockPane): void;
|
|
21
|
+
removeFromPane(host: BsDockPane, panel: BsDockPanelComponent): RemoveFromPaneResult;
|
|
20
22
|
onMouseUp(ev: Event): void;
|
|
21
23
|
dBlock: boolean;
|
|
22
24
|
static ɵfac: i0.ɵɵFactoryDeclaration<BsDockPanelHeaderComponent, never>;
|
|
@@ -38,7 +38,8 @@ export class BsDockComponent {
|
|
|
38
38
|
const clone = deepClone(layout, true,
|
|
39
39
|
// []
|
|
40
40
|
[BsContentPane, BsDocumentHost, BsFloatingPane, BsSplitPane, BsTabGroupPane], true, this.paneCache);
|
|
41
|
-
this.paneCache = clone.cache;
|
|
41
|
+
// this.paneCache = clone.cache;
|
|
42
|
+
console.log('parentify', { layout, result: clone.result });
|
|
42
43
|
return clone.result;
|
|
43
44
|
}));
|
|
44
45
|
this.parentifiedLayout$.pipe(takeUntil(this.destroyed$)).subscribe(console.log);
|
|
@@ -89,4 +90,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
89
90
|
type: HostBinding,
|
|
90
91
|
args: ['style.right']
|
|
91
92
|
}] } });
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2RvY2svc3JjL2RvY2svZG9jay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2RvY2svc3JjL2RvY2svZG9jay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLGVBQWUsRUFBbUMsR0FBRyxFQUFjLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFN0csT0FBTyxFQUFlLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFRbEQsTUFBTSxPQUFPLGVBQWU7SUFDMUI7UUF5Q0EsZ0JBQWdCO1FBQ2hCLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBeUIsRUFBRSxDQUFDLENBQUM7UUFhMUQsWUFBWTtRQUVaLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBZ0MsRUFBRSxDQUFDLENBQUM7UUFNbkUscUJBQWdCLEdBQUcsSUFBSSxDQUFD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O3VCQUFDLHlCQUF5QjtnQkFPdEMsVUFBVTtzQkFKVCxXQUFXO3VCQUFDLFdBQVc7O3NCQUN2QixXQUFXO3VCQUFDLFlBQVk7O3NCQUN4QixXQUFXO3VCQUFDLGNBQWM7O3NCQUMxQixXQUFXO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgVmlld0NoaWxkcmVuLCBJbnB1dCwgT25EZXN0cm95LCBRdWVyeUxpc3QsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGNvbWJpbmVMYXRlc3RBbGwsIG1hcCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgUGFyZW50aWZpZWQsIGRlZXBDbG9uZSB9IGZyb20gJ0BtaW50cGxheWVyL3BhcmVudGlmeSc7XG5pbXBvcnQgeyBCc0RvY2tQYW5lbENvbXBvbmVudCB9IGZyb20gJy4uL2RvY2stcGFuZWwvZG9jay1wYW5lbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRVBhbmVUeXBlIH0gZnJvbSAnLi4vZW51bXMvcGFuZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgQnNEb2NrTGF5b3V0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9kb2NrLWxheW91dCc7XG5pbXBvcnQgeyBCc1RhYkdyb3VwUGFuZSB9IGZyb20gJy4uL3BhbmVzL3RhYi1ncm91cC1wYW5lJztcbmltcG9ydCB7IEJzRG9jdW1lbnRIb3N0IH0gZnJvbSAnLi4vcGFuZXMvZG9jdW1lbnQtaG9zdC1wYW5lJztcbmltcG9ydCB7IEJzQ29udGVudFBhbmUgfSBmcm9tICcuLi9wYW5lcy9jb250ZW50LXBhbmUnO1xuaW1wb3J0IHsgQnNGbG9hdGluZ1BhbmUgfSBmcm9tICcuLi9wYW5lcy9mbG9hdGluZy1wYW5lJztcbmltcG9ydCB7IEJzU3BsaXRQYW5lIH0gZnJvbSAnLi4vcGFuZXMvc3BsaXQtcGFuZSc7XG5pbXBvcnQgeyBCc0RvY2tQYW5lUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9kb2NrLXBhbmUtcmVuZGVyZXIvZG9jay1wYW5lLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JzLWRvY2snLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jay5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RvY2suY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBCc0RvY2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB0YWJzID0gbmV3IEJzVGFiR3JvdXBQYW5lKCk7XG4gICAgY29uc3QgZG9jSG9zdCA9IG5ldyBCc0RvY3VtZW50SG9zdCgpO1xuICAgIGRvY0hvc3Qucm9vdFBhbmUgPSB0YWJzO1xuXG4gICAgdGhpcy5sYXlvdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxCc0RvY2tMYXlvdXQ+KHtcbiAgICAgIHJvb3RQYW5lOiBkb2NIb3N0LFxuICAgICAgZmxvYXRpbmdQYW5lczogW11cbiAgICB9KTtcblxuICAgIC8vIGNvbWJpbmVMYXRlc3QoW3RoaXMubGF5b3V0JCwgdGhpcy5wYW5lbHMkXSlcbiAgICAvLyAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKVxuICAgIC8vICAgLnN1YnNjcmliZSgoW2xheW91dCwgcGFuZWxzXSkgPT4ge1xuICAgICAgICBcbiAgICAvLyAgIH0pXG5cbiAgICB0aGlzLmZsb2F0aW5nJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKVxuICAgICAgLnN1YnNjcmliZSgoZmxvYXRpbmcpID0+IHtcbiAgICAgICAgZmxvYXRpbmcuZm9yRWFjaCgocGFuZWwpID0+IHBhbmVsLm1vdmVUb092ZXJsYXkoKSk7XG4gICAgICB9KTtcbiAgICAgIFxuICAgIHRoaXMucGFyZW50aWZpZWRMYXlvdXQkID0gdGhpcy5sYXlvdXQkLnBpcGUobWFwKGxheW91dCA9PiB7XG4gICAgICBjb25zdCBjbG9uZSA9IGRlZXBDbG9uZShcbiAgICAgICAgbGF5b3V0LCB0cnVlLFxuICAgICAgICAvLyBbXVxuICAgICAgICBbQnNDb250ZW50UGFuZSwgQnNEb2N1bWVudEhvc3QsIEJzRmxvYXRpbmdQYW5lLCBCc1NwbGl0UGFuZSwgQnNUYWJHcm91cFBhbmVdLFxuICAgICAgICB0cnVlLFxuICAgICAgICB0aGlzLnBhbmVDYWNoZSk7XG5cbiAgICAgIC8vIHRoaXMucGFuZUNhY2hlID0gY2xvbmUuY2FjaGU7XG5cbiAgICAgIGNvbnNvbGUubG9nKCdwYXJlbnRpZnknLCB7IGxheW91dCwgcmVzdWx0OiBjbG9uZS5yZXN1bHQgfSk7XG5cbiAgICAgIHJldHVybiBjbG9uZS5yZXN1bHQ7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5wYXJlbnRpZmllZExheW91dCQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKGNvbnNvbGUubG9nKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFuZUNhY2hlPzogTWFwPGFueSwgYW55PjtcblxuICAvLyNyZWdpb24gUGFuZWxzXG4gIHBhbmVscyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJzRG9ja1BhbmVsQ29tcG9uZW50W10+KFtdKTtcbiAgQENvbnRlbnRDaGlsZHJlbihCc0RvY2tQYW5lbENvbXBvbmVudCkgc2V0IHBhbmVscyh2YWx1ZTogUXVlcnlMaXN0PEJzRG9ja1BhbmVsQ29tcG9uZW50Pikge1xuICAgIHRoaXMucGFuZWxzJC5uZXh0KHZhbHVlLnRvQXJyYXkoKSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG4gIC8vI3JlZ2lvbiBMYXlvdXRcbiAgbGF5b3V0JDogQmVoYXZpb3JTdWJqZWN0PEJzRG9ja0xheW91dD47XG4gIHB1YmxpYyBnZXQgbGF5b3V0KCkge1xuICAgIHJldHVybiB0aGlzLmxheW91dCQudmFsdWU7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCBsYXlvdXQodmFsdWU6IEJzRG9ja0xheW91dCkge1xuICAgIHRoaXMubGF5b3V0JC5uZXh0KHZhbHVlKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICBmbG9hdGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJzRG9ja1BhbmVSZW5kZXJlckNvbXBvbmVudFtdPihbXSk7XG4gIEBWaWV3Q2hpbGRyZW4oJ2Zsb2F0aW5nJykgc2V0IGZsb2F0aW5nUGFuZXModmFsdWU6IFF1ZXJ5TGlzdDxCc0RvY2tQYW5lUmVuZGVyZXJDb21wb25lbnQ+KSB7XG4gICAgdGhpcy5mbG9hdGluZyQubmV4dCh2YWx1ZS50b0FycmF5KCkpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wb3NpdGlvbi1hYnNvbHV0ZScpXG4gIHBvc2l0aW9uQWJzb2x1dGUgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUudG9wJylcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5sZWZ0JylcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5ib3R0b20nKVxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLnJpZ2h0JylcbiAgcG9zaXRpb25QeCA9IDA7XG5cbiAgcGFyZW50aWZpZWRMYXlvdXQkOiBPYnNlcnZhYmxlPFBhcmVudGlmaWVkPEJzRG9ja0xheW91dD4+O1xuXG4gIGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdCgpO1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmZsb2F0aW5nJC52YWx1ZS5mb3JFYWNoKHBhbmVsID0+IHBhbmVsLmRpc3Bvc2VPdmVybGF5KCkpO1xuICB9XG59XG4iLCI8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48bmctY29udGFpbmVyICpuZ0lmPVwiKGxheW91dCQgfCBhc3luYykgYXMgbGF5b3V0XCI+XG4gICAgPGJzLWRvY2stcGFuZS1yZW5kZXJlciBbbGF5b3V0XT1cImxheW91dC5yb290UGFuZVwiPjwvYnMtZG9jay1wYW5lLXJlbmRlcmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFuZSBvZiBsYXlvdXQuZmxvYXRpbmdQYW5lc1wiPlxuICAgICAgICA8YnMtZG9jay1wYW5lLXJlbmRlcmVyICNmbG9hdGluZyAqbmdJZj1cInBhbmUucGFuZVwiIFtsYXlvdXRdPVwicGFuZVwiPjwvYnMtZG9jay1wYW5lLXJlbmRlcmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG48IS0tIDxicy1zcGxpdHRlcj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgKHBhbmVscyQgfCBhc3luYylcIj5cbiAgICAgICAgPGJzLXNwbGl0LXBhbmVsPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtjZGtQb3J0YWxPdXRsZXRdPVwicGFuZWwucG9ydGFsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9icy1zcGxpdC1wYW5lbD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvYnMtc3BsaXR0ZXI+IC0tPlxuIl19
|
|
@@ -30,10 +30,10 @@ export class BsDockPanelHeaderComponent {
|
|
|
30
30
|
if (this.isMouseDown) {
|
|
31
31
|
if (!this.isDragging) {
|
|
32
32
|
this.isDragging = true;
|
|
33
|
-
this.dock.parentifiedLayout$.pipe(take(1)).subscribe((
|
|
33
|
+
this.dock.parentifiedLayout$.pipe(take(1)).subscribe((parentifiedLayout) => {
|
|
34
34
|
// this.dock.layout$.pipe(take(1)).subscribe((layout) => {
|
|
35
|
-
const traces = this.dockService.buildTraces(
|
|
36
|
-
console.log('traces', {
|
|
35
|
+
const traces = this.dockService.buildTraces(parentifiedLayout);
|
|
36
|
+
console.log('traces', { parentifiedLayout, traces });
|
|
37
37
|
const matching = traces.filter(t => {
|
|
38
38
|
const lastPane = t.trace[t.trace.length - 1];
|
|
39
39
|
// return (lastPane instanceof BsContentPane) && (lastPane.dockPanel === this.dockPanel);
|
|
@@ -63,7 +63,7 @@ export class BsDockPanelHeaderComponent {
|
|
|
63
63
|
};
|
|
64
64
|
// this.dockPanel.headerPortal?.isAttached && this.dockPanel.headerPortal?.detach();
|
|
65
65
|
// this.dockPanel.contentPortal?.isAttached && this.dockPanel.contentPortal?.detach();
|
|
66
|
-
|
|
66
|
+
this.removeFromPane(parentifiedLayout.$original.rootPane, this.dockPanel);
|
|
67
67
|
const trace = [...matching[0].trace];
|
|
68
68
|
this.dockPanel.headerPortal?.isAttached && this.dockPanel.headerPortal?.detach();
|
|
69
69
|
this.dockPanel.contentPortal?.isAttached && this.dockPanel.contentPortal?.detach();
|
|
@@ -74,9 +74,9 @@ export class BsDockPanelHeaderComponent {
|
|
|
74
74
|
break;
|
|
75
75
|
}
|
|
76
76
|
else {
|
|
77
|
-
const floatingIndex =
|
|
77
|
+
const floatingIndex = parentifiedLayout.floatingPanes.indexOf(trace[0]);
|
|
78
78
|
if (trace[0].isEmpty && (floatingIndex > -1)) {
|
|
79
|
-
|
|
79
|
+
parentifiedLayout.$original.floatingPanes.splice(floatingIndex, 1);
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
}
|
|
@@ -103,8 +103,9 @@ export class BsDockPanelHeaderComponent {
|
|
|
103
103
|
offsetY: ev.offsetY,
|
|
104
104
|
floatingPane
|
|
105
105
|
};
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
parentifiedLayout.$original.floatingPanes.push(floatingPane);
|
|
107
|
+
// debugger;
|
|
108
|
+
setTimeout(() => this.dock.layout$.next(parentifiedLayout.$original), 5);
|
|
108
109
|
// console.log('traces', { traces, matching, dockPanel: this.dockPanel, equals: traces[2].trace[3] });
|
|
109
110
|
// let element: HTMLElement | null = this.element.nativeElement;
|
|
110
111
|
// let tree: HTMLElement[] = [];
|
|
@@ -191,58 +192,64 @@ export class BsDockPanelHeaderComponent {
|
|
|
191
192
|
throw 'Unknown pane type';
|
|
192
193
|
}
|
|
193
194
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
195
|
+
removeFromPane(host, panel /*, parents: BsDockPane[] */) {
|
|
196
|
+
if (host instanceof BsContentPane) {
|
|
197
|
+
return { paneRemoved: false, hostIsEmpty: false };
|
|
198
|
+
}
|
|
199
|
+
else if (host instanceof BsDocumentHost) {
|
|
200
|
+
// Actually documentHost should never be removed
|
|
201
|
+
if (!host.rootPane) {
|
|
202
|
+
return { paneRemoved: false, hostIsEmpty: true };
|
|
203
|
+
}
|
|
204
|
+
const result = this.removeFromPane(host.rootPane, panel);
|
|
205
|
+
return { paneRemoved: result.paneRemoved, hostIsEmpty: result.hostIsEmpty };
|
|
206
|
+
}
|
|
207
|
+
else if (host instanceof BsTabGroupPane) {
|
|
208
|
+
const matching = host.panes.filter(p => p.dockPanel === panel);
|
|
209
|
+
if (matching.length > 0) {
|
|
210
|
+
host.panes.splice(host.panes.findIndex(p => p.dockPanel === panel), 1);
|
|
211
|
+
return { paneRemoved: true, hostIsEmpty: host.panes.length === 0 };
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
// ATM. all panes are ContentPanes anyway.
|
|
215
|
+
// So unless you'd want to have splitters inside the tabs,
|
|
216
|
+
// This code will not be hit.
|
|
217
|
+
// const result = host.panes
|
|
218
|
+
// .map(parentPane => this.removeFromPane(parentPane, panel))
|
|
219
|
+
// .filter(r => r.paneRemoved);
|
|
220
|
+
//
|
|
221
|
+
// if (result.length > 0) {
|
|
222
|
+
// return { paneRemoved: true, hostIsEmpty: }
|
|
223
|
+
// }
|
|
224
|
+
return { paneRemoved: false, hostIsEmpty: host.panes.length === 0 };
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
else if (host instanceof BsSplitPane) {
|
|
228
|
+
const matching = host.panes
|
|
229
|
+
.filter(p => p instanceof BsContentPane)
|
|
230
|
+
.map(p => p)
|
|
231
|
+
.filter(p => p.dockPanel === panel);
|
|
232
|
+
if (matching.length > 0) {
|
|
233
|
+
host.panes.splice(host.panes.findIndex(p => (p instanceof BsContentPane) && matching.includes(p)), 1);
|
|
234
|
+
// TODO: Remove splitter if only 1 pane left?
|
|
235
|
+
return { paneRemoved: true, hostIsEmpty: host.panes.length === 0 };
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
for (let splitPane of host.panes) {
|
|
239
|
+
const result = this.removeFromPane(splitPane, panel);
|
|
240
|
+
if (result.paneRemoved && result.hostIsEmpty) {
|
|
241
|
+
// splitPane is empty now, so we can remove it from this splitter
|
|
242
|
+
host.panes.splice(host.panes.indexOf(splitPane), 1);
|
|
243
|
+
return { paneRemoved: true, hostIsEmpty: host.panes.length === 0 };
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return { paneRemoved: false, hostIsEmpty: host.panes.length === 0 };
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
throw 'unknown host type';
|
|
251
|
+
}
|
|
252
|
+
}
|
|
246
253
|
onMouseUp(ev) {
|
|
247
254
|
this.isMouseDown = false;
|
|
248
255
|
this.isDragging = false;
|
|
@@ -267,4 +274,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
267
274
|
type: HostBinding,
|
|
268
275
|
args: ['class.d-block']
|
|
269
276
|
}] } });
|
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1wYW5lbC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9kb2NrL3NyYy9kb2NrLXBhbmVsLWhlYWRlci9kb2NrLXBhbmVsLWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2RvY2svc3JjL2RvY2stcGFuZWwtaGVhZGVyL2RvY2stcGFuZWwtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQWdDLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7OztBQU85RCxNQUFNLE9BQU8sMEJBQTBCO0lBQ3JDLFlBQW9CLFNBQStCLEVBQVUsSUFBcUIsRUFBVSxXQUEwQixFQUFVLE9BQWdDO1FBQTVJLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBRWhLLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFvUVcsV0FBTSxHQUFHLElBQUksQ0FBQztJQXhRdUgsQ0FBQztJQUs3SCxXQUFXLENBQUMsRUFBYztRQUMvRCxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUUrQyxXQUFXLENBQUMsRUFBYztRQUN4RSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUV2QixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDaEUsMERBQTBEO29CQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztvQkFDeEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDakMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDN0MseUZBQXlGO3dCQUN6RixPQUFPLENBQUMsUUFBUSxZQUFZLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3hGLENBQUMsQ0FBQyxDQUFDO29CQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUNsQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO3dCQUN6QixPQUFPO3FCQUNSO29CQUVELGlGQUFpRjtvQkFDakYsOENBQThDO29CQUM5QyxpREFBaUQ7b0JBRWpELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO29CQUM5QyxHQUFHO3dCQUNELElBQUksWUFBWSxDQUFDLGFBQWEsRUFBRTs0QkFDOUIsWUFBWSxHQUFHLFlBQWEsQ0FBQyxhQUFhLENBQUM7eUJBQzVDOzZCQUFNOzRCQUNMLE1BQU0saUJBQWlCLENBQUM7eUJBQ3pCO3FCQUNGLFFBQVEsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxnQkFBZ0IsRUFBRTtvQkFFbEUsTUFBTSxNQUFNLEdBQUc7d0JBQ2IsS0FBSyxFQUFFLFlBQVksQ0FBQyxXQUFXO3dCQUMvQixNQUFNLEVBQUUsWUFBWSxDQUFDLFlBQVk7d0JBQ2pDLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPO3dCQUM3QixHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTztxQkFDN0IsQ0FBQztvQkFFRixvRkFBb0Y7b0JBQ3BGLHNGQUFzRjtvQkFDdEYsd0RBQXdEO29CQUV4RCxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUVyQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUM7b0JBQ2pGLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQztvQkFHbkYsS0FBSyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO3dCQUN0RCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7NEJBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7NEJBQ3ZELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU87Z0NBQUUsTUFBTTt5QkFDdEM7NkJBQU07NEJBQ0wsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQzdELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUM1QyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7NkJBQy9DO3lCQUNGO3FCQUNGO29CQUlELGlGQUFpRjtvQkFFakYsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQUM7d0JBQ3RDLElBQUksRUFBRSxJQUFJLGNBQWMsQ0FBQzs0QkFDdkIsS0FBSyxFQUFFO2dDQUNMLElBQUksYUFBYSxDQUFDO29DQUNoQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7aUNBQzFCLENBQUM7NkJBQ0g7eUJBQ0YsQ0FBQzt3QkFDRixJQUFJLEVBQUU7NEJBQ0osS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLOzRCQUNuQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07eUJBQ3RCO3dCQUNELFFBQVEsRUFBRTs0QkFDUixDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUk7NEJBQ2QsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHO3lCQUNkO3FCQUNGLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsYUFBYSxHQUFHO3dCQUNuQixPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU87d0JBQ25CLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTzt3QkFDbkIsWUFBWTtxQkFDYixDQUFDO29CQUNGLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUN4QyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNwRCxzR0FBc0c7b0JBRXRHLG9FQUFvRTtvQkFDcEUsb0NBQW9DO29CQUNwQyxXQUFXO29CQUNYLDZCQUE2QjtvQkFDN0IsMENBQTBDO29CQUMxQyx5QkFBeUI7b0JBRXpCLDRGQUE0RjtvQkFDNUYsb0NBQW9DO29CQUNwQyx5QkFBeUI7b0JBQ3pCLDZDQUE2QztvQkFDN0MsK0NBQStDO29CQUMvQyx5Q0FBeUM7b0JBQ3pDLHdDQUF3QztvQkFDeEMsV0FBVztvQkFFWCwwRkFBMEY7b0JBQzFGLDRGQUE0RjtvQkFDNUYsOERBQThEO29CQUU5RCxrREFBa0Q7b0JBQ2xELHFDQUFxQztvQkFDckMscUJBQXFCO29CQUNyQixrQ0FBa0M7b0JBQ2xDLDBDQUEwQztvQkFDMUMsaUJBQWlCO29CQUNqQixjQUFjO29CQUNkLGNBQWM7b0JBQ2Qsa0JBQWtCO29CQUNsQixpQ0FBaUM7b0JBQ2pDLG1DQUFtQztvQkFDbkMsYUFBYTtvQkFDYixzQkFBc0I7b0JBQ3RCLDRCQUE0QjtvQkFDNUIsMkJBQTJCO29CQUMzQixZQUFZO29CQUNaLFlBQVk7b0JBRVosK0JBQStCO29CQUMvQiwrQkFBK0I7b0JBQy9CLCtCQUErQjtvQkFDL0IsdUJBQXVCO29CQUN2QixXQUFXO29CQUVYLGlEQUFpRDtvQkFDakQsd0NBQXdDO29CQUN4QyxRQUFRO2dCQUNWLENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUN0QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRTt3QkFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO3dCQUNyRixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7cUJBQ3RGO29CQUNMLGFBQWE7b0JBQ2IscUVBQXFFO29CQUNyRSxxREFBcUQ7b0JBQ3JELDBEQUEwRDtvQkFDMUQsdUZBQXVGO29CQUN2RixVQUFVO29CQUVWLDBEQUEwRDtvQkFDMUQsZ0NBQWdDO29CQUVoQyxXQUFXO2lCQUNSO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFnQixFQUFFLElBQWdCO1FBQ2xELElBQUksSUFBSSxZQUFZLGFBQWEsRUFBRTtTQUNsQzthQUFNLElBQUksSUFBSSxZQUFZLGNBQWMsRUFBRTtZQUN6QyxnREFBZ0Q7U0FDakQ7YUFBTSxJQUFJLElBQUksWUFBWSxjQUFjLEVBQUU7WUFDekMsSUFBSSxJQUFJLFlBQVksYUFBYSxFQUFFO2dCQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzdCO1NBQ0Y7YUFBTSxJQUFJLElBQUksWUFBWSxXQUFXLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzdCO2FBQU0sSUFBSSxJQUFJLFlBQVksY0FBYyxFQUFFO1NBQzFDO2FBQU07WUFDTCxNQUFNLG1CQUFtQixDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVELHFIQUFxSDtJQUNySCx5Q0FBeUM7SUFDekMseURBQXlEO0lBQ3pELGlEQUFpRDtJQUNqRCx1REFBdUQ7SUFFdkQsNEJBQTRCO0lBQzVCLDBEQUEwRDtJQUMxRCxRQUFRO0lBRVIsZ0VBQWdFO0lBQ2hFLG1GQUFtRjtJQUVuRixpREFBaUQ7SUFJakQsc0VBQXNFO0lBQ3RFLGlDQUFpQztJQUNqQyxnRkFBZ0Y7SUFDaEYsNEVBQTRFO0lBQzVFLGVBQWU7SUFDZixtREFBbUQ7SUFDbkQsbUVBQW1FO0lBQ25FLHNDQUFzQztJQUV0QyxxQ0FBcUM7SUFDckMsd0VBQXdFO0lBQ3hFLDBDQUEwQztJQUMxQyxXQUFXO0lBQ1gsb0NBQW9DO0lBQ3BDLHdEQUF3RDtJQUN4RCxhQUFhO0lBQ2IsNkVBQTZFO0lBQzdFLFFBQVE7SUFLUiw4Q0FBOEM7SUFDOUMsa0NBQWtDO0lBQ2xDLGlEQUFpRDtJQUNqRCxvQ0FBb0M7SUFDcEMsNkNBQTZDO0lBRTdDLGlDQUFpQztJQUNqQywrR0FBK0c7SUFFL0csc0RBQXNEO0lBQ3RELDRFQUE0RTtJQUM1RSxlQUFlO0lBR2YsNENBQTRDO0lBQzVDLGdFQUFnRTtJQUNoRSwwREFBMEQ7SUFDMUQsOEVBQThFO0lBQzlFLGlFQUFpRTtJQUNqRSxnRkFBZ0Y7SUFDaEYsWUFBWTtJQUNaLFVBQVU7SUFDVixRQUFRO0lBRVIsMkVBQTJFO0lBQzNFLGFBQWE7SUFDYixpQ0FBaUM7SUFDakMsTUFBTTtJQUNOLElBQUk7SUFFMEMsU0FBUyxDQUFDLEVBQVM7UUFDL0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7SUFDakMsQ0FBQzs7dUhBdlFVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLCtQQ3JCdkMsMkJBQXlCOzJGRHFCWiwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0Usc0JBQXNCOzhMQVVPLFdBQVc7c0JBQWpELFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUtXLFdBQVc7c0JBQTFELFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBd1BBLFNBQVM7c0JBQXRELFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTWQsTUFBTTtzQkFBbkMsV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9wdGlvbmFsLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCc1RhYkNvbnRyb2xDb21wb25lbnQgfSBmcm9tICdAbWludHBsYXllci9uZy1ib290c3RyYXAvdGFiLWNvbnRyb2wnO1xuaW1wb3J0IHsgUGFyZW50aWZpZWQgfSBmcm9tICdAbWludHBsYXllci9wYXJlbnRpZnknO1xuaW1wb3J0IHsgQnNEb2NrUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi9kb2NrLXBhbmVsL2RvY2stcGFuZWwuY29tcG9uZW50JztcbmltcG9ydCB7IEJzRG9ja0NvbXBvbmVudCB9IGZyb20gJy4uL2RvY2svZG9jay5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnNEb2NrUGFuZSB9IGZyb20gJy4uL3BhbmVzL2RvY2stcGFuZSc7XG5pbXBvcnQgeyBCc1NwbGl0UGFuZSB9IGZyb20gJy4uL3BhbmVzL3NwbGl0LXBhbmUnO1xuaW1wb3J0IHsgQnNDb250ZW50UGFuZSB9IGZyb20gJy4uL3BhbmVzL2NvbnRlbnQtcGFuZSc7XG5pbXBvcnQgeyBCc0Zsb2F0aW5nUGFuZSB9IGZyb20gJy4uL3BhbmVzL2Zsb2F0aW5nLXBhbmUnO1xuaW1wb3J0IHsgQnNUYWJHcm91cFBhbmUgfSBmcm9tICcuLi9wYW5lcy90YWItZ3JvdXAtcGFuZSc7XG5pbXBvcnQgeyBCc0RvY3VtZW50SG9zdCB9IGZyb20gJy4uL3BhbmVzL2RvY3VtZW50LWhvc3QtcGFuZSc7XG5pbXBvcnQgeyBSZW1vdmVGcm9tUGFuZVJlc3VsdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVtb3ZlLWZyb20tcGFuZS1yZXN1bHQnO1xuaW1wb3J0IHsgRHJhZ09wZXJhdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvZHJhZy1vcGVyYXRpb24nO1xuaW1wb3J0IHsgQnNEb2NrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RvY2svZG9jay5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnMtZG9jay1wYW5lbC1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jay1wYW5lbC1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2NrLXBhbmVsLWhlYWRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEJzRG9ja1BhbmVsSGVhZGVyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkb2NrUGFuZWw6IEJzRG9ja1BhbmVsQ29tcG9uZW50LCBwcml2YXRlIGRvY2s6IEJzRG9ja0NvbXBvbmVudCwgcHJpdmF0ZSBkb2NrU2VydmljZTogQnNEb2NrU2VydmljZSwgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge31cblxuICBpc01vdXNlRG93biA9IGZhbHNlO1xuICBkcmFnT3BlcmF0aW9uPzogRHJhZ09wZXJhdGlvbjtcbiAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKSBvbk1vdXNlRG93bihldjogTW91c2VFdmVudCkge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc01vdXNlRG93biA9IHRydWU7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZW1vdmUnLCBbJyRldmVudCddKSBvbk1vdXNlTW92ZShldjogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmlzTW91c2VEb3duKSB7XG4gICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgIFxuICAgICAgICB0aGlzLmRvY2sucGFyZW50aWZpZWRMYXlvdXQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChsYXlvdXQpID0+IHtcbiAgICAgICAgLy8gdGhpcy5kb2NrLmxheW91dCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGxheW91dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRyYWNlcyA9IHRoaXMuZG9ja1NlcnZpY2UuYnVpbGRUcmFjZXMobGF5b3V0KTtcbiAgICAgICAgICBjb25zb2xlLmxvZygndHJhY2VzJywge2xheW91dCwgdHJhY2VzfSk7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmcgPSB0cmFjZXMuZmlsdGVyKHQgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFzdFBhbmUgPSB0LnRyYWNlW3QudHJhY2UubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAvLyByZXR1cm4gKGxhc3RQYW5lIGluc3RhbmNlb2YgQnNDb250ZW50UGFuZSkgJiYgKGxhc3RQYW5lLmRvY2tQYW5lbCA9PT0gdGhpcy5kb2NrUGFuZWwpO1xuICAgICAgICAgICAgcmV0dXJuIChsYXN0UGFuZSBpbnN0YW5jZW9mIEJzQ29udGVudFBhbmUpICYmIChsYXN0UGFuZS5kb2NrUGFuZWwgPT09IHRoaXMuZG9ja1BhbmVsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbWF0Y2hpbmcnLCBtYXRjaGluZyk7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNvbnN0IHRhYnMgPSBtYXRjaGluZ1swXS50cmFjZS5maWx0ZXIocGFuZSA9PiBwYW5lIGluc3RhbmNlb2YgQnNUYWJHcm91cFBhbmUpO1xuICAgICAgICAgIC8vIGNvbnN0IGxhc3RUYWJHcm91cCA9IHRhYnNbdGFicy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAvLyAvLyBjb25zb2xlLmxvZygnbGFzdCB0YWJncm91cCcsIGxhc3RUYWJHcm91cCk7XG5cbiAgICAgICAgICBsZXQgdGFiQ29udHJvbEVsID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKHRhYkNvbnRyb2xFbC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgIHRhYkNvbnRyb2xFbCA9IHRhYkNvbnRyb2xFbCEucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93ICdObyBtb3JlIHBhcmVudHMnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gd2hpbGUgKHRhYkNvbnRyb2xFbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdCUy1UQUItQ09OVFJPTCcpO1xuXG4gICAgICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICAgICAgd2lkdGg6IHRhYkNvbnRyb2xFbC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGFiQ29udHJvbEVsLmNsaWVudEhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGV2LmNsaWVudFggLSBldi5vZmZzZXRYLFxuICAgICAgICAgICAgdG9wOiBldi5jbGllbnRZIC0gZXYub2Zmc2V0WSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gdGhpcy5kb2NrUGFuZWwuaGVhZGVyUG9ydGFsPy5pc0F0dGFjaGVkICYmIHRoaXMuZG9ja1BhbmVsLmhlYWRlclBvcnRhbD8uZGV0YWNoKCk7XG4gICAgICAgICAgLy8gdGhpcy5kb2NrUGFuZWwuY29udGVudFBvcnRhbD8uaXNBdHRhY2hlZCAmJiB0aGlzLmRvY2tQYW5lbC5jb250ZW50UG9ydGFsPy5kZXRhY2goKTtcbiAgICAgICAgICAvLyB0aGlzLnJlbW92ZUZyb21QYW5lKGxheW91dC5yb290UGFuZSwgdGhpcy5kb2NrUGFuZWwpO1xuXG4gICAgICAgICAgY29uc3QgdHJhY2UgPSBbLi4ubWF0Y2hpbmdbMF0udHJhY2VdO1xuXG4gICAgICAgICAgdGhpcy5kb2NrUGFuZWwuaGVhZGVyUG9ydGFsPy5pc0F0dGFjaGVkICYmIHRoaXMuZG9ja1BhbmVsLmhlYWRlclBvcnRhbD8uZGV0YWNoKCk7XG4gICAgICAgICAgdGhpcy5kb2NrUGFuZWwuY29udGVudFBvcnRhbD8uaXNBdHRhY2hlZCAmJiB0aGlzLmRvY2tQYW5lbC5jb250ZW50UG9ydGFsPy5kZXRhY2goKTtcbiAgICAgICAgICBcbiAgICAgICAgICBcbiAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IHRyYWNlLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tUGFuZUJpcyh0cmFjZVtpbmRleCAtIDFdLCB0cmFjZVtpbmRleF0pO1xuICAgICAgICAgICAgICBpZiAoIXRyYWNlW2luZGV4IC0gMV0uaXNFbXB0eSkgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBmbG9hdGluZ0luZGV4ID0gbGF5b3V0LmZsb2F0aW5nUGFuZXMuaW5kZXhPZih0cmFjZVswXSk7XG4gICAgICAgICAgICAgIGlmICh0cmFjZVswXS5pc0VtcHR5ICYmIChmbG9hdGluZ0luZGV4ID4gLTEpKSB7XG4gICAgICAgICAgICAgICAgbGF5b3V0LmZsb2F0aW5nUGFuZXMuc3BsaWNlKGZsb2F0aW5nSW5kZXgsIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG5cblxuICAgICAgICAgIC8vIHRoaXMucmVtb3ZlRnJvbVBhbmUoKDxhbnk+bWF0Y2hpbmdbMF0udHJhY2VbMF0pWyckb3JpZ2luYWwnXSwgdGhpcy5kb2NrUGFuZWwpO1xuXG4gICAgICAgICAgY29uc3QgZmxvYXRpbmdQYW5lID0gbmV3IEJzRmxvYXRpbmdQYW5lKHtcbiAgICAgICAgICAgIHBhbmU6IG5ldyBCc1RhYkdyb3VwUGFuZSh7XG4gICAgICAgICAgICAgIHBhbmVzOiBbXG4gICAgICAgICAgICAgICAgbmV3IEJzQ29udGVudFBhbmUoe1xuICAgICAgICAgICAgICAgICAgZG9ja1BhbmVsOiB0aGlzLmRvY2tQYW5lbFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2l6ZToge1xuICAgICAgICAgICAgICB3aWR0aDogY29vcmRzLndpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGNvb3Jkcy5oZWlnaHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgICAgICAgeDogY29vcmRzLmxlZnQsXG4gICAgICAgICAgICAgIHk6IGNvb3Jkcy50b3AsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5kcmFnT3BlcmF0aW9uID0ge1xuICAgICAgICAgICAgb2Zmc2V0WDogZXYub2Zmc2V0WCxcbiAgICAgICAgICAgIG9mZnNldFk6IGV2Lm9mZnNldFksXG4gICAgICAgICAgICBmbG9hdGluZ1BhbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGxheW91dC5mbG9hdGluZ1BhbmVzLnB1c2goZmxvYXRpbmdQYW5lKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZG9jay5sYXlvdXQkLm5leHQobGF5b3V0KSwgNSk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RyYWNlcycsIHsgdHJhY2VzLCBtYXRjaGluZywgZG9ja1BhbmVsOiB0aGlzLmRvY2tQYW5lbCwgZXF1YWxzOiB0cmFjZXNbMl0udHJhY2VbM10gfSk7XG5cbiAgICAgICAgICAvLyAgICAgbGV0IGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIC8vICAgICBsZXQgdHJlZTogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgICAgICAgIC8vICAgICBkbyB7XG4gICAgICAgICAgLy8gICAgICAgdHJlZS5wdXNoKGVsZW1lbnQhKTtcbiAgICAgICAgICAvLyAgICAgICBlbGVtZW50ID0gZWxlbWVudCEucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAvLyAgICAgfSB3aGlsZSAoZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyAgICAgY29uc3QgdGFiQ29udHJvbHMgPSB0cmVlLmZpbHRlcihlbCA9PiBlbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdCUy1UQUItQ09OVFJPTCcpO1xuICAgICAgICAgIC8vICAgICBpZiAodGFiQ29udHJvbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vICAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgICAvLyAgICAgICAgIHdpZHRoOiB0YWJDb250cm9sc1swXS5jbGllbnRXaWR0aCxcbiAgICAgICAgICAvLyAgICAgICAgIGhlaWdodDogdGFiQ29udHJvbHNbMF0uY2xpZW50SGVpZ2h0LFxuICAgICAgICAgIC8vICAgICAgICAgbGVmdDogZXYuY2xpZW50WCAtIGV2Lm9mZnNldFgsXG4gICAgICAgICAgLy8gICAgICAgICB0b3A6IGV2LmNsaWVudFkgLSBldi5vZmZzZXRZLFxuICAgICAgICAgIC8vICAgICAgIH07XG5cbiAgICAgICAgICAvLyAgICAgICB0aGlzLmRvY2tQYW5lbC5oZWFkZXJQb3J0YWw/LmlzQXR0YWNoZWQgJiYgdGhpcy5kb2NrUGFuZWwuaGVhZGVyUG9ydGFsPy5kZXRhY2goKTtcbiAgICAgICAgICAvLyAgICAgICB0aGlzLmRvY2tQYW5lbC5jb250ZW50UG9ydGFsPy5pc0F0dGFjaGVkICYmIHRoaXMuZG9ja1BhbmVsLmNvbnRlbnRQb3J0YWw/LmRldGFjaCgpO1xuICAgICAgICAgIC8vICAgICAgIHRoaXMucmVtb3ZlRnJvbVBhbmUobGF5b3V0LnJvb3RQYW5lLCB0aGlzLmRvY2tQYW5lbCk7XG5cbiAgICAgICAgICAvLyAgICAgICBjb25zdCBmbG9hdGluZ1BhbmUgPSBuZXcgQnNGbG9hdGluZ1BhbmUoe1xuICAgICAgICAgIC8vICAgICAgICAgcGFuZTogbmV3IEJzVGFiR3JvdXBQYW5lKHtcbiAgICAgICAgICAvLyAgICAgICAgICAgcGFuZXM6IFtcbiAgICAgICAgICAvLyAgICAgICAgICAgICBuZXcgQnNDb250ZW50UGFuZSh7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICBkb2NrUGFuZWw6IHRoaXMuZG9ja1BhbmVsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgfSlcbiAgICAgICAgICAvLyAgICAgICAgICAgXVxuICAgICAgICAgIC8vICAgICAgICAgfSksXG4gICAgICAgICAgLy8gICAgICAgICBzaXplOiB7XG4gICAgICAgICAgLy8gICAgICAgICAgIHdpZHRoOiBjb29yZHMud2lkdGgsXG4gICAgICAgICAgLy8gICAgICAgICAgIGhlaWdodDogY29vcmRzLmhlaWdodCxcbiAgICAgICAgICAvLyAgICAgICAgIH0sXG4gICAgICAgICAgLy8gICAgICAgICBsb2NhdGlvbjoge1xuICAgICAgICAgIC8vICAgICAgICAgICB4OiBjb29yZHMubGVmdCxcbiAgICAgICAgICAvLyAgICAgICAgICAgeTogY29vcmRzLnRvcCxcbiAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAvLyAgICAgICB0aGlzLmRyYWdPcGVyYXRpb24gPSB7XG4gICAgICAgICAgLy8gICAgICAgICBvZmZzZXRYOiBldi5vZmZzZXRYLFxuICAgICAgICAgIC8vICAgICAgICAgb2Zmc2V0WTogZXYub2Zmc2V0WSxcbiAgICAgICAgICAvLyAgICAgICAgIGZsb2F0aW5nUGFuZVxuICAgICAgICAgIC8vICAgICAgIH07XG5cbiAgICAgICAgICAvLyAgICAgICBsYXlvdXQuZmxvYXRpbmdQYW5lcy5wdXNoKGZsb2F0aW5nUGFuZSk7XG4gICAgICAgICAgLy8gICAgICAgdGhpcy5kb2NrLmxheW91dCQubmV4dChsYXlvdXQpO1xuICAgICAgICAgIC8vICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ09wZXJhdGlvbikge1xuICAgICAgICAgIGlmICh0aGlzLmRyYWdPcGVyYXRpb24uZmxvYXRpbmdQYW5lLmxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdPcGVyYXRpb24uZmxvYXRpbmdQYW5lLmxvY2F0aW9uLnggPSBldi5jbGllbnRYIC0gdGhpcy5kcmFnT3BlcmF0aW9uLm9mZnNldFg7XG4gICAgICAgICAgICB0aGlzLmRyYWdPcGVyYXRpb24uZmxvYXRpbmdQYW5lLmxvY2F0aW9uLnkgPSBldi5jbGllbnRZIC0gdGhpcy5kcmFnT3BlcmF0aW9uLm9mZnNldFk7XG4gICAgICAgICAgfVxuICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgLy8gICAgIGNvbnN0IHRyYWNlcyA9IHRoaXMuZG9ja1NlcnZpY2UuYnVpbGRUcmFjZXModGhpcy5kb2NrLmxheW91dCk7XG4gICAgICAvLyAgICAgY29uc3QgbWF0Y2hpbmdUcmFjZSA9IHRyYWNlcy5maWx0ZXIodHJhY2UgPT4ge1xuICAgICAgLy8gICAgICAgY29uc3QgcGFuZSA9IHRyYWNlLnRyYWNlW3RyYWNlLnRyYWNlLmxlbmd0aCAtIDFdO1xuICAgICAgLy8gICAgICAgcmV0dXJuIChwYW5lIGluc3RhbmNlb2YgQnNDb250ZW50UGFuZSkgJiYgKHBhbmUuZG9ja1BhbmVsID09PSB0aGlzLmRvY2tQYW5lbCk7XG4gICAgICAvLyAgICAgfSk7XG5cbiAgICAgIC8vICAgICBjb25zb2xlLmxvZygnbWF0Y2hpbmcnLCB7IHRyYWNlcywgbWF0Y2hpbmdUcmFjZSB9KTtcbiAgICAgIC8vICAgICAvLyB0aGlzLmRyYWdPcGVyYXRpb24gPSB7XG4gICAgICAgICAgICBcbiAgICAgIC8vICAgICAvLyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZW1vdmVGcm9tUGFuZUJpcyhob3N0OiBCc0RvY2tQYW5lLCBwYW5lOiBCc0RvY2tQYW5lKSB7XG4gICAgaWYgKGhvc3QgaW5zdGFuY2VvZiBCc0NvbnRlbnRQYW5lKSB7XG4gICAgfSBlbHNlIGlmIChob3N0IGluc3RhbmNlb2YgQnNEb2N1bWVudEhvc3QpIHtcbiAgICAgIC8vIEFjdHVhbGx5IGRvY3VtZW50SG9zdCBzaG91bGQgbmV2ZXIgYmUgcmVtb3ZlZFxuICAgIH0gZWxzZSBpZiAoaG9zdCBpbnN0YW5jZW9mIEJzVGFiR3JvdXBQYW5lKSB7XG4gICAgICBpZiAocGFuZSBpbnN0YW5jZW9mIEJzQ29udGVudFBhbmUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBob3N0LnBhbmVzLmluZGV4T2YocGFuZSk7XG4gICAgICAgIGhvc3QucGFuZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhvc3QgaW5zdGFuY2VvZiBCc1NwbGl0UGFuZSkge1xuICAgICAgY29uc3QgaW5kZXggPSBob3N0LnBhbmVzLmluZGV4T2YocGFuZSk7XG4gICAgICBob3N0LnBhbmVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfSBlbHNlIGlmIChob3N0IGluc3RhbmNlb2YgQnNGbG9hdGluZ1BhbmUpIHtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgJ1Vua25vd24gcGFuZSB0eXBlJztcbiAgICB9XG4gIH1cblxuICAvLyByZW1vdmVGcm9tUGFuZShob3N0OiBCc0RvY2tQYW5lLCBwYW5lbDogQnNEb2NrUGFuZWxDb21wb25lbnQgLyosIHBhcmVudHM6IEJzRG9ja1BhbmVbXSAqLyk6IFJlbW92ZUZyb21QYW5lUmVzdWx0IHtcbiAgLy8gICBpZiAoaG9zdCBpbnN0YW5jZW9mIEJzQ29udGVudFBhbmUpIHtcbiAgLy8gICAgIHJldHVybiB7IHBhbmVSZW1vdmVkOiBmYWxzZSwgaG9zdElzRW1wdHk6IGZhbHNlIH07XG4gIC8vICAgfSBlbHNlIGlmIChob3N0IGluc3RhbmNlb2YgQnNEb2N1bWVudEhvc3QpIHtcbiAgLy8gICAgIC8vIEFjdHVhbGx5IGRvY3VtZW50SG9zdCBzaG91bGQgbmV2ZXIgYmUgcmVtb3ZlZFxuXG4gIC8vICAgICBpZiAoIWhvc3Qucm9vdFBhbmUpIHtcbiAgLy8gICAgICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IGZhbHNlLCBob3N0SXNFbXB0eTogdHJ1ZSB9O1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlbW92ZUZyb21QYW5lKGhvc3Qucm9vdFBhbmUsIHBhbmVsKTtcbiAgLy8gICAgIHJldHVybiB7IHBhbmVSZW1vdmVkOiByZXN1bHQucGFuZVJlbW92ZWQsIGhvc3RJc0VtcHR5OiByZXN1bHQuaG9zdElzRW1wdHkgfTtcblxuICAvLyAgIH0gZWxzZSBpZiAoaG9zdCBpbnN0YW5jZW9mIEJzVGFiR3JvdXBQYW5lKSB7XG5cblxuXG4gIC8vICAgICBjb25zdCBtYXRjaGluZyA9IGhvc3QucGFuZXMuZmlsdGVyKHAgPT4gcC5kb2NrUGFuZWwgPT09IHBhbmVsKTtcbiAgLy8gICAgIGlmIChtYXRjaGluZy5sZW5ndGggPiAwKSB7XG4gIC8vICAgICAgIGhvc3QucGFuZXMuc3BsaWNlKGhvc3QucGFuZXMuZmluZEluZGV4KHAgPT4gcC5kb2NrUGFuZWwgPT09IHBhbmVsKSwgMSk7XG4gIC8vICAgICAgIHJldHVybiB7IHBhbmVSZW1vdmVkOiB0cnVlLCBob3N0SXNFbXB0eTogaG9zdC5wYW5lcy5sZW5ndGggPT09IDAgfTtcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIC8vIEFUTS4gYWxsIHBhbmVzIGFyZSBDb250ZW50UGFuZXMgYW55d2F5LlxuICAvLyAgICAgICAvLyBTbyB1bmxlc3MgeW91J2Qgd2FudCB0byBoYXZlIHNwbGl0dGVycyBpbnNpZGUgdGhlIHRhYnMsXG4gIC8vICAgICAgIC8vIFRoaXMgY29kZSB3aWxsIG5vdCBiZSBoaXQuXG5cbiAgLy8gICAgICAgLy8gY29uc3QgcmVzdWx0ID0gaG9zdC5wYW5lc1xuICAvLyAgICAgICAvLyAgIC5tYXAocGFyZW50UGFuZSA9PiB0aGlzLnJlbW92ZUZyb21QYW5lKHBhcmVudFBhbmUsIHBhbmVsKSlcbiAgLy8gICAgICAgLy8gICAuZmlsdGVyKHIgPT4gci5wYW5lUmVtb3ZlZCk7XG4gIC8vICAgICAgIC8vXG4gIC8vICAgICAgIC8vIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAvLyAgICAgICAvLyAgIHJldHVybiB7IHBhbmVSZW1vdmVkOiB0cnVlLCBob3N0SXNFbXB0eTogfVxuICAvLyAgICAgICAvLyB9XG4gIC8vICAgICAgIHJldHVybiB7IHBhbmVSZW1vdmVkOiBmYWxzZSwgaG9zdElzRW1wdHk6IGhvc3QucGFuZXMubGVuZ3RoID09PSAwIH07XG4gIC8vICAgICB9XG5cblxuXG5cbiAgLy8gICB9IGVsc2UgaWYgKGhvc3QgaW5zdGFuY2VvZiBCc1NwbGl0UGFuZSkge1xuICAvLyAgICAgY29uc3QgbWF0Y2hpbmcgPSBob3N0LnBhbmVzXG4gIC8vICAgICAgIC5maWx0ZXIocCA9PiBwIGluc3RhbmNlb2YgQnNDb250ZW50UGFuZSlcbiAgLy8gICAgICAgLm1hcChwID0+IDxCc0NvbnRlbnRQYW5lPnApXG4gIC8vICAgICAgIC5maWx0ZXIocCA9PiBwLmRvY2tQYW5lbCA9PT0gcGFuZWwpO1xuICAgICAgXG4gIC8vICAgICBpZiAobWF0Y2hpbmcubGVuZ3RoID4gMCkge1xuICAvLyAgICAgICBob3N0LnBhbmVzLnNwbGljZShob3N0LnBhbmVzLmZpbmRJbmRleChwID0+IChwIGluc3RhbmNlb2YgQnNDb250ZW50UGFuZSkgJiYgbWF0Y2hpbmcuaW5jbHVkZXMocCkpLCAxKTtcblxuICAvLyAgICAgICAvLyBUT0RPOiBSZW1vdmUgc3BsaXR0ZXIgaWYgb25seSAxIHBhbmUgbGVmdD9cbiAgLy8gICAgICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IHRydWUsIGhvc3RJc0VtcHR5OiBob3N0LnBhbmVzLmxlbmd0aCA9PT0gMCB9O1xuICAvLyAgICAgfSBlbHNlIHtcblxuXG4gIC8vICAgICAgIGZvciAobGV0IHNwbGl0UGFuZSBvZiBob3N0LnBhbmVzKSB7XG4gIC8vICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5yZW1vdmVGcm9tUGFuZShzcGxpdFBhbmUsIHBhbmVsKTtcbiAgLy8gICAgICAgICBpZiAocmVzdWx0LnBhbmVSZW1vdmVkICYmIHJlc3VsdC5ob3N0SXNFbXB0eSkge1xuICAvLyAgICAgICAgICAgLy8gc3BsaXRQYW5lIGlzIGVtcHR5IG5vdywgc28gd2UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoaXMgc3BsaXR0ZXJcbiAgLy8gICAgICAgICAgIGhvc3QucGFuZXMuc3BsaWNlKGhvc3QucGFuZXMuaW5kZXhPZihzcGxpdFBhbmUpLCAxKTtcbiAgLy8gICAgICAgICAgIHJldHVybiB7IHBhbmVSZW1vdmVkOiB0cnVlLCBob3N0SXNFbXB0eTogaG9zdC5wYW5lcy5sZW5ndGggPT09IDAgfTtcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cblxuICAvLyAgICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IGZhbHNlLCBob3N0SXNFbXB0eTogaG9zdC5wYW5lcy5sZW5ndGggPT09IDAgfTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgdGhyb3cgJ3Vua25vd24gaG9zdCB0eXBlJztcbiAgLy8gICB9XG4gIC8vIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZXVwJywgWyckZXZlbnQnXSkgb25Nb3VzZVVwKGV2OiBFdmVudCkge1xuICAgIHRoaXMuaXNNb3VzZURvd24gPSBmYWxzZTtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmRyYWdPcGVyYXRpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmQtYmxvY2snKSBkQmxvY2sgPSB0cnVlO1xufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PiJdfQ==
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1wYW5lbC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9kb2NrL3NyYy9kb2NrLXBhbmVsLWhlYWRlci9kb2NrLXBhbmVsLWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2RvY2svc3JjL2RvY2stcGFuZWwtaGVhZGVyL2RvY2stcGFuZWwtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQWdDLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7OztBQU85RCxNQUFNLE9BQU8sMEJBQTBCO0lBQ3JDLFlBQW9CLFNBQStCLEVBQVUsSUFBcUIsRUFBVSxXQUEwQixFQUFVLE9BQWdDO1FBQTVJLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBQVUsU0FBSSxH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QUtXLFdBQVc7c0JBQTFELFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBeVBBLFNBQVM7c0JBQXRELFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTWQsTUFBTTtzQkFBbkMsV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9wdGlvbmFsLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCc1RhYkNvbnRyb2xDb21wb25lbnQgfSBmcm9tICdAbWludHBsYXllci9uZy1ib290c3RyYXAvdGFiLWNvbnRyb2wnO1xuaW1wb3J0IHsgUGFyZW50aWZpZWQgfSBmcm9tICdAbWludHBsYXllci9wYXJlbnRpZnknO1xuaW1wb3J0IHsgQnNEb2NrUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi9kb2NrLXBhbmVsL2RvY2stcGFuZWwuY29tcG9uZW50JztcbmltcG9ydCB7IEJzRG9ja0NvbXBvbmVudCB9IGZyb20gJy4uL2RvY2svZG9jay5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnNEb2NrUGFuZSB9IGZyb20gJy4uL3BhbmVzL2RvY2stcGFuZSc7XG5pbXBvcnQgeyBCc1NwbGl0UGFuZSB9IGZyb20gJy4uL3BhbmVzL3NwbGl0LXBhbmUnO1xuaW1wb3J0IHsgQnNDb250ZW50UGFuZSB9IGZyb20gJy4uL3BhbmVzL2NvbnRlbnQtcGFuZSc7XG5pbXBvcnQgeyBCc0Zsb2F0aW5nUGFuZSB9IGZyb20gJy4uL3BhbmVzL2Zsb2F0aW5nLXBhbmUnO1xuaW1wb3J0IHsgQnNUYWJHcm91cFBhbmUgfSBmcm9tICcuLi9wYW5lcy90YWItZ3JvdXAtcGFuZSc7XG5pbXBvcnQgeyBCc0RvY3VtZW50SG9zdCB9IGZyb20gJy4uL3BhbmVzL2RvY3VtZW50LWhvc3QtcGFuZSc7XG5pbXBvcnQgeyBSZW1vdmVGcm9tUGFuZVJlc3VsdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVtb3ZlLWZyb20tcGFuZS1yZXN1bHQnO1xuaW1wb3J0IHsgRHJhZ09wZXJhdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvZHJhZy1vcGVyYXRpb24nO1xuaW1wb3J0IHsgQnNEb2NrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RvY2svZG9jay5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnMtZG9jay1wYW5lbC1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jay1wYW5lbC1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2NrLXBhbmVsLWhlYWRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEJzRG9ja1BhbmVsSGVhZGVyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkb2NrUGFuZWw6IEJzRG9ja1BhbmVsQ29tcG9uZW50LCBwcml2YXRlIGRvY2s6IEJzRG9ja0NvbXBvbmVudCwgcHJpdmF0ZSBkb2NrU2VydmljZTogQnNEb2NrU2VydmljZSwgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge31cblxuICBpc01vdXNlRG93biA9IGZhbHNlO1xuICBkcmFnT3BlcmF0aW9uPzogRHJhZ09wZXJhdGlvbjtcbiAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKSBvbk1vdXNlRG93bihldjogTW91c2VFdmVudCkge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc01vdXNlRG93biA9IHRydWU7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZW1vdmUnLCBbJyRldmVudCddKSBvbk1vdXNlTW92ZShldjogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmlzTW91c2VEb3duKSB7XG4gICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgIFxuICAgICAgICB0aGlzLmRvY2sucGFyZW50aWZpZWRMYXlvdXQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChwYXJlbnRpZmllZExheW91dCkgPT4ge1xuICAgICAgICAvLyB0aGlzLmRvY2subGF5b3V0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgobGF5b3V0KSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJhY2VzID0gdGhpcy5kb2NrU2VydmljZS5idWlsZFRyYWNlcyhwYXJlbnRpZmllZExheW91dCk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3RyYWNlcycsIHtwYXJlbnRpZmllZExheW91dCwgdHJhY2VzfSk7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmcgPSB0cmFjZXMuZmlsdGVyKHQgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFzdFBhbmUgPSB0LnRyYWNlW3QudHJhY2UubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAvLyByZXR1cm4gKGxhc3RQYW5lIGluc3RhbmNlb2YgQnNDb250ZW50UGFuZSkgJiYgKGxhc3RQYW5lLmRvY2tQYW5lbCA9PT0gdGhpcy5kb2NrUGFuZWwpO1xuICAgICAgICAgICAgcmV0dXJuIChsYXN0UGFuZSBpbnN0YW5jZW9mIEJzQ29udGVudFBhbmUpICYmIChsYXN0UGFuZS5kb2NrUGFuZWwgPT09IHRoaXMuZG9ja1BhbmVsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbWF0Y2hpbmcnLCBtYXRjaGluZyk7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNvbnN0IHRhYnMgPSBtYXRjaGluZ1swXS50cmFjZS5maWx0ZXIocGFuZSA9PiBwYW5lIGluc3RhbmNlb2YgQnNUYWJHcm91cFBhbmUpO1xuICAgICAgICAgIC8vIGNvbnN0IGxhc3RUYWJHcm91cCA9IHRhYnNbdGFicy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAvLyAvLyBjb25zb2xlLmxvZygnbGFzdCB0YWJncm91cCcsIGxhc3RUYWJHcm91cCk7XG5cbiAgICAgICAgICBsZXQgdGFiQ29udHJvbEVsID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKHRhYkNvbnRyb2xFbC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgIHRhYkNvbnRyb2xFbCA9IHRhYkNvbnRyb2xFbCEucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93ICdObyBtb3JlIHBhcmVudHMnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gd2hpbGUgKHRhYkNvbnRyb2xFbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdCUy1UQUItQ09OVFJPTCcpO1xuXG4gICAgICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICAgICAgd2lkdGg6IHRhYkNvbnRyb2xFbC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGFiQ29udHJvbEVsLmNsaWVudEhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGV2LmNsaWVudFggLSBldi5vZmZzZXRYLFxuICAgICAgICAgICAgdG9wOiBldi5jbGllbnRZIC0gZXYub2Zmc2V0WSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gdGhpcy5kb2NrUGFuZWwuaGVhZGVyUG9ydGFsPy5pc0F0dGFjaGVkICYmIHRoaXMuZG9ja1BhbmVsLmhlYWRlclBvcnRhbD8uZGV0YWNoKCk7XG4gICAgICAgICAgLy8gdGhpcy5kb2NrUGFuZWwuY29udGVudFBvcnRhbD8uaXNBdHRhY2hlZCAmJiB0aGlzLmRvY2tQYW5lbC5jb250ZW50UG9ydGFsPy5kZXRhY2goKTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyb21QYW5lKHBhcmVudGlmaWVkTGF5b3V0LiRvcmlnaW5hbC5yb290UGFuZSwgdGhpcy5kb2NrUGFuZWwpO1xuXG4gICAgICAgICAgY29uc3QgdHJhY2UgPSBbLi4ubWF0Y2hpbmdbMF0udHJhY2VdO1xuXG4gICAgICAgICAgdGhpcy5kb2NrUGFuZWwuaGVhZGVyUG9ydGFsPy5pc0F0dGFjaGVkICYmIHRoaXMuZG9ja1BhbmVsLmhlYWRlclBvcnRhbD8uZGV0YWNoKCk7XG4gICAgICAgICAgdGhpcy5kb2NrUGFuZWwuY29udGVudFBvcnRhbD8uaXNBdHRhY2hlZCAmJiB0aGlzLmRvY2tQYW5lbC5jb250ZW50UG9ydGFsPy5kZXRhY2goKTtcbiAgICAgICAgICBcbiAgICAgICAgICBcbiAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IHRyYWNlLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tUGFuZUJpcyh0cmFjZVtpbmRleCAtIDFdLCB0cmFjZVtpbmRleF0pO1xuICAgICAgICAgICAgICBpZiAoIXRyYWNlW2luZGV4IC0gMV0uaXNFbXB0eSkgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBmbG9hdGluZ0luZGV4ID0gcGFyZW50aWZpZWRMYXlvdXQuZmxvYXRpbmdQYW5lcy5pbmRleE9mKHRyYWNlWzBdKTtcbiAgICAgICAgICAgICAgaWYgKHRyYWNlWzBdLmlzRW1wdHkgJiYgKGZsb2F0aW5nSW5kZXggPiAtMSkpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRpZmllZExheW91dC4kb3JpZ2luYWwuZmxvYXRpbmdQYW5lcy5zcGxpY2UoZmxvYXRpbmdJbmRleCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cblxuXG4gICAgICAgICAgLy8gdGhpcy5yZW1vdmVGcm9tUGFuZSgoPGFueT5tYXRjaGluZ1swXS50cmFjZVswXSlbJyRvcmlnaW5hbCddLCB0aGlzLmRvY2tQYW5lbCk7XG5cbiAgICAgICAgICBjb25zdCBmbG9hdGluZ1BhbmUgPSBuZXcgQnNGbG9hdGluZ1BhbmUoe1xuICAgICAgICAgICAgcGFuZTogbmV3IEJzVGFiR3JvdXBQYW5lKHtcbiAgICAgICAgICAgICAgcGFuZXM6IFtcbiAgICAgICAgICAgICAgICBuZXcgQnNDb250ZW50UGFuZSh7XG4gICAgICAgICAgICAgICAgICBkb2NrUGFuZWw6IHRoaXMuZG9ja1BhbmVsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaXplOiB7XG4gICAgICAgICAgICAgIHdpZHRoOiBjb29yZHMud2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodDogY29vcmRzLmhlaWdodCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2NhdGlvbjoge1xuICAgICAgICAgICAgICB4OiBjb29yZHMubGVmdCxcbiAgICAgICAgICAgICAgeTogY29vcmRzLnRvcCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmRyYWdPcGVyYXRpb24gPSB7XG4gICAgICAgICAgICBvZmZzZXRYOiBldi5vZmZzZXRYLFxuICAgICAgICAgICAgb2Zmc2V0WTogZXYub2Zmc2V0WSxcbiAgICAgICAgICAgIGZsb2F0aW5nUGFuZVxuICAgICAgICAgIH07XG4gICAgICAgICAgcGFyZW50aWZpZWRMYXlvdXQuJG9yaWdpbmFsLmZsb2F0aW5nUGFuZXMucHVzaChmbG9hdGluZ1BhbmUpO1xuICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kb2NrLmxheW91dCQubmV4dChwYXJlbnRpZmllZExheW91dC4kb3JpZ2luYWwpLCA1KTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygndHJhY2VzJywgeyB0cmFjZXMsIG1hdGNoaW5nLCBkb2NrUGFuZWw6IHRoaXMuZG9ja1BhbmVsLCBlcXVhbHM6IHRyYWNlc1syXS50cmFjZVszXSB9KTtcblxuICAgICAgICAgIC8vICAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgLy8gICAgIGxldCB0cmVlOiBIVE1MRWxlbWVudFtdID0gW107XG4gICAgICAgICAgLy8gICAgIGRvIHtcbiAgICAgICAgICAvLyAgICAgICB0cmVlLnB1c2goZWxlbWVudCEpO1xuICAgICAgICAgIC8vICAgICAgIGVsZW1lbnQgPSBlbGVtZW50IS5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgIC8vICAgICB9IHdoaWxlIChlbGVtZW50KTtcblxuICAgICAgICAgIC8vICAgICBjb25zdCB0YWJDb250cm9scyA9IHRyZWUuZmlsdGVyKGVsID0+IGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JTLVRBQi1DT05UUk9MJyk7XG4gICAgICAgICAgLy8gICAgIGlmICh0YWJDb250cm9scy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICAgIC8vICAgICAgICAgd2lkdGg6IHRhYkNvbnRyb2xzWzBdLmNsaWVudFdpZHRoLFxuICAgICAgICAgIC8vICAgICAgICAgaGVpZ2h0OiB0YWJDb250cm9sc1swXS5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgLy8gICAgICAgICBsZWZ0OiBldi5jbGllbnRYIC0gZXYub2Zmc2V0WCxcbiAgICAgICAgICAvLyAgICAgICAgIHRvcDogZXYuY2xpZW50WSAtIGV2Lm9mZnNldFksXG4gICAgICAgICAgLy8gICAgICAgfTtcblxuICAgICAgICAgIC8vICAgICAgIHRoaXMuZG9ja1BhbmVsLmhlYWRlclBvcnRhbD8uaXNBdHRhY2hlZCAmJiB0aGlzLmRvY2tQYW5lbC5oZWFkZXJQb3J0YWw/LmRldGFjaCgpO1xuICAgICAgICAgIC8vICAgICAgIHRoaXMuZG9ja1BhbmVsLmNvbnRlbnRQb3J0YWw/LmlzQXR0YWNoZWQgJiYgdGhpcy5kb2NrUGFuZWwuY29udGVudFBvcnRhbD8uZGV0YWNoKCk7XG4gICAgICAgICAgLy8gICAgICAgdGhpcy5yZW1vdmVGcm9tUGFuZShsYXlvdXQucm9vdFBhbmUsIHRoaXMuZG9ja1BhbmVsKTtcblxuICAgICAgICAgIC8vICAgICAgIGNvbnN0IGZsb2F0aW5nUGFuZSA9IG5ldyBCc0Zsb2F0aW5nUGFuZSh7XG4gICAgICAgICAgLy8gICAgICAgICBwYW5lOiBuZXcgQnNUYWJHcm91cFBhbmUoe1xuICAgICAgICAgIC8vICAgICAgICAgICBwYW5lczogW1xuICAgICAgICAgIC8vICAgICAgICAgICAgIG5ldyBCc0NvbnRlbnRQYW5lKHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIGRvY2tQYW5lbDogdGhpcy5kb2NrUGFuZWxcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9KVxuICAgICAgICAgIC8vICAgICAgICAgICBdXG4gICAgICAgICAgLy8gICAgICAgICB9KSxcbiAgICAgICAgICAvLyAgICAgICAgIHNpemU6IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgd2lkdGg6IGNvb3Jkcy53aWR0aCxcbiAgICAgICAgICAvLyAgICAgICAgICAgaGVpZ2h0OiBjb29yZHMuaGVpZ2h0LFxuICAgICAgICAgIC8vICAgICAgICAgfSxcbiAgICAgICAgICAvLyAgICAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgICAgLy8gICAgICAgICAgIHg6IGNvb3Jkcy5sZWZ0LFxuICAgICAgICAgIC8vICAgICAgICAgICB5OiBjb29yZHMudG9wLFxuICAgICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgIC8vICAgICAgIHRoaXMuZHJhZ09wZXJhdGlvbiA9IHtcbiAgICAgICAgICAvLyAgICAgICAgIG9mZnNldFg6IGV2Lm9mZnNldFgsXG4gICAgICAgICAgLy8gICAgICAgICBvZmZzZXRZOiBldi5vZmZzZXRZLFxuICAgICAgICAgIC8vICAgICAgICAgZmxvYXRpbmdQYW5lXG4gICAgICAgICAgLy8gICAgICAgfTtcblxuICAgICAgICAgIC8vICAgICAgIGxheW91dC5mbG9hdGluZ1BhbmVzLnB1c2goZmxvYXRpbmdQYW5lKTtcbiAgICAgICAgICAvLyAgICAgICB0aGlzLmRvY2subGF5b3V0JC5uZXh0KGxheW91dCk7XG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5kcmFnT3BlcmF0aW9uKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZHJhZ09wZXJhdGlvbi5mbG9hdGluZ1BhbmUubG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ09wZXJhdGlvbi5mbG9hdGluZ1BhbmUubG9jYXRpb24ueCA9IGV2LmNsaWVudFggLSB0aGlzLmRyYWdPcGVyYXRpb24ub2Zmc2V0WDtcbiAgICAgICAgICAgIHRoaXMuZHJhZ09wZXJhdGlvbi5mbG9hdGluZ1BhbmUubG9jYXRpb24ueSA9IGV2LmNsaWVudFkgLSB0aGlzLmRyYWdPcGVyYXRpb24ub2Zmc2V0WTtcbiAgICAgICAgICB9XG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgY29uc3QgdHJhY2VzID0gdGhpcy5kb2NrU2VydmljZS5idWlsZFRyYWNlcyh0aGlzLmRvY2subGF5b3V0KTtcbiAgICAgIC8vICAgICBjb25zdCBtYXRjaGluZ1RyYWNlID0gdHJhY2VzLmZpbHRlcih0cmFjZSA9PiB7XG4gICAgICAvLyAgICAgICBjb25zdCBwYW5lID0gdHJhY2UudHJhY2VbdHJhY2UudHJhY2UubGVuZ3RoIC0gMV07XG4gICAgICAvLyAgICAgICByZXR1cm4gKHBhbmUgaW5zdGFuY2VvZiBCc0NvbnRlbnRQYW5lKSAmJiAocGFuZS5kb2NrUGFuZWwgPT09IHRoaXMuZG9ja1BhbmVsKTtcbiAgICAgIC8vICAgICB9KTtcblxuICAgICAgLy8gICAgIGNvbnNvbGUubG9nKCdtYXRjaGluZycsIHsgdHJhY2VzLCBtYXRjaGluZ1RyYWNlIH0pO1xuICAgICAgLy8gICAgIC8vIHRoaXMuZHJhZ09wZXJhdGlvbiA9IHtcbiAgICAgICAgICAgIFxuICAgICAgLy8gICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUZyb21QYW5lQmlzKGhvc3Q6IEJzRG9ja1BhbmUsIHBhbmU6IEJzRG9ja1BhbmUpIHtcbiAgICBpZiAoaG9zdCBpbnN0YW5jZW9mIEJzQ29udGVudFBhbmUpIHtcbiAgICB9IGVsc2UgaWYgKGhvc3QgaW5zdGFuY2VvZiBCc0RvY3VtZW50SG9zdCkge1xuICAgICAgLy8gQWN0dWFsbHkgZG9jdW1lbnRIb3N0IHNob3VsZCBuZXZlciBiZSByZW1vdmVkXG4gICAgfSBlbHNlIGlmIChob3N0IGluc3RhbmNlb2YgQnNUYWJHcm91cFBhbmUpIHtcbiAgICAgIGlmIChwYW5lIGluc3RhbmNlb2YgQnNDb250ZW50UGFuZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGhvc3QucGFuZXMuaW5kZXhPZihwYW5lKTtcbiAgICAgICAgaG9zdC5wYW5lcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaG9zdCBpbnN0YW5jZW9mIEJzU3BsaXRQYW5lKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGhvc3QucGFuZXMuaW5kZXhPZihwYW5lKTtcbiAgICAgIGhvc3QucGFuZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9IGVsc2UgaWYgKGhvc3QgaW5zdGFuY2VvZiBCc0Zsb2F0aW5nUGFuZSkge1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyAnVW5rbm93biBwYW5lIHR5cGUnO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUZyb21QYW5lKGhvc3Q6IEJzRG9ja1BhbmUsIHBhbmVsOiBCc0RvY2tQYW5lbENvbXBvbmVudCAvKiwgcGFyZW50czogQnNEb2NrUGFuZVtdICovKTogUmVtb3ZlRnJvbVBhbmVSZXN1bHQge1xuICAgIGlmIChob3N0IGluc3RhbmNlb2YgQnNDb250ZW50UGFuZSkge1xuICAgICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IGZhbHNlLCBob3N0SXNFbXB0eTogZmFsc2UgfTtcbiAgICB9IGVsc2UgaWYgKGhvc3QgaW5zdGFuY2VvZiBCc0RvY3VtZW50SG9zdCkge1xuICAgICAgLy8gQWN0dWFsbHkgZG9jdW1lbnRIb3N0IHNob3VsZCBuZXZlciBiZSByZW1vdmVkXG5cbiAgICAgIGlmICghaG9zdC5yb290UGFuZSkge1xuICAgICAgICByZXR1cm4geyBwYW5lUmVtb3ZlZDogZmFsc2UsIGhvc3RJc0VtcHR5OiB0cnVlIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVtb3ZlRnJvbVBhbmUoaG9zdC5yb290UGFuZSwgcGFuZWwpO1xuICAgICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IHJlc3VsdC5wYW5lUmVtb3ZlZCwgaG9zdElzRW1wdHk6IHJlc3VsdC5ob3N0SXNFbXB0eSB9O1xuXG4gICAgfSBlbHNlIGlmIChob3N0IGluc3RhbmNlb2YgQnNUYWJHcm91cFBhbmUpIHtcblxuXG5cbiAgICAgIGNvbnN0IG1hdGNoaW5nID0gaG9zdC5wYW5lcy5maWx0ZXIocCA9PiBwLmRvY2tQYW5lbCA9PT0gcGFuZWwpO1xuICAgICAgaWYgKG1hdGNoaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaG9zdC5wYW5lcy5zcGxpY2UoaG9zdC5wYW5lcy5maW5kSW5kZXgocCA9PiBwLmRvY2tQYW5lbCA9PT0gcGFuZWwpLCAxKTtcbiAgICAgICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IHRydWUsIGhvc3RJc0VtcHR5OiBob3N0LnBhbmVzLmxlbmd0aCA9PT0gMCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQVRNLiBhbGwgcGFuZXMgYXJlIENvbnRlbnRQYW5lcyBhbnl3YXkuXG4gICAgICAgIC8vIFNvIHVubGVzcyB5b3UnZCB3YW50IHRvIGhhdmUgc3BsaXR0ZXJzIGluc2lkZSB0aGUgdGFicyxcbiAgICAgICAgLy8gVGhpcyBjb2RlIHdpbGwgbm90IGJlIGhpdC5cblxuICAgICAgICAvLyBjb25zdCByZXN1bHQgPSBob3N0LnBhbmVzXG4gICAgICAgIC8vICAgLm1hcChwYXJlbnRQYW5lID0+IHRoaXMucmVtb3ZlRnJvbVBhbmUocGFyZW50UGFuZSwgcGFuZWwpKVxuICAgICAgICAvLyAgIC5maWx0ZXIociA9PiByLnBhbmVSZW1vdmVkKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IHRydWUsIGhvc3RJc0VtcHR5OiB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IGZhbHNlLCBob3N0SXNFbXB0eTogaG9zdC5wYW5lcy5sZW5ndGggPT09IDAgfTtcbiAgICAgIH1cblxuXG5cblxuICAgIH0gZWxzZSBpZiAoaG9zdCBpbnN0YW5jZW9mIEJzU3BsaXRQYW5lKSB7XG4gICAgICBjb25zdCBtYXRjaGluZyA9IGhvc3QucGFuZXNcbiAgICAgICAgLmZpbHRlcihwID0+IHAgaW5zdGFuY2VvZiBCc0NvbnRlbnRQYW5lKVxuICAgICAgICAubWFwKHAgPT4gPEJzQ29udGVudFBhbmU+cClcbiAgICAgICAgLmZpbHRlcihwID0+IHAuZG9ja1BhbmVsID09PSBwYW5lbCk7XG4gICAgICBcbiAgICAgIGlmIChtYXRjaGluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGhvc3QucGFuZXMuc3BsaWNlKGhvc3QucGFuZXMuZmluZEluZGV4KHAgPT4gKHAgaW5zdGFuY2VvZiBCc0NvbnRlbnRQYW5lKSAmJiBtYXRjaGluZy5pbmNsdWRlcyhwKSksIDEpO1xuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBzcGxpdHRlciBpZiBvbmx5IDEgcGFuZSBsZWZ0P1xuICAgICAgICByZXR1cm4geyBwYW5lUmVtb3ZlZDogdHJ1ZSwgaG9zdElzRW1wdHk6IGhvc3QucGFuZXMubGVuZ3RoID09PSAwIH07XG4gICAgICB9IGVsc2Uge1xuXG5cbiAgICAgICAgZm9yIChsZXQgc3BsaXRQYW5lIG9mIGhvc3QucGFuZXMpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlbW92ZUZyb21QYW5lKHNwbGl0UGFuZSwgcGFuZWwpO1xuICAgICAgICAgIGlmIChyZXN1bHQucGFuZVJlbW92ZWQgJiYgcmVzdWx0Lmhvc3RJc0VtcHR5KSB7XG4gICAgICAgICAgICAvLyBzcGxpdFBhbmUgaXMgZW1wdHkgbm93LCBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhpcyBzcGxpdHRlclxuICAgICAgICAgICAgaG9zdC5wYW5lcy5zcGxpY2UoaG9zdC5wYW5lcy5pbmRleE9mKHNwbGl0UGFuZSksIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IHRydWUsIGhvc3RJc0VtcHR5OiBob3N0LnBhbmVzLmxlbmd0aCA9PT0gMCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBwYW5lUmVtb3ZlZDogZmFsc2UsIGhvc3RJc0VtcHR5OiBob3N0LnBhbmVzLmxlbmd0aCA9PT0gMCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyAndW5rbm93biBob3N0IHR5cGUnO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNldXAnLCBbJyRldmVudCddKSBvbk1vdXNlVXAoZXY6IEV2ZW50KSB7XG4gICAgdGhpcy5pc01vdXNlRG93biA9IGZhbHNlO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZHJhZ09wZXJhdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZC1ibG9jaycpIGRCbG9jayA9IHRydWU7XG59XG4iLCI8bmctY29udGVudD48L25nLWNvbnRlbnQ+Il19
|
|
@@ -177,7 +177,8 @@ class BsDockComponent {
|
|
|
177
177
|
const clone = deepClone(layout, true,
|
|
178
178
|
// []
|
|
179
179
|
[BsContentPane, BsDocumentHost, BsFloatingPane, BsSplitPane, BsTabGroupPane], true, this.paneCache);
|
|
180
|
-
this.paneCache = clone.cache;
|
|
180
|
+
// this.paneCache = clone.cache;
|
|
181
|
+
console.log('parentify', { layout, result: clone.result });
|
|
181
182
|
return clone.result;
|
|
182
183
|
}));
|
|
183
184
|
this.parentifiedLayout$.pipe(takeUntil(this.destroyed$)).subscribe(console.log);
|
|
@@ -296,11 +297,11 @@ class BsDockPanelHeaderComponent {
|
|
|
296
297
|
if (this.isMouseDown) {
|
|
297
298
|
if (!this.isDragging) {
|
|
298
299
|
this.isDragging = true;
|
|
299
|
-
this.dock.parentifiedLayout$.pipe(take(1)).subscribe((
|
|
300
|
+
this.dock.parentifiedLayout$.pipe(take(1)).subscribe((parentifiedLayout) => {
|
|
300
301
|
var _a, _b, _c, _d;
|
|
301
302
|
// this.dock.layout$.pipe(take(1)).subscribe((layout) => {
|
|
302
|
-
const traces = this.dockService.buildTraces(
|
|
303
|
-
console.log('traces', {
|
|
303
|
+
const traces = this.dockService.buildTraces(parentifiedLayout);
|
|
304
|
+
console.log('traces', { parentifiedLayout, traces });
|
|
304
305
|
const matching = traces.filter(t => {
|
|
305
306
|
const lastPane = t.trace[t.trace.length - 1];
|
|
306
307
|
// return (lastPane instanceof BsContentPane) && (lastPane.dockPanel === this.dockPanel);
|
|
@@ -330,7 +331,7 @@ class BsDockPanelHeaderComponent {
|
|
|
330
331
|
};
|
|
331
332
|
// this.dockPanel.headerPortal?.isAttached && this.dockPanel.headerPortal?.detach();
|
|
332
333
|
// this.dockPanel.contentPortal?.isAttached && this.dockPanel.contentPortal?.detach();
|
|
333
|
-
|
|
334
|
+
this.removeFromPane(parentifiedLayout.$original.rootPane, this.dockPanel);
|
|
334
335
|
const trace = [...matching[0].trace];
|
|
335
336
|
((_a = this.dockPanel.headerPortal) === null || _a === void 0 ? void 0 : _a.isAttached) && ((_b = this.dockPanel.headerPortal) === null || _b === void 0 ? void 0 : _b.detach());
|
|
336
337
|
((_c = this.dockPanel.contentPortal) === null || _c === void 0 ? void 0 : _c.isAttached) && ((_d = this.dockPanel.contentPortal) === null || _d === void 0 ? void 0 : _d.detach());
|
|
@@ -341,9 +342,9 @@ class BsDockPanelHeaderComponent {
|
|
|
341
342
|
break;
|
|
342
343
|
}
|
|
343
344
|
else {
|
|
344
|
-
const floatingIndex =
|
|
345
|
+
const floatingIndex = parentifiedLayout.floatingPanes.indexOf(trace[0]);
|
|
345
346
|
if (trace[0].isEmpty && (floatingIndex > -1)) {
|
|
346
|
-
|
|
347
|
+
parentifiedLayout.$original.floatingPanes.splice(floatingIndex, 1);
|
|
347
348
|
}
|
|
348
349
|
}
|
|
349
350
|
}
|
|
@@ -370,8 +371,9 @@ class BsDockPanelHeaderComponent {
|
|
|
370
371
|
offsetY: ev.offsetY,
|
|
371
372
|
floatingPane
|
|
372
373
|
};
|
|
373
|
-
|
|
374
|
-
|
|
374
|
+
parentifiedLayout.$original.floatingPanes.push(floatingPane);
|
|
375
|
+
// debugger;
|
|
376
|
+
setTimeout(() => this.dock.layout$.next(parentifiedLayout.$original), 5);
|
|
375
377
|
// console.log('traces', { traces, matching, dockPanel: this.dockPanel, equals: traces[2].trace[3] });
|
|
376
378
|
// let element: HTMLElement | null = this.element.nativeElement;
|
|
377
379
|
// let tree: HTMLElement[] = [];
|
|
@@ -458,58 +460,64 @@ class BsDockPanelHeaderComponent {
|
|
|
458
460
|
throw 'Unknown pane type';
|
|
459
461
|
}
|
|
460
462
|
}
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
463
|
+
removeFromPane(host, panel /*, parents: BsDockPane[] */) {
|
|
464
|
+
if (host instanceof BsContentPane) {
|
|
465
|
+
return { paneRemoved: false, hostIsEmpty: false };
|
|
466
|
+
}
|
|
467
|
+
else if (host instanceof BsDocumentHost) {
|
|
468
|
+
// Actually documentHost should never be removed
|
|
469
|
+
if (!host.rootPane) {
|
|
470
|
+
return { paneRemoved: false, hostIsEmpty: true };
|
|
471
|
+
}
|
|
472
|
+
const result = this.removeFromPane(host.rootPane, panel);
|
|
473
|
+
return { paneRemoved: result.paneRemoved, hostIsEmpty: result.hostIsEmpty };
|
|
474
|
+
}
|
|
475
|
+
else if (host instanceof BsTabGroupPane) {
|
|
476
|
+
const matching = host.panes.filter(p => p.dockPanel === panel);
|
|
477
|
+
if (matching.length > 0) {
|
|
478
|
+
host.panes.splice(host.panes.findIndex(p => p.dockPanel === panel), 1);
|
|
479
|
+
return { paneRemoved: true, hostIsEmpty: host.panes.length === 0 };
|
|
480
|
+
}
|
|
481
|
+
else {
|
|
482
|
+
// ATM. all panes are ContentPanes anyway.
|
|
483
|
+
// So unless you'd want to have splitters inside the tabs,
|
|
484
|
+
// This code will not be hit.
|
|
485
|
+
// const result = host.panes
|
|
486
|
+
// .map(parentPane => this.removeFromPane(parentPane, panel))
|
|
487
|
+
// .filter(r => r.paneRemoved);
|
|
488
|
+
//
|
|
489
|
+
// if (result.length > 0) {
|
|
490
|
+
// return { paneRemoved: true, hostIsEmpty: }
|
|
491
|
+
// }
|
|
492
|
+
return { paneRemoved: false, hostIsEmpty: host.panes.length === 0 };
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
else if (host instanceof BsSplitPane) {
|
|
496
|
+
const matching = host.panes
|
|
497
|
+
.filter(p => p instanceof BsContentPane)
|
|
498
|
+
.map(p => p)
|
|
499
|
+
.filter(p => p.dockPanel === panel);
|
|
500
|
+
if (matching.length > 0) {
|
|
501
|
+
host.panes.splice(host.panes.findIndex(p => (p instanceof BsContentPane) && matching.includes(p)), 1);
|
|
502
|
+
// TODO: Remove splitter if only 1 pane left?
|
|
503
|
+
return { paneRemoved: true, hostIsEmpty: host.panes.length === 0 };
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
for (let splitPane of host.panes) {
|
|
507
|
+
const result = this.removeFromPane(splitPane, panel);
|
|
508
|
+
if (result.paneRemoved && result.hostIsEmpty) {
|
|
509
|
+
// splitPane is empty now, so we can remove it from this splitter
|
|
510
|
+
host.panes.splice(host.panes.indexOf(splitPane), 1);
|
|
511
|
+
return { paneRemoved: true, hostIsEmpty: host.panes.length === 0 };
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
return { paneRemoved: false, hostIsEmpty: host.panes.length === 0 };
|
|
516
|
+
}
|
|
517
|
+
else {
|
|
518
|
+
throw 'unknown host type';
|
|
519
|
+
}
|
|
520
|
+
}
|
|
513
521
|
onMouseUp(ev) {
|
|
514
522
|
this.isMouseDown = false;
|
|
515
523
|
this.isDragging = false;
|