@ruc-lib/org-chart 2.0.4 → 3.1.1
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/README.md +27 -1
- package/esm2020/lib/org-chart/org-chart.component.mjs +10 -3
- package/esm2020/lib/ruclib-org-chart.module.mjs +1 -1
- package/fesm2015/ruc-lib-org-chart.mjs +9 -2
- package/fesm2015/ruc-lib-org-chart.mjs.map +1 -1
- package/fesm2020/ruc-lib-org-chart.mjs +9 -2
- package/fesm2020/ruc-lib-org-chart.mjs.map +1 -1
- package/lib/org-chart/org-chart.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -213,6 +213,13 @@ class OrgChartComponent {
|
|
|
213
213
|
this.rucInputData.orgData = this.updateRucInputData(updatedJson.orgData);
|
|
214
214
|
checkPropsType(this.rucInputData); // To check rucInputData is in correct format or not
|
|
215
215
|
this.expandAllNodes();
|
|
216
|
+
// remove prime-ng font-family class to apply material styles
|
|
217
|
+
setTimeout(() => {
|
|
218
|
+
const el = document.querySelector('.p-component');
|
|
219
|
+
if (el && this.customTheme) {
|
|
220
|
+
el.classList.remove('p-component');
|
|
221
|
+
}
|
|
222
|
+
}, 200);
|
|
216
223
|
}
|
|
217
224
|
/** add default property for grey nodes if user does not provided */
|
|
218
225
|
addDefaultKeysIfNotAvailable(orgData) {
|
|
@@ -372,10 +379,10 @@ class OrgChartComponent {
|
|
|
372
379
|
}
|
|
373
380
|
}
|
|
374
381
|
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><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"] }] });
|
|
382
|
+
OrgChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OrgChartComponent, selector: "uxp-ruclib-org-chart", inputs: { rucInputData: "rucInputData", customTheme: "customTheme" }, viewQueries: [{ propertyName: "orgChart", first: true, predicate: ["orgChart"], descendants: true }], ngImport: i0, template: "<div class=\"main\">\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\r\n (click)=\"onMenuClick(menu.id, $event);\" [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 <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\"\r\n [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\" [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\"\r\n [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\" [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\"\r\n [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\" [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>\r\n</div>", styles: [".mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.main{font-size:16px;font-weight:400;line-height:24px;font-family:Roboto,sans-serif;letter-spacing:.03125em}.ruc-custom-theme{font-size:14px;font-weight:400;line-height:20px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-mdc-option{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal)}.ruc-custom-theme .mat-mdc-card-title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-headline6-font-size, 20px);line-height:var(--mdc-typography-headline6-line-height, 32px);font-weight:var(--mdc-typography-headline6-font-weight, 500);letter-spacing:var(--mdc-typography-headline6-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-transform:var(--mdc-typography-headline6-text-transform, none)}.ruc-custom-theme .mat-mdc-card-subtitle{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle2-font-size, 20px);line-height:var(--mdc-typography-subtitle2-line-height, 24px);font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle2-text-transform, none)}.ruc-custom-theme .mat-mdc-tooltip{--mdc-plain-tooltip-supporting-text-font: Roboto, sans-serif;--mdc-plain-tooltip-supporting-text-size: 12px;--mdc-plain-tooltip-supporting-text-weight: 400;--mdc-plain-tooltip-supporting-text-tracking: normal}.ruc-custom-theme .mat-mdc-form-field-infix{min-height:56px}.ruc-custom-theme .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:28px}.ruc-custom-theme .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY( -34.75px) scale(var(--mat-mdc-form-field-floating-label-scale, .75));transform:var(--mat-mdc-form-field-label-transform)}.ruc-custom-theme .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:16px;padding-bottom:16px}.ruc-custom-theme .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding-top:24px;padding-bottom:8px}.ruc-custom-theme .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix{padding-top:16px;padding-bottom:16px}.ruc-custom-theme .mdc-text-field__input,.ruc-custom-theme .mdc-text-field__affix{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none)}.ruc-custom-theme .mdc-text-field--textarea .mdc-text-field__input{line-height:1.5rem}.ruc-custom-theme .mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none)}.ruc-custom-theme .mat-mdc-form-field-subscript-wrapper,.ruc-custom-theme .mat-mdc-form-field-bottom-align:before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-caption-font-size, 12px);line-height:var(--mdc-typography-caption-line-height, 20px);font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:var(--mdc-typography-caption-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:var(--mdc-typography-caption-text-transform, none)}.ruc-custom-theme .mat-mdc-form-field,.ruc-custom-theme .mat-mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:var(--mdc-typography-body1-text-transform, none)}.ruc-custom-theme .mat-mdc-form-field .mdc-text-field--outlined .mdc-floating-label--float-above{font-size:calc(15px * var(--mat-mdc-form-field-floating-label-scale, .75))}.ruc-custom-theme .mat-mdc-form-field .mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:15px}.ruc-custom-theme .mat-mdc-select-panel{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);line-height:var(--mdc-typography-subtitle1-line-height, 28px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none);line-height:24px}.ruc-custom-theme .mat-mdc-select{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:var(--mdc-typography-body1-text-transform, none)}.ruc-custom-theme .mat-mdc-autocomplete-panel{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);line-height:var(--mdc-typography-subtitle1-line-height, 28px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none);line-height:24px}.ruc-custom-theme .mat-mdc-dialog-container{--mdc-dialog-subhead-font: Roboto, sans-serif;--mdc-dialog-subhead-line-height: 32px;--mdc-dialog-subhead-size: 20px;--mdc-dialog-subhead-weight: 500;--mdc-dialog-subhead-tracking: normal;--mdc-dialog-supporting-text-font: Roboto, sans-serif;--mdc-dialog-supporting-text-line-height: 24px;--mdc-dialog-supporting-text-size: 15px;--mdc-dialog-supporting-text-weight: 400;--mdc-dialog-supporting-text-tracking: normal}.ruc-custom-theme .mat-mdc-chip{height:32px}.ruc-custom-theme .mat-mdc-standard-chip{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body2-font-size, 14px);line-height:var(--mdc-typography-body2-line-height, 20px);font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:var(--mdc-typography-body2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:var(--mdc-typography-body2-text-transform, none)}.ruc-custom-theme .mat-mdc-slide-toggle{--mdc-switch-state-layer-size: 48px}.ruc-custom-theme .mat-mdc-radio-button .mdc-radio{padding:10px}.ruc-custom-theme .mat-mdc-radio-button .mdc-radio .mdc-radio__background:before{top:-10px;left:-10px;width:40px;height:40px}.ruc-custom-theme .mat-mdc-radio-button .mdc-radio .mdc-radio__native-control{top:0;right:0;left:0;width:40px;height:40px}.ruc-custom-theme .mat-mdc-slider{--mdc-slider-label-label-text-font: Roboto, sans-serif;--mdc-slider-label-label-text-size: 20px;--mdc-slider-label-label-text-line-height: 24px;--mdc-slider-label-label-text-tracking: normal;--mdc-slider-label-label-text-weight: 500}.ruc-custom-theme .mat-mdc-menu-content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);line-height:var(--mdc-typography-subtitle1-line-height, 28px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none);line-height:24px}.ruc-custom-theme .mat-mdc-menu-content,.ruc-custom-theme .mat-mdc-menu-content .mat-mdc-menu-item .mdc-list-item__primary-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:var(--mdc-typography-body1-text-transform, none)}.ruc-custom-theme .mat-mdc-list-base{--mdc-list-list-item-one-line-container-height: 48px;--mdc-list-list-item-two-line-container-height: 64px;--mdc-list-list-item-three-line-container-height: 88px}.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-one-line,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-one-line,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-one-line{height:56px}.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines{height:72px}.ruc-custom-theme .mat-mdc-list-base{--mdc-list-list-item-label-text-font: Roboto, sans-serif;--mdc-list-list-item-label-text-line-height: 24px;--mdc-list-list-item-label-text-size: 15px;--mdc-list-list-item-label-text-tracking: normal;--mdc-list-list-item-label-text-weight: 400;--mdc-list-list-item-supporting-text-font: Roboto, sans-serif;--mdc-list-list-item-supporting-text-line-height: 20px;--mdc-list-list-item-supporting-text-size: 14px;--mdc-list-list-item-supporting-text-tracking: normal;--mdc-list-list-item-supporting-text-weight: 400;--mdc-list-list-item-trailing-supporting-text-font: Roboto, sans-serif;--mdc-list-list-item-trailing-supporting-text-line-height: 20px;--mdc-list-list-item-trailing-supporting-text-size: 12px;--mdc-list-list-item-trailing-supporting-text-tracking: normal;--mdc-list-list-item-trailing-supporting-text-weight: 400}.ruc-custom-theme .mdc-list-group__subheader{font-size:16px;font-weight:400;line-height:28px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-form-field-infix{min-height:40px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:20px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY( -26.75px) scale(var(--mat-mdc-form-field-floating-label-scale, .75));transform:var(--mat-mdc-form-field-label-transform)}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.ruc-custom-theme .mat-mdc-paginator .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-floating-label{display:none}.ruc-custom-theme .mat-mdc-paginator-container{min-height:56px}.ruc-custom-theme .mat-mdc-paginator{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-caption-font-size, 12px);line-height:var(--mdc-typography-caption-line-height, 20px);font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:var(--mdc-typography-caption-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:var(--mdc-typography-caption-text-transform, none)}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-select-value{font-size:12px}.ruc-custom-theme .mat-mdc-tab-header .mdc-tab{height:48px}.ruc-custom-theme .mdc-tab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-button-font-size, 20px);line-height:var(--mdc-typography-button-line-height, 60px);font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:var(--mdc-typography-button-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:var(--mdc-typography-button-text-transform, none)}.ruc-custom-theme .mat-mdc-checkbox .mdc-checkbox{padding:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2);margin:calc((var(--mdc-checkbox-touch-target-size, 40px) - 40px) / 2)}.ruc-custom-theme .mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__background{top:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2);left:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2)}.ruc-custom-theme .mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control{top:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);right:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);left:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);width:var(--mdc-checkbox-touch-target-size, 40px);height:var(--mdc-checkbox-touch-target-size, 40px)}@media all and (-ms-high-contrast: none){.ruc-custom-theme .mdc-checkbox .mdc-checkbox__focus-ring{display:none}}.ruc-custom-theme .mdc-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body2-font-size, 14px);line-height:var(--mdc-typography-body2-line-height, 20px);font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:var(--mdc-typography-body2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:var(--mdc-typography-body2-text-transform, none)}.ruc-custom-theme .mat-mdc-button.mat-mdc-button-base,.ruc-custom-theme .mat-mdc-raised-button.mat-mdc-button-base,.ruc-custom-theme .mat-mdc-unelevated-button.mat-mdc-button-base,.ruc-custom-theme .mat-mdc-outlined-button.mat-mdc-button-base{height:36px}.ruc-custom-theme .mdc-button{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-button-font-size, 20px);line-height:var(--mdc-typography-button-line-height, 60px);font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:var(--mdc-typography-button-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:var(--mdc-typography-button-text-transform, none)}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base{width:48px;height:48px;padding:12px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__focus-ring{max-height:48px;max-width:48px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:40px;height:40px;margin:4px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__focus-ring{max-height:40px;max-width:40px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%,-50%)}.ruc-custom-theme .mdc-fab--extended{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-button-font-size, 20px);line-height:var(--mdc-typography-button-line-height, 60px);font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:var(--mdc-typography-button-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:var(--mdc-typography-button-text-transform, none)}.ruc-custom-theme .mat-mdc-snack-bar-container{--mdc-snackbar-supporting-text-font: Roboto, sans-serif;--mdc-snackbar-supporting-text-line-height: 20px;--mdc-snackbar-supporting-text-size: 14px;--mdc-snackbar-supporting-text-weight: 400}.ruc-custom-theme .mat-mdc-table .mdc-data-table__row{height:52px}.ruc-custom-theme .mat-mdc-table .mdc-data-table__pagination{min-height:52px}.ruc-custom-theme .mat-mdc-table .mdc-data-table__header-row{height:56px}.ruc-custom-theme .mdc-data-table__content,.ruc-custom-theme .mdc-data-table__cell{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body2-font-size, 14px);line-height:var(--mdc-typography-body2-line-height, 20px);font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:var(--mdc-typography-body2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:var(--mdc-typography-body2-text-transform, none)}.ruc-custom-theme .mdc-data-table__header-cell{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle2-font-size, 20px);line-height:var(--mdc-typography-subtitle2-line-height, 24px);font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle2-text-transform, none)}.ruc-custom-theme .mat-badge{position:relative}.ruc-custom-theme .mat-badge.mat-badge{overflow:visible}.ruc-custom-theme .mat-badge-hidden .mat-badge-content{display:none}.ruc-custom-theme .mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform .2s ease-in-out;transform:scale(.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.ruc-custom-theme .ng-animate-disabled .mat-badge-content,.ruc-custom-theme .mat-badge-content._mat-animation-noopable{transition:none}.ruc-custom-theme .mat-badge-content.mat-badge-active{transform:none}.ruc-custom-theme .mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.ruc-custom-theme .mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.ruc-custom-theme .mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.ruc-custom-theme .mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.ruc-custom-theme .mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.ruc-custom-theme .mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.ruc-custom-theme .mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.ruc-custom-theme .mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.ruc-custom-theme .mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.ruc-custom-theme .mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.ruc-custom-theme .mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.ruc-custom-theme .mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.ruc-custom-theme .mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.ruc-custom-theme .mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.ruc-custom-theme .mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.ruc-custom-theme .mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,sans-serif}.ruc-custom-theme .mat-badge-small .mat-badge-content{font-size:9px}.ruc-custom-theme .mat-badge-large .mat-badge-content{font-size:24px}.ruc-custom-theme .mat-bottom-sheet-container{font-size:14px;font-weight:400;line-height:20px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:48px}.ruc-custom-theme .mat-button-toggle{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base{width:40px;height:40px;padding:8px}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__focus-ring{max-height:40px;max-width:40px}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:40px;height:40px;margin:0}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__focus-ring{max-height:40px;max-width:40px}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__touch{position:absolute;top:50%;height:40px;left:50%;width:40px;transform:translate(-50%,-50%)}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base .mat-mdc-button-touch-target{display:none}.ruc-custom-theme .mat-calendar{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-calendar-body{font-size:13px}.ruc-custom-theme .mat-calendar-body-label,.ruc-custom-theme .mat-calendar-period-button{font-size:20px;font-weight:500}.ruc-custom-theme .mat-calendar-table-header th{font-size:11px;font-weight:400}.ruc-custom-theme .mat-expansion-panel-header{height:48px}.ruc-custom-theme .mat-expansion-panel-header.mat-expanded{height:64px}.ruc-custom-theme .mat-expansion-panel-header{font-family:Roboto,sans-serif;font-size:15px;font-weight:400}.ruc-custom-theme .mat-expansion-panel-content{font-size:14px;font-weight:400;line-height:20px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-grid-tile-header,.ruc-custom-theme .mat-grid-tile-footer{font-size:14px}.ruc-custom-theme .mat-grid-tile-header .mat-line,.ruc-custom-theme .mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.ruc-custom-theme .mat-grid-tile-header .mat-line:nth-child(n+2),.ruc-custom-theme .mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}.ruc-custom-theme .mat-horizontal-stepper-header{height:72px}.ruc-custom-theme .mat-stepper-label-position-bottom .mat-horizontal-stepper-header,.ruc-custom-theme .mat-vertical-stepper-header{padding:24px}.ruc-custom-theme .mat-stepper-vertical-line:before{top:-16px;bottom:-16px}.ruc-custom-theme .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:after,.ruc-custom-theme .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:before{top:36px}.ruc-custom-theme .mat-stepper-label-position-bottom .mat-stepper-horizontal-line{top:36px}.ruc-custom-theme .mat-stepper-vertical,.ruc-custom-theme .mat-stepper-horizontal{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-step-label{font-size:14px;font-weight:400}.ruc-custom-theme .mat-step-sub-label-error{font-weight:400}.ruc-custom-theme .mat-step-label-error{font-size:20px}.ruc-custom-theme .mat-step-label-selected{font-size:20px;font-weight:500}.ruc-custom-theme .mat-toolbar-multiple-rows{min-height:64px}.ruc-custom-theme .mat-toolbar-row,.ruc-custom-theme .mat-toolbar-single-row{height:64px}@media (max-width: 599px){.ruc-custom-theme .mat-toolbar-multiple-rows{min-height:56px}.ruc-custom-theme .mat-toolbar-row,.ruc-custom-theme .mat-toolbar-single-row{height:56px}}.ruc-custom-theme .mat-toolbar,.ruc-custom-theme .mat-toolbar h1,.ruc-custom-theme .mat-toolbar h2,.ruc-custom-theme .mat-toolbar h3,.ruc-custom-theme .mat-toolbar h4,.ruc-custom-theme .mat-toolbar h5,.ruc-custom-theme .mat-toolbar h6{font-size:20px;font-weight:500;line-height:32px;font-family:Roboto,sans-serif;letter-spacing:normal;margin:0}.ruc-custom-theme .mat-tree-node{min-height:48px}.ruc-custom-theme .mat-tree{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-tree-node,.ruc-custom-theme .mat-nested-tree-node{font-weight:400;font-size:14px}.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
383
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OrgChartComponent, decorators: [{
|
|
377
384
|
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><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"] }]
|
|
385
|
+
args: [{ selector: 'uxp-ruclib-org-chart', template: "<div class=\"main\">\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\r\n (click)=\"onMenuClick(menu.id, $event);\" [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 <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\"\r\n [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\" [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\"\r\n [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\" [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\"\r\n [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\" [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>\r\n</div>", styles: [".mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.main{font-size:16px;font-weight:400;line-height:24px;font-family:Roboto,sans-serif;letter-spacing:.03125em}.ruc-custom-theme{font-size:14px;font-weight:400;line-height:20px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-mdc-option{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal)}.ruc-custom-theme .mat-mdc-card-title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-headline6-font-size, 20px);line-height:var(--mdc-typography-headline6-line-height, 32px);font-weight:var(--mdc-typography-headline6-font-weight, 500);letter-spacing:var(--mdc-typography-headline6-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-transform:var(--mdc-typography-headline6-text-transform, none)}.ruc-custom-theme .mat-mdc-card-subtitle{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle2-font-size, 20px);line-height:var(--mdc-typography-subtitle2-line-height, 24px);font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle2-text-transform, none)}.ruc-custom-theme .mat-mdc-tooltip{--mdc-plain-tooltip-supporting-text-font: Roboto, sans-serif;--mdc-plain-tooltip-supporting-text-size: 12px;--mdc-plain-tooltip-supporting-text-weight: 400;--mdc-plain-tooltip-supporting-text-tracking: normal}.ruc-custom-theme .mat-mdc-form-field-infix{min-height:56px}.ruc-custom-theme .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:28px}.ruc-custom-theme .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY( -34.75px) scale(var(--mat-mdc-form-field-floating-label-scale, .75));transform:var(--mat-mdc-form-field-label-transform)}.ruc-custom-theme .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:16px;padding-bottom:16px}.ruc-custom-theme .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding-top:24px;padding-bottom:8px}.ruc-custom-theme .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix{padding-top:16px;padding-bottom:16px}.ruc-custom-theme .mdc-text-field__input,.ruc-custom-theme .mdc-text-field__affix{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none)}.ruc-custom-theme .mdc-text-field--textarea .mdc-text-field__input{line-height:1.5rem}.ruc-custom-theme .mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none)}.ruc-custom-theme .mat-mdc-form-field-subscript-wrapper,.ruc-custom-theme .mat-mdc-form-field-bottom-align:before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-caption-font-size, 12px);line-height:var(--mdc-typography-caption-line-height, 20px);font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:var(--mdc-typography-caption-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:var(--mdc-typography-caption-text-transform, none)}.ruc-custom-theme .mat-mdc-form-field,.ruc-custom-theme .mat-mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:var(--mdc-typography-body1-text-transform, none)}.ruc-custom-theme .mat-mdc-form-field .mdc-text-field--outlined .mdc-floating-label--float-above{font-size:calc(15px * var(--mat-mdc-form-field-floating-label-scale, .75))}.ruc-custom-theme .mat-mdc-form-field .mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:15px}.ruc-custom-theme .mat-mdc-select-panel{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);line-height:var(--mdc-typography-subtitle1-line-height, 28px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none);line-height:24px}.ruc-custom-theme .mat-mdc-select{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:var(--mdc-typography-body1-text-transform, none)}.ruc-custom-theme .mat-mdc-autocomplete-panel{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);line-height:var(--mdc-typography-subtitle1-line-height, 28px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none);line-height:24px}.ruc-custom-theme .mat-mdc-dialog-container{--mdc-dialog-subhead-font: Roboto, sans-serif;--mdc-dialog-subhead-line-height: 32px;--mdc-dialog-subhead-size: 20px;--mdc-dialog-subhead-weight: 500;--mdc-dialog-subhead-tracking: normal;--mdc-dialog-supporting-text-font: Roboto, sans-serif;--mdc-dialog-supporting-text-line-height: 24px;--mdc-dialog-supporting-text-size: 15px;--mdc-dialog-supporting-text-weight: 400;--mdc-dialog-supporting-text-tracking: normal}.ruc-custom-theme .mat-mdc-chip{height:32px}.ruc-custom-theme .mat-mdc-standard-chip{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body2-font-size, 14px);line-height:var(--mdc-typography-body2-line-height, 20px);font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:var(--mdc-typography-body2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:var(--mdc-typography-body2-text-transform, none)}.ruc-custom-theme .mat-mdc-slide-toggle{--mdc-switch-state-layer-size: 48px}.ruc-custom-theme .mat-mdc-radio-button .mdc-radio{padding:10px}.ruc-custom-theme .mat-mdc-radio-button .mdc-radio .mdc-radio__background:before{top:-10px;left:-10px;width:40px;height:40px}.ruc-custom-theme .mat-mdc-radio-button .mdc-radio .mdc-radio__native-control{top:0;right:0;left:0;width:40px;height:40px}.ruc-custom-theme .mat-mdc-slider{--mdc-slider-label-label-text-font: Roboto, sans-serif;--mdc-slider-label-label-text-size: 20px;--mdc-slider-label-label-text-line-height: 24px;--mdc-slider-label-label-text-tracking: normal;--mdc-slider-label-label-text-weight: 500}.ruc-custom-theme .mat-mdc-menu-content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);line-height:var(--mdc-typography-subtitle1-line-height, 28px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none);line-height:24px}.ruc-custom-theme .mat-mdc-menu-content,.ruc-custom-theme .mat-mdc-menu-content .mat-mdc-menu-item .mdc-list-item__primary-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:var(--mdc-typography-body1-text-transform, none)}.ruc-custom-theme .mat-mdc-list-base{--mdc-list-list-item-one-line-container-height: 48px;--mdc-list-list-item-two-line-container-height: 64px;--mdc-list-list-item-three-line-container-height: 88px}.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-one-line,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-one-line,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-one-line{height:56px}.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines{height:72px}.ruc-custom-theme .mat-mdc-list-base{--mdc-list-list-item-label-text-font: Roboto, sans-serif;--mdc-list-list-item-label-text-line-height: 24px;--mdc-list-list-item-label-text-size: 15px;--mdc-list-list-item-label-text-tracking: normal;--mdc-list-list-item-label-text-weight: 400;--mdc-list-list-item-supporting-text-font: Roboto, sans-serif;--mdc-list-list-item-supporting-text-line-height: 20px;--mdc-list-list-item-supporting-text-size: 14px;--mdc-list-list-item-supporting-text-tracking: normal;--mdc-list-list-item-supporting-text-weight: 400;--mdc-list-list-item-trailing-supporting-text-font: Roboto, sans-serif;--mdc-list-list-item-trailing-supporting-text-line-height: 20px;--mdc-list-list-item-trailing-supporting-text-size: 12px;--mdc-list-list-item-trailing-supporting-text-tracking: normal;--mdc-list-list-item-trailing-supporting-text-weight: 400}.ruc-custom-theme .mdc-list-group__subheader{font-size:16px;font-weight:400;line-height:28px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-form-field-infix{min-height:40px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:20px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY( -26.75px) scale(var(--mat-mdc-form-field-floating-label-scale, .75));transform:var(--mat-mdc-form-field-label-transform)}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.ruc-custom-theme .mat-mdc-paginator .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-floating-label{display:none}.ruc-custom-theme .mat-mdc-paginator-container{min-height:56px}.ruc-custom-theme .mat-mdc-paginator{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-caption-font-size, 12px);line-height:var(--mdc-typography-caption-line-height, 20px);font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:var(--mdc-typography-caption-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:var(--mdc-typography-caption-text-transform, none)}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-select-value{font-size:12px}.ruc-custom-theme .mat-mdc-tab-header .mdc-tab{height:48px}.ruc-custom-theme .mdc-tab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-button-font-size, 20px);line-height:var(--mdc-typography-button-line-height, 60px);font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:var(--mdc-typography-button-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:var(--mdc-typography-button-text-transform, none)}.ruc-custom-theme .mat-mdc-checkbox .mdc-checkbox{padding:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2);margin:calc((var(--mdc-checkbox-touch-target-size, 40px) - 40px) / 2)}.ruc-custom-theme .mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__background{top:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2);left:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2)}.ruc-custom-theme .mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control{top:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);right:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);left:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);width:var(--mdc-checkbox-touch-target-size, 40px);height:var(--mdc-checkbox-touch-target-size, 40px)}@media all and (-ms-high-contrast: none){.ruc-custom-theme .mdc-checkbox .mdc-checkbox__focus-ring{display:none}}.ruc-custom-theme .mdc-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body2-font-size, 14px);line-height:var(--mdc-typography-body2-line-height, 20px);font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:var(--mdc-typography-body2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:var(--mdc-typography-body2-text-transform, none)}.ruc-custom-theme .mat-mdc-button.mat-mdc-button-base,.ruc-custom-theme .mat-mdc-raised-button.mat-mdc-button-base,.ruc-custom-theme .mat-mdc-unelevated-button.mat-mdc-button-base,.ruc-custom-theme .mat-mdc-outlined-button.mat-mdc-button-base{height:36px}.ruc-custom-theme .mdc-button{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-button-font-size, 20px);line-height:var(--mdc-typography-button-line-height, 60px);font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:var(--mdc-typography-button-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:var(--mdc-typography-button-text-transform, none)}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base{width:48px;height:48px;padding:12px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__focus-ring{max-height:48px;max-width:48px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:40px;height:40px;margin:4px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__focus-ring{max-height:40px;max-width:40px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%,-50%)}.ruc-custom-theme .mdc-fab--extended{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-button-font-size, 20px);line-height:var(--mdc-typography-button-line-height, 60px);font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:var(--mdc-typography-button-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:var(--mdc-typography-button-text-transform, none)}.ruc-custom-theme .mat-mdc-snack-bar-container{--mdc-snackbar-supporting-text-font: Roboto, sans-serif;--mdc-snackbar-supporting-text-line-height: 20px;--mdc-snackbar-supporting-text-size: 14px;--mdc-snackbar-supporting-text-weight: 400}.ruc-custom-theme .mat-mdc-table .mdc-data-table__row{height:52px}.ruc-custom-theme .mat-mdc-table .mdc-data-table__pagination{min-height:52px}.ruc-custom-theme .mat-mdc-table .mdc-data-table__header-row{height:56px}.ruc-custom-theme .mdc-data-table__content,.ruc-custom-theme .mdc-data-table__cell{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body2-font-size, 14px);line-height:var(--mdc-typography-body2-line-height, 20px);font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:var(--mdc-typography-body2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:var(--mdc-typography-body2-text-transform, none)}.ruc-custom-theme .mdc-data-table__header-cell{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle2-font-size, 20px);line-height:var(--mdc-typography-subtitle2-line-height, 24px);font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle2-text-transform, none)}.ruc-custom-theme .mat-badge{position:relative}.ruc-custom-theme .mat-badge.mat-badge{overflow:visible}.ruc-custom-theme .mat-badge-hidden .mat-badge-content{display:none}.ruc-custom-theme .mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform .2s ease-in-out;transform:scale(.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.ruc-custom-theme .ng-animate-disabled .mat-badge-content,.ruc-custom-theme .mat-badge-content._mat-animation-noopable{transition:none}.ruc-custom-theme .mat-badge-content.mat-badge-active{transform:none}.ruc-custom-theme .mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.ruc-custom-theme .mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.ruc-custom-theme .mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.ruc-custom-theme .mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.ruc-custom-theme .mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.ruc-custom-theme .mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.ruc-custom-theme .mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.ruc-custom-theme .mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.ruc-custom-theme .mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.ruc-custom-theme .mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.ruc-custom-theme .mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.ruc-custom-theme .mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.ruc-custom-theme .mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.ruc-custom-theme .mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.ruc-custom-theme .mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.ruc-custom-theme .mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,sans-serif}.ruc-custom-theme .mat-badge-small .mat-badge-content{font-size:9px}.ruc-custom-theme .mat-badge-large .mat-badge-content{font-size:24px}.ruc-custom-theme .mat-bottom-sheet-container{font-size:14px;font-weight:400;line-height:20px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:48px}.ruc-custom-theme .mat-button-toggle{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base{width:40px;height:40px;padding:8px}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__focus-ring{max-height:40px;max-width:40px}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:40px;height:40px;margin:0}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__focus-ring{max-height:40px;max-width:40px}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__touch{position:absolute;top:50%;height:40px;left:50%;width:40px;transform:translate(-50%,-50%)}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base .mat-mdc-button-touch-target{display:none}.ruc-custom-theme .mat-calendar{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-calendar-body{font-size:13px}.ruc-custom-theme .mat-calendar-body-label,.ruc-custom-theme .mat-calendar-period-button{font-size:20px;font-weight:500}.ruc-custom-theme .mat-calendar-table-header th{font-size:11px;font-weight:400}.ruc-custom-theme .mat-expansion-panel-header{height:48px}.ruc-custom-theme .mat-expansion-panel-header.mat-expanded{height:64px}.ruc-custom-theme .mat-expansion-panel-header{font-family:Roboto,sans-serif;font-size:15px;font-weight:400}.ruc-custom-theme .mat-expansion-panel-content{font-size:14px;font-weight:400;line-height:20px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-grid-tile-header,.ruc-custom-theme .mat-grid-tile-footer{font-size:14px}.ruc-custom-theme .mat-grid-tile-header .mat-line,.ruc-custom-theme .mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.ruc-custom-theme .mat-grid-tile-header .mat-line:nth-child(n+2),.ruc-custom-theme .mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}.ruc-custom-theme .mat-horizontal-stepper-header{height:72px}.ruc-custom-theme .mat-stepper-label-position-bottom .mat-horizontal-stepper-header,.ruc-custom-theme .mat-vertical-stepper-header{padding:24px}.ruc-custom-theme .mat-stepper-vertical-line:before{top:-16px;bottom:-16px}.ruc-custom-theme .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:after,.ruc-custom-theme .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:before{top:36px}.ruc-custom-theme .mat-stepper-label-position-bottom .mat-stepper-horizontal-line{top:36px}.ruc-custom-theme .mat-stepper-vertical,.ruc-custom-theme .mat-stepper-horizontal{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-step-label{font-size:14px;font-weight:400}.ruc-custom-theme .mat-step-sub-label-error{font-weight:400}.ruc-custom-theme .mat-step-label-error{font-size:20px}.ruc-custom-theme .mat-step-label-selected{font-size:20px;font-weight:500}.ruc-custom-theme .mat-toolbar-multiple-rows{min-height:64px}.ruc-custom-theme .mat-toolbar-row,.ruc-custom-theme .mat-toolbar-single-row{height:64px}@media (max-width: 599px){.ruc-custom-theme .mat-toolbar-multiple-rows{min-height:56px}.ruc-custom-theme .mat-toolbar-row,.ruc-custom-theme .mat-toolbar-single-row{height:56px}}.ruc-custom-theme .mat-toolbar,.ruc-custom-theme .mat-toolbar h1,.ruc-custom-theme .mat-toolbar h2,.ruc-custom-theme .mat-toolbar h3,.ruc-custom-theme .mat-toolbar h4,.ruc-custom-theme .mat-toolbar h5,.ruc-custom-theme .mat-toolbar h6{font-size:20px;font-weight:500;line-height:32px;font-family:Roboto,sans-serif;letter-spacing:normal;margin:0}.ruc-custom-theme .mat-tree-node{min-height:48px}.ruc-custom-theme .mat-tree{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-tree-node,.ruc-custom-theme .mat-nested-tree-node{font-weight:400;font-size:14px}.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
386
|
}], propDecorators: { rucInputData: [{
|
|
380
387
|
type: Input
|
|
381
388
|
}], 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><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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"}
|
|
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-ruclib-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 // remove prime-ng font-family class to apply material styles\r\n setTimeout(()=>{\r\n const el = document.querySelector('.p-component')\r\n if(el && this.customTheme){\r\n el.classList.remove('p-component');\r\n }\r\n },200)\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=\"main\">\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\r\n (click)=\"onMenuClick(menu.id, $event);\" [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 <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\"\r\n [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\" [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\"\r\n [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\" [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\"\r\n [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\" [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>\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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"}
|