@trudb/tru-common-lib 0.1.609 → 0.1.611

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.
@@ -11,5 +11,6 @@ export class TruPropertyConfigBase {
11
11
  formatter = undefined;
12
12
  choices = undefined;
13
13
  validation = undefined;
14
+ excludeFromCloning = false;
14
15
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LXByb3BlcnR5LWNvbmZpZy1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9iYXNlLWNsYXNzZXMvdHJ1LXByb3BlcnR5LWNvbmZpZy1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsZ0JBQWdCLENBQUM7SUFFakIsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUM1QixVQUFVLEdBQStCLEtBQUssQ0FBQztJQUMvQyxPQUFPLEdBQStCLEtBQUssQ0FBQztJQUM1QyxRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0IsZ0JBQWdCLEdBQVksS0FBSyxDQUFDO0lBQ2xDLFFBQVEsR0FBdUIsU0FBUyxDQUFDO0lBQ3pDLGFBQWEsR0FBdUIsU0FBUyxDQUFDO0lBQzlDLFNBQVMsR0FBNEQsU0FBUyxDQUFDO0lBQy9FLE9BQU8sR0FBUSxTQUFTLENBQUM7SUFDekIsVUFBVSxHQUF1QixTQUFTLENBQUM7Q0FDNUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVHJ1UHJvcGVydHlDb25maWdCYXNlIHtcclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBpc051bGxhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2FuRGlzcGxheTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgPSBmYWxzZTtcclxuICBjYW5FZGl0OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCA9IGZhbHNlO1xyXG4gIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2xvYmFsQ2FjaGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB1bmlxdWVDb25zdHJhaW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgdHlwZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBmb3JtYXR0ZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgZm9ybWF0dGVyOiAoKHZhbHVlOiBhbnkpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIGNob2ljZXM6IGFueSA9IHVuZGVmaW5lZDtcclxuICB2YWxpZGF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbn1cclxuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LXByb3BlcnR5LWNvbmZpZy1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9iYXNlLWNsYXNzZXMvdHJ1LXByb3BlcnR5LWNvbmZpZy1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsZ0JBQWdCLENBQUM7SUFFakIsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUM1QixVQUFVLEdBQStCLEtBQUssQ0FBQztJQUMvQyxPQUFPLEdBQStCLEtBQUssQ0FBQztJQUM1QyxRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0IsZ0JBQWdCLEdBQVksS0FBSyxDQUFDO0lBQ2xDLFFBQVEsR0FBdUIsU0FBUyxDQUFDO0lBQ3pDLGFBQWEsR0FBdUIsU0FBUyxDQUFDO0lBQzlDLFNBQVMsR0FBNEQsU0FBUyxDQUFDO0lBQy9FLE9BQU8sR0FBUSxTQUFTLENBQUM7SUFDekIsVUFBVSxHQUF1QixTQUFTLENBQUM7SUFDM0Msa0JBQWtCLEdBQVksS0FBSyxDQUFDO0NBQ3JDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFRydVByb3BlcnR5Q29uZmlnQmFzZSB7XHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgaXNOdWxsYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNhbkRpc3BsYXk6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkID0gZmFsc2U7XHJcbiAgY2FuRWRpdDogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgPSBmYWxzZTtcclxuICByZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdsb2JhbENhY2hlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdW5pcXVlQ29uc3RyYWludDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHR5cGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgZm9ybWF0dGVyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIGZvcm1hdHRlcjogKCh2YWx1ZTogYW55KSA9PiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBjaG9pY2VzOiBhbnkgPSB1bmRlZmluZWQ7XHJcbiAgdmFsaWRhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIGV4Y2x1ZGVGcm9tQ2xvbmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG59XHJcbiJdfQ==
@@ -4,24 +4,30 @@ import * as i0 from "@angular/core";
4
4
  import * as i1 from "../../services/tru-text-manager";
5
5
  import * as i2 from "../desktop/services/tru-window-event-handler";
6
6
  import * as i3 from "../../services/tru-data-context";
7
- import * as i4 from "@angular/material/button";
8
- import * as i5 from "../toolbar/tru-toolbar";
9
- import * as i6 from "../toolbar/button/tru-toolbar-button";
10
- import * as i7 from "../toolbar/dropdown/tru-toolbar-dropdown";
11
- import * as i8 from "../toolbar/text/tru-toolbar-text";
7
+ import * as i4 from "../../services/tru-model-table-lookup";
8
+ import * as i5 from "../../services/tru-model-property-lookup";
9
+ import * as i6 from "../../services/tru-model-type-lookup";
10
+ import * as i7 from "../../services/tru-ui-notification";
11
+ import * as i8 from "@angular/material/button";
12
+ import * as i9 from "../toolbar/tru-toolbar";
13
+ import * as i10 from "../toolbar/button/tru-toolbar-button";
14
+ import * as i11 from "../toolbar/dropdown/tru-toolbar-dropdown";
15
+ import * as i12 from "../toolbar/text/tru-toolbar-text";
12
16
  export class TruCloneView extends TruViewBase {
13
17
  textManager;
14
18
  windowEventHandler;
15
19
  dataContext;
20
+ modelTableLookup;
21
+ modelPropertyLookup;
22
+ modelTypeLookup;
23
+ uiNotification;
16
24
  loading = true;
17
25
  loadingMessage = 'Searching for related records...';
18
26
  numberOfCopies;
19
27
  selectedNumberOfCopies;
20
- //entity = scope.view.data.entity;
21
- //contextFilters = scope.view.data.contextFilters;
22
- //model = dataService.model;
23
- //childLookups = [];
24
- //rootNode = new Node(null, this.tableName, this.tableName, false, true, null, null, true);
28
+ contextFilters = null;
29
+ childLookups = [];
30
+ rootNode = new Node(null, this.tableName, this.tableName, false, true, null, null, true, null, null);
25
31
  ignorePropertyList = [
26
32
  'CreatedRef',
27
33
  'Created',
@@ -45,11 +51,17 @@ export class TruCloneView extends TruViewBase {
45
51
  flatList = [];
46
52
  childFlatList = [];
47
53
  processedCount = 0;
48
- constructor(textManager, windowEventHandler, dataContext) {
54
+ doneProcessing = false;
55
+ displayTree = [this.rootNode];
56
+ constructor(textManager, windowEventHandler, dataContext, modelTableLookup, modelPropertyLookup, modelTypeLookup, uiNotification) {
49
57
  super(textManager, windowEventHandler);
50
58
  this.textManager = textManager;
51
59
  this.windowEventHandler = windowEventHandler;
52
60
  this.dataContext = dataContext;
61
+ this.modelTableLookup = modelTableLookup;
62
+ this.modelPropertyLookup = modelPropertyLookup;
63
+ this.modelTypeLookup = modelTypeLookup;
64
+ this.uiNotification = uiNotification;
53
65
  this.numberOfCopies = this.getNumberOfCopies();
54
66
  this.selectedNumberOfCopies = this.numberOfCopies[0];
55
67
  }
@@ -63,26 +75,248 @@ export class TruCloneView extends TruViewBase {
63
75
  }
64
76
  return copies;
65
77
  };
78
+ propertyIsAllowed = (propertyName, tableName) => {
79
+ if (propertyName === tableName + 'Ref')
80
+ return false;
81
+ if (propertyName.startsWith('o'))
82
+ return false;
83
+ let property = this.modelPropertyLookup.lookup.get(propertyName);
84
+ if (property && property.excludeFromCloning)
85
+ return false;
86
+ if (this.ignorePropertyList.some(function (propertyToIgnore) { return propertyToIgnore === propertyName; })) {
87
+ return false;
88
+ }
89
+ return true;
90
+ };
91
+ getPrototypeProperties = (obj) => {
92
+ var result = [];
93
+ for (var prop in obj) {
94
+ if (!obj.hasOwnProperty(prop)) {
95
+ result.push(prop);
96
+ }
97
+ }
98
+ return result;
99
+ };
100
+ getChildPropertiesForCurrentEntity = (currentEntity) => {
101
+ //var propertyNames = Object.keys(Object.getPrototypeOf(currentEntity));
102
+ let propertyNames = Object.keys(currentEntity);
103
+ let navigationPropertyNames = propertyNames.filter((n) => { return n.startsWith('o'); });
104
+ let childNavigationPropertyNames = navigationPropertyNames.filter((n) => {
105
+ return this.childLookups.some((lookup) => { return 'o' + lookup.pluralTableName === n; });
106
+ });
107
+ let childProperties = [];
108
+ childNavigationPropertyNames.filter(function (n) {
109
+ if (currentEntity[n] && currentEntity[n].length)
110
+ childProperties.push(currentEntity[n]);
111
+ });
112
+ return childProperties;
113
+ };
114
+ getTypeFromEntityTypeName = (typeName) => {
115
+ var p1s = typeName.split(',')[0];
116
+ var p2s = p1s.split('.');
117
+ return p2s[p2s.length - 1];
118
+ };
119
+ buildCloneTree = (currentEntity, node) => {
120
+ var childProperties = this.getChildPropertiesForCurrentEntity(currentEntity);
121
+ childProperties.forEach((childEntities) => {
122
+ let type = this.getTypeFromEntityTypeName(childEntities[0].$type);
123
+ let childLookup = this.modelTableLookup.lookup.get(type);
124
+ let groupNode = new Node(null, childEntities[0].constructor.name, childLookup?.pluralLabel, false, true, [], '', false, node, null);
125
+ this.flatList.push(groupNode);
126
+ childEntities.forEach((childEntity) => {
127
+ let type = this.getTypeFromEntityTypeName(childEntity.$type);
128
+ let childNode = new Node(childEntity[type + 'Ref'], type, type, true, true, [], '', false, groupNode, childEntity);
129
+ this.childFlatList.push(childNode);
130
+ groupNode.nodes.push(childNode);
131
+ this.buildCloneTree(childEntity, childNode);
132
+ });
133
+ node.nodes.push(groupNode);
134
+ });
135
+ };
136
+ asyncForEachRecordId = (arr, cb) => {
137
+ return arr.reduce((p, c) => {
138
+ return p.then(() => cb(c));
139
+ }, Promise.resolve());
140
+ };
141
+ fetchRecordId = (child) => {
142
+ var c = child;
143
+ var data = {
144
+ ref: c.ref,
145
+ tableName: c.tableName
146
+ };
147
+ data = this.textManager.formatAsUrlParameters(data);
148
+ return new Promise((resolve) => {
149
+ c.displayName = child.entity.HID;
150
+ this.processedCount++;
151
+ this.loadingMessage = 'Formatting data...processed (' + this.processedCount + '/' + this.childFlatList.length + ') records';
152
+ if (this.processedCount >= this.childFlatList.length)
153
+ this.loadingMessage = 'Rendering tree...';
154
+ resolve();
155
+ });
156
+ };
157
+ done = () => {
158
+ this.doneProcessing = true;
159
+ };
160
+ traverse = (node, currentEntity) => {
161
+ var group = !node.child;
162
+ if (group) {
163
+ var groupNodes = node.nodes;
164
+ groupNodes.forEach((groupNode) => {
165
+ if (groupNode.checked)
166
+ groupNode.nodes.forEach((childNode) => {
167
+ this.traverse(childNode, currentEntity);
168
+ });
169
+ });
170
+ }
171
+ else {
172
+ if (node.checked) {
173
+ let tableType = this.modelTypeLookup.getType(this.tableName);
174
+ let newEntity = this.dataContext.entityAccess().add(tableType, this.contextFilters);
175
+ this.getPrototypeProperties(newEntity).forEach((propertyName) => {
176
+ if (this.propertyIsAllowed(propertyName, node.tableName)) {
177
+ newEntity[propertyName] = node.entity[propertyName];
178
+ }
179
+ });
180
+ newEntity.setProperty('_associatedDataCached', true);
181
+ let childLookup = this.modelTableLookup.lookup.get(node.tableName);
182
+ currentEntity['o' + childLookup.pluralName].push(newEntity);
183
+ let childNodes = node.nodes;
184
+ childNodes.forEach((childNode) => {
185
+ if (childNode.checked)
186
+ childNode.nodes.forEach((groupNode) => {
187
+ this.traverse(groupNode, newEntity);
188
+ });
189
+ });
190
+ }
191
+ }
192
+ };
193
+ getDataForCloning = () => {
194
+ this.dataContext.entityAccess().clone({
195
+ ref: this.entity.Ref,
196
+ tableName: this.tableName
197
+ }).subscribe({
198
+ next: (response) => {
199
+ this.dataTree = response.data[0];
200
+ this.buildCloneTree(this.dataTree, this.rootNode);
201
+ this.loadingMessage = 'Formatting data...(0/' + this.childFlatList.length + ') records';
202
+ this.asyncForEachRecordId(this.childFlatList, this.fetchRecordId).then(this.done);
203
+ this.displayTree = [this.rootNode];
204
+ },
205
+ error: (ex) => {
206
+ console.log('error', this.uiNotification.error('Server Error: ' + ex.status, [ex.error.Message]));
207
+ }
208
+ });
209
+ };
210
+ onClone = () => {
211
+ let copies = this.selectedNumberOfCopies.value;
212
+ for (let i = 0; i < copies; i++) {
213
+ let tableType = this.modelTypeLookup.getType(this.tableName);
214
+ let newEntity = this.dataContext.entityAccess().add(tableType, this.contextFilters);
215
+ this.getPrototypeProperties(this.entity).forEach((propertyName) => {
216
+ if (this.propertyIsAllowed(propertyName, this.tableName)) {
217
+ newEntity[propertyName] = this.entity[propertyName];
218
+ }
219
+ });
220
+ newEntity.setProperty('_associatedDataCached', true);
221
+ this.traverse(this.displayTree[0], newEntity);
222
+ //this.view.data.add(newEntity);
223
+ }
224
+ this.windowEventHandler.close();
225
+ };
226
+ onCancel = () => {
227
+ this.windowEventHandler.close();
228
+ };
66
229
  onExpandClicked = () => {
67
230
  };
68
231
  onCollapseClicked = () => {
69
232
  };
70
233
  onNumberOfCopiesChanged = (event) => {
71
234
  };
72
- onCancelClicked = () => {
73
- };
74
- onCloneClicked = () => {
75
- };
76
235
  ngOnInit() {
236
+ this.tableName = this.view.window.tableName;
77
237
  this.entities = this.view.entities;
78
238
  this.entity = this.entities[this.view.entityIndex];
79
239
  this.setEntityDisplayValues(this.view.window.tableName);
240
+ this.getDataForCloning();
80
241
  }
81
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruCloneView, deps: [{ token: i1.TruTextManager }, { token: i2.TruWindowEventHandler }, { token: i3.TruDataContext }], target: i0.ɵɵFactoryTarget.Component });
82
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: TruCloneView, selector: "tru-clone-view", usesInheritance: true, ngImport: i0, template: "<div>\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'expand-icon'\" [tooltip]=\"'Expand'\" [disabled]=\"loading\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"loading\" (onClick)=\"onCollapseClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-text [text]=\"'Copies:'\"></tru-toolbar-text>\r\n <tru-toolbar-dropdown [options]=\"numberOfCopies\"\r\n [(selectedOption)]=\"selectedNumberOfCopies\"\r\n [disabled]=\"loading\"\r\n (selectionChange)=\"onNumberOfCopiesChanged($event)\">\r\n </tru-toolbar-dropdown>\r\n </tru-toolbar>\r\n <div class=\"tru-dialog-content\">\r\n\r\n </div>\r\n <div class=\"tru-dialog-footer\">\r\n <button mat-button (click)=\"onCancelClicked()\">Cancel</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"onCloneClicked()\">Clone</button>\r\n </div>\r\n</div>\r\n", styles: [".tru-dialog-footer{position:absolute;left:0;right:0;bottom:0;padding:4px 15px 5px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px #fff}.tru-dialog-footer button{height:30px}::ng-deep tru-toolbar-button svg{height:20px!important}\n"], dependencies: [{ kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.TruToolbar, selector: "tru-toolbar", inputs: ["config"] }, { kind: "component", type: i6.TruToolbarButton, selector: "tru-toolbar-button", inputs: ["config", "icon", "text", "disabled", "tooltip", "type"], outputs: ["onClick", "onKeydown"] }, { kind: "component", type: i7.TruToolbarDropdown, selector: "tru-toolbar-dropdown", inputs: ["config", "options", "tooltip", "multiple", "filterable", "filterTooltip", "width", "selectedOption", "disabled"], outputs: ["selectedOptionChange", "selectionChange"] }, { kind: "component", type: i8.TruToolbarText, selector: "tru-toolbar-text", inputs: ["config", "icon", "text", "tooltip"] }] });
242
+ ngOnDestroy() {
243
+ this.dataTree.length = 0;
244
+ this.flatList.length = 0;
245
+ this.childFlatList.length = 0;
246
+ this.childLookups.length = 0;
247
+ }
248
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruCloneView, deps: [{ token: i1.TruTextManager }, { token: i2.TruWindowEventHandler }, { token: i3.TruDataContext }, { token: i4.TruModelTableLookup }, { token: i5.TruModelPropertyLookup }, { token: i6.TruModelTypeLookup }, { token: i7.TruUiNotification }], target: i0.ɵɵFactoryTarget.Component });
249
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: TruCloneView, selector: "tru-clone-view", usesInheritance: true, ngImport: i0, template: "<div>\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'expand-icon'\" [tooltip]=\"'Expand'\" [disabled]=\"loading\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"loading\" (onClick)=\"onCollapseClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-text [text]=\"'Copies:'\"></tru-toolbar-text>\r\n <tru-toolbar-dropdown [options]=\"numberOfCopies\"\r\n [(selectedOption)]=\"selectedNumberOfCopies\"\r\n [disabled]=\"loading\"\r\n (selectionChange)=\"onNumberOfCopiesChanged($event)\">\r\n </tru-toolbar-dropdown>\r\n </tru-toolbar>\r\n <div class=\"tru-dialog-content\">\r\n\r\n </div>\r\n <div class=\"tru-dialog-footer\">\r\n <button mat-button (click)=\"onCancel()\">Cancel</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"onClone()\" (keyup.enter)=\"onClone()\">Clone</button>\r\n </div>\r\n</div>\r\n", styles: [".tru-dialog-footer{position:absolute;left:0;right:0;bottom:0;padding:4px 15px 5px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px #fff}.tru-dialog-footer button{height:30px}::ng-deep tru-toolbar-button svg{height:20px!important}\n"], dependencies: [{ kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.TruToolbar, selector: "tru-toolbar", inputs: ["config"] }, { kind: "component", type: i10.TruToolbarButton, selector: "tru-toolbar-button", inputs: ["config", "icon", "text", "disabled", "tooltip", "type"], outputs: ["onClick", "onKeydown"] }, { kind: "component", type: i11.TruToolbarDropdown, selector: "tru-toolbar-dropdown", inputs: ["config", "options", "tooltip", "multiple", "filterable", "filterTooltip", "width", "selectedOption", "disabled"], outputs: ["selectedOptionChange", "selectionChange"] }, { kind: "component", type: i12.TruToolbarText, selector: "tru-toolbar-text", inputs: ["config", "icon", "text", "tooltip"] }] });
83
250
  }
