ng-zenduit 2.0.11 → 2.0.13

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.
@@ -15,18 +15,32 @@ export class ZenduGroupsComponent {
15
15
  this.width = '300px';
16
16
  this.placeholder = 'Select group';
17
17
  this.hideSearch = false;
18
+ this.idProp = 'id';
19
+ this.displayProp = 'name';
18
20
  this.isSelectedAllChange = new EventEmitter();
19
21
  this.checkedChange = new EventEmitter();
20
22
  this.isOpen = false;
23
+ this.openUpward = false;
21
24
  this.searchText = '';
22
25
  this._searchFilteredDataSource = null;
23
26
  this._treeMap = new Map();
24
27
  this._childCountCache = new Map();
25
28
  }
29
+ getChildren(item) {
30
+ return item.children || item.Children || item.Childrens;
31
+ }
32
+ hasChildren(item) {
33
+ const children = this.getChildren(item);
34
+ return !!children && children.length > 0;
35
+ }
26
36
  ngOnChanges(changes) {
27
37
  if (changes['dataSource']) {
28
38
  this.buildTreeLevels();
29
39
  }
40
+ if ((changes['filteredDataSource'] || changes['dataSource']) &&
41
+ this._treeMap.size > 0 && this.filteredDataSource?.length) {
42
+ this.filteredDataSource = this.sortTreeOrder(this.filteredDataSource);
43
+ }
30
44
  }
