mmhglobal-dynamicform 1.2.1 → 1.2.2

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.
@@ -16,6 +16,7 @@ export class ZtreeComponent {
16
16
  this.state = { expandedkeys: [] };
17
17
  this.itemIndex = [];
18
18
  this.selectedKeys = [];
19
+ this.absoluteText = false;
19
20
  this.componentProperties = new ZComponentProperties();
20
21
  this.isExpanded = (dataItem, index) => {
21
22
  // console.log(index);
@@ -91,6 +92,10 @@ export class ZtreeComponent {
91
92
  if (this.data.TreeviewExpandAll) {
92
93
  this.expandAll();
93
94
  }
95
+ // fix text align issue
96
+ if (this.data.OnAddNode || this.data.OnRemoveNode) {
97
+ this.absoluteText = true;
98
+ }
94
99
  }
95
100
  ngAfterViewInit() {
96
101
  // const componentId = ZComponentHelper.getComponentId(this.data);
@@ -355,7 +360,7 @@ export class ZtreeComponent {
355
360
  ZtreeComponent.decorators = [
356
361
  { type: Component, args: [{
357
362
  selector: "app-ztree",
358
- template: "<div style=\"width:100%\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <kendo-treeview [nodes]=\"getItems()\"\r\n kendoTreeViewExpandable\r\n kendoTreeViewSelectable\r\n kendoTreeViewDragAndDrop\r\n kendoTreeViewDragAndDropEditing\r\n [isExpanded]=\"isExpanded\"\r\n (collapse)=\"handleCollapse($event)\"\r\n (expand)=\"handleExpand($event)\"\r\n (nodeDrop)=\"handleNodeDrop($event)\"\r\n (nodeDragEnd)=\"handleNodeDragEnd($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [selectedKeys]=\"selectedKeys\"\r\n kendoTreeViewHierarchyBinding\r\n childrenField=\"Value\"\r\n [filterable]=\"data.Filterable\"\r\n textField=\"Name\"\r\n (filterChange)=\"handleFilter($event)\">\r\n\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem #nodetemplate>\r\n\r\n <ion-button *ngIf=\"!!data.OnAddNode\"\r\n (click)=\"onAddNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 2px;\" mat-raised-button color=\"primary\" size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnAddNodeVisible)\"> \r\n <fa-icon [icon]=\"'plus'\"></fa-icon>\r\n </ion-button>\r\n <ion-button *ngIf=\"!!data.OnRemoveNode\" (click)=\"onRemoveNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 15px 0 10px;\" color=\"danger\" mat-raised-button size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnRemoveNodeVisible)\"> \r\n <fa-icon [icon]=\"'minus'\"></fa-icon>\r\n </ion-button>\r\n\r\n <ion-label *ngIf=\"data.OnAddNode || data.OnRemoveNode\" style=\"position: absolute; top: 14px;\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n\r\n <ion-label *ngIf=\"!data.OnAddNode && !data.OnRemoveNode\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n </ng-template>\r\n </kendo-treeview>\r\n</div>\r\n",
363
+ template: "<div style=\"width:100%\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <kendo-treeview [nodes]=\"getItems()\"\r\n kendoTreeViewExpandable\r\n kendoTreeViewSelectable\r\n kendoTreeViewDragAndDrop\r\n kendoTreeViewDragAndDropEditing\r\n [isExpanded]=\"isExpanded\"\r\n (collapse)=\"handleCollapse($event)\"\r\n (expand)=\"handleExpand($event)\"\r\n (nodeDrop)=\"handleNodeDrop($event)\"\r\n (nodeDragEnd)=\"handleNodeDragEnd($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [selectedKeys]=\"selectedKeys\"\r\n kendoTreeViewHierarchyBinding\r\n childrenField=\"Value\"\r\n [filterable]=\"data.Filterable\"\r\n textField=\"Name\"\r\n (filterChange)=\"handleFilter($event)\">\r\n\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem #nodetemplate>\r\n\r\n <ion-button *ngIf=\"!!data.OnAddNode\"\r\n (click)=\"onAddNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 2px;\" mat-raised-button color=\"primary\" size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnAddNodeVisible)\"> \r\n <fa-icon [icon]=\"'plus'\"></fa-icon>\r\n </ion-button>\r\n <ion-button *ngIf=\"!!data.OnRemoveNode\" (click)=\"onRemoveNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 15px 0 10px;\" color=\"danger\" mat-raised-button size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnRemoveNodeVisible)\"> \r\n <fa-icon [icon]=\"'minus'\"></fa-icon>\r\n </ion-button>\r\n\r\n <ion-label *ngIf=\"absoluteText\" style=\"position: absolute; top: 14px;\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n\r\n <ion-label *ngIf=\"!absoluteText\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n </ng-template>\r\n </kendo-treeview>\r\n</div>\r\n",
359
364
  styles: [":host{--ion-color-primary:#479400;--ion-color-primary-rgb:56,128,255;--ion-color-primary-contrast:#fff;--ion-color-primary-contrast-rgb:255,255,255;--ion-color-primary-shade:#3171e0;--ion-color-primary-tint:#4c8dff}:host ::ng-deep kendo-treeview .k-treeview-leaf{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;border:1px solid #c8dbf5;background-color:#e3ecf8;color:#0a45ab;font-size:13px;cursor:pointer}:host ::ng-deep kendo-treeview .k-treeview-leaf.k-state-selected{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;background-color:#a9c3e8;color:#0a45ab;font-size:13px;cursor:pointer}:host ::ng-deep kendo-treeview .k-treeview-leaf.k-state-hover,:host ::ng-deep kendo-treeview .k-treeview-leaf:hover{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;background-color:#c9daf2;color:#0a45ab;font-size:13px;cursor:pointer}"]
360
365
  },] }
361
366
  ];
@@ -366,4 +371,4 @@ ZtreeComponent.propDecorators = {
366
371
  form: [{ type: Input }],
367
372
  nodetemplate: [{ type: ViewChild, args: ["nodetemplate", { static: true },] }]
368
373
  };
369
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxTQUFTLEVBQTZCLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVN2RCwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNPLGdCQUFnQixFQUF5QixvQkFBb0IsRUFFMUUsTUFBTSxpQkFBaUIsQ0FBQztBQU96QixNQUFNLE9BQU8sY0FBYztJQW1CekI7UUFkQSxVQUFLLEdBQWUsRUFBRSxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFRLElBQUksQ0FBQztRQUM3QiwwQkFBMEI7UUFDMUIscUJBQXFCO1FBQ3JCLHlCQUF5QjtRQUN6QixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ1gsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDckIsVUFBSyxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQzdCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUVoQyx3QkFBbUIsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUEyQzFDLGVBQVUsR0FBRyxDQUFDLFFBQWEsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNqRCxzQkFBc0I7WUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbkQsZUFBZTtRQUNuQixDQUFDLENBQUE7UUFFTSxlQUFVLEdBQUcsQ0FBQyxLQUFZLEVBQUUsS0FB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KioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIFRyZWVJdGVtRHJvcEV2ZW50LFxyXG4gIFRyZWVJdGVtRHJhZ0V2ZW50XHJcbn0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXRyZWV2aWV3XCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LCBaQ29tcG9uZW50UHJvcGVydGllcyxcclxuICBaRmllbGQsIFpHcm91cCwgIFpUcmVlVGVtcGxhdGVQYXJhbXNcclxufSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtenRyZWVcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3p0cmVlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3p0cmVlLmNvbXBvbmVudC5zY3NzXCJdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBadHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgZGF0YTogWkZpZWxkO1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBaR3JvdXA7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwO1xyXG4gIEBWaWV3Q2hpbGQoXCJub2RldGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSkgbm9kZXRlbXBsYXRlOiBFbGVtZW50UmVmO1xyXG4gIGl0ZW1zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgb3JpZ2luYWxJdGVtTGlzdDogYW55ID0gbnVsbDtcclxuICAvLyBtb2RlbHpEYXRhOiBBcnJheTxhbnk+O1xyXG4gIC8vIG1vZGVsTmFtZTogc3RyaW5nO1xyXG4gIC8vIGRhdGFTZXQ6IGFueVtdID0gbnVsbDtcclxuICBpc05vZGVEcm9wID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBub2RlQ291bnRlciA9IDE7XHJcbiAgcHJpdmF0ZSBjbGlja0FjdE5hbWUgPSBudWxsO1xyXG4gIHB1YmxpYyBzdGF0ZSA9IHsgZXhwYW5kZWRrZXlzOiBbXSB9O1xyXG4gIHB1YmxpYyBpdGVtSW5kZXggPSBbXTtcclxuICBwdWJsaWMgc2VsZWN0ZWRLZXlzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBjb21wb25lbnRQcm9wZXJ0aWVzID0gbmV3IFpDb21wb25lbnRQcm9wZXJ0aWVzKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRDb21wb25lbnRQcm9wZXJ0aWVzKHRoaXMpO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5yZWdpc3RlckNvbXBvbmVudCh0aGlzKTtcclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLlRyZWV2aWV3RXhwYW5kQWxsKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvLyBjb25zdCBjb21wb25lbnRJZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50SWQodGhpcy5kYXRhKTtcclxuICAgIC8vIHRoaXMuZ3JvdXAuekNvbXBvbmVudHNbY29tcG9uZW50SWRdID0gdGhpcztcclxuICAgIFpDb21wb25lbnRIZWxwZXIucmVnaXN0ZXJDb21wb25lbnQodGhpcyk7XHJcbiAgfVxyXG5cclxuICBnZXRJdGVtcygpIHtcclxuICAgIC8vIGlmICh0aGlzLm1vZGVsTmFtZSkge1xyXG4gICAgLy8gICByZXR1cm4gdGhpcy5ncm91cFt0aGlzLm1vZGVsTmFtZV07XHJcbiAgICAvLyB9XHJcbiAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5kYXRhLlZhbHVlO1xyXG4gICAgaWYgKGZpZWxkVmFsdWUpIHtcclxuICAgICAgdGhpcy5ub2RlQ291bnRlciA9IDE7XHJcbiAgICAgIGNvbnN0IGZWYWx1ZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuVmFsdWUpO1xyXG4gICAgICByZXR1cm4gZlZhbHVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCd6dHJlZSBmaWVsZCBWYWx1ZSBpcyBub3Qgc2V0IGNvcnJlY3RseS4gJywgZmllbGRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyBpZiAoZmllbGRWYWx1ZSAmJiBmaWVsZFZhbHVlLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAvLyAgIC8vIGNvbnN0IG5ld0RhdGFTZXQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YVNldCkpO1xyXG4gICAgLy8gICBjb25zdCBuYW1lID0gZmllbGRWYWx1ZS5zbGljZSg2KTtcclxuICAgIC8vICAgdGhpcy5ub2RlQ291bnRlciA9IDE7XHJcbiAgICAvLyAgIC8vIHRoaXMuZ3JvdXBbbmFtZV0gPSB0aGlzLnNldFZhbHVlUHJvcFRvTnVsbEF0TGVhZkxlYXZlKHRoaXMuZ3JvdXBbbmFtZV0pO1xyXG4gICAgLy8gICB0aGlzLm1vZGVsTmFtZSA9IG5hbWU7XHJcbiAgICAvLyAgIHJldHVybiB0aGlzLmdyb3VwW25hbWVdO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgY29uc29sZS53YXJuKCd6dHJlZSBmaWVsZCBWYWx1ZSBpcyBub3Qgc2V0IGNvcnJlY3RseS4gJywgZmllbGRWYWx1ZSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNFeHBhbmRlZCA9IChkYXRhSXRlbTogYW55LCBpbmRleDogc3RyaW5nKSA9PiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKGluZGV4KTtcclxuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmluZGV4T2YoaW5kZXgpID4gLTE7XHJcbiAgICAgIC8vIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGV4cGFuZE5vZGUgPSAoZmllbGQ6c3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBzZXRBc1NlbGVjdGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLml0ZW1JbmRleCA9IFtdO1xyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0SXRlbXMoKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaE5vZGVJbmRleChub2RlLCB2YWx1ZSwgJycsIGZpZWxkKTtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbUluZGV4O1xyXG4gICAgaWYgKHNldEFzU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBpbmRleDtcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4QXJyID0gW107XHJcbiAgICBpbmRleC5mb3JFYWNoKChpOmFueSkgPT4ge1xyXG4gICAgICBjb25zdCBhcnIgPSBpLnNwbGl0KCdfJyk7XHJcbiAgICAgIGxldCBpbmRleHMgPSBcIlwiO1xyXG4gICAgICBhcnIuZm9yRWFjaCgoeDphbnkpID0+IHtcclxuICAgICAgICBpbmRleHMgPSBpbmRleHMuY29uY2F0KFwiX1wiKS5jb25jYXQoeCk7XHJcbiAgICAgICAgaW5kZXhBcnIucHVzaChpbmRleHMuc3Vic3RyaW5nKDEpKTtcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5jb25jYXQoaW5kZXhBcnIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxhcHNlTm9kZSA9IChmaWVsZDpzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGNvbGxhcHNlUGFyZW50OiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLml0ZW1JbmRleCA9IFtdO1xyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0SXRlbXMoKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaE5vZGVJbmRleChub2RlLCB2YWx1ZSwgJycsIGZpZWxkKTtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbUluZGV4O1xyXG4gICAgbGV0IGluZGV4QXJyID0gW107XHJcbiAgICBpZiAoY29sbGFwc2VQYXJlbnQpIHtcclxuICAgICAgaW5kZXguZm9yRWFjaCgoaTphbnkpID0+IHtcclxuICAgICAgICBjb25zdCBhcnIgPSBpLnNwbGl0KCdfJyk7XHJcbiAgICAgICAgbGV0IGluZGV4cyA9IFwiXCI7XHJcbiAgICAgICAgYXJyLmZvckVhY2goKHg6YW55KSA9PiB7XHJcbiAgICAgICAgICBpbmRleHMgPSBpbmRleHMuY29uY2F0KFwiX1wiKS5jb25jYXQoeCk7XHJcbiAgICAgICAgICBpbmRleEFyci5wdXNoKGluZGV4cy5zdWJzdHJpbmcoMSkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5kZXhBcnIgPSBpbmRleDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmZpbHRlcih2ID0+IHtcclxuICAgICAgcmV0dXJuICFpbmRleEFyci5pbmNsdWRlcyh2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlYXJjaE5vZGVJbmRleChub2RlOiBhbnksIHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nLCBmaWVsZDogc3RyaW5nKSB7XHJcbiAgICBpZiAoa2V5KSB7XHJcbiAgICAgIGtleSA9IGtleSArICdfJztcclxuICAgIH1cclxuICAgIG5vZGUuZm9yRWFjaCgoZDogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKGRbZmllbGRdID09PSBOdW1iZXIodmFsdWUpIHx8IGRbZmllbGRdID09PSB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbUluZGV4ID0gdGhpcy5pdGVtSW5kZXguY29uY2F0KGtleSArICcnICsgaSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZC5WYWx1ZSkpIHtcclxuICAgICAgICBjb25zdCBrID0ga2V5ICsgJycgKyBpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTm9kZUluZGV4KGQuVmFsdWUsIHZhbHVlLCBrLCBmaWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGV4cGFuZEFsbCA9ICgpID0+IHtcclxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0SXRlbXMoKTtcclxuICAgICAgaWYgKG5vZGUpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbE5vZGUobm9kZSwgJycpO1xyXG4gICAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxhcHNlQWxsID0gKCkgPT4ge1xyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwYW5kQWxsTm9kZShub2RlOiBhbnksIGtleTogc3RyaW5nKSB7XHJcbiAgICBpZiAoa2V5KSB7XHJcbiAgICAgIGtleSA9IGtleSArICdfJztcclxuICAgIH1cclxuICAgIG5vZGUuZm9yRWFjaCgoZDogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZC5WYWx1ZSkpIHtcclxuICAgICAgICBjb25zdCBrID0ga2V5ICsgJycgKyBpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuY29uY2F0KGspO1xyXG4gICAgICAgIHRoaXMuZXhwYW5kQWxsTm9kZShkLlZhbHVlLCBrKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ29sbGFwc2Uobm9kZSkge1xyXG4gICAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmZpbHRlcihrID0+IGsgIT09IG5vZGUuaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUV4cGFuZChub2RlKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuY29uY2F0KG5vZGUuaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEVuYWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5ID0gIXN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWaXNpYmxlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSA9IHN0YXR1cztcclxuICAgIHRoaXMuZGF0YS5WaXNpYmxlID0gc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFJlcXVpcmUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZXF1aXJlZCA9IHN0YXR1cztcclxuICAgIFpDb21wb25lbnRIZWxwZXIuY2hhbmdlVmFsaWRhdG9yKHN0YXR1cywgdGhpcy5ncm91cCwgdGhpcy5kYXRhLlZhbHVlLCB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcGxhdGUoZGF0YUl0ZW06IGFueSwgZGF0YTogWkZpZWxkLCBncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoZGF0YS5JdGVtVGVtcGxhdGUpIHtcclxuICAgICAgY29uc3QgZ2V0VGVtcGxhdGVGdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgZGF0YS5JdGVtVGVtcGxhdGVcclxuICAgICAgKTtcclxuICAgICAgaWYgKCFnZXRUZW1wbGF0ZUZ1bmMpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIlRoZSAoXCIgK1xyXG4gICAgICAgICAgZGF0YS5JdGVtVGVtcGxhdGUgK1xyXG4gICAgICAgICAgXCIpIGlzIG5vdCBkZWZpbmVkIGNvcnJlY3RseS4gVmFsdWUgY29udGFpbnM6IFwiLFxyXG4gICAgICAgICAgZ2V0VGVtcGxhdGVGdW5jXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBnZXRUZW1wbGF0ZUZ1bmMoe1xyXG4gICAgICAgIGRhdGFJdGVtLFxyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgZ3JvdXBcclxuICAgICAgfSBhcyBaVHJlZVRlbXBsYXRlUGFyYW1zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGRhdGFJdGVtKVxyXG4gICAgICAgIC5maWx0ZXIoZGF0YSA9PiB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIilcclxuICAgICAgICAuam9pbihcIiwgXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udmVydFRvVHJlZUl0ZW1zKGRhdGFTZXQ6IGFueVtdKSB7XHJcbiAgICBjb25zdCB0b1RyZWVJdGVtczogYW55W10gPSBbXTtcclxuICAgIGNvbnN0IHRyZWVJbmRleDogYW55ID0ge307XHJcbiAgICBjb25zdCBwZW5kaW5nSXRlbXM6IGFueVtdID0gW107XHJcbiAgICBkYXRhU2V0LmZvckVhY2goKGQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWQuUGFyZW50SWQpIHtcclxuICAgICAgICB0b1RyZWVJdGVtcy5wdXNoKGQpO1xyXG4gICAgICAgIHRyZWVJbmRleFtkLklkXSA9IGQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRyZWVJbmRleFtkLlBhcmVudElkXSkge1xyXG4gICAgICAgICAgY29uc3QgcGFyZW50SXRlbSA9IHRyZWVJbmRleFtkLlBhcmVudElkXTtcclxuICAgICAgICAgIGlmICghcGFyZW50SXRlbS5WYWx1ZSkge1xyXG4gICAgICAgICAgICBwYXJlbnRJdGVtLlZhbHVlID0gW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBwYXJlbnRJdGVtLlZhbHVlLnB1c2goZCk7XHJcbiAgICAgICAgICB0cmVlSW5kZXhbZC5JZF0gPSBkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwZW5kaW5nSXRlbXMucHVzaChkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChwZW5kaW5nSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBwZW5kaW5nSXRlbXMuZm9yRWFjaCgoZDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRyZWVJbmRleFtkLlBhcmVudElkXSkge1xyXG4gICAgICAgICAgY29uc3QgcGFyZW50SXRlbSA9IHRyZWVJbmRleFtkLlBhcmVudElkXTtcclxuICAgICAgICAgIHBhcmVudEl0ZW0uVmFsdWUucHVzaChkKTtcclxuICAgICAgICAgIHRyZWVJbmRleFtkLklkXSA9IGQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9UcmVlSXRlbXM7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBsZXQgdGFyZ2V0TmFtZTogc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMuY2xpY2tBY3ROYW1lKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5jbGlja0FjdE5hbWUpIHtcclxuICAgICAgICBjYXNlICdBZGROb2RlJzpcclxuICAgICAgICAgIHRhcmdldE5hbWUgPSB0aGlzLmRhdGEuT25BZGROb2RlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnUmVtb3ZlTm9kZSc6XHJcbiAgICAgICAgICB0YXJnZXROYW1lID0gdGhpcy5kYXRhLk9uUmVtb3ZlTm9kZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0YXJnZXROYW1lID0gdGhpcy5kYXRhLk9uSXRlbUNsaWNrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGlja0FjdE5hbWUgPSBudWxsO1xyXG4gICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICB0eXBlOiBcInp0cmVlX29uU2VsZWN0aW9uQ2hhbmdlXCIsXHJcbiAgICAgIHRhcmdldDogdGFyZ2V0TmFtZSxcclxuICAgICAgZGF0YTogZXZlbnQuZGF0YUl0ZW0sXHJcbiAgICAgIGV2ZW50OiBldmVudC5pbmRleFxyXG4gICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb25BZGROb2RlKGV2ZW50OiBhbnksIGRhdGFJdGVtOiBhbnksIGRhdGE6IFpGaWVsZCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgdGhpcy5jbGlja0FjdE5hbWUgPSAnQWRkTm9kZSc7XHJcbiAgICAvLyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vIGlmICh0aGlzLmRhdGEuT25BZGROb2RlKSB7XHJcbiAgICAvLyAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uQWRkTm9kZSk7XHJcbiAgICAvLyAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgLy8gICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgIC8vICAgICBjYWxsRnVuYyhkYXRhSXRlbSwgZGF0YSwgZ3JvdXAsIGV2ZW50LmluZGV4KTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZU5vZGUoZXZlbnQ6IGFueSwgZGF0YUl0ZW06IGFueSwgZGF0YTogWkZpZWxkLCBncm91cDogWkdyb3VwKSB7XHJcbiAgICB0aGlzLmNsaWNrQWN0TmFtZSA9ICdSZW1vdmVOb2RlJztcclxuICB9XHJcblxyXG4gIG9uRWRpdE5vZGUoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5PbkVkaXROb2RlKSB7XHJcbiAgICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uRWRpdE5vZGUpO1xyXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgICAgY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZU5vZGVEcm9wKGV2ZW50OiBUcmVlSXRlbURyb3BFdmVudCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5kYXRhLkRyYWdnYWJsZSA9PT0gZmFsc2Upe1xyXG4gICAgICBldmVudC5zZXRWYWxpZChmYWxzZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzTm9kZURyb3AgPSB0cnVlO1xyXG4gICAgY29uc3QgZHJvcEhhbmRsZXIgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgIHRoaXMsXHJcbiAgICAgIHRoaXMuZGF0YS5PbkRyb3BcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIGRyb3BIYW5kbGVyID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgY29uc3QgY2FsbEZ1bmMgPSBkcm9wSGFuZGxlci5iaW5kKHRoaXMpO1xyXG4gICAgICBjYWxsRnVuYyhldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHJldmVudCBkcm9wIGlmIGF0dGVtcHRpbmcgdG8gYWRkIHRvIGZpbGVcclxuICAgIC8vIGlmIChpc0ZpbGUoZXZlbnQuZGVzdGluYXRpb25JdGVtLml0ZW0uZGF0YUl0ZW0udGV4dCkgJiYgZXZlbnQuZHJvcFBvc2l0aW9uID09PSBEcm9wUG9zaXRpb24uT3Zlcikge1xyXG4gICAgLy8gICAgIGV2ZW50LnNldFZhbGlkKGZhbHNlKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZU5vZGVEcmFnRW5kKGV2ZW50OiBUcmVlSXRlbURyYWdFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmlzTm9kZURyb3ApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc05vZGVEcm9wID0gZmFsc2U7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdJdGVtczogJywgdGhpcy5pdGVtcyk7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBbXTtcclxuICAgIHRoaXMudXBkYXRlQ2hhbmdlVG9EYXRhU2V0KGl0ZW1zLCB0YXJnZXQpO1xyXG4gICAgLy8gdGhpcy5kYXRhU2V0ID0gdGFyZ2V0O1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKHRoaXMuZGF0YS5WYWx1ZSwgdGFyZ2V0LCB0aGlzLmdyb3VwKTtcclxuICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgdHlwZTogXCJ6dHJlZS1vblRyZWVOb2RlRHJhZ0VuZFwiLFxyXG4gICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5PbkNoYW5nZSxcclxuICAgICAgZGF0YTogdGFyZ2V0XHJcbiAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNoYW5nZVRvRGF0YVNldChzb3VyY2U6IEFycmF5PGFueT4sIHRhcmdldDogQXJyYXk8YW55Pikge1xyXG4gICAgc291cmNlLmZvckVhY2goZCA9PiB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGQuVmFsdWUpKSB7XHJcbiAgICAgICAgY29uc3QgdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZCkpO1xyXG4gICAgICAgIHQuVmFsdWUgPSBbXTtcclxuICAgICAgICB0YXJnZXQucHVzaCh0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNoYW5nZVRvRGF0YVNldChkLlZhbHVlLCB0LlZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB0ID0gT2JqZWN0LmFzc2lnbih7fSwgZCk7XHJcbiAgICAgICAgdC5WYWx1ZSA9IHQuX0RhdGFWYWx1ZTtcclxuICAgICAgICBkZWxldGUgdC5fRGF0YVZhbHVlO1xyXG4gICAgICAgIHRhcmdldC5wdXNoKHQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gc2VhcmNoIGZlYXR1cmUgLSBmaWx0ZXJhYmxlOiB0cnVlXHJcbiAgcHVibGljIGhhbmRsZUZpbHRlcih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICB0aGlzLml0ZW1zID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICAgIGlmICh0aGlzLm9yaWdpbmFsSXRlbUxpc3QgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxJdGVtTGlzdCA9IHRoaXMuaXRlbXMubWFwKGl0ZW0gPT4gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pdGVtcyA9IHRoaXMub3JpZ2luYWxJdGVtTGlzdC5tYXAoaXRlbSA9PiBPYmplY3QuYXNzaWduKHt9LCBpdGVtKSk7XHJcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnNlYXJjaCh0aGlzLml0ZW1zLCB2YWx1ZSk7XHJcbiAgICBjb25zdCBncmlkVmFsdWUgPSB0aGlzLmZpbHRlclByZWZpeCh0aGlzLmRhdGEuVmFsdWUpO1xyXG4gICAgdGhpcy5ncm91cFtncmlkVmFsdWVdID0gdGFyZ2V0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJQcmVmaXgodmFsdWVOYW1lOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZU5hbWUuc3RhcnRzV2l0aCgnekRhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZS5zbGljZSg2KTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZU5hbWUuc3RhcnRzV2l0aCgnZ3JvdXAuekRhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZS5zbGljZSgxMik7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVOYW1lLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWUuc2xpY2UoNik7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVOYW1lKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlYXJjaChpdGVtczogYW55W10sIHRlcm06IHN0cmluZyk6IGFueVtdIHtcclxuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jb250YWlucyhpdGVtLk5hbWUsIHRlcm0pKSB7XHJcbiAgICAgICAgYWNjLnB1c2goaXRlbSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS5WYWx1ZSAmJiBpdGVtLlZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IHRoaXMuc2VhcmNoKGl0ZW0uVmFsdWUsIHRlcm0pO1xyXG5cclxuICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdmFyIGZpbHRlckl0ZW0gPSBpdGVtO1xyXG4gICAgICAgICAgZmlsdGVySXRlbS5WYWx1ZSA9IG5ld0l0ZW1zO1xyXG4gICAgICAgICAgYWNjLnB1c2goZmlsdGVySXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnRhaW5zKHRleHQ6IHN0cmluZywgdGVybTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoKHRlcm0gfHwgXCJcIikudG9Mb3dlckNhc2UoKSkgPj0gMDtcclxuICB9XHJcbiAgLy8gI2VuZHJlZ2lvbiBzZWFyY2ggZmVhdHVyZSAtIGZpbHRlcmFibGU6IHRydWVcclxufVxyXG4iXX0=
374
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxTQUFTLEVBQTZCLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVN2RCwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNPLGdCQUFnQixFQUF5QixvQkFBb0IsRUFFMUUsTUFBTSxpQkFBaUIsQ0FBQztBQU96QixNQUFNLE9BQU8sY0FBYztJQW9CekI7UUFmQSxVQUFLLEdBQWUsRUFBRSxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFRLElBQUksQ0FBQztRQUM3QiwwQkFBMEI7UUFDMUIscUJBQXFCO1FBQ3JCLHlCQUF5QjtRQUN6QixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ1gsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDckIsVUFBSyxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQzdCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUVyQyx3QkFBbUIsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFnRDFDLGVBQVUsR0FBRyxDQUFDLFFBQWEsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNqRCxzQkFBc0I7WUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbkQsZUFBZTtRQUNuQixDQUFDLENBQUE7UUFFTSxl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QVc7Z0JBQ3JCLHNyRUFBcUM7O2FBRXRDOzs7O21CQUVFLEtBQUs7b0JBQ0wsS0FBSzttQkFDTCxLQUFLOzJCQUNMLFNBQVMsU0FBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgVHJlZUl0ZW1Ecm9wRXZlbnQsXHJcbiAgVHJlZUl0ZW1EcmFnRXZlbnRcclxufSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItdHJlZXZpZXdcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIFpDb21wb25lbnRQcm9wZXJ0aWVzLFxyXG4gIFpGaWVsZCwgWkdyb3VwLCAgWlRyZWVUZW1wbGF0ZVBhcmFtc1xyXG59IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC16dHJlZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4venRyZWUuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4venRyZWUuY29tcG9uZW50LnNjc3NcIl1cclxufSlcclxuZXhwb3J0IGNsYXNzIFp0cmVlQ29tcG9uZW50IGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSBkYXRhOiBaRmllbGQ7XHJcbiAgQElucHV0KCkgZ3JvdXA6IFpHcm91cDtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgQFZpZXdDaGlsZChcIm5vZGV0ZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBub2RldGVtcGxhdGU6IEVsZW1lbnRSZWY7XHJcbiAgaXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBvcmlnaW5hbEl0ZW1MaXN0OiBhbnkgPSBudWxsO1xyXG4gIC8vIG1vZGVsekRhdGE6IEFycmF5PGFueT47XHJcbiAgLy8gbW9kZWxOYW1lOiBzdHJpbmc7XHJcbiAgLy8gZGF0YVNldDogYW55W10gPSBudWxsO1xyXG4gIGlzTm9kZURyb3AgPSBmYWxzZTtcclxuICBwcml2YXRlIG5vZGVDb3VudGVyID0gMTtcclxuICBwcml2YXRlIGNsaWNrQWN0TmFtZSA9IG51bGw7XHJcbiAgcHVibGljIHN0YXRlID0geyBleHBhbmRlZGtleXM6IFtdIH07XHJcbiAgcHVibGljIGl0ZW1JbmRleCA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEtleXM6IGFueVtdID0gW107XHJcbiAgcHVibGljIGFic29sdXRlVGV4dDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb21wb25lbnRQcm9wZXJ0aWVzID0gbmV3IFpDb21wb25lbnRQcm9wZXJ0aWVzKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRDb21wb25lbnRQcm9wZXJ0aWVzKHRoaXMpO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5yZWdpc3RlckNvbXBvbmVudCh0aGlzKTtcclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLlRyZWV2aWV3RXhwYW5kQWxsKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZml4IHRleHQgYWxpZ24gaXNzdWVcclxuICAgIGlmICh0aGlzLmRhdGEuT25BZGROb2RlIHx8IHRoaXMuZGF0YS5PblJlbW92ZU5vZGUpIHtcclxuICAgICAgdGhpcy5hYnNvbHV0ZVRleHQgPSB0cnVlOyBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIC8vIGNvbnN0IGNvbXBvbmVudElkID0gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnRJZCh0aGlzLmRhdGEpO1xyXG4gICAgLy8gdGhpcy5ncm91cC56Q29tcG9uZW50c1tjb21wb25lbnRJZF0gPSB0aGlzO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5yZWdpc3RlckNvbXBvbmVudCh0aGlzKTtcclxuICB9XHJcblxyXG4gIGdldEl0ZW1zKCkge1xyXG4gICAgLy8gaWYgKHRoaXMubW9kZWxOYW1lKSB7XHJcbiAgICAvLyAgIHJldHVybiB0aGlzLmdyb3VwW3RoaXMubW9kZWxOYW1lXTtcclxuICAgIC8vIH1cclxuICAgIGNvbnN0IGZpZWxkVmFsdWUgPSB0aGlzLmRhdGEuVmFsdWU7XHJcbiAgICBpZiAoZmllbGRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm5vZGVDb3VudGVyID0gMTtcclxuICAgICAgY29uc3QgZlZhbHVlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICAgIHJldHVybiBmVmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3p0cmVlIGZpZWxkIFZhbHVlIGlzIG5vdCBzZXQgY29ycmVjdGx5LiAnLCBmaWVsZFZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGlmIChmaWVsZFZhbHVlICYmIGZpZWxkVmFsdWUuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgIC8vICAgLy8gY29uc3QgbmV3RGF0YVNldCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhU2V0KSk7XHJcbiAgICAvLyAgIGNvbnN0IG5hbWUgPSBmaWVsZFZhbHVlLnNsaWNlKDYpO1xyXG4gICAgLy8gICB0aGlzLm5vZGVDb3VudGVyID0gMTtcclxuICAgIC8vICAgLy8gdGhpcy5ncm91cFtuYW1lXSA9IHRoaXMuc2V0VmFsdWVQcm9wVG9OdWxsQXRMZWFmTGVhdmUodGhpcy5ncm91cFtuYW1lXSk7XHJcbiAgICAvLyAgIHRoaXMubW9kZWxOYW1lID0gbmFtZTtcclxuICAgIC8vICAgcmV0dXJuIHRoaXMuZ3JvdXBbbmFtZV07XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICBjb25zb2xlLndhcm4oJ3p0cmVlIGZpZWxkIFZhbHVlIGlzIG5vdCBzZXQgY29ycmVjdGx5LiAnLCBmaWVsZFZhbHVlKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0V4cGFuZGVkID0gKGRhdGFJdGVtOiBhbnksIGluZGV4OiBzdHJpbmcpID0+IHtcclxuICAgICAgLy8gY29uc29sZS5sb2coaW5kZXgpO1xyXG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuaW5kZXhPZihpbmRleCkgPiAtMTtcclxuICAgICAgLy8gcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kTm9kZSA9IChmaWVsZDpzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHNldEFzU2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuaXRlbUluZGV4ID0gW107XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXRJdGVtcygpO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoTm9kZUluZGV4KG5vZGUsIHZhbHVlLCAnJywgZmllbGQpO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtSW5kZXg7XHJcbiAgICBpZiAoc2V0QXNTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IGluZGV4O1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXhBcnIgPSBbXTtcclxuICAgIGluZGV4LmZvckVhY2goKGk6YW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGFyciA9IGkuc3BsaXQoJ18nKTtcclxuICAgICAgbGV0IGluZGV4cyA9IFwiXCI7XHJcbiAgICAgIGFyci5mb3JFYWNoKCh4OmFueSkgPT4ge1xyXG4gICAgICAgIGluZGV4cyA9IGluZGV4cy5jb25jYXQoXCJfXCIpLmNvbmNhdCh4KTtcclxuICAgICAgICBpbmRleEFyci5wdXNoKGluZGV4cy5zdWJzdHJpbmcoMSkpO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmNvbmNhdChpbmRleEFycik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29sbGFwc2VOb2RlID0gKGZpZWxkOnN0cmluZywgdmFsdWU6IHN0cmluZywgY29sbGFwc2VQYXJlbnQ6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuaXRlbUluZGV4ID0gW107XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXRJdGVtcygpO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoTm9kZUluZGV4KG5vZGUsIHZhbHVlLCAnJywgZmllbGQpO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtSW5kZXg7XHJcbiAgICBsZXQgaW5kZXhBcnIgPSBbXTtcclxuICAgIGlmIChjb2xsYXBzZVBhcmVudCkge1xyXG4gICAgICBpbmRleC5mb3JFYWNoKChpOmFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFyciA9IGkuc3BsaXQoJ18nKTtcclxuICAgICAgICBsZXQgaW5kZXhzID0gXCJcIjtcclxuICAgICAgICBhcnIuZm9yRWFjaCgoeDphbnkpID0+IHtcclxuICAgICAgICAgIGluZGV4cyA9IGluZGV4cy5jb25jYXQoXCJfXCIpLmNvbmNhdCh4KTtcclxuICAgICAgICAgIGluZGV4QXJyLnB1c2goaW5kZXhzLnN1YnN0cmluZygxKSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbmRleEFyciA9IGluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuZmlsdGVyKHYgPT4ge1xyXG4gICAgICByZXR1cm4gIWluZGV4QXJyLmluY2x1ZGVzKHYpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VhcmNoTm9kZUluZGV4KG5vZGU6IGFueSwgdmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIGlmIChrZXkpIHtcclxuICAgICAga2V5ID0ga2V5ICsgJ18nO1xyXG4gICAgfVxyXG4gICAgbm9kZS5mb3JFYWNoKChkOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICBpZiAoZFtmaWVsZF0gPT09IE51bWJlcih2YWx1ZSkgfHwgZFtmaWVsZF0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtSW5kZXggPSB0aGlzLml0ZW1JbmRleC5jb25jYXQoa2V5ICsgJycgKyBpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkLlZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IGsgPSBrZXkgKyAnJyArIGk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hOb2RlSW5kZXgoZC5WYWx1ZSwgdmFsdWUsIGssIGZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kQWxsID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBub2RlID0gdGhpcy5nZXRJdGVtcygpO1xyXG4gICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kQWxsTm9kZShub2RlLCAnJyk7XHJcbiAgICAgIH0gICAgXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29sbGFwc2VBbGwgPSAoKSA9PiB7XHJcbiAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBhbmRBbGxOb2RlKG5vZGU6IGFueSwga2V5OiBzdHJpbmcpIHtcclxuICAgIGlmIChrZXkpIHtcclxuICAgICAga2V5ID0ga2V5ICsgJ18nO1xyXG4gICAgfVxyXG4gICAgbm9kZS5mb3JFYWNoKChkOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkLlZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IGsgPSBrZXkgKyAnJyArIGk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5jb25jYXQoayk7XHJcbiAgICAgICAgdGhpcy5leHBhbmRBbGxOb2RlKGQuVmFsdWUsIGspO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDb2xsYXBzZShub2RlKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuZmlsdGVyKGsgPT4gayAhPT0gbm9kZS5pbmRleCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRXhwYW5kKG5vZGUpIHtcclxuICAgICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5jb25jYXQobm9kZS5pbmRleCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RW5hYmxlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkgPSAhc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpc2libGUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlID0gc3RhdHVzO1xyXG4gICAgdGhpcy5kYXRhLlZpc2libGUgPSBzdGF0dXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UmVxdWlyZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1JlcXVpcmVkID0gc3RhdHVzO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5jaGFuZ2VWYWxpZGF0b3Ioc3RhdHVzLCB0aGlzLmdyb3VwLCB0aGlzLmRhdGEuVmFsdWUsIHRoaXMuY29tcG9uZW50UHJvcGVydGllcywgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZShkYXRhSXRlbTogYW55LCBkYXRhOiBaRmllbGQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmIChkYXRhLkl0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICBjb25zdCBnZXRUZW1wbGF0ZUZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBkYXRhLkl0ZW1UZW1wbGF0ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWdldFRlbXBsYXRlRnVuYykge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiVGhlIChcIiArXHJcbiAgICAgICAgICBkYXRhLkl0ZW1UZW1wbGF0ZSArXHJcbiAgICAgICAgICBcIikgaXMgbm90IGRlZmluZWQgY29ycmVjdGx5LiBWYWx1ZSBjb250YWluczogXCIsXHJcbiAgICAgICAgICBnZXRUZW1wbGF0ZUZ1bmNcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGdldFRlbXBsYXRlRnVuYyh7XHJcbiAgICAgICAgZGF0YUl0ZW0sXHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBncm91cFxyXG4gICAgICB9IGFzIFpUcmVlVGVtcGxhdGVQYXJhbXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZGF0YUl0ZW0pXHJcbiAgICAgICAgLmZpbHRlcihkYXRhID0+IHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKVxyXG4gICAgICAgIC5qb2luKFwiLCBcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG9UcmVlSXRlbXMoZGF0YVNldDogYW55W10pIHtcclxuICAgIGNvbnN0IHRvVHJlZUl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3QgdHJlZUluZGV4OiBhbnkgPSB7fTtcclxuICAgIGNvbnN0IHBlbmRpbmdJdGVtczogYW55W10gPSBbXTtcclxuICAgIGRhdGFTZXQuZm9yRWFjaCgoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghZC5QYXJlbnRJZCkge1xyXG4gICAgICAgIHRvVHJlZUl0ZW1zLnB1c2goZCk7XHJcbiAgICAgICAgdHJlZUluZGV4W2QuSWRdID0gZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodHJlZUluZGV4W2QuUGFyZW50SWRdKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRJdGVtID0gdHJlZUluZGV4W2QuUGFyZW50SWRdO1xyXG4gICAgICAgICAgaWYgKCFwYXJlbnRJdGVtLlZhbHVlKSB7XHJcbiAgICAgICAgICAgIHBhcmVudEl0ZW0uVmFsdWUgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHBhcmVudEl0ZW0uVmFsdWUucHVzaChkKTtcclxuICAgICAgICAgIHRyZWVJbmRleFtkLklkXSA9IGQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBlbmRpbmdJdGVtcy5wdXNoKGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHBlbmRpbmdJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHBlbmRpbmdJdGVtcy5mb3JFYWNoKChkOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodHJlZUluZGV4W2QuUGFyZW50SWRdKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRJdGVtID0gdHJlZUluZGV4W2QuUGFyZW50SWRdO1xyXG4gICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZS5wdXNoKGQpO1xyXG4gICAgICAgICAgdHJlZUluZGV4W2QuSWRdID0gZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b1RyZWVJdGVtcztcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCB0YXJnZXROYW1lOiBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5jbGlja0FjdE5hbWUpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLmNsaWNrQWN0TmFtZSkge1xyXG4gICAgICAgIGNhc2UgJ0FkZE5vZGUnOlxyXG4gICAgICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMuZGF0YS5PbkFkZE5vZGU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdSZW1vdmVOb2RlJzpcclxuICAgICAgICAgIHRhcmdldE5hbWUgPSB0aGlzLmRhdGEuT25SZW1vdmVOb2RlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRhcmdldE5hbWUgPSB0aGlzLmRhdGEuT25JdGVtQ2xpY2s7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsaWNrQWN0TmFtZSA9IG51bGw7XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6IFwienRyZWVfb25TZWxlY3Rpb25DaGFuZ2VcIixcclxuICAgICAgdGFyZ2V0OiB0YXJnZXROYW1lLFxyXG4gICAgICBkYXRhOiBldmVudC5kYXRhSXRlbSxcclxuICAgICAgZXZlbnQ6IGV2ZW50LmluZGV4XHJcbiAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgfVxyXG5cclxuICBvbkFkZE5vZGUoZXZlbnQ6IGFueSwgZGF0YUl0ZW06IGFueSwgZGF0YTogWkZpZWxkLCBncm91cDogWkdyb3VwKSB7XHJcbiAgICB0aGlzLmNsaWNrQWN0TmFtZSA9ICdBZGROb2RlJztcclxuICAgIC8vIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy8gaWYgKHRoaXMuZGF0YS5PbkFkZE5vZGUpIHtcclxuICAgIC8vICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuT25BZGROb2RlKTtcclxuICAgIC8vICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAvLyAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgLy8gICAgIGNhbGxGdW5jKGRhdGFJdGVtLCBkYXRhLCBncm91cCwgZXZlbnQuaW5kZXgpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlTm9kZShldmVudDogYW55LCBkYXRhSXRlbTogYW55LCBkYXRhOiBaRmllbGQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIHRoaXMuY2xpY2tBY3ROYW1lID0gJ1JlbW92ZU5vZGUnO1xyXG4gIH1cclxuXHJcbiAgb25FZGl0Tm9kZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLk9uRWRpdE5vZGUpIHtcclxuICAgICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuT25FZGl0Tm9kZSk7XHJcbiAgICAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgICBjYWxsRnVuYyhldmVudCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlTm9kZURyb3AoZXZlbnQ6IFRyZWVJdGVtRHJvcEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZih0aGlzLmRhdGEuRHJhZ2dhYmxlID09PSBmYWxzZSl7XHJcbiAgICAgIGV2ZW50LnNldFZhbGlkKGZhbHNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNOb2RlRHJvcCA9IHRydWU7XHJcbiAgICBjb25zdCBkcm9wSGFuZGxlciA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgdGhpcyxcclxuICAgICAgdGhpcy5kYXRhLk9uRHJvcFxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgZHJvcEhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBjb25zdCBjYWxsRnVuYyA9IGRyb3BIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBwcmV2ZW50IGRyb3AgaWYgYXR0ZW1wdGluZyB0byBhZGQgdG8gZmlsZVxyXG4gICAgLy8gaWYgKGlzRmlsZShldmVudC5kZXN0aW5hdGlvbkl0ZW0uaXRlbS5kYXRhSXRlbS50ZXh0KSAmJiBldmVudC5kcm9wUG9zaXRpb24gPT09IERyb3BQb3NpdGlvbi5PdmVyKSB7XHJcbiAgICAvLyAgICAgZXZlbnQuc2V0VmFsaWQoZmFsc2UpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlTm9kZURyYWdFbmQoZXZlbnQ6IFRyZWVJdGVtRHJhZ0V2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNOb2RlRHJvcCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzTm9kZURyb3AgPSBmYWxzZTtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ0l0ZW1zOiAnLCB0aGlzLml0ZW1zKTtcclxuICAgIGNvbnN0IHRhcmdldCA9IFtdO1xyXG4gICAgdGhpcy51cGRhdGVDaGFuZ2VUb0RhdGFTZXQoaXRlbXMsIHRhcmdldCk7XHJcbiAgICAvLyB0aGlzLmRhdGFTZXQgPSB0YXJnZXQ7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUodGhpcy5kYXRhLlZhbHVlLCB0YXJnZXQsIHRoaXMuZ3JvdXApO1xyXG4gICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICB0eXBlOiBcInp0cmVlLW9uVHJlZU5vZGVEcmFnRW5kXCIsXHJcbiAgICAgIHRhcmdldDogdGhpcy5kYXRhLk9uQ2hhbmdlLFxyXG4gICAgICBkYXRhOiB0YXJnZXRcclxuICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQ2hhbmdlVG9EYXRhU2V0KHNvdXJjZTogQXJyYXk8YW55PiwgdGFyZ2V0OiBBcnJheTxhbnk+KSB7XHJcbiAgICBzb3VyY2UuZm9yRWFjaChkID0+IHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZC5WYWx1ZSkpIHtcclxuICAgICAgICBjb25zdCB0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkKSk7XHJcbiAgICAgICAgdC5WYWx1ZSA9IFtdO1xyXG4gICAgICAgIHRhcmdldC5wdXNoKHQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2hhbmdlVG9EYXRhU2V0KGQuVmFsdWUsIHQuVmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHQgPSBPYmplY3QuYXNzaWduKHt9LCBkKTtcclxuICAgICAgICB0LlZhbHVlID0gdC5fRGF0YVZhbHVlO1xyXG4gICAgICAgIGRlbGV0ZSB0Ll9EYXRhVmFsdWU7XHJcbiAgICAgICAgdGFyZ2V0LnB1c2godCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBzZWFyY2ggZmVhdHVyZSAtIGZpbHRlcmFibGU6IHRydWVcclxuICBwdWJsaWMgaGFuZGxlRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlZhbHVlKTtcclxuICAgICAgaWYgKHRoaXMub3JpZ2luYWxJdGVtTGlzdCA9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1MaXN0ID0gdGhpcy5pdGVtcy5tYXAoaXRlbSA9PiBPYmplY3QuYXNzaWduKHt9LCBpdGVtKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLml0ZW1zID0gdGhpcy5vcmlnaW5hbEl0ZW1MaXN0Lm1hcChpdGVtID0+IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0pKTtcclxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuc2VhcmNoKHRoaXMuaXRlbXMsIHZhbHVlKTtcclxuICAgIGNvbnN0IGdyaWRWYWx1ZSA9IHRoaXMuZmlsdGVyUHJlZml4KHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICB0aGlzLmdyb3VwW2dyaWRWYWx1ZV0gPSB0YXJnZXQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbHRlclByZWZpeCh2YWx1ZU5hbWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlTmFtZS5zdGFydHNXaXRoKCd6RGF0YS4nKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVOYW1lLnNsaWNlKDYpO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlTmFtZS5zdGFydHNXaXRoKCdncm91cC56RGF0YS4nKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVOYW1lLnNsaWNlKDEyKTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZU5hbWUuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZS5zbGljZSg2KTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZU5hbWUpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VhcmNoKGl0ZW1zOiBhbnlbXSwgdGVybTogc3RyaW5nKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRhaW5zKGl0ZW0uTmFtZSwgdGVybSkpIHtcclxuICAgICAgICBhY2MucHVzaChpdGVtKTtcclxuICAgICAgfSBlbHNlIGlmIChpdGVtLlZhbHVlICYmIGl0ZW0uVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gdGhpcy5zZWFyY2goaXRlbS5WYWx1ZSwgdGVybSk7XHJcblxyXG4gICAgICAgIGlmIChuZXdJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB2YXIgZmlsdGVySXRlbSA9IGl0ZW07XHJcbiAgICAgICAgICBmaWx0ZXJJdGVtLlZhbHVlID0gbmV3SXRlbXM7XHJcbiAgICAgICAgICBhY2MucHVzaChmaWx0ZXJJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIFtdKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29udGFpbnModGV4dDogc3RyaW5nLCB0ZXJtOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigodGVybSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpKSA+PSAwO1xyXG4gIH1cclxuICAvLyAjZW5kcmVnaW9uIHNlYXJjaCBmZWF0dXJlIC0gZmlsdGVyYWJsZTogdHJ1ZVxyXG59XHJcbiJdfQ==
@@ -8581,6 +8581,7 @@ class ZtreeComponent {
8581
8581
  this.state = { expandedkeys: [] };
8582
8582
  this.itemIndex = [];
8583
8583
  this.selectedKeys = [];
8584
+ this.absoluteText = false;
8584
8585
  this.componentProperties = new ZComponentProperties();
8585
8586
  this.isExpanded = (dataItem, index) => {
8586
8587
  // console.log(index);
@@ -8656,6 +8657,10 @@ class ZtreeComponent {
8656
8657
  if (this.data.TreeviewExpandAll) {
8657
8658
  this.expandAll();
8658
8659
  }
8660
+ // fix text align issue
8661
+ if (this.data.OnAddNode || this.data.OnRemoveNode) {
8662
+ this.absoluteText = true;
8663
+ }
8659
8664
  }
8660
8665
  ngAfterViewInit() {
8661
8666
  // const componentId = ZComponentHelper.getComponentId(this.data);
@@ -8920,7 +8925,7 @@ class ZtreeComponent {
8920
8925
  ZtreeComponent.decorators = [
8921
8926
  { type: Component, args: [{
8922
8927
  selector: "app-ztree",
8923
- template: "<div style=\"width:100%\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <kendo-treeview [nodes]=\"getItems()\"\r\n kendoTreeViewExpandable\r\n kendoTreeViewSelectable\r\n kendoTreeViewDragAndDrop\r\n kendoTreeViewDragAndDropEditing\r\n [isExpanded]=\"isExpanded\"\r\n (collapse)=\"handleCollapse($event)\"\r\n (expand)=\"handleExpand($event)\"\r\n (nodeDrop)=\"handleNodeDrop($event)\"\r\n (nodeDragEnd)=\"handleNodeDragEnd($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [selectedKeys]=\"selectedKeys\"\r\n kendoTreeViewHierarchyBinding\r\n childrenField=\"Value\"\r\n [filterable]=\"data.Filterable\"\r\n textField=\"Name\"\r\n (filterChange)=\"handleFilter($event)\">\r\n\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem #nodetemplate>\r\n\r\n <ion-button *ngIf=\"!!data.OnAddNode\"\r\n (click)=\"onAddNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 2px;\" mat-raised-button color=\"primary\" size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnAddNodeVisible)\"> \r\n <fa-icon [icon]=\"'plus'\"></fa-icon>\r\n </ion-button>\r\n <ion-button *ngIf=\"!!data.OnRemoveNode\" (click)=\"onRemoveNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 15px 0 10px;\" color=\"danger\" mat-raised-button size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnRemoveNodeVisible)\"> \r\n <fa-icon [icon]=\"'minus'\"></fa-icon>\r\n </ion-button>\r\n\r\n <ion-label *ngIf=\"data.OnAddNode || data.OnRemoveNode\" style=\"position: absolute; top: 14px;\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n\r\n <ion-label *ngIf=\"!data.OnAddNode && !data.OnRemoveNode\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n </ng-template>\r\n </kendo-treeview>\r\n</div>\r\n",
8928
+ template: "<div style=\"width:100%\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <kendo-treeview [nodes]=\"getItems()\"\r\n kendoTreeViewExpandable\r\n kendoTreeViewSelectable\r\n kendoTreeViewDragAndDrop\r\n kendoTreeViewDragAndDropEditing\r\n [isExpanded]=\"isExpanded\"\r\n (collapse)=\"handleCollapse($event)\"\r\n (expand)=\"handleExpand($event)\"\r\n (nodeDrop)=\"handleNodeDrop($event)\"\r\n (nodeDragEnd)=\"handleNodeDragEnd($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [selectedKeys]=\"selectedKeys\"\r\n kendoTreeViewHierarchyBinding\r\n childrenField=\"Value\"\r\n [filterable]=\"data.Filterable\"\r\n textField=\"Name\"\r\n (filterChange)=\"handleFilter($event)\">\r\n\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem #nodetemplate>\r\n\r\n <ion-button *ngIf=\"!!data.OnAddNode\"\r\n (click)=\"onAddNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 2px;\" mat-raised-button color=\"primary\" size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnAddNodeVisible)\"> \r\n <fa-icon [icon]=\"'plus'\"></fa-icon>\r\n </ion-button>\r\n <ion-button *ngIf=\"!!data.OnRemoveNode\" (click)=\"onRemoveNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 15px 0 10px;\" color=\"danger\" mat-raised-button size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnRemoveNodeVisible)\"> \r\n <fa-icon [icon]=\"'minus'\"></fa-icon>\r\n </ion-button>\r\n\r\n <ion-label *ngIf=\"absoluteText\" style=\"position: absolute; top: 14px;\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n\r\n <ion-label *ngIf=\"!absoluteText\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n </ng-template>\r\n </kendo-treeview>\r\n</div>\r\n",
8924
8929
  styles: [":host{--ion-color-primary:#479400;--ion-color-primary-rgb:56,128,255;--ion-color-primary-contrast:#fff;--ion-color-primary-contrast-rgb:255,255,255;--ion-color-primary-shade:#3171e0;--ion-color-primary-tint:#4c8dff}:host ::ng-deep kendo-treeview .k-treeview-leaf{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;border:1px solid #c8dbf5;background-color:#e3ecf8;color:#0a45ab;font-size:13px;cursor:pointer}:host ::ng-deep kendo-treeview .k-treeview-leaf.k-state-selected{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;background-color:#a9c3e8;color:#0a45ab;font-size:13px;cursor:pointer}:host ::ng-deep kendo-treeview .k-treeview-leaf.k-state-hover,:host ::ng-deep kendo-treeview .k-treeview-leaf:hover{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;background-color:#c9daf2;color:#0a45ab;font-size:13px;cursor:pointer}"]
8925
8930
  },] }
8926
8931
  ];