@ieeesa-npm/groups 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -223,12 +223,14 @@ export class TreeViewComponent {
|
|
|
223
223
|
return this.deletedGroupId;
|
|
224
224
|
}
|
|
225
225
|
// eslint-disable-next-line no-unused-vars, no-empty-function
|
|
226
|
-
constructor(database) {
|
|
226
|
+
constructor(database, elementRef) {
|
|
227
227
|
this.database = database;
|
|
228
|
+
this.elementRef = elementRef;
|
|
228
229
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
229
230
|
this.constants = constants;
|
|
230
231
|
this.buttons = this.constants?.viewGroups?.buttons;
|
|
231
232
|
this.treePaddingIndent = this.constants?.viewGroups?.treePaddingIndent;
|
|
233
|
+
this.destroy$ = new Subject();
|
|
232
234
|
this.plusCircleIconButton = this.buttons[4];
|
|
233
235
|
this.minusCircleIconButton = this.buttons[5];
|
|
234
236
|
this.menuItems = this.buttons.filter((e) => e.id !== GroupAction.EXPAND_GROUP_VIEW &&
|
|
@@ -266,6 +268,16 @@ export class TreeViewComponent {
|
|
|
266
268
|
ngOnInit() {
|
|
267
269
|
this.setGroupDataSource();
|
|
268
270
|
}
|
|
271
|
+
/**
|
|
272
|
+
* Assign ARIA role for all mat tree nodes as "row"
|
|
273
|
+
* @memberof TreeViewComponent
|
|
274
|
+
*/
|
|
275
|
+
ngAfterViewInit() {
|
|
276
|
+
this.dataSource.dataChange.pipe(takeUntil(this.destroy$)).subscribe(() => {
|
|
277
|
+
const treeItemNodes = this.elementRef.nativeElement.querySelectorAll('[role=treeitem]');
|
|
278
|
+
treeItemNodes?.forEach((node) => (node.role = 'row'));
|
|
279
|
+
});
|
|
280
|
+
}
|
|
269
281
|
/**
|
|
270
282
|
* Emits the group info when the toggle group is clicked or toggles the group view
|
|
271
283
|
* @param {GroupNode} group
|
|
@@ -384,8 +396,16 @@ export class TreeViewComponent {
|
|
|
384
396
|
trackByFn(index, iconButton) {
|
|
385
397
|
return iconButton.id;
|
|
386
398
|
}
|
|
387
|
-
|
|
388
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.3", type: TreeViewComponent, isStandalone: true, selector: "ieeesa-tree", inputs: { parentGroupsInfo: "parentGroupsInfo", childGroupsInfo: "childGroupsInfo", isGroupSearchOrFilterActive: "isGroupSearchOrFilterActive", deletedGroupIdInfo: "deletedGroupIdInfo" }, outputs: { toggleGroupClick: "toggleGroupClick", createGroupClick: "createGroupClick", editGroupClick: "editGroupClick", deleteGroupClick: "deleteGroupClick" }, ngImport: i0, template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n ></div>\r\n <div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div>\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:rgba(103,80,164,.12)}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree__node-group-acronym{color:#63666a}.ieeesa-tree__node-group-desc{color:#4a4d50}.ieeesa-tree__node{background:#f4f8fe;padding:.75em 1.5em .75em 1.125em}.ieeesa-tree__root-node-white-bg{background:#ffffff;box-shadow:0 1px #00b5e2 inset,6px 0 #379dfc inset}.ieeesa-tree__collapse-icon{min-width:3.5em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i2.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i2.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: i2.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i2.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: MenuComponent, selector: "ieeesa-menu", inputs: ["menuItems"], outputs: ["menuItemClick"] }, { kind: "component", type: IconButtonComponent, selector: "ieeesa-icon-button", inputs: ["iconButton"], outputs: ["iconButtonClick"] }] }); }
|
|
399
|
+
/**
|
|
400
|
+
* NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.
|
|
401
|
+
* @memberof GroupsComponent
|
|
402
|
+
*/
|
|
403
|
+
ngOnDestroy() {
|
|
404
|
+
this.destroy$.next(true);
|
|
405
|
+
this.destroy$.unsubscribe();
|
|
406
|
+
}
|
|
407
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: TreeViewComponent, deps: [{ token: Groups }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
408
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.3", type: TreeViewComponent, isStandalone: true, selector: "ieeesa-tree", inputs: { parentGroupsInfo: "parentGroupsInfo", childGroupsInfo: "childGroupsInfo", isGroupSearchOrFilterActive: "isGroupSearchOrFilterActive", deletedGroupIdInfo: "deletedGroupIdInfo" }, outputs: { toggleGroupClick: "toggleGroupClick", createGroupClick: "createGroupClick", editGroupClick: "editGroupClick", deleteGroupClick: "deleteGroupClick" }, ngImport: i0, template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <div role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\" role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:rgba(103,80,164,.12)}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree__node-group-acronym{color:#63666a}.ieeesa-tree__node-group-desc{color:#4a4d50}.ieeesa-tree__node{background:#f4f8fe;padding:.75em 1.5em .75em 1.125em}.ieeesa-tree__root-node-white-bg{background:#ffffff;box-shadow:0 1px #00b5e2 inset,6px 0 #379dfc inset}.ieeesa-tree__collapse-icon{min-width:3.5em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i2.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i2.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: i2.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i2.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: MenuComponent, selector: "ieeesa-menu", inputs: ["menuItems"], outputs: ["menuItemClick"] }, { kind: "component", type: IconButtonComponent, selector: "ieeesa-icon-button", inputs: ["iconButton"], outputs: ["iconButtonClick"] }] }); }
|
|
389
409
|
}
|
|
390
410
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: TreeViewComponent, decorators: [{
|
|
391
411
|
type: Component,
|
|
@@ -396,8 +416,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImpor
|
|
|
396
416
|
MatButtonModule,
|
|
397
417
|
MenuComponent,
|
|
398
418
|
IconButtonComponent,
|
|
399
|
-
], template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n ></div>\r\n <div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div>\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:rgba(103,80,164,.12)}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree__node-group-acronym{color:#63666a}.ieeesa-tree__node-group-desc{color:#4a4d50}.ieeesa-tree__node{background:#f4f8fe;padding:.75em 1.5em .75em 1.125em}.ieeesa-tree__root-node-white-bg{background:#ffffff;box-shadow:0 1px #00b5e2 inset,6px 0 #379dfc inset}.ieeesa-tree__collapse-icon{min-width:3.5em}\n"] }]
|
|
400
|
-
}], ctorParameters: function () { return [{ type: Groups }]; }, propDecorators: { parentGroupsInfo: [{
|
|
419
|
+
], template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <div role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\" role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:rgba(103,80,164,.12)}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree__node-group-acronym{color:#63666a}.ieeesa-tree__node-group-desc{color:#4a4d50}.ieeesa-tree__node{background:#f4f8fe;padding:.75em 1.5em .75em 1.125em}.ieeesa-tree__root-node-white-bg{background:#ffffff;box-shadow:0 1px #00b5e2 inset,6px 0 #379dfc inset}.ieeesa-tree__collapse-icon{min-width:3.5em}\n"] }]
|
|
420
|
+
}], ctorParameters: function () { return [{ type: Groups }, { type: i0.ElementRef }]; }, propDecorators: { parentGroupsInfo: [{
|
|
401
421
|
type: Input
|
|
402
422
|
}], childGroupsInfo: [{
|
|
403
423
|
type: Input
|
|
@@ -414,4 +434,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImpor
|
|
|
414
434
|
}], deleteGroupClick: [{
|
|
415
435
|
type: Output
|
|
416
436
|
}] } });
|
|
417
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGFBQWEsRUFFYixtQkFBbUIsR0FFcEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBc0IsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUczRTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFDcEI7SUFDRSwwQ0FBMEM7SUFDbkMsSUFBZTtJQUN0QiwwQ0FBMEM7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WSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzdELENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxXQUFXLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyRSxDQUFDO0lBQ0osQ0FBQztJQUNEOzs7Ozs7T0FNRztJQUNILFNBQVMsQ0FBQyxLQUFhLEVBQUUsVUFBc0I7UUFDN0MsT0FBTyxVQUFVLENBQUMsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7OEdBbE5VLGlCQUFpQjtrR0FBakIsaUJBQWlCLG9hQzlPOUIsaTFJQTRIQSxncE1Ed0dJLFlBQVkseWxCQUNaLGFBQWEsZ2hCQUNiLGFBQWEsOEJBQ2IsZUFBZSwrQkFDZixhQUFhLDJHQUNiLG1CQUFtQjs7MkZBS1YsaUJBQWlCO2tCQWQ3QixTQUFTOytCQUNFLGFBQWEsY0FDWCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixhQUFhO3dCQUNiLG1CQUFtQjtxQkFDcEI7MEZBdUJHLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFVRixlQUFlO3NCQURsQixLQUFLO2dCQVVGLDJCQUEyQjtzQkFEOUIsS0FBSztnQkFTRixrQkFBa0I7c0JBRHJCLEtBQUs7Z0JBU0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3RhYmxlLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgTWVudUNvbXBvbmVudCxcclxuICBNZW51LFxyXG4gIEljb25CdXR0b25Db21wb25lbnQsXHJcbiAgSWNvbkJ1dHRvbixcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgR3JvdXBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDb2xsZWN0aW9uVmlld2VyLFxyXG4gIFNlbGVjdGlvbkNoYW5nZSxcclxuICBEYXRhU291cmNlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRUcmVlTW9kdWxlLCBNYXRUcmVlTm9kZVBhZGRpbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgR3JvdXBJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLWluZm8ubW9kZWwnO1xyXG5cclxuLyoqXHJcbiAqIER5bmFtaWMgRmxhdCBub2RlIGNyZWF0ZXMgYSBub2RlIHN0cnVjdHVyZVxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBHcm91cE5vZGVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBHcm91cE5vZGUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgaXRlbTogR3JvdXBJbmZvLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgbGV2ZWwgPSAxLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZXhwYW5kYWJsZSA9IGZhbHNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2UgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG59XHJcblxyXG4vKipcclxuICogR3JvdXBzIHN0b3JlcyB0aGUgcGFyZW50IG5vZGVzIGFuZCBjaGlsZCBub2Rlc1xyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBHcm91cHNcclxuICovXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBHcm91cHMge1xyXG4gIHJvb3RMZXZlbE5vZGVzITogR3JvdXBJbmZvW107XHJcbiAgLyoqIEluaXRpYWwgZGF0YSBmcm9tIGRhdGFiYXNlICovXHJcbiAgcHJpdmF0ZSBjaGlsZEdyb3VwcyE6IEdyb3VwSW5mb1tdO1xyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgQ2hpbGQgZ3JvdXBzIGluZm9cclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwSW5mb1tdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNcclxuICAgKi9cclxuICBnZXRDaGlsZEdyb3Vwc0luZm8oKTogR3JvdXBJbmZvW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRHcm91cHM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIENoaWxkIGdyb3VwcyBpbmZvXHJcbiAgICogQHBhcmFtIHtHcm91cEluZm9bXX0gdmFsdWVcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgc2V0Q2hpbGRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGlsZEdyb3VwcyA9IHZhbHVlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBncm91cHMgZGF0YSBhbmQgY3JlYXRlcyB0aGUgbm9kZSBzdHJ1Y3R1cmUgZm9yIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtHcm91cEluZm9bXX0gZGF0YVxyXG4gICAqIEByZXR1cm4geyp9ICB7R3JvdXBOb2RlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIGluaXRpYWxEYXRhKGRhdGE6IEdyb3VwSW5mb1tdKTogR3JvdXBOb2RlW10ge1xyXG4gICAgdGhpcy5yb290TGV2ZWxOb2RlcyA9IGRhdGE7XHJcbiAgICByZXR1cm4gdGhpcy5yb290TGV2ZWxOb2Rlcy5tYXAoXHJcbiAgICAgIChub2RlKSA9PiBuZXcgR3JvdXBOb2RlKG5vZGUsIDAsIHRoaXMuaXNFeHBhbmRhYmxlKG5vZGUpKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHRoZSBub2RlIGlzIGV4cGFuZGFibGUgb3Igbm90XHJcbiAgICogQHBhcmFtIHtHcm91cEluZm99IG5vZGVcclxuICAgKiBAcmV0dXJuIHsqfSAge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIGlzRXhwYW5kYWJsZShub2RlOiBHcm91cEluZm8pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoISFub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHwgbm9kZS5oYXNDaGlsZHJlbjtcclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIER5bmFtaWMgRGF0YSBTb3VyY2UgaGFuZGxlcyB0aGUgY29ubmVjdGlvbiB3aXRoIGR5bmFtaWMgZGF0YSBiYXNlXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIEdyb3Vwc0RhdGFTb3VyY2VcclxuICogQGltcGxlbWVudHMge0RhdGFTb3VyY2U8R3JvdXBOb2RlPn1cclxuICovXHJcbmV4cG9ydCBjbGFzcyBHcm91cHNEYXRhU291cmNlIGltcGxlbWVudHMgRGF0YVNvdXJjZTxHcm91cE5vZGU+IHtcclxuICBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgZGF0YUNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R3JvdXBOb2RlW10+KFtdKTtcclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB1cGRhdGVkIHRyZWUgY29udHJvbCBkYXRhXHJcbiAgICogQHR5cGUge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgZ2V0IGRhdGEoKTogR3JvdXBOb2RlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YUNoYW5nZS52YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YSB0byB0cmVlIGNvbnRyb2wgYW5kIGVtaXQgdGhlIHZhbHVlIHRvIGludGltYXRlIHRoZSBkYXRhIGNoYW5nZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgc2V0IGRhdGEodmFsdWU6IEdyb3VwTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+LFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRhdGFiYXNlOiBHcm91cHMgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGRhdGEgYmFzZSBhbmQgbWF0IHRyZWVcclxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25WaWV3ZXJ9IGNvbGxlY3Rpb25WaWV3ZXJcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R3JvdXBOb2RlW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxHcm91cE5vZGVbXT4ge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbC5leHBhbnNpb25Nb2RlbC5jaGFuZ2VkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPikuYWRkZWQgfHxcclxuICAgICAgICAgIChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pLnJlbW92ZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlVHJlZUNvbnRyb2woY2hhbmdlIGFzIFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtZXJnZShjb2xsZWN0aW9uVmlld2VyLnZpZXdDaGFuZ2UsIHRoaXMuZGF0YUNoYW5nZSkucGlwZShcclxuICAgICAgbWFwKCgpID0+IHRoaXMuZGF0YSlcclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIERpc2Nvbm5lY3QgdGhlIGNvbm5lY3Rpb24gd2l0aCBtYXQgdHJlZVxyXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvblZpZXdlcn0gY29sbGVjdGlvblZpZXdlclxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiwgbm8tZW1wdHktZnVuY3Rpb24sIG5vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICBkaXNjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMvcmVtb3ZlcyB0aGUgY2hpbGQgbm9kZXMgd2hpbGUgZXhwYW5kcy9jb2xsYXBzZXMgdGhlIHBhcmVudCBub2RlXHJcbiAgICogQHBhcmFtIHtTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPn0gY2hhbmdlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICBoYW5kbGVUcmVlQ29udHJvbChjaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KSB7XHJcbiAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XHJcbiAgICAgIGNoYW5nZS5hZGRlZC5mb3JFYWNoKChub2RlKSA9PiB0aGlzLnRvZ2dsZU5vZGUobm9kZSwgdHJ1ZSkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XHJcbiAgICAgIGNoYW5nZS5yZW1vdmVkXHJcbiAgICAgICAgLnNsaWNlKClcclxuICAgICAgICAucmV2ZXJzZSgpXHJcbiAgICAgICAgLmZvckVhY2goKG5vZGUpID0+IHRoaXMudG9nZ2xlTm9kZShub2RlLCBmYWxzZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIHRoZSBub2RlLCBhZGQvcmVtb3ZlcyB0aGUgbm9kZSBmcm9tIGRpc3BsYXlcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gY2xpY2tlZE5vZGVcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4cGFuZFxyXG4gICAqIEByZXR1cm4geyp9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICB0b2dnbGVOb2RlKGNsaWNrZWROb2RlOiBHcm91cE5vZGUsIGV4cGFuZDogYm9vbGVhbikge1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmRhdGFiYXNlLmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGEuaW5kZXhPZihjbGlja2VkTm9kZSk7XHJcbiAgICBpZiAoIWNoaWxkcmVuIHx8IGluZGV4IDwgMCkge1xyXG4gICAgICAvLyBJZiBubyBjaGlsZHJlbiwgb3IgY2Fubm90IGZpbmQgdGhlIG5vZGUsIG5vIG9wXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXhwYW5kKSB7XHJcbiAgICAgIGNvbnN0IG5vZGVzID0gY2hpbGRyZW4ubWFwKFxyXG4gICAgICAgIChub2RlKSA9PlxyXG4gICAgICAgICAgbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgY2xpY2tlZE5vZGUubGV2ZWwgKyAxLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlLmlzRXhwYW5kYWJsZShub2RlKVxyXG4gICAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRhdGEuc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4ubm9kZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgZm9yIChcclxuICAgICAgICBsZXQgaSA9IGluZGV4ICsgMTtcclxuICAgICAgICBpIDwgdGhpcy5kYXRhLmxlbmd0aCAmJiB0aGlzLmRhdGFbaV0ubGV2ZWwgPiBjbGlja2VkTm9kZS5sZXZlbDtcclxuICAgICAgICBpKyssIGNvdW50KysgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XHJcbiAgICAgICkge31cclxuICAgICAgdGhpcy5kYXRhLnNwbGljZShpbmRleCArIDEsIGNvdW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3RpZnkgdGhlIGNoYW5nZVxyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodGhpcy5kYXRhKTtcclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIERpc3BsYXlzIHRoZSBncm91cHMgd2hlcmUgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcHMgYXJlIHJlcHJlc2VudGVkIGluIGEgdHJlZSB2aWV3L2hpZXJhcmNoeS5cclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgVHJlZVZpZXdDb21wb25lbnRcclxuICogQGltcGxlbWVudHMge09uSW5pdH1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLXRyZWUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWF0VHJlZU1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNZW51Q29tcG9uZW50LFxyXG4gICAgSWNvbkJ1dHRvbkNvbXBvbmVudCxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RyZWUtdmlldy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29uc3RhbnRzOiBhbnkgPSBjb25zdGFudHM7XHJcbiAgYnV0dG9uczogTWVudVtdID0gdGhpcy5jb25zdGFudHM/LnZpZXdHcm91cHM/LmJ1dHRvbnM7XHJcbiAgdHJlZVBhZGRpbmdJbmRlbnQ6IG51bWJlciA9IHRoaXMuY29uc3RhbnRzPy52aWV3R3JvdXBzPy50cmVlUGFkZGluZ0luZGVudDtcclxuICBzZWxlY3RlZEdyb3VwITogR3JvdXBOb2RlO1xyXG4gIHNlbGVjdGVkR3JvdXBBY3Rpb24hOiBNZW51IHwgSWNvbkJ1dHRvbjtcclxuICB0cmVlQ29udHJvbCE6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+O1xyXG4gIGRhdGFTb3VyY2UhOiBHcm91cHNEYXRhU291cmNlO1xyXG4gIG1hdFRyZWVOb2RlUGFkZGluZyE6IE1hdFRyZWVOb2RlUGFkZGluZzxHcm91cE5vZGU+O1xyXG4gIHBsdXNDaXJjbGVJY29uQnV0dG9uOiBJY29uQnV0dG9uID0gdGhpcy5idXR0b25zWzRdO1xyXG4gIG1pbnVzQ2lyY2xlSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHRoaXMuYnV0dG9uc1s1XTtcclxuICBtZW51SXRlbXM6IE1lbnVbXSA9IHRoaXMuYnV0dG9ucy5maWx0ZXIoXHJcbiAgICAoZSkgPT5cclxuICAgICAgZS5pZCAhPT0gR3JvdXBBY3Rpb24uRVhQQU5EX0dST1VQX1ZJRVcgJiZcclxuICAgICAgZS5pZCAhPT0gR3JvdXBBY3Rpb24uQ09MTEFQU0VfR1JPVVBfVklFV1xyXG4gICk7XHJcbiAgcHJpdmF0ZSBwYXJlbnRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBwYXJlbnRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSkge1xyXG4gICAgdGhpcy5wYXJlbnRHcm91cHMgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSkgdGhpcy5zZXRHcm91cERhdGFTb3VyY2UoKTtcclxuICB9XHJcbiAgZ2V0IHBhcmVudEdyb3Vwc0luZm8oKTogR3JvdXBJbmZvW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50R3JvdXBzO1xyXG4gIH1cclxuICBwcml2YXRlIGNoaWxkR3JvdXBzITogR3JvdXBJbmZvW107XHJcbiAgQElucHV0KClcclxuICBzZXQgY2hpbGRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSkge1xyXG4gICAgdGhpcy5jaGlsZEdyb3VwcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5sb2FkQ2hpbGRHcm91cHMoKTtcclxuICB9XHJcbiAgZ2V0IGNoaWxkR3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGlsZEdyb3VwcztcclxuICB9XHJcbiAgcHJpdmF0ZSBpc0dyb3VwU2VhcmNoT3JGaWx0ZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNHcm91cFNlYXJjaE9yRmlsdGVyID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXI7XHJcbiAgfVxyXG4gIHByaXZhdGUgZGVsZXRlZEdyb3VwSWQhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KClcclxuICBzZXQgZGVsZXRlZEdyb3VwSWRJbmZvKGlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGVsZXRlZEdyb3VwSWQgPSBpZDtcclxuICAgIHRoaXMuZGVsZXRlR3JvdXBOb2RlKHRoaXMuZGVsZXRlZEdyb3VwSWQpO1xyXG4gIH1cclxuICBnZXQgZGVsZXRlZEdyb3VwSWRJbmZvKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWxldGVkR3JvdXBJZDtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSB0b2dnbGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgZWRpdEdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlR3JvdXBDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R3JvdXBJbmZvPigpO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tZW1wdHktZnVuY3Rpb25cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YWJhc2U6IEdyb3Vwcykge31cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB0aGUgdHJlZSB2aWV3IGNvbXBvbmVudFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRHcm91cERhdGFTb3VyY2UoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbGV2ZWwgb2YgdGhlIG5vZGVcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldExldmVsID0gKG5vZGU6IEdyb3VwTm9kZSkgPT4gbm9kZS5sZXZlbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHRoZSBub2RlIGlzIGV4cGFuZGFibGUgb3Igbm90XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IG5vZGVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBpc0V4cGFuZGFibGUgPSAobm9kZTogR3JvdXBOb2RlKSA9PiBub2RlLmV4cGFuZGFibGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBwYXNzZWQgbm9kZSBoYXMgY2hpbGRyZW4gb3RoZXJ3aXNlIGZhbHNlXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IG5vZGVcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGhhc0NoaWxkR3JvdXBzID0gKGluZGV4OiBudW1iZXIsIF9ub2RlRGF0YTogR3JvdXBOb2RlKSA9PlxyXG4gICAgX25vZGVEYXRhLmV4cGFuZGFibGU7XHJcbiAgLyoqXHJcbiAgICogRW1pdHMgdGhlIGdyb3VwIGluZm8gd2hlbiB0aGUgdG9nZ2xlIGdyb3VwIGlzIGNsaWNrZWQgb3IgdG9nZ2xlcyB0aGUgZ3JvdXAgdmlld1xyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBncm91cFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHZpZXdDaGlsZEdyb3Vwcyhub2RlOiBHcm91cE5vZGUpIHtcclxuICAgIGlmICghbm9kZS5pdGVtLmhhc0NoaWxkcmVuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkpIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbC50b2dnbGUobm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvZ2dsZUdyb3VwQ2xpY2suZW1pdChub2RlLml0ZW0pO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBub2RlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBib3ggc2hhZG93IGJhc2VkIG9uIHRoZSBncm91cCB0eXBlIGxlZ2VuZCBjb2xvclxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gICAqIEByZXR1cm4geyp9XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBnZXRCb3hTaGFkb3coY29sb3I6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBib3hTaGFkb3c6XHJcbiAgICAgICAgJzBweCAxcHggMHB4IDBweCAjYzljYmQwIGluc2V0LCA2cHggMHB4IDBweCAwcHggJyArIGNvbG9yICsgJyBpbnNldCcsXHJcbiAgICB9O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBkYXRhU291cmNlIHdpdGggcGFyZW50IGdyb3VwcyBkYXRhXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgc2V0R3JvdXBEYXRhU291cmNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8R3JvdXBOb2RlPihcclxuICAgICAgdGhpcy5nZXRMZXZlbCxcclxuICAgICAgdGhpcy5pc0V4cGFuZGFibGVcclxuICAgICk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgR3JvdXBzRGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLmRhdGFiYXNlKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhYmFzZS5pbml0aWFsRGF0YSh0aGlzLnBhcmVudEdyb3Vwc0luZm8pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBMb2FkcyB0aGUgY2hpbGQgZ3JvdXBzIGFuZCB1cGRhdGVzIHRoZSB0cmVlIHZpZXcuXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbG9hZENoaWxkR3JvdXBzKCkge1xyXG4gICAgdGhpcy5kYXRhYmFzZS5zZXRDaGlsZEdyb3Vwc0luZm8odGhpcy5jaGlsZEdyb3Vwc0luZm8pO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cCkgdGhpcy50cmVlQ29udHJvbC50b2dnbGUodGhpcy5zZWxlY3RlZEdyb3VwKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyB0aGUgc2VsZWN0ZWQgZ3JvdXAgYW5kIHVwZGF0ZXMgdGhlIHRyZWUgdmlldy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVsZXRlZEdyb3VwSWRcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBkZWxldGVHcm91cE5vZGUoZGVsZXRlZEdyb3VwSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2wgJiYgZGVsZXRlZEdyb3VwSWQpIHtcclxuICAgICAgY29uc3QgZ3JvdXBEYXRhU291cmNlOiBHcm91cE5vZGVbXSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcihcclxuICAgICAgICAoZSkgPT4gZS5pdGVtLmdyb3VwSWQgIT09IGRlbGV0ZWRHcm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBEYXRhU291cmNlO1xyXG4gICAgICB0aGlzLmRlbGV0ZWRHcm91cElkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgbWVudSBncm91cCBhY3Rpb25cclxuICAgKiBAcGFyYW0ge01lbnV9IG1lbnVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBvbkdyb3VwQWN0aW9uc0NsaWNrKG1lbnU6IE1lbnUgfCBJY29uQnV0dG9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24gPSBtZW51O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIHRoZSBleHBhbmQvY29sbGFwc2UgaWNvbiBiYXNlZCBvbiB0aGUgdG9nZ2xlXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7Kn0gIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFRvZ2dsZUJ1dHRvbkluZm8oZ3JvdXA6IEdyb3VwTm9kZSk6IEljb25CdXR0b24ge1xyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChncm91cCkpIHJldHVybiB0aGlzLm1pbnVzQ2lyY2xlSWNvbkJ1dHRvbjtcclxuICAgIHJldHVybiB0aGlzLnBsdXNDaXJjbGVJY29uQnV0dG9uO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBlbWl0dGVkIGdyb3VwIGFjdGlvbnMgZXZlbnRcclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb30gZ3JvdXBcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBoYW5kbGVHcm91cEFjdGlvbnMoZ3JvdXA6IEdyb3VwTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLlZJRVdfUk9TVEVSKSB7XHJcbiAgICAgIHRoaXMudmlld0NoaWxkR3JvdXBzKGdyb3VwKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uQ1JFQVRFX1NVQl9HUk9VUCkge1xyXG4gICAgICB0aGlzLmNyZWF0ZUdyb3VwQ2xpY2suZW1pdChncm91cC5pdGVtKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uRURJVF9HUk9VUCkge1xyXG4gICAgICB0aGlzLmVkaXRHcm91cENsaWNrLmVtaXQoZ3JvdXAuaXRlbSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLkRFTEVURV9HUk9VUCkge1xyXG4gICAgICB0aGlzLmRlbGV0ZUdyb3VwQ2xpY2suZW1pdChncm91cC5pdGVtKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZmlsdGVyZWQgbWVudSBpdGVtcyBiYXNlZCBvbiBncm91cHMgaGFzQ2hpbGRyZW4uXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7TWVudVtdfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKGdyb3VwOiBHcm91cE5vZGUpOiBNZW51W10ge1xyXG4gICAgdGhpcy5tZW51SXRlbXMuZm9yRWFjaCgoZSkgPT4gKGUuaXNUb29sVGlwTmVlZGVkID0gZmFsc2UpKTtcclxuICAgIHJldHVybiB0aGlzLm1lbnVJdGVtcy5maWx0ZXIoXHJcbiAgICAgIChlKSA9PlxyXG4gICAgICAgIChlLmlkICE9PSBHcm91cEFjdGlvbi5ERUxFVEVfR1JPVVAgJiYgZ3JvdXAuaXRlbS5oYXNDaGlsZHJlbikgfHxcclxuICAgICAgICAoZS5pZCAhPT0gR3JvdXBBY3Rpb24uQ1JFQVRFX1NVQl9HUk9VUCAmJiAhZ3JvdXAuaXRlbS5oYXNDaGlsZHJlbilcclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRha2VzIHRoZSBpbmRleCBhbmQgdGhlIGljb24gYnV0dG9uIGFzIGFyZ3VtZW50cyBhbmQgbmVlZHMgdG8gcmV0dXJuIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBpY29uIGJ1dHRvbi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0ljb25CdXR0b259IGljb25CdXR0b25cclxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGljb25CdXR0b246IEljb25CdXR0b24pOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGljb25CdXR0b24uaWQ7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpZWVlc2EtdHJlZVwiPlxyXG4gIDxtYXQtdHJlZVxyXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIlxyXG4gICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fcm9vdFwiXHJcbiAgICAjcm9vdFNlbGVjdG9yXHJcbiAgPlxyXG4gICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIlxyXG4gICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgW21hdFRyZWVOb2RlUGFkZGluZ0luZGVudF09XCJ0cmVlUGFkZGluZ0luZGVudFwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlIHctMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMyBteS0wXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRCb3hTaGFkb3cobm9kZS5pdGVtLmdyb3VwVHlwZUluZm8ubGVnZW5kQ29sb3IpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTNcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgIWlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSA/ICdpZWVlc2EtdHJlZV9fY29sbGFwc2UtaWNvbicgOiAnJ1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICBpZWVlc2FHcm91cEluZm9PdXRsZXQ7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxpZWVlc2EtbWVudVxyXG4gICAgICAgICAgW21lbnVJdGVtc109XCJnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhub2RlKVwiXHJcbiAgICAgICAgICAobWVudUl0ZW1DbGljayk9XCJcclxuICAgICAgICAgICAgb25Hcm91cEFjdGlvbnNDbGljaygkZXZlbnQpOyBoYW5kbGVHcm91cEFjdGlvbnMobm9kZSlcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBjbGFzcz1cImQtbGctbm9uZSBkLW1kLW5vbmUgZC1zbS1ub25lXCJcclxuICAgICAgICA+PC9pZWVlc2EtbWVudT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGdhcC0zIGQtc20tZmxleCBkLW1kLWZsZXggZC1sZy1mbGV4XCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgaWVlZXNhR3JvdXBBY3Rpb25zT3V0bGV0O1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlOyB3aGVuOiBoYXNDaGlsZEdyb3Vwc1wiXHJcbiAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICBbbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50XT1cInRyZWVQYWRkaW5nSW5kZW50XCJcclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgdHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKVxyXG4gICAgICAgICAgICA/ICdpZWVlc2EtdHJlZV9fcm9vdC1ub2RlLXdoaXRlLWJnJ1xyXG4gICAgICAgICAgICA6ICdpZWVlc2EtdHJlZV9fcm9vdC1ub2RlJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZSB3LTEwMCBkLWZsZXggbXktMCBnYXAtM1wiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Qm94U2hhZG93KG5vZGUuaXRlbS5ncm91cFR5cGVJbmZvLmxlZ2VuZENvbG9yKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cIiFpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmVcIlxyXG4gICAgICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cInZpZXdDaGlsZEdyb3Vwcyhub2RlKVwiXHJcbiAgICAgICAgICAgIFtpY29uQnV0dG9uXT1cImdldFRvZ2dsZUJ1dHRvbkluZm8obm9kZSlcIlxyXG4gICAgICAgICAgPjwvaWVlZXNhLWljb24tYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIGllZWVzYUdyb3VwSW5mb091dGxldDtcclxuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBkLW5vbmUgZ2FwLTMgZC1zbS1mbGV4IGQtbWQtZmxleCBkLWxnLWZsZXhcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICBpZWVlc2FHcm91cEFjdGlvbnNPdXRsZXQ7XHJcbiAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGllZWVzYS1tZW51XHJcbiAgICAgICAgICBbbWVudUl0ZW1zXT1cImdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKG5vZGUpXCJcclxuICAgICAgICAgIChtZW51SXRlbUNsaWNrKT1cIlxyXG4gICAgICAgICAgICBvbkdyb3VwQWN0aW9uc0NsaWNrKCRldmVudCk7IGhhbmRsZUdyb3VwQWN0aW9ucyhub2RlKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIGNsYXNzPVwiZC1sZy1ub25lIGQtbWQtbm9uZSBkLXNtLW5vbmVcIlxyXG4gICAgICAgID48L2llZWVzYS1tZW51PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBJbmZvT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ncm91cC1pbmZvIGQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LXNtLXJvdyBmbGV4LW1kLXJvdyBmbGV4LWxnLXJvdyBhbGlnbi1pdGVtcy1zdGFydCBhbGlnbi1pdGVtcy1zbS1iYXNlbGluZSBhbGlnbi1pdGVtcy1tZC1iYXNlbGluZSBhbGlnbi1pdGVtcy1sZy1iYXNlbGluZSBnYXAtMiBtYi0xXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlLWdyb3VwLW5hbWUgaWVlZXNhLWhlYWRsaW5lLXNtLTI2XCI+XHJcbiAgICAgICAgICAgIHt7IG5vZGUuaXRlbS5ncm91cE5hbWUgfX1cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIDxwIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUtZ3JvdXAtYWNyb255bSBpZWVlc2EtdGl0bGUtbGctMjRcIj5cclxuICAgICAgICAgICAge3sgbm9kZS5pdGVtLmdyb3VwQWNyb255bSB9fVxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtYm9keS1tZC0xNiBpZWVlc2EtdHJlZV9fbm9kZS1ncm91cC1kZXNjXCI+XHJcbiAgICAgICAgICB7eyBub2RlLml0ZW0uZ3JvdXBUeXBlSW5mby5uYW1lIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBBY3Rpb25zT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0RmlsdGVyZWRHcm91cEFjdGlvbnMobm9kZSk7IHRyYWNrQnk6IHRyYWNrQnlGblwiXHJcbiAgICAgICAgW2ljb25CdXR0b25dPVwiaXRlbVwiXHJcbiAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJcclxuICAgICAgICAgIG9uR3JvdXBBY3Rpb25zQ2xpY2soJGV2ZW50KTsgaGFuZGxlR3JvdXBBY3Rpb25zKG5vZGUpXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICA8L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9tYXQtdHJlZT5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
437
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEdBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGFBQWEsRUFFYixtQkFBbUIsR0FFcEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBc0IsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUczRTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFDcEI7SUFDRSwwQ0FBMEM7SUFDbkMsSUFBZTtJQUN0QiwwQ0FBMEM7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QkFkN0IsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixtQkFBbUI7cUJBQ3BCO21IQXdCRyxnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBVUYsZUFBZTtzQkFEbEIsS0FBSztnQkFVRiwyQkFBMkI7c0JBRDlCLEtBQUs7Z0JBU0Ysa0JBQWtCO3NCQURyQixLQUFLO2dCQVNJLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3RhYmxlLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgTWVudUNvbXBvbmVudCxcclxuICBNZW51LFxyXG4gIEljb25CdXR0b25Db21wb25lbnQsXHJcbiAgSWNvbkJ1dHRvbixcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgR3JvdXBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDb2xsZWN0aW9uVmlld2VyLFxyXG4gIFNlbGVjdGlvbkNoYW5nZSxcclxuICBEYXRhU291cmNlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRUcmVlTW9kdWxlLCBNYXRUcmVlTm9kZVBhZGRpbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgR3JvdXBJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLWluZm8ubW9kZWwnO1xyXG5cclxuLyoqXHJcbiAqIER5bmFtaWMgRmxhdCBub2RlIGNyZWF0ZXMgYSBub2RlIHN0cnVjdHVyZVxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBHcm91cE5vZGVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBHcm91cE5vZGUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgaXRlbTogR3JvdXBJbmZvLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgbGV2ZWwgPSAxLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZXhwYW5kYWJsZSA9IGZhbHNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2UgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG59XHJcblxyXG4vKipcclxuICogR3JvdXBzIHN0b3JlcyB0aGUgcGFyZW50IG5vZGVzIGFuZCBjaGlsZCBub2Rlc1xyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBHcm91cHNcclxuICovXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBHcm91cHMge1xyXG4gIHJvb3RMZXZlbE5vZGVzITogR3JvdXBJbmZvW107XHJcbiAgLyoqIEluaXRpYWwgZGF0YSBmcm9tIGRhdGFiYXNlICovXHJcbiAgcHJpdmF0ZSBjaGlsZEdyb3VwcyE6IEdyb3VwSW5mb1tdO1xyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgQ2hpbGQgZ3JvdXBzIGluZm9cclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwSW5mb1tdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNcclxuICAgKi9cclxuICBnZXRDaGlsZEdyb3Vwc0luZm8oKTogR3JvdXBJbmZvW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRHcm91cHM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIENoaWxkIGdyb3VwcyBpbmZvXHJcbiAgICogQHBhcmFtIHtHcm91cEluZm9bXX0gdmFsdWVcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgc2V0Q2hpbGRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGlsZEdyb3VwcyA9IHZhbHVlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBncm91cHMgZGF0YSBhbmQgY3JlYXRlcyB0aGUgbm9kZSBzdHJ1Y3R1cmUgZm9yIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtHcm91cEluZm9bXX0gZGF0YVxyXG4gICAqIEByZXR1cm4geyp9ICB7R3JvdXBOb2RlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIGluaXRpYWxEYXRhKGRhdGE6IEdyb3VwSW5mb1tdKTogR3JvdXBOb2RlW10ge1xyXG4gICAgdGhpcy5yb290TGV2ZWxOb2RlcyA9IGRhdGE7XHJcbiAgICByZXR1cm4gdGhpcy5yb290TGV2ZWxOb2Rlcy5tYXAoXHJcbiAgICAgIChub2RlKSA9PiBuZXcgR3JvdXBOb2RlKG5vZGUsIDAsIHRoaXMuaXNFeHBhbmRhYmxlKG5vZGUpKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHRoZSBub2RlIGlzIGV4cGFuZGFibGUgb3Igbm90XHJcbiAgICogQHBhcmFtIHtHcm91cEluZm99IG5vZGVcclxuICAgKiBAcmV0dXJuIHsqfSAge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIGlzRXhwYW5kYWJsZShub2RlOiBHcm91cEluZm8pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoISFub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHwgbm9kZS5oYXNDaGlsZHJlbjtcclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIER5bmFtaWMgRGF0YSBTb3VyY2UgaGFuZGxlcyB0aGUgY29ubmVjdGlvbiB3aXRoIGR5bmFtaWMgZGF0YSBiYXNlXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIEdyb3Vwc0RhdGFTb3VyY2VcclxuICogQGltcGxlbWVudHMge0RhdGFTb3VyY2U8R3JvdXBOb2RlPn1cclxuICovXHJcbmV4cG9ydCBjbGFzcyBHcm91cHNEYXRhU291cmNlIGltcGxlbWVudHMgRGF0YVNvdXJjZTxHcm91cE5vZGU+IHtcclxuICBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgZGF0YUNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R3JvdXBOb2RlW10+KFtdKTtcclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB1cGRhdGVkIHRyZWUgY29udHJvbCBkYXRhXHJcbiAgICogQHR5cGUge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgZ2V0IGRhdGEoKTogR3JvdXBOb2RlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YUNoYW5nZS52YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YSB0byB0cmVlIGNvbnRyb2wgYW5kIGVtaXQgdGhlIHZhbHVlIHRvIGludGltYXRlIHRoZSBkYXRhIGNoYW5nZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgc2V0IGRhdGEodmFsdWU6IEdyb3VwTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+LFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRhdGFiYXNlOiBHcm91cHMgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGRhdGEgYmFzZSBhbmQgbWF0IHRyZWVcclxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25WaWV3ZXJ9IGNvbGxlY3Rpb25WaWV3ZXJcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R3JvdXBOb2RlW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxHcm91cE5vZGVbXT4ge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbC5leHBhbnNpb25Nb2RlbC5jaGFuZ2VkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPikuYWRkZWQgfHxcclxuICAgICAgICAgIChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pLnJlbW92ZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlVHJlZUNvbnRyb2woY2hhbmdlIGFzIFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIG1lcmdlKGNvbGxlY3Rpb25WaWV3ZXIudmlld0NoYW5nZSwgdGhpcy5kYXRhQ2hhbmdlKS5waXBlKFxyXG4gICAgICBtYXAoKCkgPT4gdGhpcy5kYXRhKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGlzY29ubmVjdCB0aGUgY29ubmVjdGlvbiB3aXRoIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVmlld2VyfSBjb2xsZWN0aW9uVmlld2VyXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcy9yZW1vdmVzIHRoZSBjaGlsZCBub2RlcyB3aGlsZSBleHBhbmRzL2NvbGxhcHNlcyB0aGUgcGFyZW50IG5vZGVcclxuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+fSBjaGFuZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIGhhbmRsZVRyZWVDb250cm9sKGNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pIHtcclxuICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcclxuICAgICAgY2hhbmdlLmFkZGVkLmZvckVhY2goKG5vZGUpID0+IHRoaXMudG9nZ2xlTm9kZShub2RlLCB0cnVlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcclxuICAgICAgY2hhbmdlLnJlbW92ZWRcclxuICAgICAgICAuc2xpY2UoKVxyXG4gICAgICAgIC5yZXZlcnNlKClcclxuICAgICAgICAuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIG5vZGUsIGFkZC9yZW1vdmVzIHRoZSBub2RlIGZyb20gZGlzcGxheVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBjbGlja2VkTm9kZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwYW5kXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHRvZ2dsZU5vZGUoY2xpY2tlZE5vZGU6IEdyb3VwTm9kZSwgZXhwYW5kOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZGF0YWJhc2UuZ2V0Q2hpbGRHcm91cHNJbmZvKCk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZGF0YS5pbmRleE9mKGNsaWNrZWROb2RlKTtcclxuICAgIGlmICghY2hpbGRyZW4gfHwgaW5kZXggPCAwKSB7XHJcbiAgICAgIC8vIElmIG5vIGNoaWxkcmVuLCBvciBjYW5ub3QgZmluZCB0aGUgbm9kZSwgbm8gb3BcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHBhbmQpIHtcclxuICAgICAgY29uc3Qgbm9kZXMgPSBjaGlsZHJlbi5tYXAoXHJcbiAgICAgICAgKG5vZGUpID0+XHJcbiAgICAgICAgICBuZXcgR3JvdXBOb2RlKFxyXG4gICAgICAgICAgICBub2RlLFxyXG4gICAgICAgICAgICBjbGlja2VkTm9kZS5sZXZlbCArIDEsXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2UuaXNFeHBhbmRhYmxlKG5vZGUpXHJcbiAgICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YS5zcGxpY2UoaW5kZXggKyAxLCAwLCAuLi5ub2Rlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgY291bnQgPSAwO1xyXG4gICAgICBmb3IgKFxyXG4gICAgICAgIGxldCBpID0gaW5kZXggKyAxO1xyXG4gICAgICAgIGkgPCB0aGlzLmRhdGEubGVuZ3RoICYmIHRoaXMuZGF0YVtpXS5sZXZlbCA+IGNsaWNrZWROb2RlLmxldmVsO1xyXG4gICAgICAgIGkrKywgY291bnQrKyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcclxuICAgICAgKSB7fVxyXG4gICAgICB0aGlzLmRhdGEuc3BsaWNlKGluZGV4ICsgMSwgY291bnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vdGlmeSB0aGUgY2hhbmdlXHJcbiAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dCh0aGlzLmRhdGEpO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRGlzcGxheXMgdGhlIGdyb3VwcyB3aGVyZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB0cmVlIHZpZXcvaGllcmFyY2h5LlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBUcmVlVmlld0NvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRUcmVlTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJlZS12aWV3LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmVlVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gY29uc3RhbnRzO1xyXG4gIGJ1dHRvbnM6IE1lbnVbXSA9IHRoaXMuY29uc3RhbnRzPy52aWV3R3JvdXBzPy5idXR0b25zO1xyXG4gIHRyZWVQYWRkaW5nSW5kZW50OiBudW1iZXIgPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3Vwcz8udHJlZVBhZGRpbmdJbmRlbnQ7XHJcbiAgc2VsZWN0ZWRHcm91cCE6IEdyb3VwTm9kZTtcclxuICBzZWxlY3RlZEdyb3VwQWN0aW9uITogTWVudSB8IEljb25CdXR0b247XHJcbiAgdHJlZUNvbnRyb2whOiBGbGF0VHJlZUNvbnRyb2w8R3JvdXBOb2RlPjtcclxuICBkYXRhU291cmNlITogR3JvdXBzRGF0YVNvdXJjZTtcclxuICBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgbWF0VHJlZU5vZGVQYWRkaW5nITogTWF0VHJlZU5vZGVQYWRkaW5nPEdyb3VwTm9kZT47XHJcbiAgcGx1c0NpcmNsZUljb25CdXR0b246IEljb25CdXR0b24gPSB0aGlzLmJ1dHRvbnNbNF07XHJcbiAgbWludXNDaXJjbGVJY29uQnV0dG9uOiBJY29uQnV0dG9uID0gdGhpcy5idXR0b25zWzVdO1xyXG4gIG1lbnVJdGVtczogTWVudVtdID0gdGhpcy5idXR0b25zLmZpbHRlcihcclxuICAgIChlKSA9PlxyXG4gICAgICBlLmlkICE9PSBHcm91cEFjdGlvbi5FWFBBTkRfR1JPVVBfVklFVyAmJlxyXG4gICAgICBlLmlkICE9PSBHcm91cEFjdGlvbi5DT0xMQVBTRV9HUk9VUF9WSUVXXHJcbiAgKTtcclxuICBwcml2YXRlIHBhcmVudEdyb3VwcyE6IEdyb3VwSW5mb1tdO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHBhcmVudEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLnBhcmVudEdyb3VwcyA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICBnZXQgcGFyZW50R3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRHcm91cHM7XHJcbiAgfVxyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBjaGlsZEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLmNoaWxkR3JvdXBzID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWRDaGlsZEdyb3VwcygpO1xyXG4gIH1cclxuICBnZXQgY2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICBwcml2YXRlIGlzR3JvdXBTZWFyY2hPckZpbHRlciA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXIgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzR3JvdXBTZWFyY2hPckZpbHRlcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBkZWxldGVkR3JvdXBJZCE6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBkZWxldGVkR3JvdXBJZEluZm8oaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IGlkO1xyXG4gICAgdGhpcy5kZWxldGVHcm91cE5vZGUodGhpcy5kZWxldGVkR3JvdXBJZCk7XHJcbiAgfVxyXG4gIGdldCBkZWxldGVkR3JvdXBJZEluZm8oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmRlbGV0ZWRHcm91cElkO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIHRvZ2dsZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgY3JlYXRlR3JvdXBDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R3JvdXBJbmZvPigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0R3JvdXBDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R3JvdXBJbmZvPigpO1xyXG4gIEBPdXRwdXQoKSBkZWxldGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby1lbXB0eS1mdW5jdGlvblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhYmFzZTogR3JvdXBzLCBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB0aGUgdHJlZSB2aWV3IGNvbXBvbmVudFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRHcm91cERhdGFTb3VyY2UoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQXNzaWduIEFSSUEgcm9sZSBmb3IgYWxsIG1hdCB0cmVlIG5vZGVzIGFzIFwicm93XCJcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgY29uc3QgdHJlZUl0ZW1Ob2RlcyA9XHJcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9dHJlZWl0ZW1dJyk7XHJcbiAgICAgIHRyZWVJdGVtTm9kZXM/LmZvckVhY2goKG5vZGU6IEhUTUxFbGVtZW50KSA9PiAobm9kZS5yb2xlID0gJ3JvdycpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBsZXZlbCBvZiB0aGUgbm9kZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBub2RlXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0TGV2ZWwgPSAobm9kZTogR3JvdXBOb2RlKSA9PiBub2RlLmxldmVsO1xyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgdGhlIG5vZGUgaXMgZXhwYW5kYWJsZSBvciBub3RcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGlzRXhwYW5kYWJsZSA9IChub2RlOiBHcm91cE5vZGUpID0+IG5vZGUuZXhwYW5kYWJsZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHBhc3NlZCBub2RlIGhhcyBjaGlsZHJlbiBvdGhlcndpc2UgZmFsc2VcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaGFzQ2hpbGRHcm91cHMgPSAoaW5kZXg6IG51bWJlciwgX25vZGVEYXRhOiBHcm91cE5vZGUpID0+XHJcbiAgICBfbm9kZURhdGEuZXhwYW5kYWJsZTtcclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgZ3JvdXAgaW5mbyB3aGVuIHRoZSB0b2dnbGUgZ3JvdXAgaXMgY2xpY2tlZCBvciB0b2dnbGVzIHRoZSBncm91cCB2aWV3XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdmlld0NoaWxkR3JvdXBzKG5vZGU6IEdyb3VwTm9kZSkge1xyXG4gICAgaWYgKCFub2RlLml0ZW0uaGFzQ2hpbGRyZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSkge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sLnRvZ2dsZShub2RlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlR3JvdXBDbGljay5lbWl0KG5vZGUuaXRlbSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IG5vZGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGJveCBzaGFkb3cgYmFzZWQgb24gdGhlIGdyb3VwIHR5cGUgbGVnZW5kIGNvbG9yXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldEJveFNoYWRvdyhjb2xvcjogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGJveFNoYWRvdzpcclxuICAgICAgICAnMHB4IDFweCAwcHggMHB4ICNjOWNiZDAgaW5zZXQsIDZweCAwcHggMHB4IDBweCAnICsgY29sb3IgKyAnIGluc2V0JyxcclxuICAgIH07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGRhdGFTb3VyY2Ugd2l0aCBwYXJlbnQgZ3JvdXBzIGRhdGFcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBzZXRHcm91cERhdGFTb3VyY2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+KFxyXG4gICAgICB0aGlzLmdldExldmVsLFxyXG4gICAgICB0aGlzLmlzRXhwYW5kYWJsZVxyXG4gICAgKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBHcm91cHNEYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMuZGF0YWJhc2UpO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGFiYXNlLmluaXRpYWxEYXRhKHRoaXMucGFyZW50R3JvdXBzSW5mbyk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIExvYWRzIHRoZSBjaGlsZCBncm91cHMgYW5kIHVwZGF0ZXMgdGhlIHRyZWUgdmlldy5cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBsb2FkQ2hpbGRHcm91cHMoKSB7XHJcbiAgICB0aGlzLmRhdGFiYXNlLnNldENoaWxkR3JvdXBzSW5mbyh0aGlzLmNoaWxkR3JvdXBzSW5mbyk7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEdyb3VwKSB0aGlzLnRyZWVDb250cm9sLnRvZ2dsZSh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIHRoZSBzZWxlY3RlZCBncm91cCBhbmQgdXBkYXRlcyB0aGUgdHJlZSB2aWV3LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZWxldGVkR3JvdXBJZFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZUdyb3VwTm9kZShkZWxldGVkR3JvdXBJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbCAmJiBkZWxldGVkR3JvdXBJZCkge1xyXG4gICAgICBjb25zdCBncm91cERhdGFTb3VyY2U6IEdyb3VwTm9kZVtdID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKFxyXG4gICAgICAgIChlKSA9PiBlLml0ZW0uZ3JvdXBJZCAhPT0gZGVsZXRlZEdyb3VwSWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBncm91cERhdGFTb3VyY2U7XHJcbiAgICAgIHRoaXMuZGVsZXRlZEdyb3VwSWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBtZW51IGdyb3VwIGFjdGlvblxyXG4gICAqIEBwYXJhbSB7TWVudX0gbWVudVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uR3JvdXBBY3Rpb25zQ2xpY2sobWVudTogTWVudSB8IEljb25CdXR0b24pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbiA9IG1lbnU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENoYW5nZXMgdGhlIGV4cGFuZC9jb2xsYXBzZSBpY29uIGJhc2VkIG9uIHRoZSB0b2dnbGVcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gZ3JvdXBcclxuICAgKiBAcmV0dXJuIHsqfSAgeyp9XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0VG9nZ2xlQnV0dG9uSW5mbyhncm91cDogR3JvdXBOb2RlKTogSWNvbkJ1dHRvbiB7XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKGdyb3VwKSkgcmV0dXJuIHRoaXMubWludXNDaXJjbGVJY29uQnV0dG9uO1xyXG4gICAgcmV0dXJuIHRoaXMucGx1c0NpcmNsZUljb25CdXR0b247XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGVtaXR0ZWQgZ3JvdXAgYWN0aW9ucyBldmVudFxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvfSBncm91cFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGhhbmRsZUdyb3VwQWN0aW9ucyhncm91cDogR3JvdXBOb2RlKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uVklFV19ST1NURVIpIHtcclxuICAgICAgdGhpcy52aWV3Q2hpbGRHcm91cHMoZ3JvdXApO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5DUkVBVEVfU1VCX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlR3JvdXBDbGljay5lbWl0KGdyb3VwLml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5FRElUX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwQ2xpY2suZW1pdChncm91cC5pdGVtKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uREVMRVRFX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuZGVsZXRlR3JvdXBDbGljay5lbWl0KGdyb3VwLml0ZW0pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBmaWx0ZXJlZCBtZW51IGl0ZW1zIGJhc2VkIG9uIGdyb3VwcyBoYXNDaGlsZHJlbi5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gZ3JvdXBcclxuICAgKiBAcmV0dXJuIHtNZW51W119XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0RmlsdGVyZWRHcm91cEFjdGlvbnMoZ3JvdXA6IEdyb3VwTm9kZSk6IE1lbnVbXSB7XHJcbiAgICB0aGlzLm1lbnVJdGVtcy5mb3JFYWNoKChlKSA9PiAoZS5pc1Rvb2xUaXBOZWVkZWQgPSBmYWxzZSkpO1xyXG4gICAgcmV0dXJuIHRoaXMubWVudUl0ZW1zLmZpbHRlcihcclxuICAgICAgKGUpID0+XHJcbiAgICAgICAgKGUuaWQgIT09IEdyb3VwQWN0aW9uLkRFTEVURV9HUk9VUCAmJiBncm91cC5pdGVtLmhhc0NoaWxkcmVuKSB8fFxyXG4gICAgICAgIChlLmlkICE9PSBHcm91cEFjdGlvbi5DUkVBVEVfU1VCX0dST1VQICYmICFncm91cC5pdGVtLmhhc0NoaWxkcmVuKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVGFrZXMgdGhlIGluZGV4IGFuZCB0aGUgaWNvbiBidXR0b24gYXMgYXJndW1lbnRzIGFuZCBuZWVkcyB0byByZXR1cm4gdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGljb24gYnV0dG9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqIEBwYXJhbSB7SWNvbkJ1dHRvbn0gaWNvbkJ1dHRvblxyXG4gICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaWNvbkJ1dHRvbjogSWNvbkJ1dHRvbik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gaWNvbkJ1dHRvbi5pZDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTmdPbkRlc3Ryb3kgcGVyZm9ybXMgbmVjZXNzYXJ5IGNsZWFudXAgdGFza3MsIHN1Y2ggYXMgdW5zdWJzY3JpYmluZyBmcm9tIHN1YnNjcmlwdGlvbiB3aGVuIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImllZWVzYS10cmVlXCI+XHJcbiAgPG1hdC10cmVlXHJcbiAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcclxuICAgIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbFwiXHJcbiAgICBjbGFzcz1cImllZWVzYS10cmVlX19yb290XCJcclxuICAgICNyb290U2VsZWN0b3JcclxuICAgIHJvbGU9XCJ0cmVlZ3JpZFwiXHJcbiAgPlxyXG4gICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIlxyXG4gICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgW21hdFRyZWVOb2RlUGFkZGluZ0luZGVudF09XCJ0cmVlUGFkZGluZ0luZGVudFwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlIHctMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMyBteS0wXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRCb3hTaGFkb3cobm9kZS5pdGVtLmdyb3VwVHlwZUluZm8ubGVnZW5kQ29sb3IpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTNcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgIWlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSA/ICdpZWVlc2EtdHJlZV9fY29sbGFwc2UtaWNvbicgOiAnJ1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiByb2xlPVwiZ3JpZGNlbGxcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICBpZWVlc2FHcm91cEluZm9PdXRsZXQ7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxpZWVlc2EtbWVudVxyXG4gICAgICAgICAgW21lbnVJdGVtc109XCJnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhub2RlKVwiXHJcbiAgICAgICAgICAobWVudUl0ZW1DbGljayk9XCJcclxuICAgICAgICAgICAgb25Hcm91cEFjdGlvbnNDbGljaygkZXZlbnQpOyBoYW5kbGVHcm91cEFjdGlvbnMobm9kZSlcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBjbGFzcz1cImQtbGctbm9uZSBkLW1kLW5vbmUgZC1zbS1ub25lXCJcclxuICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgICAgPjwvaWVlZXNhLW1lbnU+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtbm9uZSBnYXAtMyBkLXNtLWZsZXggZC1tZC1mbGV4IGQtbGctZmxleFwiIHJvbGU9XCJncmlkY2VsbFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgIGllZWVzYUdyb3VwQWN0aW9uc091dGxldDtcclxuICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRHcm91cHNcIlxyXG4gICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgW21hdFRyZWVOb2RlUGFkZGluZ0luZGVudF09XCJ0cmVlUGFkZGluZ0luZGVudFwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgIHRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSlcclxuICAgICAgICAgICAgPyAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZS13aGl0ZS1iZydcclxuICAgICAgICAgICAgOiAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZSdcclxuICAgICAgICBcIlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUgdy0xMDAgZC1mbGV4IG15LTAgZ2FwLTNcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldEJveFNoYWRvdyhub2RlLml0ZW0uZ3JvdXBUeXBlSW5mby5sZWdlbmRDb2xvcilcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiByb2xlPVwiZ3JpZGNlbGxcIj5cclxuICAgICAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCIhaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlXCJcclxuICAgICAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJ2aWV3Q2hpbGRHcm91cHMobm9kZSlcIlxyXG4gICAgICAgICAgICBbaWNvbkJ1dHRvbl09XCJnZXRUb2dnbGVCdXR0b25JbmZvKG5vZGUpXCJcclxuICAgICAgICAgID48L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBpZWVlc2FHcm91cEluZm9PdXRsZXQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGQtbm9uZSBnYXAtMyBkLXNtLWZsZXggZC1tZC1mbGV4IGQtbGctZmxleFwiXHJcbiAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICBpZWVlc2FHcm91cEFjdGlvbnNPdXRsZXQ7XHJcbiAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGllZWVzYS1tZW51XHJcbiAgICAgICAgICBbbWVudUl0ZW1zXT1cImdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKG5vZGUpXCJcclxuICAgICAgICAgIChtZW51SXRlbUNsaWNrKT1cIlxyXG4gICAgICAgICAgICBvbkdyb3VwQWN0aW9uc0NsaWNrKCRldmVudCk7IGhhbmRsZUdyb3VwQWN0aW9ucyhub2RlKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIGNsYXNzPVwiZC1sZy1ub25lIGQtbWQtbm9uZSBkLXNtLW5vbmVcIlxyXG4gICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgICA+PC9pZWVlc2EtbWVudT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwSW5mb091dGxldCBsZXQtbm9kZT5cclxuICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fZ3JvdXAtaW5mbyBkLWZsZXggZmxleC1jb2x1bW4gZmxleC1zbS1yb3cgZmxleC1tZC1yb3cgZmxleC1sZy1yb3cgYWxpZ24taXRlbXMtc3RhcnQgYWxpZ24taXRlbXMtc20tYmFzZWxpbmUgYWxpZ24taXRlbXMtbWQtYmFzZWxpbmUgYWxpZ24taXRlbXMtbGctYmFzZWxpbmUgZ2FwLTIgbWItMVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZS1ncm91cC1uYW1lIGllZWVzYS1oZWFkbGluZS1zbS0yNlwiPlxyXG4gICAgICAgICAgICB7eyBub2RlLml0ZW0uZ3JvdXBOYW1lIH19XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlLWdyb3VwLWFjcm9ueW0gaWVlZXNhLXRpdGxlLWxnLTI0XCI+XHJcbiAgICAgICAgICAgIHt7IG5vZGUuaXRlbS5ncm91cEFjcm9ueW0gfX1cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLWJvZHktbWQtMTYgaWVlZXNhLXRyZWVfX25vZGUtZ3JvdXAtZGVzY1wiPlxyXG4gICAgICAgICAge3sgbm9kZS5pdGVtLmdyb3VwVHlwZUluZm8ubmFtZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwQWN0aW9uc091dGxldCBsZXQtbm9kZT5cclxuICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKG5vZGUpOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgIFtpY29uQnV0dG9uXT1cIml0ZW1cIlxyXG4gICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwiXHJcbiAgICAgICAgICBvbkdyb3VwQWN0aW9uc0NsaWNrKCRldmVudCk7IGhhbmRsZUdyb3VwQWN0aW9ucyhub2RlKVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgPC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbWF0LXRyZWU+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -758,12 +758,14 @@ class TreeViewComponent {
|
|
|
758
758
|
return this.deletedGroupId;
|
|
759
759
|
}
|
|
760
760
|
// eslint-disable-next-line no-unused-vars, no-empty-function
|
|
761
|
-
constructor(database) {
|
|
761
|
+
constructor(database, elementRef) {
|
|
762
762
|
this.database = database;
|
|
763
|
+
this.elementRef = elementRef;
|
|
763
764
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
764
765
|
this.constants = screenTexts;
|
|
765
766
|
this.buttons = this.constants?.viewGroups?.buttons;
|
|
766
767
|
this.treePaddingIndent = this.constants?.viewGroups?.treePaddingIndent;
|
|
768
|
+
this.destroy$ = new Subject();
|
|
767
769
|
this.plusCircleIconButton = this.buttons[4];
|
|
768
770
|
this.minusCircleIconButton = this.buttons[5];
|
|
769
771
|
this.menuItems = this.buttons.filter((e) => e.id !== GroupAction.EXPAND_GROUP_VIEW &&
|
|
@@ -801,6 +803,16 @@ class TreeViewComponent {
|
|
|
801
803
|
ngOnInit() {
|
|
802
804
|
this.setGroupDataSource();
|
|
803
805
|
}
|
|
806
|
+
/**
|
|
807
|
+
* Assign ARIA role for all mat tree nodes as "row"
|
|
808
|
+
* @memberof TreeViewComponent
|
|
809
|
+
*/
|
|
810
|
+
ngAfterViewInit() {
|
|
811
|
+
this.dataSource.dataChange.pipe(takeUntil$1(this.destroy$)).subscribe(() => {
|
|
812
|
+
const treeItemNodes = this.elementRef.nativeElement.querySelectorAll('[role=treeitem]');
|
|
813
|
+
treeItemNodes?.forEach((node) => (node.role = 'row'));
|
|
814
|
+
});
|
|
815
|
+
}
|
|
804
816
|
/**
|
|
805
817
|
* Emits the group info when the toggle group is clicked or toggles the group view
|
|
806
818
|
* @param {GroupNode} group
|
|
@@ -919,8 +931,16 @@ class TreeViewComponent {
|
|
|
919
931
|
trackByFn(index, iconButton) {
|
|
920
932
|
return iconButton.id;
|
|
921
933
|
}
|
|
922
|
-
|
|
923
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.3", type: TreeViewComponent, isStandalone: true, selector: "ieeesa-tree", inputs: { parentGroupsInfo: "parentGroupsInfo", childGroupsInfo: "childGroupsInfo", isGroupSearchOrFilterActive: "isGroupSearchOrFilterActive", deletedGroupIdInfo: "deletedGroupIdInfo" }, outputs: { toggleGroupClick: "toggleGroupClick", createGroupClick: "createGroupClick", editGroupClick: "editGroupClick", deleteGroupClick: "deleteGroupClick" }, ngImport: i0, template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n ></div>\r\n <div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div>\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:rgba(103,80,164,.12)}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree__node-group-acronym{color:#63666a}.ieeesa-tree__node-group-desc{color:#4a4d50}.ieeesa-tree__node{background:#f4f8fe;padding:.75em 1.5em .75em 1.125em}.ieeesa-tree__root-node-white-bg{background:#ffffff;box-shadow:0 1px #00b5e2 inset,6px 0 #379dfc inset}.ieeesa-tree__collapse-icon{min-width:3.5em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i2.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i2.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: i2.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i2.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: MenuComponent, selector: "ieeesa-menu", inputs: ["menuItems"], outputs: ["menuItemClick"] }, { kind: "component", type: IconButtonComponent, selector: "ieeesa-icon-button", inputs: ["iconButton"], outputs: ["iconButtonClick"] }] }); }
|
|
934
|
+
/**
|
|
935
|
+
* NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.
|
|
936
|
+
* @memberof GroupsComponent
|
|
937
|
+
*/
|
|
938
|
+
ngOnDestroy() {
|
|
939
|
+
this.destroy$.next(true);
|
|
940
|
+
this.destroy$.unsubscribe();
|
|
941
|
+
}
|
|
942
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: TreeViewComponent, deps: [{ token: Groups }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
943
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.3", type: TreeViewComponent, isStandalone: true, selector: "ieeesa-tree", inputs: { parentGroupsInfo: "parentGroupsInfo", childGroupsInfo: "childGroupsInfo", isGroupSearchOrFilterActive: "isGroupSearchOrFilterActive", deletedGroupIdInfo: "deletedGroupIdInfo" }, outputs: { toggleGroupClick: "toggleGroupClick", createGroupClick: "createGroupClick", editGroupClick: "editGroupClick", deleteGroupClick: "deleteGroupClick" }, ngImport: i0, template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <div role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\" role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:rgba(103,80,164,.12)}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree__node-group-acronym{color:#63666a}.ieeesa-tree__node-group-desc{color:#4a4d50}.ieeesa-tree__node{background:#f4f8fe;padding:.75em 1.5em .75em 1.125em}.ieeesa-tree__root-node-white-bg{background:#ffffff;box-shadow:0 1px #00b5e2 inset,6px 0 #379dfc inset}.ieeesa-tree__collapse-icon{min-width:3.5em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i2.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i2.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: i2.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i2.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: MenuComponent, selector: "ieeesa-menu", inputs: ["menuItems"], outputs: ["menuItemClick"] }, { kind: "component", type: IconButtonComponent, selector: "ieeesa-icon-button", inputs: ["iconButton"], outputs: ["iconButtonClick"] }] }); }
|
|
924
944
|
}
|
|
925
945
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: TreeViewComponent, decorators: [{
|
|
926
946
|
type: Component,
|
|
@@ -931,8 +951,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImpor
|
|
|
931
951
|
MatButtonModule,
|
|
932
952
|
MenuComponent,
|
|
933
953
|
IconButtonComponent,
|
|
934
|
-
], template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n ></div>\r\n <div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div>\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:rgba(103,80,164,.12)}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree__node-group-acronym{color:#63666a}.ieeesa-tree__node-group-desc{color:#4a4d50}.ieeesa-tree__node{background:#f4f8fe;padding:.75em 1.5em .75em 1.125em}.ieeesa-tree__root-node-white-bg{background:#ffffff;box-shadow:0 1px #00b5e2 inset,6px 0 #379dfc inset}.ieeesa-tree__collapse-icon{min-width:3.5em}\n"] }]
|
|
935
|
-
}], ctorParameters: function () { return [{ type: Groups }]; }, propDecorators: { parentGroupsInfo: [{
|
|
954
|
+
], template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <div role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\" role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:rgba(103,80,164,.12)}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree__node-group-acronym{color:#63666a}.ieeesa-tree__node-group-desc{color:#4a4d50}.ieeesa-tree__node{background:#f4f8fe;padding:.75em 1.5em .75em 1.125em}.ieeesa-tree__root-node-white-bg{background:#ffffff;box-shadow:0 1px #00b5e2 inset,6px 0 #379dfc inset}.ieeesa-tree__collapse-icon{min-width:3.5em}\n"] }]
|
|
955
|
+
}], ctorParameters: function () { return [{ type: Groups }, { type: i0.ElementRef }]; }, propDecorators: { parentGroupsInfo: [{
|
|
936
956
|
type: Input
|
|
937
957
|
}], childGroupsInfo: [{
|
|
938
958
|
type: Input
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ieeesa-npm-groups.mjs","sources":["../../../projects/groups/src/lib/assets/form-validations.ts","../../../projects/groups/src/lib/services/groups.service.ts","../../../projects/groups/src/lib/components/create-group/create-group.component.ts","../../../projects/groups/src/lib/components/create-group/create-group.component.html","../../../projects/groups/src/lib/models/group-action.model.ts","../../../projects/groups/src/lib/components/tree-view/tree-view.component.ts","../../../projects/groups/src/lib/components/tree-view/tree-view.component.html","../../../projects/groups/src/lib/models/group-function-type.model.ts","../../../projects/groups/src/lib/groups.component.ts","../../../projects/groups/src/lib/groups.component.html","../../../projects/groups/src/lib/groups.module.ts","../../../projects/groups/src/public-api.ts","../../../projects/groups/src/ieeesa-npm-groups.ts"],"sourcesContent":["/* eslint-disable no-useless-escape */\r\nexport const GroupsValidationPatterns = {\r\n // Group Name field regular expression, which accept Alpha Numeric, Special Characters (ASCII) and whitespace.\r\n groupName: /^(?!\\s+$)[\\w\\s!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\\\\]+$/,\r\n // Group Short Name field regular expression which accept letters, numbers and \".\",\",\" , \"/\", \"-\" , \"_\" characters.\r\n shortName: /^(?![\\s.\\/\\-_]*$)[a-zA-Z0-9.,\\/\\-_ ]+$/,\r\n // Group Scope field regular expression which accept Alpha Numeric, Special Characters and whitespace.\r\n groupScope: /^(?!\\s+$)[\\w\\s!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\\\\]+$/,\r\n};","import { Injectable } from '@angular/core';\r\nimport { Observable, map, catchError } from 'rxjs';\r\nimport {\r\n CreateGroupPayload,\r\n CreateGroupResponse,\r\n} from '../models/create-group.model';\r\nimport { GroupTypeResponse } from '../models/group-types.model';\r\nimport { AlertsService, HttpService } from '@ieeesa-npm/utility';\r\nimport { GetGroupResponse, GetGroupsPayload } from '../models/view-group.model';\r\nimport * as screenTexts from '../assets/constants.json';\r\nimport { DeleteGroupPayload } from '../models/delete-group.model';\r\n\r\n/**\r\n * Groups service is an abstract layer and responsible for managing groups REST API calls.\r\n * @class GroupsService\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class GroupsService {\r\n groupsText = screenTexts?.errors;\r\n apiBaseUrl!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n userPermission: any;\r\n // eslint-disable-next-line no-empty-function, no-unused-vars\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private httpService: HttpService,\r\n // eslint-disable-next-line no-unused-vars\r\n public alertService: AlertsService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n setAppConfig(apiBaseUrl: string, userPermission: any) {\r\n this.apiBaseUrl = apiBaseUrl;\r\n this.userPermission = userPermission;\r\n }\r\n /**\r\n * Gets application group types from API and returns it as an observable.\r\n * @return {Observable<GroupTypeResponse>} -It returns group types if success else error.\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getGroupTypes(): Observable<GroupTypeResponse> {\r\n return this.httpService\r\n .getData(`${this.apiBaseUrl}/configurations/group_type`)\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Returns all the groups based on passed group Id and group type.\r\n * @param {GetGroupsPayload} getGroupsPayload\r\n * @return {Observable<GetGroupResponse>}\r\n * @memberof GroupsService\r\n */\r\n getGroups(\r\n getGroupsPayload: GetGroupsPayload\r\n ): Observable<GetGroupResponse> {\r\n let url = 'rootGroups';\r\n if (getGroupsPayload.groupId)\r\n url = 'immChildGroupsByGroupId/' + getGroupsPayload.groupId;\r\n else if (getGroupsPayload.groupTypeId)\r\n url = 'groupsByGroupType/' + getGroupsPayload.groupTypeId;\r\n\r\n return this.httpService.getData(`${this.apiBaseUrl}/groups/${url}`).pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((errorRes) => {\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n /**\r\n * Deletes a group based on the provided information\r\n * @param {groupId} string -groupId of the group which is to be deleted\r\n * @return {*} {Observable<any>} -Observable representing the group deletion response\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n deleteGroup(deleteGroupPayload: DeleteGroupPayload): Observable<any> {\r\n return this.httpService\r\n .putData(`${this.apiBaseUrl}/groups/delete`, deleteGroupPayload)\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Posts create group form data to server using HttpService for creating new group.\r\n * @param {CreateGroupPayload} createGroupPayload -create group form data which includes group name, type, short name, scope.\r\n * @return {Observable<any>} -returns create group API response (success or error) as an observable.\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n createGroup(\r\n createGroupPayload: CreateGroupPayload\r\n ): Observable<CreateGroupResponse> {\r\n return this.httpService\r\n .postData(`${this.apiBaseUrl}/groups/create`, createGroupPayload)\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * This method will parse the error codes and return the respective error message for each code.\r\n * @param {string[]} errorCodes\r\n * @return {string[]} errorMessage\r\n * @memberof GroupsService\r\n */\r\n parseErrorMessage(errorCodes: string[]) {\r\n const errorMessage: string[] = [];\r\n errorCodes.forEach((item: string, index: number) => {\r\n const errorMessageKey = errorCodes[index] as keyof typeof this.groupsText;\r\n errorMessage.push(this.groupsText[errorMessageKey]);\r\n });\r\n return errorMessage;\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormGroup, Validators } from \"@angular/forms\";\r\nimport {\r\n FormGrid,\r\n FormModel,\r\n SelectOption,\r\n DynamicFormComponent,\r\n FormControlType,\r\n AlignType,\r\n} from \"@ieeesa-npm/presentation\";\r\nimport {\r\n AlertsService,\r\n AlertType,\r\n GlobalErrorHandlerService,\r\n} from \"@ieeesa-npm/utility\";\r\nimport * as screenTexts from \"../../assets/constants.json\";\r\nimport { GroupsValidationPatterns } from \"../../assets/form-validations\";\r\nimport { CreateGroupPayload } from \"../../models/create-group.model\";\r\nimport { GroupsService } from \"../../services/groups.service\";\r\nimport { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { MatDialogModule } from \"@angular/material/dialog\";\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { GroupType } from \"../../models/group-types.model\";\r\n\r\n/**\r\n * CreateGroupComponent uses DynamicFormComponent to build create new group form and implement the functionalities of submission of form and handling success and error scenarios.\r\n * @class CreateGroupComponent\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: \"ieeesa-create-group\",\r\n standalone: true,\r\n imports: [CommonModule, DynamicFormComponent, MatDialogModule],\r\n templateUrl: \"./create-group.component.html\",\r\n styleUrls: [\"./create-group.component.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [AlertsService],\r\n})\r\nexport class CreateGroupComponent implements OnInit, OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n /**\r\n * Event emitted when the form is successfully submitted.\r\n * @memberof CreateGroupComponent\r\n */\r\n @Output() submitFormResponse = new EventEmitter();\r\n /**\r\n * Event emitted when the form is cancelled.\r\n * @memberof CreateGroupComponent\r\n */\r\n @Output() formCancel = new EventEmitter();\r\n createGroupText = screenTexts?.createGroup;\r\n leftButtonLabel = this.createGroupText?.label?.leftButtonLabel;\r\n rightButtonLabel = this.createGroupText?.label?.rightButtonLabel;\r\n isLegendVisible = false;\r\n isLeftButtonNeeded = true;\r\n colWidth: FormGrid = { xs: 12, xl: 12, sm: 12, md: 12, lg: 12 };\r\n formGroup!: FormModel;\r\n groupTypes!: SelectOption[];\r\n actionButtonAlign = AlignType.LEFT;\r\n form!: FormGroup;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private groupsService: GroupsService,\r\n // eslint-disable-next-line no-unused-vars\r\n private globalErrorHandlerService: GlobalErrorHandlerService,\r\n // eslint-disable-next-line no-unused-vars\r\n public alertService: AlertsService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Initialize the create group form group array and component.\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n ngOnInit(): void {\r\n this.groupsService\r\n .getGroupTypes()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res?.status) {\r\n this.groupTypes = Object.entries(res.body.configFieldValue).map(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ([id, item]: [string, GroupType]) => ({\r\n id: id,\r\n name: item.name,\r\n })\r\n );\r\n if (this.groupTypes.length) {\r\n this.createFormGroup();\r\n }\r\n }\r\n },\r\n error: (error) => {\r\n if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Initialize the create group form group array.\r\n * @memberof CreateGroupComponent\r\n */\r\n createFormGroup(): void {\r\n this.formGroup = {\r\n formGroup: [\r\n {\r\n legend: \"\",\r\n controls: [\r\n {\r\n type: FormControlType.SELECT,\r\n label: this.createGroupText?.label?.groupType + \"*\",\r\n controlName: \"groupType\",\r\n requiredErrorMessage: this.createGroupText?.message?.error\r\n ?.required,\r\n value: \"\",\r\n validation: [Validators.required],\r\n dropdownOptions: this.groupTypes,\r\n supportMessage: this.createGroupText?.supportText?.groupType,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupType,\r\n placeholder: \"\",\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.groupType,\r\n },\r\n {\r\n type: FormControlType.INPUT,\r\n label: this.createGroupText?.label?.groupName + \"*\",\r\n controlName: \"groupName\",\r\n requiredErrorMessage: this.createGroupText?.message?.error\r\n ?.required,\r\n value: \"\",\r\n placeholder: \"\",\r\n supportMessage: this.createGroupText?.supportText?.groupName,\r\n patternErrorMessage: this.createGroupText?.message?.error?.pattern\r\n ?.groupName,\r\n validation: [\r\n Validators.required,\r\n Validators.maxLength(\r\n screenTexts?.createGroup?.characterLimit?.character500\r\n ),\r\n Validators.pattern(GroupsValidationPatterns.groupName),\r\n ],\r\n maxErrorMessage: this.createGroupText?.message?.error?.limit\r\n ?.groupName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupName,\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.groupName,\r\n },\r\n {\r\n type: FormControlType.INPUT,\r\n label: this.createGroupText?.label?.shortName + \"*\",\r\n controlName: \"shortName\",\r\n requiredErrorMessage: this.createGroupText?.message?.error\r\n ?.required,\r\n value: \"\",\r\n patternErrorMessage: this.createGroupText?.message?.error?.pattern\r\n ?.shortName,\r\n placeholder: \"\",\r\n supportMessage: this.createGroupText?.supportText?.shortName,\r\n validation: [\r\n Validators.required,\r\n Validators.maxLength(\r\n screenTexts?.createGroup?.characterLimit?.character15\r\n ),\r\n Validators.pattern(GroupsValidationPatterns.shortName),\r\n ],\r\n maxErrorMessage: this.createGroupText?.message?.error?.limit\r\n ?.shortName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.shortName,\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.shortName,\r\n },\r\n {\r\n type: FormControlType.TEXT_AREA,\r\n label: this.createGroupText?.label?.groupScope,\r\n controlName: \"groupScope\",\r\n patternErrorMessage: this.createGroupText?.message?.error?.pattern\r\n ?.groupScope,\r\n value: \"\",\r\n placeholder: \"\",\r\n supportMessage: this.createGroupText?.supportText?.groupScope,\r\n isResize: true,\r\n maxLength:\r\n screenTexts?.createGroup?.characterLimit?.character2000,\r\n validation: [\r\n Validators.maxLength(\r\n screenTexts?.createGroup?.characterLimit?.character1500\r\n ),\r\n Validators.pattern(GroupsValidationPatterns.groupScope),\r\n ],\r\n maxErrorMessage: this.createGroupText?.message?.error?.limit\r\n ?.groupScope,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupScope,\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.groupScope,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n }\r\n /**\r\n * Handles client side validation and emits create group information.\r\n * @param {FormGroup[]} form -Array of formGroup\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n onFormSubmit(form: FormGroup[]): void {\r\n form[0]?.markAllAsTouched();\r\n if (form[0].status === \"VALID\") {\r\n const formResponse = form[0].getRawValue();\r\n const createGroupPayload: CreateGroupPayload = {\r\n payload: {\r\n groupName: formResponse?.groupName,\r\n groupShortName: formResponse?.shortName,\r\n groupType: formResponse?.groupType?.id,\r\n groupDesc: formResponse?.groupScope,\r\n groupParentId: null,\r\n },\r\n };\r\n this.groupsService\r\n .createGroup(createGroupPayload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res?.status) {\r\n this.submitFormResponse.emit(res);\r\n }\r\n },\r\n error: (error) => {\r\n const errorCodeArr: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodeArr)) {\r\n const errorMessage: string[] = this.groupsService.parseErrorMessage(errorCodeArr)\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Get form reference.\r\n * @param {FormGroup[]} form\r\n * @memberof CreateGroupComponent\r\n */\r\n getFormGroupReference(form: FormGroup[]) {\r\n this.form = form[0];\r\n }\r\n\r\n /**\r\n * Emits form cancel event.\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n createGroupCancelled(): void {\r\n this.formCancel.emit();\r\n }\r\n\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof CreateGroupComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<ieeesa-dynamic-form\r\n *ngIf=\"formGroup\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"isLegendVisible\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"formGroup\"\r\n [isLeftButtonNeeded]=\"isLeftButtonNeeded\"\r\n (formSubmit)=\"onFormSubmit($event)\"\r\n (formLeftButtonClicked)=\"createGroupCancelled()\"\r\n (formGroupsReference)=\"getFormGroupReference($event)\"\r\n></ieeesa-dynamic-form>","/* eslint-disable no-unused-vars */\r\nexport enum GroupAction {\r\n VIEW_ROSTER = 1,\r\n CREATE_SUB_GROUP = 2,\r\n EDIT_GROUP = 3,\r\n DELETE_GROUP = 4,\r\n EXPAND_GROUP_VIEW = 5,\r\n COLLAPSE_GROUP_VIEW = 6,\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Injectable,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n MenuComponent,\r\n Menu,\r\n IconButtonComponent,\r\n IconButton,\r\n} from '@ieeesa-npm/presentation';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { GroupAction } from '../../models/group-action.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n CollectionViewer,\r\n SelectionChange,\r\n DataSource,\r\n} from '@angular/cdk/collections';\r\nimport { FlatTreeControl } from '@angular/cdk/tree';\r\nimport { BehaviorSubject, merge, Observable, Subject } from 'rxjs';\r\nimport { map, takeUntil } from 'rxjs/operators';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTreeModule, MatTreeNodePadding } from '@angular/material/tree';\r\nimport { GroupInfo } from '../../models/group-info.model';\r\n\r\n/**\r\n * Dynamic Flat node creates a node structure\r\n * @export\r\n * @class GroupNode\r\n */\r\nexport class GroupNode {\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public item: GroupInfo,\r\n // eslint-disable-next-line no-unused-vars\r\n public level = 1,\r\n // eslint-disable-next-line no-unused-vars\r\n public expandable = false,\r\n // eslint-disable-next-line no-unused-vars\r\n public isLoading = false // eslint-disable-next-line no-empty-function\r\n ) {}\r\n}\r\n\r\n/**\r\n * Groups stores the parent nodes and child nodes\r\n * @export\r\n * @class Groups\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class Groups {\r\n rootLevelNodes!: GroupInfo[];\r\n /** Initial data from database */\r\n private childGroups!: GroupInfo[];\r\n /**\r\n * Get the Child groups info\r\n * @return {*} {GroupInfo[]}\r\n * @memberof Groups\r\n */\r\n getChildGroupsInfo(): GroupInfo[] {\r\n return this.childGroups;\r\n }\r\n /**\r\n * Sets the Child groups info\r\n * @param {GroupInfo[]} value\r\n * @memberof Groups\r\n */\r\n setChildGroupsInfo(value: GroupInfo[]): void {\r\n this.childGroups = value;\r\n }\r\n /**\r\n * Initialize the groups data and creates the node structure for mat tree\r\n * @param {GroupInfo[]} data\r\n * @return {*} {GroupNode[]}\r\n * @memberof Groups\r\n */\r\n initialData(data: GroupInfo[]): GroupNode[] {\r\n this.rootLevelNodes = data;\r\n return this.rootLevelNodes.map(\r\n (node) => new GroupNode(node, 0, this.isExpandable(node))\r\n );\r\n }\r\n /**\r\n * Checks the node is expandable or not\r\n * @param {GroupInfo} node\r\n * @return {*} {boolean}\r\n * @memberof Groups\r\n */\r\n isExpandable(node: GroupInfo): boolean {\r\n return (!!node.children && node.children.length > 0) || node.hasChildren;\r\n }\r\n}\r\n/**\r\n * Dynamic Data Source handles the connection with dynamic data base\r\n * @export\r\n * @class GroupsDataSource\r\n * @implements {DataSource<GroupNode>}\r\n */\r\nexport class GroupsDataSource implements DataSource<GroupNode> {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n dataChange = new BehaviorSubject<GroupNode[]>([]);\r\n /**\r\n * Gets the updated tree control data\r\n * @type {GroupNode[]}\r\n * @memberof GroupsDataSource\r\n */\r\n get data(): GroupNode[] {\r\n return this.dataChange.value;\r\n }\r\n /**\r\n * Sets the data to tree control and emit the value to intimate the data change\r\n * @memberof GroupsDataSource\r\n */\r\n set data(value: GroupNode[]) {\r\n this.treeControl.dataNodes = value;\r\n this.dataChange.next(value);\r\n }\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private treeControl: FlatTreeControl<GroupNode>,\r\n // eslint-disable-next-line no-unused-vars\r\n private database: Groups // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Handles the connection between the data base and mat tree\r\n * @param {CollectionViewer} collectionViewer\r\n * @return {*} {Observable<GroupNode[]>}\r\n * @memberof GroupsDataSource\r\n */\r\n connect(collectionViewer: CollectionViewer): Observable<GroupNode[]> {\r\n this.treeControl.expansionModel.changed\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((change) => {\r\n if (\r\n (change as SelectionChange<GroupNode>).added ||\r\n (change as SelectionChange<GroupNode>).removed\r\n ) {\r\n this.handleTreeControl(change as SelectionChange<GroupNode>);\r\n }\r\n });\r\n\r\n return merge(collectionViewer.viewChange, this.dataChange).pipe(\r\n map(() => this.data)\r\n );\r\n }\r\n /**\r\n * Disconnect the connection with mat tree\r\n * @param {CollectionViewer} collectionViewer\r\n * @memberof GroupsDataSource\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function, no-empty-function, no-unused-vars, @typescript-eslint/no-unused-vars\r\n disconnect(collectionViewer: CollectionViewer): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n\r\n /**\r\n * Adds/removes the child nodes while expands/collapses the parent node\r\n * @param {SelectionChange<GroupNode>} change\r\n * @memberof GroupsDataSource\r\n */\r\n handleTreeControl(change: SelectionChange<GroupNode>) {\r\n if (change.added) {\r\n change.added.forEach((node) => this.toggleNode(node, true));\r\n }\r\n if (change.removed) {\r\n change.removed\r\n .slice()\r\n .reverse()\r\n .forEach((node) => this.toggleNode(node, false));\r\n }\r\n }\r\n\r\n /**\r\n * Toggle the node, add/removes the node from display\r\n * @param {GroupNode} clickedNode\r\n * @param {boolean} expand\r\n * @return {*}\r\n * @memberof GroupsDataSource\r\n */\r\n toggleNode(clickedNode: GroupNode, expand: boolean) {\r\n const children = this.database.getChildGroupsInfo();\r\n const index = this.data.indexOf(clickedNode);\r\n if (!children || index < 0) {\r\n // If no children, or cannot find the node, no op\r\n return;\r\n }\r\n\r\n if (expand) {\r\n const nodes = children.map(\r\n (node) =>\r\n new GroupNode(\r\n node,\r\n clickedNode.level + 1,\r\n this.database.isExpandable(node)\r\n )\r\n );\r\n this.data.splice(index + 1, 0, ...nodes);\r\n } else {\r\n let count = 0;\r\n for (\r\n let i = index + 1;\r\n i < this.data.length && this.data[i].level > clickedNode.level;\r\n i++, count++ // eslint-disable-next-line no-empty\r\n ) {}\r\n this.data.splice(index + 1, count);\r\n }\r\n\r\n // Notify the change\r\n this.dataChange.next(this.data);\r\n }\r\n}\r\n/**\r\n * Displays the groups where parent/child relationships are represented in a tree view/hierarchy.\r\n * @export\r\n * @class TreeViewComponent\r\n * @implements {OnInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-tree',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatTreeModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MenuComponent,\r\n IconButtonComponent,\r\n ],\r\n templateUrl: './tree-view.component.html',\r\n styleUrls: ['./tree-view.component.scss'],\r\n})\r\nexport class TreeViewComponent implements OnInit {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n buttons: Menu[] = this.constants?.viewGroups?.buttons;\r\n treePaddingIndent: number = this.constants?.viewGroups?.treePaddingIndent;\r\n selectedGroup!: GroupNode;\r\n selectedGroupAction!: Menu | IconButton;\r\n treeControl!: FlatTreeControl<GroupNode>;\r\n dataSource!: GroupsDataSource;\r\n matTreeNodePadding!: MatTreeNodePadding<GroupNode>;\r\n plusCircleIconButton: IconButton = this.buttons[4];\r\n minusCircleIconButton: IconButton = this.buttons[5];\r\n menuItems: Menu[] = this.buttons.filter(\r\n (e) =>\r\n e.id !== GroupAction.EXPAND_GROUP_VIEW &&\r\n e.id !== GroupAction.COLLAPSE_GROUP_VIEW\r\n );\r\n private parentGroups!: GroupInfo[];\r\n @Input()\r\n set parentGroupsInfo(value: GroupInfo[]) {\r\n this.parentGroups = value;\r\n if (value) this.setGroupDataSource();\r\n }\r\n get parentGroupsInfo(): GroupInfo[] {\r\n return this.parentGroups;\r\n }\r\n private childGroups!: GroupInfo[];\r\n @Input()\r\n set childGroupsInfo(value: GroupInfo[]) {\r\n this.childGroups = value;\r\n this.loadChildGroups();\r\n }\r\n get childGroupsInfo(): GroupInfo[] {\r\n return this.childGroups;\r\n }\r\n private isGroupSearchOrFilter = false;\r\n @Input()\r\n set isGroupSearchOrFilterActive(value: boolean) {\r\n this.isGroupSearchOrFilter = value;\r\n }\r\n get isGroupSearchOrFilterActive(): boolean {\r\n return this.isGroupSearchOrFilter;\r\n }\r\n private deletedGroupId!: string | undefined;\r\n @Input()\r\n set deletedGroupIdInfo(id: string) {\r\n this.deletedGroupId = id;\r\n this.deleteGroupNode(this.deletedGroupId);\r\n }\r\n get deletedGroupIdInfo(): string | undefined {\r\n return this.deletedGroupId;\r\n }\r\n\r\n @Output() toggleGroupClick = new EventEmitter<GroupInfo>();\r\n @Output() createGroupClick = new EventEmitter<GroupInfo>();\r\n @Output() editGroupClick = new EventEmitter<GroupInfo>();\r\n @Output() deleteGroupClick = new EventEmitter<GroupInfo>();\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(public database: Groups) {}\r\n /**\r\n * Initializes the tree view component\r\n * @memberof TreeViewComponent\r\n */\r\n ngOnInit(): void {\r\n this.setGroupDataSource();\r\n }\r\n /**\r\n * Gets the level of the node\r\n * @param {GroupNode} node\r\n * @memberof TreeViewComponent\r\n */\r\n getLevel = (node: GroupNode) => node.level;\r\n\r\n /**\r\n * Checks the node is expandable or not\r\n * @param {GroupNode} node\r\n * @memberof TreeViewComponent\r\n */\r\n isExpandable = (node: GroupNode) => node.expandable;\r\n\r\n /**\r\n * Returns true if passed node has children otherwise false\r\n * @param {number} index\r\n * @param {GroupNode} node\r\n * @return {boolean}\r\n * @memberof TreeViewComponent\r\n */\r\n hasChildGroups = (index: number, _nodeData: GroupNode) =>\r\n _nodeData.expandable;\r\n /**\r\n * Emits the group info when the toggle group is clicked or toggles the group view\r\n * @param {GroupNode} group\r\n * @memberof TreeViewComponent\r\n */\r\n viewChildGroups(node: GroupNode) {\r\n if (!node.item.hasChildren) {\r\n return;\r\n }\r\n if (this.treeControl.isExpanded(node)) {\r\n this.treeControl.toggle(node);\r\n } else {\r\n this.toggleGroupClick.emit(node.item);\r\n this.selectedGroup = node;\r\n }\r\n }\r\n /**\r\n * Sets the box shadow based on the group type legend color\r\n * @param {string} color\r\n * @return {*}\r\n * @memberof TreeViewComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getBoxShadow(color: string): any {\r\n return {\r\n boxShadow:\r\n '0px 1px 0px 0px #c9cbd0 inset, 6px 0px 0px 0px ' + color + ' inset',\r\n };\r\n }\r\n /**\r\n * Sets the dataSource with parent groups data\r\n * @memberof TreeViewComponent\r\n */\r\n setGroupDataSource(): void {\r\n this.treeControl = new FlatTreeControl<GroupNode>(\r\n this.getLevel,\r\n this.isExpandable\r\n );\r\n this.dataSource = new GroupsDataSource(this.treeControl, this.database);\r\n this.dataSource.data = this.database.initialData(this.parentGroupsInfo);\r\n }\r\n /**\r\n * Loads the child groups and updates the tree view.\r\n * @memberof TreeViewComponent\r\n */\r\n loadChildGroups() {\r\n this.database.setChildGroupsInfo(this.childGroupsInfo);\r\n if (this.selectedGroup) this.treeControl.toggle(this.selectedGroup);\r\n }\r\n /**\r\n * Deletes the selected group and updates the tree view.\r\n * @param {string} deletedGroupId\r\n * @memberof TreeViewComponent\r\n */\r\n deleteGroupNode(deletedGroupId: string): void {\r\n if (this.treeControl && deletedGroupId) {\r\n const groupDataSource: GroupNode[] = this.treeControl.dataNodes.filter(\r\n (e) => e.item.groupId !== deletedGroupId\r\n );\r\n this.dataSource.data = groupDataSource;\r\n this.deletedGroupId = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the selected menu group action\r\n * @param {Menu} menu\r\n * @memberof TreeViewComponent\r\n */\r\n onGroupActionsClick(menu: Menu | IconButton): void {\r\n this.selectedGroupAction = menu;\r\n }\r\n /**\r\n * Changes the expand/collapse icon based on the toggle\r\n * @param {GroupNode} group\r\n * @return {*} {*}\r\n * @memberof TreeViewComponent\r\n */\r\n getToggleButtonInfo(group: GroupNode): IconButton {\r\n if (this.treeControl.isExpanded(group)) return this.minusCircleIconButton;\r\n return this.plusCircleIconButton;\r\n }\r\n /**\r\n * Handles the emitted group actions event\r\n * @param {GroupInfo} group\r\n * @memberof TreeViewComponent\r\n */\r\n handleGroupActions(group: GroupNode): void {\r\n if (this.selectedGroupAction?.id === GroupAction.VIEW_ROSTER) {\r\n this.viewChildGroups(group);\r\n } else if (this.selectedGroupAction?.id === GroupAction.CREATE_SUB_GROUP) {\r\n this.createGroupClick.emit(group.item);\r\n } else if (this.selectedGroupAction?.id === GroupAction.EDIT_GROUP) {\r\n this.editGroupClick.emit(group.item);\r\n } else if (this.selectedGroupAction?.id === GroupAction.DELETE_GROUP) {\r\n this.deleteGroupClick.emit(group.item);\r\n }\r\n }\r\n /**\r\n * Returns the filtered menu items based on groups hasChildren.\r\n * @param {GroupNode} group\r\n * @return {Menu[]}\r\n * @memberof TreeViewComponent\r\n */\r\n getFilteredGroupActions(group: GroupNode): Menu[] {\r\n this.menuItems.forEach((e) => (e.isToolTipNeeded = false));\r\n return this.menuItems.filter(\r\n (e) =>\r\n (e.id !== GroupAction.DELETE_GROUP && group.item.hasChildren) ||\r\n (e.id !== GroupAction.CREATE_SUB_GROUP && !group.item.hasChildren)\r\n );\r\n }\r\n /**\r\n * Takes the index and the icon button as arguments and needs to return the unique identifier for this icon button.\r\n * @param {number} index\r\n * @param {IconButton} iconButton\r\n * @return {number}\r\n * @memberof TreeViewComponent\r\n */\r\n trackByFn(index: number, iconButton: IconButton): number {\r\n return iconButton.id;\r\n }\r\n}\r\n","<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n ></div>\r\n <div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div>\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum GroupFunctionType {\r\n CREATE = \"CREATE\",\r\n EDIT = \"EDIT\"\r\n}","import { CommonModule } from '@angular/common';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport {\r\n Component,\r\n Input,\r\n OnDestroy,\r\n ViewEncapsulation,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\r\nimport { CreateGroupComponent } from './components/create-group/create-group.component';\r\nimport { GroupsService } from './services/groups.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { GroupInfo } from './models/group-info.model';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport {\r\n SearchComponent,\r\n ModalComponent,\r\n SelectOption,\r\n SelectComponent,\r\n Legend,\r\n IconButtonComponent,\r\n IconButton,\r\n AlignType,\r\n ModalConfirmationComponent,\r\n LegendComponent,\r\n} from '@ieeesa-npm/presentation';\r\nimport { TreeViewComponent } from './components/tree-view/tree-view.component';\r\nimport { GroupType } from './models/group-types.model';\r\nimport {\r\n ModalType,\r\n AlertType,\r\n GlobalErrorHandlerService,\r\n BreakpointObserverService,\r\n AlertsService,\r\n} from '@ieeesa-npm/utility';\r\nimport * as screenTexts from './assets/constants.json';\r\nimport { GroupFunctionType } from './models/group-function-type.model';\r\nimport { GetGroupsPayload } from './models/view-group.model';\r\nimport { DeleteGroupPayload } from './models/delete-group.model';\r\n\r\n/**\r\n * Groups component is a wrapper or container component for groups management reusable component and in this component integrates all group management functionalities and this will be entry component for managing groups when it is consumed in other applications.\r\n * @class GroupsComponent\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: 'ieeesa-groups',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatDialogModule,\r\n MatButtonModule,\r\n SearchComponent,\r\n SelectComponent,\r\n TreeViewComponent,\r\n LegendComponent,\r\n IconButtonComponent,\r\n ],\r\n templateUrl: './groups.component.html',\r\n styleUrls: ['./groups.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [AlertsService],\r\n})\r\nexport class GroupsComponent implements OnInit, OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n dialogRef: any;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = screenTexts;\r\n viewGroupTexts = this.constants?.viewGroups;\r\n isGroupSearchActive = false;\r\n isGroupFilterActive = false;\r\n isGroupSearchOrFilterActive = false;\r\n isMobileView = false;\r\n childGroupsInfo!: GroupInfo[];\r\n selectedGroupType!: SelectOption;\r\n parentGroupsInfo!: GroupInfo[];\r\n selectGroupOptions!: SelectOption[];\r\n deletedGroupId!: string;\r\n groupTypes!: { [key: string]: GroupType };\r\n searchPlaceHolderText: string = this.viewGroupTexts?.placeholderText?.search;\r\n filterPlaceHolderText: string = this.viewGroupTexts?.placeholderText?.filter;\r\n createGroupIcon: IconButton = {\r\n id: 1,\r\n ariaLabel: this.viewGroupTexts?.ariaLabel.add,\r\n iconURL: this.viewGroupTexts?.createGroupIcon,\r\n toolTip: this.viewGroupTexts?.ariaLabel.add,\r\n };\r\n filterGroupIcon: IconButton = {\r\n id: 2,\r\n ariaLabel: this.viewGroupTexts?.ariaLabel.filter,\r\n iconURL: this.viewGroupTexts?.filterGroupIcon,\r\n toolTip: this.viewGroupTexts?.ariaLabel.filter,\r\n };\r\n groupsLegends: Legend[] = [];\r\n getGroupsPayload: GetGroupsPayload = { groupId: '', groupTypeId: '' };\r\n @Input() groupsPageInfo: {\r\n groupsTitle: string;\r\n groupsDescription: string;\r\n } = {\r\n groupsTitle: this.viewGroupTexts?.groupsTitle,\r\n groupsDescription: this.viewGroupTexts?.groupsDescription,\r\n };\r\n @Input() applicationId!: string;\r\n @Input() apiBaseURL!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Input() permissions!: any;\r\n createGroupText = screenTexts?.createGroup;\r\n functionType!: GroupFunctionType;\r\n alignmentType = AlignType;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public dialog: MatDialog,\r\n // eslint-disable-next-line no-unused-vars\r\n private groupsService: GroupsService,\r\n // eslint-disable-next-line no-unused-vars\r\n public alertService: AlertsService,\r\n // eslint-disable-next-line no-unused-vars\r\n private breakpointObserverService: BreakpointObserverService,\r\n // eslint-disable-next-line no-unused-vars\r\n private globalErrorHandlerService: GlobalErrorHandlerService\r\n ) {\r\n this.breakpointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.isMobileView = result.matches;\r\n });\r\n }\r\n\r\n /**\r\n * Initialize the groups component.\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n ngOnInit(): void {\r\n this.groupsService.setAppConfig(this.apiBaseURL, this.permissions);\r\n this.getGroupTypes();\r\n this.getGroups();\r\n }\r\n\r\n /**\r\n * Sets the dialog options for create group modal and calls openModal method.\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n openCreateGroupForm(): void {\r\n const dialogOptions = {\r\n heading: this.createGroupText?.heading,\r\n isCloseNeeded: true,\r\n componentReference: CreateGroupComponent,\r\n modalType: ModalType.FORM,\r\n };\r\n this.functionType = GroupFunctionType.CREATE;\r\n this.openModal(dialogOptions, 'ieeesa-create-group');\r\n }\r\n\r\n /**\r\n * Opens modal component with for received params and handles form submission success and errors.\r\n * @param {*} dialogOptions\r\n * @param {string} [className]\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-inferrable-types\r\n openModal(dialogOptions: any, className?: string): void {\r\n className = className ?? '';\r\n this.dialogRef = this.dialog.open(ModalComponent, {\r\n data: dialogOptions,\r\n width: 'auto',\r\n panelClass: ['ieeesa-modal-dialog', className],\r\n ariaModal: true,\r\n });\r\n this.dialogRef?.componentInstance?.submitFormResponse\r\n .pipe(takeUntil(this.destroy$))\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, no-unused-vars\r\n .subscribe((result: any) => {\r\n this.dialogRef.close();\r\n if (this.functionType === GroupFunctionType.CREATE) {\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n alertType: AlertType.SUCCESS,\r\n isCloseNeeded: true,\r\n message: this.createGroupText?.message?.success?.submission,\r\n });\r\n }\r\n });\r\n this.dialogRef?.componentInstance?.formCancel\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.dialogRef.close();\r\n });\r\n }\r\n /**\r\n * Opens the confirmation modal to get user confirmation to delete the selected group.\r\n * @memberof GroupComponent\r\n */\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n openDeleteConfirmationModal(groupInfo: GroupInfo): void {\r\n const confirmationInfo = screenTexts?.deleteGroup?.confirmationInfo;\r\n const deleteGroupModalOptions = {\r\n leftButtonLabel: confirmationInfo?.leftButtonLabel,\r\n rightButtonLabel: confirmationInfo?.rightButtonLabel,\r\n promptMessage:\r\n confirmationInfo?.promptMessage + groupInfo.groupName + '?',\r\n actionButtonAlign: this.alignmentType.MIDDLE,\r\n };\r\n this.dialogRef = this.dialog.open(ModalConfirmationComponent, {\r\n data: deleteGroupModalOptions,\r\n width: 'auto',\r\n autoFocus: 'dialog'\r\n });\r\n this.dialogRef\r\n .afterClosed()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result: boolean) => {\r\n if (result) {\r\n this.deleteGroup(groupInfo);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * This method sends API Request to delete the selected group and handles the success and error response of the http request.\r\n * @memberof GroupComponent\r\n */\r\n deleteGroup(groupInfo: GroupInfo): void {\r\n const deleteGroupText = screenTexts?.deleteGroup;\r\n const deleteGroupPayload: DeleteGroupPayload = {\r\n payload: {\r\n groupId: groupInfo.groupId,\r\n },\r\n };\r\n this.groupsService\r\n .deleteGroup(deleteGroupPayload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n next: (res: any) => {\r\n this.dialogRef?.close();\r\n if (res?.status) {\r\n this.deletedGroupId = groupInfo.groupId;\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n alertType: AlertType.SUCCESS,\r\n isCloseNeeded: true,\r\n message:\r\n groupInfo.groupName +\r\n deleteGroupText?.message?.success?.deletion,\r\n });\r\n }\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes) && !error?.error?.status) {\r\n const errorMessage =\r\n this.groupsService.parseErrorMessage(errorCodes);\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Shows the search field on click of search icon in case of mobile view\r\n * @memberof GroupsComponent\r\n */\r\n onGroupSearch(): void {\r\n this.isGroupSearchActive = true;\r\n this.isGroupFilterActive = false;\r\n }\r\n\r\n /**\r\n * Shows the Filter by dropdown options on click of filter icon in case of mobile view\r\n * @memberof GroupsComponent\r\n */\r\n showGroupFilter(): void {\r\n this.isGroupFilterActive = true;\r\n this.isGroupSearchActive = false;\r\n }\r\n\r\n /**\r\n * Sets isGroupSearchOrFilterActive to true and loads the groups those are configured with selected group type.\r\n * @param {string} searchTerm\r\n * @memberof GroupsComponent\r\n */\r\n onGroupSearchClick(searchTerm: string): void {\r\n this.isGroupSearchOrFilterActive = !!searchTerm;\r\n }\r\n /**\r\n * Sets select group type options from groupTypes response\r\n * @return {*} {SelectOption[]}\r\n * @memberof GroupsComponent\r\n */\r\n getGroupTypeOptions(): SelectOption[] {\r\n this.legendColor();\r\n const groupTypeOptions: SelectOption[] = [];\r\n Object.entries(this.groupTypes).forEach((node) => {\r\n groupTypeOptions.push({ id: node[0], name: node[1].name });\r\n });\r\n return groupTypeOptions;\r\n }\r\n /**\r\n * Sets legend color from groupTypes response\r\n * @memberof GroupsComponent\r\n */\r\n legendColor(): void {\r\n Object.entries(this.groupTypes).forEach((node) => {\r\n this.groupsLegends.push({\r\n color: node[1].legendColor,\r\n label: node[1].name,\r\n });\r\n });\r\n }\r\n /**\r\n * Sets the isGroupSearchOrFilterActive flag and loads parent group info as per selected filter option.\r\n * @param {SelectOption} event\r\n * @memberof GroupsComponent\r\n */\r\n onGroupTypeFiltered(event: SelectOption): void {\r\n this.selectedGroupType = event;\r\n this.isGroupSearchOrFilterActive = true;\r\n this.getGroupsPayload = {\r\n groupId: '',\r\n groupTypeId: this.selectedGroupType?.id as string,\r\n };\r\n this.getGroups();\r\n }\r\n\r\n /**\r\n * Loads all the parent groups information.\r\n * @memberof GroupsComponent\r\n */\r\n getGroups(group?: GroupInfo): void {\r\n if (group) {\r\n this.getGroupsPayload = {\r\n groupId: group?.groupId ?? '',\r\n groupTypeId: '',\r\n };\r\n }\r\n this.groupsService\r\n .getGroups(this.getGroupsPayload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.status) {\r\n if (group) {\r\n this.childGroupsInfo = this.viewGroupResponse(response?.body);\r\n } else {\r\n this.parentGroupsInfo = this.viewGroupResponse(response?.body);\r\n }\r\n }\r\n },\r\n error: (error) => {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage =\r\n this.groupsService.parseErrorMessage(errorCodes);\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n /**\r\n * Sets groupType info with group response from groupType response\r\n * @param {GroupInfo[]} response\r\n * @return {*} {GroupInfo[]}\r\n * @memberof GroupsComponent\r\n */\r\n viewGroupResponse(response: GroupInfo[]): GroupInfo[] {\r\n response.forEach((node) => {\r\n const groupTypeInfo: GroupType = this.groupTypes[node.groupType];\r\n node.groupTypeInfo = groupTypeInfo;\r\n });\r\n return response;\r\n }\r\n\r\n /**\r\n * Loads the group types.\r\n * @memberof GroupsComponent\r\n */\r\n getGroupTypes(): void {\r\n this.groupsService\r\n .getGroupTypes()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res?.status) {\r\n this.groupTypes = res?.body?.configFieldValue;\r\n this.selectGroupOptions = this.getGroupTypeOptions();\r\n }\r\n },\r\n error: (error) => {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage =\r\n this.groupsService.parseErrorMessage(errorCodes);\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof GroupsComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-groups p-3 p-sm-4 p-md-4 p-lg-4\">\r\n <div\r\n class=\"ieeesa-groups__info d-flex justify-content-between pb-3\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'ieeesa-groups__info--white-bg'\r\n : 'ieeesa-groups__info--blue-bg'\r\n \"\r\n >\r\n <p\r\n [ngClass]=\"isMobileView ? 'ieeesa-title-lg-24' : 'ieeesa-headline-lg-34'\"\r\n >\r\n {{ groupsPageInfo.groupsTitle }}\r\n </p>\r\n <div>\r\n <button\r\n mat-button\r\n class=\"ieeesa-groups__create-subgroup mat-tertiary-button d-none d-sm-none d-md-block d-lg-block d-xl-block\"\r\n (click)=\"openCreateGroupForm()\"\r\n [attr.aria-label]=\"constants.viewGroups.ariaLabel.addGroup\"\r\n >\r\n {{ constants.viewGroups.addGroup }}\r\n </button>\r\n </div>\r\n <div\r\n class=\"d-flex d-sm-flex d-md-none d-lg-none d-xl-none ieeesa-groups__mobile-icons gap-2\"\r\n >\r\n <ieeesa-icon-button\r\n [iconButton]=\"createGroupIcon\"\r\n (iconButtonClick)=\"openCreateGroupForm()\"\r\n >\r\n </ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n [iconButton]=\"filterGroupIcon\"\r\n (iconButtonClick)=\"showGroupFilter()\"\r\n >\r\n </ieeesa-icon-button>\r\n <button\r\n mat-button\r\n [attr.aria-label]=\"constants.viewGroups.ariaLabel.search\"\r\n (click)=\"onGroupSearch()\"\r\n type=\"button\"\r\n >\r\n <i class=\"fa-solid fa-magnifying-glass search-group-icon\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div\r\n class=\"ieeesa-groups__actions\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'ieeesa-groups__actions--white-bg'\r\n : 'ieeesa-groups__actions--blue-bg'\r\n \"\r\n >\r\n <div class=\"ieeesa-groups__actions--search row\">\r\n <p\r\n class=\"ieeesa-body-md-16 order-2 order-sm-1 col-12 col-md-7 col-lg-7 col-xl-7\"\r\n >\r\n {{ groupsPageInfo.groupsDescription }}\r\n </p>\r\n <div\r\n *ngIf=\"\r\n ((isGroupSearchActive || isGroupFilterActive) && isMobileView) ||\r\n !isMobileView\r\n \"\r\n class=\"order-1 order-sm-2 col-12 col-md-5 col-lg-5 col-xl-5 d-flex flex-column\"\r\n >\r\n <ieeesa-search\r\n *ngIf=\"isGroupSearchActive || !isMobileView\"\r\n (searchValue)=\"onGroupSearchClick($event)\"\r\n [placeholderLabel]=\"searchPlaceHolderText\"\r\n ></ieeesa-search>\r\n <ieeesa-select\r\n *ngIf=\"isGroupFilterActive || !isMobileView\"\r\n class=\"align-self-end pt-lg-4 pt-md-4 pt-xl-4\"\r\n [dropdownOptions]=\"selectGroupOptions\"\r\n [isLabelAlignedLeft]=\"true\"\r\n [selectLabel]=\"constants.viewGroups.filterByLabel\"\r\n (optionSelected)=\"onGroupTypeFiltered($event)\"\r\n [placeholderText]=\"filterPlaceHolderText\"\r\n ></ieeesa-select>\r\n </div>\r\n </div>\r\n <ieeesa-tree\r\n *ngIf=\"parentGroupsInfo && parentGroupsInfo.length > 0\"\r\n [parentGroupsInfo]=\"parentGroupsInfo\"\r\n [childGroupsInfo]=\"childGroupsInfo\"\r\n [deletedGroupIdInfo]=\"deletedGroupId\"\r\n [isGroupSearchOrFilterActive]=\"isGroupSearchOrFilterActive\"\r\n (toggleGroupClick)=\"getGroups($event)\"\r\n (createGroupClick)=\"openCreateGroupForm()\"\r\n (deleteGroupClick)=\"openDeleteConfirmationModal($event)\"\r\n ></ieeesa-tree>\r\n <div\r\n *ngIf=\"parentGroupsInfo && parentGroupsInfo.length > 0\"\r\n class=\"d-flex flex-column flex-sm-row flex-md-row mt-4 justify-content-start justify-content-sm-end\"\r\n >\r\n <p class=\"px-sm-3 d-flex align-items-center ieeesa-label-lg-bold-16\">\r\n {{ constants.viewGroups.legend }}\r\n </p>\r\n <ieeesa-legend [legends]=\"groupsLegends\"></ieeesa-legend>\r\n </div>\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n ],\r\n exports: []\r\n})\r\nexport class GroupsModule { }\r\n","/*\r\n * Public API Surface of groups\r\n */\r\nexport * from './lib/components/create-group/create-group.component';\r\nexport * from './lib/components/tree-view/tree-view.component';\r\nexport * from './lib/groups.component';\r\n\r\nexport * from './lib/models/create-group.model';\r\nexport * from './lib/models/group-action.model';\r\nexport * from './lib/models/group-function-type.model';\r\nexport * from './lib/models/group-info.model';\r\nexport * from './lib/models/group-types.model';\r\nexport * from './lib/models/view-group.model';\r\n\r\nexport * from './lib/services/groups.service';\r\n\r\nexport * from './lib/assets/form-validations';\r\n\r\nexport * from './lib/groups.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["screenTexts?.errors","i1","screenTexts?.createGroup","i1.GroupsService","i2","i3","takeUntil","map","constants","screenTexts?.deleteGroup","i2.GroupsService","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ieeesa-npm-groups.mjs","sources":["../../../projects/groups/src/lib/assets/form-validations.ts","../../../projects/groups/src/lib/services/groups.service.ts","../../../projects/groups/src/lib/components/create-group/create-group.component.ts","../../../projects/groups/src/lib/components/create-group/create-group.component.html","../../../projects/groups/src/lib/models/group-action.model.ts","../../../projects/groups/src/lib/components/tree-view/tree-view.component.ts","../../../projects/groups/src/lib/components/tree-view/tree-view.component.html","../../../projects/groups/src/lib/models/group-function-type.model.ts","../../../projects/groups/src/lib/groups.component.ts","../../../projects/groups/src/lib/groups.component.html","../../../projects/groups/src/lib/groups.module.ts","../../../projects/groups/src/public-api.ts","../../../projects/groups/src/ieeesa-npm-groups.ts"],"sourcesContent":["/* eslint-disable no-useless-escape */\r\nexport const GroupsValidationPatterns = {\r\n // Group Name field regular expression, which accept Alpha Numeric, Special Characters (ASCII) and whitespace.\r\n groupName: /^(?!\\s+$)[\\w\\s!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\\\\]+$/,\r\n // Group Short Name field regular expression which accept letters, numbers and \".\",\",\" , \"/\", \"-\" , \"_\" characters.\r\n shortName: /^(?![\\s.\\/\\-_]*$)[a-zA-Z0-9.,\\/\\-_ ]+$/,\r\n // Group Scope field regular expression which accept Alpha Numeric, Special Characters and whitespace.\r\n groupScope: /^(?!\\s+$)[\\w\\s!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\\\\]+$/,\r\n};","import { Injectable } from '@angular/core';\r\nimport { Observable, map, catchError } from 'rxjs';\r\nimport {\r\n CreateGroupPayload,\r\n CreateGroupResponse,\r\n} from '../models/create-group.model';\r\nimport { GroupTypeResponse } from '../models/group-types.model';\r\nimport { AlertsService, HttpService } from '@ieeesa-npm/utility';\r\nimport { GetGroupResponse, GetGroupsPayload } from '../models/view-group.model';\r\nimport * as screenTexts from '../assets/constants.json';\r\nimport { DeleteGroupPayload } from '../models/delete-group.model';\r\n\r\n/**\r\n * Groups service is an abstract layer and responsible for managing groups REST API calls.\r\n * @class GroupsService\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class GroupsService {\r\n groupsText = screenTexts?.errors;\r\n apiBaseUrl!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n userPermission: any;\r\n // eslint-disable-next-line no-empty-function, no-unused-vars\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private httpService: HttpService,\r\n // eslint-disable-next-line no-unused-vars\r\n public alertService: AlertsService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n setAppConfig(apiBaseUrl: string, userPermission: any) {\r\n this.apiBaseUrl = apiBaseUrl;\r\n this.userPermission = userPermission;\r\n }\r\n /**\r\n * Gets application group types from API and returns it as an observable.\r\n * @return {Observable<GroupTypeResponse>} -It returns group types if success else error.\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getGroupTypes(): Observable<GroupTypeResponse> {\r\n return this.httpService\r\n .getData(`${this.apiBaseUrl}/configurations/group_type`)\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Returns all the groups based on passed group Id and group type.\r\n * @param {GetGroupsPayload} getGroupsPayload\r\n * @return {Observable<GetGroupResponse>}\r\n * @memberof GroupsService\r\n */\r\n getGroups(\r\n getGroupsPayload: GetGroupsPayload\r\n ): Observable<GetGroupResponse> {\r\n let url = 'rootGroups';\r\n if (getGroupsPayload.groupId)\r\n url = 'immChildGroupsByGroupId/' + getGroupsPayload.groupId;\r\n else if (getGroupsPayload.groupTypeId)\r\n url = 'groupsByGroupType/' + getGroupsPayload.groupTypeId;\r\n\r\n return this.httpService.getData(`${this.apiBaseUrl}/groups/${url}`).pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((errorRes) => {\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n /**\r\n * Deletes a group based on the provided information\r\n * @param {groupId} string -groupId of the group which is to be deleted\r\n * @return {*} {Observable<any>} -Observable representing the group deletion response\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n deleteGroup(deleteGroupPayload: DeleteGroupPayload): Observable<any> {\r\n return this.httpService\r\n .putData(`${this.apiBaseUrl}/groups/delete`, deleteGroupPayload)\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Posts create group form data to server using HttpService for creating new group.\r\n * @param {CreateGroupPayload} createGroupPayload -create group form data which includes group name, type, short name, scope.\r\n * @return {Observable<any>} -returns create group API response (success or error) as an observable.\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n createGroup(\r\n createGroupPayload: CreateGroupPayload\r\n ): Observable<CreateGroupResponse> {\r\n return this.httpService\r\n .postData(`${this.apiBaseUrl}/groups/create`, createGroupPayload)\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * This method will parse the error codes and return the respective error message for each code.\r\n * @param {string[]} errorCodes\r\n * @return {string[]} errorMessage\r\n * @memberof GroupsService\r\n */\r\n parseErrorMessage(errorCodes: string[]) {\r\n const errorMessage: string[] = [];\r\n errorCodes.forEach((item: string, index: number) => {\r\n const errorMessageKey = errorCodes[index] as keyof typeof this.groupsText;\r\n errorMessage.push(this.groupsText[errorMessageKey]);\r\n });\r\n return errorMessage;\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormGroup, Validators } from \"@angular/forms\";\r\nimport {\r\n FormGrid,\r\n FormModel,\r\n SelectOption,\r\n DynamicFormComponent,\r\n FormControlType,\r\n AlignType,\r\n} from \"@ieeesa-npm/presentation\";\r\nimport {\r\n AlertsService,\r\n AlertType,\r\n GlobalErrorHandlerService,\r\n} from \"@ieeesa-npm/utility\";\r\nimport * as screenTexts from \"../../assets/constants.json\";\r\nimport { GroupsValidationPatterns } from \"../../assets/form-validations\";\r\nimport { CreateGroupPayload } from \"../../models/create-group.model\";\r\nimport { GroupsService } from \"../../services/groups.service\";\r\nimport { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { MatDialogModule } from \"@angular/material/dialog\";\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { GroupType } from \"../../models/group-types.model\";\r\n\r\n/**\r\n * CreateGroupComponent uses DynamicFormComponent to build create new group form and implement the functionalities of submission of form and handling success and error scenarios.\r\n * @class CreateGroupComponent\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: \"ieeesa-create-group\",\r\n standalone: true,\r\n imports: [CommonModule, DynamicFormComponent, MatDialogModule],\r\n templateUrl: \"./create-group.component.html\",\r\n styleUrls: [\"./create-group.component.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [AlertsService],\r\n})\r\nexport class CreateGroupComponent implements OnInit, OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n /**\r\n * Event emitted when the form is successfully submitted.\r\n * @memberof CreateGroupComponent\r\n */\r\n @Output() submitFormResponse = new EventEmitter();\r\n /**\r\n * Event emitted when the form is cancelled.\r\n * @memberof CreateGroupComponent\r\n */\r\n @Output() formCancel = new EventEmitter();\r\n createGroupText = screenTexts?.createGroup;\r\n leftButtonLabel = this.createGroupText?.label?.leftButtonLabel;\r\n rightButtonLabel = this.createGroupText?.label?.rightButtonLabel;\r\n isLegendVisible = false;\r\n isLeftButtonNeeded = true;\r\n colWidth: FormGrid = { xs: 12, xl: 12, sm: 12, md: 12, lg: 12 };\r\n formGroup!: FormModel;\r\n groupTypes!: SelectOption[];\r\n actionButtonAlign = AlignType.LEFT;\r\n form!: FormGroup;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private groupsService: GroupsService,\r\n // eslint-disable-next-line no-unused-vars\r\n private globalErrorHandlerService: GlobalErrorHandlerService,\r\n // eslint-disable-next-line no-unused-vars\r\n public alertService: AlertsService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Initialize the create group form group array and component.\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n ngOnInit(): void {\r\n this.groupsService\r\n .getGroupTypes()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res?.status) {\r\n this.groupTypes = Object.entries(res.body.configFieldValue).map(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ([id, item]: [string, GroupType]) => ({\r\n id: id,\r\n name: item.name,\r\n })\r\n );\r\n if (this.groupTypes.length) {\r\n this.createFormGroup();\r\n }\r\n }\r\n },\r\n error: (error) => {\r\n if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Initialize the create group form group array.\r\n * @memberof CreateGroupComponent\r\n */\r\n createFormGroup(): void {\r\n this.formGroup = {\r\n formGroup: [\r\n {\r\n legend: \"\",\r\n controls: [\r\n {\r\n type: FormControlType.SELECT,\r\n label: this.createGroupText?.label?.groupType + \"*\",\r\n controlName: \"groupType\",\r\n requiredErrorMessage: this.createGroupText?.message?.error\r\n ?.required,\r\n value: \"\",\r\n validation: [Validators.required],\r\n dropdownOptions: this.groupTypes,\r\n supportMessage: this.createGroupText?.supportText?.groupType,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupType,\r\n placeholder: \"\",\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.groupType,\r\n },\r\n {\r\n type: FormControlType.INPUT,\r\n label: this.createGroupText?.label?.groupName + \"*\",\r\n controlName: \"groupName\",\r\n requiredErrorMessage: this.createGroupText?.message?.error\r\n ?.required,\r\n value: \"\",\r\n placeholder: \"\",\r\n supportMessage: this.createGroupText?.supportText?.groupName,\r\n patternErrorMessage: this.createGroupText?.message?.error?.pattern\r\n ?.groupName,\r\n validation: [\r\n Validators.required,\r\n Validators.maxLength(\r\n screenTexts?.createGroup?.characterLimit?.character500\r\n ),\r\n Validators.pattern(GroupsValidationPatterns.groupName),\r\n ],\r\n maxErrorMessage: this.createGroupText?.message?.error?.limit\r\n ?.groupName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupName,\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.groupName,\r\n },\r\n {\r\n type: FormControlType.INPUT,\r\n label: this.createGroupText?.label?.shortName + \"*\",\r\n controlName: \"shortName\",\r\n requiredErrorMessage: this.createGroupText?.message?.error\r\n ?.required,\r\n value: \"\",\r\n patternErrorMessage: this.createGroupText?.message?.error?.pattern\r\n ?.shortName,\r\n placeholder: \"\",\r\n supportMessage: this.createGroupText?.supportText?.shortName,\r\n validation: [\r\n Validators.required,\r\n Validators.maxLength(\r\n screenTexts?.createGroup?.characterLimit?.character15\r\n ),\r\n Validators.pattern(GroupsValidationPatterns.shortName),\r\n ],\r\n maxErrorMessage: this.createGroupText?.message?.error?.limit\r\n ?.shortName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.shortName,\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.shortName,\r\n },\r\n {\r\n type: FormControlType.TEXT_AREA,\r\n label: this.createGroupText?.label?.groupScope,\r\n controlName: \"groupScope\",\r\n patternErrorMessage: this.createGroupText?.message?.error?.pattern\r\n ?.groupScope,\r\n value: \"\",\r\n placeholder: \"\",\r\n supportMessage: this.createGroupText?.supportText?.groupScope,\r\n isResize: true,\r\n maxLength:\r\n screenTexts?.createGroup?.characterLimit?.character2000,\r\n validation: [\r\n Validators.maxLength(\r\n screenTexts?.createGroup?.characterLimit?.character1500\r\n ),\r\n Validators.pattern(GroupsValidationPatterns.groupScope),\r\n ],\r\n maxErrorMessage: this.createGroupText?.message?.error?.limit\r\n ?.groupScope,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupScope,\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.groupScope,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n }\r\n /**\r\n * Handles client side validation and emits create group information.\r\n * @param {FormGroup[]} form -Array of formGroup\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n onFormSubmit(form: FormGroup[]): void {\r\n form[0]?.markAllAsTouched();\r\n if (form[0].status === \"VALID\") {\r\n const formResponse = form[0].getRawValue();\r\n const createGroupPayload: CreateGroupPayload = {\r\n payload: {\r\n groupName: formResponse?.groupName,\r\n groupShortName: formResponse?.shortName,\r\n groupType: formResponse?.groupType?.id,\r\n groupDesc: formResponse?.groupScope,\r\n groupParentId: null,\r\n },\r\n };\r\n this.groupsService\r\n .createGroup(createGroupPayload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res?.status) {\r\n this.submitFormResponse.emit(res);\r\n }\r\n },\r\n error: (error) => {\r\n const errorCodeArr: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodeArr)) {\r\n const errorMessage: string[] = this.groupsService.parseErrorMessage(errorCodeArr)\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Get form reference.\r\n * @param {FormGroup[]} form\r\n * @memberof CreateGroupComponent\r\n */\r\n getFormGroupReference(form: FormGroup[]) {\r\n this.form = form[0];\r\n }\r\n\r\n /**\r\n * Emits form cancel event.\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n createGroupCancelled(): void {\r\n this.formCancel.emit();\r\n }\r\n\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof CreateGroupComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<ieeesa-dynamic-form\r\n *ngIf=\"formGroup\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"isLegendVisible\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"formGroup\"\r\n [isLeftButtonNeeded]=\"isLeftButtonNeeded\"\r\n (formSubmit)=\"onFormSubmit($event)\"\r\n (formLeftButtonClicked)=\"createGroupCancelled()\"\r\n (formGroupsReference)=\"getFormGroupReference($event)\"\r\n></ieeesa-dynamic-form>","/* eslint-disable no-unused-vars */\r\nexport enum GroupAction {\r\n VIEW_ROSTER = 1,\r\n CREATE_SUB_GROUP = 2,\r\n EDIT_GROUP = 3,\r\n DELETE_GROUP = 4,\r\n EXPAND_GROUP_VIEW = 5,\r\n COLLAPSE_GROUP_VIEW = 6,\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Injectable,\r\n Input,\r\n OnInit,\r\n Output,\r\n AfterViewInit,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport {\r\n MenuComponent,\r\n Menu,\r\n IconButtonComponent,\r\n IconButton,\r\n} from '@ieeesa-npm/presentation';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { GroupAction } from '../../models/group-action.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n CollectionViewer,\r\n SelectionChange,\r\n DataSource,\r\n} from '@angular/cdk/collections';\r\nimport { FlatTreeControl } from '@angular/cdk/tree';\r\nimport { BehaviorSubject, merge, Observable, Subject } from 'rxjs';\r\nimport { map, takeUntil } from 'rxjs/operators';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTreeModule, MatTreeNodePadding } from '@angular/material/tree';\r\nimport { GroupInfo } from '../../models/group-info.model';\r\n\r\n/**\r\n * Dynamic Flat node creates a node structure\r\n * @export\r\n * @class GroupNode\r\n */\r\nexport class GroupNode {\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public item: GroupInfo,\r\n // eslint-disable-next-line no-unused-vars\r\n public level = 1,\r\n // eslint-disable-next-line no-unused-vars\r\n public expandable = false,\r\n // eslint-disable-next-line no-unused-vars\r\n public isLoading = false // eslint-disable-next-line no-empty-function\r\n ) {}\r\n}\r\n\r\n/**\r\n * Groups stores the parent nodes and child nodes\r\n * @export\r\n * @class Groups\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class Groups {\r\n rootLevelNodes!: GroupInfo[];\r\n /** Initial data from database */\r\n private childGroups!: GroupInfo[];\r\n /**\r\n * Get the Child groups info\r\n * @return {*} {GroupInfo[]}\r\n * @memberof Groups\r\n */\r\n getChildGroupsInfo(): GroupInfo[] {\r\n return this.childGroups;\r\n }\r\n /**\r\n * Sets the Child groups info\r\n * @param {GroupInfo[]} value\r\n * @memberof Groups\r\n */\r\n setChildGroupsInfo(value: GroupInfo[]): void {\r\n this.childGroups = value;\r\n }\r\n /**\r\n * Initialize the groups data and creates the node structure for mat tree\r\n * @param {GroupInfo[]} data\r\n * @return {*} {GroupNode[]}\r\n * @memberof Groups\r\n */\r\n initialData(data: GroupInfo[]): GroupNode[] {\r\n this.rootLevelNodes = data;\r\n return this.rootLevelNodes.map(\r\n (node) => new GroupNode(node, 0, this.isExpandable(node))\r\n );\r\n }\r\n /**\r\n * Checks the node is expandable or not\r\n * @param {GroupInfo} node\r\n * @return {*} {boolean}\r\n * @memberof Groups\r\n */\r\n isExpandable(node: GroupInfo): boolean {\r\n return (!!node.children && node.children.length > 0) || node.hasChildren;\r\n }\r\n}\r\n/**\r\n * Dynamic Data Source handles the connection with dynamic data base\r\n * @export\r\n * @class GroupsDataSource\r\n * @implements {DataSource<GroupNode>}\r\n */\r\nexport class GroupsDataSource implements DataSource<GroupNode> {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n dataChange = new BehaviorSubject<GroupNode[]>([]);\r\n /**\r\n * Gets the updated tree control data\r\n * @type {GroupNode[]}\r\n * @memberof GroupsDataSource\r\n */\r\n get data(): GroupNode[] {\r\n return this.dataChange.value;\r\n }\r\n /**\r\n * Sets the data to tree control and emit the value to intimate the data change\r\n * @memberof GroupsDataSource\r\n */\r\n set data(value: GroupNode[]) {\r\n this.treeControl.dataNodes = value;\r\n this.dataChange.next(value);\r\n }\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private treeControl: FlatTreeControl<GroupNode>,\r\n // eslint-disable-next-line no-unused-vars\r\n private database: Groups // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Handles the connection between the data base and mat tree\r\n * @param {CollectionViewer} collectionViewer\r\n * @return {*} {Observable<GroupNode[]>}\r\n * @memberof GroupsDataSource\r\n */\r\n connect(collectionViewer: CollectionViewer): Observable<GroupNode[]> {\r\n this.treeControl.expansionModel.changed\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((change) => {\r\n if (\r\n (change as SelectionChange<GroupNode>).added ||\r\n (change as SelectionChange<GroupNode>).removed\r\n ) {\r\n this.handleTreeControl(change as SelectionChange<GroupNode>);\r\n }\r\n });\r\n return merge(collectionViewer.viewChange, this.dataChange).pipe(\r\n map(() => this.data)\r\n );\r\n }\r\n /**\r\n * Disconnect the connection with mat tree\r\n * @param {CollectionViewer} collectionViewer\r\n * @memberof GroupsDataSource\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function, no-empty-function, no-unused-vars, @typescript-eslint/no-unused-vars\r\n disconnect(collectionViewer: CollectionViewer): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n\r\n /**\r\n * Adds/removes the child nodes while expands/collapses the parent node\r\n * @param {SelectionChange<GroupNode>} change\r\n * @memberof GroupsDataSource\r\n */\r\n handleTreeControl(change: SelectionChange<GroupNode>) {\r\n if (change.added) {\r\n change.added.forEach((node) => this.toggleNode(node, true));\r\n }\r\n if (change.removed) {\r\n change.removed\r\n .slice()\r\n .reverse()\r\n .forEach((node) => this.toggleNode(node, false));\r\n }\r\n }\r\n\r\n /**\r\n * Toggle the node, add/removes the node from display\r\n * @param {GroupNode} clickedNode\r\n * @param {boolean} expand\r\n * @return {*}\r\n * @memberof GroupsDataSource\r\n */\r\n toggleNode(clickedNode: GroupNode, expand: boolean) {\r\n const children = this.database.getChildGroupsInfo();\r\n const index = this.data.indexOf(clickedNode);\r\n if (!children || index < 0) {\r\n // If no children, or cannot find the node, no op\r\n return;\r\n }\r\n\r\n if (expand) {\r\n const nodes = children.map(\r\n (node) =>\r\n new GroupNode(\r\n node,\r\n clickedNode.level + 1,\r\n this.database.isExpandable(node)\r\n )\r\n );\r\n this.data.splice(index + 1, 0, ...nodes);\r\n } else {\r\n let count = 0;\r\n for (\r\n let i = index + 1;\r\n i < this.data.length && this.data[i].level > clickedNode.level;\r\n i++, count++ // eslint-disable-next-line no-empty\r\n ) {}\r\n this.data.splice(index + 1, count);\r\n }\r\n\r\n // Notify the change\r\n this.dataChange.next(this.data);\r\n }\r\n}\r\n/**\r\n * Displays the groups where parent/child relationships are represented in a tree view/hierarchy.\r\n * @export\r\n * @class TreeViewComponent\r\n * @implements {OnInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-tree',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatTreeModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MenuComponent,\r\n IconButtonComponent,\r\n ],\r\n templateUrl: './tree-view.component.html',\r\n styleUrls: ['./tree-view.component.scss'],\r\n})\r\nexport class TreeViewComponent implements OnInit, AfterViewInit, OnDestroy {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n buttons: Menu[] = this.constants?.viewGroups?.buttons;\r\n treePaddingIndent: number = this.constants?.viewGroups?.treePaddingIndent;\r\n selectedGroup!: GroupNode;\r\n selectedGroupAction!: Menu | IconButton;\r\n treeControl!: FlatTreeControl<GroupNode>;\r\n dataSource!: GroupsDataSource;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n matTreeNodePadding!: MatTreeNodePadding<GroupNode>;\r\n plusCircleIconButton: IconButton = this.buttons[4];\r\n minusCircleIconButton: IconButton = this.buttons[5];\r\n menuItems: Menu[] = this.buttons.filter(\r\n (e) =>\r\n e.id !== GroupAction.EXPAND_GROUP_VIEW &&\r\n e.id !== GroupAction.COLLAPSE_GROUP_VIEW\r\n );\r\n private parentGroups!: GroupInfo[];\r\n @Input()\r\n set parentGroupsInfo(value: GroupInfo[]) {\r\n this.parentGroups = value;\r\n if (value) this.setGroupDataSource();\r\n }\r\n get parentGroupsInfo(): GroupInfo[] {\r\n return this.parentGroups;\r\n }\r\n private childGroups!: GroupInfo[];\r\n @Input()\r\n set childGroupsInfo(value: GroupInfo[]) {\r\n this.childGroups = value;\r\n this.loadChildGroups();\r\n }\r\n get childGroupsInfo(): GroupInfo[] {\r\n return this.childGroups;\r\n }\r\n private isGroupSearchOrFilter = false;\r\n @Input()\r\n set isGroupSearchOrFilterActive(value: boolean) {\r\n this.isGroupSearchOrFilter = value;\r\n }\r\n get isGroupSearchOrFilterActive(): boolean {\r\n return this.isGroupSearchOrFilter;\r\n }\r\n private deletedGroupId!: string | undefined;\r\n @Input()\r\n set deletedGroupIdInfo(id: string) {\r\n this.deletedGroupId = id;\r\n this.deleteGroupNode(this.deletedGroupId);\r\n }\r\n get deletedGroupIdInfo(): string | undefined {\r\n return this.deletedGroupId;\r\n }\r\n\r\n @Output() toggleGroupClick = new EventEmitter<GroupInfo>();\r\n @Output() createGroupClick = new EventEmitter<GroupInfo>();\r\n @Output() editGroupClick = new EventEmitter<GroupInfo>();\r\n @Output() deleteGroupClick = new EventEmitter<GroupInfo>();\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(public database: Groups, public elementRef: ElementRef) {}\r\n /**\r\n * Initializes the tree view component\r\n * @memberof TreeViewComponent\r\n */\r\n ngOnInit(): void {\r\n this.setGroupDataSource();\r\n }\r\n /**\r\n * Assign ARIA role for all mat tree nodes as \"row\"\r\n * @memberof TreeViewComponent\r\n */\r\n ngAfterViewInit(): void {\r\n this.dataSource.dataChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n const treeItemNodes =\r\n this.elementRef.nativeElement.querySelectorAll('[role=treeitem]');\r\n treeItemNodes?.forEach((node: HTMLElement) => (node.role = 'row'));\r\n });\r\n }\r\n /**\r\n * Gets the level of the node\r\n * @param {GroupNode} node\r\n * @memberof TreeViewComponent\r\n */\r\n getLevel = (node: GroupNode) => node.level;\r\n\r\n /**\r\n * Checks the node is expandable or not\r\n * @param {GroupNode} node\r\n * @memberof TreeViewComponent\r\n */\r\n isExpandable = (node: GroupNode) => node.expandable;\r\n\r\n /**\r\n * Returns true if passed node has children otherwise false\r\n * @param {number} index\r\n * @param {GroupNode} node\r\n * @return {boolean}\r\n * @memberof TreeViewComponent\r\n */\r\n hasChildGroups = (index: number, _nodeData: GroupNode) =>\r\n _nodeData.expandable;\r\n /**\r\n * Emits the group info when the toggle group is clicked or toggles the group view\r\n * @param {GroupNode} group\r\n * @memberof TreeViewComponent\r\n */\r\n viewChildGroups(node: GroupNode) {\r\n if (!node.item.hasChildren) {\r\n return;\r\n }\r\n if (this.treeControl.isExpanded(node)) {\r\n this.treeControl.toggle(node);\r\n } else {\r\n this.toggleGroupClick.emit(node.item);\r\n this.selectedGroup = node;\r\n }\r\n }\r\n /**\r\n * Sets the box shadow based on the group type legend color\r\n * @param {string} color\r\n * @return {*}\r\n * @memberof TreeViewComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getBoxShadow(color: string): any {\r\n return {\r\n boxShadow:\r\n '0px 1px 0px 0px #c9cbd0 inset, 6px 0px 0px 0px ' + color + ' inset',\r\n };\r\n }\r\n /**\r\n * Sets the dataSource with parent groups data\r\n * @memberof TreeViewComponent\r\n */\r\n setGroupDataSource(): void {\r\n this.treeControl = new FlatTreeControl<GroupNode>(\r\n this.getLevel,\r\n this.isExpandable\r\n );\r\n this.dataSource = new GroupsDataSource(this.treeControl, this.database);\r\n this.dataSource.data = this.database.initialData(this.parentGroupsInfo);\r\n }\r\n /**\r\n * Loads the child groups and updates the tree view.\r\n * @memberof TreeViewComponent\r\n */\r\n loadChildGroups() {\r\n this.database.setChildGroupsInfo(this.childGroupsInfo);\r\n if (this.selectedGroup) this.treeControl.toggle(this.selectedGroup);\r\n }\r\n /**\r\n * Deletes the selected group and updates the tree view.\r\n * @param {string} deletedGroupId\r\n * @memberof TreeViewComponent\r\n */\r\n deleteGroupNode(deletedGroupId: string): void {\r\n if (this.treeControl && deletedGroupId) {\r\n const groupDataSource: GroupNode[] = this.treeControl.dataNodes.filter(\r\n (e) => e.item.groupId !== deletedGroupId\r\n );\r\n this.dataSource.data = groupDataSource;\r\n this.deletedGroupId = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the selected menu group action\r\n * @param {Menu} menu\r\n * @memberof TreeViewComponent\r\n */\r\n onGroupActionsClick(menu: Menu | IconButton): void {\r\n this.selectedGroupAction = menu;\r\n }\r\n /**\r\n * Changes the expand/collapse icon based on the toggle\r\n * @param {GroupNode} group\r\n * @return {*} {*}\r\n * @memberof TreeViewComponent\r\n */\r\n getToggleButtonInfo(group: GroupNode): IconButton {\r\n if (this.treeControl.isExpanded(group)) return this.minusCircleIconButton;\r\n return this.plusCircleIconButton;\r\n }\r\n /**\r\n * Handles the emitted group actions event\r\n * @param {GroupInfo} group\r\n * @memberof TreeViewComponent\r\n */\r\n handleGroupActions(group: GroupNode): void {\r\n if (this.selectedGroupAction?.id === GroupAction.VIEW_ROSTER) {\r\n this.viewChildGroups(group);\r\n } else if (this.selectedGroupAction?.id === GroupAction.CREATE_SUB_GROUP) {\r\n this.createGroupClick.emit(group.item);\r\n } else if (this.selectedGroupAction?.id === GroupAction.EDIT_GROUP) {\r\n this.editGroupClick.emit(group.item);\r\n } else if (this.selectedGroupAction?.id === GroupAction.DELETE_GROUP) {\r\n this.deleteGroupClick.emit(group.item);\r\n }\r\n }\r\n /**\r\n * Returns the filtered menu items based on groups hasChildren.\r\n * @param {GroupNode} group\r\n * @return {Menu[]}\r\n * @memberof TreeViewComponent\r\n */\r\n getFilteredGroupActions(group: GroupNode): Menu[] {\r\n this.menuItems.forEach((e) => (e.isToolTipNeeded = false));\r\n return this.menuItems.filter(\r\n (e) =>\r\n (e.id !== GroupAction.DELETE_GROUP && group.item.hasChildren) ||\r\n (e.id !== GroupAction.CREATE_SUB_GROUP && !group.item.hasChildren)\r\n );\r\n }\r\n /**\r\n * Takes the index and the icon button as arguments and needs to return the unique identifier for this icon button.\r\n * @param {number} index\r\n * @param {IconButton} iconButton\r\n * @return {number}\r\n * @memberof TreeViewComponent\r\n */\r\n trackByFn(index: number, iconButton: IconButton): number {\r\n return iconButton.id;\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof GroupsComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <div role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\" role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum GroupFunctionType {\r\n CREATE = \"CREATE\",\r\n EDIT = \"EDIT\"\r\n}","import { CommonModule } from '@angular/common';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport {\r\n Component,\r\n Input,\r\n OnDestroy,\r\n ViewEncapsulation,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\r\nimport { CreateGroupComponent } from './components/create-group/create-group.component';\r\nimport { GroupsService } from './services/groups.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { GroupInfo } from './models/group-info.model';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport {\r\n SearchComponent,\r\n ModalComponent,\r\n SelectOption,\r\n SelectComponent,\r\n Legend,\r\n IconButtonComponent,\r\n IconButton,\r\n AlignType,\r\n ModalConfirmationComponent,\r\n LegendComponent,\r\n} from '@ieeesa-npm/presentation';\r\nimport { TreeViewComponent } from './components/tree-view/tree-view.component';\r\nimport { GroupType } from './models/group-types.model';\r\nimport {\r\n ModalType,\r\n AlertType,\r\n GlobalErrorHandlerService,\r\n BreakpointObserverService,\r\n AlertsService,\r\n} from '@ieeesa-npm/utility';\r\nimport * as screenTexts from './assets/constants.json';\r\nimport { GroupFunctionType } from './models/group-function-type.model';\r\nimport { GetGroupsPayload } from './models/view-group.model';\r\nimport { DeleteGroupPayload } from './models/delete-group.model';\r\n\r\n/**\r\n * Groups component is a wrapper or container component for groups management reusable component and in this component integrates all group management functionalities and this will be entry component for managing groups when it is consumed in other applications.\r\n * @class GroupsComponent\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: 'ieeesa-groups',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatDialogModule,\r\n MatButtonModule,\r\n SearchComponent,\r\n SelectComponent,\r\n TreeViewComponent,\r\n LegendComponent,\r\n IconButtonComponent,\r\n ],\r\n templateUrl: './groups.component.html',\r\n styleUrls: ['./groups.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [AlertsService],\r\n})\r\nexport class GroupsComponent implements OnInit, OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n dialogRef: any;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = screenTexts;\r\n viewGroupTexts = this.constants?.viewGroups;\r\n isGroupSearchActive = false;\r\n isGroupFilterActive = false;\r\n isGroupSearchOrFilterActive = false;\r\n isMobileView = false;\r\n childGroupsInfo!: GroupInfo[];\r\n selectedGroupType!: SelectOption;\r\n parentGroupsInfo!: GroupInfo[];\r\n selectGroupOptions!: SelectOption[];\r\n deletedGroupId!: string;\r\n groupTypes!: { [key: string]: GroupType };\r\n searchPlaceHolderText: string = this.viewGroupTexts?.placeholderText?.search;\r\n filterPlaceHolderText: string = this.viewGroupTexts?.placeholderText?.filter;\r\n createGroupIcon: IconButton = {\r\n id: 1,\r\n ariaLabel: this.viewGroupTexts?.ariaLabel.add,\r\n iconURL: this.viewGroupTexts?.createGroupIcon,\r\n toolTip: this.viewGroupTexts?.ariaLabel.add,\r\n };\r\n filterGroupIcon: IconButton = {\r\n id: 2,\r\n ariaLabel: this.viewGroupTexts?.ariaLabel.filter,\r\n iconURL: this.viewGroupTexts?.filterGroupIcon,\r\n toolTip: this.viewGroupTexts?.ariaLabel.filter,\r\n };\r\n groupsLegends: Legend[] = [];\r\n getGroupsPayload: GetGroupsPayload = { groupId: '', groupTypeId: '' };\r\n @Input() groupsPageInfo: {\r\n groupsTitle: string;\r\n groupsDescription: string;\r\n } = {\r\n groupsTitle: this.viewGroupTexts?.groupsTitle,\r\n groupsDescription: this.viewGroupTexts?.groupsDescription,\r\n };\r\n @Input() applicationId!: string;\r\n @Input() apiBaseURL!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Input() permissions!: any;\r\n createGroupText = screenTexts?.createGroup;\r\n functionType!: GroupFunctionType;\r\n alignmentType = AlignType;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public dialog: MatDialog,\r\n // eslint-disable-next-line no-unused-vars\r\n private groupsService: GroupsService,\r\n // eslint-disable-next-line no-unused-vars\r\n public alertService: AlertsService,\r\n // eslint-disable-next-line no-unused-vars\r\n private breakpointObserverService: BreakpointObserverService,\r\n // eslint-disable-next-line no-unused-vars\r\n private globalErrorHandlerService: GlobalErrorHandlerService\r\n ) {\r\n this.breakpointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.isMobileView = result.matches;\r\n });\r\n }\r\n\r\n /**\r\n * Initialize the groups component.\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n ngOnInit(): void {\r\n this.groupsService.setAppConfig(this.apiBaseURL, this.permissions);\r\n this.getGroupTypes();\r\n this.getGroups();\r\n }\r\n\r\n /**\r\n * Sets the dialog options for create group modal and calls openModal method.\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n openCreateGroupForm(): void {\r\n const dialogOptions = {\r\n heading: this.createGroupText?.heading,\r\n isCloseNeeded: true,\r\n componentReference: CreateGroupComponent,\r\n modalType: ModalType.FORM,\r\n };\r\n this.functionType = GroupFunctionType.CREATE;\r\n this.openModal(dialogOptions, 'ieeesa-create-group');\r\n }\r\n\r\n /**\r\n * Opens modal component with for received params and handles form submission success and errors.\r\n * @param {*} dialogOptions\r\n * @param {string} [className]\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-inferrable-types\r\n openModal(dialogOptions: any, className?: string): void {\r\n className = className ?? '';\r\n this.dialogRef = this.dialog.open(ModalComponent, {\r\n data: dialogOptions,\r\n width: 'auto',\r\n panelClass: ['ieeesa-modal-dialog', className],\r\n ariaModal: true,\r\n });\r\n this.dialogRef?.componentInstance?.submitFormResponse\r\n .pipe(takeUntil(this.destroy$))\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, no-unused-vars\r\n .subscribe((result: any) => {\r\n this.dialogRef.close();\r\n if (this.functionType === GroupFunctionType.CREATE) {\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n alertType: AlertType.SUCCESS,\r\n isCloseNeeded: true,\r\n message: this.createGroupText?.message?.success?.submission,\r\n });\r\n }\r\n });\r\n this.dialogRef?.componentInstance?.formCancel\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.dialogRef.close();\r\n });\r\n }\r\n /**\r\n * Opens the confirmation modal to get user confirmation to delete the selected group.\r\n * @memberof GroupComponent\r\n */\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n openDeleteConfirmationModal(groupInfo: GroupInfo): void {\r\n const confirmationInfo = screenTexts?.deleteGroup?.confirmationInfo;\r\n const deleteGroupModalOptions = {\r\n leftButtonLabel: confirmationInfo?.leftButtonLabel,\r\n rightButtonLabel: confirmationInfo?.rightButtonLabel,\r\n promptMessage:\r\n confirmationInfo?.promptMessage + groupInfo.groupName + '?',\r\n actionButtonAlign: this.alignmentType.MIDDLE,\r\n };\r\n this.dialogRef = this.dialog.open(ModalConfirmationComponent, {\r\n data: deleteGroupModalOptions,\r\n width: 'auto',\r\n autoFocus: 'dialog'\r\n });\r\n this.dialogRef\r\n .afterClosed()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result: boolean) => {\r\n if (result) {\r\n this.deleteGroup(groupInfo);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * This method sends API Request to delete the selected group and handles the success and error response of the http request.\r\n * @memberof GroupComponent\r\n */\r\n deleteGroup(groupInfo: GroupInfo): void {\r\n const deleteGroupText = screenTexts?.deleteGroup;\r\n const deleteGroupPayload: DeleteGroupPayload = {\r\n payload: {\r\n groupId: groupInfo.groupId,\r\n },\r\n };\r\n this.groupsService\r\n .deleteGroup(deleteGroupPayload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n next: (res: any) => {\r\n this.dialogRef?.close();\r\n if (res?.status) {\r\n this.deletedGroupId = groupInfo.groupId;\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n alertType: AlertType.SUCCESS,\r\n isCloseNeeded: true,\r\n message:\r\n groupInfo.groupName +\r\n deleteGroupText?.message?.success?.deletion,\r\n });\r\n }\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes) && !error?.error?.status) {\r\n const errorMessage =\r\n this.groupsService.parseErrorMessage(errorCodes);\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Shows the search field on click of search icon in case of mobile view\r\n * @memberof GroupsComponent\r\n */\r\n onGroupSearch(): void {\r\n this.isGroupSearchActive = true;\r\n this.isGroupFilterActive = false;\r\n }\r\n\r\n /**\r\n * Shows the Filter by dropdown options on click of filter icon in case of mobile view\r\n * @memberof GroupsComponent\r\n */\r\n showGroupFilter(): void {\r\n this.isGroupFilterActive = true;\r\n this.isGroupSearchActive = false;\r\n }\r\n\r\n /**\r\n * Sets isGroupSearchOrFilterActive to true and loads the groups those are configured with selected group type.\r\n * @param {string} searchTerm\r\n * @memberof GroupsComponent\r\n */\r\n onGroupSearchClick(searchTerm: string): void {\r\n this.isGroupSearchOrFilterActive = !!searchTerm;\r\n }\r\n /**\r\n * Sets select group type options from groupTypes response\r\n * @return {*} {SelectOption[]}\r\n * @memberof GroupsComponent\r\n */\r\n getGroupTypeOptions(): SelectOption[] {\r\n this.legendColor();\r\n const groupTypeOptions: SelectOption[] = [];\r\n Object.entries(this.groupTypes).forEach((node) => {\r\n groupTypeOptions.push({ id: node[0], name: node[1].name });\r\n });\r\n return groupTypeOptions;\r\n }\r\n /**\r\n * Sets legend color from groupTypes response\r\n * @memberof GroupsComponent\r\n */\r\n legendColor(): void {\r\n Object.entries(this.groupTypes).forEach((node) => {\r\n this.groupsLegends.push({\r\n color: node[1].legendColor,\r\n label: node[1].name,\r\n });\r\n });\r\n }\r\n /**\r\n * Sets the isGroupSearchOrFilterActive flag and loads parent group info as per selected filter option.\r\n * @param {SelectOption} event\r\n * @memberof GroupsComponent\r\n */\r\n onGroupTypeFiltered(event: SelectOption): void {\r\n this.selectedGroupType = event;\r\n this.isGroupSearchOrFilterActive = true;\r\n this.getGroupsPayload = {\r\n groupId: '',\r\n groupTypeId: this.selectedGroupType?.id as string,\r\n };\r\n this.getGroups();\r\n }\r\n\r\n /**\r\n * Loads all the parent groups information.\r\n * @memberof GroupsComponent\r\n */\r\n getGroups(group?: GroupInfo): void {\r\n if (group) {\r\n this.getGroupsPayload = {\r\n groupId: group?.groupId ?? '',\r\n groupTypeId: '',\r\n };\r\n }\r\n this.groupsService\r\n .getGroups(this.getGroupsPayload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.status) {\r\n if (group) {\r\n this.childGroupsInfo = this.viewGroupResponse(response?.body);\r\n } else {\r\n this.parentGroupsInfo = this.viewGroupResponse(response?.body);\r\n }\r\n }\r\n },\r\n error: (error) => {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage =\r\n this.groupsService.parseErrorMessage(errorCodes);\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n /**\r\n * Sets groupType info with group response from groupType response\r\n * @param {GroupInfo[]} response\r\n * @return {*} {GroupInfo[]}\r\n * @memberof GroupsComponent\r\n */\r\n viewGroupResponse(response: GroupInfo[]): GroupInfo[] {\r\n response.forEach((node) => {\r\n const groupTypeInfo: GroupType = this.groupTypes[node.groupType];\r\n node.groupTypeInfo = groupTypeInfo;\r\n });\r\n return response;\r\n }\r\n\r\n /**\r\n * Loads the group types.\r\n * @memberof GroupsComponent\r\n */\r\n getGroupTypes(): void {\r\n this.groupsService\r\n .getGroupTypes()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res?.status) {\r\n this.groupTypes = res?.body?.configFieldValue;\r\n this.selectGroupOptions = this.getGroupTypeOptions();\r\n }\r\n },\r\n error: (error) => {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage =\r\n this.groupsService.parseErrorMessage(errorCodes);\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof GroupsComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-groups p-3 p-sm-4 p-md-4 p-lg-4\">\r\n <div\r\n class=\"ieeesa-groups__info d-flex justify-content-between pb-3\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'ieeesa-groups__info--white-bg'\r\n : 'ieeesa-groups__info--blue-bg'\r\n \"\r\n >\r\n <p\r\n [ngClass]=\"isMobileView ? 'ieeesa-title-lg-24' : 'ieeesa-headline-lg-34'\"\r\n >\r\n {{ groupsPageInfo.groupsTitle }}\r\n </p>\r\n <div>\r\n <button\r\n mat-button\r\n class=\"ieeesa-groups__create-subgroup mat-tertiary-button d-none d-sm-none d-md-block d-lg-block d-xl-block\"\r\n (click)=\"openCreateGroupForm()\"\r\n [attr.aria-label]=\"constants.viewGroups.ariaLabel.addGroup\"\r\n >\r\n {{ constants.viewGroups.addGroup }}\r\n </button>\r\n </div>\r\n <div\r\n class=\"d-flex d-sm-flex d-md-none d-lg-none d-xl-none ieeesa-groups__mobile-icons gap-2\"\r\n >\r\n <ieeesa-icon-button\r\n [iconButton]=\"createGroupIcon\"\r\n (iconButtonClick)=\"openCreateGroupForm()\"\r\n >\r\n </ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n [iconButton]=\"filterGroupIcon\"\r\n (iconButtonClick)=\"showGroupFilter()\"\r\n >\r\n </ieeesa-icon-button>\r\n <button\r\n mat-button\r\n [attr.aria-label]=\"constants.viewGroups.ariaLabel.search\"\r\n (click)=\"onGroupSearch()\"\r\n type=\"button\"\r\n >\r\n <i class=\"fa-solid fa-magnifying-glass search-group-icon\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div\r\n class=\"ieeesa-groups__actions\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'ieeesa-groups__actions--white-bg'\r\n : 'ieeesa-groups__actions--blue-bg'\r\n \"\r\n >\r\n <div class=\"ieeesa-groups__actions--search row\">\r\n <p\r\n class=\"ieeesa-body-md-16 order-2 order-sm-1 col-12 col-md-7 col-lg-7 col-xl-7\"\r\n >\r\n {{ groupsPageInfo.groupsDescription }}\r\n </p>\r\n <div\r\n *ngIf=\"\r\n ((isGroupSearchActive || isGroupFilterActive) && isMobileView) ||\r\n !isMobileView\r\n \"\r\n class=\"order-1 order-sm-2 col-12 col-md-5 col-lg-5 col-xl-5 d-flex flex-column\"\r\n >\r\n <ieeesa-search\r\n *ngIf=\"isGroupSearchActive || !isMobileView\"\r\n (searchValue)=\"onGroupSearchClick($event)\"\r\n [placeholderLabel]=\"searchPlaceHolderText\"\r\n ></ieeesa-search>\r\n <ieeesa-select\r\n *ngIf=\"isGroupFilterActive || !isMobileView\"\r\n class=\"align-self-end pt-lg-4 pt-md-4 pt-xl-4\"\r\n [dropdownOptions]=\"selectGroupOptions\"\r\n [isLabelAlignedLeft]=\"true\"\r\n [selectLabel]=\"constants.viewGroups.filterByLabel\"\r\n (optionSelected)=\"onGroupTypeFiltered($event)\"\r\n [placeholderText]=\"filterPlaceHolderText\"\r\n ></ieeesa-select>\r\n </div>\r\n </div>\r\n <ieeesa-tree\r\n *ngIf=\"parentGroupsInfo && parentGroupsInfo.length > 0\"\r\n [parentGroupsInfo]=\"parentGroupsInfo\"\r\n [childGroupsInfo]=\"childGroupsInfo\"\r\n [deletedGroupIdInfo]=\"deletedGroupId\"\r\n [isGroupSearchOrFilterActive]=\"isGroupSearchOrFilterActive\"\r\n (toggleGroupClick)=\"getGroups($event)\"\r\n (createGroupClick)=\"openCreateGroupForm()\"\r\n (deleteGroupClick)=\"openDeleteConfirmationModal($event)\"\r\n ></ieeesa-tree>\r\n <div\r\n *ngIf=\"parentGroupsInfo && parentGroupsInfo.length > 0\"\r\n class=\"d-flex flex-column flex-sm-row flex-md-row mt-4 justify-content-start justify-content-sm-end\"\r\n >\r\n <p class=\"px-sm-3 d-flex align-items-center ieeesa-label-lg-bold-16\">\r\n {{ constants.viewGroups.legend }}\r\n </p>\r\n <ieeesa-legend [legends]=\"groupsLegends\"></ieeesa-legend>\r\n </div>\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n ],\r\n exports: []\r\n})\r\nexport class GroupsModule { }\r\n","/*\r\n * Public API Surface of groups\r\n */\r\nexport * from './lib/components/create-group/create-group.component';\r\nexport * from './lib/components/tree-view/tree-view.component';\r\nexport * from './lib/groups.component';\r\n\r\nexport * from './lib/models/create-group.model';\r\nexport * from './lib/models/group-action.model';\r\nexport * from './lib/models/group-function-type.model';\r\nexport * from './lib/models/group-info.model';\r\nexport * from './lib/models/group-types.model';\r\nexport * from './lib/models/view-group.model';\r\n\r\nexport * from './lib/services/groups.service';\r\n\r\nexport * from './lib/assets/form-validations';\r\n\r\nexport * from './lib/groups.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["screenTexts?.errors","i1","screenTexts?.createGroup","i1.GroupsService","i2","i3","takeUntil","map","constants","screenTexts?.deleteGroup","i2.GroupsService","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACa,MAAA,wBAAwB,GAAG;;AAEtC,IAAA,SAAS,EAAE,qDAAqD;;AAEhE,IAAA,SAAS,EAAE,wCAAwC;;AAEnD,IAAA,UAAU,EAAE,qDAAqD;;;ACKnE;;;AAGG;MAIU,aAAa,CAAA;;AAMxB,IAAA,WAAA;;IAEU,WAAwB;;AAEzB,IAAA,YAA2B;;QAF1B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QAEzB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAe;AATpC,QAAA,IAAA,CAAA,UAAU,GAAGA,MAAmB,CAAC;KAU7B;;IAGJ,YAAY,CAAC,UAAkB,EAAE,cAAmB,EAAA;AAClD,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;KACtC;AACD;;;;AAIG;;IAEH,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,WAAW;AACpB,aAAA,OAAO,CAAC,CAAG,EAAA,IAAI,CAAC,UAAU,4BAA4B,CAAC;AACvD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,OAAO,QAAQ,CAAC;AAClB,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,KAAK,CAAC;SACb,CAAC,CACH,CAAC;KACL;AAED;;;;;AAKG;AACH,IAAA,SAAS,CACP,gBAAkC,EAAA;QAElC,IAAI,GAAG,GAAG,YAAY,CAAC;QACvB,IAAI,gBAAgB,CAAC,OAAO;AAC1B,YAAA,GAAG,GAAG,0BAA0B,GAAG,gBAAgB,CAAC,OAAO,CAAC;aACzD,IAAI,gBAAgB,CAAC,WAAW;AACnC,YAAA,GAAG,GAAG,oBAAoB,GAAG,gBAAgB,CAAC,WAAW,CAAC;QAE5D,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA,EAAG,IAAI,CAAC,UAAU,CAAA,QAAA,EAAW,GAAG,CAAE,CAAA,CAAC,CAAC,IAAI,CACtE,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,OAAO,QAAQ,CAAC;AAClB,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,QAAQ,KAAI;AACtB,YAAA,MAAM,QAAQ,CAAC;SAChB,CAAC,CACH,CAAC;KACH;AACD;;;;;AAKG;;AAEH,IAAA,WAAW,CAAC,kBAAsC,EAAA;QAChD,OAAO,IAAI,CAAC,WAAW;aACpB,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAgB,cAAA,CAAA,EAAE,kBAAkB,CAAC;AAC/D,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,OAAO,QAAQ,CAAC;AAClB,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,KAAK,CAAC;SACb,CAAC,CACH,CAAC;KACL;AAED;;;;;AAKG;;AAEH,IAAA,WAAW,CACT,kBAAsC,EAAA;QAEtC,OAAO,IAAI,CAAC,WAAW;aACpB,QAAQ,CAAC,GAAG,IAAI,CAAC,UAAU,CAAgB,cAAA,CAAA,EAAE,kBAAkB,CAAC;AAChE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,OAAO,QAAQ,CAAC;AAClB,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,KAAK,CAAC;SACb,CAAC,CACH,CAAC;KACL;AAED;;;;;AAKG;AACH,IAAA,iBAAiB,CAAC,UAAoB,EAAA;QACpC,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,KAAa,KAAI;AACjD,YAAA,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAiC,CAAC;YAC1E,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;AACtD,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,YAAY,CAAC;KACrB;8GApHU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACcD;;;;;AAKG;MAWU,oBAAoB,CAAA;;AAuB/B,IAAA,WAAA;;IAEU,aAA4B;;IAE5B,yBAAoD;;AAErD,IAAA,YAA2B;;QAJ1B,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QAE5B,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB,CAA2B;QAErD,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAe;AA5BpC,QAAA,IAAA,CAAA,QAAQ,GAAqB,IAAI,OAAO,EAAW,CAAC;AACpD;;;AAGG;AACO,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAE,CAAC;AAClD;;;AAGG;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAE,CAAC;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAGC,WAAwB,CAAC;QAC3C,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,eAAe,CAAC;QAC/D,IAAgB,CAAA,gBAAA,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,gBAAgB,CAAC;QACjE,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;QACxB,IAAkB,CAAA,kBAAA,GAAG,IAAI,CAAC;QAC1B,IAAQ,CAAA,QAAA,GAAa,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAGhE,QAAA,IAAA,CAAA,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC;KAU/B;AAEJ;;;;AAIG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,aAAa;AACf,aAAA,aAAa,EAAE;AACf,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,GAAG,EAAE,MAAM,EAAE;AACf,oBAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG;;oBAE7D,CAAC,CAAC,EAAE,EAAE,IAAI,CAAsB,MAAM;AACpC,wBAAA,EAAE,EAAE,EAAE;wBACN,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,qBAAA,CAAC,CACH,CAAC;AACF,oBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;wBAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,qBAAA;AACF,iBAAA;aACF;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,KAAK,IAAI,KAAK,YAAY,iBAAiB,EAAE;AAC/C,oBAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnD,iBAAA;aACF;AACF,SAAA,CAAC,CAAC;KACN;AAED;;;AAGG;IACH,eAAe,GAAA;QACb,IAAI,CAAC,SAAS,GAAG;AACf,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,QAAQ,EAAE;AACR,wBAAA;4BACE,IAAI,EAAE,eAAe,CAAC,MAAM;4BAC5B,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,GAAG,GAAG;AACnD,4BAAA,WAAW,EAAE,WAAW;AACxB,4BAAA,oBAAoB,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK;AACxD,kCAAE,QAAQ;AACZ,4BAAA,KAAK,EAAE,EAAE;AACT,4BAAA,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;4BACjC,eAAe,EAAE,IAAI,CAAC,UAAU;AAChC,4BAAA,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,SAAS;4BAC5D,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;AAC5D,4BAAA,WAAW,EAAE,EAAE;AACf,4BAAA,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,iBAAiB;AAC/D,kCAAE,SAAS;AACd,yBAAA;AACD,wBAAA;4BACE,IAAI,EAAE,eAAe,CAAC,KAAK;4BAC3B,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,GAAG,GAAG;AACnD,4BAAA,WAAW,EAAE,WAAW;AACxB,4BAAA,oBAAoB,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK;AACxD,kCAAE,QAAQ;AACZ,4BAAA,KAAK,EAAE,EAAE;AACT,4BAAA,WAAW,EAAE,EAAE;AACf,4BAAA,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,SAAS;4BAC5D,mBAAmB,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;AAChE,kCAAE,SAAS;AACb,4BAAA,UAAU,EAAE;AACV,gCAAA,UAAU,CAAC,QAAQ;gCACnB,UAAU,CAAC,SAAS,CAClBA,WAAwB,EAAE,cAAc,EAAE,YAAY,CACvD;AACD,gCAAA,UAAU,CAAC,OAAO,CAAC,wBAAwB,CAAC,SAAS,CAAC;AACvD,6BAAA;4BACD,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;AAC1D,kCAAE,SAAS;4BACb,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;AAC5D,4BAAA,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,iBAAiB;AAC/D,kCAAE,SAAS;AACd,yBAAA;AACD,wBAAA;4BACE,IAAI,EAAE,eAAe,CAAC,KAAK;4BAC3B,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,GAAG,GAAG;AACnD,4BAAA,WAAW,EAAE,WAAW;AACxB,4BAAA,oBAAoB,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK;AACxD,kCAAE,QAAQ;AACZ,4BAAA,KAAK,EAAE,EAAE;4BACT,mBAAmB,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;AAChE,kCAAE,SAAS;AACb,4BAAA,WAAW,EAAE,EAAE;AACf,4BAAA,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,SAAS;AAC5D,4BAAA,UAAU,EAAE;AACV,gCAAA,UAAU,CAAC,QAAQ;gCACnB,UAAU,CAAC,SAAS,CAClBA,WAAwB,EAAE,cAAc,EAAE,WAAW,CACtD;AACD,gCAAA,UAAU,CAAC,OAAO,CAAC,wBAAwB,CAAC,SAAS,CAAC;AACvD,6BAAA;4BACD,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;AAC1D,kCAAE,SAAS;4BACb,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;AAC5D,4BAAA,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,iBAAiB;AAC/D,kCAAE,SAAS;AACd,yBAAA;AACD,wBAAA;4BACE,IAAI,EAAE,eAAe,CAAC,SAAS;AAC/B,4BAAA,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,UAAU;AAC9C,4BAAA,WAAW,EAAE,YAAY;4BACzB,mBAAmB,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;AAChE,kCAAE,UAAU;AACd,4BAAA,KAAK,EAAE,EAAE;AACT,4BAAA,WAAW,EAAE,EAAE;AACf,4BAAA,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,UAAU;AAC7D,4BAAA,QAAQ,EAAE,IAAI;AACd,4BAAA,SAAS,EACPA,WAAwB,EAAE,cAAc,EAAE,aAAa;AACzD,4BAAA,UAAU,EAAE;gCACV,UAAU,CAAC,SAAS,CAClBA,WAAwB,EAAE,cAAc,EAAE,aAAa,CACxD;AACD,gCAAA,UAAU,CAAC,OAAO,CAAC,wBAAwB,CAAC,UAAU,CAAC;AACxD,6BAAA;4BACD,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;AAC1D,kCAAE,UAAU;4BACd,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU;AAC7D,4BAAA,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,iBAAiB;AAC/D,kCAAE,UAAU;AACf,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;SACF,CAAC;KACH;AACD;;;;;AAKG;AACH,IAAA,YAAY,CAAC,IAAiB,EAAA;AAC5B,QAAA,IAAI,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE;YAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC3C,YAAA,MAAM,kBAAkB,GAAuB;AAC7C,gBAAA,OAAO,EAAE;oBACP,SAAS,EAAE,YAAY,EAAE,SAAS;oBAClC,cAAc,EAAE,YAAY,EAAE,SAAS;AACvC,oBAAA,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE;oBACtC,SAAS,EAAE,YAAY,EAAE,UAAU;AACnC,oBAAA,aAAa,EAAE,IAAI;AACpB,iBAAA;aACF,CAAC;AACF,YAAA,IAAI,CAAC,aAAa;iBACf,WAAW,CAAC,kBAAkB,CAAC;AAC/B,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,GAAG,KAAI;oBACZ,IAAI,GAAG,EAAE,MAAM,EAAE;AACf,wBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnC,qBAAA;iBACF;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;oBACf,MAAM,YAAY,GAAa,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC;AAC9D,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;wBAC/B,MAAM,YAAY,GAAa,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAA;AACjF,wBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;AAC5B,4BAAA,MAAM,EAAE,QAAQ;AAChB,4BAAA,OAAO,EAAE,YAAY;4BACrB,SAAS,EAAE,SAAS,CAAC,KAAK;AAC1B,4BAAA,aAAa,EAAE,IAAI;AACpB,yBAAA,CAAC,CAAC;AACJ,qBAAA;AAAM,yBAAA,IAAI,KAAK,IAAI,KAAK,YAAY,iBAAiB,EAAE;AACtD,wBAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnD,qBAAA;iBACF;AACF,aAAA,CAAC,CAAC;AACN,SAAA;KACF;AAED;;;;AAIG;AACH,IAAA,qBAAqB,CAAC,IAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;KACrB;AAED;;;;AAIG;IACH,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;AAED;;;AAGG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;KAC7B;8GA7OU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAFpB,CAAC,aAAa,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9C5B,0gBAYuB,EAAA,MAAA,EAAA,CAAA,qxPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED8BX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,WAAA,EAAA,uBAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,wBAAA,EAAA,4BAAA,EAAA,sBAAA,EAAA,uBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAMlD,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAVhC,SAAS;AAEE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cACnB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,oBAAoB,EAAE,eAAe,CAAC,iBAG/C,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA,CAAC,aAAa,CAAC,EAAA,QAAA,EAAA,0gBAAA,EAAA,MAAA,EAAA,CAAA,qxPAAA,CAAA,EAAA,CAAA;qKAQhB,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;gBAKG,UAAU,EAAA,CAAA;sBAAnB,MAAM;;;AE3DT;IACY,YAOX;AAPD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAe,CAAA;AACf,IAAA,WAAA,CAAA,WAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,kBAAoB,CAAA;AACpB,IAAA,WAAA,CAAA,WAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;AACd,IAAA,WAAA,CAAA,WAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB,CAAA;AAChB,IAAA,WAAA,CAAA,WAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,mBAAqB,CAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,qBAAuB,CAAA;AACzB,CAAC,EAPW,WAAW,KAAX,WAAW,GAOtB,EAAA,CAAA,CAAA;;ACyBD;;;;AAIG;MACU,SAAS,CAAA;AACpB,IAAA,WAAA;;IAES,IAAe;;AAEf,IAAA,KAAA,GAAQ,CAAC;;AAET,IAAA,UAAA,GAAa,KAAK;;IAElB,SAAY,GAAA,KAAK;;QANjB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAW;QAEf,IAAK,CAAA,KAAA,GAAL,KAAK,CAAI;QAET,IAAU,CAAA,UAAA,GAAV,UAAU,CAAQ;QAElB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAQ;KACtB;AACL,CAAA;AAED;;;;AAIG;MAEU,MAAM,CAAA;AAIjB;;;;AAIG;IACH,kBAAkB,GAAA;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;AACD;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,KAAkB,EAAA;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC1B;AACD;;;;;AAKG;AACH,IAAA,WAAW,CAAC,IAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAC5B,CAAC,IAAI,KAAK,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAC1D,CAAC;KACH;AACD;;;;;AAKG;AACH,IAAA,YAAY,CAAC,IAAe,EAAA;AAC1B,QAAA,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC;KAC1E;8GAxCU,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAN,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAM,cADO,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,MAAM,EAAA,UAAA,EAAA,CAAA;kBADlB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;AA2ClC;;;;;AAKG;MACU,gBAAgB,CAAA;AAG3B;;;;AAIG;AACH,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;KAC9B;AACD;;;AAGG;IACH,IAAI,IAAI,CAAC,KAAkB,EAAA;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC7B;AAED,IAAA,WAAA;;IAEU,WAAuC;;AAEvC,IAAA,QAAgB;;QAFhB,IAAW,CAAA,WAAA,GAAX,WAAW,CAA4B;QAEvC,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;AAvB1B,QAAA,IAAA,CAAA,QAAQ,GAAqB,IAAI,OAAO,EAAW,CAAC;AACpD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAc,EAAE,CAAC,CAAC;KAuB9C;AAEJ;;;;;AAKG;AACH,IAAA,OAAO,CAAC,gBAAkC,EAAA;AACxC,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO;AACpC,aAAA,IAAI,CAACC,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;YACpB,IACG,MAAqC,CAAC,KAAK;gBAC3C,MAAqC,CAAC,OAAO,EAC9C;AACA,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAoC,CAAC,CAAC;AAC9D,aAAA;AACH,SAAC,CAAC,CAAC;QACL,OAAO,KAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAC7DC,KAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CACrB,CAAC;KACH;AACD;;;;AAIG;;AAEH,IAAA,UAAU,CAAC,gBAAkC,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;KAC7B;AAED;;;;AAIG;AACH,IAAA,iBAAiB,CAAC,MAAkC,EAAA;QAClD,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,YAAA,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7D,SAAA;QACD,IAAI,MAAM,CAAC,OAAO,EAAE;AAClB,YAAA,MAAM,CAAC,OAAO;AACX,iBAAA,KAAK,EAAE;AACP,iBAAA,OAAO,EAAE;AACT,iBAAA,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACpD,SAAA;KACF;AAED;;;;;;AAMG;IACH,UAAU,CAAC,WAAsB,EAAE,MAAe,EAAA;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,QAAQ,IAAI,KAAK,GAAG,CAAC,EAAE;;YAE1B,OAAO;AACR,SAAA;AAED,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CACxB,CAAC,IAAI,KACH,IAAI,SAAS,CACX,IAAI,EACJ,WAAW,CAAC,KAAK,GAAG,CAAC,EACrB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CACjC,CACJ,CAAC;AACF,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;AAC1C,SAAA;AAAM,aAAA;YACL,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,YAAA,KACE,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EACjB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,EAC9D,CAAC,EAAE,EAAE,KAAK,EAAE;cACZ,GAAE;YACJ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AACpC,SAAA;;QAGD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjC;AACF,CAAA;AACD;;;;;AAKG;MAeU,iBAAiB,CAAA;IAmB5B,IACI,gBAAgB,CAAC,KAAkB,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,QAAA,IAAI,KAAK;YAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;KACtC;AACD,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;IAED,IACI,eAAe,CAAC,KAAkB,EAAA;AACpC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;AACD,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAED,IACI,2BAA2B,CAAC,KAAc,EAAA;AAC5C,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;KACpC;AACD,IAAA,IAAI,2BAA2B,GAAA;QAC7B,OAAO,IAAI,CAAC,qBAAqB,CAAC;KACnC;IAED,IACI,kBAAkB,CAAC,EAAU,EAAA;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KAC3C;AACD,IAAA,IAAI,kBAAkB,GAAA;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;;IAOD,WAAmB,CAAA,QAAgB,EAAS,UAAsB,EAAA;QAA/C,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;QAAS,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;;QAzDlE,IAAS,CAAA,SAAA,GAAQC,WAAS,CAAC;QAC3B,IAAO,CAAA,OAAA,GAAW,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC;QACtD,IAAiB,CAAA,iBAAA,GAAW,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,iBAAiB,CAAC;AAK1E,QAAA,IAAA,CAAA,QAAQ,GAAqB,IAAI,OAAO,EAAW,CAAC;AAEpD,QAAA,IAAA,CAAA,oBAAoB,GAAe,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACnD,QAAA,IAAA,CAAA,qBAAqB,GAAe,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACpD,QAAA,IAAA,CAAA,SAAS,GAAW,IAAI,CAAC,OAAO,CAAC,MAAM,CACrC,CAAC,CAAC,KACA,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,iBAAiB;AACtC,YAAA,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,mBAAmB,CAC3C,CAAC;QAmBM,IAAqB,CAAA,qBAAA,GAAG,KAAK,CAAC;AAkB5B,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAa,CAAC;AACjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAa,CAAC;AACjD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAa,CAAC;AAC/C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAa,CAAC;AAqB3D;;;;AAIG;QACH,IAAQ,CAAA,QAAA,GAAG,CAAC,IAAe,KAAK,IAAI,CAAC,KAAK,CAAC;AAE3C;;;;AAIG;QACH,IAAY,CAAA,YAAA,GAAG,CAAC,IAAe,KAAK,IAAI,CAAC,UAAU,CAAC;AAEpD;;;;;;AAMG;QACH,IAAc,CAAA,cAAA,GAAG,CAAC,KAAa,EAAE,SAAoB,KACnD,SAAS,CAAC,UAAU,CAAC;KAzC+C;AACtE;;;AAGG;IACH,QAAQ,GAAA;QACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;AACD;;;AAGG;IACH,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAACF,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACvE,YAAA,MAAM,aAAa,GACjB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;AACpE,YAAA,aAAa,EAAE,OAAO,CAAC,CAAC,IAAiB,MAAM,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrE,SAAC,CAAC,CAAC;KACJ;AAwBD;;;;AAIG;AACH,IAAA,eAAe,CAAC,IAAe,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAC1B,OAAO;AACR,SAAA;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/B,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC3B,SAAA;KACF;AACD;;;;;AAKG;;AAEH,IAAA,YAAY,CAAC,KAAa,EAAA;QACxB,OAAO;AACL,YAAA,SAAS,EACP,iDAAiD,GAAG,KAAK,GAAG,QAAQ;SACvE,CAAC;KACH;AACD;;;AAGG;IACH,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,CACpC,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,YAAY,CAClB,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACzE;AACD;;;AAGG;IACH,eAAe,GAAA;QACb,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACrE;AACD;;;;AAIG;AACH,IAAA,eAAe,CAAC,cAAsB,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,cAAc,EAAE;YACtC,MAAM,eAAe,GAAgB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CACpE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,cAAc,CACzC,CAAC;AACF,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,eAAe,CAAC;AACvC,YAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;AACjC,SAAA;KACF;AAED;;;;AAIG;AACH,IAAA,mBAAmB,CAAC,IAAuB,EAAA;AACzC,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;KACjC;AACD;;;;;AAKG;AACH,IAAA,mBAAmB,CAAC,KAAgB,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,qBAAqB,CAAC;QAC1E,OAAO,IAAI,CAAC,oBAAoB,CAAC;KAClC;AACD;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,KAAgB,EAAA;QACjC,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE;AAC5D,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC7B,SAAA;aAAM,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE,KAAK,WAAW,CAAC,gBAAgB,EAAE;YACxE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACxC,SAAA;aAAM,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE,KAAK,WAAW,CAAC,UAAU,EAAE;YAClE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtC,SAAA;aAAM,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE,KAAK,WAAW,CAAC,YAAY,EAAE;YACpE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACxC,SAAA;KACF;AACD;;;;;AAKG;AACH,IAAA,uBAAuB,CAAC,KAAgB,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAC1B,CAAC,CAAC,KACA,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW;AAC5D,aAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CACrE,CAAC;KACH;AACD;;;;;;AAMG;IACH,SAAS,CAAC,KAAa,EAAE,UAAsB,EAAA;QAC7C,OAAO,UAAU,CAAC,EAAE,CAAC;KACtB;AACD;;;AAGG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;KAC7B;8GAtOU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EChP9B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,ujJAmIA,EDmGI,MAAA,EAAA,CAAA,ylMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,2GACb,mBAAmB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAKV,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAd7B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,aAAa;wBACb,eAAe;wBACf,aAAa;wBACb,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,ujJAAA,EAAA,MAAA,EAAA,CAAA,ylMAAA,CAAA,EAAA,CAAA;mHAwBG,gBAAgB,EAAA,CAAA;sBADnB,KAAK;gBAUF,eAAe,EAAA,CAAA;sBADlB,KAAK;gBAUF,2BAA2B,EAAA,CAAA;sBAD9B,KAAK;gBASF,kBAAkB,EAAA,CAAA;sBADrB,KAAK;gBASI,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBACG,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;;;AEzST;IACY,kBAGX;AAHD,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACjB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,GAG5B,EAAA,CAAA,CAAA;;ACqCD;;;AAGG;MAoBU,eAAe,CAAA;AA+C1B,IAAA,WAAA;;IAES,MAAiB;;IAEhB,aAA4B;;IAE7B,YAA2B;;IAE1B,yBAAoD;;IAEpD,yBAAoD,EAAA;QARrD,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QAEhB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QAE7B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAe;QAE1B,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB,CAA2B;QAEpD,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB,CAA2B;AAxD9D,QAAA,IAAA,CAAA,QAAQ,GAAqB,IAAI,OAAO,EAAW,CAAC;;QAIpD,IAAS,CAAA,SAAA,GAAQ,WAAW,CAAC;AAC7B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;QAC5C,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAC;QAC5B,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAC;QAC5B,IAA2B,CAAA,2BAAA,GAAG,KAAK,CAAC;QACpC,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;QAOrB,IAAqB,CAAA,qBAAA,GAAW,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,MAAM,CAAC;QAC7E,IAAqB,CAAA,qBAAA,GAAW,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,MAAM,CAAC;AAC7E,QAAA,IAAA,CAAA,eAAe,GAAe;AAC5B,YAAA,EAAE,EAAE,CAAC;AACL,YAAA,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG;AAC7C,YAAA,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,eAAe;AAC7C,YAAA,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG;SAC5C,CAAC;AACF,QAAA,IAAA,CAAA,eAAe,GAAe;AAC5B,YAAA,EAAE,EAAE,CAAC;AACL,YAAA,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,MAAM;AAChD,YAAA,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,eAAe;AAC7C,YAAA,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,MAAM;SAC/C,CAAC;QACF,IAAa,CAAA,aAAA,GAAa,EAAE,CAAC;QAC7B,IAAgB,CAAA,gBAAA,GAAqB,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAC7D,QAAA,IAAA,CAAA,cAAc,GAGnB;AACF,YAAA,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW;AAC7C,YAAA,iBAAiB,EAAE,IAAI,CAAC,cAAc,EAAE,iBAAiB;SAC1D,CAAC;AAKF,QAAA,IAAA,CAAA,eAAe,GAAGJ,WAAwB,CAAC;QAE3C,IAAa,CAAA,aAAA,GAAG,SAAS,CAAC;AAaxB,QAAA,IAAI,CAAC,yBAAyB;AAC3B,aAAA,aAAa,EAAE;AACf,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;AACrC,SAAC,CAAC,CAAC;KACN;AAED;;;;AAIG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACnE,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED;;;;AAIG;IACH,mBAAmB,GAAA;AACjB,QAAA,MAAM,aAAa,GAAG;AACpB,YAAA,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO;AACtC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,kBAAkB,EAAE,oBAAoB;YACxC,SAAS,EAAE,SAAS,CAAC,IAAI;SAC1B,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC;AAC7C,QAAA,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;KACtD;AAED;;;;;;AAMG;;IAEH,SAAS,CAAC,aAAkB,EAAE,SAAkB,EAAA;AAC9C,QAAA,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;AAChD,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,UAAU,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC;AAC9C,YAAA,SAAS,EAAE,IAAI;AAChB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,kBAAkB;AAClD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAE9B,aAAA,SAAS,CAAC,CAAC,MAAW,KAAI;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACvB,YAAA,IAAI,IAAI,CAAC,YAAY,KAAK,iBAAiB,CAAC,MAAM,EAAE;AAClD,gBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;AAC5B,oBAAA,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,SAAS,CAAC,OAAO;AAC5B,oBAAA,aAAa,EAAE,IAAI;oBACnB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU;AAC5D,iBAAA,CAAC,CAAC;AACJ,aAAA;AACH,SAAC,CAAC,CAAC;AACL,QAAA,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,UAAU;AAC1C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACzB,SAAC,CAAC,CAAC;KACN;AACD;;;AAGG;;AAGH,IAAA,2BAA2B,CAAC,SAAoB,EAAA;AAC9C,QAAA,MAAM,gBAAgB,GAAGO,WAAwB,EAAE,gBAAgB,CAAC;AACpE,QAAA,MAAM,uBAAuB,GAAG;YAC9B,eAAe,EAAE,gBAAgB,EAAE,eAAe;YAClD,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB;YACpD,aAAa,EACX,gBAAgB,EAAE,aAAa,GAAG,SAAS,CAAC,SAAS,GAAG,GAAG;AAC7D,YAAA,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;SAC7C,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;AAC5D,YAAA,IAAI,EAAE,uBAAuB;AAC7B,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,SAAS,EAAE,QAAQ;AACpB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,SAAS;AACX,aAAA,WAAW,EAAE;AACb,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,MAAe,KAAI;AAC7B,YAAA,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAC7B,aAAA;AACH,SAAC,CAAC,CAAC;KACN;AAED;;;AAGG;AACH,IAAA,WAAW,CAAC,SAAoB,EAAA;AAC9B,QAAA,MAAM,eAAe,GAAGA,WAAwB,CAAC;AACjD,QAAA,MAAM,kBAAkB,GAAuB;AAC7C,YAAA,OAAO,EAAE;gBACP,OAAO,EAAE,SAAS,CAAC,OAAO;AAC3B,aAAA;SACF,CAAC;AACF,QAAA,IAAI,CAAC,aAAa;aACf,WAAW,CAAC,kBAAkB,CAAC;AAC/B,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC;;AAET,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;gBACxB,IAAI,GAAG,EAAE,MAAM,EAAE;AACf,oBAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC;AACxC,oBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;AAC5B,wBAAA,MAAM,EAAE,QAAQ;wBAChB,SAAS,EAAE,SAAS,CAAC,OAAO;AAC5B,wBAAA,aAAa,EAAE,IAAI;wBACnB,OAAO,EACL,SAAS,CAAC,SAAS;AACnB,4BAAA,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ;AAC9C,qBAAA,CAAC,CAAC;AACJ,iBAAA;aACF;;AAED,YAAA,KAAK,EAAE,CAAC,KAAU,KAAI;gBACpB,MAAM,UAAU,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC;AAClD,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;oBACtD,MAAM,YAAY,GAChB,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AACnD,oBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;AAC5B,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,OAAO,EAAE,YAAY;wBACrB,SAAS,EAAE,SAAS,CAAC,KAAK;AAC1B,wBAAA,aAAa,EAAE,IAAI;AACpB,qBAAA,CAAC,CAAC;AACJ,iBAAA;AAAM,qBAAA,IAAI,KAAK,IAAI,KAAK,YAAY,iBAAiB,EAAE;AACtD,oBAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnD,iBAAA;aACF;AACF,SAAA,CAAC,CAAC;KACN;AAED;;;AAGG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;KAClC;AAED;;;AAGG;IACH,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;KAClC;AAED;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,UAAkB,EAAA;AACnC,QAAA,IAAI,CAAC,2BAA2B,GAAG,CAAC,CAAC,UAAU,CAAC;KACjD;AACD;;;;AAIG;IACH,mBAAmB,GAAA;QACjB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,gBAAgB,GAAmB,EAAE,CAAC;AAC5C,QAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC/C,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7D,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,gBAAgB,CAAC;KACzB;AACD;;;AAGG;IACH,WAAW,GAAA;AACT,QAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/C,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW;AAC1B,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;AACpB,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AACD;;;;AAIG;AACH,IAAA,mBAAmB,CAAC,KAAmB,EAAA;AACrC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;QACxC,IAAI,CAAC,gBAAgB,GAAG;AACtB,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAY;SAClD,CAAC;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED;;;AAGG;AACH,IAAA,SAAS,CAAC,KAAiB,EAAA;AACzB,QAAA,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,gBAAgB,GAAG;AACtB,gBAAA,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE;AAC7B,gBAAA,WAAW,EAAE,EAAE;aAChB,CAAC;AACH,SAAA;AACD,QAAA,IAAI,CAAC,aAAa;AACf,aAAA,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAChC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,QAAQ,EAAE,MAAM,EAAE;AACpB,oBAAA,IAAI,KAAK,EAAE;wBACT,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC/D,qBAAA;AAAM,yBAAA;wBACL,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAChE,qBAAA;AACF,iBAAA;aACF;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;gBACf,MAAM,UAAU,GAAa,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC;AAC5D,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;oBAC7B,MAAM,YAAY,GAChB,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AACnD,oBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;AAC5B,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,OAAO,EAAE,YAAY;wBACrB,SAAS,EAAE,SAAS,CAAC,KAAK;AAC1B,wBAAA,aAAa,EAAE,IAAI;AACpB,qBAAA,CAAC,CAAC;AACJ,iBAAA;AAAM,qBAAA,IAAI,KAAK,IAAI,KAAK,YAAY,iBAAiB,EAAE;AACtD,oBAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnD,iBAAA;aACF;AACF,SAAA,CAAC,CAAC;KACN;AACD;;;;;AAKG;AACH,IAAA,iBAAiB,CAAC,QAAqB,EAAA;AACrC,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACxB,MAAM,aAAa,GAAc,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjE,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AACrC,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED;;;AAGG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,aAAa;AACf,aAAA,aAAa,EAAE;AACf,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,GAAG,EAAE,MAAM,EAAE;oBACf,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC;AAC9C,oBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACtD,iBAAA;aACF;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;gBACf,MAAM,UAAU,GAAa,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC;AAC5D,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;oBAC7B,MAAM,YAAY,GAChB,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AACnD,oBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;AAC5B,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,OAAO,EAAE,YAAY;wBACrB,SAAS,EAAE,SAAS,CAAC,KAAK;AAC1B,wBAAA,aAAa,EAAE,IAAI;AACpB,qBAAA,CAAC,CAAC;AACJ,iBAAA;AAAM,qBAAA,IAAI,KAAK,IAAI,KAAK,YAAY,iBAAiB,EAAE;AACtD,oBAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnD,iBAAA;aACF;AACF,SAAA,CAAC,CAAC;KACN;AACD;;;AAGG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;KAC7B;8GAjXU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAR,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAS,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAFf,CAAC,aAAa,CAAC,0BC9D5B,u3HAyGA,EAAA,MAAA,EAAA,CAAA,wnOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvDI,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,8BACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,eAAe,EACf,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,+SACf,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,iBAAA,EAAA,6BAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,eAAe,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAOV,eAAe,EAAA,UAAA,EAAA,CAAA;kBAnB3B,SAAS;+BAEE,eAAe,EAAA,UAAA,EACb,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,eAAe;wBACf,eAAe;wBACf,eAAe;wBACf,eAAe;wBACf,iBAAiB;wBACjB,eAAe;wBACf,mBAAmB;AACpB,qBAAA,EAAA,aAAA,EAGc,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA,CAAC,aAAa,CAAC,EAAA,QAAA,EAAA,u3HAAA,EAAA,MAAA,EAAA,CAAA,wnOAAA,CAAA,EAAA,CAAA;uOAmCjB,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAOG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;;;MEnGK,YAAY,CAAA;8GAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;+GAAZ,YAAY,EAAA,CAAA,CAAA,EAAA;+GAAZ,YAAY,EAAA,CAAA,CAAA,EAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBANxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,EACR;AACD,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA,CAAA;;;ACPD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EventEmitter, OnInit } from '@angular/core';
|
|
1
|
+
import { ElementRef, EventEmitter, OnInit, AfterViewInit, OnDestroy } from '@angular/core';
|
|
2
2
|
import { Menu, IconButton } from '@ieeesa-npm/presentation';
|
|
3
3
|
import { CollectionViewer, SelectionChange, DataSource } from '@angular/cdk/collections';
|
|
4
4
|
import { FlatTreeControl } from '@angular/cdk/tree';
|
|
@@ -113,8 +113,9 @@ export declare class GroupsDataSource implements DataSource<GroupNode> {
|
|
|
113
113
|
* @class TreeViewComponent
|
|
114
114
|
* @implements {OnInit}
|
|
115
115
|
*/
|
|
116
|
-
export declare class TreeViewComponent implements OnInit {
|
|
116
|
+
export declare class TreeViewComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
117
117
|
database: Groups;
|
|
118
|
+
elementRef: ElementRef;
|
|
118
119
|
constants: any;
|
|
119
120
|
buttons: Menu[];
|
|
120
121
|
treePaddingIndent: number;
|
|
@@ -122,6 +123,7 @@ export declare class TreeViewComponent implements OnInit {
|
|
|
122
123
|
selectedGroupAction: Menu | IconButton;
|
|
123
124
|
treeControl: FlatTreeControl<GroupNode>;
|
|
124
125
|
dataSource: GroupsDataSource;
|
|
126
|
+
destroy$: Subject<boolean>;
|
|
125
127
|
matTreeNodePadding: MatTreeNodePadding<GroupNode>;
|
|
126
128
|
plusCircleIconButton: IconButton;
|
|
127
129
|
minusCircleIconButton: IconButton;
|
|
@@ -142,12 +144,17 @@ export declare class TreeViewComponent implements OnInit {
|
|
|
142
144
|
createGroupClick: EventEmitter<GroupInfo>;
|
|
143
145
|
editGroupClick: EventEmitter<GroupInfo>;
|
|
144
146
|
deleteGroupClick: EventEmitter<GroupInfo>;
|
|
145
|
-
constructor(database: Groups);
|
|
147
|
+
constructor(database: Groups, elementRef: ElementRef);
|
|
146
148
|
/**
|
|
147
149
|
* Initializes the tree view component
|
|
148
150
|
* @memberof TreeViewComponent
|
|
149
151
|
*/
|
|
150
152
|
ngOnInit(): void;
|
|
153
|
+
/**
|
|
154
|
+
* Assign ARIA role for all mat tree nodes as "row"
|
|
155
|
+
* @memberof TreeViewComponent
|
|
156
|
+
*/
|
|
157
|
+
ngAfterViewInit(): void;
|
|
151
158
|
/**
|
|
152
159
|
* Gets the level of the node
|
|
153
160
|
* @param {GroupNode} node
|
|
@@ -231,6 +238,11 @@ export declare class TreeViewComponent implements OnInit {
|
|
|
231
238
|
* @memberof TreeViewComponent
|
|
232
239
|
*/
|
|
233
240
|
trackByFn(index: number, iconButton: IconButton): number;
|
|
241
|
+
/**
|
|
242
|
+
* NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.
|
|
243
|
+
* @memberof GroupsComponent
|
|
244
|
+
*/
|
|
245
|
+
ngOnDestroy(): void;
|
|
234
246
|
static ɵfac: i0.ɵɵFactoryDeclaration<TreeViewComponent, never>;
|
|
235
247
|
static ɵcmp: i0.ɵɵComponentDeclaration<TreeViewComponent, "ieeesa-tree", never, { "parentGroupsInfo": { "alias": "parentGroupsInfo"; "required": false; }; "childGroupsInfo": { "alias": "childGroupsInfo"; "required": false; }; "isGroupSearchOrFilterActive": { "alias": "isGroupSearchOrFilterActive"; "required": false; }; "deletedGroupIdInfo": { "alias": "deletedGroupIdInfo"; "required": false; }; }, { "toggleGroupClick": "toggleGroupClick"; "createGroupClick": "createGroupClick"; "editGroupClick": "editGroupClick"; "deleteGroupClick": "deleteGroupClick"; }, never, never, true, never>;
|
|
236
248
|
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ieeesa-npm/groups",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^16.1.0",
|
|
6
6
|
"@angular/core": "^16.1.0",
|
|
7
|
-
"@ieeesa-npm/presentation": "^0.3.
|
|
8
|
-
"@ieeesa-npm/shared-styles": "^0.0.
|
|
9
|
-
"@ieeesa-npm/utility": "^0.
|
|
7
|
+
"@ieeesa-npm/presentation": "^0.3.8",
|
|
8
|
+
"@ieeesa-npm/shared-styles": "^0.0.7",
|
|
9
|
+
"@ieeesa-npm/utility": "^0.3.0"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"tslib": "^2.3.0"
|