31
45
  onOutsideClick(event) {
32
46
  if (this.inline || !this.isOpen)
@@ -38,11 +52,18 @@ export class ZenduGroupsComponent {
38
52
  }
39
53
  toggleDropdown() {
40
54
  this.isOpen = !this.isOpen;
41
- if (!this.isOpen) {
55
+ if (this.isOpen) {
56
+ this.openUpward = this.shouldOpenUpward(300);
57
+ }
58
+ else {
42
59
  this.searchText = '';
43
60
  this._searchFilteredDataSource = null;
44
61
  }
45
62
  }
63
+ shouldOpenUpward(dropdownHeight) {
64
+ const rect = this._elementRef.nativeElement.getBoundingClientRect();
65
+ return (window.innerHeight - rect.bottom) < dropdownHeight;
66
+ }
46
67
  get displayDataSource() {
47
68
  if (this._searchFilteredDataSource !== null) {
48
69
  return this._searchFilteredDataSource;
@@ -57,9 +78,9 @@ export class ZenduGroupsComponent {
57
78
  const lowerSearch = this.searchText.toLowerCase();
58
79
  const matchingIds = new Set();
59
80
  for (const el of this.dataSource) {
60
- const name = typeof el.name === 'number' ? el.name.toString() : el.name;
81
+ const name = typeof el[this.displayProp] === 'number' ? el[this.displayProp].toString() : el[this.displayProp];
61
82
  if (name.toLowerCase().includes(lowerSearch)) {
62
- matchingIds.add(el.id);
83
+ matchingIds.add(el[this.idProp]);
63
84
  // Include all ancestors
64
85
  let current = el;
65
86
  while (current.parentId != null) {
@@ -71,10 +92,10 @@ export class ZenduGroupsComponent {
71
92
  }
72
93
  }
73
94
  }
74
- let filtered = this.dataSource.filter(el => matchingIds.has(el.id));
95
+ let filtered = this.dataSource.filter(el => matchingIds.has(el[this.idProp]));
75
96
  // Auto-expand parents when searching
76
97
  for (const el of filtered) {
77
- if (el.children?.length) {
98
+ if (this.hasChildren(el)) {
78
99
  el.isOpen = true;
79
100
  }
80
101
  }
@@ -89,7 +110,7 @@ export class ZenduGroupsComponent {
89
110
  return '';
90
111
  if (count === 1) {
91
112
  const item = this.dataSource.find(d => d.checked);
92
- return item ? item.name.toString() : '';
113
+ return item ? item[this.displayProp]?.toString() : '';
93
114
  }
94
115
  return `${count} selected`;
95
116
  }
@@ -108,20 +129,21 @@ export class ZenduGroupsComponent {
108
129
  buildTreeLevels() {
109
130
  if (!this.dataSource?.length)
110
131
  return;
111
- const hasChildren = this.dataSource.some(d => d.children?.length > 0);
132
+ const hasChildren = this.dataSource.some(d => this.hasChildren(d));
112
133
  if (!hasChildren)
113
134
  return;
114
135
  const map = new Map();
115
136
  for (const item of this.dataSource) {
116
- map.set(item.id, item);
137
+ map.set(item[this.idProp], item);
117
138
  }
118
139
  this._treeMap = map;
119
140
  for (const item of this.dataSource) {
120
- if (item.children?.length) {
121
- for (const childId of item.children) {
141
+ const children = this.getChildren(item);
142
+ if (children?.length) {
143
+ for (const childId of children) {
122
144
  const child = map.get(childId);
123
145
  if (child && child.parentId == null) {
124
- child.parentId = item.id;
146
+ child.parentId = item[this.idProp];
125
147
  }
126
148
  }
127
149
  }
@@ -140,10 +162,11 @@ export class ZenduGroupsComponent {
140
162
  }
141
163
  this._childCountCache.clear();
142
164
  const countChildren = (item) => {
143
- if (!item.children?.length)
165
+ const children = this.getChildren(item);
166
+ if (!children?.length)
144
167
  return 0;
145
168
  let count = 0;
146
- for (const childId of item.children) {
169
+ for (const childId of children) {
147
170
  const child = map.get(childId);
148
171
  if (child) {
149
172
  const childLeaves = countChildren(child);
@@ -153,24 +176,25 @@ export class ZenduGroupsComponent {
153
176
  return count;
154
177
  };
155
178
  for (const item of this.dataSource) {
156
- if (item.children?.length) {
157
- this._childCountCache.set(item.id, countChildren(item));
179
+ if (this.hasChildren(item)) {
180
+ this._childCountCache.set(item[this.idProp], countChildren(item));
158
181
  }
159
182
  }
160
183
  }
161
184
  sortTreeOrder(items) {
162
- const itemSet = new Set(items.map(i => i.id));
185
+ const itemSet = new Set(items.map(i => i[this.idProp]));
163
186
  const visited = new Set();
164
187
  const ordered = [];
165
188
  const visit = (item) => {
166
- if (visited.has(item.id))
189
+ if (visited.has(item[this.idProp]))
167
190
  return;
168
- if (!itemSet.has(item.id))
191
+ if (!itemSet.has(item[this.idProp]))
169
192
  return;
170
- visited.add(item.id);
193
+ visited.add(item[this.idProp]);
171
194
  ordered.push(item);
172
- if (item.children?.length) {
173
- for (const childId of item.children) {
195
+ const children = this.getChildren(item);
196
+ if (children?.length) {
197
+ for (const childId of children) {
174
198
  const child = this._treeMap.get(childId);
175
199
  if (child) {
176
200
  visit(child);
@@ -184,7 +208,7 @@ export class ZenduGroupsComponent {
184
208
  }
185
209
  }
186
210
  for (const item of items) {
187
- if (!visited.has(item.id)) {
211
+ if (!visited.has(item[this.idProp])) {
188
212
  ordered.push(item);
189
213
  }
190
214
  }
@@ -204,10 +228,10 @@ export class ZenduGroupsComponent {
204
228
  dsItem.isOpen = !dsItem.isOpen;
205
229
  }
206
230
  getChildCount(dsItem) {
207
- return this._childCountCache.get(dsItem.id) || 0;
231
+ return this._childCountCache.get(dsItem[this.idProp]) || 0;
208
232
  }
209
233
  isTreeItemIndeterminate(dsItem) {
210
- if (!dsItem.children?.length)
234
+ if (!this.hasChildren(dsItem))
211
235
  return false;
212
236
  const allDescendants = this.getAllDescendants(dsItem);
213
237
  if (!allDescendants.length)
@@ -217,9 +241,10 @@ export class ZenduGroupsComponent {
217
241
  }
218
242
  getAllDescendants(dsItem) {
219
243
  const result = [];
220
- if (!dsItem.children?.length)
244
+ const children = this.getChildren(dsItem);
245
+ if (!children?.length)
221
246
  return result;
222
- for (const childId of dsItem.children) {
247
+ for (const childId of children) {
223
248
  const child = this._treeMap.get(childId);
224
249
  if (child) {
225
250
  result.push(child);
@@ -232,7 +257,7 @@ export class ZenduGroupsComponent {
232
257
  if (dsItem.parentId == null)
233
258
  return;
234
259
  const parent = this._treeMap.get(dsItem.parentId);
235
- if (!parent || !parent.children?.length)
260
+ if (!parent || !this.hasChildren(parent))
236
261
  return;
237
262
  const allDescendants = this.getAllDescendants(parent);
238
263
  const allChecked = allDescendants.every(d => d.checked);
@@ -240,15 +265,16 @@ export class ZenduGroupsComponent {
240
265
  this.updateParentCheckedState(parent);
241
266
  }
242
267
  cascadeToChildren(item) {
243
- if (!item.children?.length)
268
+ const children = this.getChildren(item);
269
+ if (!children?.length)
244
270
  return;
245
271
  this.dataSource.forEach(data => {
246
- if (item.id == data.id) {
272
+ if (item[this.idProp] == data[this.idProp]) {
247
273
  return;
248
274
  }
249
- if (item.children.includes(data.id)) {
275
+ if (children.includes(data[this.idProp])) {
250
276
  data.checked = item.checked;
251
- if (data.children?.length) {
277
+ if (this.hasChildren(data)) {
252
278
  this.cascadeToChildren(data);
253
279
  }
254
280
  }
@@ -261,12 +287,13 @@ export class ZenduGroupsComponent {
261
287
  let current = dsItem;
262
288
  for (let l = dsItem.level; l >= 1; l--) {
263
289
  const parent = this._treeMap.get(current.parentId);
264
- if (!parent?.children?.length) {
290
+ const parentChildren = parent ? this.getChildren(parent) : undefined;
291
+ if (!parentChildren?.length) {
265
292
  isLastFlags.push(true);
266
293
  }
267
294
  else {
268
- const lastChildId = parent.children[parent.children.length - 1];
269
- isLastFlags.push(current.id === lastChildId);
295
+ const lastChildId = parentChildren[parentChildren.length - 1];
296
+ isLastFlags.push(current[this.idProp] === lastChildId);
270
297
  }
271
298
  current = parent;
272
299
  }
@@ -289,10 +316,10 @@ export class ZenduGroupsComponent {
289
316
  }
290
317
  }
291
318
  ZenduGroupsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduGroupsComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
292
- ZenduGroupsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduGroupsComponent, selector: "zen-groups", inputs: { dataSource: "dataSource", filteredDataSource: "filteredDataSource", hideSelectAll: "hideSelectAll", isSelectedAll: "isSelectedAll", inline: "inline", width: "width", placeholder: "placeholder", hideSearch: "hideSearch" }, outputs: { isSelectedAllChange: "isSelectedAllChange", checkedChange: "checkedChange" }, host: { listeners: { "window:mousedown": "onOutsideClick($event)" } }, usesOnChanges: true, ngImport: i0, template: "<!-- Dropdown mode (default) -->\n<div class=\"zen-groups-dropdown\" *ngIf=\"!inline\" [style.width]=\"width\">\n <button class=\"zen-groups-toggle\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{'active': isOpen}\">\n <span class=\"zen-groups-toggle-label\">\n <span *ngIf=\"!selectedLabel\" class=\"zen-groups-placeholder\">{{ placeholder | translate }}</span>\n <span *ngIf=\"selectedLabel\" class=\"zen-groups-value\">{{ selectedLabel }}</span>\n </span>\n <i class=\"material-icons zen-groups-chevron\">expand_more</i>\n </button>\n\n <div class=\"zen-groups-panel\" *ngIf=\"isOpen\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n</div>\n\n<!-- Inline mode (used inside zen-filter) -->\n<div class=\"zen-groups-inline\" *ngIf=\"inline\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n</div>\n\n<!-- Shared tree content -->\n<ng-template #treeContent>\n <div class=\"zen-groups-tree\">\n <div class=\"action-item-checkbox select-all\" *ngIf=\"!hideSelectAll\">\n <zen-checkbox *ngIf=\"dataSource.length === displayDataSource.length\"\n [(checked)]=\"isSelectedAll\"\n [indeterminate]=\"hasActiveItems && !isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll()\">\n </zen-checkbox>\n </div>\n\n <ng-container *ngFor=\"let dsItem of displayDataSource\">\n <div *ngIf=\"isTreeItemVisible(dsItem)\"\n class=\"action-item-checkbox tree-item\"\n [style.padding-left.px]=\"24 + (dsItem.level || 0) * 24\">\n <ng-container *ngIf=\"dsItem.level > 0\">\n <div *ngFor=\"let connector of getTreeConnectors(dsItem); let i = index\"\n class=\"tree-connector\"\n [ngClass]=\"'tree-connector-' + connector\"\n [style.left.px]=\"32 + i * 24\">\n </div>\n </ng-container>\n <div class=\"tree-item-row\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [indeterminate]=\"isTreeItemIndeterminate(dsItem)\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"onCheckChanged(dsItem)\"\n [label]=\"dsItem.name?.toString() | translate\"></zen-checkbox>\n <span *ngIf=\"dsItem.children?.length\"\n class=\"tree-item-badge\">{{ getChildCount(dsItem) }}</span>\n </div>\n <button *ngIf=\"dsItem.children?.length\"\n class=\"tree-item-toggle\"\n (click)=\"toggleTreeNode(dsItem)\">\n <i class=\"material-icons tree-toggle-icon\"\n [class.open]=\"dsItem.isOpen\">expand_more</i>\n </button>\n </div>\n </ng-container>\n\n <div class=\"zen-groups-no-results\" *ngIf=\"searchText && displayDataSource.length === 0\">\n {{ 'No Results Found' | translate }}\n </div>\n </div>\n</ng-template>\n", styles: [".zen-groups-dropdown{position:relative;display:inline-block}.zen-groups-dropdown .zen-groups-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;background:#ffffff;border:1px solid #d0d5dd;border-radius:8px;padding:10px 14px;cursor:pointer;font-family:inherit;font-size:14px;font-weight:400;line-height:20px;color:#344054;transition:border-color .2s;-webkit-appearance:none;appearance:none;outline:none}.zen-groups-dropdown .zen-groups-toggle:hover{border-color:#98a2b3}.zen-groups-dropdown .zen-groups-toggle:focus,.zen-groups-dropdown .zen-groups-toggle.active{border-color:var(--color-primary, #2188d9);box-shadow:0 0 0 3px rgba(var(--color-primary, #2188d9),.12)}.zen-groups-dropdown .zen-groups-toggle.active .zen-groups-chevron{transform:rotate(180deg);color:var(--color-primary, #2188d9)}.zen-groups-dropdown .zen-groups-toggle .zen-groups-toggle-label{flex:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zen-groups-dropdown .zen-groups-toggle .zen-groups-placeholder{color:#667085}.zen-groups-dropdown .zen-groups-toggle .zen-groups-value{color:#344054}.zen-groups-dropdown .zen-groups-toggle .zen-groups-chevron{font-size:20px;color:#667085;transition:transform .2s,color .2s;flex-shrink:0;margin-left:8px}.zen-groups-dropdown .zen-groups-panel{position:absolute;top:calc(100% + 4px);left:0;width:100%;background:#ffffff;border:1px solid #eaecf0;border-radius:8px;box-shadow:0 4px 6px -2px #10182808,0 12px 16px -4px #10182814;z-index:10;max-height:300px;overflow-y:auto;padding:4px 0}.zen-groups-search{padding:8px 12px;border-bottom:1px solid #eaecf0}.zen-groups-tree .zen-groups-no-results{padding:10px 24px;color:#667085;font-size:14px;font-weight:400}.zen-groups-tree .select-all{font-weight:500}.zen-groups-tree .action-item-checkbox{font-weight:500;font-size:14px;line-height:20px;color:#344054;padding:0 24px}.zen-groups-tree .action-item-checkbox:hover{background:transparent}.zen-groups-tree .tree-item{display:flex;align-items:center;justify-content:space-between;position:relative}.zen-groups-tree .tree-item .tree-item-row{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.zen-groups-tree .tree-item .tree-item-badge{background:#f1f7fe;color:#105494;font-size:12px;font-weight:500;line-height:18px;padding:2px 8px;border-radius:16px;white-space:nowrap}.zen-groups-tree .tree-item .tree-connector{position:absolute;top:0;width:1px;background:#eaecf0;pointer-events:none}.zen-groups-tree .tree-item .tree-connector.tree-connector-through,.zen-groups-tree .tree-item .tree-connector.tree-connector-branch,.zen-groups-tree .tree-item .tree-connector.tree-connector-elbow{bottom:0}.zen-groups-tree .tree-item .tree-connector.tree-connector-none{display:none}.zen-groups-tree .tree-item .tree-item-toggle{background:none;border:none;padding:0;cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center;width:20px;height:20px;flex-shrink:0}.zen-groups-tree .tree-item .tree-item-toggle .tree-toggle-icon{font-size:20px;color:#667085;transition:transform .2s;transform:rotate(-90deg)}.zen-groups-tree .tree-item .tree-item-toggle .tree-toggle-icon.open{transform:rotate(0)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ZenduCheckboxComponent, selector: "zen-checkbox", inputs: ["checked", "label", "labelColor", "disabled", "disableValueChange", "indeterminate", "imageUrl", "size", "supportingText"], outputs: ["checkedChange"] }, { kind: "component", type: i3.ZenduSearchBoxComponent, selector: "zen-search-box", inputs: ["text", "delay", "autoFocus", "disabled", "placeholder"], outputs: ["textChange"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
319
+ ZenduGroupsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduGroupsComponent, selector: "zen-groups", inputs: { dataSource: "dataSource", filteredDataSource: "filteredDataSource", hideSelectAll: "hideSelectAll", isSelectedAll: "isSelectedAll", inline: "inline", width: "width", placeholder: "placeholder", hideSearch: "hideSearch", idProp: "idProp", displayProp: "displayProp" }, outputs: { isSelectedAllChange: "isSelectedAllChange", checkedChange: "checkedChange" }, host: { listeners: { "window:mousedown": "onOutsideClick($event)" } }, usesOnChanges: true, ngImport: i0, template: "<!-- Dropdown mode (default) -->\n<div class=\"zen-groups-dropdown\" *ngIf=\"!inline\" [style.width]=\"width\">\n <button class=\"zen-groups-toggle\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{'active': isOpen}\">\n <span class=\"zen-groups-toggle-label\">\n <span *ngIf=\"!selectedLabel\" class=\"zen-groups-placeholder\">{{ placeholder | translate }}</span>\n <span *ngIf=\"selectedLabel\" class=\"zen-groups-value\">{{ selectedLabel }}</span>\n </span>\n <i class=\"material-icons zen-groups-chevron\">expand_more</i>\n </button>\n\n <div class=\"zen-groups-panel\" *ngIf=\"isOpen\" [class.open-upward]=\"openUpward\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n</div>\n\n<!-- Inline mode (used inside zen-filter) -->\n<div class=\"zen-groups-inline\" *ngIf=\"inline\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n</div>\n\n<!-- Shared tree content -->\n<ng-template #treeContent>\n <div class=\"zen-groups-tree\">\n <div class=\"action-item-checkbox select-all\" *ngIf=\"!hideSelectAll\">\n <zen-checkbox *ngIf=\"dataSource.length === displayDataSource.length\"\n [(checked)]=\"isSelectedAll\"\n [indeterminate]=\"hasActiveItems && !isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll()\">\n </zen-checkbox>\n </div>\n\n <ng-container *ngFor=\"let dsItem of displayDataSource\">\n <div *ngIf=\"isTreeItemVisible(dsItem)\"\n class=\"action-item-checkbox tree-item\"\n [style.padding-left.px]=\"24 + (dsItem.level || 0) * 24\">\n <ng-container *ngIf=\"dsItem.level > 0\">\n <div *ngFor=\"let connector of getTreeConnectors(dsItem); let i = index\"\n class=\"tree-connector\"\n [ngClass]=\"'tree-connector-' + connector\"\n [style.left.px]=\"32 + i * 24\">\n </div>\n </ng-container>\n <div class=\"tree-item-row\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [indeterminate]=\"isTreeItemIndeterminate(dsItem)\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"onCheckChanged(dsItem)\"\n [label]=\"dsItem[displayProp]?.toString() | translate\"></zen-checkbox>\n <span *ngIf=\"hasChildren(dsItem)\"\n class=\"tree-item-badge\">{{ getChildCount(dsItem) }}</span>\n </div>\n <button *ngIf=\"hasChildren(dsItem)\"\n class=\"tree-item-toggle\"\n (click)=\"toggleTreeNode(dsItem)\">\n <i class=\"material-icons tree-toggle-icon\"\n [class.open]=\"dsItem.isOpen\">expand_more</i>\n </button>\n </div>\n </ng-container>\n\n <div class=\"zen-groups-no-results\" *ngIf=\"searchText && displayDataSource.length === 0\">\n {{ 'No Results Found' | translate }}\n </div>\n </div>\n</ng-template>\n", styles: [".zen-groups-dropdown{position:relative;display:inline-block}.zen-groups-dropdown .zen-groups-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;background:#ffffff;border:1px solid #d0d5dd;border-radius:8px;padding:10px 14px;cursor:pointer;font-family:inherit;font-size:14px;font-weight:400;line-height:20px;color:#344054;transition:border-color .2s;-webkit-appearance:none;appearance:none;outline:none}.zen-groups-dropdown .zen-groups-toggle:hover{border-color:#98a2b3}.zen-groups-dropdown .zen-groups-toggle:focus,.zen-groups-dropdown .zen-groups-toggle.active{border-color:var(--color-primary, #2188d9);box-shadow:0 0 0 3px rgba(var(--color-primary, #2188d9),.12)}.zen-groups-dropdown .zen-groups-toggle.active .zen-groups-chevron{transform:rotate(180deg);color:var(--color-primary, #2188d9)}.zen-groups-dropdown .zen-groups-toggle .zen-groups-toggle-label{flex:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zen-groups-dropdown .zen-groups-toggle .zen-groups-placeholder{color:#667085}.zen-groups-dropdown .zen-groups-toggle .zen-groups-value{color:#344054}.zen-groups-dropdown .zen-groups-toggle .zen-groups-chevron{font-size:20px;color:#667085;transition:transform .2s,color .2s;flex-shrink:0;margin-left:8px}.zen-groups-dropdown .zen-groups-panel{position:absolute;top:calc(100% + 4px);left:0;width:100%;background:#ffffff;border:1px solid #eaecf0;border-radius:8px;box-shadow:0 4px 6px -2px #10182808,0 12px 16px -4px #10182814;z-index:10;max-height:300px;overflow-y:auto;padding:4px 0}.zen-groups-dropdown .zen-groups-panel.open-upward{top:auto;bottom:calc(100% + 4px)}.zen-groups-search{padding:8px 12px;border-bottom:1px solid #eaecf0}.zen-groups-tree .zen-groups-no-results{padding:10px 24px;color:#667085;font-size:14px;font-weight:400}.zen-groups-tree .select-all{font-weight:500}.zen-groups-tree .action-item-checkbox{font-weight:500;font-size:14px;line-height:20px;color:#344054;padding:0 24px}.zen-groups-tree .action-item-checkbox:hover{background:transparent}.zen-groups-tree .tree-item{display:flex;align-items:center;justify-content:space-between;position:relative}.zen-groups-tree .tree-item .tree-item-row{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.zen-groups-tree .tree-item .tree-item-badge{background:#f1f7fe;color:#105494;font-size:12px;font-weight:500;line-height:18px;padding:2px 8px;border-radius:16px;white-space:nowrap}.zen-groups-tree .tree-item .tree-connector{position:absolute;top:0;width:1px;background:#eaecf0;pointer-events:none}.zen-groups-tree .tree-item .tree-connector.tree-connector-through,.zen-groups-tree .tree-item .tree-connector.tree-connector-branch,.zen-groups-tree .tree-item .tree-connector.tree-connector-elbow{bottom:0}.zen-groups-tree .tree-item .tree-connector.tree-connector-none{display:none}.zen-groups-tree .tree-item .tree-item-toggle{background:none;border:none;padding:0;cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center;width:20px;height:20px;flex-shrink:0}.zen-groups-tree .tree-item .tree-item-toggle .tree-toggle-icon{font-size:20px;color:#667085;transition:transform .2s;transform:rotate(-90deg)}.zen-groups-tree .tree-item .tree-item-toggle .tree-toggle-icon.open{transform:rotate(0)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ZenduCheckboxComponent, selector: "zen-checkbox", inputs: ["checked", "label", "labelColor", "disabled", "disableValueChange", "indeterminate", "imageUrl", "size", "supportingText"], outputs: ["checkedChange"] }, { kind: "component", type: i3.ZenduSearchBoxComponent, selector: "zen-search-box", inputs: ["text", "delay", "autoFocus", "disabled", "placeholder"], outputs: ["textChange"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
293
320
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduGroupsComponent, decorators: [{
294
321
  type: Component,
295
- args: [{ selector: 'zen-groups', template: "<!-- Dropdown mode (default) -->\n<div class=\"zen-groups-dropdown\" *ngIf=\"!inline\" [style.width]=\"width\">\n <button class=\"zen-groups-toggle\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{'active': isOpen}\">\n <span class=\"zen-groups-toggle-label\">\n <span *ngIf=\"!selectedLabel\" class=\"zen-groups-placeholder\">{{ placeholder | translate }}</span>\n <span *ngIf=\"selectedLabel\" class=\"zen-groups-value\">{{ selectedLabel }}</span>\n </span>\n <i class=\"material-icons zen-groups-chevron\">expand_more</i>\n </button>\n\n <div class=\"zen-groups-panel\" *ngIf=\"isOpen\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n</div>\n\n<!-- Inline mode (used inside zen-filter) -->\n<div class=\"zen-groups-inline\" *ngIf=\"inline\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n</div>\n\n<!-- Shared tree content -->\n<ng-template #treeContent>\n <div class=\"zen-groups-tree\">\n <div class=\"action-item-checkbox select-all\" *ngIf=\"!hideSelectAll\">\n <zen-checkbox *ngIf=\"dataSource.length === displayDataSource.length\"\n [(checked)]=\"isSelectedAll\"\n [indeterminate]=\"hasActiveItems && !isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll()\">\n </zen-checkbox>\n </div>\n\n <ng-container *ngFor=\"let dsItem of displayDataSource\">\n <div *ngIf=\"isTreeItemVisible(dsItem)\"\n class=\"action-item-checkbox tree-item\"\n [style.padding-left.px]=\"24 + (dsItem.level || 0) * 24\">\n <ng-container *ngIf=\"dsItem.level > 0\">\n <div *ngFor=\"let connector of getTreeConnectors(dsItem); let i = index\"\n class=\"tree-connector\"\n [ngClass]=\"'tree-connector-' + connector\"\n [style.left.px]=\"32 + i * 24\">\n </div>\n </ng-container>\n <div class=\"tree-item-row\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [indeterminate]=\"isTreeItemIndeterminate(dsItem)\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"onCheckChanged(dsItem)\"\n [label]=\"dsItem.name?.toString() | translate\"></zen-checkbox>\n <span *ngIf=\"dsItem.children?.length\"\n class=\"tree-item-badge\">{{ getChildCount(dsItem) }}</span>\n </div>\n <button *ngIf=\"dsItem.children?.length\"\n class=\"tree-item-toggle\"\n (click)=\"toggleTreeNode(dsItem)\">\n <i class=\"material-icons tree-toggle-icon\"\n [class.open]=\"dsItem.isOpen\">expand_more</i>\n </button>\n </div>\n </ng-container>\n\n <div class=\"zen-groups-no-results\" *ngIf=\"searchText && displayDataSource.length === 0\">\n {{ 'No Results Found' | translate }}\n </div>\n </div>\n</ng-template>\n", styles: [".zen-groups-dropdown{position:relative;display:inline-block}.zen-groups-dropdown .zen-groups-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;background:#ffffff;border:1px solid #d0d5dd;border-radius:8px;padding:10px 14px;cursor:pointer;font-family:inherit;font-size:14px;font-weight:400;line-height:20px;color:#344054;transition:border-color .2s;-webkit-appearance:none;appearance:none;outline:none}.zen-groups-dropdown .zen-groups-toggle:hover{border-color:#98a2b3}.zen-groups-dropdown .zen-groups-toggle:focus,.zen-groups-dropdown .zen-groups-toggle.active{border-color:var(--color-primary, #2188d9);box-shadow:0 0 0 3px rgba(var(--color-primary, #2188d9),.12)}.zen-groups-dropdown .zen-groups-toggle.active .zen-groups-chevron{transform:rotate(180deg);color:var(--color-primary, #2188d9)}.zen-groups-dropdown .zen-groups-toggle .zen-groups-toggle-label{flex:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zen-groups-dropdown .zen-groups-toggle .zen-groups-placeholder{color:#667085}.zen-groups-dropdown .zen-groups-toggle .zen-groups-value{color:#344054}.zen-groups-dropdown .zen-groups-toggle .zen-groups-chevron{font-size:20px;color:#667085;transition:transform .2s,color .2s;flex-shrink:0;margin-left:8px}.zen-groups-dropdown .zen-groups-panel{position:absolute;top:calc(100% + 4px);left:0;width:100%;background:#ffffff;border:1px solid #eaecf0;border-radius:8px;box-shadow:0 4px 6px -2px #10182808,0 12px 16px -4px #10182814;z-index:10;max-height:300px;overflow-y:auto;padding:4px 0}.zen-groups-search{padding:8px 12px;border-bottom:1px solid #eaecf0}.zen-groups-tree .zen-groups-no-results{padding:10px 24px;color:#667085;font-size:14px;font-weight:400}.zen-groups-tree .select-all{font-weight:500}.zen-groups-tree .action-item-checkbox{font-weight:500;font-size:14px;line-height:20px;color:#344054;padding:0 24px}.zen-groups-tree .action-item-checkbox:hover{background:transparent}.zen-groups-tree .tree-item{display:flex;align-items:center;justify-content:space-between;position:relative}.zen-groups-tree .tree-item .tree-item-row{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.zen-groups-tree .tree-item .tree-item-badge{background:#f1f7fe;color:#105494;font-size:12px;font-weight:500;line-height:18px;padding:2px 8px;border-radius:16px;white-space:nowrap}.zen-groups-tree .tree-item .tree-connector{position:absolute;top:0;width:1px;background:#eaecf0;pointer-events:none}.zen-groups-tree .tree-item .tree-connector.tree-connector-through,.zen-groups-tree .tree-item .tree-connector.tree-connector-branch,.zen-groups-tree .tree-item .tree-connector.tree-connector-elbow{bottom:0}.zen-groups-tree .tree-item .tree-connector.tree-connector-none{display:none}.zen-groups-tree .tree-item .tree-item-toggle{background:none;border:none;padding:0;cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center;width:20px;height:20px;flex-shrink:0}.zen-groups-tree .tree-item .tree-item-toggle .tree-toggle-icon{font-size:20px;color:#667085;transition:transform .2s;transform:rotate(-90deg)}.zen-groups-tree .tree-item .tree-item-toggle .tree-toggle-icon.open{transform:rotate(0)}\n"] }]
322
+ args: [{ selector: 'zen-groups', template: "<!-- Dropdown mode (default) -->\n<div class=\"zen-groups-dropdown\" *ngIf=\"!inline\" [style.width]=\"width\">\n <button class=\"zen-groups-toggle\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{'active': isOpen}\">\n <span class=\"zen-groups-toggle-label\">\n <span *ngIf=\"!selectedLabel\" class=\"zen-groups-placeholder\">{{ placeholder | translate }}</span>\n <span *ngIf=\"selectedLabel\" class=\"zen-groups-value\">{{ selectedLabel }}</span>\n </span>\n <i class=\"material-icons zen-groups-chevron\">expand_more</i>\n </button>\n\n <div class=\"zen-groups-panel\" *ngIf=\"isOpen\" [class.open-upward]=\"openUpward\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n</div>\n\n<!-- Inline mode (used inside zen-filter) -->\n<div class=\"zen-groups-inline\" *ngIf=\"inline\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n</div>\n\n<!-- Shared tree content -->\n<ng-template #treeContent>\n <div class=\"zen-groups-tree\">\n <div class=\"action-item-checkbox select-all\" *ngIf=\"!hideSelectAll\">\n <zen-checkbox *ngIf=\"dataSource.length === displayDataSource.length\"\n [(checked)]=\"isSelectedAll\"\n [indeterminate]=\"hasActiveItems && !isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll()\">\n </zen-checkbox>\n </div>\n\n <ng-container *ngFor=\"let dsItem of displayDataSource\">\n <div *ngIf=\"isTreeItemVisible(dsItem)\"\n class=\"action-item-checkbox tree-item\"\n [style.padding-left.px]=\"24 + (dsItem.level || 0) * 24\">\n <ng-container *ngIf=\"dsItem.level > 0\">\n <div *ngFor=\"let connector of getTreeConnectors(dsItem); let i = index\"\n class=\"tree-connector\"\n [ngClass]=\"'tree-connector-' + connector\"\n [style.left.px]=\"32 + i * 24\">\n </div>\n </ng-container>\n <div class=\"tree-item-row\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [indeterminate]=\"isTreeItemIndeterminate(dsItem)\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"onCheckChanged(dsItem)\"\n [label]=\"dsItem[displayProp]?.toString() | translate\"></zen-checkbox>\n <span *ngIf=\"hasChildren(dsItem)\"\n class=\"tree-item-badge\">{{ getChildCount(dsItem) }}</span>\n </div>\n <button *ngIf=\"hasChildren(dsItem)\"\n class=\"tree-item-toggle\"\n (click)=\"toggleTreeNode(dsItem)\">\n <i class=\"material-icons tree-toggle-icon\"\n [class.open]=\"dsItem.isOpen\">expand_more</i>\n </button>\n </div>\n </ng-container>\n\n <div class=\"zen-groups-no-results\" *ngIf=\"searchText && displayDataSource.length === 0\">\n {{ 'No Results Found' | translate }}\n </div>\n </div>\n</ng-template>\n", styles: [".zen-groups-dropdown{position:relative;display:inline-block}.zen-groups-dropdown .zen-groups-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;background:#ffffff;border:1px solid #d0d5dd;border-radius:8px;padding:10px 14px;cursor:pointer;font-family:inherit;font-size:14px;font-weight:400;line-height:20px;color:#344054;transition:border-color .2s;-webkit-appearance:none;appearance:none;outline:none}.zen-groups-dropdown .zen-groups-toggle:hover{border-color:#98a2b3}.zen-groups-dropdown .zen-groups-toggle:focus,.zen-groups-dropdown .zen-groups-toggle.active{border-color:var(--color-primary, #2188d9);box-shadow:0 0 0 3px rgba(var(--color-primary, #2188d9),.12)}.zen-groups-dropdown .zen-groups-toggle.active .zen-groups-chevron{transform:rotate(180deg);color:var(--color-primary, #2188d9)}.zen-groups-dropdown .zen-groups-toggle .zen-groups-toggle-label{flex:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zen-groups-dropdown .zen-groups-toggle .zen-groups-placeholder{color:#667085}.zen-groups-dropdown .zen-groups-toggle .zen-groups-value{color:#344054}.zen-groups-dropdown .zen-groups-toggle .zen-groups-chevron{font-size:20px;color:#667085;transition:transform .2s,color .2s;flex-shrink:0;margin-left:8px}.zen-groups-dropdown .zen-groups-panel{position:absolute;top:calc(100% + 4px);left:0;width:100%;background:#ffffff;border:1px solid #eaecf0;border-radius:8px;box-shadow:0 4px 6px -2px #10182808,0 12px 16px -4px #10182814;z-index:10;max-height:300px;overflow-y:auto;padding:4px 0}.zen-groups-dropdown .zen-groups-panel.open-upward{top:auto;bottom:calc(100% + 4px)}.zen-groups-search{padding:8px 12px;border-bottom:1px solid #eaecf0}.zen-groups-tree .zen-groups-no-results{padding:10px 24px;color:#667085;font-size:14px;font-weight:400}.zen-groups-tree .select-all{font-weight:500}.zen-groups-tree .action-item-checkbox{font-weight:500;font-size:14px;line-height:20px;color:#344054;padding:0 24px}.zen-groups-tree .action-item-checkbox:hover{background:transparent}.zen-groups-tree .tree-item{display:flex;align-items:center;justify-content:space-between;position:relative}.zen-groups-tree .tree-item .tree-item-row{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.zen-groups-tree .tree-item .tree-item-badge{background:#f1f7fe;color:#105494;font-size:12px;font-weight:500;line-height:18px;padding:2px 8px;border-radius:16px;white-space:nowrap}.zen-groups-tree .tree-item .tree-connector{position:absolute;top:0;width:1px;background:#eaecf0;pointer-events:none}.zen-groups-tree .tree-item .tree-connector.tree-connector-through,.zen-groups-tree .tree-item .tree-connector.tree-connector-branch,.zen-groups-tree .tree-item .tree-connector.tree-connector-elbow{bottom:0}.zen-groups-tree .tree-item .tree-connector.tree-connector-none{display:none}.zen-groups-tree .tree-item .tree-item-toggle{background:none;border:none;padding:0;cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center;width:20px;height:20px;flex-shrink:0}.zen-groups-tree .tree-item .tree-item-toggle .tree-toggle-icon{font-size:20px;color:#667085;transition:transform .2s;transform:rotate(-90deg)}.zen-groups-tree .tree-item .tree-item-toggle .tree-toggle-icon.open{transform:rotate(0)}\n"] }]
296
323
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { dataSource: [{
297
324
  type: Input
298
325
  }], filteredDataSource: [{
@@ -309,6 +336,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
309
336
  type: Input
310
337
  }], hideSearch: [{
311
338
  type: Input
339
+ }], idProp: [{
340
+ type: Input
341
+ }], displayProp: [{
342
+ type: Input
312
343
  }], isSelectedAllChange: [{
313
344
  type: Output
314
345
  }], checkedChange: [{
@@ -317,4 +348,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
317
348
  type: HostListener,
318
349
  args: ['window:mousedown', ['$event']]
319
350
  }] } });
320
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtZ3JvdXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9ncm91cHMvemVuZHUtZ3JvdXBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9ncm91cHMvemVuZHUtZ3JvdXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFRdkIsTUFBTSxPQUFPLG9CQUFvQjtJQW9CL0IsWUFBb0IsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFuQmxDLGVBQVUsR0FBaUIsRUFBRSxDQUFDO1FBQzlCLHVCQUFrQixHQUFpQixFQUFFLENBQUM7UUFDdEMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLFVBQUssR0FBRyxPQUFPLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxjQUFjLENBQUM7UUFDN0IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVsQix3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ2xELGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUVsRCxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNmLDhCQUF5QixHQUF3QixJQUFJLENBQUM7UUFFdEQsYUFBUSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO1FBQ2xELHFCQUFnQixHQUFHLElBQUksR0FBRyxFQUEyQixDQUFDO0lBRWhCLENBQUM7SUFFeEMsV0FBVyxDQUFDLE9BQXNCO1FBQ3ZDLElBQUks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QUE1QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBa0JQLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vZmlsdGVyL2ZpbHRlcnNDb25maWcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd6ZW4tZ3JvdXBzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3plbmR1LWdyb3Vwcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3plbmR1LWdyb3Vwcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBaZW5kdUdyb3Vwc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGRhdGFTb3VyY2U6IERhdGFTb3VyY2VbXSA9IFtdO1xuICBASW5wdXQoKSBmaWx0ZXJlZERhdGFTb3VyY2U6IERhdGFTb3VyY2VbXSA9IFtdO1xuICBASW5wdXQoKSBoaWRlU2VsZWN0QWxsID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzU2VsZWN0ZWRBbGwgPSBmYWxzZTtcbiAgQElucHV0KCkgaW5saW5lID0gZmFsc2U7XG4gIEBJbnB1dCgpIHdpZHRoID0gJzMwMHB4JztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnU2VsZWN0IGdyb3VwJztcbiAgQElucHV0KCkgaGlkZVNlYXJjaCA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBpc1NlbGVjdGVkQWxsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgY2hlY2tlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVNvdXJjZT4oKTtcblxuICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XG4gIHB1YmxpYyBzZWFyY2hUZXh0ID0gJyc7XG4gIHByaXZhdGUgX3NlYXJjaEZpbHRlcmVkRGF0YVNvdXJjZTogRGF0YVNvdXJjZVtdIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfdHJlZU1hcCA9IG5ldyBNYXA8c3RyaW5nIHwgbnVtYmVyLCBEYXRhU291cmNlPigpO1xuICBwcml2YXRlIF9jaGlsZENvdW50Q2FjaGUgPSBuZXcgTWFwPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YVNvdXJjZSddKSB7XG4gICAgICB0aGlzLmJ1aWxkVHJlZUxldmVscygpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBvbk91dHNpZGVDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmlubGluZSB8fCAhdGhpcy5pc09wZW4pIHJldHVybjtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICB0aGlzLl9zZWFyY2hGaWx0ZXJlZERhdGFTb3VyY2UgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzcGxheURhdGFTb3VyY2UoKTogRGF0YVNvdXJjZVtdIHtcbiAgICBpZiAodGhpcy5fc2VhcmNoRmlsdGVyZWREYXRhU291cmNlICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VhcmNoRmlsdGVyZWREYXRhU291cmNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZERhdGFTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgb25TZWFyY2hDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgIHRoaXMuX3NlYXJjaEZpbHRlcmVkRGF0YVNvdXJjZSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbG93ZXJTZWFyY2ggPSB0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtYXRjaGluZ0lkcyA9IG5ldyBTZXQ8c3RyaW5nIHwgbnVtYmVyPigpO1xuXG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0eXBlb2YgZWwubmFtZSA9PT0gJ251bWJlcicgPyBlbC5uYW1lLnRvU3RyaW5nKCkgOiBlbC5uYW1lO1xuICAgICAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlclNlYXJjaCkpIHtcbiAgICAgICAgbWF0Y2hpbmdJZHMuYWRkKGVsLmlkKTtcbiAgICAgICAgLy8gSW5jbHVkZSBhbGwgYW5jZXN0b3JzXG4gICAgICAgIGxldCBjdXJyZW50ID0gZWw7XG4gICAgICAgIHdoaWxlIChjdXJyZW50LnBhcmVudElkICE9IG51bGwpIHtcbiAgICAgICAgICBtYXRjaGluZ0lkcy5hZGQoY3VycmVudC5wYXJlbnRJZCk7XG4gICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fdHJlZU1hcC5nZXQoY3VycmVudC5wYXJlbnRJZCk7XG4gICAgICAgICAgaWYgKCFwYXJlbnQpIGJyZWFrO1xuICAgICAgICAgIGN1cnJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyZWQgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyKGVsID0+IG1hdGNoaW5nSWRzLmhhcyhlbC5pZCkpO1xuXG4gICAgLy8gQXV0by1leHBhbmQgcGFyZW50cyB3aGVuIHNlYXJjaGluZ1xuICAgIGZvciAoY29uc3QgZWwgb2YgZmlsdGVyZWQpIHtcbiAgICAgIGlmIChlbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIGVsLmlzT3BlbiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fc2VhcmNoRmlsdGVyZWREYXRhU291cmNlID0gdGhpcy5zb3J0VHJlZU9yZGVyKGZpbHRlcmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2U/LmZpbHRlcihkID0+IGQuY2hlY2tlZCkubGVuZ3RoIHx8IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkTGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuc2VsZWN0ZWRDb3VudDtcbiAgICBpZiAoY291bnQgPT09IDApIHJldHVybiAnJztcbiAgICBpZiAoY291bnQgPT09IDEpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UuZmluZChkID0+IGQuY2hlY2tlZCk7XG4gICAgICByZXR1cm4gaXRlbSA/IGl0ZW0ubmFtZS50b1N0cmluZygpIDogJyc7XG4gICAgfVxuICAgIHJldHVybiBgJHtjb3VudH0gc2VsZWN0ZWRgO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNBY3RpdmVJdGVtcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlPy5zb21lKGQgPT4gZC5jaGVja2VkKSB8fCBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZm9yRWFjaChkID0+IChkLmNoZWNrZWQgPSB0aGlzLmlzU2VsZWN0ZWRBbGwpKTtcbiAgICB0aGlzLmlzU2VsZWN0ZWRBbGxDaGFuZ2UuZW1pdCh0aGlzLmlzU2VsZWN0ZWRBbGwpO1xuICB9XG5cbiAgcHVibGljIG9uQ2hlY2tDaGFuZ2VkKGRzSXRlbTogRGF0YVNvdXJjZSk6IHZvaWQge1xuICAgIHRoaXMuY2FzY2FkZVRvQ2hpbGRyZW4oZHNJdGVtKTtcbiAgICB0aGlzLnVwZGF0ZVBhcmVudENoZWNrZWRTdGF0ZShkc0l0ZW0pO1xuICAgIHRoaXMuY2hlY2tlZENoYW5nZS5lbWl0KGRzSXRlbSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVHJlZUxldmVscygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZT8ubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgaGFzQ2hpbGRyZW4gPSB0aGlzLmRhdGFTb3VyY2Uuc29tZShkID0+IGQuY2hpbGRyZW4/Lmxlbmd0aCA+IDApO1xuICAgIGlmICghaGFzQ2hpbGRyZW4pIHJldHVybjtcblxuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nIHwgbnVtYmVyLCBEYXRhU291cmNlPigpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIG1hcC5zZXQoaXRlbS5pZCwgaXRlbSk7XG4gICAgfVxuICAgIHRoaXMuX3RyZWVNYXAgPSBtYXA7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5kYXRhU291cmNlKSB7XG4gICAgICBpZiAoaXRlbS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRJZCBvZiBpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSBtYXAuZ2V0KGNoaWxkSWQpO1xuICAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5wYXJlbnRJZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnRJZCA9IGl0ZW0uaWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgbGV0IGxldmVsID0gMDtcbiAgICAgIGxldCBjdXJyZW50ID0gaXRlbTtcbiAgICAgIHdoaWxlIChjdXJyZW50LnBhcmVudElkICE9IG51bGwpIHtcbiAgICAgICAgbGV2ZWwrKztcbiAgICAgICAgY29uc3QgcGFyZW50ID0gbWFwLmdldChjdXJyZW50LnBhcmVudElkKTtcbiAgICAgICAgaWYgKCFwYXJlbnQpIGJyZWFrO1xuICAgICAgICBjdXJyZW50ID0gcGFyZW50O1xuICAgICAgfVxuICAgICAgaXRlbS5sZXZlbCA9IGxldmVsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoaWxkQ291bnRDYWNoZS5jbGVhcigpO1xuICAgIGNvbnN0IGNvdW50Q2hpbGRyZW4gPSAoaXRlbTogRGF0YVNvdXJjZSk6IG51bWJlciA9PiB7XG4gICAgICBpZiAoIWl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCkgcmV0dXJuIDA7XG4gICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgZm9yIChjb25zdCBjaGlsZElkIG9mIGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBtYXAuZ2V0KGNoaWxkSWQpO1xuICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZExlYXZlcyA9IGNvdW50Q2hpbGRyZW4oY2hpbGQpO1xuICAgICAgICAgIGNvdW50ICs9IGNoaWxkTGVhdmVzID4gMCA/IGNoaWxkTGVhdmVzIDogMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH07XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9jaGlsZENvdW50Q2FjaGUuc2V0KGl0ZW0uaWQsIGNvdW50Q2hpbGRyZW4oaXRlbSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzb3J0VHJlZU9yZGVyKGl0ZW1zOiBEYXRhU291cmNlW10pOiBEYXRhU291cmNlW10ge1xuICAgIGNvbnN0IGl0ZW1TZXQgPSBuZXcgU2V0KGl0ZW1zLm1hcChpID0+IGkuaWQpKTtcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxzdHJpbmcgfCBudW1iZXI+KCk7XG4gICAgY29uc3Qgb3JkZXJlZDogRGF0YVNvdXJjZVtdID0gW107XG4gICAgY29uc3QgdmlzaXQgPSAoaXRlbTogRGF0YVNvdXJjZSkgPT4ge1xuICAgICAgaWYgKHZpc2l0ZWQuaGFzKGl0ZW0uaWQpKSByZXR1cm47XG4gICAgICBpZiAoIWl0ZW1TZXQuaGFzKGl0ZW0uaWQpKSByZXR1cm47XG4gICAgICB2aXNpdGVkLmFkZChpdGVtLmlkKTtcbiAgICAgIG9yZGVyZWQucHVzaChpdGVtKTtcbiAgICAgIGlmIChpdGVtLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZElkIG9mIGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuX3RyZWVNYXAuZ2V0KGNoaWxkSWQpO1xuICAgICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgICAgdmlzaXQoY2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICBpZiAoaXRlbS5wYXJlbnRJZCA9PSBudWxsKSB7XG4gICAgICAgIHZpc2l0KGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoaXRlbS5pZCkpIHtcbiAgICAgICAgb3JkZXJlZC5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3JkZXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBpc1RyZWVJdGVtVmlzaWJsZShkc0l0ZW06IERhdGFTb3VyY2UpOiBib29sZWFuIHtcbiAgICBpZiAoZHNJdGVtLnBhcmVudElkID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl90cmVlTWFwLmdldChkc0l0ZW0ucGFyZW50SWQpO1xuICAgIGlmICghcGFyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudC5pc09wZW4gJiYgdGhpcy5pc1RyZWVJdGVtVmlzaWJsZShwYXJlbnQpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVRyZWVOb2RlKGRzSXRlbTogRGF0YVNvdXJjZSk6IHZvaWQge1xuICAgIGRzSXRlbS5pc09wZW4gPSAhZHNJdGVtLmlzT3BlbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDaGlsZENvdW50KGRzSXRlbTogRGF0YVNvdXJjZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkQ291bnRDYWNoZS5nZXQoZHNJdGVtLmlkKSB8fCAwO1xuICB9XG5cbiAgcHVibGljIGlzVHJlZUl0ZW1JbmRldGVybWluYXRlKGRzSXRlbTogRGF0YVNvdXJjZSk6IGJvb2xlYW4ge1xuICAgIGlmICghZHNJdGVtLmNoaWxkcmVuPy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBhbGxEZXNjZW5kYW50cyA9IHRoaXMuZ2V0QWxsRGVzY2VuZGFudHMoZHNJdGVtKTtcbiAgICBpZiAoIWFsbERlc2NlbmRhbnRzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGNoZWNrZWRDb3VudCA9IGFsbERlc2NlbmRhbnRzLmZpbHRlcihkID0+IGQuY2hlY2tlZCkubGVuZ3RoO1xuICAgIHJldHVybiBjaGVja2VkQ291bnQgPiAwICYmIGNoZWNrZWRDb3VudCA8IGFsbERlc2NlbmRhbnRzLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxsRGVzY2VuZGFudHMoZHNJdGVtOiBEYXRhU291cmNlKTogRGF0YVNvdXJjZVtdIHtcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTb3VyY2VbXSA9IFtdO1xuICAgIGlmICghZHNJdGVtLmNoaWxkcmVuPy5sZW5ndGgpIHJldHVybiByZXN1bHQ7XG4gICAgZm9yIChjb25zdCBjaGlsZElkIG9mIGRzSXRlbS5jaGlsZHJlbikge1xuICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLl90cmVlTWFwLmdldChjaGlsZElkKTtcbiAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICByZXN1bHQucHVzaChjaGlsZCk7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZ2V0QWxsRGVzY2VuZGFudHMoY2hpbGQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGFyZW50Q2hlY2tlZFN0YXRlKGRzSXRlbTogRGF0YVNvdXJjZSk6IHZvaWQge1xuICAgIGlmIChkc0l0ZW0ucGFyZW50SWQgPT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX3RyZWVNYXAuZ2V0KGRzSXRlbS5wYXJlbnRJZCk7XG4gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC5jaGlsZHJlbj8ubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgYWxsRGVzY2VuZGFudHMgPSB0aGlzLmdldEFsbERlc2NlbmRhbnRzKHBhcmVudCk7XG4gICAgY29uc3QgYWxsQ2hlY2tlZCA9IGFsbERlc2NlbmRhbnRzLmV2ZXJ5KGQgPT4gZC5jaGVja2VkKTtcbiAgICBwYXJlbnQuY2hlY2tlZCA9IGFsbENoZWNrZWQ7XG4gICAgdGhpcy51cGRhdGVQYXJlbnRDaGVja2VkU3RhdGUocGFyZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FzY2FkZVRvQ2hpbGRyZW4oaXRlbTogRGF0YVNvdXJjZSk6IHZvaWQge1xuICAgIGlmICghaXRlbS5jaGlsZHJlbj8ubGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5kYXRhU291cmNlLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICBpZiAoaXRlbS5pZCA9PSBkYXRhLmlkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLmNoaWxkcmVuLmluY2x1ZGVzKDxzdHJpbmc+ZGF0YS5pZCkpIHtcbiAgICAgICAgZGF0YS5jaGVja2VkID0gaXRlbS5jaGVja2VkO1xuICAgICAgICBpZiAoZGF0YS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5jYXNjYWRlVG9DaGlsZHJlbihkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFRyZWVDb25uZWN0b3JzKGRzSXRlbTogRGF0YVNvdXJjZSk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIWRzSXRlbS5sZXZlbCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgaXNMYXN0RmxhZ3M6IGJvb2xlYW5bXSA9IFtdO1xuICAgIGxldCBjdXJyZW50OiBEYXRhU291cmNlIHwgdW5kZWZpbmVkID0gZHNJdGVtO1xuXG4gICAgZm9yIChsZXQgbCA9IGRzSXRlbS5sZXZlbDsgbCA+PSAxOyBsLS0pIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX3RyZWVNYXAuZ2V0KGN1cnJlbnQhLnBhcmVudElkISk7XG4gICAgICBpZiAoIXBhcmVudD8uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICBpc0xhc3RGbGFncy5wdXNoKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkSWQgPSBwYXJlbnQuY2hpbGRyZW5bcGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgICAgICBpc0xhc3RGbGFncy5wdXNoKGN1cnJlbnQhLmlkID09PSBsYXN0Q2hpbGRJZCk7XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gcGFyZW50O1xuICAgIH1cblxuICAgIGlzTGFzdEZsYWdzLnJldmVyc2UoKTtcblxuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzTGFzdEZsYWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpc0l0ZW1MZXZlbCA9IChpID09PSBpc0xhc3RGbGFncy5sZW5ndGggLSAxKTtcbiAgICAgIGNvbnN0IGlzTGFzdCA9IGlzTGFzdEZsYWdzW2ldO1xuXG4gICAgICBpZiAoaXNJdGVtTGV2ZWwpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNMYXN0ID8gJ2VsYm93JyA6ICdicmFuY2gnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGlzTGFzdCA/ICdub25lJyA6ICd0aHJvdWdoJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJlZU1hcCgpOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBEYXRhU291cmNlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyZWVNYXA7XG4gIH1cbn1cbiIsIjwhLS0gRHJvcGRvd24gbW9kZSAoZGVmYXVsdCkgLS0+XG48ZGl2IGNsYXNzPVwiemVuLWdyb3Vwcy1kcm9wZG93blwiICpuZ0lmPVwiIWlubGluZVwiIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJ6ZW4tZ3JvdXBzLXRvZ2dsZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzT3Blbn1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ6ZW4tZ3JvdXBzLXRvZ2dsZS1sYWJlbFwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhc2VsZWN0ZWRMYWJlbFwiIGNsYXNzPVwiemVuLWdyb3Vwcy1wbGFjZWhvbGRlclwiPnt7IHBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZExhYmVsXCIgY2xhc3M9XCJ6ZW4tZ3JvdXBzLXZhbHVlXCI+e3sgc2VsZWN0ZWRMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIHplbi1ncm91cHMtY2hldnJvblwiPmV4cGFuZF9tb3JlPC9pPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGRpdiBjbGFzcz1cInplbi1ncm91cHMtcGFuZWxcIiAqbmdJZj1cImlzT3BlblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiemVuLWdyb3Vwcy1zZWFyY2hcIiAqbmdJZj1cIiFoaWRlU2VhcmNoXCI+XG4gICAgICAgICAgICA8emVuLXNlYXJjaC1ib3ggWyh0ZXh0KV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGV4dENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgpXCI+PC96ZW4tc2VhcmNoLWJveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmVlQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gSW5saW5lIG1vZGUgKHVzZWQgaW5zaWRlIHplbi1maWx0ZXIpIC0tPlxuPGRpdiBjbGFzcz1cInplbi1ncm91cHMtaW5saW5lXCIgKm5nSWY9XCJpbmxpbmVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiemVuLWdyb3Vwcy1zZWFyY2hcIiAqbmdJZj1cIiFoaWRlU2VhcmNoXCI+XG4gICAgICAgIDx6ZW4tc2VhcmNoLWJveCBbKHRleHQpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHRleHRDaGFuZ2UpPVwib25TZWFyY2hDaGFuZ2UoKVwiPjwvemVuLXNlYXJjaC1ib3g+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyZWVDb250ZW50XCI+PC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPCEtLSBTaGFyZWQgdHJlZSBjb250ZW50IC0tPlxuPG5nLXRlbXBsYXRlICN0cmVlQ29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiemVuLWdyb3Vwcy10cmVlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24taXRlbS1jaGVja2JveCBzZWxlY3QtYWxsXCIgKm5nSWY9XCIhaGlkZVNlbGVjdEFsbFwiPlxuICAgICAgICAgICAgPHplbi1jaGVja2JveCAqbmdJZj1cImRhdGFTb3VyY2UubGVuZ3RoID09PSBkaXNwbGF5RGF0YVNvdXJjZS5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKGNoZWNrZWQpXT1cImlzU2VsZWN0ZWRBbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJoYXNBY3RpdmVJdGVtcyAmJiAhaXNTZWxlY3RlZEFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInU2VsZWN0IEFsbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJvblNlbGVjdEFsbCgpXCI+XG4gICAgICAgICAgICA8L3plbi1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZHNJdGVtIG9mIGRpc3BsYXlEYXRhU291cmNlXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNUcmVlSXRlbVZpc2libGUoZHNJdGVtKVwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWl0ZW0tY2hlY2tib3ggdHJlZS1pdGVtXCJcbiAgICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmctbGVmdC5weF09XCIyNCArIChkc0l0ZW0ubGV2ZWwgfHwgMCkgKiAyNFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkc0l0ZW0ubGV2ZWwgPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbm5lY3RvciBvZiBnZXRUcmVlQ29ubmVjdG9ycyhkc0l0ZW0pOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtY29ubmVjdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIndHJlZS1jb25uZWN0b3ItJyArIGNvbm5lY3RvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiMzIgKyBpICogMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtaXRlbS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPHplbi1jaGVja2JveCBbKGNoZWNrZWQpXT1cImRzSXRlbS5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJpc1RyZWVJdGVtSW5kZXRlcm1pbmF0ZShkc0l0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW1hZ2VVcmxdPVwiZHNJdGVtLmltYWdlVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJvbkNoZWNrQ2hhbmdlZChkc0l0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZHNJdGVtLm5hbWU/LnRvU3RyaW5nKCkgfCB0cmFuc2xhdGVcIj48L3plbi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkc0l0ZW0uY2hpbGRyZW4/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHJlZS1pdGVtLWJhZGdlXCI+e3sgZ2V0Q2hpbGRDb3VudChkc0l0ZW0pIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJkc0l0ZW0uY2hpbGRyZW4/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtaXRlbS10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVRyZWVOb2RlKGRzSXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyB0cmVlLXRvZ2dsZS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm9wZW5dPVwiZHNJdGVtLmlzT3BlblwiPmV4cGFuZF9tb3JlPC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ6ZW4tZ3JvdXBzLW5vLXJlc3VsdHNcIiAqbmdJZj1cInNlYXJjaFRleHQgJiYgZGlzcGxheURhdGFTb3VyY2UubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICB7eyAnTm8gUmVzdWx0cyBGb3VuZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtZ3JvdXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9ncm91cHMvemVuZHUtZ3JvdXBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9ncm91cHMvemVuZHUtZ3JvdXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFRdkIsTUFBTSxPQUFPLG9CQUFvQjtJQXVCL0IsWUFBb0IsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUF0QmxDLGVBQVUsR0FBaUIsRUFBRSxDQUFDO1FBQzlCLHVCQUFrQixHQUFpQixFQUFFLENBQUM7UUFDdEMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLFVBQUssR0FBRyxPQUFPLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxjQUFjLENBQUM7UUFDN0IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixXQUFNLEdBQVcsSUFBSSxDQUFDO1FBQ3RCLGdCQUFXLEdBQVcsTUFBTSxDQUFDO1FBRTVCLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDbEQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBRWxELFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDZiw4QkFBeUIsR0FBd0IsSUFBSSxDQUFDO1FBRXRELGFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztRQUNs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TSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDMUM7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7O2tIQTNVVSxvQkFBb0I7c0dBQXBCLG9CQUFvQiw2ZkNqQmpDLCt0SEE0RUE7NEZEM0RhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxZQUFZO2lHQUtiLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFnQ1AsY0FBYztzQkFEYixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICcuLi9maWx0ZXIvZmlsdGVyc0NvbmZpZyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3plbi1ncm91cHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vemVuZHUtZ3JvdXBzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vemVuZHUtZ3JvdXBzLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFplbmR1R3JvdXBzQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZGF0YVNvdXJjZTogRGF0YVNvdXJjZVtdID0gW107XG4gIEBJbnB1dCgpIGZpbHRlcmVkRGF0YVNvdXJjZTogRGF0YVNvdXJjZVtdID0gW107XG4gIEBJbnB1dCgpIGhpZGVTZWxlY3RBbGwgPSBmYWxzZTtcbiAgQElucHV0KCkgaXNTZWxlY3RlZEFsbCA9IGZhbHNlO1xuICBASW5wdXQoKSBpbmxpbmUgPSBmYWxzZTtcbiAgQElucHV0KCkgd2lkdGggPSAnMzAwcHgnO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3QgZ3JvdXAnO1xuICBASW5wdXQoKSBoaWRlU2VhcmNoID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlkUHJvcDogc3RyaW5nID0gJ2lkJztcbiAgQElucHV0KCkgZGlzcGxheVByb3A6IHN0cmluZyA9ICduYW1lJztcblxuICBAT3V0cHV0KCkgaXNTZWxlY3RlZEFsbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGNoZWNrZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFTb3VyY2U+KCk7XG5cbiAgcHVibGljIGlzT3BlbiA9IGZhbHNlO1xuICBwdWJsaWMgb3BlblVwd2FyZCA9IGZhbHNlO1xuICBwdWJsaWMgc2VhcmNoVGV4dCA9ICcnO1xuICBwcml2YXRlIF9zZWFyY2hGaWx0ZXJlZERhdGFTb3VyY2U6IERhdGFTb3VyY2VbXSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX3RyZWVNYXAgPSBuZXcgTWFwPHN0cmluZyB8IG51bWJlciwgRGF0YVNvdXJjZT4oKTtcbiAgcHJpdmF0ZSBfY2hpbGRDb3VudENhY2hlID0gbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIHByaXZhdGUgZ2V0Q2hpbGRyZW4oaXRlbTogYW55KTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBpdGVtLmNoaWxkcmVuIHx8IGl0ZW0uQ2hpbGRyZW4gfHwgaXRlbS5DaGlsZHJlbnM7XG4gIH1cblxuICBwdWJsaWMgaGFzQ2hpbGRyZW4oaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKGl0ZW0pO1xuICAgIHJldHVybiAhIWNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydkYXRhU291cmNlJ10pIHtcbiAgICAgIHRoaXMuYnVpbGRUcmVlTGV2ZWxzKCk7XG4gICAgfVxuICAgIGlmICgoY2hhbmdlc1snZmlsdGVyZWREYXRhU291cmNlJ10gfHwgY2hhbmdlc1snZGF0YVNvdXJjZSddKSAmJlxuICAgICAgdGhpcy5fdHJlZU1hcC5zaXplID4gMCAmJiB0aGlzLmZpbHRlcmVkRGF0YVNvdXJjZT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YVNvdXJjZSA9IHRoaXMuc29ydFRyZWVPcmRlcih0aGlzLmZpbHRlcmVkRGF0YVNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIG9uT3V0c2lkZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaW5saW5lIHx8ICF0aGlzLmlzT3BlbikgcmV0dXJuO1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmlzT3BlbiA9ICF0aGlzLmlzT3BlbjtcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMub3BlblVwd2FyZCA9IHRoaXMuc2hvdWxkT3BlblVwd2FyZCgzMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgICAgIHRoaXMuX3NlYXJjaEZpbHRlcmVkRGF0YVNvdXJjZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRPcGVuVXB3YXJkKGRyb3Bkb3duSGVpZ2h0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b20pIDwgZHJvcGRvd25IZWlnaHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc3BsYXlEYXRhU291cmNlKCk6IERhdGFTb3VyY2VbXSB7XG4gICAgaWYgKHRoaXMuX3NlYXJjaEZpbHRlcmVkRGF0YVNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaEZpbHRlcmVkRGF0YVNvdXJjZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWREYXRhU291cmNlO1xuICB9XG5cbiAgcHVibGljIG9uU2VhcmNoQ2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLl9zZWFyY2hGaWx0ZXJlZERhdGFTb3VyY2UgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxvd2VyU2VhcmNoID0gdGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWF0Y2hpbmdJZHMgPSBuZXcgU2V0PHN0cmluZyB8IG51bWJlcj4oKTtcblxuICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5kYXRhU291cmNlKSB7XG4gICAgICBjb25zdCBuYW1lID0gdHlwZW9mIGVsW3RoaXMuZGlzcGxheVByb3BdID09PSAnbnVtYmVyJyA/IGVsW3RoaXMuZGlzcGxheVByb3BdLnRvU3RyaW5nKCkgOiBlbFt0aGlzLmRpc3BsYXlQcm9wXTtcbiAgICAgIGlmIChuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJTZWFyY2gpKSB7XG4gICAgICAgIG1hdGNoaW5nSWRzLmFkZChlbFt0aGlzLmlkUHJvcF0pO1xuICAgICAgICAvLyBJbmNsdWRlIGFsbCBhbmNlc3RvcnNcbiAgICAgICAgbGV0IGN1cnJlbnQgPSBlbDtcbiAgICAgICAgd2hpbGUgKGN1cnJlbnQucGFyZW50SWQgIT0gbnVsbCkge1xuICAgICAgICAgIG1hdGNoaW5nSWRzLmFkZChjdXJyZW50LnBhcmVudElkKTtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl90cmVlTWFwLmdldChjdXJyZW50LnBhcmVudElkKTtcbiAgICAgICAgICBpZiAoIXBhcmVudCkgYnJlYWs7XG4gICAgICAgICAgY3VycmVudCA9IHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmaWx0ZXJlZCA9IHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoZWwgPT4gbWF0Y2hpbmdJZHMuaGFzKGVsW3RoaXMuaWRQcm9wXSkpO1xuXG4gICAgLy8gQXV0by1leHBhbmQgcGFyZW50cyB3aGVuIHNlYXJjaGluZ1xuICAgIGZvciAoY29uc3QgZWwgb2YgZmlsdGVyZWQpIHtcbiAgICAgIGlmICh0aGlzLmhhc0NoaWxkcmVuKGVsKSkge1xuICAgICAgICBlbC5pc09wZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3NlYXJjaEZpbHRlcmVkRGF0YVNvdXJjZSA9IHRoaXMuc29ydFRyZWVPcmRlcihmaWx0ZXJlZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlPy5maWx0ZXIoZCA9PiBkLmNoZWNrZWQpLmxlbmd0aCB8fCAwO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZExhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLnNlbGVjdGVkQ291bnQ7XG4gICAgaWYgKGNvdW50ID09PSAwKSByZXR1cm4gJyc7XG4gICAgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5kYXRhU291cmNlLmZpbmQoZCA9PiBkLmNoZWNrZWQpO1xuICAgICAgcmV0dXJuIGl0ZW0gPyBpdGVtW3RoaXMuZGlzcGxheVByb3BdPy50b1N0cmluZygpIDogJyc7XG4gICAgfVxuICAgIHJldHVybiBgJHtjb3VudH0gc2VsZWN0ZWRgO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNBY3RpdmVJdGVtcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlPy5zb21lKGQgPT4gZC5jaGVja2VkKSB8fCBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZm9yRWFjaChkID0+IChkLmNoZWNrZWQgPSB0aGlzLmlzU2VsZWN0ZWRBbGwpKTtcbiAgICB0aGlzLmlzU2VsZWN0ZWRBbGxDaGFuZ2UuZW1pdCh0aGlzLmlzU2VsZWN0ZWRBbGwpO1xuICB9XG5cbiAgcHVibGljIG9uQ2hlY2tDaGFuZ2VkKGRzSXRlbTogRGF0YVNvdXJjZSk6IHZvaWQge1xuICAgIHRoaXMuY2FzY2FkZVRvQ2hpbGRyZW4oZHNJdGVtKTtcbiAgICB0aGlzLnVwZGF0ZVBhcmVudENoZWNrZWRTdGF0ZShkc0l0ZW0pO1xuICAgIHRoaXMuY2hlY2tlZENoYW5nZS5lbWl0KGRzSXRlbSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVHJlZUxldmVscygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZT8ubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgaGFzQ2hpbGRyZW4gPSB0aGlzLmRhdGFTb3VyY2Uuc29tZShkID0+IHRoaXMuaGFzQ2hpbGRyZW4oZCkpO1xuICAgIGlmICghaGFzQ2hpbGRyZW4pIHJldHVybjtcblxuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nIHwgbnVtYmVyLCBEYXRhU291cmNlPigpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIG1hcC5zZXQoaXRlbVt0aGlzLmlkUHJvcF0sIGl0ZW0pO1xuICAgIH1cbiAgICB0aGlzLl90cmVlTWFwID0gbWFwO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKGl0ZW0pO1xuICAgICAgaWYgKGNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZElkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSBtYXAuZ2V0KGNoaWxkSWQpO1xuICAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5wYXJlbnRJZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnRJZCA9IGl0ZW1bdGhpcy5pZFByb3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIGxldCBsZXZlbCA9IDA7XG4gICAgICBsZXQgY3VycmVudCA9IGl0ZW07XG4gICAgICB3aGlsZSAoY3VycmVudC5wYXJlbnRJZCAhPSBudWxsKSB7XG4gICAgICAgIGxldmVsKys7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IG1hcC5nZXQoY3VycmVudC5wYXJlbnRJZCk7XG4gICAgICAgIGlmICghcGFyZW50KSBicmVhaztcbiAgICAgICAgY3VycmVudCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICAgIGl0ZW0ubGV2ZWwgPSBsZXZlbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGlsZENvdW50Q2FjaGUuY2xlYXIoKTtcbiAgICBjb25zdCBjb3VudENoaWxkcmVuID0gKGl0ZW06IERhdGFTb3VyY2UpOiBudW1iZXIgPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKGl0ZW0pO1xuICAgICAgaWYgKCFjaGlsZHJlbj8ubGVuZ3RoKSByZXR1cm4gMDtcbiAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkSWQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBtYXAuZ2V0KGNoaWxkSWQpO1xuICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZExlYXZlcyA9IGNvdW50Q2hpbGRyZW4oY2hpbGQpO1xuICAgICAgICAgIGNvdW50ICs9IGNoaWxkTGVhdmVzID4gMCA/IGNoaWxkTGVhdmVzIDogMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH07XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgaWYgKHRoaXMuaGFzQ2hpbGRyZW4oaXRlbSkpIHtcbiAgICAgICAgdGhpcy5fY2hpbGRDb3VudENhY2hlLnNldChpdGVtW3RoaXMuaWRQcm9wXSwgY291bnRDaGlsZHJlbihpdGVtKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNvcnRUcmVlT3JkZXIoaXRlbXM6IERhdGFTb3VyY2VbXSk6IERhdGFTb3VyY2VbXSB7XG4gICAgY29uc3QgaXRlbVNldCA9IG5ldyBTZXQoaXRlbXMubWFwKGkgPT4gaVt0aGlzLmlkUHJvcF0pKTtcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxzdHJpbmcgfCBudW1iZXI+KCk7XG4gICAgY29uc3Qgb3JkZXJlZDogRGF0YVNvdXJjZVtdID0gW107XG4gICAgY29uc3QgdmlzaXQgPSAoaXRlbTogRGF0YVNvdXJjZSkgPT4ge1xuICAgICAgaWYgKHZpc2l0ZWQuaGFzKGl0ZW1bdGhpcy5pZFByb3BdKSkgcmV0dXJuO1xuICAgICAgaWYgKCFpdGVtU2V0LmhhcyhpdGVtW3RoaXMuaWRQcm9wXSkpIHJldHVybjtcbiAgICAgIHZpc2l0ZWQuYWRkKGl0ZW1bdGhpcy5pZFByb3BdKTtcbiAgICAgIG9yZGVyZWQucHVzaChpdGVtKTtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbihpdGVtKTtcbiAgICAgIGlmIChjaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRJZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5fdHJlZU1hcC5nZXQoY2hpbGRJZCk7XG4gICAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgICB2aXNpdChjaGlsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGlmIChpdGVtLnBhcmVudElkID09IG51bGwpIHtcbiAgICAgICAgdmlzaXQoaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhpdGVtW3RoaXMuaWRQcm9wXSkpIHtcbiAgICAgICAgb3JkZXJlZC5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3JkZXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBpc1RyZWVJdGVtVmlzaWJsZShkc0l0ZW06IERhdGFTb3VyY2UpOiBib29sZWFuIHtcbiAgICBpZiAoZHNJdGVtLnBhcmVudElkID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl90cmVlTWFwLmdldChkc0l0ZW0ucGFyZW50SWQpO1xuICAgIGlmICghcGFyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudC5pc09wZW4gJiYgdGhpcy5pc1RyZWVJdGVtVmlzaWJsZShwYXJlbnQpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVRyZWVOb2RlKGRzSXRlbTogRGF0YVNvdXJjZSk6IHZvaWQge1xuICAgIGRzSXRlbS5pc09wZW4gPSAhZHNJdGVtLmlzT3BlbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDaGlsZENvdW50KGRzSXRlbTogRGF0YVNvdXJjZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkQ291bnRDYWNoZS5nZXQoZHNJdGVtW3RoaXMuaWRQcm9wXSkgfHwgMDtcbiAgfVxuXG4gIHB1YmxpYyBpc1RyZWVJdGVtSW5kZXRlcm1pbmF0ZShkc0l0ZW06IERhdGFTb3VyY2UpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaGFzQ2hpbGRyZW4oZHNJdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGFsbERlc2NlbmRhbnRzID0gdGhpcy5nZXRBbGxEZXNjZW5kYW50cyhkc0l0ZW0pO1xuICAgIGlmICghYWxsRGVzY2VuZGFudHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY2hlY2tlZENvdW50ID0gYWxsRGVzY2VuZGFudHMuZmlsdGVyKGQgPT4gZC5jaGVja2VkKS5sZW5ndGg7XG4gICAgcmV0dXJuIGNoZWNrZWRDb3VudCA+IDAgJiYgY2hlY2tlZENvdW50IDwgYWxsRGVzY2VuZGFudHMubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbGxEZXNjZW5kYW50cyhkc0l0ZW06IERhdGFTb3VyY2UpOiBEYXRhU291cmNlW10ge1xuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNvdXJjZVtdID0gW107XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKGRzSXRlbSk7XG4gICAgaWYgKCFjaGlsZHJlbj8ubGVuZ3RoKSByZXR1cm4gcmVzdWx0O1xuICAgIGZvciAoY29uc3QgY2hpbGRJZCBvZiBjaGlsZHJlbikge1xuICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLl90cmVlTWFwLmdldChjaGlsZElkKTtcbiAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICByZXN1bHQucHVzaChjaGlsZCk7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZ2V0QWxsRGVzY2VuZGFudHMoY2hpbGQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGFyZW50Q2hlY2tlZFN0YXRlKGRzSXRlbTogRGF0YVNvdXJjZSk6IHZvaWQge1xuICAgIGlmIChkc0l0ZW0ucGFyZW50SWQgPT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX3RyZWVNYXAuZ2V0KGRzSXRlbS5wYXJlbnRJZCk7XG4gICAgaWYgKCFwYXJlbnQgfHwgIXRoaXMuaGFzQ2hpbGRyZW4ocGFyZW50KSkgcmV0dXJuO1xuICAgIGNvbnN0IGFsbERlc2NlbmRhbnRzID0gdGhpcy5nZXRBbGxEZXNjZW5kYW50cyhwYXJlbnQpO1xuICAgIGNvbnN0IGFsbENoZWNrZWQgPSBhbGxEZXNjZW5kYW50cy5ldmVyeShkID0+IGQuY2hlY2tlZCk7XG4gICAgcGFyZW50LmNoZWNrZWQgPSBhbGxDaGVja2VkO1xuICAgIHRoaXMudXBkYXRlUGFyZW50Q2hlY2tlZFN0YXRlKHBhcmVudCk7XG4gIH1cblxuICBwcml2YXRlIGNhc2NhZGVUb0NoaWxkcmVuKGl0ZW06IERhdGFTb3VyY2UpOiB2b2lkIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oaXRlbSk7XG4gICAgaWYgKCFjaGlsZHJlbj8ubGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5kYXRhU291cmNlLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICBpZiAoaXRlbVt0aGlzLmlkUHJvcF0gPT0gZGF0YVt0aGlzLmlkUHJvcF0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNoaWxkcmVuLmluY2x1ZGVzKDxzdHJpbmc+ZGF0YVt0aGlzLmlkUHJvcF0pKSB7XG4gICAgICAgIGRhdGEuY2hlY2tlZCA9IGl0ZW0uY2hlY2tlZDtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hpbGRyZW4oZGF0YSkpIHtcbiAgICAgICAgICB0aGlzLmNhc2NhZGVUb0NoaWxkcmVuKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJlZUNvbm5lY3RvcnMoZHNJdGVtOiBEYXRhU291cmNlKTogc3RyaW5nW10ge1xuICAgIGlmICghZHNJdGVtLmxldmVsKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBpc0xhc3RGbGFnczogYm9vbGVhbltdID0gW107XG4gICAgbGV0IGN1cnJlbnQ6IERhdGFTb3VyY2UgfCB1bmRlZmluZWQgPSBkc0l0ZW07XG5cbiAgICBmb3IgKGxldCBsID0gZHNJdGVtLmxldmVsOyBsID49IDE7IGwtLSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fdHJlZU1hcC5nZXQoY3VycmVudCEucGFyZW50SWQhKTtcbiAgICAgIGNvbnN0IHBhcmVudENoaWxkcmVuID0gcGFyZW50ID8gdGhpcy5nZXRDaGlsZHJlbihwYXJlbnQpIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCFwYXJlbnRDaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIGlzTGFzdEZsYWdzLnB1c2godHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGRJZCA9IHBhcmVudENoaWxkcmVuW3BhcmVudENoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgICAgICBpc0xhc3RGbGFncy5wdXNoKGN1cnJlbnQhW3RoaXMuaWRQcm9wXSA9PT0gbGFzdENoaWxkSWQpO1xuICAgICAgfVxuICAgICAgY3VycmVudCA9IHBhcmVudDtcbiAgICB9XG5cbiAgICBpc0xhc3RGbGFncy5yZXZlcnNlKCk7XG5cbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpc0xhc3RGbGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXNJdGVtTGV2ZWwgPSAoaSA9PT0gaXNMYXN0RmxhZ3MubGVuZ3RoIC0gMSk7XG4gICAgICBjb25zdCBpc0xhc3QgPSBpc0xhc3RGbGFnc1tpXTtcblxuICAgICAgaWYgKGlzSXRlbUxldmVsKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGlzTGFzdCA/ICdlbGJvdycgOiAnYnJhbmNoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQucHVzaChpc0xhc3QgPyAnbm9uZScgOiAndGhyb3VnaCcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldFRyZWVNYXAoKTogTWFwPHN0cmluZyB8IG51bWJlciwgRGF0YVNvdXJjZT4ge1xuICAgIHJldHVybiB0aGlzLl90cmVlTWFwO1xuICB9XG59XG4iLCI8IS0tIERyb3Bkb3duIG1vZGUgKGRlZmF1bHQpIC0tPlxuPGRpdiBjbGFzcz1cInplbi1ncm91cHMtZHJvcGRvd25cIiAqbmdJZj1cIiFpbmxpbmVcIiBbc3R5bGUud2lkdGhdPVwid2lkdGhcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiemVuLWdyb3Vwcy10b2dnbGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc09wZW59XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiemVuLWdyb3Vwcy10b2dnbGUtbGFiZWxcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXNlbGVjdGVkTGFiZWxcIiBjbGFzcz1cInplbi1ncm91cHMtcGxhY2Vob2xkZXJcIj57eyBwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRMYWJlbFwiIGNsYXNzPVwiemVuLWdyb3Vwcy12YWx1ZVwiPnt7IHNlbGVjdGVkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyB6ZW4tZ3JvdXBzLWNoZXZyb25cIj5leHBhbmRfbW9yZTwvaT5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXYgY2xhc3M9XCJ6ZW4tZ3JvdXBzLXBhbmVsXCIgKm5nSWY9XCJpc09wZW5cIiBbY2xhc3Mub3Blbi11cHdhcmRdPVwib3BlblVwd2FyZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiemVuLWdyb3Vwcy1zZWFyY2hcIiAqbmdJZj1cIiFoaWRlU2VhcmNoXCI+XG4gICAgICAgICAgICA8emVuLXNlYXJjaC1ib3ggWyh0ZXh0KV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGV4dENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgpXCI+PC96ZW4tc2VhcmNoLWJveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmVlQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gSW5saW5lIG1vZGUgKHVzZWQgaW5zaWRlIHplbi1maWx0ZXIpIC0tPlxuPGRpdiBjbGFzcz1cInplbi1ncm91cHMtaW5saW5lXCIgKm5nSWY9XCJpbmxpbmVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiemVuLWdyb3Vwcy1zZWFyY2hcIiAqbmdJZj1cIiFoaWRlU2VhcmNoXCI+XG4gICAgICAgIDx6ZW4tc2VhcmNoLWJveCBbKHRleHQpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHRleHRDaGFuZ2UpPVwib25TZWFyY2hDaGFuZ2UoKVwiPjwvemVuLXNlYXJjaC1ib3g+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyZWVDb250ZW50XCI+PC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPCEtLSBTaGFyZWQgdHJlZSBjb250ZW50IC0tPlxuPG5nLXRlbXBsYXRlICN0cmVlQ29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiemVuLWdyb3Vwcy10cmVlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24taXRlbS1jaGVja2JveCBzZWxlY3QtYWxsXCIgKm5nSWY9XCIhaGlkZVNlbGVjdEFsbFwiPlxuICAgICAgICAgICAgPHplbi1jaGVja2JveCAqbmdJZj1cImRhdGFTb3VyY2UubGVuZ3RoID09PSBkaXNwbGF5RGF0YVNvdXJjZS5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKGNoZWNrZWQpXT1cImlzU2VsZWN0ZWRBbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJoYXNBY3RpdmVJdGVtcyAmJiAhaXNTZWxlY3RlZEFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInU2VsZWN0IEFsbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJvblNlbGVjdEFsbCgpXCI+XG4gICAgICAgICAgICA8L3plbi1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZHNJdGVtIG9mIGRpc3BsYXlEYXRhU291cmNlXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNUcmVlSXRlbVZpc2libGUoZHNJdGVtKVwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWl0ZW0tY2hlY2tib3ggdHJlZS1pdGVtXCJcbiAgICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmctbGVmdC5weF09XCIyNCArIChkc0l0ZW0ubGV2ZWwgfHwgMCkgKiAyNFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkc0l0ZW0ubGV2ZWwgPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbm5lY3RvciBvZiBnZXRUcmVlQ29ubmVjdG9ycyhkc0l0ZW0pOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtY29ubmVjdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIndHJlZS1jb25uZWN0b3ItJyArIGNvbm5lY3RvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiMzIgKyBpICogMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtaXRlbS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPHplbi1jaGVja2JveCBbKGNoZWNrZWQpXT1cImRzSXRlbS5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJpc1RyZWVJdGVtSW5kZXRlcm1pbmF0ZShkc0l0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW1hZ2VVcmxdPVwiZHNJdGVtLmltYWdlVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJvbkNoZWNrQ2hhbmdlZChkc0l0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZHNJdGVtW2Rpc3BsYXlQcm9wXT8udG9TdHJpbmcoKSB8IHRyYW5zbGF0ZVwiPjwvemVuLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImhhc0NoaWxkcmVuKGRzSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtaXRlbS1iYWRnZVwiPnt7IGdldENoaWxkQ291bnQoZHNJdGVtKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaGFzQ2hpbGRyZW4oZHNJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtaXRlbS10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVRyZWVOb2RlKGRzSXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyB0cmVlLXRvZ2dsZS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm9wZW5dPVwiZHNJdGVtLmlzT3BlblwiPmV4cGFuZF9tb3JlPC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ6ZW4tZ3JvdXBzLW5vLXJlc3VsdHNcIiAqbmdJZj1cInNlYXJjaFRleHQgJiYgZGlzcGxheURhdGFTb3VyY2UubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICB7eyAnTm8gUmVzdWx0cyBGb3VuZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -60,7 +60,7 @@ export class ZenduPaginationBarComponent {
60
60
  }
61
61
  }
62
62
  ZenduPaginationBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduPaginationBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
63
- ZenduPaginationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduPaginationBarComponent, selector: "zen-pagination-bar", inputs: { page: "page", perPage: "perPage", count: "count" }, outputs: { pageChange: "pageChange", perPageChange: "perPageChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"pagination-component\">\n <div class=\"select-dropdown\">\n <label>{{\"Rows per page\" | translate}}:</label>\n <zen-select [(selectModel)]=\"perPage\"\n [options]=\"availablePagesSize\"\n [displayProp]=\"'text'\"\n [idProp]=\"'id'\"\n (selectModelChange)=\"updatePageSize()\"></zen-select>\n </div>\n <div class=\"pages\">\n <button class=\"pagination-button\"\n [disabled]=\"page - 1 <= 0\"\n (click)=\"prevPage()\">\n <i class=\"material-icons\">keyboard_arrow_left</i>\n </button>\n <label>{{((page - 1) * perPage) + 1 }} - {{endRowSize()}} of {{count}}</label>\n <button class=\"pagination-button\"\n [disabled]=\"page + 1 > totalPages\"\n (click)=\"nextPage()\">\n <i class=\"material-icons\">keyboard_arrow_right</i>\n </button>\n </div>\n</div>\n", styles: [".pagination-component{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.pagination-component .select-dropdown{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .select-dropdown label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:120%;color:#4f4f4f}.pagination-component .pages{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .pages label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:16px;color:#828282}.pagination-component .pages .pagination-button{display:flex;flex-direction:row;align-items:center;height:16px;padding:0;box-sizing:border-box;white-space:nowrap;border:none;border-radius:50%;transition:.1s;cursor:pointer;color:#828282;background:#FFFFFF}.pagination-component .pages .pagination-button:hover{color:#4f4f4f;background:#F2F2F2}.pagination-component .pages .pagination-button:focus{outline:none;color:#2188d9;background:#F4F9FD}.pagination-component .pages .pagination-button:disabled{color:#e0e0e0;background:#FFFFFF;cursor:not-allowed}.pagination-component .pages .pagination-button .material-icons{font-size:16px;height:16px;width:16px}\n"], dependencies: [{ kind: "component", type: i1.ZenduSelectComponent, selector: "zen-select", inputs: ["selectModel", "options", "label", "supportingText", "hintText", "placeholder", "leadingType", "leadingIcon", "leadingAvatar", "leadingDotColor", "displayProp", "idProp", "hasSearch", "isMultiselect", "multiselect", "hideSelectAll", "hideTreeSearch", "disabled", "error", "errorMessage", "destructive", "size", "returnOption", "isTruncate", "enableAddNewOption", "showDefaultAddOption", "newOptionText", "enableRemoveOption", "removeOptionText", "isLazyLoading", "lazyLoader", "preferredOpenDirection"], outputs: ["selectModelChange", "addNewOption", "removeOption", "closed"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
63
+ ZenduPaginationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduPaginationBarComponent, selector: "zen-pagination-bar", inputs: { page: "page", perPage: "perPage", count: "count" }, outputs: { pageChange: "pageChange", perPageChange: "perPageChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"pagination-component\">\n <div class=\"select-dropdown\">\n <label>{{\"Rows per page\" | translate}}:</label>\n <zen-select [(selectModel)]=\"perPage\"\n [options]=\"availablePagesSize\"\n [displayProp]=\"'text'\"\n [idProp]=\"'id'\"\n (selectModelChange)=\"updatePageSize()\"></zen-select>\n </div>\n <div class=\"pages\">\n <button class=\"pagination-button\"\n [disabled]=\"page - 1 <= 0\"\n (click)=\"prevPage()\">\n <i class=\"material-icons\">keyboard_arrow_left</i>\n </button>\n <label>{{((page - 1) * perPage) + 1 }} - {{endRowSize()}} of {{count}}</label>\n <button class=\"pagination-button\"\n [disabled]=\"page + 1 > totalPages\"\n (click)=\"nextPage()\">\n <i class=\"material-icons\">keyboard_arrow_right</i>\n </button>\n </div>\n</div>\n", styles: [".pagination-component{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.pagination-component .select-dropdown{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .select-dropdown label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:120%;color:#4f4f4f}.pagination-component .pages{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .pages label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:16px;color:#828282}.pagination-component .pages .pagination-button{display:flex;flex-direction:row;align-items:center;height:16px;padding:0;box-sizing:border-box;white-space:nowrap;border:none;border-radius:50%;transition:.1s;cursor:pointer;color:#828282;background:#FFFFFF}.pagination-component .pages .pagination-button:hover{color:#4f4f4f;background:#F2F2F2}.pagination-component .pages .pagination-button:focus{outline:none;color:#2188d9;background:#F4F9FD}.pagination-component .pages .pagination-button:disabled{color:#e0e0e0;background:#FFFFFF;cursor:not-allowed}.pagination-component .pages .pagination-button .material-icons{font-size:16px;height:16px;width:16px}\n"], dependencies: [{ kind: "component", type: i1.ZenduSelectComponent, selector: "zen-select", inputs: ["selectModel", "options", "label", "supportingText", "hintText", "placeholder", "leadingType", "leadingIcon", "leadingAvatar", "leadingDotColor", "displayProp", "idProp", "hasSearch", "isMultiselect", "multiselect", "hideSelectAll", "hideTreeSearch", "required", "disabled", "error", "errorMessage", "destructive", "size", "returnOption", "isTruncate", "enableAddNewOption", "showDefaultAddOption", "newOptionText", "enableRemoveOption", "removeOptionText", "isLazyLoading", "lazyLoader", "preferredOpenDirection"], outputs: ["selectModelChange", "addNewOption", "removeOption", "closed"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
64
64
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduPaginationBarComponent, decorators: [{
65
65
  type: Component,
66
66
  args: [{ selector: 'zen-pagination-bar', template: "<div class=\"pagination-component\">\n <div class=\"select-dropdown\">\n <label>{{\"Rows per page\" | translate}}:</label>\n <zen-select [(selectModel)]=\"perPage\"\n [options]=\"availablePagesSize\"\n [displayProp]=\"'text'\"\n [idProp]=\"'id'\"\n (selectModelChange)=\"updatePageSize()\"></zen-select>\n </div>\n <div class=\"pages\">\n <button class=\"pagination-button\"\n [disabled]=\"page - 1 <= 0\"\n (click)=\"prevPage()\">\n <i class=\"material-icons\">keyboard_arrow_left</i>\n </button>\n <label>{{((page - 1) * perPage) + 1 }} - {{endRowSize()}} of {{count}}</label>\n <button class=\"pagination-button\"\n [disabled]=\"page + 1 > totalPages\"\n (click)=\"nextPage()\">\n <i class=\"material-icons\">keyboard_arrow_right</i>\n </button>\n </div>\n</div>\n", styles: [".pagination-component{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.pagination-component .select-dropdown{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .select-dropdown label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:120%;color:#4f4f4f}.pagination-component .pages{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .pages label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:16px;color:#828282}.pagination-component .pages .pagination-button{display:flex;flex-direction:row;align-items:center;height:16px;padding:0;box-sizing:border-box;white-space:nowrap;border:none;border-radius:50%;transition:.1s;cursor:pointer;color:#828282;background:#FFFFFF}.pagination-component .pages .pagination-button:hover{color:#4f4f4f;background:#F2F2F2}.pagination-component .pages .pagination-button:focus{outline:none;color:#2188d9;background:#F4F9FD}.pagination-component .pages .pagination-button:disabled{color:#e0e0e0;background:#FFFFFF;cursor:not-allowed}.pagination-component .pages .pagination-button .material-icons{font-size:16px;height:16px;width:16px}\n"] }]