84
251
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruCloneView, decorators: [{
85
252
  type: Component,
86
- args: [{ selector: 'tru-clone-view', template: "<div>\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'expand-icon'\" [tooltip]=\"'Expand'\" [disabled]=\"loading\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"loading\" (onClick)=\"onCollapseClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-text [text]=\"'Copies:'\"></tru-toolbar-text>\r\n <tru-toolbar-dropdown [options]=\"numberOfCopies\"\r\n [(selectedOption)]=\"selectedNumberOfCopies\"\r\n [disabled]=\"loading\"\r\n (selectionChange)=\"onNumberOfCopiesChanged($event)\">\r\n </tru-toolbar-dropdown>\r\n </tru-toolbar>\r\n <div class=\"tru-dialog-content\">\r\n\r\n </div>\r\n <div class=\"tru-dialog-footer\">\r\n <button mat-button (click)=\"onCancelClicked()\">Cancel</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"onCloneClicked()\">Clone</button>\r\n </div>\r\n</div>\r\n", styles: [".tru-dialog-footer{position:absolute;left:0;right:0;bottom:0;padding:4px 15px 5px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px #fff}.tru-dialog-footer button{height:30px}::ng-deep tru-toolbar-button svg{height:20px!important}\n"] }]
87
- }], ctorParameters: () => [{ type: i1.TruTextManager }, { type: i2.TruWindowEventHandler }, { type: i3.TruDataContext }] });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWNsb25lLXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvY2xvbmUtdmlldy90cnUtY2xvbmUtdmlldy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9jbG9uZS12aWV3L3RydS1jbG9uZS12aWV3Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7QUFZN0QsTUFBTSxPQUFPLFlBQWEsU0FBUSxXQUFXO0lBbUMvQjtJQUNBO0lBQ0Y7SUFwQ1YsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixjQUFjLEdBQVcsa0NBQWtDLENBQUM7SUFDNUQsY0FBYyxDQUFrQztJQUNoRCxzQkFBc0IsQ0FBNEI7SUFDbEQsa0NBQWtDO0lBQ2xDLGtEQUFrRDtJQUNsRCw0QkFBNEI7SUFDNUIsb0JBQW9CO0lBQ3BCLDJGQUEyRjtJQUMzRixrQkFBa0IsR0FBRztRQUNuQixZQUFZO1FBQ1osU0FBUztRQUNULFlBQVk7UUFDWixTQUFTO1FBQ1QsUUFBUTtRQUNSLHlCQUF5QjtRQUN6QixjQUFjO1FBQ2QsdUJBQXVCO1FBQ3ZCLGVBQWU7UUFDZixjQUFjO1FBQ2QsWUFBWTtRQUNaLFlBQVk7UUFDWixlQUFlO1FBQ2YsYUFBYTtRQUNiLGFBQWE7UUFDYix1QkFBdUI7UUFDdkIsS0FBSztLQUNOLENBQUM7SUFDRixRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2QsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNkLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDbkIsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUVuQixZQUNZLFdBQTJCLEVBQzNCLGtCQUF5QyxFQUMzQyxXQUEyQjtRQUNuQyxLQUFLLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFIN0IsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzNCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBdUI7UUFDM0MsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBRW5DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVPLGlCQUFpQixHQUFHLEdBQXFDLEVBQUU7UUFDakUsSUFBSSxNQUFNLEdBQXFDLEVBQUUsQ0FBQztRQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDVixLQUFLLEVBQUUsQ0FBQztnQkFDUixLQUFLLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTthQUNwQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFBO0lBRUQsZUFBZSxHQUFHLEdBQUcsRUFBRTtJQUV2QixDQUFDLENBQUE7SUFFRCxpQkFBaUIsR0FBRyxHQUFHLEVBQUU7SUFFekIsQ0FBQyxDQUFBO0lBRUQsdUJBQXVCLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtJQUV6QyxDQUFDLENBQUE7SUFFRCxlQUFlLEdBQUcsR0FBRyxFQUFFO0lBRXZCLENBQUMsQ0FBQTtJQUVELGNBQWMsR0FBRyxHQUFHLEVBQUU7SUFFdEIsQ0FBQyxDQUFBO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFlLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFELENBQUM7dUdBOUVVLFlBQVk7MkZBQVosWUFBWSw2RUNiekIsay9CQW1CQTs7MkZETmEsWUFBWTtrQkFMeEIsU0FBUzsrQkFDRSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJ1Vmlld0Jhc2UgfSBmcm9tICcuLi8uLi9iYXNlLXZpZXdzL3RydS12aWV3LWJhc2UnO1xyXG5pbXBvcnQgeyBUcnVEYXRhQ29udGV4dCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1kYXRhLWNvbnRleHQnO1xyXG5pbXBvcnQgeyBJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uIH0gZnJvbSAnLi4vdG9vbGJhci9jbGFzc2VzL3RydS10b29sYmFyLWRyb3Bkb3duLW9wdGlvbic7XHJcbmltcG9ydCB7IFRydVRleHRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LXRleHQtbWFuYWdlcic7XHJcbmltcG9ydCB7IFRydVdpbmRvd0V2ZW50SGFuZGxlciB9IGZyb20gJy4uL2Rlc2t0b3Avc2VydmljZXMvdHJ1LXdpbmRvdy1ldmVudC1oYW5kbGVyJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RydS1jbG9uZS12aWV3JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJ1LWNsb25lLXZpZXcuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJ1LWNsb25lLXZpZXcuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRydUNsb25lVmlldyBleHRlbmRzIFRydVZpZXdCYXNlIHtcclxuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBsb2FkaW5nTWVzc2FnZTogc3RyaW5nID0gJ1NlYXJjaGluZyBmb3IgcmVsYXRlZCByZWNvcmRzLi4uJztcclxuICBudW1iZXJPZkNvcGllczogQXJyYXk8SVRydVRvb2xiYXJEcm9wZG93bk9wdGlvbj5cclxuICBzZWxlY3RlZE51bWJlck9mQ29waWVzOiBJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uO1xyXG4gIC8vZW50aXR5ID0gc2NvcGUudmlldy5kYXRhLmVudGl0eTtcclxuICAvL2NvbnRleHRGaWx0ZXJzID0gc2NvcGUudmlldy5kYXRhLmNvbnRleHRGaWx0ZXJzO1xyXG4gIC8vbW9kZWwgPSBkYXRhU2VydmljZS5tb2RlbDtcclxuICAvL2NoaWxkTG9va3VwcyA9IFtdO1xyXG4gIC8vcm9vdE5vZGUgPSBuZXcgTm9kZShudWxsLCB0aGlzLnRhYmxlTmFtZSwgdGhpcy50YWJsZU5hbWUsIGZhbHNlLCB0cnVlLCBudWxsLCBudWxsLCB0cnVlKTtcclxuICBpZ25vcmVQcm9wZXJ0eUxpc3QgPSBbXHJcbiAgICAnQ3JlYXRlZFJlZicsXHJcbiAgICAnQ3JlYXRlZCcsXHJcbiAgICAnVXBkYXRlZFJlZicsXHJcbiAgICAnVXBkYXRlZCcsXHJcbiAgICAncm93dmVyJyxcclxuICAgICdfY3VzdG9tVmFsaWRhdGlvbkVycm9ycycsXHJcbiAgICAnZW50aXR5QXNwZWN0JyxcclxuICAgICdfYXNzb2NpYXRlZERhdGFDYWNoZWQnLFxyXG4gICAgJ19iYWNraW5nU3RvcmUnLFxyXG4gICAgJ19zZXREZWZhdWx0cycsXHJcbiAgICAnXyR0eXBlTmFtZScsXHJcbiAgICAnZW50aXR5VHlwZScsXHJcbiAgICAnXyRpbnRlcmNlcHRvcicsXHJcbiAgICAnZ2V0UHJvcGVydHknLFxyXG4gICAgJ3NldFByb3BlcnR5JyxcclxuICAgICdfcGVuZGluZ0JhY2tpbmdTdG9yZXMnLFxyXG4gICAgJ1JlZidcclxuICBdO1xyXG4gIGRhdGFUcmVlID0gW107XHJcbiAgZmxhdExpc3QgPSBbXTtcclxuICBjaGlsZEZsYXRMaXN0ID0gW107XHJcbiAgcHJvY2Vzc2VkQ291bnQgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCB0ZXh0TWFuYWdlcjogVHJ1VGV4dE1hbmFnZXIsXHJcbiAgICBwcm90ZWN0ZWQgd2luZG93RXZlbnRIYW5kbGVyOiBUcnVXaW5kb3dFdmVudEhhbmRsZXIsXHJcbiAgICBwcml2YXRlIGRhdGFDb250ZXh0OiBUcnVEYXRhQ29udGV4dCkge1xyXG4gICAgc3VwZXIodGV4dE1hbmFnZXIsIHdpbmRvd0V2ZW50SGFuZGxlcik7XHJcbiAgICB0aGlzLm51bWJlck9mQ29waWVzID0gdGhpcy5nZXROdW1iZXJPZkNvcGllcygpO1xyXG4gICAgdGhpcy5zZWxlY3RlZE51bWJlck9mQ29waWVzID0gdGhpcy5udW1iZXJPZkNvcGllc1swXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TnVtYmVyT2ZDb3BpZXMgPSAoKTogQXJyYXk8SVRydVRvb2xiYXJEcm9wZG93bk9wdGlvbj4gPT4ge1xyXG4gICAgbGV0IGNvcGllczogQXJyYXk8SVRydVRvb2xiYXJEcm9wZG93bk9wdGlvbj4gPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDI1OyBpKyspIHtcclxuICAgICAgY29waWVzLnB1c2goe1xyXG4gICAgICAgIHZhbHVlOiBpLFxyXG4gICAgICAgIGxhYmVsOiBpLnRvU3RyaW5nKClcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29waWVzO1xyXG4gIH1cclxuXHJcbiAgb25FeHBhbmRDbGlja2VkID0gKCkgPT4ge1xyXG5cclxuICB9XHJcbiAgICAgXHJcbiAgb25Db2xsYXBzZUNsaWNrZWQgPSAoKSA9PiB7XHJcblxyXG4gIH1cclxuXHJcbiAgb25OdW1iZXJPZkNvcGllc0NoYW5nZWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG5cclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsQ2xpY2tlZCA9ICgpID0+IHtcclxuXHJcbiAgfVxyXG5cclxuICBvbkNsb25lQ2xpY2tlZCA9ICgpID0+IHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZW50aXRpZXMgPSB0aGlzLnZpZXcuZW50aXRpZXMgYXMgYW55O1xyXG4gICAgdGhpcy5lbnRpdHkgPSB0aGlzLmVudGl0aWVzW3RoaXMudmlldy5lbnRpdHlJbmRleF07XHJcbiAgICB0aGlzLnNldEVudGl0eURpc3BsYXlWYWx1ZXModGhpcy52aWV3LndpbmRvdy50YWJsZU5hbWUpO1xyXG4gIH1cclxufVxyXG5cclxuIiwiPGRpdj5cclxuICA8dHJ1LXRvb2xiYXI+XHJcbiAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIidleHBhbmQtaWNvbidcIiBbdG9vbHRpcF09XCInRXhwYW5kJ1wiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCIgKG9uQ2xpY2spPVwib25FeHBhbmRDbGlja2VkKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ2NvbGxhcHNlLWljb24nXCIgW3Rvb2x0aXBdPVwiJ0NvbGxhcHNlJ1wiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCIgKG9uQ2xpY2spPVwib25Db2xsYXBzZUNsaWNrZWQoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgPHRydS10b29sYmFyLXRleHQgW3RleHRdPVwiJ0NvcGllczonXCI+PC90cnUtdG9vbGJhci10ZXh0PlxyXG4gICAgPHRydS10b29sYmFyLWRyb3Bkb3duIFtvcHRpb25zXT1cIm51bWJlck9mQ29waWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkT3B0aW9uKV09XCJzZWxlY3RlZE51bWJlck9mQ29waWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbk51bWJlck9mQ29waWVzQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICA8L3RydS10b29sYmFyLWRyb3Bkb3duPlxyXG4gIDwvdHJ1LXRvb2xiYXI+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1kaWFsb2ctY29udGVudFwiPlxyXG5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWRpYWxvZy1mb290ZXJcIj5cclxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwib25DYW5jZWxDbGlja2VkKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uQ2xvbmVDbGlja2VkKClcIj5DbG9uZTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
253
+ args: [{ selector: 'tru-clone-view', template: "<div>\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'expand-icon'\" [tooltip]=\"'Expand'\" [disabled]=\"loading\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"loading\" (onClick)=\"onCollapseClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-text [text]=\"'Copies:'\"></tru-toolbar-text>\r\n <tru-toolbar-dropdown [options]=\"numberOfCopies\"\r\n [(selectedOption)]=\"selectedNumberOfCopies\"\r\n [disabled]=\"loading\"\r\n (selectionChange)=\"onNumberOfCopiesChanged($event)\">\r\n </tru-toolbar-dropdown>\r\n </tru-toolbar>\r\n <div class=\"tru-dialog-content\">\r\n\r\n </div>\r\n <div class=\"tru-dialog-footer\">\r\n <button mat-button (click)=\"onCancel()\">Cancel</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"onClone()\" (keyup.enter)=\"onClone()\">Clone</button>\r\n </div>\r\n</div>\r\n", styles: [".tru-dialog-footer{position:absolute;left:0;right:0;bottom:0;padding:4px 15px 5px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px #fff}.tru-dialog-footer button{height:30px}::ng-deep tru-toolbar-button svg{height:20px!important}\n"] }]
254
+ }], ctorParameters: () => [{ type: i1.TruTextManager }, { type: i2.TruWindowEventHandler }, { type: i3.TruDataContext }, { type: i4.TruModelTableLookup }, { type: i5.TruModelPropertyLookup }, { type: i6.TruModelTypeLookup }, { type: i7.TruUiNotification }] });
255
+ class Node {
256
+ ref;
257
+ tableName;
258
+ displayName;
259
+ checked;
260
+ child;
261
+ childNodes;
262
+ showEntities = false;
263
+ pathFromRoot;
264
+ nodes;
265
+ root;
266
+ parent;
267
+ entity;
268
+ constructor(ref, tableName, displayName, child, checked, childEntities, pathFromRoot, root, parent, entity) {
269
+ this.ref = ref;
270
+ this.tableName = tableName;
271
+ this.displayName = displayName;
272
+ this.checked = checked;
273
+ this.child = child;
274
+ this.childNodes = childEntities;
275
+ this.pathFromRoot = pathFromRoot;
276
+ this.root = root;
277
+ this.parent = parent;
278
+ this.entity = entity;
279
+ }
280
+ onGroupDisplay = () => {
281
+ var currentValue = this.showEntities = !this.showEntities;
282
+ this.nodes.find((n) => {
283
+ n.showEntities = currentValue;
284
+ });
285
+ };
286
+ onCheckedChanged = () => {
287
+ if (this.checked) {
288
+ if (this.child) {
289
+ var p = this.parent;
290
+ while (p) {
291
+ p.checked = true;
292
+ p = p.parent;
293
+ }
294
+ }
295
+ else {
296
+ this.nodes.find((n) => { n.checked = true; });
297
+ }
298
+ }
299
+ else {
300
+ if (this.child) {
301
+ var allUnchecked = this.parent.nodes.every((n) => {
302
+ return n.checked === false;
303
+ });
304
+ if (allUnchecked)
305
+ this.parent.checked = false;
306
+ }
307
+ else {
308
+ var uncheckChildNodes = (node) => {
309
+ node.nodes.find((n) => {
310
+ uncheckChildNodes(n);
311
+ n.checked = false;
312
+ });
313
+ };
314
+ this.nodes.find((n) => {
315
+ uncheckChildNodes(n);
316
+ n.checked = false;
317
+ });
318
+ }
319
+ }
320
+ };
321
+ }
322
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWNsb25lLXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvY2xvbmUtdmlldy90cnUtY2xvbmUtdmlldy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9jbG9uZS12aWV3L3RydS1jbG9uZS12aWV3Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBZ0I3RCxNQUFNLE9BQU8sWUFBYSxTQUFRLFdBQVc7SUFtQy9CO0lBQ0E7SUFDRjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBeENWLE9BQU8sR0FBWSxJQUFJLENBQUM7SUFDeEIsY0FBYyxHQUFXLGtDQUFrQyxDQUFDO0lBQzVELGNBQWMsQ0FBa0M7SUFDaEQsc0JBQXNCLENBQTRCO0lBQ2xELGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDdEIsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUNsQixRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRyxrQkFBa0IsR0FBRztRQUNuQixZQUFZO1FBQ1osU0FBUztRQUNULFlBQVk7UUFDWixTQUFTO1FBQ1QsUUFBUTtRQUNSLHlCQUF5QjtRQUN6QixjQUFjO1FBQ2QsdUJBQXVCO1FBQ3ZCLGVBQWU7UUFDZixjQUFjO1FBQ2QsWUFBWTtRQUNaLFlBQVk7UUFDWixlQUFlO1FBQ2Ys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QkFDZixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtvQkFDcEQsT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQztnQkFDN0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxZQUFZO29CQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNoQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxpQkFBaUIsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO3dCQUN6QixpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDckIsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3BCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQztnQkFDRixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO29CQUN6QixpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckIsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUE7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcnVWaWV3QmFzZSB9IGZyb20gJy4uLy4uL2Jhc2Utdmlld3MvdHJ1LXZpZXctYmFzZSc7XHJcbmltcG9ydCB7IFRydURhdGFDb250ZXh0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LWRhdGEtY29udGV4dCc7XHJcbmltcG9ydCB7IElUcnVUb29sYmFyRHJvcGRvd25PcHRpb24gfSBmcm9tICcuLi90b29sYmFyL2NsYXNzZXMvdHJ1LXRvb2xiYXItZHJvcGRvd24tb3B0aW9uJztcclxuaW1wb3J0IHsgVHJ1VGV4dE1hbmFnZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtdGV4dC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgVHJ1V2luZG93RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vZGVza3RvcC9zZXJ2aWNlcy90cnUtd2luZG93LWV2ZW50LWhhbmRsZXInO1xyXG5pbXBvcnQgeyBUcnVNb2RlbFRhYmxlTG9va3VwIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LW1vZGVsLXRhYmxlLWxvb2t1cCc7XHJcbmltcG9ydCB7IFRydVVpTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LXVpLW5vdGlmaWNhdGlvbic7XHJcbmltcG9ydCB7IFRydU1vZGVsUHJvcGVydHlMb29rdXAgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtbW9kZWwtcHJvcGVydHktbG9va3VwJztcclxuaW1wb3J0IHsgVHJ1TW9kZWxUeXBlTG9va3VwIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LW1vZGVsLXR5cGUtbG9va3VwJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RydS1jbG9uZS12aWV3JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJ1LWNsb25lLXZpZXcuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJ1LWNsb25lLXZpZXcuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRydUNsb25lVmlldyBleHRlbmRzIFRydVZpZXdCYXNlIHtcclxuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBsb2FkaW5nTWVzc2FnZTogc3RyaW5nID0gJ1NlYXJjaGluZyBmb3IgcmVsYXRlZCByZWNvcmRzLi4uJztcclxuICBudW1iZXJPZkNvcGllczogQXJyYXk8SVRydVRvb2xiYXJEcm9wZG93bk9wdGlvbj5cclxuICBzZWxlY3RlZE51bWJlck9mQ29waWVzOiBJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uO1xyXG4gIGNvbnRleHRGaWx0ZXJzID0gbnVsbDtcclxuICBjaGlsZExvb2t1cHMgPSBbXTtcclxuICByb290Tm9kZSA9IG5ldyBOb2RlKG51bGwsIHRoaXMudGFibGVOYW1lLCB0aGlzLnRhYmxlTmFtZSwgZmFsc2UsIHRydWUsIG51bGwsIG51bGwsIHRydWUsIG51bGwsIG51bGwpO1xyXG4gIGlnbm9yZVByb3BlcnR5TGlzdCA9IFtcclxuICAgICdDcmVhdGVkUmVmJyxcclxuICAgICdDcmVhdGVkJyxcclxuICAgICdVcGRhdGVkUmVmJyxcclxuICAgICdVcGRhdGVkJyxcclxuICAgICdyb3d2ZXInLFxyXG4gICAgJ19jdXN0b21WYWxpZGF0aW9uRXJyb3JzJyxcclxuICAgICdlbnRpdHlBc3BlY3QnLFxyXG4gICAgJ19hc3NvY2lhdGVkRGF0YUNhY2hlZCcsXHJcbiAgICAnX2JhY2tpbmdTdG9yZScsXHJcbiAgICAnX3NldERlZmF1bHRzJyxcclxuICAgICdfJHR5cGVOYW1lJyxcclxuICAgICdlbnRpdHlUeXBlJyxcclxuICAgICdfJGludGVyY2VwdG9yJyxcclxuICAgICdnZXRQcm9wZXJ0eScsXHJcbiAgICAnc2V0UHJvcGVydHknLFxyXG4gICAgJ19wZW5kaW5nQmFja2luZ1N0b3JlcycsXHJcbiAgICAnUmVmJ1xyXG4gIF07XHJcbiAgZGF0YVRyZWUgPSBbXTtcclxuICBmbGF0TGlzdDogQXJyYXk8Tm9kZT4gPSBbXTtcclxuICBjaGlsZEZsYXRMaXN0OiBBcnJheTxOb2RlPiA9IFtdO1xyXG4gIHByb2Nlc3NlZENvdW50OiBudW1iZXIgPSAwO1xyXG4gIGRvbmVQcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzcGxheVRyZWUgPSBbdGhpcy5yb290Tm9kZV07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHRleHRNYW5hZ2VyOiBUcnVUZXh0TWFuYWdlcixcclxuICAgIHByb3RlY3RlZCB3aW5kb3dFdmVudEhhbmRsZXI6IFRydVdpbmRvd0V2ZW50SGFuZGxlcixcclxuICAgIHByaXZhdGUgZGF0YUNvbnRleHQ6IFRydURhdGFDb250ZXh0LFxyXG4gICAgcHJpdmF0ZSBtb2RlbFRhYmxlTG9va3VwOiBUcnVNb2RlbFRhYmxlTG9va3VwLFxyXG4gICAgcHJpdmF0ZSBtb2RlbFByb3BlcnR5TG9va3VwOiBUcnVNb2RlbFByb3BlcnR5TG9va3VwLFxyXG4gICAgcHJpdmF0ZSBtb2RlbFR5cGVMb29rdXA6IFRydU1vZGVsVHlwZUxvb2t1cCxcclxuICAgIHByaXZhdGUgdWlOb3RpZmljYXRpb246IFRydVVpTm90aWZpY2F0aW9uKSB7XHJcbiAgICBzdXBlcih0ZXh0TWFuYWdlciwgd2luZG93RXZlbnRIYW5kbGVyKTtcclxuICAgIHRoaXMubnVtYmVyT2ZDb3BpZXMgPSB0aGlzLmdldE51bWJlck9mQ29waWVzKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkTnVtYmVyT2ZDb3BpZXMgPSB0aGlzLm51bWJlck9mQ29waWVzWzBdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXROdW1iZXJPZkNvcGllcyA9ICgpOiBBcnJheTxJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uPiA9PiB7XHJcbiAgICBsZXQgY29waWVzOiBBcnJheTxJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uPiA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMjU7IGkrKykge1xyXG4gICAgICBjb3BpZXMucHVzaCh7XHJcbiAgICAgICAgdmFsdWU6IGksXHJcbiAgICAgICAgbGFiZWw6IGkudG9TdHJpbmcoKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb3BpZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb3BlcnR5SXNBbGxvd2VkID0gKHByb3BlcnR5TmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gdGFibGVOYW1lICsgJ1JlZicpIHJldHVybiBmYWxzZTtcclxuICAgIGlmIChwcm9wZXJ0eU5hbWUuc3RhcnRzV2l0aCgnbycpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBsZXQgcHJvcGVydHkgPSB0aGlzLm1vZGVsUHJvcGVydHlMb29rdXAubG9va3VwLmdldChwcm9wZXJ0eU5hbWUpO1xyXG4gICAgaWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LmV4Y2x1ZGVGcm9tQ2xvbmluZykgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuaWdub3JlUHJvcGVydHlMaXN0LnNvbWUoZnVuY3Rpb24gKHByb3BlcnR5VG9JZ25vcmUpIHsgcmV0dXJuIHByb3BlcnR5VG9JZ25vcmUgPT09IHByb3BlcnR5TmFtZTsgfSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlICBnZXRQcm90b3R5cGVQcm9wZXJ0aWVzID0gKG9iajogYW55KSA9PiB7XHJcbiAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICBmb3IgKHZhciBwcm9wIGluIG9iaikge1xyXG4gICAgICBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKHByb3ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDaGlsZFByb3BlcnRpZXNGb3JDdXJyZW50RW50aXR5ID0gKGN1cnJlbnRFbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgLy92YXIgcHJvcGVydHlOYW1lcyA9IE9iamVjdC5rZXlzKE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50RW50aXR5KSk7XHJcbiAgICBsZXQgcHJvcGVydHlOYW1lcyA9IE9iamVjdC5rZXlzKGN1cnJlbnRFbnRpdHkpO1xyXG4gICAgbGV0IG5hdmlnYXRpb25Qcm9wZXJ0eU5hbWVzID0gcHJvcGVydHlOYW1lcy5maWx0ZXIoKG4pID0+IHsgcmV0dXJuIG4uc3RhcnRzV2l0aCgnbycpOyB9KTtcclxuICAgIGxldCBjaGlsZE5hdmlnYXRpb25Qcm9wZXJ0eU5hbWVzID0gbmF2aWdhdGlvblByb3BlcnR5TmFtZXMuZmlsdGVyKChuKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkTG9va3Vwcy5zb21lKChsb29rdXA6IGFueSkgPT4geyByZXR1cm4gJ28nICsgbG9va3VwLnBsdXJhbFRhYmxlTmFtZSA9PT0gbjsgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgY2hpbGRQcm9wZXJ0aWVzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBjaGlsZE5hdmlnYXRpb25Qcm9wZXJ0eU5hbWVzLmZpbHRlcihmdW5jdGlvbiAobikge1xyXG4gICAgICBpZiAoY3VycmVudEVudGl0eVtuXSAmJiBjdXJyZW50RW50aXR5W25dLmxlbmd0aCkgY2hpbGRQcm9wZXJ0aWVzLnB1c2goY3VycmVudEVudGl0eVtuXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY2hpbGRQcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSAgZ2V0VHlwZUZyb21FbnRpdHlUeXBlTmFtZSA9ICh0eXBlTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICB2YXIgcDFzID0gdHlwZU5hbWUuc3BsaXQoJywnKVswXTtcclxuICAgIHZhciBwMnMgPSBwMXMuc3BsaXQoJy4nKTtcclxuICAgIHJldHVybiBwMnNbcDJzLmxlbmd0aCAtIDFdO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgYnVpbGRDbG9uZVRyZWUgPSAoY3VycmVudEVudGl0eTogYW55LCBub2RlOiBhbnkpID0+IHtcclxuICB2YXIgY2hpbGRQcm9wZXJ0aWVzID0gdGhpcy5nZXRDaGlsZFByb3BlcnRpZXNGb3JDdXJyZW50RW50aXR5KGN1cnJlbnRFbnRpdHkpO1xyXG4gIGNoaWxkUHJvcGVydGllcy5mb3JFYWNoKChjaGlsZEVudGl0aWVzOiBhbnkpID0+IHtcclxuICAgIGxldCB0eXBlID0gdGhpcy5nZXRUeXBlRnJvbUVudGl0eVR5cGVOYW1lKGNoaWxkRW50aXRpZXNbMF0uJHR5cGUpO1xyXG4gICAgbGV0IGNoaWxkTG9va3VwID0gdGhpcy5tb2RlbFRhYmxlTG9va3VwLmxvb2t1cC5nZXQodHlwZSk7XHJcbiAgICBsZXQgZ3JvdXBOb2RlID0gbmV3IE5vZGUoXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIGNoaWxkRW50aXRpZXNbMF0uY29uc3RydWN0b3IubmFtZSxcclxuICAgICAgY2hpbGRMb29rdXA/LnBsdXJhbExhYmVsIGFzIHN0cmluZyxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIHRydWUsXHJcbiAgICAgIFtdLFxyXG4gICAgICAnJyxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIG5vZGUsXHJcbiAgICAgIG51bGxcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5mbGF0TGlzdC5wdXNoKGdyb3VwTm9kZSk7XHJcblxyXG4gICAgY2hpbGRFbnRpdGllcy5mb3JFYWNoKChjaGlsZEVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgIGxldCB0eXBlID0gdGhpcy5nZXRUeXBlRnJvbUVudGl0eVR5cGVOYW1lKGNoaWxkRW50aXR5LiR0eXBlKTtcclxuICAgICAgbGV0IGNoaWxkTm9kZSA9IG5ldyBOb2RlKFxyXG4gICAgICAgIGNoaWxkRW50aXR5W3R5cGUgKyAnUmVmJ10sXHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICB0eXBlLFxyXG4gICAgICAgIHRydWUsXHJcbiAgICAgICAgdHJ1ZSxcclxuICAgICAgICBbXSxcclxuICAgICAgICAnJyxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICBncm91cE5vZGUsXHJcbiAgICAgICAgY2hpbGRFbnRpdHlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuY2hpbGRGbGF0TGlzdC5wdXNoKGNoaWxkTm9kZSk7XHJcbiAgICAgIGdyb3VwTm9kZS5ub2Rlcy5wdXNoKGNoaWxkTm9kZSk7XHJcbiAgICAgIHRoaXMuYnVpbGRDbG9uZVRyZWUoY2hpbGRFbnRpdHksIGNoaWxkTm9kZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBub2RlLm5vZGVzLnB1c2goZ3JvdXBOb2RlKTtcclxuICB9KTtcclxufVxyXG5cclxuICBwcml2YXRlIGFzeW5jRm9yRWFjaFJlY29yZElkID0gKGFycjogYW55LCBjYjogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gYXJyLnJlZHVjZSgocDogYW55LCBjOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHAudGhlbigoKSA9PiBjYihjKSk7XHJcbiAgICB9LCBQcm9taXNlLnJlc29sdmUoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZldGNoUmVjb3JkSWQgPSAoY2hpbGQ6IGFueSkgPT4ge1xyXG4gICAgdmFyIGMgPSBjaGlsZDtcclxuICAgIHZhciBkYXRhID0ge1xyXG4gICAgICByZWY6IGMucmVmLFxyXG4gICAgICB0YWJsZU5hbWU6IGMudGFibGVOYW1lXHJcbiAgICB9O1xyXG4gICAgZGF0YSA9IHRoaXMudGV4dE1hbmFnZXIuZm9ybWF0QXNVcmxQYXJhbWV0ZXJzKGRhdGEpO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KSA9PiB7XHJcbiAgICAgIGMuZGlzcGxheU5hbWUgPSBjaGlsZC5lbnRpdHkuSElEO1xyXG4gICAgICB0aGlzLnByb2Nlc3NlZENvdW50Kys7XHJcbiAgICAgIHRoaXMubG9hZGluZ01lc3NhZ2UgPSAnRm9ybWF0dGluZyBkYXRhLi4ucHJvY2Vzc2VkICgnICsgdGhpcy5wcm9jZXNzZWRDb3VudCArICcvJyArIHRoaXMuY2hpbGRGbGF0TGlzdC5sZW5ndGggKyAnKSByZWNvcmRzJztcclxuICAgICAgaWYgKHRoaXMucHJvY2Vzc2VkQ291bnQgPj0gdGhpcy5jaGlsZEZsYXRMaXN0Lmxlbmd0aClcclxuICAgICAgICB0aGlzLmxvYWRpbmdNZXNzYWdlID0gJ1JlbmRlcmluZyB0cmVlLi4uJztcclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRvbmUgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmRvbmVQcm9jZXNzaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJhdmVyc2UgPSAobm9kZTogYW55LCBjdXJyZW50RW50aXR5OiBhbnkpID0+IHtcclxuICAgIHZhciBncm91cCA9ICFub2RlLmNoaWxkO1xyXG4gICAgaWYgKGdyb3VwKSB7XHJcbiAgICAgIHZhciBncm91cE5vZGVzID0gbm9kZS5ub2RlcztcclxuICAgICAgZ3JvdXBOb2Rlcy5mb3JFYWNoKChncm91cE5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChncm91cE5vZGUuY2hlY2tlZClcclxuICAgICAgICAgIGdyb3VwTm9kZS5ub2Rlcy5mb3JFYWNoKChjaGlsZE5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRyYXZlcnNlKGNoaWxkTm9kZSwgY3VycmVudEVudGl0eSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAobm9kZS5jaGVja2VkKSB7XHJcbiAgICAgICAgbGV0IHRhYmxlVHlwZSA9IHRoaXMubW9kZWxUeXBlTG9va3VwLmdldFR5cGUodGhpcy50YWJsZU5hbWUpO1xyXG4gICAgICAgIGxldCBuZXdFbnRpdHkgPSB0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLmFkZCh0YWJsZVR5cGUsIHRoaXMuY29udGV4dEZpbHRlcnMpO1xyXG4gICAgICAgIHR5cGUgT2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIG5ld0VudGl0eTtcclxuICAgICAgICB0aGlzLmdldFByb3RvdHlwZVByb3BlcnRpZXMobmV3RW50aXR5KS5mb3JFYWNoKChwcm9wZXJ0eU5hbWUpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5SXNBbGxvd2VkKHByb3BlcnR5TmFtZSwgbm9kZS50YWJsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIG5ld0VudGl0eVtwcm9wZXJ0eU5hbWUgYXMgT2JqZWN0S2V5XSA9IG5vZGUuZW50aXR5W3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG5ld0VudGl0eS5zZXRQcm9wZXJ0eSEoJ19hc3NvY2lhdGVkRGF0YUNhY2hlZCcsIHRydWUpO1xyXG5cclxuICAgICAgICBsZXQgY2hpbGRMb29rdXAgPSB0aGlzLm1vZGVsVGFibGVMb29rdXAubG9va3VwLmdldChub2RlLnRhYmxlTmFtZSk7XHJcbiAgICAgICAgY3VycmVudEVudGl0eVsnbycgKyBjaGlsZExvb2t1cCEucGx1cmFsTmFtZV0ucHVzaChuZXdFbnRpdHkpO1xyXG4gICAgICAgIGxldCBjaGlsZE5vZGVzID0gbm9kZS5ub2RlcztcclxuICAgICAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hpbGROb2RlLmNoZWNrZWQpXHJcbiAgICAgICAgICAgIGNoaWxkTm9kZS5ub2Rlcy5mb3JFYWNoKChncm91cE5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudHJhdmVyc2UoZ3JvdXBOb2RlLCBuZXdFbnRpdHkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YUZvckNsb25pbmcgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLmNsb25lKHtcclxuICAgICAgcmVmOiB0aGlzLmVudGl0eS5SZWYsXHJcbiAgICAgIHRhYmxlTmFtZTogdGhpcy50YWJsZU5hbWVcclxuICAgIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhVHJlZSA9IHJlc3BvbnNlLmRhdGFbMF07XHJcbiAgICAgICAgdGhpcy5idWlsZENsb25lVHJlZSh0aGlzLmRhdGFUcmVlLCB0aGlzLnJvb3ROb2RlKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nTWVzc2FnZSA9ICdGb3JtYXR0aW5nIGRhdGEuLi4oMC8nICsgdGhpcy5jaGlsZEZsYXRMaXN0Lmxlbmd0aCArICcpIHJlY29yZHMnO1xyXG4gICAgICAgIHRoaXMuYXN5bmNGb3JFYWNoUmVjb3JkSWQodGhpcy5jaGlsZEZsYXRMaXN0LCB0aGlzLmZldGNoUmVjb3JkSWQpLnRoZW4odGhpcy5kb25lKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5VHJlZSA9IFt0aGlzLnJvb3ROb2RlXTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChleDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgdGhpcy51aU5vdGlmaWNhdGlvbi5lcnJvcignU2VydmVyIEVycm9yOiAnICsgZXguc3RhdHVzLCBbZXguZXJyb3IuTWVzc2FnZV0pKVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2xvbmUgPSAoKSA9PiB7XHJcbiAgICBsZXQgY29waWVzID0gdGhpcy5zZWxlY3RlZE51bWJlck9mQ29waWVzLnZhbHVlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3BpZXM7IGkrKykge1xyXG4gICAgICBsZXQgdGFibGVUeXBlID0gdGhpcy5tb2RlbFR5cGVMb29rdXAuZ2V0VHlwZSh0aGlzLnRhYmxlTmFtZSk7XHJcbiAgICAgIGxldCBuZXdFbnRpdHkgPSB0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLmFkZCh0YWJsZVR5cGUsIHRoaXMuY29udGV4dEZpbHRlcnMpO1xyXG4gICAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBuZXdFbnRpdHk7XHJcbiAgICAgIHRoaXMuZ2V0UHJvdG90eXBlUHJvcGVydGllcyh0aGlzLmVudGl0eSkuZm9yRWFjaCgocHJvcGVydHlOYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eUlzQWxsb3dlZChwcm9wZXJ0eU5hbWUsIHRoaXMudGFibGVOYW1lKSkge1xyXG4gICAgICAgICAgbmV3RW50aXR5W3Byb3BlcnR5TmFtZSBhcyBPYmplY3RLZXldID0gdGhpcy5lbnRpdHlbcHJvcGVydHlOYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbmV3RW50aXR5LnNldFByb3BlcnR5ISgnX2Fzc29jaWF0ZWREYXRhQ2FjaGVkJywgdHJ1ZSk7XHJcblxyXG4gICAgICB0aGlzLnRyYXZlcnNlKHRoaXMuZGlzcGxheVRyZWVbMF0sIG5ld0VudGl0eSk7XHJcbiAgICAgIC8vdGhpcy52aWV3LmRhdGEuYWRkKG5ld0VudGl0eSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLndpbmRvd0V2ZW50SGFuZGxlci5jbG9zZSgpO1xyXG4gIH07XHJcblxyXG4gIG9uQ2FuY2VsID0gKCkgPT4ge1xyXG4gICAgdGhpcy53aW5kb3dFdmVudEhhbmRsZXIuY2xvc2UoKTtcclxuICB9O1xyXG5cclxuICBvbkV4cGFuZENsaWNrZWQgPSAoKSA9PiB7XHJcblxyXG4gIH1cclxuICAgICBcclxuICBvbkNvbGxhcHNlQ2xpY2tlZCA9ICgpID0+IHtcclxuXHJcbiAgfVxyXG5cclxuICBvbk51bWJlck9mQ29waWVzQ2hhbmdlZCA9IChldmVudDogYW55KSA9PiB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnRhYmxlTmFtZSA9IHRoaXMudmlldy53aW5kb3cudGFibGVOYW1lO1xyXG4gICAgdGhpcy5lbnRpdGllcyA9IHRoaXMudmlldy5lbnRpdGllcyBhcyBhbnk7XHJcbiAgICB0aGlzLmVudGl0eSA9IHRoaXMuZW50aXRpZXNbdGhpcy52aWV3LmVudGl0eUluZGV4XTtcclxuICAgIHRoaXMuc2V0RW50aXR5RGlzcGxheVZhbHVlcyh0aGlzLnZpZXcud2luZG93LnRhYmxlTmFtZSk7XHJcbiAgICB0aGlzLmdldERhdGFGb3JDbG9uaW5nKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZGF0YVRyZWUubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuZmxhdExpc3QubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuY2hpbGRGbGF0TGlzdC5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5jaGlsZExvb2t1cHMubGVuZ3RoID0gMDtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIE5vZGUge1xyXG4gIHJlZjogbnVtYmVyIHwgbnVsbDtcclxuICB0YWJsZU5hbWU6IHN0cmluZztcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gIGNoZWNrZWQ6IGJvb2xlYW47XHJcbiAgY2hpbGQ6IGFueTtcclxuICBjaGlsZE5vZGVzOiBhbnk7XHJcbiAgc2hvd0VudGl0aWVzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcGF0aEZyb21Sb290OiBzdHJpbmcgfCBudWxsO1xyXG4gIG5vZGVzOiBhbnk7XHJcbiAgcm9vdDogYW55O1xyXG4gIHBhcmVudDogYW55O1xyXG4gIGVudGl0eTogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHJlZjogbnVtYmVyIHwgbnVsbCxcclxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxyXG4gICAgZGlzcGxheU5hbWU6IHN0cmluZyxcclxuICAgIGNoaWxkOiBhbnksXHJcbiAgICBjaGVja2VkOiBib29sZWFuLFxyXG4gICAgY2hpbGRFbnRpdGllczogYW55LFxyXG4gICAgcGF0aEZyb21Sb290OiBzdHJpbmcgfCBudWxsLFxyXG4gICAgcm9vdDogYm9vbGVhbixcclxuICAgIHBhcmVudDogYW55LFxyXG4gICAgZW50aXR5OiBhbnkpIHtcclxuICAgIHRoaXMucmVmID0gcmVmO1xyXG4gICAgdGhpcy50YWJsZU5hbWUgPSB0YWJsZU5hbWU7XHJcbiAgICB0aGlzLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XHJcbiAgICB0aGlzLmNoZWNrZWQgPSBjaGVja2VkO1xyXG4gICAgdGhpcy5jaGlsZCA9IGNoaWxkO1xyXG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGRFbnRpdGllcztcclxuICAgIHRoaXMucGF0aEZyb21Sb290ID0gcGF0aEZyb21Sb290O1xyXG4gICAgdGhpcy5yb290ID0gcm9vdDtcclxuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xyXG4gICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XHJcbiAgfVxyXG5cclxuICBvbkdyb3VwRGlzcGxheSA9ICgpID0+IHtcclxuICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLnNob3dFbnRpdGllcyA9ICF0aGlzLnNob3dFbnRpdGllcztcclxuICAgIHRoaXMubm9kZXMuZmluZCgobjogYW55KSA9PiB7XHJcbiAgICAgIG4uc2hvd0VudGl0aWVzID0gY3VycmVudFZhbHVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNoZWNrZWRDaGFuZ2VkID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tlZCkge1xyXG4gICAgICBpZiAodGhpcy5jaGlsZCkge1xyXG4gICAgICAgIHZhciBwID0gdGhpcy5wYXJlbnQ7XHJcbiAgICAgICAgd2hpbGUgKHApIHtcclxuICAgICAgICAgIHAuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICBwID0gcC5wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubm9kZXMuZmluZCgobjogYW55KSA9PiB7IG4uY2hlY2tlZCA9IHRydWU7IH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5jaGlsZCkge1xyXG4gICAgICAgIHZhciBhbGxVbmNoZWNrZWQgPSB0aGlzLnBhcmVudC5ub2Rlcy5ldmVyeSgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gbi5jaGVja2VkID09PSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoYWxsVW5jaGVja2VkKVxyXG4gICAgICAgICAgdGhpcy5wYXJlbnQuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciB1bmNoZWNrQ2hpbGROb2RlcyA9IChub2RlOiBhbnkpID0+IHtcclxuICAgICAgICAgIG5vZGUubm9kZXMuZmluZCgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHVuY2hlY2tDaGlsZE5vZGVzKG4pO1xyXG4gICAgICAgICAgICBuLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5ub2Rlcy5maW5kKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgIHVuY2hlY2tDaGlsZE5vZGVzKG4pO1xyXG4gICAgICAgICAgbi5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbiIsIjxkaXY+XHJcbiAgPHRydS10b29sYmFyPlxyXG4gICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCInZXhwYW5kLWljb24nXCIgW3Rvb2x0aXBdPVwiJ0V4cGFuZCdcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIChvbkNsaWNrKT1cIm9uRXhwYW5kQ2xpY2tlZCgpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIidjb2xsYXBzZS1pY29uJ1wiIFt0b29sdGlwXT1cIidDb2xsYXBzZSdcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIChvbkNsaWNrKT1cIm9uQ29sbGFwc2VDbGlja2VkKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgIDx0cnUtdG9vbGJhci10ZXh0IFt0ZXh0XT1cIidDb3BpZXM6J1wiPjwvdHJ1LXRvb2xiYXItdGV4dD5cclxuICAgIDx0cnUtdG9vbGJhci1kcm9wZG93biBbb3B0aW9uc109XCJudW1iZXJPZkNvcGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE9wdGlvbildPVwic2VsZWN0ZWROdW1iZXJPZkNvcGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25OdW1iZXJPZkNvcGllc0NoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgPC90cnUtdG9vbGJhci1kcm9wZG93bj5cclxuICA8L3RydS10b29sYmFyPlxyXG4gIDxkaXYgY2xhc3M9XCJ0cnUtZGlhbG9nLWNvbnRlbnRcIj5cclxuXHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1kaWFsb2ctZm9vdGVyXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uQ2xvbmUoKVwiIChrZXl1cC5lbnRlcik9XCJvbkNsb25lKClcIj5DbG9uZTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -2,9 +2,16 @@ import { Injectable } from '@angular/core';
2
2
  import { Subject } from 'rxjs';
