@ruc-lib/org-chart 2.0.0 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/interfaces/org-chart.mjs +1 -1
- package/esm2020/lib/org-chart/org-chart.component.mjs +3 -3
- package/fesm2015/ruc-lib-org-chart.mjs +2 -2
- package/fesm2015/ruc-lib-org-chart.mjs.map +1 -1
- package/fesm2020/ruc-lib-org-chart.mjs +2 -2
- package/fesm2020/ruc-lib-org-chart.mjs.map +1 -1
- package/package.json +5 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ludGVyZmFjZXMvb3JnLWNoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tVHJlZU5vZGUgZXh0ZW5kcyBUcmVlTm9kZSB7XHJcbiAgICBjdXN0b21Ob2RlU3R5bGU/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ludGVyZmFjZXMvb3JnLWNoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tVHJlZU5vZGUgZXh0ZW5kcyBUcmVlTm9kZSB7XHJcbiAgICBjdXN0b21Ob2RlU3R5bGU/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9OyAvLyBTdHlsaW5nIGZvciBvcmcgY2hhcnQgbm9kZVxyXG4gICAgb3JpZ2luYWxTdHlsZT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH07IC8vIGlnbm9yZSBpdCBhcyBpdHMgYXNzaWduaW5nIGluc2lkZSBsaWJyYXJ5XHJcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZzsgLy8gZGVzY3JpcHRpb24gaW5zaWRlIG5vZGUgd2hlbiB3ZSBob3ZlciBvbiBpdFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbU5vZGVTdHlsZSB7XHJcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nOyAvL05vZGUgYmFja2dyb3VuZCBjb2xvdXJcclxuICBjb2xvcj86IHN0cmluZzsgLy9Ob2RlIGNvbG9yc1xyXG4gIHBhZGRpbmc/OiBzdHJpbmc7IC8vQmFzaWMgcGFkZGluZ1xyXG4gIGJvcmRlclJhZGl1cz86IHN0cmluZzsgLy9Cb3JkZXIgcmFkaW91c1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE9yZ0RhdGFJdGVtIHtcclxuICBsYWJlbD86IHN0cmluZztcclxuICBleHBhbmRlZD86IGJvb2xlYW47IFxyXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG4gIGN1c3RvbU5vZGVTdHlsZT86IEN1c3RvbU5vZGVTdHlsZTsgLy8gQ3VzdG9tIHN0eWxpbmcgZm9yIG5vZGVcclxuICB0eXBlPzogc3RyaW5nOyAvLyBpZ25vcmUgaXQgYXMgaXQgaXMgYXNzaWduaW5nIGluc2lkZSBsaWJyYXJ5IFxyXG4gIGRhdGE/OiB7XHJcbiAgICBpbWFnZT86IHN0cmluZztcclxuICAgIG5hbWU/OiBzdHJpbmc7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gIH07XHJcbiAgY2hpbGRyZW4/OiBPcmdEYXRhSXRlbVtdO1xyXG4gIG9yaWdpbmFsU3R5bGU/OiBDdXN0b21Ob2RlU3R5bGU7IC8vIEN1c3RvbSBzdHlsaW5nIGZvciBub2RlXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT3JnRGF0YSB7XHJcbiAgaXNEaXNwbGF5SGFtYmVyZ2VyTWVudT86IGJvb2xlYW47IC8vIFRvIGRpc3BsYXkgU2VhcmNoIGJhci4gSXQgY2FuIGJlIHRydWUgfCBmYWxzZVxyXG4gIGlzRGlzcGxheVNlYXJjaEJhcj86IGJvb2xlYW47IC8vIFRvIGRpc3BsYXkgU2VhcmNoIGJhci4gSXQgY2FuIGJlIHRydWUgfCBmYWxzZVxyXG4gIG5vZGVUZW1wbGF0ZTogc3RyaW5nOyAgLy8gVGVtcGxhdGUgaGF2ZSB0aHJlZSBvcHRpb25zICdwb3J0cmFpdCcgfCAndHJpYW5nbGUnIHwgJ2xhbmRzY2FwZSc7XHJcbiAgaGFtYmVyZ2VyTWVudUxpc3Q6IHsgbGFiZWw6IHN0cmluZzsgaWQ6IG51bWJlciB9W107XHJcbiAgZ3JleU5vZGVTdHlsZTogQ3VzdG9tTm9kZVN0eWxlO1xyXG4gIG9yZ0RhdGE6IE9yZ0RhdGFJdGVtW107XHJcbn1cclxuICAiXX0=
|
|
@@ -194,10 +194,10 @@ export class OrgChartComponent {
|
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
OrgChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OrgChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
197
|
-
OrgChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OrgChartComponent, selector: "uxp-org-chart", inputs: { rucInputData: "rucInputData", customTheme: "customTheme" }, viewQueries: [{ propertyName: "orgChart", first: true, predicate: ["orgChart"], descendants: true }], ngImport: i0, template: "<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span
|
|
197
|
+
OrgChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OrgChartComponent, selector: "uxp-org-chart", inputs: { rucInputData: "rucInputData", customTheme: "customTheme" }, viewQueries: [{ propertyName: "orgChart", first: true, predicate: ["orgChart"], descendants: true }], ngImport: i0, template: "<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span><img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"portraitImageDimension\" /></span>\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'triangle'\" class=\"flex trianlge-up flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <div *ngIf=\"!node.data.image\" class=\"triangleImageDimension\">\r\n </div>\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"triangleImageDimension\" />\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'landscape'\">\r\n <div class=\"card borderSolidGrey\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\">\r\n <div class=\"body\" >\r\n <div class=\"icon\">\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"landscapeImageDimension\" />\r\n </div>\r\n <div class=\"content\">\r\n <div>{{node.data.name}}</div>\r\n <div>{{node.data.title}}</div>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-organizationChart>\r\n </div>\r\n \r\n</div>", styles: [".org-chart-container{overflow-x:auto}.nodeContent{border:none;padding:1.5em;border-radius:\"8px\";background-color:none;color:#000}.card{display:flex;width:250px;height:100px;padding:24px;align-self:stretch;align-items:flex-start}.card .body{width:100%;display:flex}.card .body .icon{width:64px;height:64px}.trianlge-up{width:220px;background-color:#980104;clip-path:polygon(50% 0%,0% 100%,100% 100%)}mat-form-field{margin:10px}::ng-deep .p-organizationchart .p-organizationchart-node-content{border:none;background:none;color:#495057;padding:0!important}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler{background-color:#dee2e6;cursor:pointer}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon{top:.2rem}.container{display:flex;justify-content:space-between;width:100%}.container .left{margin-right:auto}.container .right{margin-left:auto}mat-icon-button{margin-right:10px}.mat-form-field{margin-left:10px}.borderSolidGrey{border:1px solid lightgray}.landscapeImageDimension{width:3em;height:3em}.portraitImageDimension,.triangleImageDimension{margin-bottom:4px;width:3em;height:3em}\n"], dependencies: [{ 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.OrganizationChart, selector: "p-organizationChart", inputs: ["value", "style", "styleClass", "selectionMode", "preserveSpace", "selection"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
198
198
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OrgChartComponent, decorators: [{
|
|
199
199
|
type: Component,
|
|
200
|
-
args: [{ selector: 'uxp-org-chart', template: "<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span
|
|
200
|
+
args: [{ selector: 'uxp-org-chart', template: "<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span><img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"portraitImageDimension\" /></span>\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'triangle'\" class=\"flex trianlge-up flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <div *ngIf=\"!node.data.image\" class=\"triangleImageDimension\">\r\n </div>\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"triangleImageDimension\" />\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'landscape'\">\r\n <div class=\"card borderSolidGrey\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\">\r\n <div class=\"body\" >\r\n <div class=\"icon\">\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"landscapeImageDimension\" />\r\n </div>\r\n <div class=\"content\">\r\n <div>{{node.data.name}}</div>\r\n <div>{{node.data.title}}</div>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-organizationChart>\r\n </div>\r\n \r\n</div>", styles: [".org-chart-container{overflow-x:auto}.nodeContent{border:none;padding:1.5em;border-radius:\"8px\";background-color:none;color:#000}.card{display:flex;width:250px;height:100px;padding:24px;align-self:stretch;align-items:flex-start}.card .body{width:100%;display:flex}.card .body .icon{width:64px;height:64px}.trianlge-up{width:220px;background-color:#980104;clip-path:polygon(50% 0%,0% 100%,100% 100%)}mat-form-field{margin:10px}::ng-deep .p-organizationchart .p-organizationchart-node-content{border:none;background:none;color:#495057;padding:0!important}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler{background-color:#dee2e6;cursor:pointer}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon{top:.2rem}.container{display:flex;justify-content:space-between;width:100%}.container .left{margin-right:auto}.container .right{margin-left:auto}mat-icon-button{margin-right:10px}.mat-form-field{margin-left:10px}.borderSolidGrey{border:1px solid lightgray}.landscapeImageDimension{width:3em;height:3em}.portraitImageDimension,.triangleImageDimension{margin-bottom:4px;width:3em;height:3em}\n"] }]
|
|
201
201
|
}], propDecorators: { rucInputData: [{
|
|
202
202
|
type: Input
|
|
203
203
|
}], customTheme: [{
|
|
@@ -206,4 +206,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
206
206
|
type: ViewChild,
|
|
207
207
|
args: ['orgChart', { static: false }]
|
|
208
208
|
}] } });
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvb3JnLWNoYXJ0L29yZy1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL29yZy1jaGFydC9vcmctY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7O0FBRTlELDJGQUEyRjtBQU0zRixNQUFNLE9BQU8saUJBQWlCO0lBTDlCO1FBU0UsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixnQkFBVyxHQUEwQixJQUFJLENBQUM7S0EyTTNDO0lBdk1DLGlDQUFpQztJQUNqQyxRQUFRO1FBQ04sSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pFLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxxREFBcUQ7UUFDeEYsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsNEJBQTRCLENBQUMsT0FBZ0I7UUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDNUMsT0FBTyxDQUFDLGFBQWEsR0FBRztnQkFDdEIsZUFBZSxFQUFFLFNBQVM7Z0JBQzFCLEtBQUssRUFBRSxT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N0IsU0FBUzsrQkFDRSxlQUFlOzhCQUtoQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS29DLFFBQVE7c0JBQWpELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEN1c3RvbVRyZWVOb2RlLCBPcmdEYXRhLCBPcmdEYXRhSXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvb3JnLWNoYXJ0JztcclxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IGNoZWNrUHJvcHNUeXBlLCBkb3dubG9hZENoYXJ0IH0gZnJvbSAnLi4vLi4vdXRpbHMvY2hhcnQtZG93bmxvYWQudXRpbCc7XHJcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkNoYXJ0IH0gZnJvbSAncHJpbWVuZy9vcmdhbml6YXRpb25jaGFydCc7XHJcblxyXG4vKiogRGlzcGxheXMgYW4gb3JnYW5pemF0aW9uYWwgY2hhcnQgd2l0aCBub2RlcyBhbmQgcmVsYXRpb25zaGlwcyAoT3JnIENoYXJ0IENvbXBvbmVudCkgICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndXhwLW9yZy1jaGFydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL29yZy1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vb3JnLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPcmdDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgcnVjSW5wdXREYXRhITogT3JnRGF0YTtcclxuICBASW5wdXQoKSBjdXN0b21UaGVtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHNlbGVjdGVkTm9kZXMhOiBDdXN0b21UcmVlTm9kZVtdO1xyXG4gIHNlYXJjaFRleHQgPSAnJztcclxuICBob3ZlcmVkTm9kZTogQ3VzdG9tVHJlZU5vZGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnb3JnQ2hhcnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgb3JnQ2hhcnQhOiBPcmdhbml6YXRpb25DaGFydDtcclxuXHJcbiAgLyoqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBsZXQgdXBkYXRlZEpzb24gPSB0aGlzLmFkZERlZmF1bHRLZXlzSWZOb3RBdmFpbGFibGUodGhpcy5ydWNJbnB1dERhdGEpO1xyXG4gICAgdGhpcy5ydWNJbnB1dERhdGEub3JnRGF0YSA9IHRoaXMudXBkYXRlUnVjSW5wdXREYXRhKHVwZGF0ZWRKc29uLm9yZ0RhdGEpO1xyXG4gICAgY2hlY2tQcm9wc1R5cGUodGhpcy5ydWNJbnB1dERhdGEpOyAvLyBUbyBjaGVjayBydWNJbnB1dERhdGEgaXMgaW4gY29ycmVjdCBmb3JtYXQgb3Igbm90IFxyXG4gICAgdGhpcy5leHBhbmRBbGxOb2RlcygpO1xyXG4gIH0gXHJcblxyXG4gIC8qKiBhZGQgZGVmYXVsdCBwcm9wZXJ0eSBmb3IgZ3JleSBub2RlcyBpZiB1c2VyIGRvZXMgbm90IHByb3ZpZGVkICovXHJcbiAgYWRkRGVmYXVsdEtleXNJZk5vdEF2YWlsYWJsZShvcmdEYXRhOiBPcmdEYXRhKSB7XHJcbiAgICBpZiAoIW9yZ0RhdGEuaGFzT3duUHJvcGVydHkoJ2dyZXlOb2RlU3R5bGUnKSkge1xyXG4gICAgICBvcmdEYXRhLmdyZXlOb2RlU3R5bGUgPSB7XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2QzZDNkMycsXHJcbiAgICAgICAgY29sb3I6ICcjODA4MDgwJyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBvcmdEYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqIG1hbmlwdWxhdGUgaW5wdXQganNvbiBhcyBJZiBjdXN0b21Ob2RlU3R5bGUgZXhpc3RzLCBjcmVhdGUgb3JpZ2luYWxTdHlsZSBmb3Igbm9kZSBhbmQgaXRzIGNoaWxkcmVuICAqL1xyXG4gIHVwZGF0ZVJ1Y0lucHV0RGF0YShkYXRhOiBPcmdEYXRhSXRlbVtdKTogT3JnRGF0YUl0ZW1bXSB7XHJcbiAgICByZXR1cm4gZGF0YS5tYXAoKG5vZGU6IE9yZ0RhdGFJdGVtKSA9PiB7XHJcbiAgICAgIG5vZGVbJ3R5cGUnXSA9ICdwZXJzb24nO1xyXG4gICAgICBpZiAobm9kZS5jdXN0b21Ob2RlU3R5bGUpIHtcclxuICAgICAgICBub2RlLm9yaWdpbmFsU3R5bGUgPSB7IC4uLm5vZGUuY3VzdG9tTm9kZVN0eWxlIH07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgbm9kZVsndHlwZSddID0gJ3BlcnNvbic7XHJcbiAgICAgICAgbm9kZS5jaGlsZHJlbiA9IHRoaXMudXBkYXRlUnVjSW5wdXREYXRhKG5vZGUuY2hpbGRyZW4pOyAvLyBSZWN1cnNpdmUgY2FsbFxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogRXhwYW5kcyBhbGwgbm9kZXMgaW4gdGhlIG9yZyBjaGFydCAqL1xyXG4gIGV4cGFuZEFsbE5vZGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ydWNJbnB1dERhdGEub3JnRGF0YSA9IHRoaXMuZXhwYW5kTm9kZXModGhpcy5ydWNJbnB1dERhdGEub3JnRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKiogUmVjdXJzaXZlbHkgZXhwYW5kcyBhbGwgbm9kZXMgaW4gdGhlIGdpdmVuIGFycmF5XHJcbiAgICogQHBhcmFtIG5vZGVzIE5vZGVzIHRvIGV4cGFuZCBAcmV0dXJucyBFeHBhbmRlZCBub2RlcyAqL1xyXG4gIGV4cGFuZE5vZGVzKG5vZGVzOiBPcmdEYXRhSXRlbVtdKTogT3JnRGF0YUl0ZW1bXSB7XHJcbiAgICByZXR1cm4gbm9kZXMubWFwKChub2RlKSA9PiAoe1xyXG4gICAgICAuLi5ub2RlLFxyXG4gICAgICBleHBhbmRlZDogdHJ1ZSxcclxuICAgICAgY2hpbGRyZW46IG5vZGUuY2hpbGRyZW4gPyB0aGlzLmV4cGFuZE5vZGVzKG5vZGUuY2hpbGRyZW4pIDogW10sXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKiogQ29sbGFwc2VzIGFsbCBub2RlcyBpbiB0aGUgb3JnIGNoYXJ0ICAgKi9cclxuICBjb2xsYXBzZUFsbE5vZGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ydWNJbnB1dERhdGEub3JnRGF0YSA9IHRoaXMuY29sbGFwc2VOb2Rlcyh0aGlzLnJ1Y0lucHV0RGF0YS5vcmdEYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKiBSZWN1cnNpdmVseSBjb2xsYXBzZXMgYWxsIG5vZGVzIGluIHRoZSBnaXZlbiBhcnJheVxyXG4gICAqIEBwYXJhbSBub2RlcyBOb2RlcyB0byBjb2xsYXBzZSBAcmV0dXJucyBDb2xsYXBzZWQgbm9kZXMgICovXHJcbiAgY29sbGFwc2VOb2Rlcyhub2RlczogT3JnRGF0YUl0ZW1bXSk6IE9yZ0RhdGFJdGVtW10ge1xyXG4gICAgcmV0dXJuIG5vZGVzLm1hcCgobm9kZSkgPT4gKHtcclxuICAgICAgLi4ubm9kZSxcclxuICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxyXG4gICAgICBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbiA/IHRoaXMuY29sbGFwc2VOb2Rlcyhub2RlLmNoaWxkcmVuKSA6IFtdLFxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdldHMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgYSBub2RlIGJhc2VkIG9uIHNlYXJjaCB0ZXh0XHJcbiAgICBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrIEByZXR1cm5zIFdoZXRoZXIgdGhlIG5vZGUgbWF0Y2hlcyB0aGUgc2VhcmNoIHRleHQgKi9cclxuICBnZXRCYWNrZ3JvdW5nQ29sb3JPZk5vZGUobm9kZTogQ3VzdG9tVHJlZU5vZGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICF0aGlzLnNlYXJjaFRleHQgfHxcclxuICAgICAgbm9kZS5kYXRhLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpIHx8XHJcbiAgICAgIG5vZGUuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpIHx8XHJcbiAgICAgIG5vZGUubGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqIEhhbmRsZXMgbm9kZSBob3ZlciBldmVudCBAcGFyYW0gbm9kZSBIb3ZlcmVkIG5vZGUgKi9cclxuICBvbk5vZGVIb3Zlcihub2RlOiBDdXN0b21UcmVlTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkgcmV0dXJuO1xyXG4gICAgdGhpcy5ob3ZlcmVkTm9kZSA9IG5vZGU7XHJcbiAgICB0aGlzLnVwZGF0ZU5vZGVTdHlsZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKiBIYW5kbGVzIG5vZGUgbGVhdmUgZXZlbnQgKi9cclxuICBvbk5vZGVMZWF2ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaG92ZXJlZE5vZGUgPSBudWxsO1xyXG4gICAgdGhpcy5yZXNldE5vZGVTdHlsZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKiAgIFVwZGF0ZXMgbm9kZSBzdHlsZXMgYmFzZWQgb24gdGhlIGhvdmVyZWQgbm9kZSAqL1xyXG4gIHVwZGF0ZU5vZGVTdHlsZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFwcGx5U3R5bGVzKHRoaXMucnVjSW5wdXREYXRhLm9yZ0RhdGEsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqICAgUmVzZXRzIG5vZGUgc3R5bGVzIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlICovXHJcbiAgcmVzZXROb2RlU3R5bGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hcHBseVN0eWxlcyh0aGlzLnJ1Y0lucHV0RGF0YS5vcmdEYXRhLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKiogQXBwbGllcyBncmV5IG5vZGUgc3R5bGUgdG8gbm9uLW1hdGNoaW5nIG5vZGVzIEBwYXJhbSBub2RlcyBOb2RlcyB0byBhcHBseSBzdHlsZXMgdG8gKi9cclxuICBhcHBseUdyZXlOb2Rlcyhub2RlczpPcmdEYXRhSXRlbVtdKTogdm9pZCB7XHJcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlOiBPcmdEYXRhSXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBpc01hdGNoaW5nID0gdGhpcy5zZWFyY2hUZXh0XHJcbiAgICAgICAgPyBub2RlLmRhdGE/LnRpdGxlLmluY2x1ZGVzKHRoaXMuc2VhcmNoVGV4dClcclxuICAgICAgICA6IGZhbHNlO1xyXG4gICAgICBub2RlLmN1c3RvbU5vZGVTdHlsZSA9IGlzTWF0Y2hpbmdcclxuICAgICAgICA/IG5vZGUuY3VzdG9tTm9kZVN0eWxlIHx8IG5vZGUub3JpZ2luYWxTdHlsZVxyXG4gICAgICAgIDoge1xyXG4gICAgICAgICAgICAuLi5ub2RlLm9yaWdpbmFsU3R5bGUsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5ydWNJbnB1dERhdGEuZ3JleU5vZGVTdHlsZS5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGlzLnJ1Y0lucHV0RGF0YS5ncmV5Tm9kZVN0eWxlLmNvbG9yLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseUdyZXlOb2Rlcyhub2RlLmNoaWxkcmVuKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogQXBwbGllcyBzdHlsZXMgdG8gbm9kZXMgYmFzZWQgb24gdGhlIGhvdmVyZWQgbm9kZVxyXG4gICAqIEBwYXJhbSBub2RlcyBOb2RlcyB0byBhcHBseSBzdHlsZXMgQHBhcmFtIGlzSG92ZXJlZCBXaGV0aGVyIHRoZSBub2RlIGlzIGhvdmVyZWQgKi9cclxuICBhcHBseVN0eWxlcyhub2RlczogT3JnRGF0YUl0ZW1bXSwgaXNIb3ZlcmVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGlmIChpc0hvdmVyZWQpIHtcclxuICAgICAgICBub2RlLmN1c3RvbU5vZGVTdHlsZSA9XHJcbiAgICAgICAgICBub2RlID09PSB0aGlzLmhvdmVyZWROb2RlIHx8XHJcbiAgICAgICAgICB0aGlzLmlzUGFyZW50KG5vZGUsIHRoaXMuaG92ZXJlZE5vZGUpIHx8XHJcbiAgICAgICAgICB0aGlzLmlzQ2hpbGQobm9kZSwgdGhpcy5ob3ZlcmVkTm9kZSlcclxuICAgICAgICAgICAgPyBub2RlLmN1c3RvbU5vZGVTdHlsZSB8fCBub2RlLm9yaWdpbmFsU3R5bGVcclxuICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAuLi5ub2RlLm9yaWdpbmFsU3R5bGUsXHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucnVjSW5wdXREYXRhLmdyZXlOb2RlU3R5bGUuYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMucnVjSW5wdXREYXRhLmdyZXlOb2RlU3R5bGUuY29sb3IsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub2RlLmN1c3RvbU5vZGVTdHlsZSA9IG5vZGUub3JpZ2luYWxTdHlsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgICB0aGlzLmFwcGx5U3R5bGVzKG5vZGUuY2hpbGRyZW4sIGlzSG92ZXJlZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqICBVc2UgdGhlIGRvd25sb2FkQ2hhcnQgdXRpbGl0eSBtZXRob2QgKi9cclxuICBkb3dubG9hZENoYXJ0KGZvcm1hdDogJ3BuZycgfCAnanBlZycgfCAncGRmJyk6IHZvaWQge1xyXG4gICAgY29uc3QgY2hhcnRDb250YWluZXIgPSB0aGlzLm9yZ0NoYXJ0LmVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBkb3dubG9hZENoYXJ0KGNoYXJ0Q29udGFpbmVyLCBmb3JtYXQpOyAvLyBDYWxscyB0aGUgdXRpbGl0eSBmdW5jdGlvblxyXG4gIH1cclxuXHJcbiAgLyoqIEhhbmRsZXMgbWVudSBjbGljayBldmVudCBAcGFyYW0gaWQgTWVudSBpdGVtIElEICAqL1xyXG4gIG9uTWVudUNsaWNrKGlkOiBudW1iZXIsZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHRoaXMuZG93bmxvYWRDaGFydCgncGRmJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICB0aGlzLmRvd25sb2FkQ2hhcnQoJ3BuZycpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZENoYXJ0KCdqcGVnJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbE5vZGVzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNTpcclxuICAgICAgICB0aGlzLmNvbGxhcHNlQWxsTm9kZXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gbWVudSBpdGVtIElEOiAke2lkfS4gUGxlYXNlIGVudGVyIHZhbGlkIGlkLmApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEdldHMgdG9vbHRpcCBkYXRhIGZvciBhIG5vZGUgQHBhcmFtIG5vZGUgTm9kZSB0byBnZXQgdG9vbHRpcCBkYXRhICovXHJcbiAgZ2V0VG9vbHRpcERhdGEobm9kZTogQ3VzdG9tVHJlZU5vZGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIG5vZGUuZGVzY3JpcHRpb24gfHwgJyc7XHJcbiAgfVxyXG5cclxuICAvKiogQ2hlY2tzIGlmIGEgbm9kZSBpcyBhIHBhcmVudCBvZiBhbm90aGVyIG5vZGUuXHJcbiAgICogQHBhcmFtIGN1cnJlbnROb2RlIFRoZSBjdXJyZW50IG5vZGUgdG8gY2hlY2suXHJcbiAgICogQHBhcmFtIGhvdmVyZWROb2RlIFRoZSBub2RlIHRvIGNoZWNrIGZvciBwYXJlbnRhZ2UuXHJcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY3VycmVudCBub2RlIGlzIGEgcGFyZW50IG9mIHRoZSBob3ZlcmVkIG5vZGUuICovXHJcbiAgaXNQYXJlbnQoXHJcbiAgICBjdXJyZW50Tm9kZTogVHJlZU5vZGUsXHJcbiAgICBob3ZlcmVkTm9kZTogVHJlZU5vZGUgfCBudWxsXHJcbiAgKTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGhvdmVyZWROb2RlICYmIGN1cnJlbnROb2RlLmNoaWxkcmVuPy5pbmNsdWRlcyhob3ZlcmVkTm9kZSk7XHJcbiAgfVxyXG5cclxuICAvKiogQ2hlY2tzIGlmIGEgbm9kZSBpcyBhIGNoaWxkIG9mIGFub3RoZXIgbm9kZS5cclxuICAgKiBAcGFyYW0gbm9kZSBUaGUgbm9kZSB0byBjaGVjayBmb3IgY2hpbGQgc3RhdHVzXHJcbiAgICogQHBhcmFtIHRhcmdldCBUaGUgbm9kZSB0byBjaGVjayBmb3IgcGFyZW50YWdlLlxyXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIG5vZGUgaXMgYSBjaGlsZCBvZiB0aGUgdGFyZ2V0IG5vZGUuKi9cclxuICBpc0NoaWxkKG5vZGU6IFRyZWVOb2RlLCB0YXJnZXQ6IFRyZWVOb2RlIHwgbnVsbCk6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0YXJnZXQgJiYgdGFyZ2V0LmNoaWxkcmVuPy5pbmNsdWRlcyhub2RlKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz17e2N1c3RvbVRoZW1lfX0+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gICAgPCEtLSBIYW1idXJnZXIgTWVudSAtLT5cclxuICAgIDxidXR0b24gKm5nSWY9XCJydWNJbnB1dERhdGEuaXNEaXNwbGF5SGFtYmVyZ2VyTWVudSA9PT0gdHJ1ZVwiIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIFxyXG4gICAgICBjbGFzcz1cImxlZnQgaGFtYnVyZ2VyLWJ1dHRvblwiPlxyXG4gICAgICA8bWF0LWljb24+bWVudTwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICBcclxuICAgIDwhLS0gTWVudSAtLT5cclxuICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgbWVudSBvZiBydWNJbnB1dERhdGEuaGFtYmVyZ2VyTWVudUxpc3RcIiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvbk1lbnVDbGljayhtZW51LmlkLCAkZXZlbnQpO1wiIFxyXG4gICAgICBbaWRdPVwiJ21lbnUtaXRlbS0nICsgbWVudS5pZFwiPlxyXG4gICAgICAgIHt7IG1lbnUubGFiZWwgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1tZW51PlxyXG4gIFxyXG4gICAgPCEtLSBTZWFyY2ggQmFyIC0tPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwicnVjSW5wdXREYXRhLmlzRGlzcGxheVNlYXJjaEJhciA9PT0gdHJ1ZVwiIGNsYXNzPVwic2VhcmNoLWJveCByaWdodFwiIFxyXG4gICAgICA+XHJcbiAgICAgIDxtYXQtbGFiZWw+U2VhcmNoPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlR5cGUgdG8gc2VhcmNoLi4uXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgLz5cclxuICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeD5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuICBcclxuICBcclxuICA8ZGl2IGNsYXNzPVwib3JnLWNoYXJ0LWNvbnRhaW5lciBcIiBpZD1cIm9yZy1jaGFydC1kYXRhXCI+XHJcbiAgPHAtb3JnYW5pemF0aW9uQ2hhcnQgI29yZ0NoYXJ0IGNsYXNzPVwib3JnLWNoYXJ0XCIgW3ZhbHVlXT1cInRoaXMucnVjSW5wdXREYXRhLm9yZ0RhdGFcIiBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIlxyXG4gICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkTm9kZXNcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBsZXQtbm9kZSBwVGVtcGxhdGU9XCJwZXJzb25cIj5cclxuICAgICAgPGRpdiAqbmdJZj1cInRoaXMucnVjSW5wdXREYXRhLm5vZGVUZW1wbGF0ZSA9PT0gJ3BvcnRyYWl0J1wiICBjbGFzcz1cImZsZXggZmxleC1jb2wgbm9kZUNvbnRlbnRcIiBbbmdTdHlsZV09XCJnZXRCYWNrZ3JvdW5nQ29sb3JPZk5vZGUobm9kZSkgPyBub2RlLmN1c3RvbU5vZGVTdHlsZSA6IHJ1Y0lucHV0RGF0YS5ncmV5Tm9kZVN0eWxlXCIgKG1vdXNlZW50ZXIpPVwib25Ob2RlSG92ZXIobm9kZSlcIlxyXG4gICAgICAgIFt0aXRsZV09XCJnZXRUb29sdGlwRGF0YShub2RlKVwiIChtb3VzZWxlYXZlKT1cIm9uTm9kZUxlYXZlKClcIj4gXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCIgID5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwibm9kZS5kYXRhLmltYWdlXCI+PGltZyAgIFtzcmNdPVwibm9kZS5kYXRhLmltYWdlXCIgY2xhc3M9XCJwb3J0cmFpdEltYWdlRGltZW5zaW9uXCIgLz48L3NwYW4+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1ib2xkIG1iLTJcIj57eyBub2RlLmRhdGEubmFtZSB9fTwvZGl2PlxyXG4gICAgICAgICAgPGRpdj57eyBub2RlLmRhdGEudGl0bGUgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgPGRpdiAqbmdJZj1cInRoaXMucnVjSW5wdXREYXRhLm5vZGVUZW1wbGF0ZSA9PT0gJ3RyaWFuZ2xlJ1wiICBjbGFzcz1cImZsZXggdHJpYW5sZ2UtdXAgZmxleC1jb2wgbm9kZUNvbnRlbnRcIiBbbmdTdHlsZV09XCJnZXRCYWNrZ3JvdW5nQ29sb3JPZk5vZGUobm9kZSkgPyBub2RlLmN1c3RvbU5vZGVTdHlsZSA6IHJ1Y0lucHV0RGF0YS5ncmV5Tm9kZVN0eWxlXCIgKG1vdXNlZW50ZXIpPVwib25Ob2RlSG92ZXIobm9kZSlcIlxyXG4gICAgICAgIFt0aXRsZV09XCJnZXRUb29sdGlwRGF0YShub2RlKVwiIChtb3VzZWxlYXZlKT1cIm9uTm9kZUxlYXZlKClcIj4gXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCIgKm5nSWY9XCJub2RlLmRhdGEuaW1hZ2VcIiA+XHJcbiAgICAgICAgICA8aW1nICBbc3JjXT1cIm5vZGUuZGF0YS5pbWFnZVwiIGNsYXNzPVwidHJpYW5nbGVJbWFnZURpbWVuc2lvblwiIC8+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1ib2xkIG1iLTJcIj57eyBub2RlLmRhdGEubmFtZSB9fTwvZGl2PlxyXG4gICAgICAgICAgPGRpdj57eyBub2RlLmRhdGEudGl0bGUgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJ0aGlzLnJ1Y0lucHV0RGF0YS5ub2RlVGVtcGxhdGUgPT09ICdsYW5kc2NhcGUnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlclNvbGlkR3JleVwiIFtuZ1N0eWxlXT1cImdldEJhY2tncm91bmdDb2xvck9mTm9kZShub2RlKSA/IG5vZGUuY3VzdG9tTm9kZVN0eWxlIDogcnVjSW5wdXREYXRhLmdyZXlOb2RlU3R5bGVcIlxyXG4gICAgICAobW91c2VlbnRlcik9XCJvbk5vZGVIb3Zlcihub2RlKVwiXHJcbiAgICAgIFt0aXRsZV09XCJnZXRUb29sdGlwRGF0YShub2RlKVwiIChtb3VzZWxlYXZlKT1cIm9uTm9kZUxlYXZlKClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9keVwiID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCIgKm5nSWY9XCJub2RlLmRhdGEuaW1hZ2VcIj5cclxuICAgICAgICAgICAgPGltZyAgW3NyY109XCJub2RlLmRhdGEuaW1hZ2VcIiBjbGFzcz1cImxhbmRzY2FwZUltYWdlRGltZW5zaW9uXCIgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICA8ZGl2Pnt7bm9kZS5kYXRhLm5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXY+e3tub2RlLmRhdGEudGl0bGV9fTwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+IFxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3Atb3JnYW5pemF0aW9uQ2hhcnQ+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbjwvZGl2PiJdfQ==
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvb3JnLWNoYXJ0L29yZy1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL29yZy1jaGFydC9vcmctY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7O0FBRTlELDJGQUEyRjtBQU0zRixNQUFNLE9BQU8saUJBQWlCO0lBTDlCO1FBU0UsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixnQkFBVyxHQUEwQixJQUFJLENBQUM7S0EyTTNDO0lBdk1DLGlDQUFpQztJQUNqQyxRQUFRO1FBQ04sSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pFLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxxREFBcUQ7UUFDeEYsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsNEJBQTRCLENBQUMsT0FBZ0I7UUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDNUMsT0FBTyxDQUFDLGFBQWEsR0FBRztnQkFDdEIsZUFBZSxFQUFFLFNBQVM7Z0JBQzFCLEtBQUssRUFBRSxT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N0IsU0FBUzsrQkFDRSxlQUFlOzhCQUtoQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS29DLFFBQVE7c0JBQWpELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEN1c3RvbVRyZWVOb2RlLCBPcmdEYXRhLCBPcmdEYXRhSXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvb3JnLWNoYXJ0JztcclxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IGNoZWNrUHJvcHNUeXBlLCBkb3dubG9hZENoYXJ0IH0gZnJvbSAnLi4vLi4vdXRpbHMvY2hhcnQtZG93bmxvYWQudXRpbCc7XHJcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkNoYXJ0IH0gZnJvbSAncHJpbWVuZy9vcmdhbml6YXRpb25jaGFydCc7XHJcblxyXG4vKiogRGlzcGxheXMgYW4gb3JnYW5pemF0aW9uYWwgY2hhcnQgd2l0aCBub2RlcyBhbmQgcmVsYXRpb25zaGlwcyAoT3JnIENoYXJ0IENvbXBvbmVudCkgICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndXhwLW9yZy1jaGFydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL29yZy1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vb3JnLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPcmdDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgcnVjSW5wdXREYXRhITogT3JnRGF0YTtcclxuICBASW5wdXQoKSBjdXN0b21UaGVtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHNlbGVjdGVkTm9kZXMhOiBDdXN0b21UcmVlTm9kZVtdO1xyXG4gIHNlYXJjaFRleHQgPSAnJztcclxuICBob3ZlcmVkTm9kZTogQ3VzdG9tVHJlZU5vZGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnb3JnQ2hhcnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgb3JnQ2hhcnQhOiBPcmdhbml6YXRpb25DaGFydDtcclxuXHJcbiAgLyoqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBsZXQgdXBkYXRlZEpzb24gPSB0aGlzLmFkZERlZmF1bHRLZXlzSWZOb3RBdmFpbGFibGUodGhpcy5ydWNJbnB1dERhdGEpO1xyXG4gICAgdGhpcy5ydWNJbnB1dERhdGEub3JnRGF0YSA9IHRoaXMudXBkYXRlUnVjSW5wdXREYXRhKHVwZGF0ZWRKc29uLm9yZ0RhdGEpO1xyXG4gICAgY2hlY2tQcm9wc1R5cGUodGhpcy5ydWNJbnB1dERhdGEpOyAvLyBUbyBjaGVjayBydWNJbnB1dERhdGEgaXMgaW4gY29ycmVjdCBmb3JtYXQgb3Igbm90IFxyXG4gICAgdGhpcy5leHBhbmRBbGxOb2RlcygpO1xyXG4gIH0gXHJcblxyXG4gIC8qKiBhZGQgZGVmYXVsdCBwcm9wZXJ0eSBmb3IgZ3JleSBub2RlcyBpZiB1c2VyIGRvZXMgbm90IHByb3ZpZGVkICovXHJcbiAgYWRkRGVmYXVsdEtleXNJZk5vdEF2YWlsYWJsZShvcmdEYXRhOiBPcmdEYXRhKSB7XHJcbiAgICBpZiAoIW9yZ0RhdGEuaGFzT3duUHJvcGVydHkoJ2dyZXlOb2RlU3R5bGUnKSkge1xyXG4gICAgICBvcmdEYXRhLmdyZXlOb2RlU3R5bGUgPSB7XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2QzZDNkMycsXHJcbiAgICAgICAgY29sb3I6ICcjODA4MDgwJyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBvcmdEYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqIG1hbmlwdWxhdGUgaW5wdXQganNvbiBhcyBJZiBjdXN0b21Ob2RlU3R5bGUgZXhpc3RzLCBjcmVhdGUgb3JpZ2luYWxTdHlsZSBmb3Igbm9kZSBhbmQgaXRzIGNoaWxkcmVuICAqL1xyXG4gIHVwZGF0ZVJ1Y0lucHV0RGF0YShkYXRhOiBPcmdEYXRhSXRlbVtdKTogT3JnRGF0YUl0ZW1bXSB7XHJcbiAgICByZXR1cm4gZGF0YS5tYXAoKG5vZGU6IE9yZ0RhdGFJdGVtKSA9PiB7XHJcbiAgICAgIG5vZGVbJ3R5cGUnXSA9ICdwZXJzb24nO1xyXG4gICAgICBpZiAobm9kZS5jdXN0b21Ob2RlU3R5bGUpIHtcclxuICAgICAgICBub2RlLm9yaWdpbmFsU3R5bGUgPSB7IC4uLm5vZGUuY3VzdG9tTm9kZVN0eWxlIH07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgbm9kZVsndHlwZSddID0gJ3BlcnNvbic7XHJcbiAgICAgICAgbm9kZS5jaGlsZHJlbiA9IHRoaXMudXBkYXRlUnVjSW5wdXREYXRhKG5vZGUuY2hpbGRyZW4pOyAvLyBSZWN1cnNpdmUgY2FsbFxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogRXhwYW5kcyBhbGwgbm9kZXMgaW4gdGhlIG9yZyBjaGFydCAqL1xyXG4gIGV4cGFuZEFsbE5vZGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ydWNJbnB1dERhdGEub3JnRGF0YSA9IHRoaXMuZXhwYW5kTm9kZXModGhpcy5ydWNJbnB1dERhdGEub3JnRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKiogUmVjdXJzaXZlbHkgZXhwYW5kcyBhbGwgbm9kZXMgaW4gdGhlIGdpdmVuIGFycmF5XHJcbiAgICogQHBhcmFtIG5vZGVzIE5vZGVzIHRvIGV4cGFuZCBAcmV0dXJucyBFeHBhbmRlZCBub2RlcyAqL1xyXG4gIGV4cGFuZE5vZGVzKG5vZGVzOiBPcmdEYXRhSXRlbVtdKTogT3JnRGF0YUl0ZW1bXSB7XHJcbiAgICByZXR1cm4gbm9kZXMubWFwKChub2RlKSA9PiAoe1xyXG4gICAgICAuLi5ub2RlLFxyXG4gICAgICBleHBhbmRlZDogdHJ1ZSxcclxuICAgICAgY2hpbGRyZW46IG5vZGUuY2hpbGRyZW4gPyB0aGlzLmV4cGFuZE5vZGVzKG5vZGUuY2hpbGRyZW4pIDogW10sXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKiogQ29sbGFwc2VzIGFsbCBub2RlcyBpbiB0aGUgb3JnIGNoYXJ0ICAgKi9cclxuICBjb2xsYXBzZUFsbE5vZGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ydWNJbnB1dERhdGEub3JnRGF0YSA9IHRoaXMuY29sbGFwc2VOb2Rlcyh0aGlzLnJ1Y0lucHV0RGF0YS5vcmdEYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKiBSZWN1cnNpdmVseSBjb2xsYXBzZXMgYWxsIG5vZGVzIGluIHRoZSBnaXZlbiBhcnJheVxyXG4gICAqIEBwYXJhbSBub2RlcyBOb2RlcyB0byBjb2xsYXBzZSBAcmV0dXJucyBDb2xsYXBzZWQgbm9kZXMgICovXHJcbiAgY29sbGFwc2VOb2Rlcyhub2RlczogT3JnRGF0YUl0ZW1bXSk6IE9yZ0RhdGFJdGVtW10ge1xyXG4gICAgcmV0dXJuIG5vZGVzLm1hcCgobm9kZSkgPT4gKHtcclxuICAgICAgLi4ubm9kZSxcclxuICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxyXG4gICAgICBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbiA/IHRoaXMuY29sbGFwc2VOb2Rlcyhub2RlLmNoaWxkcmVuKSA6IFtdLFxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdldHMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgYSBub2RlIGJhc2VkIG9uIHNlYXJjaCB0ZXh0XHJcbiAgICBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrIEByZXR1cm5zIFdoZXRoZXIgdGhlIG5vZGUgbWF0Y2hlcyB0aGUgc2VhcmNoIHRleHQgKi9cclxuICBnZXRCYWNrZ3JvdW5nQ29sb3JPZk5vZGUobm9kZTogQ3VzdG9tVHJlZU5vZGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICF0aGlzLnNlYXJjaFRleHQgfHxcclxuICAgICAgbm9kZS5kYXRhLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpIHx8XHJcbiAgICAgIG5vZGUuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpIHx8XHJcbiAgICAgIG5vZGUubGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqIEhhbmRsZXMgbm9kZSBob3ZlciBldmVudCBAcGFyYW0gbm9kZSBIb3ZlcmVkIG5vZGUgKi9cclxuICBvbk5vZGVIb3Zlcihub2RlOiBDdXN0b21UcmVlTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkgcmV0dXJuO1xyXG4gICAgdGhpcy5ob3ZlcmVkTm9kZSA9IG5vZGU7XHJcbiAgICB0aGlzLnVwZGF0ZU5vZGVTdHlsZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKiBIYW5kbGVzIG5vZGUgbGVhdmUgZXZlbnQgKi9cclxuICBvbk5vZGVMZWF2ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaG92ZXJlZE5vZGUgPSBudWxsO1xyXG4gICAgdGhpcy5yZXNldE5vZGVTdHlsZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKiAgIFVwZGF0ZXMgbm9kZSBzdHlsZXMgYmFzZWQgb24gdGhlIGhvdmVyZWQgbm9kZSAqL1xyXG4gIHVwZGF0ZU5vZGVTdHlsZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFwcGx5U3R5bGVzKHRoaXMucnVjSW5wdXREYXRhLm9yZ0RhdGEsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqICAgUmVzZXRzIG5vZGUgc3R5bGVzIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlICovXHJcbiAgcmVzZXROb2RlU3R5bGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hcHBseVN0eWxlcyh0aGlzLnJ1Y0lucHV0RGF0YS5vcmdEYXRhLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKiogQXBwbGllcyBncmV5IG5vZGUgc3R5bGUgdG8gbm9uLW1hdGNoaW5nIG5vZGVzIEBwYXJhbSBub2RlcyBOb2RlcyB0byBhcHBseSBzdHlsZXMgdG8gKi9cclxuICBhcHBseUdyZXlOb2Rlcyhub2RlczpPcmdEYXRhSXRlbVtdKTogdm9pZCB7XHJcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlOiBPcmdEYXRhSXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBpc01hdGNoaW5nID0gdGhpcy5zZWFyY2hUZXh0XHJcbiAgICAgICAgPyBub2RlLmRhdGE/LnRpdGxlLmluY2x1ZGVzKHRoaXMuc2VhcmNoVGV4dClcclxuICAgICAgICA6IGZhbHNlO1xyXG4gICAgICBub2RlLmN1c3RvbU5vZGVTdHlsZSA9IGlzTWF0Y2hpbmdcclxuICAgICAgICA/IG5vZGUuY3VzdG9tTm9kZVN0eWxlIHx8IG5vZGUub3JpZ2luYWxTdHlsZVxyXG4gICAgICAgIDoge1xyXG4gICAgICAgICAgICAuLi5ub2RlLm9yaWdpbmFsU3R5bGUsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5ydWNJbnB1dERhdGEuZ3JleU5vZGVTdHlsZS5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGlzLnJ1Y0lucHV0RGF0YS5ncmV5Tm9kZVN0eWxlLmNvbG9yLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseUdyZXlOb2Rlcyhub2RlLmNoaWxkcmVuKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogQXBwbGllcyBzdHlsZXMgdG8gbm9kZXMgYmFzZWQgb24gdGhlIGhvdmVyZWQgbm9kZVxyXG4gICAqIEBwYXJhbSBub2RlcyBOb2RlcyB0byBhcHBseSBzdHlsZXMgQHBhcmFtIGlzSG92ZXJlZCBXaGV0aGVyIHRoZSBub2RlIGlzIGhvdmVyZWQgKi9cclxuICBhcHBseVN0eWxlcyhub2RlczogT3JnRGF0YUl0ZW1bXSwgaXNIb3ZlcmVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGlmIChpc0hvdmVyZWQpIHtcclxuICAgICAgICBub2RlLmN1c3RvbU5vZGVTdHlsZSA9XHJcbiAgICAgICAgICBub2RlID09PSB0aGlzLmhvdmVyZWROb2RlIHx8XHJcbiAgICAgICAgICB0aGlzLmlzUGFyZW50KG5vZGUsIHRoaXMuaG92ZXJlZE5vZGUpIHx8XHJcbiAgICAgICAgICB0aGlzLmlzQ2hpbGQobm9kZSwgdGhpcy5ob3ZlcmVkTm9kZSlcclxuICAgICAgICAgICAgPyBub2RlLmN1c3RvbU5vZGVTdHlsZSB8fCBub2RlLm9yaWdpbmFsU3R5bGVcclxuICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAuLi5ub2RlLm9yaWdpbmFsU3R5bGUsXHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucnVjSW5wdXREYXRhLmdyZXlOb2RlU3R5bGUuYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMucnVjSW5wdXREYXRhLmdyZXlOb2RlU3R5bGUuY29sb3IsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub2RlLmN1c3RvbU5vZGVTdHlsZSA9IG5vZGUub3JpZ2luYWxTdHlsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgICB0aGlzLmFwcGx5U3R5bGVzKG5vZGUuY2hpbGRyZW4sIGlzSG92ZXJlZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqICBVc2UgdGhlIGRvd25sb2FkQ2hhcnQgdXRpbGl0eSBtZXRob2QgKi9cclxuICBkb3dubG9hZENoYXJ0KGZvcm1hdDogJ3BuZycgfCAnanBlZycgfCAncGRmJyk6IHZvaWQge1xyXG4gICAgY29uc3QgY2hhcnRDb250YWluZXIgPSB0aGlzLm9yZ0NoYXJ0LmVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBkb3dubG9hZENoYXJ0KGNoYXJ0Q29udGFpbmVyLCBmb3JtYXQpOyAvLyBDYWxscyB0aGUgdXRpbGl0eSBmdW5jdGlvblxyXG4gIH1cclxuXHJcbiAgLyoqIEhhbmRsZXMgbWVudSBjbGljayBldmVudCBAcGFyYW0gaWQgTWVudSBpdGVtIElEICAqL1xyXG4gIG9uTWVudUNsaWNrKGlkOiBudW1iZXIsZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHRoaXMuZG93bmxvYWRDaGFydCgncGRmJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICB0aGlzLmRvd25sb2FkQ2hhcnQoJ3BuZycpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZENoYXJ0KCdqcGVnJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbE5vZGVzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNTpcclxuICAgICAgICB0aGlzLmNvbGxhcHNlQWxsTm9kZXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gbWVudSBpdGVtIElEOiAke2lkfS4gUGxlYXNlIGVudGVyIHZhbGlkIGlkLmApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEdldHMgdG9vbHRpcCBkYXRhIGZvciBhIG5vZGUgQHBhcmFtIG5vZGUgTm9kZSB0byBnZXQgdG9vbHRpcCBkYXRhICovXHJcbiAgZ2V0VG9vbHRpcERhdGEobm9kZTogQ3VzdG9tVHJlZU5vZGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIG5vZGUuZGVzY3JpcHRpb24gfHwgJyc7XHJcbiAgfVxyXG5cclxuICAvKiogQ2hlY2tzIGlmIGEgbm9kZSBpcyBhIHBhcmVudCBvZiBhbm90aGVyIG5vZGUuXHJcbiAgICogQHBhcmFtIGN1cnJlbnROb2RlIFRoZSBjdXJyZW50IG5vZGUgdG8gY2hlY2suXHJcbiAgICogQHBhcmFtIGhvdmVyZWROb2RlIFRoZSBub2RlIHRvIGNoZWNrIGZvciBwYXJlbnRhZ2UuXHJcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY3VycmVudCBub2RlIGlzIGEgcGFyZW50IG9mIHRoZSBob3ZlcmVkIG5vZGUuICovXHJcbiAgaXNQYXJlbnQoXHJcbiAgICBjdXJyZW50Tm9kZTogVHJlZU5vZGUsXHJcbiAgICBob3ZlcmVkTm9kZTogVHJlZU5vZGUgfCBudWxsXHJcbiAgKTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGhvdmVyZWROb2RlICYmIGN1cnJlbnROb2RlLmNoaWxkcmVuPy5pbmNsdWRlcyhob3ZlcmVkTm9kZSk7XHJcbiAgfVxyXG5cclxuICAvKiogQ2hlY2tzIGlmIGEgbm9kZSBpcyBhIGNoaWxkIG9mIGFub3RoZXIgbm9kZS5cclxuICAgKiBAcGFyYW0gbm9kZSBUaGUgbm9kZSB0byBjaGVjayBmb3IgY2hpbGQgc3RhdHVzXHJcbiAgICogQHBhcmFtIHRhcmdldCBUaGUgbm9kZSB0byBjaGVjayBmb3IgcGFyZW50YWdlLlxyXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIG5vZGUgaXMgYSBjaGlsZCBvZiB0aGUgdGFyZ2V0IG5vZGUuKi9cclxuICBpc0NoaWxkKG5vZGU6IFRyZWVOb2RlLCB0YXJnZXQ6IFRyZWVOb2RlIHwgbnVsbCk6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0YXJnZXQgJiYgdGFyZ2V0LmNoaWxkcmVuPy5pbmNsdWRlcyhub2RlKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz17e2N1c3RvbVRoZW1lfX0+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gICAgPCEtLSBIYW1idXJnZXIgTWVudSAtLT5cclxuICAgIDxidXR0b24gKm5nSWY9XCJydWNJbnB1dERhdGEuaXNEaXNwbGF5SGFtYmVyZ2VyTWVudSA9PT0gdHJ1ZVwiIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIFxyXG4gICAgICBjbGFzcz1cImxlZnQgaGFtYnVyZ2VyLWJ1dHRvblwiPlxyXG4gICAgICA8bWF0LWljb24+bWVudTwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICBcclxuICAgIDwhLS0gTWVudSAtLT5cclxuICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgbWVudSBvZiBydWNJbnB1dERhdGEuaGFtYmVyZ2VyTWVudUxpc3RcIiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvbk1lbnVDbGljayhtZW51LmlkLCAkZXZlbnQpO1wiIFxyXG4gICAgICBbaWRdPVwiJ21lbnUtaXRlbS0nICsgbWVudS5pZFwiPlxyXG4gICAgICAgIHt7IG1lbnUubGFiZWwgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1tZW51PlxyXG4gIFxyXG4gICAgPCEtLSBTZWFyY2ggQmFyIC0tPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwicnVjSW5wdXREYXRhLmlzRGlzcGxheVNlYXJjaEJhciA9PT0gdHJ1ZVwiIGNsYXNzPVwic2VhcmNoLWJveCByaWdodFwiIFxyXG4gICAgICA+XHJcbiAgICAgIDxtYXQtbGFiZWw+U2VhcmNoPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlR5cGUgdG8gc2VhcmNoLi4uXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgLz5cclxuICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeD5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuICBcclxuICBcclxuICA8ZGl2IGNsYXNzPVwib3JnLWNoYXJ0LWNvbnRhaW5lciBcIiBpZD1cIm9yZy1jaGFydC1kYXRhXCI+XHJcbiAgPHAtb3JnYW5pemF0aW9uQ2hhcnQgI29yZ0NoYXJ0IGNsYXNzPVwib3JnLWNoYXJ0XCIgW3ZhbHVlXT1cInRoaXMucnVjSW5wdXREYXRhLm9yZ0RhdGFcIiBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIlxyXG4gICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkTm9kZXNcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBsZXQtbm9kZSBwVGVtcGxhdGU9XCJwZXJzb25cIj5cclxuICAgICAgPGRpdiAqbmdJZj1cInRoaXMucnVjSW5wdXREYXRhLm5vZGVUZW1wbGF0ZSA9PT0gJ3BvcnRyYWl0J1wiICBjbGFzcz1cImZsZXggZmxleC1jb2wgbm9kZUNvbnRlbnRcIiBbbmdTdHlsZV09XCJnZXRCYWNrZ3JvdW5nQ29sb3JPZk5vZGUobm9kZSkgPyBub2RlLmN1c3RvbU5vZGVTdHlsZSA6IHJ1Y0lucHV0RGF0YS5ncmV5Tm9kZVN0eWxlXCIgKG1vdXNlZW50ZXIpPVwib25Ob2RlSG92ZXIobm9kZSlcIlxyXG4gICAgICAgIFt0aXRsZV09XCJnZXRUb29sdGlwRGF0YShub2RlKVwiIChtb3VzZWxlYXZlKT1cIm9uTm9kZUxlYXZlKClcIj4gXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCIgID5cclxuICAgICAgICAgIDxzcGFuPjxpbWcgICpuZ0lmPVwibm9kZS5kYXRhLmltYWdlXCIgW3NyY109XCJub2RlLmRhdGEuaW1hZ2VcIiBjbGFzcz1cInBvcnRyYWl0SW1hZ2VEaW1lbnNpb25cIiAvPjwvc3Bhbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LWJvbGQgbWItMlwiPnt7IG5vZGUuZGF0YS5uYW1lIH19PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2Pnt7IG5vZGUuZGF0YS50aXRsZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICA8ZGl2ICpuZ0lmPVwidGhpcy5ydWNJbnB1dERhdGEubm9kZVRlbXBsYXRlID09PSAndHJpYW5nbGUnXCIgIGNsYXNzPVwiZmxleCB0cmlhbmxnZS11cCBmbGV4LWNvbCBub2RlQ29udGVudFwiIFtuZ1N0eWxlXT1cImdldEJhY2tncm91bmdDb2xvck9mTm9kZShub2RlKSA/IG5vZGUuY3VzdG9tTm9kZVN0eWxlIDogcnVjSW5wdXREYXRhLmdyZXlOb2RlU3R5bGVcIiAobW91c2VlbnRlcik9XCJvbk5vZGVIb3Zlcihub2RlKVwiXHJcbiAgICAgICAgW3RpdGxlXT1cImdldFRvb2x0aXBEYXRhKG5vZGUpXCIgKG1vdXNlbGVhdmUpPVwib25Ob2RlTGVhdmUoKVwiPiBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIiAgPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIiFub2RlLmRhdGEuaW1hZ2VcIiBjbGFzcz1cInRyaWFuZ2xlSW1hZ2VEaW1lbnNpb25cIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGltZyAqbmdJZj1cIm5vZGUuZGF0YS5pbWFnZVwiIFtzcmNdPVwibm9kZS5kYXRhLmltYWdlXCIgY2xhc3M9XCJ0cmlhbmdsZUltYWdlRGltZW5zaW9uXCIgLz5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LWJvbGQgbWItMlwiPnt7IG5vZGUuZGF0YS5uYW1lIH19PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2Pnt7IG5vZGUuZGF0YS50aXRsZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cInRoaXMucnVjSW5wdXREYXRhLm5vZGVUZW1wbGF0ZSA9PT0gJ2xhbmRzY2FwZSdcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQgYm9yZGVyU29saWRHcmV5XCIgW25nU3R5bGVdPVwiZ2V0QmFja2dyb3VuZ0NvbG9yT2ZOb2RlKG5vZGUpID8gbm9kZS5jdXN0b21Ob2RlU3R5bGUgOiBydWNJbnB1dERhdGEuZ3JleU5vZGVTdHlsZVwiXHJcbiAgICAgIChtb3VzZWVudGVyKT1cIm9uTm9kZUhvdmVyKG5vZGUpXCJcclxuICAgICAgW3RpdGxlXT1cImdldFRvb2x0aXBEYXRhKG5vZGUpXCIgKG1vdXNlbGVhdmUpPVwib25Ob2RlTGVhdmUoKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib2R5XCIgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIj5cclxuICAgICAgICAgICAgPGltZyAqbmdJZj1cIm5vZGUuZGF0YS5pbWFnZVwiIFtzcmNdPVwibm9kZS5kYXRhLmltYWdlXCIgY2xhc3M9XCJsYW5kc2NhcGVJbWFnZURpbWVuc2lvblwiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgPGRpdj57e25vZGUuZGF0YS5uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2Pnt7bm9kZS5kYXRhLnRpdGxlfX08L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PiBcclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLW9yZ2FuaXphdGlvbkNoYXJ0PlxyXG4gIDwvZGl2PlxyXG4gIFxyXG48L2Rpdj4iXX0=
|
|
@@ -372,10 +372,10 @@ class OrgChartComponent {
|
|
|
372
372
|
}
|
|
373
373
|
}
|
|
374
374
|
OrgChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OrgChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
375
|
-
OrgChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OrgChartComponent, selector: "uxp-org-chart", inputs: { rucInputData: "rucInputData", customTheme: "customTheme" }, viewQueries: [{ propertyName: "orgChart", first: true, predicate: ["orgChart"], descendants: true }], ngImport: i0, template: "<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span
|
|
375
|
+
OrgChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OrgChartComponent, selector: "uxp-org-chart", inputs: { rucInputData: "rucInputData", customTheme: "customTheme" }, viewQueries: [{ propertyName: "orgChart", first: true, predicate: ["orgChart"], descendants: true }], ngImport: i0, template: "<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span><img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"portraitImageDimension\" /></span>\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'triangle'\" class=\"flex trianlge-up flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <div *ngIf=\"!node.data.image\" class=\"triangleImageDimension\">\r\n </div>\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"triangleImageDimension\" />\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'landscape'\">\r\n <div class=\"card borderSolidGrey\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\">\r\n <div class=\"body\" >\r\n <div class=\"icon\">\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"landscapeImageDimension\" />\r\n </div>\r\n <div class=\"content\">\r\n <div>{{node.data.name}}</div>\r\n <div>{{node.data.title}}</div>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-organizationChart>\r\n </div>\r\n \r\n</div>", styles: [".org-chart-container{overflow-x:auto}.nodeContent{border:none;padding:1.5em;border-radius:\"8px\";background-color:none;color:#000}.card{display:flex;width:250px;height:100px;padding:24px;align-self:stretch;align-items:flex-start}.card .body{width:100%;display:flex}.card .body .icon{width:64px;height:64px}.trianlge-up{width:220px;background-color:#980104;clip-path:polygon(50% 0%,0% 100%,100% 100%)}mat-form-field{margin:10px}::ng-deep .p-organizationchart .p-organizationchart-node-content{border:none;background:none;color:#495057;padding:0!important}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler{background-color:#dee2e6;cursor:pointer}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon{top:.2rem}.container{display:flex;justify-content:space-between;width:100%}.container .left{margin-right:auto}.container .right{margin-left:auto}mat-icon-button{margin-right:10px}.mat-form-field{margin-left:10px}.borderSolidGrey{border:1px solid lightgray}.landscapeImageDimension{width:3em;height:3em}.portraitImageDimension,.triangleImageDimension{margin-bottom:4px;width:3em;height:3em}\n"], dependencies: [{ 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.OrganizationChart, selector: "p-organizationChart", inputs: ["value", "style", "styleClass", "selectionMode", "preserveSpace", "selection"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
376
376
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OrgChartComponent, decorators: [{
|
|
377
377
|
type: Component,
|
|
378
|
-
args: [{ selector: 'uxp-org-chart', template: "<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span
|
|
378
|
+
args: [{ selector: 'uxp-org-chart', template: "<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span><img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"portraitImageDimension\" /></span>\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'triangle'\" class=\"flex trianlge-up flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <div *ngIf=\"!node.data.image\" class=\"triangleImageDimension\">\r\n </div>\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"triangleImageDimension\" />\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'landscape'\">\r\n <div class=\"card borderSolidGrey\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\">\r\n <div class=\"body\" >\r\n <div class=\"icon\">\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"landscapeImageDimension\" />\r\n </div>\r\n <div class=\"content\">\r\n <div>{{node.data.name}}</div>\r\n <div>{{node.data.title}}</div>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-organizationChart>\r\n </div>\r\n \r\n</div>", styles: [".org-chart-container{overflow-x:auto}.nodeContent{border:none;padding:1.5em;border-radius:\"8px\";background-color:none;color:#000}.card{display:flex;width:250px;height:100px;padding:24px;align-self:stretch;align-items:flex-start}.card .body{width:100%;display:flex}.card .body .icon{width:64px;height:64px}.trianlge-up{width:220px;background-color:#980104;clip-path:polygon(50% 0%,0% 100%,100% 100%)}mat-form-field{margin:10px}::ng-deep .p-organizationchart .p-organizationchart-node-content{border:none;background:none;color:#495057;padding:0!important}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler{background-color:#dee2e6;cursor:pointer}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon{top:.2rem}.container{display:flex;justify-content:space-between;width:100%}.container .left{margin-right:auto}.container .right{margin-left:auto}mat-icon-button{margin-right:10px}.mat-form-field{margin-left:10px}.borderSolidGrey{border:1px solid lightgray}.landscapeImageDimension{width:3em;height:3em}.portraitImageDimension,.triangleImageDimension{margin-bottom:4px;width:3em;height:3em}\n"] }]
|
|
379
379
|
}], propDecorators: { rucInputData: [{
|
|
380
380
|
type: Input
|
|
381
381
|
}], customTheme: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruc-lib-org-chart.mjs","sources":["../../src/utils/chart-download.util.ts","../../src/lib/org-chart/org-chart.component.ts","../../src/lib/org-chart/org-chart.component.html","../../src/lib/ruclib-org-chart.module.ts","../../src/index.ts","../../src/ruc-lib-org-chart.ts"],"sourcesContent":["import { jsPDF } from 'jspdf';\r\nimport html2canvas from 'html2canvas';\r\nimport { OrgData, OrgDataItem } from '../interfaces/org-chart';\r\n\r\n\r\nexport const downloadChart = (chartContainer: HTMLElement, format: 'png' | 'jpeg' | 'pdf'): void => {\r\n if (!chartContainer) {\r\n console.error('Chart container not found!');\r\n return;\r\n }\r\n\r\n // Capture the chart container as an image (either PNG or JPEG)\r\n if (format === 'pdf') {\r\n createPDF(chartContainer);\r\n } else {\r\n captureElementAsImage(chartContainer, format)\r\n .then((imgData) => {\r\n downloadImage(imgData, format); // Download as PNG or JPEG\r\n })\r\n .catch(handleCanvasError);\r\n }\r\n}\r\n\r\n// Capture the element as an image and return a promise\r\nexport const captureElementAsImage = (element: HTMLElement, format: 'png' | 'jpeg'): Promise<string> => {\r\n return new Promise((resolve, reject) => {\r\n html2canvas(element, {\r\n useCORS: true,\r\n scrollX: 0,\r\n scrollY: -window.scrollY,\r\n logging: false,\r\n backgroundColor: null,\r\n })\r\n .then((canvas) => {\r\n const imgData = canvas.toDataURL(`image/${format}`);\r\n resolve(imgData);\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n}\r\n\r\n// Downloads the org chart as a PDF document.\r\nexport const createPDF = (element: HTMLElement): void => {\r\n html2canvas(element, {\r\n useCORS: true,\r\n scale: 4, \r\n scrollX: 0,\r\n scrollY: -window.scrollY,\r\n logging: false,\r\n backgroundColor: null,\r\n })\r\n .then((canvas) => {\r\n const imgData = canvas.toDataURL('image/png'); // Capture as PNG (or you can use JPEG)\r\n const pdf = new jsPDF('p', 'mm', 'a4'); // Standard A4 page size\r\n\r\n // Get the dimensions of the PDF page\r\n const pdfWidth = pdf.internal.pageSize.width;\r\n const pdfHeight = pdf.internal.pageSize.height;\r\n\r\n const canvasWidth = canvas.width;\r\n const canvasHeight = canvas.height;\r\n\r\n const aspectRatio = canvasWidth / canvasHeight;\r\n\r\n let imgWidth = pdfWidth;\r\n let imgHeight = pdfWidth / aspectRatio;\r\n\r\n // If the image height exceeds the PDF page height, adjust it\r\n if (imgHeight > pdfHeight) {\r\n imgHeight = pdfHeight;\r\n imgWidth = pdfHeight * aspectRatio;\r\n }\r\n\r\n // Add the image to the PDF\r\n pdf.addImage(imgData, 'PNG', 0, 20, imgWidth, imgHeight); // Fit image on PDF page\r\n pdf.save('organization-chart.pdf'); // Download the PDF\r\n })\r\n .catch(handleCanvasError);\r\n}\r\n\r\n// Download the captured image in the required format (PNG/JPEG)\r\nexport const downloadImage = (imgData: string, format: 'png' | 'jpeg'): void => {\r\n const link = document.createElement('a');\r\n link.href = imgData;\r\n link.download = `organization-chart.${format}`;\r\n link.click();\r\n}\r\n\r\n// Error handler for any issues during canvas generation or file creation\r\nexport const handleCanvasError = (error: any): void => {\r\n console.error('Error generating file:', error);\r\n}\r\n\r\n \r\nexport const checkPropsType = (props: OrgData): void => {\r\n if (props.isDisplayHambergerMenu !== undefined && typeof props.isDisplayHambergerMenu !== 'boolean') {\r\n console.error('Error: isDisplayHambergerMenu should be a boolean.');\r\n }\r\n \r\n if (props.isDisplaySearchBar !== undefined && typeof props.isDisplaySearchBar !== 'boolean') {\r\n console.error('Error: isDisplaySearchBar should be a boolean.');\r\n }\r\n \r\n if (!['portrait', 'triangle', 'landscape'].includes(props.nodeTemplate)) {\r\n console.error('Error: nodeTemplate should be \"portrait\", \"triangle\", or \"landscape\".');\r\n }\r\n \r\n if (!Array.isArray(props.hambergerMenuList)) {\r\n console.error('Error: hambergerMenuList should be an array.');\r\n } else {\r\n props.hambergerMenuList.forEach(item => {\r\n if (typeof item.label !== 'string') {\r\n console.error('Error: hambergerMenuList label should be a string.');\r\n }\r\n if (typeof item.id !== 'number') {\r\n console.error('Error: hambergerMenuList id should be a number.');\r\n }\r\n });\r\n }\r\n \r\n // Check if greyNodeStyle is of type CustomNodeStyle\r\n const greyNodeStyle = props.greyNodeStyle;\r\n if (greyNodeStyle) {\r\n if (greyNodeStyle.backgroundColor && typeof greyNodeStyle.backgroundColor !== 'string') {\r\n console.error('Error: greyNodeStyle.backgroundColor should be a string.');\r\n }\r\n if (greyNodeStyle.color && typeof greyNodeStyle.color !== 'string') {\r\n console.error('Error: greyNodeStyle.color should be a string.');\r\n }\r\n if (greyNodeStyle.padding && typeof greyNodeStyle.padding !== 'string') {\r\n console.error('Error: greyNodeStyle.padding should be a string.');\r\n }\r\n if (greyNodeStyle.borderRadius && typeof greyNodeStyle.borderRadius !== 'string') {\r\n console.error('Error: greyNodeStyle.borderRadius should be a string.');\r\n }\r\n }\r\n \r\n // Check if orgData is an array of OrgDataItem objects\r\n if (!Array.isArray(props.orgData)) {\r\n console.error('Error: orgData should be an array.');\r\n } else {\r\n props.orgData.forEach(item => checkOrgDataItem(item));\r\n }\r\n }\r\n\r\n export const checkOrgDataItem = (item: OrgDataItem): void => {\r\n if (item.label !== undefined && typeof item.label !== 'string') {\r\n console.error('Error: OrgDataItem label should be a string.');\r\n }\r\n \r\n if (item.expanded !== undefined && typeof item.expanded !== 'boolean') {\r\n console.error('Error: OrgDataItem expanded should be a boolean.');\r\n }\r\n \r\n if (item.description !== undefined && typeof item.description !== 'string') {\r\n console.error('Error: OrgDataItem description should be a string.');\r\n }\r\n \r\n if (item.customNodeStyle !== undefined) {\r\n const customNodeStyle = item.customNodeStyle;\r\n if (customNodeStyle.backgroundColor && typeof customNodeStyle.backgroundColor !== 'string') {\r\n console.error('Error: customNodeStyle.backgroundColor should be a string.');\r\n }\r\n if (customNodeStyle.color && typeof customNodeStyle.color !== 'string') {\r\n console.error('Error: customNodeStyle.color should be a string.');\r\n }\r\n if (customNodeStyle.padding && typeof customNodeStyle.padding !== 'string') {\r\n console.error('Error: customNodeStyle.padding should be a string.');\r\n }\r\n if (customNodeStyle.borderRadius && typeof customNodeStyle.borderRadius !== 'string') {\r\n console.error('Error: customNodeStyle.borderRadius should be a string.');\r\n }\r\n }\r\n \r\n if (item.data) {\r\n if (item.data.image !== undefined && typeof item.data.image !== 'string') {\r\n console.error('Error: OrgDataItem data.image should be a string.');\r\n }\r\n if (item.data.name !== undefined && typeof item.data.name !== 'string') {\r\n console.error('Error: OrgDataItem data.name should be a string.');\r\n }\r\n if (typeof item.data.title !== 'string') {\r\n console.error('Error: OrgDataItem data.title should be a string.');\r\n }\r\n }\r\n \r\n if (item.children && Array.isArray(item.children)) {\r\n item.children.forEach(child => checkOrgDataItem(child)); // Recursive call for children\r\n }\r\n \r\n if (item.originalStyle) {\r\n const originalStyle = item.originalStyle;\r\n if (originalStyle.backgroundColor && typeof originalStyle.backgroundColor !== 'string') {\r\n console.error('Error: originalStyle.backgroundColor should be a string.');\r\n }\r\n if (originalStyle.color && typeof originalStyle.color !== 'string') {\r\n console.error('Error: originalStyle.color should be a string.');\r\n }\r\n if (originalStyle.padding && typeof originalStyle.padding !== 'string') {\r\n console.error('Error: originalStyle.padding should be a string.');\r\n }\r\n if (originalStyle.borderRadius && typeof originalStyle.borderRadius !== 'string') {\r\n console.error('Error: originalStyle.borderRadius should be a string.');\r\n }\r\n }\r\n }\r\n","import { Component, OnInit, ViewChild, Input } from '@angular/core';\r\nimport { CustomTreeNode, OrgData, OrgDataItem } from '../../interfaces/org-chart';\r\nimport { TreeNode } from 'primeng/api';\r\nimport { checkPropsType, downloadChart } from '../../utils/chart-download.util';\r\nimport { OrganizationChart } from 'primeng/organizationchart';\r\n\r\n/** Displays an organizational chart with nodes and relationships (Org Chart Component) */\r\n@Component({\r\n selector: 'uxp-org-chart',\r\n templateUrl: './org-chart.component.html',\r\n styleUrls: ['./org-chart.component.scss'],\r\n})\r\nexport class OrgChartComponent implements OnInit {\r\n @Input() rucInputData!: OrgData;\r\n @Input() customTheme: string | undefined;\r\n selectedNodes!: CustomTreeNode[];\r\n searchText = '';\r\n hoveredNode: CustomTreeNode | null = null;\r\n\r\n @ViewChild('orgChart', { static: false }) orgChart!: OrganizationChart;\r\n\r\n /** Initializes the component */\r\n ngOnInit(): void {\r\n let updatedJson = this.addDefaultKeysIfNotAvailable(this.rucInputData);\r\n this.rucInputData.orgData = this.updateRucInputData(updatedJson.orgData);\r\n checkPropsType(this.rucInputData); // To check rucInputData is in correct format or not \r\n this.expandAllNodes();\r\n } \r\n\r\n /** add default property for grey nodes if user does not provided */\r\n addDefaultKeysIfNotAvailable(orgData: OrgData) {\r\n if (!orgData.hasOwnProperty('greyNodeStyle')) {\r\n orgData.greyNodeStyle = {\r\n backgroundColor: '#d3d3d3',\r\n color: '#808080',\r\n };\r\n }\r\n return orgData;\r\n }\r\n\r\n /** manipulate input json as If customNodeStyle exists, create originalStyle for node and its children */\r\n updateRucInputData(data: OrgDataItem[]): OrgDataItem[] {\r\n return data.map((node: OrgDataItem) => {\r\n node['type'] = 'person';\r\n if (node.customNodeStyle) {\r\n node.originalStyle = { ...node.customNodeStyle };\r\n }\r\n if (node.children && node.children.length > 0) {\r\n node['type'] = 'person';\r\n node.children = this.updateRucInputData(node.children); // Recursive call\r\n }\r\n return node;\r\n });\r\n }\r\n\r\n /** Expands all nodes in the org chart */\r\n expandAllNodes(): void {\r\n this.rucInputData.orgData = this.expandNodes(this.rucInputData.orgData);\r\n }\r\n\r\n /** Recursively expands all nodes in the given array\r\n * @param nodes Nodes to expand @returns Expanded nodes */\r\n expandNodes(nodes: OrgDataItem[]): OrgDataItem[] {\r\n return nodes.map((node) => ({\r\n ...node,\r\n expanded: true,\r\n children: node.children ? this.expandNodes(node.children) : [],\r\n }));\r\n }\r\n\r\n /** Collapses all nodes in the org chart */\r\n collapseAllNodes(): void {\r\n this.rucInputData.orgData = this.collapseNodes(this.rucInputData.orgData);\r\n }\r\n\r\n /** Recursively collapses all nodes in the given array\r\n * @param nodes Nodes to collapse @returns Collapsed nodes */\r\n collapseNodes(nodes: OrgDataItem[]): OrgDataItem[] {\r\n return nodes.map((node) => ({\r\n ...node,\r\n expanded: false,\r\n children: node.children ? this.collapseNodes(node.children) : [],\r\n }));\r\n }\r\n\r\n /** Gets the background color of a node based on search text\r\n @param node Node to check @returns Whether the node matches the search text */\r\n getBackgroungColorOfNode(node: CustomTreeNode): boolean {\r\n return (\r\n !this.searchText ||\r\n node.data.title.toLowerCase().includes(this.searchText.toLowerCase()) ||\r\n node.data.name.toLowerCase().includes(this.searchText.toLowerCase()) ||\r\n node.label?.toLowerCase().includes(this.searchText.toLowerCase())\r\n );\r\n }\r\n\r\n /** Handles node hover event @param node Hovered node */\r\n onNodeHover(node: CustomTreeNode): void {\r\n if (this.searchText) return;\r\n this.hoveredNode = node;\r\n this.updateNodeStyles();\r\n }\r\n\r\n /** Handles node leave event */\r\n onNodeLeave(): void {\r\n this.hoveredNode = null;\r\n this.resetNodeStyles();\r\n }\r\n\r\n /** Updates node styles based on the hovered node */\r\n updateNodeStyles(): void {\r\n this.applyStyles(this.rucInputData.orgData, true);\r\n }\r\n\r\n /** Resets node styles to their original state */\r\n resetNodeStyles(): void {\r\n this.applyStyles(this.rucInputData.orgData, false);\r\n }\r\n\r\n /** Applies grey node style to non-matching nodes @param nodes Nodes to apply styles to */\r\n applyGreyNodes(nodes:OrgDataItem[]): void {\r\n nodes.forEach((node: OrgDataItem) => {\r\n const isMatching = this.searchText\r\n ? node.data?.title.includes(this.searchText)\r\n : false;\r\n node.customNodeStyle = isMatching\r\n ? node.customNodeStyle || node.originalStyle\r\n : {\r\n ...node.originalStyle,\r\n backgroundColor: this.rucInputData.greyNodeStyle.backgroundColor,\r\n color: this.rucInputData.greyNodeStyle.color,\r\n };\r\n\r\n if (node.children) {\r\n this.applyGreyNodes(node.children);\r\n }\r\n });\r\n }\r\n\r\n /** Applies styles to nodes based on the hovered node\r\n * @param nodes Nodes to apply styles @param isHovered Whether the node is hovered */\r\n applyStyles(nodes: OrgDataItem[], isHovered: boolean): void {\r\n nodes.forEach((node) => {\r\n if (isHovered) {\r\n node.customNodeStyle =\r\n node === this.hoveredNode ||\r\n this.isParent(node, this.hoveredNode) ||\r\n this.isChild(node, this.hoveredNode)\r\n ? node.customNodeStyle || node.originalStyle\r\n : {\r\n ...node.originalStyle,\r\n backgroundColor:\r\n this.rucInputData.greyNodeStyle.backgroundColor,\r\n color: this.rucInputData.greyNodeStyle.color,\r\n };\r\n } else {\r\n node.customNodeStyle = node.originalStyle;\r\n }\r\n\r\n if (node.children) {\r\n this.applyStyles(node.children, isHovered);\r\n }\r\n });\r\n }\r\n\r\n /** Use the downloadChart utility method */\r\n downloadChart(format: 'png' | 'jpeg' | 'pdf'): void {\r\n const chartContainer = this.orgChart.el.nativeElement;\r\n downloadChart(chartContainer, format); // Calls the utility function\r\n }\r\n\r\n /** Handles menu click event @param id Menu item ID */\r\n onMenuClick(id: number,event: MouseEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n switch (id) {\r\n case 1:\r\n this.downloadChart('pdf');\r\n break;\r\n case 2:\r\n this.downloadChart('png');\r\n break;\r\n case 3:\r\n this.downloadChart('jpeg');\r\n break;\r\n case 4:\r\n this.expandAllNodes();\r\n break;\r\n case 5:\r\n this.collapseAllNodes();\r\n break;\r\n default:\r\n console.warn(`Unknown menu item ID: ${id}. Please enter valid id.`);\r\n break;\r\n }\r\n }\r\n\r\n /** Gets tooltip data for a node @param node Node to get tooltip data */\r\n getTooltipData(node: CustomTreeNode): string | undefined {\r\n return node.description || '';\r\n }\r\n\r\n /** Checks if a node is a parent of another node.\r\n * @param currentNode The current node to check.\r\n * @param hoveredNode The node to check for parentage.\r\n * @returns Whether the current node is a parent of the hovered node. */\r\n isParent(\r\n currentNode: TreeNode,\r\n hoveredNode: TreeNode | null\r\n ): boolean | null | undefined {\r\n return hoveredNode && currentNode.children?.includes(hoveredNode);\r\n }\r\n\r\n /** Checks if a node is a child of another node.\r\n * @param node The node to check for child status\r\n * @param target The node to check for parentage.\r\n * @returns Whether the node is a child of the target node.*/\r\n isChild(node: TreeNode, target: TreeNode | null): boolean | null | undefined {\r\n return target && target.children?.includes(node);\r\n }\r\n}\r\n","<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span *ngIf=\"node.data.image\"><img [src]=\"node.data.image\" class=\"portraitImageDimension\" /></span>\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'triangle'\" class=\"flex trianlge-up flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" *ngIf=\"node.data.image\" >\r\n <img [src]=\"node.data.image\" class=\"triangleImageDimension\" />\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'landscape'\">\r\n <div class=\"card borderSolidGrey\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\">\r\n <div class=\"body\" >\r\n <div class=\"icon\" *ngIf=\"node.data.image\">\r\n <img [src]=\"node.data.image\" class=\"landscapeImageDimension\" />\r\n </div>\r\n <div class=\"content\">\r\n <div>{{node.data.name}}</div>\r\n <div>{{node.data.title}}</div>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-organizationChart>\r\n </div>\r\n \r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { OrganizationChartModule } from 'primeng/organizationchart';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { OrgChartComponent } from './org-chart/org-chart.component';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\n\r\n@NgModule({\r\n imports: [CommonModule, ButtonModule, BrowserModule, FormsModule, OrganizationChartModule, MatInputModule, MatMenuModule, MatButtonModule, MatIconModule],\r\n declarations: [OrgChartComponent],\r\n exports: [OrgChartComponent]\r\n})\r\nexport class RuclibOrgChartModule {}\r\n\r\n","export * from './lib/ruclib-org-chart.module';\r\nexport * from './lib/org-chart/org-chart.component';\r\n// export * from './services/org-chart.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ruc-lib-org-chart.mjs","sources":["../../src/utils/chart-download.util.ts","../../src/lib/org-chart/org-chart.component.ts","../../src/lib/org-chart/org-chart.component.html","../../src/lib/ruclib-org-chart.module.ts","../../src/index.ts","../../src/ruc-lib-org-chart.ts"],"sourcesContent":["import { jsPDF } from 'jspdf';\r\nimport html2canvas from 'html2canvas';\r\nimport { OrgData, OrgDataItem } from '../interfaces/org-chart';\r\n\r\n\r\nexport const downloadChart = (chartContainer: HTMLElement, format: 'png' | 'jpeg' | 'pdf'): void => {\r\n if (!chartContainer) {\r\n console.error('Chart container not found!');\r\n return;\r\n }\r\n\r\n // Capture the chart container as an image (either PNG or JPEG)\r\n if (format === 'pdf') {\r\n createPDF(chartContainer);\r\n } else {\r\n captureElementAsImage(chartContainer, format)\r\n .then((imgData) => {\r\n downloadImage(imgData, format); // Download as PNG or JPEG\r\n })\r\n .catch(handleCanvasError);\r\n }\r\n}\r\n\r\n// Capture the element as an image and return a promise\r\nexport const captureElementAsImage = (element: HTMLElement, format: 'png' | 'jpeg'): Promise<string> => {\r\n return new Promise((resolve, reject) => {\r\n html2canvas(element, {\r\n useCORS: true,\r\n scrollX: 0,\r\n scrollY: -window.scrollY,\r\n logging: false,\r\n backgroundColor: null,\r\n })\r\n .then((canvas) => {\r\n const imgData = canvas.toDataURL(`image/${format}`);\r\n resolve(imgData);\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n}\r\n\r\n// Downloads the org chart as a PDF document.\r\nexport const createPDF = (element: HTMLElement): void => {\r\n html2canvas(element, {\r\n useCORS: true,\r\n scale: 4, \r\n scrollX: 0,\r\n scrollY: -window.scrollY,\r\n logging: false,\r\n backgroundColor: null,\r\n })\r\n .then((canvas) => {\r\n const imgData = canvas.toDataURL('image/png'); // Capture as PNG (or you can use JPEG)\r\n const pdf = new jsPDF('p', 'mm', 'a4'); // Standard A4 page size\r\n\r\n // Get the dimensions of the PDF page\r\n const pdfWidth = pdf.internal.pageSize.width;\r\n const pdfHeight = pdf.internal.pageSize.height;\r\n\r\n const canvasWidth = canvas.width;\r\n const canvasHeight = canvas.height;\r\n\r\n const aspectRatio = canvasWidth / canvasHeight;\r\n\r\n let imgWidth = pdfWidth;\r\n let imgHeight = pdfWidth / aspectRatio;\r\n\r\n // If the image height exceeds the PDF page height, adjust it\r\n if (imgHeight > pdfHeight) {\r\n imgHeight = pdfHeight;\r\n imgWidth = pdfHeight * aspectRatio;\r\n }\r\n\r\n // Add the image to the PDF\r\n pdf.addImage(imgData, 'PNG', 0, 20, imgWidth, imgHeight); // Fit image on PDF page\r\n pdf.save('organization-chart.pdf'); // Download the PDF\r\n })\r\n .catch(handleCanvasError);\r\n}\r\n\r\n// Download the captured image in the required format (PNG/JPEG)\r\nexport const downloadImage = (imgData: string, format: 'png' | 'jpeg'): void => {\r\n const link = document.createElement('a');\r\n link.href = imgData;\r\n link.download = `organization-chart.${format}`;\r\n link.click();\r\n}\r\n\r\n// Error handler for any issues during canvas generation or file creation\r\nexport const handleCanvasError = (error: any): void => {\r\n console.error('Error generating file:', error);\r\n}\r\n\r\n \r\nexport const checkPropsType = (props: OrgData): void => {\r\n if (props.isDisplayHambergerMenu !== undefined && typeof props.isDisplayHambergerMenu !== 'boolean') {\r\n console.error('Error: isDisplayHambergerMenu should be a boolean.');\r\n }\r\n \r\n if (props.isDisplaySearchBar !== undefined && typeof props.isDisplaySearchBar !== 'boolean') {\r\n console.error('Error: isDisplaySearchBar should be a boolean.');\r\n }\r\n \r\n if (!['portrait', 'triangle', 'landscape'].includes(props.nodeTemplate)) {\r\n console.error('Error: nodeTemplate should be \"portrait\", \"triangle\", or \"landscape\".');\r\n }\r\n \r\n if (!Array.isArray(props.hambergerMenuList)) {\r\n console.error('Error: hambergerMenuList should be an array.');\r\n } else {\r\n props.hambergerMenuList.forEach(item => {\r\n if (typeof item.label !== 'string') {\r\n console.error('Error: hambergerMenuList label should be a string.');\r\n }\r\n if (typeof item.id !== 'number') {\r\n console.error('Error: hambergerMenuList id should be a number.');\r\n }\r\n });\r\n }\r\n \r\n // Check if greyNodeStyle is of type CustomNodeStyle\r\n const greyNodeStyle = props.greyNodeStyle;\r\n if (greyNodeStyle) {\r\n if (greyNodeStyle.backgroundColor && typeof greyNodeStyle.backgroundColor !== 'string') {\r\n console.error('Error: greyNodeStyle.backgroundColor should be a string.');\r\n }\r\n if (greyNodeStyle.color && typeof greyNodeStyle.color !== 'string') {\r\n console.error('Error: greyNodeStyle.color should be a string.');\r\n }\r\n if (greyNodeStyle.padding && typeof greyNodeStyle.padding !== 'string') {\r\n console.error('Error: greyNodeStyle.padding should be a string.');\r\n }\r\n if (greyNodeStyle.borderRadius && typeof greyNodeStyle.borderRadius !== 'string') {\r\n console.error('Error: greyNodeStyle.borderRadius should be a string.');\r\n }\r\n }\r\n \r\n // Check if orgData is an array of OrgDataItem objects\r\n if (!Array.isArray(props.orgData)) {\r\n console.error('Error: orgData should be an array.');\r\n } else {\r\n props.orgData.forEach(item => checkOrgDataItem(item));\r\n }\r\n }\r\n\r\n export const checkOrgDataItem = (item: OrgDataItem): void => {\r\n if (item.label !== undefined && typeof item.label !== 'string') {\r\n console.error('Error: OrgDataItem label should be a string.');\r\n }\r\n \r\n if (item.expanded !== undefined && typeof item.expanded !== 'boolean') {\r\n console.error('Error: OrgDataItem expanded should be a boolean.');\r\n }\r\n \r\n if (item.description !== undefined && typeof item.description !== 'string') {\r\n console.error('Error: OrgDataItem description should be a string.');\r\n }\r\n \r\n if (item.customNodeStyle !== undefined) {\r\n const customNodeStyle = item.customNodeStyle;\r\n if (customNodeStyle.backgroundColor && typeof customNodeStyle.backgroundColor !== 'string') {\r\n console.error('Error: customNodeStyle.backgroundColor should be a string.');\r\n }\r\n if (customNodeStyle.color && typeof customNodeStyle.color !== 'string') {\r\n console.error('Error: customNodeStyle.color should be a string.');\r\n }\r\n if (customNodeStyle.padding && typeof customNodeStyle.padding !== 'string') {\r\n console.error('Error: customNodeStyle.padding should be a string.');\r\n }\r\n if (customNodeStyle.borderRadius && typeof customNodeStyle.borderRadius !== 'string') {\r\n console.error('Error: customNodeStyle.borderRadius should be a string.');\r\n }\r\n }\r\n \r\n if (item.data) {\r\n if (item.data.image !== undefined && typeof item.data.image !== 'string') {\r\n console.error('Error: OrgDataItem data.image should be a string.');\r\n }\r\n if (item.data.name !== undefined && typeof item.data.name !== 'string') {\r\n console.error('Error: OrgDataItem data.name should be a string.');\r\n }\r\n if (typeof item.data.title !== 'string') {\r\n console.error('Error: OrgDataItem data.title should be a string.');\r\n }\r\n }\r\n \r\n if (item.children && Array.isArray(item.children)) {\r\n item.children.forEach(child => checkOrgDataItem(child)); // Recursive call for children\r\n }\r\n \r\n if (item.originalStyle) {\r\n const originalStyle = item.originalStyle;\r\n if (originalStyle.backgroundColor && typeof originalStyle.backgroundColor !== 'string') {\r\n console.error('Error: originalStyle.backgroundColor should be a string.');\r\n }\r\n if (originalStyle.color && typeof originalStyle.color !== 'string') {\r\n console.error('Error: originalStyle.color should be a string.');\r\n }\r\n if (originalStyle.padding && typeof originalStyle.padding !== 'string') {\r\n console.error('Error: originalStyle.padding should be a string.');\r\n }\r\n if (originalStyle.borderRadius && typeof originalStyle.borderRadius !== 'string') {\r\n console.error('Error: originalStyle.borderRadius should be a string.');\r\n }\r\n }\r\n }\r\n","import { Component, OnInit, ViewChild, Input } from '@angular/core';\r\nimport { CustomTreeNode, OrgData, OrgDataItem } from '../../interfaces/org-chart';\r\nimport { TreeNode } from 'primeng/api';\r\nimport { checkPropsType, downloadChart } from '../../utils/chart-download.util';\r\nimport { OrganizationChart } from 'primeng/organizationchart';\r\n\r\n/** Displays an organizational chart with nodes and relationships (Org Chart Component) */\r\n@Component({\r\n selector: 'uxp-org-chart',\r\n templateUrl: './org-chart.component.html',\r\n styleUrls: ['./org-chart.component.scss'],\r\n})\r\nexport class OrgChartComponent implements OnInit {\r\n @Input() rucInputData!: OrgData;\r\n @Input() customTheme: string | undefined;\r\n selectedNodes!: CustomTreeNode[];\r\n searchText = '';\r\n hoveredNode: CustomTreeNode | null = null;\r\n\r\n @ViewChild('orgChart', { static: false }) orgChart!: OrganizationChart;\r\n\r\n /** Initializes the component */\r\n ngOnInit(): void {\r\n let updatedJson = this.addDefaultKeysIfNotAvailable(this.rucInputData);\r\n this.rucInputData.orgData = this.updateRucInputData(updatedJson.orgData);\r\n checkPropsType(this.rucInputData); // To check rucInputData is in correct format or not \r\n this.expandAllNodes();\r\n } \r\n\r\n /** add default property for grey nodes if user does not provided */\r\n addDefaultKeysIfNotAvailable(orgData: OrgData) {\r\n if (!orgData.hasOwnProperty('greyNodeStyle')) {\r\n orgData.greyNodeStyle = {\r\n backgroundColor: '#d3d3d3',\r\n color: '#808080',\r\n };\r\n }\r\n return orgData;\r\n }\r\n\r\n /** manipulate input json as If customNodeStyle exists, create originalStyle for node and its children */\r\n updateRucInputData(data: OrgDataItem[]): OrgDataItem[] {\r\n return data.map((node: OrgDataItem) => {\r\n node['type'] = 'person';\r\n if (node.customNodeStyle) {\r\n node.originalStyle = { ...node.customNodeStyle };\r\n }\r\n if (node.children && node.children.length > 0) {\r\n node['type'] = 'person';\r\n node.children = this.updateRucInputData(node.children); // Recursive call\r\n }\r\n return node;\r\n });\r\n }\r\n\r\n /** Expands all nodes in the org chart */\r\n expandAllNodes(): void {\r\n this.rucInputData.orgData = this.expandNodes(this.rucInputData.orgData);\r\n }\r\n\r\n /** Recursively expands all nodes in the given array\r\n * @param nodes Nodes to expand @returns Expanded nodes */\r\n expandNodes(nodes: OrgDataItem[]): OrgDataItem[] {\r\n return nodes.map((node) => ({\r\n ...node,\r\n expanded: true,\r\n children: node.children ? this.expandNodes(node.children) : [],\r\n }));\r\n }\r\n\r\n /** Collapses all nodes in the org chart */\r\n collapseAllNodes(): void {\r\n this.rucInputData.orgData = this.collapseNodes(this.rucInputData.orgData);\r\n }\r\n\r\n /** Recursively collapses all nodes in the given array\r\n * @param nodes Nodes to collapse @returns Collapsed nodes */\r\n collapseNodes(nodes: OrgDataItem[]): OrgDataItem[] {\r\n return nodes.map((node) => ({\r\n ...node,\r\n expanded: false,\r\n children: node.children ? this.collapseNodes(node.children) : [],\r\n }));\r\n }\r\n\r\n /** Gets the background color of a node based on search text\r\n @param node Node to check @returns Whether the node matches the search text */\r\n getBackgroungColorOfNode(node: CustomTreeNode): boolean {\r\n return (\r\n !this.searchText ||\r\n node.data.title.toLowerCase().includes(this.searchText.toLowerCase()) ||\r\n node.data.name.toLowerCase().includes(this.searchText.toLowerCase()) ||\r\n node.label?.toLowerCase().includes(this.searchText.toLowerCase())\r\n );\r\n }\r\n\r\n /** Handles node hover event @param node Hovered node */\r\n onNodeHover(node: CustomTreeNode): void {\r\n if (this.searchText) return;\r\n this.hoveredNode = node;\r\n this.updateNodeStyles();\r\n }\r\n\r\n /** Handles node leave event */\r\n onNodeLeave(): void {\r\n this.hoveredNode = null;\r\n this.resetNodeStyles();\r\n }\r\n\r\n /** Updates node styles based on the hovered node */\r\n updateNodeStyles(): void {\r\n this.applyStyles(this.rucInputData.orgData, true);\r\n }\r\n\r\n /** Resets node styles to their original state */\r\n resetNodeStyles(): void {\r\n this.applyStyles(this.rucInputData.orgData, false);\r\n }\r\n\r\n /** Applies grey node style to non-matching nodes @param nodes Nodes to apply styles to */\r\n applyGreyNodes(nodes:OrgDataItem[]): void {\r\n nodes.forEach((node: OrgDataItem) => {\r\n const isMatching = this.searchText\r\n ? node.data?.title.includes(this.searchText)\r\n : false;\r\n node.customNodeStyle = isMatching\r\n ? node.customNodeStyle || node.originalStyle\r\n : {\r\n ...node.originalStyle,\r\n backgroundColor: this.rucInputData.greyNodeStyle.backgroundColor,\r\n color: this.rucInputData.greyNodeStyle.color,\r\n };\r\n\r\n if (node.children) {\r\n this.applyGreyNodes(node.children);\r\n }\r\n });\r\n }\r\n\r\n /** Applies styles to nodes based on the hovered node\r\n * @param nodes Nodes to apply styles @param isHovered Whether the node is hovered */\r\n applyStyles(nodes: OrgDataItem[], isHovered: boolean): void {\r\n nodes.forEach((node) => {\r\n if (isHovered) {\r\n node.customNodeStyle =\r\n node === this.hoveredNode ||\r\n this.isParent(node, this.hoveredNode) ||\r\n this.isChild(node, this.hoveredNode)\r\n ? node.customNodeStyle || node.originalStyle\r\n : {\r\n ...node.originalStyle,\r\n backgroundColor:\r\n this.rucInputData.greyNodeStyle.backgroundColor,\r\n color: this.rucInputData.greyNodeStyle.color,\r\n };\r\n } else {\r\n node.customNodeStyle = node.originalStyle;\r\n }\r\n\r\n if (node.children) {\r\n this.applyStyles(node.children, isHovered);\r\n }\r\n });\r\n }\r\n\r\n /** Use the downloadChart utility method */\r\n downloadChart(format: 'png' | 'jpeg' | 'pdf'): void {\r\n const chartContainer = this.orgChart.el.nativeElement;\r\n downloadChart(chartContainer, format); // Calls the utility function\r\n }\r\n\r\n /** Handles menu click event @param id Menu item ID */\r\n onMenuClick(id: number,event: MouseEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n switch (id) {\r\n case 1:\r\n this.downloadChart('pdf');\r\n break;\r\n case 2:\r\n this.downloadChart('png');\r\n break;\r\n case 3:\r\n this.downloadChart('jpeg');\r\n break;\r\n case 4:\r\n this.expandAllNodes();\r\n break;\r\n case 5:\r\n this.collapseAllNodes();\r\n break;\r\n default:\r\n console.warn(`Unknown menu item ID: ${id}. Please enter valid id.`);\r\n break;\r\n }\r\n }\r\n\r\n /** Gets tooltip data for a node @param node Node to get tooltip data */\r\n getTooltipData(node: CustomTreeNode): string | undefined {\r\n return node.description || '';\r\n }\r\n\r\n /** Checks if a node is a parent of another node.\r\n * @param currentNode The current node to check.\r\n * @param hoveredNode The node to check for parentage.\r\n * @returns Whether the current node is a parent of the hovered node. */\r\n isParent(\r\n currentNode: TreeNode,\r\n hoveredNode: TreeNode | null\r\n ): boolean | null | undefined {\r\n return hoveredNode && currentNode.children?.includes(hoveredNode);\r\n }\r\n\r\n /** Checks if a node is a child of another node.\r\n * @param node The node to check for child status\r\n * @param target The node to check for parentage.\r\n * @returns Whether the node is a child of the target node.*/\r\n isChild(node: TreeNode, target: TreeNode | null): boolean | null | undefined {\r\n return target && target.children?.includes(node);\r\n }\r\n}\r\n","<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span><img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"portraitImageDimension\" /></span>\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'triangle'\" class=\"flex trianlge-up flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <div *ngIf=\"!node.data.image\" class=\"triangleImageDimension\">\r\n </div>\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"triangleImageDimension\" />\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'landscape'\">\r\n <div class=\"card borderSolidGrey\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\">\r\n <div class=\"body\" >\r\n <div class=\"icon\">\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"landscapeImageDimension\" />\r\n </div>\r\n <div class=\"content\">\r\n <div>{{node.data.name}}</div>\r\n <div>{{node.data.title}}</div>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-organizationChart>\r\n </div>\r\n \r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { OrganizationChartModule } from 'primeng/organizationchart';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { OrgChartComponent } from './org-chart/org-chart.component';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\n\r\n@NgModule({\r\n imports: [CommonModule, ButtonModule, BrowserModule, FormsModule, OrganizationChartModule, MatInputModule, MatMenuModule, MatButtonModule, MatIconModule],\r\n declarations: [OrgChartComponent],\r\n exports: [OrgChartComponent]\r\n})\r\nexport class RuclibOrgChartModule {}\r\n\r\n","export * from './lib/ruclib-org-chart.module';\r\nexport * from './lib/org-chart/org-chart.component';\r\n// export * from './services/org-chart.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -384,10 +384,10 @@ class OrgChartComponent {
|
|
|
384
384
|
}
|
|
385
385
|
}
|
|
386
386
|
OrgChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OrgChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
387
|
-
OrgChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OrgChartComponent, selector: "uxp-org-chart", inputs: { rucInputData: "rucInputData", customTheme: "customTheme" }, viewQueries: [{ propertyName: "orgChart", first: true, predicate: ["orgChart"], descendants: true }], ngImport: i0, template: "<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span
|
|
387
|
+
OrgChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OrgChartComponent, selector: "uxp-org-chart", inputs: { rucInputData: "rucInputData", customTheme: "customTheme" }, viewQueries: [{ propertyName: "orgChart", first: true, predicate: ["orgChart"], descendants: true }], ngImport: i0, template: "<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span><img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"portraitImageDimension\" /></span>\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'triangle'\" class=\"flex trianlge-up flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <div *ngIf=\"!node.data.image\" class=\"triangleImageDimension\">\r\n </div>\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"triangleImageDimension\" />\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'landscape'\">\r\n <div class=\"card borderSolidGrey\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\">\r\n <div class=\"body\" >\r\n <div class=\"icon\">\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"landscapeImageDimension\" />\r\n </div>\r\n <div class=\"content\">\r\n <div>{{node.data.name}}</div>\r\n <div>{{node.data.title}}</div>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-organizationChart>\r\n </div>\r\n \r\n</div>", styles: [".org-chart-container{overflow-x:auto}.nodeContent{border:none;padding:1.5em;border-radius:\"8px\";background-color:none;color:#000}.card{display:flex;width:250px;height:100px;padding:24px;align-self:stretch;align-items:flex-start}.card .body{width:100%;display:flex}.card .body .icon{width:64px;height:64px}.trianlge-up{width:220px;background-color:#980104;clip-path:polygon(50% 0%,0% 100%,100% 100%)}mat-form-field{margin:10px}::ng-deep .p-organizationchart .p-organizationchart-node-content{border:none;background:none;color:#495057;padding:0!important}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler{background-color:#dee2e6;cursor:pointer}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon{top:.2rem}.container{display:flex;justify-content:space-between;width:100%}.container .left{margin-right:auto}.container .right{margin-left:auto}mat-icon-button{margin-right:10px}.mat-form-field{margin-left:10px}.borderSolidGrey{border:1px solid lightgray}.landscapeImageDimension{width:3em;height:3em}.portraitImageDimension,.triangleImageDimension{margin-bottom:4px;width:3em;height:3em}\n"], dependencies: [{ 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.OrganizationChart, selector: "p-organizationChart", inputs: ["value", "style", "styleClass", "selectionMode", "preserveSpace", "selection"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
388
388
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OrgChartComponent, decorators: [{
|
|
389
389
|
type: Component,
|
|
390
|
-
args: [{ selector: 'uxp-org-chart', template: "<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span
|
|
390
|
+
args: [{ selector: 'uxp-org-chart', template: "<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span><img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"portraitImageDimension\" /></span>\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'triangle'\" class=\"flex trianlge-up flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <div *ngIf=\"!node.data.image\" class=\"triangleImageDimension\">\r\n </div>\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"triangleImageDimension\" />\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'landscape'\">\r\n <div class=\"card borderSolidGrey\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\">\r\n <div class=\"body\" >\r\n <div class=\"icon\">\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"landscapeImageDimension\" />\r\n </div>\r\n <div class=\"content\">\r\n <div>{{node.data.name}}</div>\r\n <div>{{node.data.title}}</div>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-organizationChart>\r\n </div>\r\n \r\n</div>", styles: [".org-chart-container{overflow-x:auto}.nodeContent{border:none;padding:1.5em;border-radius:\"8px\";background-color:none;color:#000}.card{display:flex;width:250px;height:100px;padding:24px;align-self:stretch;align-items:flex-start}.card .body{width:100%;display:flex}.card .body .icon{width:64px;height:64px}.trianlge-up{width:220px;background-color:#980104;clip-path:polygon(50% 0%,0% 100%,100% 100%)}mat-form-field{margin:10px}::ng-deep .p-organizationchart .p-organizationchart-node-content{border:none;background:none;color:#495057;padding:0!important}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler{background-color:#dee2e6;cursor:pointer}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon{top:.2rem}.container{display:flex;justify-content:space-between;width:100%}.container .left{margin-right:auto}.container .right{margin-left:auto}mat-icon-button{margin-right:10px}.mat-form-field{margin-left:10px}.borderSolidGrey{border:1px solid lightgray}.landscapeImageDimension{width:3em;height:3em}.portraitImageDimension,.triangleImageDimension{margin-bottom:4px;width:3em;height:3em}\n"] }]
|
|
391
391
|
}], propDecorators: { rucInputData: [{
|
|
392
392
|
type: Input
|
|
393
393
|
}], customTheme: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruc-lib-org-chart.mjs","sources":["../../src/utils/chart-download.util.ts","../../src/lib/org-chart/org-chart.component.ts","../../src/lib/org-chart/org-chart.component.html","../../src/lib/ruclib-org-chart.module.ts","../../src/index.ts","../../src/ruc-lib-org-chart.ts"],"sourcesContent":["import { jsPDF } from 'jspdf';\r\nimport html2canvas from 'html2canvas';\r\nimport { OrgData, OrgDataItem } from '../interfaces/org-chart';\r\n\r\n\r\nexport const downloadChart = (chartContainer: HTMLElement, format: 'png' | 'jpeg' | 'pdf'): void => {\r\n if (!chartContainer) {\r\n console.error('Chart container not found!');\r\n return;\r\n }\r\n\r\n // Capture the chart container as an image (either PNG or JPEG)\r\n if (format === 'pdf') {\r\n createPDF(chartContainer);\r\n } else {\r\n captureElementAsImage(chartContainer, format)\r\n .then((imgData) => {\r\n downloadImage(imgData, format); // Download as PNG or JPEG\r\n })\r\n .catch(handleCanvasError);\r\n }\r\n}\r\n\r\n// Capture the element as an image and return a promise\r\nexport const captureElementAsImage = (element: HTMLElement, format: 'png' | 'jpeg'): Promise<string> => {\r\n return new Promise((resolve, reject) => {\r\n html2canvas(element, {\r\n useCORS: true,\r\n scrollX: 0,\r\n scrollY: -window.scrollY,\r\n logging: false,\r\n backgroundColor: null,\r\n })\r\n .then((canvas) => {\r\n const imgData = canvas.toDataURL(`image/${format}`);\r\n resolve(imgData);\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n}\r\n\r\n// Downloads the org chart as a PDF document.\r\nexport const createPDF = (element: HTMLElement): void => {\r\n html2canvas(element, {\r\n useCORS: true,\r\n scale: 4, \r\n scrollX: 0,\r\n scrollY: -window.scrollY,\r\n logging: false,\r\n backgroundColor: null,\r\n })\r\n .then((canvas) => {\r\n const imgData = canvas.toDataURL('image/png'); // Capture as PNG (or you can use JPEG)\r\n const pdf = new jsPDF('p', 'mm', 'a4'); // Standard A4 page size\r\n\r\n // Get the dimensions of the PDF page\r\n const pdfWidth = pdf.internal.pageSize.width;\r\n const pdfHeight = pdf.internal.pageSize.height;\r\n\r\n const canvasWidth = canvas.width;\r\n const canvasHeight = canvas.height;\r\n\r\n const aspectRatio = canvasWidth / canvasHeight;\r\n\r\n let imgWidth = pdfWidth;\r\n let imgHeight = pdfWidth / aspectRatio;\r\n\r\n // If the image height exceeds the PDF page height, adjust it\r\n if (imgHeight > pdfHeight) {\r\n imgHeight = pdfHeight;\r\n imgWidth = pdfHeight * aspectRatio;\r\n }\r\n\r\n // Add the image to the PDF\r\n pdf.addImage(imgData, 'PNG', 0, 20, imgWidth, imgHeight); // Fit image on PDF page\r\n pdf.save('organization-chart.pdf'); // Download the PDF\r\n })\r\n .catch(handleCanvasError);\r\n}\r\n\r\n// Download the captured image in the required format (PNG/JPEG)\r\nexport const downloadImage = (imgData: string, format: 'png' | 'jpeg'): void => {\r\n const link = document.createElement('a');\r\n link.href = imgData;\r\n link.download = `organization-chart.${format}`;\r\n link.click();\r\n}\r\n\r\n// Error handler for any issues during canvas generation or file creation\r\nexport const handleCanvasError = (error: any): void => {\r\n console.error('Error generating file:', error);\r\n}\r\n\r\n \r\nexport const checkPropsType = (props: OrgData): void => {\r\n if (props.isDisplayHambergerMenu !== undefined && typeof props.isDisplayHambergerMenu !== 'boolean') {\r\n console.error('Error: isDisplayHambergerMenu should be a boolean.');\r\n }\r\n \r\n if (props.isDisplaySearchBar !== undefined && typeof props.isDisplaySearchBar !== 'boolean') {\r\n console.error('Error: isDisplaySearchBar should be a boolean.');\r\n }\r\n \r\n if (!['portrait', 'triangle', 'landscape'].includes(props.nodeTemplate)) {\r\n console.error('Error: nodeTemplate should be \"portrait\", \"triangle\", or \"landscape\".');\r\n }\r\n \r\n if (!Array.isArray(props.hambergerMenuList)) {\r\n console.error('Error: hambergerMenuList should be an array.');\r\n } else {\r\n props.hambergerMenuList.forEach(item => {\r\n if (typeof item.label !== 'string') {\r\n console.error('Error: hambergerMenuList label should be a string.');\r\n }\r\n if (typeof item.id !== 'number') {\r\n console.error('Error: hambergerMenuList id should be a number.');\r\n }\r\n });\r\n }\r\n \r\n // Check if greyNodeStyle is of type CustomNodeStyle\r\n const greyNodeStyle = props.greyNodeStyle;\r\n if (greyNodeStyle) {\r\n if (greyNodeStyle.backgroundColor && typeof greyNodeStyle.backgroundColor !== 'string') {\r\n console.error('Error: greyNodeStyle.backgroundColor should be a string.');\r\n }\r\n if (greyNodeStyle.color && typeof greyNodeStyle.color !== 'string') {\r\n console.error('Error: greyNodeStyle.color should be a string.');\r\n }\r\n if (greyNodeStyle.padding && typeof greyNodeStyle.padding !== 'string') {\r\n console.error('Error: greyNodeStyle.padding should be a string.');\r\n }\r\n if (greyNodeStyle.borderRadius && typeof greyNodeStyle.borderRadius !== 'string') {\r\n console.error('Error: greyNodeStyle.borderRadius should be a string.');\r\n }\r\n }\r\n \r\n // Check if orgData is an array of OrgDataItem objects\r\n if (!Array.isArray(props.orgData)) {\r\n console.error('Error: orgData should be an array.');\r\n } else {\r\n props.orgData.forEach(item => checkOrgDataItem(item));\r\n }\r\n }\r\n\r\n export const checkOrgDataItem = (item: OrgDataItem): void => {\r\n if (item.label !== undefined && typeof item.label !== 'string') {\r\n console.error('Error: OrgDataItem label should be a string.');\r\n }\r\n \r\n if (item.expanded !== undefined && typeof item.expanded !== 'boolean') {\r\n console.error('Error: OrgDataItem expanded should be a boolean.');\r\n }\r\n \r\n if (item.description !== undefined && typeof item.description !== 'string') {\r\n console.error('Error: OrgDataItem description should be a string.');\r\n }\r\n \r\n if (item.customNodeStyle !== undefined) {\r\n const customNodeStyle = item.customNodeStyle;\r\n if (customNodeStyle.backgroundColor && typeof customNodeStyle.backgroundColor !== 'string') {\r\n console.error('Error: customNodeStyle.backgroundColor should be a string.');\r\n }\r\n if (customNodeStyle.color && typeof customNodeStyle.color !== 'string') {\r\n console.error('Error: customNodeStyle.color should be a string.');\r\n }\r\n if (customNodeStyle.padding && typeof customNodeStyle.padding !== 'string') {\r\n console.error('Error: customNodeStyle.padding should be a string.');\r\n }\r\n if (customNodeStyle.borderRadius && typeof customNodeStyle.borderRadius !== 'string') {\r\n console.error('Error: customNodeStyle.borderRadius should be a string.');\r\n }\r\n }\r\n \r\n if (item.data) {\r\n if (item.data.image !== undefined && typeof item.data.image !== 'string') {\r\n console.error('Error: OrgDataItem data.image should be a string.');\r\n }\r\n if (item.data.name !== undefined && typeof item.data.name !== 'string') {\r\n console.error('Error: OrgDataItem data.name should be a string.');\r\n }\r\n if (typeof item.data.title !== 'string') {\r\n console.error('Error: OrgDataItem data.title should be a string.');\r\n }\r\n }\r\n \r\n if (item.children && Array.isArray(item.children)) {\r\n item.children.forEach(child => checkOrgDataItem(child)); // Recursive call for children\r\n }\r\n \r\n if (item.originalStyle) {\r\n const originalStyle = item.originalStyle;\r\n if (originalStyle.backgroundColor && typeof originalStyle.backgroundColor !== 'string') {\r\n console.error('Error: originalStyle.backgroundColor should be a string.');\r\n }\r\n if (originalStyle.color && typeof originalStyle.color !== 'string') {\r\n console.error('Error: originalStyle.color should be a string.');\r\n }\r\n if (originalStyle.padding && typeof originalStyle.padding !== 'string') {\r\n console.error('Error: originalStyle.padding should be a string.');\r\n }\r\n if (originalStyle.borderRadius && typeof originalStyle.borderRadius !== 'string') {\r\n console.error('Error: originalStyle.borderRadius should be a string.');\r\n }\r\n }\r\n }\r\n","import { Component, OnInit, ViewChild, Input } from '@angular/core';\r\nimport { CustomTreeNode, OrgData, OrgDataItem } from '../../interfaces/org-chart';\r\nimport { TreeNode } from 'primeng/api';\r\nimport { checkPropsType, downloadChart } from '../../utils/chart-download.util';\r\nimport { OrganizationChart } from 'primeng/organizationchart';\r\n\r\n/** Displays an organizational chart with nodes and relationships (Org Chart Component) */\r\n@Component({\r\n selector: 'uxp-org-chart',\r\n templateUrl: './org-chart.component.html',\r\n styleUrls: ['./org-chart.component.scss'],\r\n})\r\nexport class OrgChartComponent implements OnInit {\r\n @Input() rucInputData!: OrgData;\r\n @Input() customTheme: string | undefined;\r\n selectedNodes!: CustomTreeNode[];\r\n searchText = '';\r\n hoveredNode: CustomTreeNode | null = null;\r\n\r\n @ViewChild('orgChart', { static: false }) orgChart!: OrganizationChart;\r\n\r\n /** Initializes the component */\r\n ngOnInit(): void {\r\n let updatedJson = this.addDefaultKeysIfNotAvailable(this.rucInputData);\r\n this.rucInputData.orgData = this.updateRucInputData(updatedJson.orgData);\r\n checkPropsType(this.rucInputData); // To check rucInputData is in correct format or not \r\n this.expandAllNodes();\r\n } \r\n\r\n /** add default property for grey nodes if user does not provided */\r\n addDefaultKeysIfNotAvailable(orgData: OrgData) {\r\n if (!orgData.hasOwnProperty('greyNodeStyle')) {\r\n orgData.greyNodeStyle = {\r\n backgroundColor: '#d3d3d3',\r\n color: '#808080',\r\n };\r\n }\r\n return orgData;\r\n }\r\n\r\n /** manipulate input json as If customNodeStyle exists, create originalStyle for node and its children */\r\n updateRucInputData(data: OrgDataItem[]): OrgDataItem[] {\r\n return data.map((node: OrgDataItem) => {\r\n node['type'] = 'person';\r\n if (node.customNodeStyle) {\r\n node.originalStyle = { ...node.customNodeStyle };\r\n }\r\n if (node.children && node.children.length > 0) {\r\n node['type'] = 'person';\r\n node.children = this.updateRucInputData(node.children); // Recursive call\r\n }\r\n return node;\r\n });\r\n }\r\n\r\n /** Expands all nodes in the org chart */\r\n expandAllNodes(): void {\r\n this.rucInputData.orgData = this.expandNodes(this.rucInputData.orgData);\r\n }\r\n\r\n /** Recursively expands all nodes in the given array\r\n * @param nodes Nodes to expand @returns Expanded nodes */\r\n expandNodes(nodes: OrgDataItem[]): OrgDataItem[] {\r\n return nodes.map((node) => ({\r\n ...node,\r\n expanded: true,\r\n children: node.children ? this.expandNodes(node.children) : [],\r\n }));\r\n }\r\n\r\n /** Collapses all nodes in the org chart */\r\n collapseAllNodes(): void {\r\n this.rucInputData.orgData = this.collapseNodes(this.rucInputData.orgData);\r\n }\r\n\r\n /** Recursively collapses all nodes in the given array\r\n * @param nodes Nodes to collapse @returns Collapsed nodes */\r\n collapseNodes(nodes: OrgDataItem[]): OrgDataItem[] {\r\n return nodes.map((node) => ({\r\n ...node,\r\n expanded: false,\r\n children: node.children ? this.collapseNodes(node.children) : [],\r\n }));\r\n }\r\n\r\n /** Gets the background color of a node based on search text\r\n @param node Node to check @returns Whether the node matches the search text */\r\n getBackgroungColorOfNode(node: CustomTreeNode): boolean {\r\n return (\r\n !this.searchText ||\r\n node.data.title.toLowerCase().includes(this.searchText.toLowerCase()) ||\r\n node.data.name.toLowerCase().includes(this.searchText.toLowerCase()) ||\r\n node.label?.toLowerCase().includes(this.searchText.toLowerCase())\r\n );\r\n }\r\n\r\n /** Handles node hover event @param node Hovered node */\r\n onNodeHover(node: CustomTreeNode): void {\r\n if (this.searchText) return;\r\n this.hoveredNode = node;\r\n this.updateNodeStyles();\r\n }\r\n\r\n /** Handles node leave event */\r\n onNodeLeave(): void {\r\n this.hoveredNode = null;\r\n this.resetNodeStyles();\r\n }\r\n\r\n /** Updates node styles based on the hovered node */\r\n updateNodeStyles(): void {\r\n this.applyStyles(this.rucInputData.orgData, true);\r\n }\r\n\r\n /** Resets node styles to their original state */\r\n resetNodeStyles(): void {\r\n this.applyStyles(this.rucInputData.orgData, false);\r\n }\r\n\r\n /** Applies grey node style to non-matching nodes @param nodes Nodes to apply styles to */\r\n applyGreyNodes(nodes:OrgDataItem[]): void {\r\n nodes.forEach((node: OrgDataItem) => {\r\n const isMatching = this.searchText\r\n ? node.data?.title.includes(this.searchText)\r\n : false;\r\n node.customNodeStyle = isMatching\r\n ? node.customNodeStyle || node.originalStyle\r\n : {\r\n ...node.originalStyle,\r\n backgroundColor: this.rucInputData.greyNodeStyle.backgroundColor,\r\n color: this.rucInputData.greyNodeStyle.color,\r\n };\r\n\r\n if (node.children) {\r\n this.applyGreyNodes(node.children);\r\n }\r\n });\r\n }\r\n\r\n /** Applies styles to nodes based on the hovered node\r\n * @param nodes Nodes to apply styles @param isHovered Whether the node is hovered */\r\n applyStyles(nodes: OrgDataItem[], isHovered: boolean): void {\r\n nodes.forEach((node) => {\r\n if (isHovered) {\r\n node.customNodeStyle =\r\n node === this.hoveredNode ||\r\n this.isParent(node, this.hoveredNode) ||\r\n this.isChild(node, this.hoveredNode)\r\n ? node.customNodeStyle || node.originalStyle\r\n : {\r\n ...node.originalStyle,\r\n backgroundColor:\r\n this.rucInputData.greyNodeStyle.backgroundColor,\r\n color: this.rucInputData.greyNodeStyle.color,\r\n };\r\n } else {\r\n node.customNodeStyle = node.originalStyle;\r\n }\r\n\r\n if (node.children) {\r\n this.applyStyles(node.children, isHovered);\r\n }\r\n });\r\n }\r\n\r\n /** Use the downloadChart utility method */\r\n downloadChart(format: 'png' | 'jpeg' | 'pdf'): void {\r\n const chartContainer = this.orgChart.el.nativeElement;\r\n downloadChart(chartContainer, format); // Calls the utility function\r\n }\r\n\r\n /** Handles menu click event @param id Menu item ID */\r\n onMenuClick(id: number,event: MouseEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n switch (id) {\r\n case 1:\r\n this.downloadChart('pdf');\r\n break;\r\n case 2:\r\n this.downloadChart('png');\r\n break;\r\n case 3:\r\n this.downloadChart('jpeg');\r\n break;\r\n case 4:\r\n this.expandAllNodes();\r\n break;\r\n case 5:\r\n this.collapseAllNodes();\r\n break;\r\n default:\r\n console.warn(`Unknown menu item ID: ${id}. Please enter valid id.`);\r\n break;\r\n }\r\n }\r\n\r\n /** Gets tooltip data for a node @param node Node to get tooltip data */\r\n getTooltipData(node: CustomTreeNode): string | undefined {\r\n return node.description || '';\r\n }\r\n\r\n /** Checks if a node is a parent of another node.\r\n * @param currentNode The current node to check.\r\n * @param hoveredNode The node to check for parentage.\r\n * @returns Whether the current node is a parent of the hovered node. */\r\n isParent(\r\n currentNode: TreeNode,\r\n hoveredNode: TreeNode | null\r\n ): boolean | null | undefined {\r\n return hoveredNode && currentNode.children?.includes(hoveredNode);\r\n }\r\n\r\n /** Checks if a node is a child of another node.\r\n * @param node The node to check for child status\r\n * @param target The node to check for parentage.\r\n * @returns Whether the node is a child of the target node.*/\r\n isChild(node: TreeNode, target: TreeNode | null): boolean | null | undefined {\r\n return target && target.children?.includes(node);\r\n }\r\n}\r\n","<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span *ngIf=\"node.data.image\"><img [src]=\"node.data.image\" class=\"portraitImageDimension\" /></span>\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'triangle'\" class=\"flex trianlge-up flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" *ngIf=\"node.data.image\" >\r\n <img [src]=\"node.data.image\" class=\"triangleImageDimension\" />\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'landscape'\">\r\n <div class=\"card borderSolidGrey\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\">\r\n <div class=\"body\" >\r\n <div class=\"icon\" *ngIf=\"node.data.image\">\r\n <img [src]=\"node.data.image\" class=\"landscapeImageDimension\" />\r\n </div>\r\n <div class=\"content\">\r\n <div>{{node.data.name}}</div>\r\n <div>{{node.data.title}}</div>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-organizationChart>\r\n </div>\r\n \r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { OrganizationChartModule } from 'primeng/organizationchart';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { OrgChartComponent } from './org-chart/org-chart.component';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\n\r\n@NgModule({\r\n imports: [CommonModule, ButtonModule, BrowserModule, FormsModule, OrganizationChartModule, MatInputModule, MatMenuModule, MatButtonModule, MatIconModule],\r\n declarations: [OrgChartComponent],\r\n exports: [OrgChartComponent]\r\n})\r\nexport class RuclibOrgChartModule {}\r\n\r\n","export * from './lib/ruclib-org-chart.module';\r\nexport * from './lib/org-chart/org-chart.component';\r\n// export * from './services/org-chart.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ruc-lib-org-chart.mjs","sources":["../../src/utils/chart-download.util.ts","../../src/lib/org-chart/org-chart.component.ts","../../src/lib/org-chart/org-chart.component.html","../../src/lib/ruclib-org-chart.module.ts","../../src/index.ts","../../src/ruc-lib-org-chart.ts"],"sourcesContent":["import { jsPDF } from 'jspdf';\r\nimport html2canvas from 'html2canvas';\r\nimport { OrgData, OrgDataItem } from '../interfaces/org-chart';\r\n\r\n\r\nexport const downloadChart = (chartContainer: HTMLElement, format: 'png' | 'jpeg' | 'pdf'): void => {\r\n if (!chartContainer) {\r\n console.error('Chart container not found!');\r\n return;\r\n }\r\n\r\n // Capture the chart container as an image (either PNG or JPEG)\r\n if (format === 'pdf') {\r\n createPDF(chartContainer);\r\n } else {\r\n captureElementAsImage(chartContainer, format)\r\n .then((imgData) => {\r\n downloadImage(imgData, format); // Download as PNG or JPEG\r\n })\r\n .catch(handleCanvasError);\r\n }\r\n}\r\n\r\n// Capture the element as an image and return a promise\r\nexport const captureElementAsImage = (element: HTMLElement, format: 'png' | 'jpeg'): Promise<string> => {\r\n return new Promise((resolve, reject) => {\r\n html2canvas(element, {\r\n useCORS: true,\r\n scrollX: 0,\r\n scrollY: -window.scrollY,\r\n logging: false,\r\n backgroundColor: null,\r\n })\r\n .then((canvas) => {\r\n const imgData = canvas.toDataURL(`image/${format}`);\r\n resolve(imgData);\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n}\r\n\r\n// Downloads the org chart as a PDF document.\r\nexport const createPDF = (element: HTMLElement): void => {\r\n html2canvas(element, {\r\n useCORS: true,\r\n scale: 4, \r\n scrollX: 0,\r\n scrollY: -window.scrollY,\r\n logging: false,\r\n backgroundColor: null,\r\n })\r\n .then((canvas) => {\r\n const imgData = canvas.toDataURL('image/png'); // Capture as PNG (or you can use JPEG)\r\n const pdf = new jsPDF('p', 'mm', 'a4'); // Standard A4 page size\r\n\r\n // Get the dimensions of the PDF page\r\n const pdfWidth = pdf.internal.pageSize.width;\r\n const pdfHeight = pdf.internal.pageSize.height;\r\n\r\n const canvasWidth = canvas.width;\r\n const canvasHeight = canvas.height;\r\n\r\n const aspectRatio = canvasWidth / canvasHeight;\r\n\r\n let imgWidth = pdfWidth;\r\n let imgHeight = pdfWidth / aspectRatio;\r\n\r\n // If the image height exceeds the PDF page height, adjust it\r\n if (imgHeight > pdfHeight) {\r\n imgHeight = pdfHeight;\r\n imgWidth = pdfHeight * aspectRatio;\r\n }\r\n\r\n // Add the image to the PDF\r\n pdf.addImage(imgData, 'PNG', 0, 20, imgWidth, imgHeight); // Fit image on PDF page\r\n pdf.save('organization-chart.pdf'); // Download the PDF\r\n })\r\n .catch(handleCanvasError);\r\n}\r\n\r\n// Download the captured image in the required format (PNG/JPEG)\r\nexport const downloadImage = (imgData: string, format: 'png' | 'jpeg'): void => {\r\n const link = document.createElement('a');\r\n link.href = imgData;\r\n link.download = `organization-chart.${format}`;\r\n link.click();\r\n}\r\n\r\n// Error handler for any issues during canvas generation or file creation\r\nexport const handleCanvasError = (error: any): void => {\r\n console.error('Error generating file:', error);\r\n}\r\n\r\n \r\nexport const checkPropsType = (props: OrgData): void => {\r\n if (props.isDisplayHambergerMenu !== undefined && typeof props.isDisplayHambergerMenu !== 'boolean') {\r\n console.error('Error: isDisplayHambergerMenu should be a boolean.');\r\n }\r\n \r\n if (props.isDisplaySearchBar !== undefined && typeof props.isDisplaySearchBar !== 'boolean') {\r\n console.error('Error: isDisplaySearchBar should be a boolean.');\r\n }\r\n \r\n if (!['portrait', 'triangle', 'landscape'].includes(props.nodeTemplate)) {\r\n console.error('Error: nodeTemplate should be \"portrait\", \"triangle\", or \"landscape\".');\r\n }\r\n \r\n if (!Array.isArray(props.hambergerMenuList)) {\r\n console.error('Error: hambergerMenuList should be an array.');\r\n } else {\r\n props.hambergerMenuList.forEach(item => {\r\n if (typeof item.label !== 'string') {\r\n console.error('Error: hambergerMenuList label should be a string.');\r\n }\r\n if (typeof item.id !== 'number') {\r\n console.error('Error: hambergerMenuList id should be a number.');\r\n }\r\n });\r\n }\r\n \r\n // Check if greyNodeStyle is of type CustomNodeStyle\r\n const greyNodeStyle = props.greyNodeStyle;\r\n if (greyNodeStyle) {\r\n if (greyNodeStyle.backgroundColor && typeof greyNodeStyle.backgroundColor !== 'string') {\r\n console.error('Error: greyNodeStyle.backgroundColor should be a string.');\r\n }\r\n if (greyNodeStyle.color && typeof greyNodeStyle.color !== 'string') {\r\n console.error('Error: greyNodeStyle.color should be a string.');\r\n }\r\n if (greyNodeStyle.padding && typeof greyNodeStyle.padding !== 'string') {\r\n console.error('Error: greyNodeStyle.padding should be a string.');\r\n }\r\n if (greyNodeStyle.borderRadius && typeof greyNodeStyle.borderRadius !== 'string') {\r\n console.error('Error: greyNodeStyle.borderRadius should be a string.');\r\n }\r\n }\r\n \r\n // Check if orgData is an array of OrgDataItem objects\r\n if (!Array.isArray(props.orgData)) {\r\n console.error('Error: orgData should be an array.');\r\n } else {\r\n props.orgData.forEach(item => checkOrgDataItem(item));\r\n }\r\n }\r\n\r\n export const checkOrgDataItem = (item: OrgDataItem): void => {\r\n if (item.label !== undefined && typeof item.label !== 'string') {\r\n console.error('Error: OrgDataItem label should be a string.');\r\n }\r\n \r\n if (item.expanded !== undefined && typeof item.expanded !== 'boolean') {\r\n console.error('Error: OrgDataItem expanded should be a boolean.');\r\n }\r\n \r\n if (item.description !== undefined && typeof item.description !== 'string') {\r\n console.error('Error: OrgDataItem description should be a string.');\r\n }\r\n \r\n if (item.customNodeStyle !== undefined) {\r\n const customNodeStyle = item.customNodeStyle;\r\n if (customNodeStyle.backgroundColor && typeof customNodeStyle.backgroundColor !== 'string') {\r\n console.error('Error: customNodeStyle.backgroundColor should be a string.');\r\n }\r\n if (customNodeStyle.color && typeof customNodeStyle.color !== 'string') {\r\n console.error('Error: customNodeStyle.color should be a string.');\r\n }\r\n if (customNodeStyle.padding && typeof customNodeStyle.padding !== 'string') {\r\n console.error('Error: customNodeStyle.padding should be a string.');\r\n }\r\n if (customNodeStyle.borderRadius && typeof customNodeStyle.borderRadius !== 'string') {\r\n console.error('Error: customNodeStyle.borderRadius should be a string.');\r\n }\r\n }\r\n \r\n if (item.data) {\r\n if (item.data.image !== undefined && typeof item.data.image !== 'string') {\r\n console.error('Error: OrgDataItem data.image should be a string.');\r\n }\r\n if (item.data.name !== undefined && typeof item.data.name !== 'string') {\r\n console.error('Error: OrgDataItem data.name should be a string.');\r\n }\r\n if (typeof item.data.title !== 'string') {\r\n console.error('Error: OrgDataItem data.title should be a string.');\r\n }\r\n }\r\n \r\n if (item.children && Array.isArray(item.children)) {\r\n item.children.forEach(child => checkOrgDataItem(child)); // Recursive call for children\r\n }\r\n \r\n if (item.originalStyle) {\r\n const originalStyle = item.originalStyle;\r\n if (originalStyle.backgroundColor && typeof originalStyle.backgroundColor !== 'string') {\r\n console.error('Error: originalStyle.backgroundColor should be a string.');\r\n }\r\n if (originalStyle.color && typeof originalStyle.color !== 'string') {\r\n console.error('Error: originalStyle.color should be a string.');\r\n }\r\n if (originalStyle.padding && typeof originalStyle.padding !== 'string') {\r\n console.error('Error: originalStyle.padding should be a string.');\r\n }\r\n if (originalStyle.borderRadius && typeof originalStyle.borderRadius !== 'string') {\r\n console.error('Error: originalStyle.borderRadius should be a string.');\r\n }\r\n }\r\n }\r\n","import { Component, OnInit, ViewChild, Input } from '@angular/core';\r\nimport { CustomTreeNode, OrgData, OrgDataItem } from '../../interfaces/org-chart';\r\nimport { TreeNode } from 'primeng/api';\r\nimport { checkPropsType, downloadChart } from '../../utils/chart-download.util';\r\nimport { OrganizationChart } from 'primeng/organizationchart';\r\n\r\n/** Displays an organizational chart with nodes and relationships (Org Chart Component) */\r\n@Component({\r\n selector: 'uxp-org-chart',\r\n templateUrl: './org-chart.component.html',\r\n styleUrls: ['./org-chart.component.scss'],\r\n})\r\nexport class OrgChartComponent implements OnInit {\r\n @Input() rucInputData!: OrgData;\r\n @Input() customTheme: string | undefined;\r\n selectedNodes!: CustomTreeNode[];\r\n searchText = '';\r\n hoveredNode: CustomTreeNode | null = null;\r\n\r\n @ViewChild('orgChart', { static: false }) orgChart!: OrganizationChart;\r\n\r\n /** Initializes the component */\r\n ngOnInit(): void {\r\n let updatedJson = this.addDefaultKeysIfNotAvailable(this.rucInputData);\r\n this.rucInputData.orgData = this.updateRucInputData(updatedJson.orgData);\r\n checkPropsType(this.rucInputData); // To check rucInputData is in correct format or not \r\n this.expandAllNodes();\r\n } \r\n\r\n /** add default property for grey nodes if user does not provided */\r\n addDefaultKeysIfNotAvailable(orgData: OrgData) {\r\n if (!orgData.hasOwnProperty('greyNodeStyle')) {\r\n orgData.greyNodeStyle = {\r\n backgroundColor: '#d3d3d3',\r\n color: '#808080',\r\n };\r\n }\r\n return orgData;\r\n }\r\n\r\n /** manipulate input json as If customNodeStyle exists, create originalStyle for node and its children */\r\n updateRucInputData(data: OrgDataItem[]): OrgDataItem[] {\r\n return data.map((node: OrgDataItem) => {\r\n node['type'] = 'person';\r\n if (node.customNodeStyle) {\r\n node.originalStyle = { ...node.customNodeStyle };\r\n }\r\n if (node.children && node.children.length > 0) {\r\n node['type'] = 'person';\r\n node.children = this.updateRucInputData(node.children); // Recursive call\r\n }\r\n return node;\r\n });\r\n }\r\n\r\n /** Expands all nodes in the org chart */\r\n expandAllNodes(): void {\r\n this.rucInputData.orgData = this.expandNodes(this.rucInputData.orgData);\r\n }\r\n\r\n /** Recursively expands all nodes in the given array\r\n * @param nodes Nodes to expand @returns Expanded nodes */\r\n expandNodes(nodes: OrgDataItem[]): OrgDataItem[] {\r\n return nodes.map((node) => ({\r\n ...node,\r\n expanded: true,\r\n children: node.children ? this.expandNodes(node.children) : [],\r\n }));\r\n }\r\n\r\n /** Collapses all nodes in the org chart */\r\n collapseAllNodes(): void {\r\n this.rucInputData.orgData = this.collapseNodes(this.rucInputData.orgData);\r\n }\r\n\r\n /** Recursively collapses all nodes in the given array\r\n * @param nodes Nodes to collapse @returns Collapsed nodes */\r\n collapseNodes(nodes: OrgDataItem[]): OrgDataItem[] {\r\n return nodes.map((node) => ({\r\n ...node,\r\n expanded: false,\r\n children: node.children ? this.collapseNodes(node.children) : [],\r\n }));\r\n }\r\n\r\n /** Gets the background color of a node based on search text\r\n @param node Node to check @returns Whether the node matches the search text */\r\n getBackgroungColorOfNode(node: CustomTreeNode): boolean {\r\n return (\r\n !this.searchText ||\r\n node.data.title.toLowerCase().includes(this.searchText.toLowerCase()) ||\r\n node.data.name.toLowerCase().includes(this.searchText.toLowerCase()) ||\r\n node.label?.toLowerCase().includes(this.searchText.toLowerCase())\r\n );\r\n }\r\n\r\n /** Handles node hover event @param node Hovered node */\r\n onNodeHover(node: CustomTreeNode): void {\r\n if (this.searchText) return;\r\n this.hoveredNode = node;\r\n this.updateNodeStyles();\r\n }\r\n\r\n /** Handles node leave event */\r\n onNodeLeave(): void {\r\n this.hoveredNode = null;\r\n this.resetNodeStyles();\r\n }\r\n\r\n /** Updates node styles based on the hovered node */\r\n updateNodeStyles(): void {\r\n this.applyStyles(this.rucInputData.orgData, true);\r\n }\r\n\r\n /** Resets node styles to their original state */\r\n resetNodeStyles(): void {\r\n this.applyStyles(this.rucInputData.orgData, false);\r\n }\r\n\r\n /** Applies grey node style to non-matching nodes @param nodes Nodes to apply styles to */\r\n applyGreyNodes(nodes:OrgDataItem[]): void {\r\n nodes.forEach((node: OrgDataItem) => {\r\n const isMatching = this.searchText\r\n ? node.data?.title.includes(this.searchText)\r\n : false;\r\n node.customNodeStyle = isMatching\r\n ? node.customNodeStyle || node.originalStyle\r\n : {\r\n ...node.originalStyle,\r\n backgroundColor: this.rucInputData.greyNodeStyle.backgroundColor,\r\n color: this.rucInputData.greyNodeStyle.color,\r\n };\r\n\r\n if (node.children) {\r\n this.applyGreyNodes(node.children);\r\n }\r\n });\r\n }\r\n\r\n /** Applies styles to nodes based on the hovered node\r\n * @param nodes Nodes to apply styles @param isHovered Whether the node is hovered */\r\n applyStyles(nodes: OrgDataItem[], isHovered: boolean): void {\r\n nodes.forEach((node) => {\r\n if (isHovered) {\r\n node.customNodeStyle =\r\n node === this.hoveredNode ||\r\n this.isParent(node, this.hoveredNode) ||\r\n this.isChild(node, this.hoveredNode)\r\n ? node.customNodeStyle || node.originalStyle\r\n : {\r\n ...node.originalStyle,\r\n backgroundColor:\r\n this.rucInputData.greyNodeStyle.backgroundColor,\r\n color: this.rucInputData.greyNodeStyle.color,\r\n };\r\n } else {\r\n node.customNodeStyle = node.originalStyle;\r\n }\r\n\r\n if (node.children) {\r\n this.applyStyles(node.children, isHovered);\r\n }\r\n });\r\n }\r\n\r\n /** Use the downloadChart utility method */\r\n downloadChart(format: 'png' | 'jpeg' | 'pdf'): void {\r\n const chartContainer = this.orgChart.el.nativeElement;\r\n downloadChart(chartContainer, format); // Calls the utility function\r\n }\r\n\r\n /** Handles menu click event @param id Menu item ID */\r\n onMenuClick(id: number,event: MouseEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n switch (id) {\r\n case 1:\r\n this.downloadChart('pdf');\r\n break;\r\n case 2:\r\n this.downloadChart('png');\r\n break;\r\n case 3:\r\n this.downloadChart('jpeg');\r\n break;\r\n case 4:\r\n this.expandAllNodes();\r\n break;\r\n case 5:\r\n this.collapseAllNodes();\r\n break;\r\n default:\r\n console.warn(`Unknown menu item ID: ${id}. Please enter valid id.`);\r\n break;\r\n }\r\n }\r\n\r\n /** Gets tooltip data for a node @param node Node to get tooltip data */\r\n getTooltipData(node: CustomTreeNode): string | undefined {\r\n return node.description || '';\r\n }\r\n\r\n /** Checks if a node is a parent of another node.\r\n * @param currentNode The current node to check.\r\n * @param hoveredNode The node to check for parentage.\r\n * @returns Whether the current node is a parent of the hovered node. */\r\n isParent(\r\n currentNode: TreeNode,\r\n hoveredNode: TreeNode | null\r\n ): boolean | null | undefined {\r\n return hoveredNode && currentNode.children?.includes(hoveredNode);\r\n }\r\n\r\n /** Checks if a node is a child of another node.\r\n * @param node The node to check for child status\r\n * @param target The node to check for parentage.\r\n * @returns Whether the node is a child of the target node.*/\r\n isChild(node: TreeNode, target: TreeNode | null): boolean | null | undefined {\r\n return target && target.children?.includes(node);\r\n }\r\n}\r\n","<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span><img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"portraitImageDimension\" /></span>\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'triangle'\" class=\"flex trianlge-up flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <div *ngIf=\"!node.data.image\" class=\"triangleImageDimension\">\r\n </div>\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"triangleImageDimension\" />\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'landscape'\">\r\n <div class=\"card borderSolidGrey\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\">\r\n <div class=\"body\" >\r\n <div class=\"icon\">\r\n <img *ngIf=\"node.data.image\" [src]=\"node.data.image\" class=\"landscapeImageDimension\" />\r\n </div>\r\n <div class=\"content\">\r\n <div>{{node.data.name}}</div>\r\n <div>{{node.data.title}}</div>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-organizationChart>\r\n </div>\r\n \r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { OrganizationChartModule } from 'primeng/organizationchart';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { OrgChartComponent } from './org-chart/org-chart.component';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\n\r\n@NgModule({\r\n imports: [CommonModule, ButtonModule, BrowserModule, FormsModule, OrganizationChartModule, MatInputModule, MatMenuModule, MatButtonModule, MatIconModule],\r\n declarations: [OrgChartComponent],\r\n exports: [OrgChartComponent]\r\n})\r\nexport class RuclibOrgChartModule {}\r\n\r\n","export * from './lib/ruclib-org-chart.module';\r\nexport * from './lib/org-chart/org-chart.component';\r\n// export * from './services/org-chart.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ruc-lib/org-chart",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^17.0.0 || ^16.0.0 || ^15.0.0",
|
|
7
7
|
"@angular/core": "^17.0.0 || ^16.0.0 || ^15.0.0",
|
|
8
|
-
"
|
|
8
|
+
"@angular/material": "^15.2.9 || ^14.0.0 || ^13.0.0",
|
|
9
|
+
"primeng": "^15.4.1",
|
|
10
|
+
"html2canvas": "^1.4.1",
|
|
11
|
+
"jspdf": "^2.5.2"
|
|
9
12
|
},
|
|
10
13
|
"dependencies": {
|
|
11
14
|
"tslib": "^2.3.0"
|