3
3
  import * as i0 from "@angular/core";
4
4
  export class TruWindowEventHandler {
5
+ close$ = new Subject();
5
6
  addView$ = new Subject();
6
7
  setWindowTitle$ = new Subject();
7
8
  removeForwadViews$ = new Subject();
9
+ onClose() {
10
+ return this.close$;
11
+ }
12
+ close() {
13
+ this.close$.next(null);
14
+ }
8
15
  onAddView() {
9
16
  return this.addView$;
10
17
  }
@@ -29,4 +36,4 @@ export class TruWindowEventHandler {
29
36
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruWindowEventHandler, decorators: [{
30
37
  type: Injectable
31
38
  }] });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LXdpbmRvdy1ldmVudC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Rlc2t0b3Avc2VydmljZXMvdHJ1LXdpbmRvdy1ldmVudC1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFPL0IsTUFBTSxPQUFPLHFCQUFxQjtJQUN4QixRQUFRLEdBQWtDLElBQUksT0FBTyxFQUF3QixDQUFDO0lBQzlFLGVBQWUsR0FBb0IsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQUN6RCxrQkFBa0IsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUVoRSxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxPQUFPLENBQUMsa0JBQXdDO1FBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWE7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQzt1R0EzQlUscUJBQXFCOzJHQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFRydVdpbmRvd0V2ZW50QXJncyB9IGZyb20gJy4vdHJ1LXdpbmRvdy1ldmVudC1hcmdzJztcclxuaW1wb3J0IHsgVHJ1RGVza3RvcFZpZXdDb25maWcgfSBmcm9tICcuLi9jbGFzc2VzL3RydS1kZXNrdG9wLXZpZXctY29uZmlnJztcclxuaW1wb3J0IHsgVHJ1RW50aXR5QmFzZSB9IGZyb20gJy4uLy4uLy4uL2Jhc2UtY2xhc3Nlcy90cnUtZW50aXR5LWJhc2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVHJ1V2luZG93RXZlbnRIYW5kbGVyIHtcclxuICBwcml2YXRlIGFkZFZpZXckOiBTdWJqZWN0PFRydURlc2t0b3BWaWV3Q29uZmlnPiA9IG5ldyBTdWJqZWN0PFRydURlc2t0b3BWaWV3Q29uZmlnPigpO1xyXG4gIHByaXZhdGUgc2V0V2luZG93VGl0bGUkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgcHJpdmF0ZSByZW1vdmVGb3J3YWRWaWV3cyQ6IFN1YmplY3Q8bnVsbD4gPSBuZXcgU3ViamVjdDxudWxsPigpO1xyXG5cclxuICBvbkFkZFZpZXcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hZGRWaWV3JDtcclxuICB9XHJcblxyXG4gIGFkZFZpZXcod2luZG93QWRkVmlld0V2ZW50OiBUcnVEZXNrdG9wVmlld0NvbmZpZykge1xyXG4gICAgdGhpcy5hZGRWaWV3JC5uZXh0KHdpbmRvd0FkZFZpZXdFdmVudCk7XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZUZvcndhcmRWaWV3cygpIHtcclxuICAgIHJldHVybiB0aGlzLnJlbW92ZUZvcndhZFZpZXdzJDtcclxuICB9XHJcblxyXG4gIHJlbW92ZUZvcndhcmRWaWV3cygpIHtcclxuICAgIHRoaXMucmVtb3ZlRm9yd2FkVmlld3MkLm5leHQobnVsbCk7XHJcbiAgfVxyXG5cclxuICBvblNldFdpbmRvd1RpdGxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2V0V2luZG93VGl0bGUkO1xyXG4gIH1cclxuXHJcbiAgc2V0V2luZG93VGl0bGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZXRXaW5kb3dUaXRsZSQubmV4dCh2YWx1ZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LXdpbmRvdy1ldmVudC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Rlc2t0b3Avc2VydmljZXMvdHJ1LXdpbmRvdy1ldmVudC1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFPL0IsTUFBTSxPQUFPLHFCQUFxQjtJQUN4QixNQUFNLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7SUFDNUMsUUFBUSxHQUFrQyxJQUFJLE9BQU8sRUFBd0IsQ0FBQztJQUM5RSxlQUFlLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7SUFDekQsa0JBQWtCLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7SUFFaEUsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxPQUFPLENBQUMsa0JBQXdDO1FBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWE7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQzt1R0FwQ1UscUJBQXFCOzJHQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFRydVdpbmRvd0V2ZW50QXJncyB9IGZyb20gJy4vdHJ1LXdpbmRvdy1ldmVudC1hcmdzJztcclxuaW1wb3J0IHsgVHJ1RGVza3RvcFZpZXdDb25maWcgfSBmcm9tICcuLi9jbGFzc2VzL3RydS1kZXNrdG9wLXZpZXctY29uZmlnJztcclxuaW1wb3J0IHsgVHJ1RW50aXR5QmFzZSB9IGZyb20gJy4uLy4uLy4uL2Jhc2UtY2xhc3Nlcy90cnUtZW50aXR5LWJhc2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVHJ1V2luZG93RXZlbnRIYW5kbGVyIHtcclxuICBwcml2YXRlIGNsb3NlJDogU3ViamVjdDxudWxsPiA9IG5ldyBTdWJqZWN0PG51bGw+KCk7XHJcbiAgcHJpdmF0ZSBhZGRWaWV3JDogU3ViamVjdDxUcnVEZXNrdG9wVmlld0NvbmZpZz4gPSBuZXcgU3ViamVjdDxUcnVEZXNrdG9wVmlld0NvbmZpZz4oKTtcclxuICBwcml2YXRlIHNldFdpbmRvd1RpdGxlJDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHByaXZhdGUgcmVtb3ZlRm9yd2FkVmlld3MkOiBTdWJqZWN0PG51bGw+ID0gbmV3IFN1YmplY3Q8bnVsbD4oKTtcclxuXHJcbiAgb25DbG9zZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNsb3NlJDtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5jbG9zZSQubmV4dChudWxsKTtcclxuICB9XHJcblxyXG4gIG9uQWRkVmlldygpIHtcclxuICAgIHJldHVybiB0aGlzLmFkZFZpZXckO1xyXG4gIH1cclxuXHJcbiAgYWRkVmlldyh3aW5kb3dBZGRWaWV3RXZlbnQ6IFRydURlc2t0b3BWaWV3Q29uZmlnKSB7XHJcbiAgICB0aGlzLmFkZFZpZXckLm5leHQod2luZG93QWRkVmlld0V2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlRm9yd2FyZFZpZXdzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVtb3ZlRm9yd2FkVmlld3MkO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRm9yd2FyZFZpZXdzKCkge1xyXG4gICAgdGhpcy5yZW1vdmVGb3J3YWRWaWV3cyQubmV4dChudWxsKTtcclxuICB9XHJcblxyXG4gIG9uU2V0V2luZG93VGl0bGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXRXaW5kb3dUaXRsZSQ7XHJcbiAgfVxyXG5cclxuICBzZXRXaW5kb3dUaXRsZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNldFdpbmRvd1RpdGxlJC5uZXh0KHZhbHVlKTtcclxuICB9XHJcbn1cclxuIl19