@smartbit4all/ng-client 4.2.171 → 4.2.172
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +3 -3
- package/esm2022/lib/smart-dialog/smartdialog.component.mjs +1 -1
- package/esm2022/lib/smart-form/smartform.component.mjs +3 -5
- package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +3 -3
- package/esm2022/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +1 -1
- package/esm2022/lib/smart-grid/smart-grid.component.mjs +3 -5
- package/esm2022/lib/smart-navbar/smart-navbar.component.mjs +1 -1
- package/esm2022/lib/smart-tab-group/smart-tab-group.component.mjs +3 -3
- package/esm2022/lib/smart-table/tables/material-table/material-table.component.mjs +3 -3
- package/esm2022/lib/smart-tree/smarttree.component.mjs +3 -5
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +1 -1
- package/esm2022/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.mjs +3 -3
- package/esm2022/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +3 -3
- package/fesm2022/smartbit4all-ng-client.mjs +22 -28
- package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
- package/lib/smart-form/smartform.component.d.ts +1 -2
- package/lib/smart-grid/smart-grid.component.d.ts +1 -2
- package/lib/smart-tree/smarttree.component.d.ts +1 -2
- package/package.json +1 -1
- package/smartbit4all-ng-client-4.2.172.tgz +0 -0
- package/smartbit4all-ng-client-4.2.171.tgz +0 -0
|
@@ -47,7 +47,7 @@ export class SmartNavbarComponent {
|
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
49
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartNavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
50
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartNavbarComponent, selector: "smart-navbar", inputs: { smartNavbar: "smartNavbar" }, viewQueries: [{ propertyName: "formComp", first: true, predicate: ["searchOption"], descendants: true }], ngImport: i0, template: "<mat-toolbar>\n <img\n *ngIf=\"smartNavbar.icon\"\n class=\"title\"\n src=\"{{ smartNavbar.icon }}\"\n alt=\"\"\n (click)=\"onIconClick()\"\n />\n <ng-content select=\"[titleComponent]\" class=\"title\"></ng-content>\n <div *ngIf=\"smartNavbar.searchBar\" class=\"input\">\n <input\n type=\"text\"\n placeholder=\"{{ smartNavbar.searchBar.placeholder }}\"\n [(ngModel)]=\"searchText\"\n />\n <div\n *ngIf=\"smartNavbar.searchBar.quickFilterLabel && smartNavbar.searchBar.quickFilters.length\"\n class=\"drop_down_btn\"\n >\n <smartform #searchOption [smartForm]=\"filterForm\"></smartform>\n <button\n class=\"search_icon\"\n *ngIf=\"smartNavbar.searchBar.icon\"\n mat-icon-button\n (click)=\"onSearchButtonClick()\"\n >\n <mat-icon class=\"search_icon\">{{ smartNavbar.searchBar.icon }}</mat-icon>\n </button>\n </div>\n </div>\n <button\n *ngIf=\"smartNavbar.filterButtonCallback\"\n mat-raised-button\n color=\"primary\"\n class=\"filter-btn\"\n (click)=\"openFilters()\"\n >\n <div #customFilter class=\"custom-filter-holder\">\n <ng-content select=\"[filterComponent]\"></ng-content>\n </div>\n <ng-container *ngIf=\"!customFilter.hasChildNodes()\">\n <mat-icon>filter_list</mat-icon> {{ smartNavbar.filterButtonLabel }}\n </ng-container>\n </button>\n <div *ngIf=\"smartNavbar.userSettings\" class=\"account-content\">\n <button\n mat-button\n *ngIf=\"smartNavbar?.notification\"\n [color]=\"smartNavbar.notification?.iconColor\"\n (click)=\"onNotificationClick()\"\n class=\"notification-btn\"\n >\n <mat-icon>\n {{ smartNavbar.notification?.icon }}\n </mat-icon>\n </button>\n <button mat-button color=\"primary\" [matMenuTriggerFor]=\"menu\">\n <mat-icon *ngIf=\"smartNavbar.userSettings.icon\">\n {{ smartNavbar.userSettings.icon }}\n </mat-icon>\n <mat-icon *ngIf=\"!smartNavbar.userSettings.icon\"> person_outline </mat-icon>\n {{ smartNavbar.userSettings.label }}\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let btn of smartNavbar.userSettings.settings\"\n (click)=\"btn.callback()\"\n class=\"menuButton\"\n >\n <mat-icon class=\"menuIcon\" *ngIf=\"btn.icon && btn.iconPosition === buttonPosition().FRONT\">\n {{ btn.icon }}\n </mat-icon>\n <div class=\"menuLabel\">\n {{ btn.label }}\n </div>\n <mat-icon class=\"menuIcon\" *ngIf=\"btn.icon && btn.iconPosition === buttonPosition().POST\">\n {{ btn.icon }}\n </mat-icon>\n </button>\n </mat-menu>\n </div>\n</mat-toolbar>\n", styles: [".filter-btn{margin-left:20px}input[type=text]{flex:1;background:#fff;height:40px;border:none;outline:none;padding:0 25px;border-radius:25px 0 0 25px}.drop_down_btn{position:relative;left:-5;border-radius:0 25px 25px 0;height:40px;border:none;outline:none;cursor:pointer;background:#fff;color:#00a8da;display:flex;align-items:center;padding-right:20px}.input{flex:1;position:relative;font-size:20px;display:flex;flex-direction:row;align-items:center;padding-left:30px}mat-toolbar{height:var(--navbar-height)}::ng-deep .navbar-form .mat-form-field-appearance-outline .mat-form-field-outline,::ng-deep .navbar-form .mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-form-field-flex:hover .mat-form-field-outline,::ng-deep .navbar-form .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline{opacity:.75!important;color:#fff}.account-content{margin-left:75px}.title{margin-right:75px}.account-content>*{margin-left:30px}.account-content>*:first-child{margin-left:0}.custom-filter-holder{display:flex;align-items:center}.menuButton{display:flex;flex-direction:row;gap:.5rem}.menuLabel{flex:1;text-align:left}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.SmartformComponent, selector: "smartform", inputs: ["smartForm"
|
|
50
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartNavbarComponent, selector: "smart-navbar", inputs: { smartNavbar: "smartNavbar" }, viewQueries: [{ propertyName: "formComp", first: true, predicate: ["searchOption"], descendants: true }], ngImport: i0, template: "<mat-toolbar>\n <img\n *ngIf=\"smartNavbar.icon\"\n class=\"title\"\n src=\"{{ smartNavbar.icon }}\"\n alt=\"\"\n (click)=\"onIconClick()\"\n />\n <ng-content select=\"[titleComponent]\" class=\"title\"></ng-content>\n <div *ngIf=\"smartNavbar.searchBar\" class=\"input\">\n <input\n type=\"text\"\n placeholder=\"{{ smartNavbar.searchBar.placeholder }}\"\n [(ngModel)]=\"searchText\"\n />\n <div\n *ngIf=\"smartNavbar.searchBar.quickFilterLabel && smartNavbar.searchBar.quickFilters.length\"\n class=\"drop_down_btn\"\n >\n <smartform #searchOption [smartForm]=\"filterForm\"></smartform>\n <button\n class=\"search_icon\"\n *ngIf=\"smartNavbar.searchBar.icon\"\n mat-icon-button\n (click)=\"onSearchButtonClick()\"\n >\n <mat-icon class=\"search_icon\">{{ smartNavbar.searchBar.icon }}</mat-icon>\n </button>\n </div>\n </div>\n <button\n *ngIf=\"smartNavbar.filterButtonCallback\"\n mat-raised-button\n color=\"primary\"\n class=\"filter-btn\"\n (click)=\"openFilters()\"\n >\n <div #customFilter class=\"custom-filter-holder\">\n <ng-content select=\"[filterComponent]\"></ng-content>\n </div>\n <ng-container *ngIf=\"!customFilter.hasChildNodes()\">\n <mat-icon>filter_list</mat-icon> {{ smartNavbar.filterButtonLabel }}\n </ng-container>\n </button>\n <div *ngIf=\"smartNavbar.userSettings\" class=\"account-content\">\n <button\n mat-button\n *ngIf=\"smartNavbar?.notification\"\n [color]=\"smartNavbar.notification?.iconColor\"\n (click)=\"onNotificationClick()\"\n class=\"notification-btn\"\n >\n <mat-icon>\n {{ smartNavbar.notification?.icon }}\n </mat-icon>\n </button>\n <button mat-button color=\"primary\" [matMenuTriggerFor]=\"menu\">\n <mat-icon *ngIf=\"smartNavbar.userSettings.icon\">\n {{ smartNavbar.userSettings.icon }}\n </mat-icon>\n <mat-icon *ngIf=\"!smartNavbar.userSettings.icon\"> person_outline </mat-icon>\n {{ smartNavbar.userSettings.label }}\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let btn of smartNavbar.userSettings.settings\"\n (click)=\"btn.callback()\"\n class=\"menuButton\"\n >\n <mat-icon class=\"menuIcon\" *ngIf=\"btn.icon && btn.iconPosition === buttonPosition().FRONT\">\n {{ btn.icon }}\n </mat-icon>\n <div class=\"menuLabel\">\n {{ btn.label }}\n </div>\n <mat-icon class=\"menuIcon\" *ngIf=\"btn.icon && btn.iconPosition === buttonPosition().POST\">\n {{ btn.icon }}\n </mat-icon>\n </button>\n </mat-menu>\n </div>\n</mat-toolbar>\n", styles: [".filter-btn{margin-left:20px}input[type=text]{flex:1;background:#fff;height:40px;border:none;outline:none;padding:0 25px;border-radius:25px 0 0 25px}.drop_down_btn{position:relative;left:-5;border-radius:0 25px 25px 0;height:40px;border:none;outline:none;cursor:pointer;background:#fff;color:#00a8da;display:flex;align-items:center;padding-right:20px}.input{flex:1;position:relative;font-size:20px;display:flex;flex-direction:row;align-items:center;padding-left:30px}mat-toolbar{height:var(--navbar-height)}::ng-deep .navbar-form .mat-form-field-appearance-outline .mat-form-field-outline,::ng-deep .navbar-form .mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-form-field-flex:hover .mat-form-field-outline,::ng-deep .navbar-form .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline{opacity:.75!important;color:#fff}.account-content{margin-left:75px}.title{margin-right:75px}.account-content>*{margin-left:30px}.account-content>*:first-child{margin-left:0}.custom-filter-holder{display:flex;align-items:center}.menuButton{display:flex;flex-direction:row;gap:.5rem}.menuLabel{flex:1;text-align:left}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.SmartformComponent, selector: "smartform", inputs: ["smartForm"] }] }); }
|
|
51
51
|
}
|
|
52
52
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartNavbarComponent, decorators: [{
|
|
53
53
|
type: Component,
|
|
@@ -30,14 +30,14 @@ export class TabGroupComponent {
|
|
|
30
30
|
return undefined;
|
|
31
31
|
}
|
|
32
32
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TabGroupComponent, deps: [{ token: i1.SmartNavigationService }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: TabGroupComponent, selector: "smart-tab-group", inputs: { tabTiles: "tabTiles", handlers: "handlers" }, ngImport: i0, template: "<div class=\"sm-tab-group-container\">\n <mat-tab-group\n class=\"sm-tab-group\"\n (selectedTabChange)=\"navigateTabContent($event)\"\n [(selectedIndex)]=\"selectedTabIndex\"\n >\n <mat-tab\n class=\"sm-tab\"\n appearance=\"outline\"\n *ngFor=\"let tabTile of tabTiles\"\n label=\"{{ tabTile.tileName }}\"\n
|
|
33
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: TabGroupComponent, selector: "smart-tab-group", inputs: { tabTiles: "tabTiles", handlers: "handlers" }, ngImport: i0, template: "<div class=\"sm-tab-group-container\">\n <mat-tab-group\n class=\"sm-tab-group\"\n (selectedTabChange)=\"navigateTabContent($event)\"\n [(selectedIndex)]=\"selectedTabIndex\"\n >\n <mat-tab\n class=\"sm-tab\"\n appearance=\"outline\"\n *ngFor=\"let tabTile of tabTiles\"\n label=\"{{ tabTile.tileName }}\"\n >\n <ng-template mat-tab-label *ngIf=\"tabTile.extra\">\n <span class=\"row\"\n >{{ tabTile.tileName }}\n <div\n [ngClass]=\"\n tabTile.extra ? 'sm-tab-notification' : 'sm-tab-notification-none'\n \"\n >\n {{ tabTile.extra }}\n </div></span\n >\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n <div class=\"sm-tab-content-container\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".sm-tab-group-container{margin:50px}.sm-tab-group ::ng-deep .mat-tab-label{background-color:#f9fafb;margin-left:10px;border-radius:10px;opacity:100!important}.mat-tab-body-content{border-radius:10px}.mat-mdc-tab-nav-bar,.mat-mdc-tab-header{border-bottom:0}.tab-content-container{padding:2em;border:1px solid #e6e6e6;box-shadow:0 4px 8px -4px #1a1a1a33;border-radius:4px;background-color:#fff}.mat-tab-label-active{background-color:#00a8da!important;opacity:1!important}.sm-tab-notification-none{display:none}.sm-tab-notification{background-color:red;width:20px;height:20px;border-radius:50%;color:#ff0}.sm-tab-group-container ::ng-deep .mat-tab-label-content{width:50%}.row{display:flex;flex-direction:row;width:100%;justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i4.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i4.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }] }); }
|
|
34
34
|
}
|
|
35
35
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TabGroupComponent, decorators: [{
|
|
36
36
|
type: Component,
|
|
37
|
-
args: [{ selector: 'smart-tab-group', template: "<div class=\"sm-tab-group-container\">\n <mat-tab-group\n class=\"sm-tab-group\"\n (selectedTabChange)=\"navigateTabContent($event)\"\n [(selectedIndex)]=\"selectedTabIndex\"\n >\n <mat-tab\n class=\"sm-tab\"\n appearance=\"outline\"\n *ngFor=\"let tabTile of tabTiles\"\n label=\"{{ tabTile.tileName }}\"\n
|
|
37
|
+
args: [{ selector: 'smart-tab-group', template: "<div class=\"sm-tab-group-container\">\n <mat-tab-group\n class=\"sm-tab-group\"\n (selectedTabChange)=\"navigateTabContent($event)\"\n [(selectedIndex)]=\"selectedTabIndex\"\n >\n <mat-tab\n class=\"sm-tab\"\n appearance=\"outline\"\n *ngFor=\"let tabTile of tabTiles\"\n label=\"{{ tabTile.tileName }}\"\n >\n <ng-template mat-tab-label *ngIf=\"tabTile.extra\">\n <span class=\"row\"\n >{{ tabTile.tileName }}\n <div\n [ngClass]=\"\n tabTile.extra ? 'sm-tab-notification' : 'sm-tab-notification-none'\n \"\n >\n {{ tabTile.extra }}\n </div></span\n >\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n <div class=\"sm-tab-content-container\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".sm-tab-group-container{margin:50px}.sm-tab-group ::ng-deep .mat-tab-label{background-color:#f9fafb;margin-left:10px;border-radius:10px;opacity:100!important}.mat-tab-body-content{border-radius:10px}.mat-mdc-tab-nav-bar,.mat-mdc-tab-header{border-bottom:0}.tab-content-container{padding:2em;border:1px solid #e6e6e6;box-shadow:0 4px 8px -4px #1a1a1a33;border-radius:4px;background-color:#fff}.mat-tab-label-active{background-color:#00a8da!important;opacity:1!important}.sm-tab-notification-none{display:none}.sm-tab-notification{background-color:red;width:20px;height:20px;border-radius:50%;color:#ff0}.sm-tab-group-container ::ng-deep .mat-tab-label-content{width:50%}.row{display:flex;flex-direction:row;width:100%;justify-content:space-between}\n"] }]
|
|
38
38
|
}], ctorParameters: () => [{ type: i1.SmartNavigationService }, { type: i2.ActivatedRoute }], propDecorators: { tabTiles: [{
|
|
39
39
|
type: Input
|
|
40
40
|
}], handlers: [{
|
|
41
41
|
type: Input
|
|
42
42
|
}] } });
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFiLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRhYi1ncm91cC9zbWFydC10YWItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtdGFiLWdyb3VwL3NtYXJ0LXRhYi1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUl6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFRL0IsTUFBTSxPQUFPLGlCQUFpQjtJQU81QixZQUFvQixpQkFBeUMsRUFBVSxLQUFxQjtRQUF4RSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXdCO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFKNUYscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBRXRCLHVCQUFrQixHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBR3pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBRUQsUUFBUSxLQUFVLENBQUM7SUFFbkIsa0JBQWtCLENBQUMsTUFBVztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FDL0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQ3RDLFNBQVMsRUFDVCxVQUFVLEVBQ1YsSUFBSSxDQUNMLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxRQUFnQjtRQUMxQyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7K0dBakNVLGlCQUFpQjttR0FBakIsaUJBQWlCLCtHQ2I5QixpZ0NBOEJBOzs0RkRqQmEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGlCQUFpQjt3SEFLbEIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTbWFydE5hdmlnYXRpb25TZXJ2aWNlLCBTbWFydFZpZXdIYW5kbGVyTW9kZWwgfSBmcm9tICcuLi8uLi9wcm9qZWN0cyc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhYlRpbGUgfSBmcm9tICcuL3RhYlRpbGUubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzbWFydC10YWItZ3JvdXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtdGFiLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtdGFiLWdyb3VwLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFiR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB0YWJUaWxlcyE6IFRhYlRpbGVbXTtcbiAgQElucHV0KCkgaGFuZGxlcnMhOiBTbWFydFZpZXdIYW5kbGVyTW9kZWxbXTtcbiAgc2VsZWN0ZWRUYWJJbmRleDogbnVtYmVyID0gMDtcblxuICBwdWJsaWMgc2VsZWN0ZWRUYWJDaGFuZ2VkOiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IFNtYXJ0TmF2aWdhdGlvblNlcnZpY2UsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5yb3V0ZSA9IHRoaXMucm91dGU7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgbmF2aWdhdGVUYWJDb250ZW50KCRldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnJvdXRlKSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnJvdXRlID0gdGhpcy5yb3V0ZTtcbiAgICB9XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5uYXZpZ2F0ZVRvKFxuICAgICAgW2Ake3RoaXMudGFiVGlsZXNbJGV2ZW50LmluZGV4XS51cmx9YF0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICAncHJlc2VydmUnLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgdGhpcy5zZWxlY3RlZFRhYkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGVkVGFiSW5kZXgpO1xuICB9XG5cbiAgZ2V0VGFiQ29tcG9uZW50RnJvbUhhbmRsZXJzKHZpZXdOYW1lOiBzdHJpbmcpOiBDb21wb25lbnRUeXBlPGFueT4gfCB1bmRlZmluZWQge1xuICAgIGZvciAobGV0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgaWYgKGhhbmRsZXIubmFtZSA9PT0gdmlld05hbWUpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXIuY29tcG9uZW50O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic20tdGFiLWdyb3VwLWNvbnRhaW5lclwiPlxuICAgIDxtYXQtdGFiLWdyb3VwXG4gICAgICAgIGNsYXNzPVwic20tdGFiLWdyb3VwXCJcbiAgICAgICAgKHNlbGVjdGVkVGFiQ2hhbmdlKT1cIm5hdmlnYXRlVGFiQ29udGVudCgkZXZlbnQpXCJcbiAgICAgICAgWyhzZWxlY3RlZEluZGV4KV09XCJzZWxlY3RlZFRhYkluZGV4XCJcbiAgICA+XG4gICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICBjbGFzcz1cInNtLXRhYlwiXG4gICAgICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgdGFiVGlsZSBvZiB0YWJUaWxlc1wiXG4gICAgICAgICAgICBsYWJlbD1cInt7IHRhYlRpbGUudGlsZU5hbWUgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbCAqbmdJZj1cInRhYlRpbGUuZXh0cmFcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgID57eyB0YWJUaWxlLnRpbGVOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYlRpbGUuZXh0cmEgPyAnc20tdGFiLW5vdGlmaWNhdGlvbicgOiAnc20tdGFiLW5vdGlmaWNhdGlvbi1ub25lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdGFiVGlsZS5leHRyYSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj48L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC10YWI+XG4gICAgPC9tYXQtdGFiLWdyb3VwPlxuICAgIDxkaXYgY2xhc3M9XCJzbS10YWItY29udGVudC1jb250YWluZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -21,7 +21,7 @@ export class MaterialTableComponent extends Table {
|
|
|
21
21
|
this.defaultActionToolbarId = SmartGridToolbarActionsUtil.defaultActionToolbarId;
|
|
22
22
|
}
|
|
23
23
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MaterialTableComponent, deps: [{ token: i1.ComponentFactoryService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: MaterialTableComponent, selector: "lib-material-table", usesInheritance: true, ngImport: i0, template: "<table\n #myTable\n mat-table\n [dataSource]=\"smartTable.tableRows\"\n class=\"full-width\"\n multiTemplateDataRows\n>\n <!-- Column Descriptor -->\n @if(smartTable.title){\n <caption *ngIf=\"smartTable.title\" class=\"captionTitle\">\n {{ smartTable.title }}\n </caption>\n\n }\n <ng-container\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\n matColumnDef=\"{{ header }}\"\n >\n <!-- my_menu is the implicit action column present on all tables: -->\n @if ('my_menu' === header) {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n >\n <smart-ui-action-toolbar\n #headerToolbar\n [id]=\"\n smartTable.getGridId()\n ? smartTable.getGridId() + '_headerToolbar'\n : 'grid_not_initialized'\n \"\n >\n </smart-ui-action-toolbar>\n </th>\n } @else {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n [attr.data-testid]=\"'header-' + header\"\n >\n <div\n *ngIf=\"header === 'icon' || header === 'img' || header === 'options' || header === 'button'\"\n ></div>\n <div *ngIf=\"header === 'select'\">\n <mat-checkbox\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\n [aria-label]=\"checkboxLabel()\"\n >\n </mat-checkbox>\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\n {{ smartTable.customTableHeaders[i] }}\n </div>\n </div>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'options' &&\n header !== 'button' &&\n header !== 'select' &&\n header !== 'expand' &&\n header !== 'actions'\n \"\n >\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\n <ng-template #sortable>\n <button\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\n mat-button\n class=\"sortableHeaderButton\"\n >\n {{ smartTable.customTableHeaders[i] }}\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"getSortIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortIcon(header)!\"\n ></smart-icon>\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"hasSortNumIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortNumIcon(header)\"\n ></smart-icon>\n </button>\n </ng-template>\n <ng-template #notSortable>\n {{ smartTable.customTableHeaders[i] }}\n </ng-template>\n </div>\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\" [attr.data-testid]=\"'cell-' + header\">\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\n !isDisabled(element)\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n : null\n \"\n [disabled]=\"isDisabled(element)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(element, header)\n | smartDateTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(element, header)\n | smartDate : smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(element, header)\n | smartTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox [disabled]=\"true\" [checked]=\"getValue(element, header)\"></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(element, i)\"\n [icon]=\"getIcon(getValue(element, header), i)!\"\n [color]=\"getColor(getValue(element, header), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div class=\"smart-table-icon-container\">\n <div *ngFor=\"let ir of getImageResourceIcons(element, header)\">\n <smart-icon [imageResource]=\"ir\"> </smart-icon>\n </div>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n <!------ TOOLBAR ------>\n <button\n *ngIf=\"showMenuButton(element, button)\"\n mat-button\n [matMenuTriggerFor]=\"menu\"\n (click)=\"customButtonClicked($event, button, element, undefined, true)\"\n color=\"{{ button.color }}\"\n [attr.data-testid]=\"element.id ? 'menu-' + element.id : null\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n <!-- {{ button.label ?? (button.translator ? button.translator(element).title : '') }} -->\n </button>\n <mat-menu #menu=\"matMenu\">\n <div *ngIf=\"button.menuItemButtons\">\n <button\n *ngFor=\"let btn of getMenuButtons(element, button)\"\n (click)=\"customButtonClicked($event, btn, element, undefined, true)\"\n mat-menu-item\n >\n <smart-icon\n *ngIf=\"btn?.translator(btn)?.icon\"\n [icon]=\"btn!.translator!(btn)!.icon!\"\n ></smart-icon>\n {{ btn?.translator(btn)?.title }}\n </button>\n </div>\n <div *ngIf=\"button.menuItemButtonsPropertyName\">\n <div *ngFor=\"let btn of getMenuItemButtonsPropertyName(element, button)\">\n <button\n *ngIf=\"btn.code !== ACTION_SEPERATOR\"\n (click)=\"customButtonClicked($event, button, element, btn, true)\"\n mat-menu-item\n [disabled]=\"btn.disabled\"\n [attr.data-testid]=\"btn.code ? 'action-' + btn.code : null\"\n [smartTooltip]=\"\n btn?.descriptor?.tooltip\n ? btn?.descriptor?.tooltip\n : button.translator!(btn).tooltip\n \"\n >\n <div\n class=\"smart-table-icon-container\"\n [ngClass]=\"\n button.translator!(btn).iconPosition === 'POST' ? 'reversed' : ''\n \"\n ><smart-icon\n *ngIf=\"button.translator!(btn).icon\"\n [icon]=\"button.translator!(btn).icon!\"\n ></smart-icon>\n {{ button.translator!(btn).title }}</div\n >\n </button>\n <mat-divider *ngIf=\"btn.code === ACTION_SEPERATOR\"></mat-divider>\n </div>\n </div>\n </mat-menu>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\n </div>\n <button\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\n \"\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"onToggle(element, $event)\"\n >\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\n </button>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\n <img\n *ngIf=\"header === 'img'\"\n [src]=\"getValue(element, header)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <!------ TOOLBAR ------>\n <ng-container *ngIf=\"showCellToolbar(element, header)\">\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, header)\"\n ></smart-ui-action-toolbar>\n </ng-container>\n <!------ TOOLBAR ------>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'option' &&\n header !== 'button' &&\n !isImageResource(element, header)\n \"\n [innerHtml]=\"getValue(element, header)\"\n ></div>\n </div>\n </td>\n </ng-container>\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\n <div\n class=\"example-element-detail\"\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\n >\n <ng-template #expandedArea></ng-template>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\n <ng-container *matRowDef=\"let element; columns: smartTable.tableHeaders\">\n <tr\n mat-row\n class=\"example-element-row\"\n [class.example-expanded-row]=\"expandedElement === element\"\n [ngClass]=\"getRowClasses(element)\"\n [ngStyle]=\"getRowStyles(element)\"\n (click)=\"handleOnRowClick(element)\"\n (dblclick)=\"handleOnRowDoubleClick($event, element)\"\n [attr.data-testid]=\"element.id ? 'row-' + element.id : null\"\n ></tr>\n <lib-default-actions-popup\n *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\"\n #defaultActionMenu\n [buttons]=\"getDefaultActionsForRow(element)!\"\n [row]=\"element\"\n ></lib-default-actions-popup>\n </ng-container>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\n</table>\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:#f5f5f5}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.reversed{flex-direction:row-reverse;gap:1rem}:host ::ng-deep .mat-mdc-menu-item{line-height:normal!important}.mat-mdc-menu-item[disabled]{cursor:default!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.captionTitle{font-size:1.5rem;align-content:center;padding:.5rem .75rem;text-align:start;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);background:#f5f5f5}\n"], dependencies: [{ kind: "directive", type: i2.SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i10.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "component", type: i11.DefaultActionsPopupComponent, selector: "lib-default-actions-popup", inputs: ["buttons", "row", "colIdx"] }, { kind: "pipe", type: i12.SmartDateTimePipe, name: "smartDateTime" }, { kind: "pipe", type: i12.SmartDatePipe, name: "smartDate" }, { kind: "pipe", type: i12.SmartTimePipe, name: "smartTime" }], animations: [
|
|
24
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: MaterialTableComponent, selector: "lib-material-table", usesInheritance: true, ngImport: i0, template: "<table\n #myTable\n mat-table\n [dataSource]=\"smartTable.tableRows\"\n class=\"full-width\"\n multiTemplateDataRows\n>\n <!-- Column Descriptor -->\n @if(smartTable.title){\n <caption *ngIf=\"smartTable.title\" class=\"captionTitle\">\n {{ smartTable.title }}\n </caption>\n\n }\n <ng-container\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\n matColumnDef=\"{{ header }}\"\n >\n <!-- my_menu is the implicit action column present on all tables: -->\n @if ('my_menu' === header) {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n >\n <smart-ui-action-toolbar\n #headerToolbar\n [id]=\"\n smartTable.getGridId()\n ? smartTable.getGridId() + '_headerToolbar'\n : 'grid_not_initialized'\n \"\n >\n </smart-ui-action-toolbar>\n </th>\n } @else {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n >\n <div\n *ngIf=\"header === 'icon' || header === 'img' || header === 'options' || header === 'button'\"\n ></div>\n <div *ngIf=\"header === 'select'\">\n <mat-checkbox\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\n [aria-label]=\"checkboxLabel()\"\n >\n </mat-checkbox>\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\n {{ smartTable.customTableHeaders[i] }}\n </div>\n </div>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'options' &&\n header !== 'button' &&\n header !== 'select' &&\n header !== 'expand' &&\n header !== 'actions'\n \"\n >\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\n <ng-template #sortable>\n <button\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\n mat-button\n class=\"sortableHeaderButton\"\n >\n {{ smartTable.customTableHeaders[i] }}\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"getSortIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortIcon(header)!\"\n ></smart-icon>\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"hasSortNumIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortNumIcon(header)\"\n ></smart-icon>\n </button>\n </ng-template>\n <ng-template #notSortable>\n {{ smartTable.customTableHeaders[i] }}\n </ng-template>\n </div>\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\">\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\n !isDisabled(element)\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n : null\n \"\n [disabled]=\"isDisabled(element)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(element, header)\n | smartDateTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(element, header)\n | smartDate : smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(element, header)\n | smartTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox [disabled]=\"true\" [checked]=\"getValue(element, header)\"></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(element, i)\"\n [icon]=\"getIcon(getValue(element, header), i)!\"\n [color]=\"getColor(getValue(element, header), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div class=\"smart-table-icon-container\">\n <div *ngFor=\"let ir of getImageResourceIcons(element, header)\">\n <smart-icon [imageResource]=\"ir\"> </smart-icon>\n </div>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n <!------ TOOLBAR ------>\n <button\n *ngIf=\"showMenuButton(element, button)\"\n mat-button\n [matMenuTriggerFor]=\"menu\"\n (click)=\"customButtonClicked($event, button, element, undefined, true)\"\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n <!-- {{ button.label ?? (button.translator ? button.translator(element).title : '') }} -->\n </button>\n <mat-menu #menu=\"matMenu\">\n <div *ngIf=\"button.menuItemButtons\">\n <button\n *ngFor=\"let btn of getMenuButtons(element, button)\"\n (click)=\"customButtonClicked($event, btn, element, undefined, true)\"\n mat-menu-item\n >\n <smart-icon\n *ngIf=\"btn?.translator(btn)?.icon\"\n [icon]=\"btn!.translator!(btn)!.icon!\"\n ></smart-icon>\n {{ btn?.translator(btn)?.title }}\n </button>\n </div>\n <div *ngIf=\"button.menuItemButtonsPropertyName\">\n <div *ngFor=\"let btn of getMenuItemButtonsPropertyName(element, button)\">\n <button\n *ngIf=\"btn.code !== ACTION_SEPERATOR\"\n (click)=\"customButtonClicked($event, button, element, btn, true)\"\n mat-menu-item\n [disabled]=\"btn.disabled\"\n [smartTooltip]=\"\n btn?.descriptor?.tooltip\n ? btn?.descriptor?.tooltip\n : button.translator!(btn).tooltip\n \"\n >\n <div\n class=\"smart-table-icon-container\"\n [ngClass]=\"\n button.translator!(btn).iconPosition === 'POST' ? 'reversed' : ''\n \"\n ><smart-icon\n *ngIf=\"button.translator!(btn).icon\"\n [icon]=\"button.translator!(btn).icon!\"\n ></smart-icon>\n {{ button.translator!(btn).title }}</div\n >\n </button>\n <mat-divider *ngIf=\"btn.code === ACTION_SEPERATOR\"></mat-divider>\n </div>\n </div>\n </mat-menu>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\n </div>\n <button\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\n \"\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"onToggle(element, $event)\"\n >\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\n </button>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\n <img\n *ngIf=\"header === 'img'\"\n [src]=\"getValue(element, header)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <!------ TOOLBAR ------>\n <ng-container *ngIf=\"showCellToolbar(element, header)\">\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, header)\"\n ></smart-ui-action-toolbar>\n </ng-container>\n <!------ TOOLBAR ------>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'option' &&\n header !== 'button' &&\n !isImageResource(element, header)\n \"\n [innerHtml]=\"getValue(element, header)\"\n ></div>\n </div>\n </td>\n </ng-container>\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\n <div\n class=\"example-element-detail\"\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\n >\n <ng-template #expandedArea></ng-template>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\n <ng-container *matRowDef=\"let element; columns: smartTable.tableHeaders\">\n <tr\n mat-row\n class=\"example-element-row\"\n [class.example-expanded-row]=\"expandedElement === element\"\n [ngClass]=\"getRowClasses(element)\"\n [ngStyle]=\"getRowStyles(element)\"\n (click)=\"handleOnRowClick(element)\"\n (dblclick)=\"handleOnRowDoubleClick($event, element)\"\n ></tr>\n <lib-default-actions-popup\n *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\"\n #defaultActionMenu\n [buttons]=\"getDefaultActionsForRow(element)!\"\n [row]=\"element\"\n ></lib-default-actions-popup>\n </ng-container>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\n</table>\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:#f5f5f5}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.reversed{flex-direction:row-reverse;gap:1rem}:host ::ng-deep .mat-mdc-menu-item{line-height:normal!important}.mat-mdc-menu-item[disabled]{cursor:default!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.captionTitle{font-size:1.5rem;align-content:center;padding:.5rem .75rem;text-align:start;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);background:#f5f5f5}\n"], dependencies: [{ kind: "directive", type: i2.SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i10.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "component", type: i11.DefaultActionsPopupComponent, selector: "lib-default-actions-popup", inputs: ["buttons", "row", "colIdx"] }, { kind: "pipe", type: i12.SmartDateTimePipe, name: "smartDateTime" }, { kind: "pipe", type: i12.SmartDatePipe, name: "smartDate" }, { kind: "pipe", type: i12.SmartTimePipe, name: "smartTime" }], animations: [
|
|
25
25
|
trigger('detailExpand', [
|
|
26
26
|
state('collapsed', style({ height: '0px', minHeight: '0' })),
|
|
27
27
|
state('expanded', style({ height: '*' })),
|
|
@@ -37,6 +37,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
37
37
|
state('expanded', style({ height: '*' })),
|
|
38
38
|
transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
|
|
39
39
|
]),
|
|
40
|
-
], template: "<table\n #myTable\n mat-table\n [dataSource]=\"smartTable.tableRows\"\n class=\"full-width\"\n multiTemplateDataRows\n>\n <!-- Column Descriptor -->\n @if(smartTable.title){\n <caption *ngIf=\"smartTable.title\" class=\"captionTitle\">\n {{ smartTable.title }}\n </caption>\n\n }\n <ng-container\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\n matColumnDef=\"{{ header }}\"\n >\n <!-- my_menu is the implicit action column present on all tables: -->\n @if ('my_menu' === header) {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n >\n <smart-ui-action-toolbar\n #headerToolbar\n [id]=\"\n smartTable.getGridId()\n ? smartTable.getGridId() + '_headerToolbar'\n : 'grid_not_initialized'\n \"\n >\n </smart-ui-action-toolbar>\n </th>\n } @else {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n [attr.data-testid]=\"'header-' + header\"\n >\n <div\n *ngIf=\"header === 'icon' || header === 'img' || header === 'options' || header === 'button'\"\n ></div>\n <div *ngIf=\"header === 'select'\">\n <mat-checkbox\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\n [aria-label]=\"checkboxLabel()\"\n >\n </mat-checkbox>\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\n {{ smartTable.customTableHeaders[i] }}\n </div>\n </div>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'options' &&\n header !== 'button' &&\n header !== 'select' &&\n header !== 'expand' &&\n header !== 'actions'\n \"\n >\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\n <ng-template #sortable>\n <button\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\n mat-button\n class=\"sortableHeaderButton\"\n >\n {{ smartTable.customTableHeaders[i] }}\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"getSortIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortIcon(header)!\"\n ></smart-icon>\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"hasSortNumIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortNumIcon(header)\"\n ></smart-icon>\n </button>\n </ng-template>\n <ng-template #notSortable>\n {{ smartTable.customTableHeaders[i] }}\n </ng-template>\n </div>\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\" [attr.data-testid]=\"'cell-' + header\">\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\n !isDisabled(element)\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n : null\n \"\n [disabled]=\"isDisabled(element)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(element, header)\n | smartDateTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(element, header)\n | smartDate : smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(element, header)\n | smartTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox [disabled]=\"true\" [checked]=\"getValue(element, header)\"></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(element, i)\"\n [icon]=\"getIcon(getValue(element, header), i)!\"\n [color]=\"getColor(getValue(element, header), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div class=\"smart-table-icon-container\">\n <div *ngFor=\"let ir of getImageResourceIcons(element, header)\">\n <smart-icon [imageResource]=\"ir\"> </smart-icon>\n </div>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n <!------ TOOLBAR ------>\n <button\n *ngIf=\"showMenuButton(element, button)\"\n mat-button\n [matMenuTriggerFor]=\"menu\"\n (click)=\"customButtonClicked($event, button, element, undefined, true)\"\n color=\"{{ button.color }}\"\n [attr.data-testid]=\"element.id ? 'menu-' + element.id : null\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n <!-- {{ button.label ?? (button.translator ? button.translator(element).title : '') }} -->\n </button>\n <mat-menu #menu=\"matMenu\">\n <div *ngIf=\"button.menuItemButtons\">\n <button\n *ngFor=\"let btn of getMenuButtons(element, button)\"\n (click)=\"customButtonClicked($event, btn, element, undefined, true)\"\n mat-menu-item\n >\n <smart-icon\n *ngIf=\"btn?.translator(btn)?.icon\"\n [icon]=\"btn!.translator!(btn)!.icon!\"\n ></smart-icon>\n {{ btn?.translator(btn)?.title }}\n </button>\n </div>\n <div *ngIf=\"button.menuItemButtonsPropertyName\">\n <div *ngFor=\"let btn of getMenuItemButtonsPropertyName(element, button)\">\n <button\n *ngIf=\"btn.code !== ACTION_SEPERATOR\"\n (click)=\"customButtonClicked($event, button, element, btn, true)\"\n mat-menu-item\n [disabled]=\"btn.disabled\"\n [attr.data-testid]=\"btn.code ? 'action-' + btn.code : null\"\n [smartTooltip]=\"\n btn?.descriptor?.tooltip\n ? btn?.descriptor?.tooltip\n : button.translator!(btn).tooltip\n \"\n >\n <div\n class=\"smart-table-icon-container\"\n [ngClass]=\"\n button.translator!(btn).iconPosition === 'POST' ? 'reversed' : ''\n \"\n ><smart-icon\n *ngIf=\"button.translator!(btn).icon\"\n [icon]=\"button.translator!(btn).icon!\"\n ></smart-icon>\n {{ button.translator!(btn).title }}</div\n >\n </button>\n <mat-divider *ngIf=\"btn.code === ACTION_SEPERATOR\"></mat-divider>\n </div>\n </div>\n </mat-menu>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\n </div>\n <button\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\n \"\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"onToggle(element, $event)\"\n >\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\n </button>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\n <img\n *ngIf=\"header === 'img'\"\n [src]=\"getValue(element, header)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <!------ TOOLBAR ------>\n <ng-container *ngIf=\"showCellToolbar(element, header)\">\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, header)\"\n ></smart-ui-action-toolbar>\n </ng-container>\n <!------ TOOLBAR ------>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'option' &&\n header !== 'button' &&\n !isImageResource(element, header)\n \"\n [innerHtml]=\"getValue(element, header)\"\n ></div>\n </div>\n </td>\n </ng-container>\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\n <div\n class=\"example-element-detail\"\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\n >\n <ng-template #expandedArea></ng-template>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\n <ng-container *matRowDef=\"let element; columns: smartTable.tableHeaders\">\n <tr\n mat-row\n class=\"example-element-row\"\n [class.example-expanded-row]=\"expandedElement === element\"\n [ngClass]=\"getRowClasses(element)\"\n [ngStyle]=\"getRowStyles(element)\"\n (click)=\"handleOnRowClick(element)\"\n (dblclick)=\"handleOnRowDoubleClick($event, element)\"\n [attr.data-testid]=\"element.id ? 'row-' + element.id : null\"\n ></tr>\n <lib-default-actions-popup\n *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\"\n #defaultActionMenu\n [buttons]=\"getDefaultActionsForRow(element)!\"\n [row]=\"element\"\n ></lib-default-actions-popup>\n </ng-container>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\n</table>\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:#f5f5f5}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.reversed{flex-direction:row-reverse;gap:1rem}:host ::ng-deep .mat-mdc-menu-item{line-height:normal!important}.mat-mdc-menu-item[disabled]{cursor:default!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.captionTitle{font-size:1.5rem;align-content:center;padding:.5rem .75rem;text-align:start;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);background:#f5f5f5}\n"] }]
|
|
40
|
+
], template: "<table\n #myTable\n mat-table\n [dataSource]=\"smartTable.tableRows\"\n class=\"full-width\"\n multiTemplateDataRows\n>\n <!-- Column Descriptor -->\n @if(smartTable.title){\n <caption *ngIf=\"smartTable.title\" class=\"captionTitle\">\n {{ smartTable.title }}\n </caption>\n\n }\n <ng-container\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\n matColumnDef=\"{{ header }}\"\n >\n <!-- my_menu is the implicit action column present on all tables: -->\n @if ('my_menu' === header) {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n >\n <smart-ui-action-toolbar\n #headerToolbar\n [id]=\"\n smartTable.getGridId()\n ? smartTable.getGridId() + '_headerToolbar'\n : 'grid_not_initialized'\n \"\n >\n </smart-ui-action-toolbar>\n </th>\n } @else {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n >\n <div\n *ngIf=\"header === 'icon' || header === 'img' || header === 'options' || header === 'button'\"\n ></div>\n <div *ngIf=\"header === 'select'\">\n <mat-checkbox\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\n [aria-label]=\"checkboxLabel()\"\n >\n </mat-checkbox>\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\n {{ smartTable.customTableHeaders[i] }}\n </div>\n </div>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'options' &&\n header !== 'button' &&\n header !== 'select' &&\n header !== 'expand' &&\n header !== 'actions'\n \"\n >\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\n <ng-template #sortable>\n <button\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\n mat-button\n class=\"sortableHeaderButton\"\n >\n {{ smartTable.customTableHeaders[i] }}\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"getSortIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortIcon(header)!\"\n ></smart-icon>\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"hasSortNumIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortNumIcon(header)\"\n ></smart-icon>\n </button>\n </ng-template>\n <ng-template #notSortable>\n {{ smartTable.customTableHeaders[i] }}\n </ng-template>\n </div>\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\">\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\n !isDisabled(element)\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n : null\n \"\n [disabled]=\"isDisabled(element)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(element, header)\n | smartDateTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(element, header)\n | smartDate : smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(element, header)\n | smartTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox [disabled]=\"true\" [checked]=\"getValue(element, header)\"></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(element, i)\"\n [icon]=\"getIcon(getValue(element, header), i)!\"\n [color]=\"getColor(getValue(element, header), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div class=\"smart-table-icon-container\">\n <div *ngFor=\"let ir of getImageResourceIcons(element, header)\">\n <smart-icon [imageResource]=\"ir\"> </smart-icon>\n </div>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n <!------ TOOLBAR ------>\n <button\n *ngIf=\"showMenuButton(element, button)\"\n mat-button\n [matMenuTriggerFor]=\"menu\"\n (click)=\"customButtonClicked($event, button, element, undefined, true)\"\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n <!-- {{ button.label ?? (button.translator ? button.translator(element).title : '') }} -->\n </button>\n <mat-menu #menu=\"matMenu\">\n <div *ngIf=\"button.menuItemButtons\">\n <button\n *ngFor=\"let btn of getMenuButtons(element, button)\"\n (click)=\"customButtonClicked($event, btn, element, undefined, true)\"\n mat-menu-item\n >\n <smart-icon\n *ngIf=\"btn?.translator(btn)?.icon\"\n [icon]=\"btn!.translator!(btn)!.icon!\"\n ></smart-icon>\n {{ btn?.translator(btn)?.title }}\n </button>\n </div>\n <div *ngIf=\"button.menuItemButtonsPropertyName\">\n <div *ngFor=\"let btn of getMenuItemButtonsPropertyName(element, button)\">\n <button\n *ngIf=\"btn.code !== ACTION_SEPERATOR\"\n (click)=\"customButtonClicked($event, button, element, btn, true)\"\n mat-menu-item\n [disabled]=\"btn.disabled\"\n [smartTooltip]=\"\n btn?.descriptor?.tooltip\n ? btn?.descriptor?.tooltip\n : button.translator!(btn).tooltip\n \"\n >\n <div\n class=\"smart-table-icon-container\"\n [ngClass]=\"\n button.translator!(btn).iconPosition === 'POST' ? 'reversed' : ''\n \"\n ><smart-icon\n *ngIf=\"button.translator!(btn).icon\"\n [icon]=\"button.translator!(btn).icon!\"\n ></smart-icon>\n {{ button.translator!(btn).title }}</div\n >\n </button>\n <mat-divider *ngIf=\"btn.code === ACTION_SEPERATOR\"></mat-divider>\n </div>\n </div>\n </mat-menu>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\n </div>\n <button\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\n \"\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"onToggle(element, $event)\"\n >\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\n </button>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\n <img\n *ngIf=\"header === 'img'\"\n [src]=\"getValue(element, header)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <!------ TOOLBAR ------>\n <ng-container *ngIf=\"showCellToolbar(element, header)\">\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, header)\"\n ></smart-ui-action-toolbar>\n </ng-container>\n <!------ TOOLBAR ------>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'option' &&\n header !== 'button' &&\n !isImageResource(element, header)\n \"\n [innerHtml]=\"getValue(element, header)\"\n ></div>\n </div>\n </td>\n </ng-container>\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\n <div\n class=\"example-element-detail\"\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\n >\n <ng-template #expandedArea></ng-template>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\n <ng-container *matRowDef=\"let element; columns: smartTable.tableHeaders\">\n <tr\n mat-row\n class=\"example-element-row\"\n [class.example-expanded-row]=\"expandedElement === element\"\n [ngClass]=\"getRowClasses(element)\"\n [ngStyle]=\"getRowStyles(element)\"\n (click)=\"handleOnRowClick(element)\"\n (dblclick)=\"handleOnRowDoubleClick($event, element)\"\n ></tr>\n <lib-default-actions-popup\n *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\"\n #defaultActionMenu\n [buttons]=\"getDefaultActionsForRow(element)!\"\n [row]=\"element\"\n ></lib-default-actions-popup>\n </ng-container>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\n</table>\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:#f5f5f5}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.reversed{flex-direction:row-reverse;gap:1rem}:host ::ng-deep .mat-mdc-menu-item{line-height:normal!important}.mat-mdc-menu-item[disabled]{cursor:default!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.captionTitle{font-size:1.5rem;align-content:center;padding:.5rem .75rem;text-align:start;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);background:#f5f5f5}\n"] }]
|
|
41
41
|
}], ctorParameters: () => [{ type: i1.ComponentFactoryService }] });
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtdGFibGUvdGFibGVzL21hdGVyaWFsLXRhYmxlL21hdGVyaWFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRhYmxlL3RhYmxlcy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFjMUYsTUFBTSxPQUFPLHNCQUF1QixTQUFRLEtBQUs7SUFHL0MsWUFBWSxTQUFrQztRQUM1QyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFIbkIsMkJBQXNCLEdBQVcsMkJBQTJCLENBQUMsc0JBQXNCLENBQUM7SUFJcEYsQ0FBQzsrR0FMVSxzQkFBc0I7bUdBQXRCLHNCQUFzQixpRkNsQm5DLHNyZUEwWEEsb3lLRGhYYztZQUNWLE9BQU8sQ0FBQyxjQUFjLEVBQUU7Z0JBQ3RCLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDNUQsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDekMsVUFBVSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2FBQ3RGLENBQUM7U0FDSDs7NEZBRVUsc0JBQXNCO2tCQVpsQyxTQUFTOytCQUNFLG9CQUFvQixjQUdsQjt3QkFDVixPQUFPLENBQUMsY0FBYyxFQUFFOzRCQUN0QixLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7NEJBQzVELEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7NEJBQ3pDLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FBQzt5QkFDdEYsQ0FBQztxQkFDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICcuLi90YWJsZSc7XG5pbXBvcnQgeyB0cmlnZ2VyLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbXBvbmVudEZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50LWZhY3Rvcnktc2VydmljZS9wcm9qZWN0cyc7XG5pbXBvcnQgeyBTbWFydEdyaWRUb29sYmFyQWN0aW9uc1V0aWwgfSBmcm9tICcuLi8uLi8uLi9zbWFydC1ncmlkL3NtYXJ0LWdyaWQtdG9vbGJhci11dGlsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW1hdGVyaWFsLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmNzcyddLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xuICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcgfSkpLFxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXG4gICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA8PT4gY29sbGFwc2VkJywgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJykpLFxuICAgIF0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRhYmxlQ29tcG9uZW50IGV4dGVuZHMgVGFibGUge1xuICBkZWZhdWx0QWN0aW9uVG9vbGJhcklkOiBzdHJpbmcgPSBTbWFydEdyaWRUb29sYmFyQWN0aW9uc1V0aWwuZGVmYXVsdEFjdGlvblRvb2xiYXJJZDtcblxuICBjb25zdHJ1Y3RvcihjZlNlcnZpY2U6IENvbXBvbmVudEZhY3RvcnlTZXJ2aWNlKSB7XG4gICAgc3VwZXIoY2ZTZXJ2aWNlKTtcbiAgfVxufVxuIiwiPHRhYmxlXG4gICNteVRhYmxlXG4gIG1hdC10YWJsZVxuICBbZGF0YVNvdXJjZV09XCJzbWFydFRhYmxlLnRhYmxlUm93c1wiXG4gIGNsYXNzPVwiZnVsbC13aWR0aFwiXG4gIG11bHRpVGVtcGxhdGVEYXRhUm93c1xuPlxuICA8IS0tIENvbHVtbiBEZXNjcmlwdG9yIC0tPlxuICBAaWYoc21hcnRUYWJsZS50aXRsZSl7XG4gIDxjYXB0aW9uICpuZ0lmPVwic21hcnRUYWJsZS50aXRsZVwiIGNsYXNzPVwiY2FwdGlvblRpdGxlXCI+XG4gICAge3sgc21hcnRUYWJsZS50aXRsZSB9fVxuICA8L2NhcHRpb24+XG5cbiAgfVxuICA8bmctY29udGFpbmVyXG4gICAgKm5nRm9yPVwibGV0IGhlYWRlciBvZiBzbWFydFRhYmxlLnRhYmxlSGVhZGVyczsgbGV0IGkgPSBpbmRleFwiXG4gICAgbWF0Q29sdW1uRGVmPVwie3sgaGVhZGVyIH19XCJcbiAgPlxuICAgIDwhLS0gbXlfbWVudSBpcyB0aGUgaW1wbGljaXQgYWN0aW9uIGNvbHVtbiBwcmVzZW50IG9uIGFsbCB0YWJsZXM6IC0tPlxuICAgIEBpZiAoJ215X21lbnUnID09PSBoZWFkZXIpIHtcbiAgICA8dGhcbiAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgIFtuZ0NsYXNzXT1cImdldENvbHVtbkNsYXNzZXMoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyFbaV0pXCJcbiAgICAgIFtuZ1N0eWxlXT1cImdldENvbHVtblN0eWxlcyhzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIVtpXSlcIlxuICAgID5cbiAgICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhclxuICAgICAgICAjaGVhZGVyVG9vbGJhclxuICAgICAgICBbaWRdPVwiXG4gICAgICAgICAgc21hcnRUYWJsZS5nZXRHcmlkSWQoKVxuICAgICAgICAgICAgPyBzbWFydFRhYmxlLmdldEdyaWRJZCgpICsgJ19oZWFkZXJUb29sYmFyJ1xuICAgICAgICAgICAgOiAnZ3JpZF9ub3RfaW5pdGlhbGl6ZWQnXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICA8L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxuICAgIDwvdGg+XG4gICAgfSBAZWxzZSB7XG4gICAgPHRoXG4gICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICBbbmdDbGFzc109XCJnZXRDb2x1bW5DbGFzc2VzKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldKVwiXG4gICAgICBbbmdTdHlsZV09XCJnZXRDb2x1bW5TdHlsZXMoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyFbaV0pXCJcbiAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidoZWFkZXItJyArIGhlYWRlclwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImhlYWRlciA9PT0gJ2ljb24nIHx8IGhlYWRlciA9PT0gJ2ltZycgfHwgaGVhZGVyID09PSAnb3B0aW9ucycgfHwgaGVhZGVyID09PSAnYnV0dG9uJ1wiXG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaGVhZGVyID09PSAnc2VsZWN0J1wiPlxuICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIVtpXS5zaG93Q2hlY2tib3hJbkhlYWRlclwiXG4gICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyB0b2dnbGVBbGxSb3dzKCkgOiBudWxsXCJcbiAgICAgICAgICBbY2hlY2tlZF09XCJzbWFydFRhYmxlLnNlbGVjdGlvbiEuaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNtYXJ0VGFibGUuc2VsZWN0aW9uIS5oYXNWYWx1ZSgpICYmICFpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgIFthcmlhLWxhYmVsXT1cImNoZWNrYm94TGFiZWwoKVwiXG4gICAgICAgID5cbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyFbaV0uc2hvd0NoZWNrYm94SW5IZWFkZXJcIj5cbiAgICAgICAgICB7eyBzbWFydFRhYmxlLmN1c3RvbVRhYmxlSGVhZGVyc1tpXSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGhlYWRlciAhPT0gJ2ljb24nICYmXG4gICAgICAgICAgaGVhZGVyICE9PSAnaW1nJyAmJlxuICAgICAgICAgIGhlYWRlciAhPT0gJ29wdGlvbnMnICYmXG4gICAgICAgICAgaGVhZGVyICE9PSAnYnV0dG9uJyAmJlxuICAgICAgICAgIGhlYWRlciAhPT0gJ3NlbGVjdCcgJiZcbiAgICAgICAgICBoZWFkZXIgIT09ICdleHBhbmQnICYmXG4gICAgICAgICAgaGVhZGVyICE9PSAnYWN0aW9ucydcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0VGFibGUuc29ydGFibGU7IHRoZW4gc29ydGFibGU7IGVsc2Ugbm90U29ydGFibGVcIj48L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzb3J0YWJsZT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwic29ydEJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIVtpXSlcIlxuICAgICAgICAgICAgKm5nSWY9XCJzbWFydFRhYmxlLnNvcnRhYmxlICYmIGlzU29ydGFibGUoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyFbaV0pXCJcbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwic29ydGFibGVIZWFkZXJCdXR0b25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tVGFibGVIZWFkZXJzW2ldIH19XG4gICAgICAgICAgICA8c21hcnQtaWNvblxuICAgICAgICAgICAgICBjbGFzcz1cInNvcnRhYmxlSGVhZGVyQnV0dG9uSWNvblwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiZ2V0U29ydEljb24oaGVhZGVyKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwic29ydFwiXG4gICAgICAgICAgICAgIFtpY29uXT1cImdldFNvcnRJY29uKGhlYWRlcikhXCJcbiAgICAgICAgICAgID48L3NtYXJ0LWljb24+XG4gICAgICAgICAgICA8c21hcnQtaWNvblxuICAgICAgICAgICAgICBjbGFzcz1cInNvcnRhYmxlSGVhZGVyQnV0dG9uSWNvblwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaGFzU29ydE51bUljb24oaGVhZGVyKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwic29ydFwiXG4gICAgICAgICAgICAgIFtpY29uXT1cImdldFNvcnROdW1JY29uKGhlYWRlcilcIlxuICAgICAgICAgICAgPjwvc21hcnQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub3RTb3J0YWJsZT5cbiAgICAgICAgICB7eyBzbWFydFRhYmxlLmN1c3RvbVRhYmxlSGVhZGVyc1tpXSB9fVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC90aD5cbiAgICB9XG4gICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBbbmdDbGFzc109XCJpc0Rpc2FibGVkKGVsZW1lbnQpID8gJ2Rpc2FibGVkUm93JyA6ICcnXCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2NlbGwtJyArIGhlYWRlclwiPlxuICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgJiZcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnR5TmFtZSA9PT0gJ3NlbGVjdCcgJiZcbiAgICAgICAgICAhaXNEaXNhYmxlZChlbGVtZW50KVxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJcbiAgICAgICAgICAkZXZlbnRcbiAgICAgICAgICAgID8gc2V0U2VsZWN0aW9uKFxuICAgICAgICAgICAgICAgIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcbiAgICAgICAgICAgICAgICAgID8gc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShlbGVtZW50LCBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5KVxuICAgICAgICAgICAgICAgICAgOiBlbGVtZW50XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZChlbGVtZW50KVwiXG4gICAgICAgIFtjaGVja2VkXT1cIlxuICAgICAgICAgIHNtYXJ0VGFibGUuc2VsZWN0aW9uIS5pc1NlbGVjdGVkKFxuICAgICAgICAgICAgc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eVxuICAgICAgICAgICAgICA/IHNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkoZWxlbWVudCwgc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSlcbiAgICAgICAgICAgICAgOiBlbGVtZW50XG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgICBbYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICBjaGVja2JveExhYmVsKFxuICAgICAgICAgICAgc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eVxuICAgICAgICAgICAgICA/IHNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkoZWxlbWVudCwgc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSlcbiAgICAgICAgICAgICAgOiBlbGVtZW50XG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXNcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8udHlwZSA9PT0gdHlwZSgpLkRBVEVUSU1FXCI+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgIGdldFZhbHVlKGVsZW1lbnQsIGhlYWRlcilcbiAgICAgICAgICAgICAgfCBzbWFydERhdGVUaW1lIDogc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy5kYXRlRm9ybWF0XG4gICAgICAgICAgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LnR5cGUgPT09IHR5cGUoKS5EQVRFXCI+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgIGdldFZhbHVlKGVsZW1lbnQsIGhlYWRlcilcbiAgICAgICAgICAgICAgfCBzbWFydERhdGUgOiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LmRhdGVGb3JtYXRcbiAgICAgICAgICB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8udHlwZSA9PT0gdHlwZSgpLlRJTUVcIj5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKVxuICAgICAgICAgICAgICB8IHNtYXJ0VGltZSA6IHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8uZGF0ZUZvcm1hdFxuICAgICAgICAgIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuQ0hFQ0tCT1hcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IFtkaXNhYmxlZF09XCJ0cnVlXCIgW2NoZWNrZWRdPVwiZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKVwiPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LnR5cGUgPT09IHR5cGUoKS5JQ09OICYmXG4gICAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/Lmljb25zPy5sZW5ndGhcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNtYXJ0LWljb25cbiAgICAgICAgICAgIFtzbWFydFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChlbGVtZW50LCBpKVwiXG4gICAgICAgICAgICBbaWNvbl09XCJnZXRJY29uKGdldFZhbHVlKGVsZW1lbnQsIGhlYWRlciksIGkpIVwiXG4gICAgICAgICAgICBbY29sb3JdPVwiZ2V0Q29sb3IoZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKSwgaSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3NtYXJ0LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic21hcnQtdGFibGUtaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXIgb2YgZ2V0SW1hZ2VSZXNvdXJjZUljb25zKGVsZW1lbnQsIGhlYWRlcilcIj5cbiAgICAgICAgICA8c21hcnQtaWNvbiBbaW1hZ2VSZXNvdXJjZV09XCJpclwiPiA8L3NtYXJ0LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmJ1dHRvbnNcIlxuICAgICAgICBjbGFzcz1cInNtYXJ0LXRhYmxlLWJ1dHRvbnMtY29sXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uYnV0dG9uc1wiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QnV0dG9uKGJ1dHRvbiwgZWxlbWVudClcIiBbbmdTd2l0Y2hdPVwiYnV0dG9uLnR5cGVcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidXR0b24sIGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cInNtYXJ0VGFibGVCdXR0b25UeXBlLklDT05cIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJ7eyBidXR0b24uY29sb3IgfX1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c21hcnQtaWNvbiB0aXRsZT1cInt7IGJ1dHRvbi5sYWJlbCB9fVwiIFtpY29uXT1cImJ1dHRvbi5pY29uIVwiPjwvc21hcnQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ1dHRvbiwgZWxlbWVudClcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwic21hcnRUYWJsZUJ1dHRvblR5cGUuTk9STUFMXCJcbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cInt7IGJ1dHRvbi5jb2xvciB9fVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiYnV0dG9uLmljb25cIiBbaWNvbl09XCJidXR0b24uaWNvblwiPjwvc21hcnQtaWNvbj5cbiAgICAgICAgICAgICAge3sgYnV0dG9uLmxhYmVsID8/IChidXR0b24udHJhbnNsYXRvciA/IGJ1dHRvbi50cmFuc2xhdG9yKGVsZW1lbnQpLnRpdGxlIDogJycpIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidXR0b24sIGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cInNtYXJ0VGFibGVCdXR0b25UeXBlLlJBSVNFRFwiXG4gICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwie3sgYnV0dG9uLmNvbG9yIH19XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJidXR0b24uaWNvblwiIFtpY29uXT1cImJ1dHRvbi5pY29uXCI+PC9zbWFydC1pY29uPlxuICAgICAgICAgICAgICB7eyBidXR0b24ubGFiZWwgPz8gKGJ1dHRvbi50cmFuc2xhdG9yID8gYnV0dG9uLnRyYW5zbGF0b3IoZWxlbWVudCkudGl0bGUgOiAnJykgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwic21hcnRUYWJsZUJ1dHRvblR5cGUuTUVOVVwiIGNsYXNzPVwibWVudS1idXR0b25cIj5cbiAgICAgICAgICAgICAgPCEtLS0tLS0gVE9PTEJBUiAtLS0tLS0+XG4gICAgICAgICAgICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhclxuICAgICAgICAgICAgICAgIFt1aUFjdGlvbk1vZGVsc109XCJnZXRSb3dDb2x1bW5BY3Rpb24oZWxlbWVudCwgZGVmYXVsdEFjdGlvblRvb2xiYXJJZClcIlxuICAgICAgICAgICAgICA+PC9zbWFydC11aS1hY3Rpb24tdG9vbGJhcj5cbiAgICAgICAgICAgICAgPCEtLS0tLS0gVE9PTEJBUiAtLS0tLS0+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dNZW51QnV0dG9uKGVsZW1lbnQsIGJ1dHRvbilcIlxuICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidXR0b24sIGVsZW1lbnQsIHVuZGVmaW5lZCwgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwie3sgYnV0dG9uLmNvbG9yIH19XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJlbGVtZW50LmlkID8gJ21lbnUtJyArIGVsZW1lbnQuaWQgOiBudWxsXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiYnV0dG9uLmljb25cIiBbaWNvbl09XCJidXR0b24uaWNvblwiPjwvc21hcnQtaWNvbj5cbiAgICAgICAgICAgICAgICA8IS0tIHt7IGJ1dHRvbi5sYWJlbCA/PyAoYnV0dG9uLnRyYW5zbGF0b3IgPyBidXR0b24udHJhbnNsYXRvcihlbGVtZW50KS50aXRsZSA6ICcnKSB9fSAtLT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYnV0dG9uLm1lbnVJdGVtQnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYnRuIG9mIGdldE1lbnVCdXR0b25zKGVsZW1lbnQsIGJ1dHRvbilcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ0biwgZWxlbWVudCwgdW5kZWZpbmVkLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNtYXJ0LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ0bj8udHJhbnNsYXRvcihidG4pPy5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJidG4hLnRyYW5zbGF0b3IhKGJ0bikhLmljb24hXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc21hcnQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAge3sgYnRuPy50cmFuc2xhdG9yKGJ0bik/LnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYnV0dG9uLm1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnRuIG9mIGdldE1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZShlbGVtZW50LCBidXR0b24pXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ0bi5jb2RlICE9PSBBQ1RJT05fU0VQRVJBVE9SXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ1dHRvbiwgZWxlbWVudCwgYnRuLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidG4uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cImJ0bi5jb2RlID8gJ2FjdGlvbi0nICsgYnRuLmNvZGUgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc21hcnRUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYnRuPy5kZXNjcmlwdG9yPy50b29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gYnRuPy5kZXNjcmlwdG9yPy50b29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYnV0dG9uLnRyYW5zbGF0b3IhKGJ0bikudG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNtYXJ0LXRhYmxlLWljb24tY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24udHJhbnNsYXRvciEoYnRuKS5pY29uUG9zaXRpb24gPT09ICdQT1NUJyA/ICdyZXZlcnNlZCcgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48c21hcnQtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ1dHRvbi50cmFuc2xhdG9yIShidG4pLmljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJidXR0b24udHJhbnNsYXRvciEoYnRuKS5pY29uIVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zbWFydC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgYnV0dG9uLnRyYW5zbGF0b3IhKGJ0bikudGl0bGUgfX08L2RpdlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlciAqbmdJZj1cImJ0bi5jb2RlID09PSBBQ1RJT05fU0VQRVJBVE9SXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmljb25cIj5cbiAgICAgICAgPHNtYXJ0LWljb25cbiAgICAgICAgICAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbj8uaWNvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5pY29uPy5jc3NDbGFzcyA/PyAnJ1wiXG4gICAgICAgICAgW2NvbG9yXT1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbj8uY29sb3JcIlxuICAgICAgICAgIFtpY29uXT1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbiEuaWNvblwiXG4gICAgICAgID5cbiAgICAgICAgPC9zbWFydC1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJlxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciAhPT0gdW5kZWZpbmVkXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciEoZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKSkgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgJiZcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnR5TmFtZSA9PT0gJ2V4cGFuZCdcbiAgICAgICAgXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGFyaWEtbGFiZWw9XCJleHBhbmQgcm93XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlKGVsZW1lbnQsICRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImV4cGFuZGVkRWxlbWVudCAhPT0gZWxlbWVudFwiIFtpY29uXT1cIidrZXlib2FyZF9hcnJvd19kb3duJ1wiPjwvc21hcnQtaWNvbj5cbiAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJleHBhbmRlZEVsZW1lbnQgPT09IGVsZW1lbnRcIiBbaWNvbl09XCIna2V5Ym9hcmRfYXJyb3dfdXAnXCI+PC9zbWFydC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgfHxcbiAgICAgICAgICAoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcyAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbiAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uYnV0dG9ucyAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciAmJlxuICAgICAgICAgICAgIShzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnR5TmFtZSA9PT0gJ3NlbGVjdCcpICYmXG4gICAgICAgICAgICAhKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydHlOYW1lID09PSAnZXhwYW5kJykpXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiaGVhZGVyID09PSAnaWNvbidcIiBbaWNvbl09XCJnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpIVwiPiA8L3NtYXJ0LWljb24+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cImhlYWRlciA9PT0gJ2ltZydcIlxuICAgICAgICAgIFtzcmNdPVwiZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKVwiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICBjbGFzcz1cInNtYXJ0dGFibGVJbWdcIlxuICAgICAgICAvPlxuICAgICAgICA8IS0tLS0tLSBUT09MQkFSIC0tLS0tLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dDZWxsVG9vbGJhcihlbGVtZW50LCBoZWFkZXIpXCI+XG4gICAgICAgICAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyXG4gICAgICAgICAgICBbdWlBY3Rpb25Nb2RlbHNdPVwiZ2V0Um93Q29sdW1uQWN0aW9uKGVsZW1lbnQsIGhlYWRlcilcIlxuICAgICAgICAgID48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLS0tLS0gVE9PTEJBUiAtLS0tLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgaGVhZGVyICE9PSAnaWNvbicgJiZcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ2ltZycgJiZcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ29wdGlvbicgJiZcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ2J1dHRvbicgJiZcbiAgICAgICAgICAgICFpc0ltYWdlUmVzb3VyY2UoZWxlbWVudCwgaGVhZGVyKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2lubmVySHRtbF09XCJnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC90ZD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBFeHBhbmRlZCBDb250ZW50IENvbHVtbiAtIFRoZSBkZXRhaWwgcm93IGlzIG1hZGUgdXAgb2YgdGhpcyBvbmUgY29sdW1uIHRoYXQgc3BhbnMgYWNyb3NzIGFsbCBjb2x1bW5zIC0tPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XG4gICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBbYXR0ci5jb2xzcGFuXT1cInNtYXJ0VGFibGUudGFibGVIZWFkZXJzLmxlbmd0aFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImV4YW1wbGUtZWxlbWVudC1kZXRhaWxcIlxuICAgICAgICBbQGRldGFpbEV4cGFuZF09XCJlbGVtZW50ID09IGV4cGFuZGVkRWxlbWVudCA/ICdleHBhbmRlZCcgOiAnY29sbGFwc2VkJ1wiXG4gICAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZXhwYW5kZWRBcmVhPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L3RkPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cInNtYXJ0VGFibGUudGFibGVIZWFkZXJzOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICA8bmctY29udGFpbmVyICptYXRSb3dEZWY9XCJsZXQgZWxlbWVudDsgY29sdW1uczogc21hcnRUYWJsZS50YWJsZUhlYWRlcnNcIj5cbiAgICA8dHJcbiAgICAgIG1hdC1yb3dcbiAgICAgIGNsYXNzPVwiZXhhbXBsZS1lbGVtZW50LXJvd1wiXG4gICAgICBbY2xhc3MuZXhhbXBsZS1leHBhbmRlZC1yb3ddPVwiZXhwYW5kZWRFbGVtZW50ID09PSBlbGVtZW50XCJcbiAgICAgIFtuZ0NsYXNzXT1cImdldFJvd0NsYXNzZXMoZWxlbWVudClcIlxuICAgICAgW25nU3R5bGVdPVwiZ2V0Um93U3R5bGVzKGVsZW1lbnQpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVPblJvd0NsaWNrKGVsZW1lbnQpXCJcbiAgICAgIChkYmxjbGljayk9XCJoYW5kbGVPblJvd0RvdWJsZUNsaWNrKCRldmVudCwgZWxlbWVudClcIlxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiZWxlbWVudC5pZCA/ICdyb3ctJyArIGVsZW1lbnQuaWQgOiBudWxsXCJcbiAgICA+PC90cj5cbiAgICA8bGliLWRlZmF1bHQtYWN0aW9ucy1wb3B1cFxuICAgICAgKm5nSWY9XCJzbWFydFRhYmxlLmRlZmF1bHRBY3Rpb25Db2RlcyAmJiBzbWFydFRhYmxlLmRlZmF1bHRBY3Rpb25Db2Rlcy5sZW5ndGggPiAwXCJcbiAgICAgICNkZWZhdWx0QWN0aW9uTWVudVxuICAgICAgW2J1dHRvbnNdPVwiZ2V0RGVmYXVsdEFjdGlvbnNGb3JSb3coZWxlbWVudCkhXCJcbiAgICAgIFtyb3ddPVwiZWxlbWVudFwiXG4gICAgPjwvbGliLWRlZmF1bHQtYWN0aW9ucy1wb3B1cD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkRGV0YWlsJ11cIiBjbGFzcz1cImV4YW1wbGUtZGV0YWlsLXJvd1wiPjwvdHI+XG48L3RhYmxlPlxuIl19
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtdGFibGUvdGFibGVzL21hdGVyaWFsLXRhYmxlL21hdGVyaWFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRhYmxlL3RhYmxlcy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFjMUYsTUFBTSxPQUFPLHNCQUF1QixTQUFRLEtBQUs7SUFHL0MsWUFBWSxTQUFrQztRQUM1QyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFIbkIsMkJBQXNCLEdBQVcsMkJBQTJCLENBQUMsc0JBQXNCLENBQUM7SUFJcEYsQ0FBQzsrR0FMVSxzQkFBc0I7bUdBQXRCLHNCQUFzQixpRkNsQm5DLGkzZEFzWEEsb3lLRDVXYztZQUNWLE9BQU8sQ0FBQyxjQUFjLEVBQUU7Z0JBQ3RCLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDNUQsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDekMsVUFBVSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2FBQ3RGLENBQUM7U0FDSDs7NEZBRVUsc0JBQXNCO2tCQVpsQyxTQUFTOytCQUNFLG9CQUFvQixjQUdsQjt3QkFDVixPQUFPLENBQUMsY0FBYyxFQUFFOzRCQUN0QixLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7NEJBQzVELEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7NEJBQ3pDLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FBQzt5QkFDdEYsQ0FBQztxQkFDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICcuLi90YWJsZSc7XG5pbXBvcnQgeyB0cmlnZ2VyLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbXBvbmVudEZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50LWZhY3Rvcnktc2VydmljZS9wcm9qZWN0cyc7XG5pbXBvcnQgeyBTbWFydEdyaWRUb29sYmFyQWN0aW9uc1V0aWwgfSBmcm9tICcuLi8uLi8uLi9zbWFydC1ncmlkL3NtYXJ0LWdyaWQtdG9vbGJhci11dGlsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW1hdGVyaWFsLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmNzcyddLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xuICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcgfSkpLFxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXG4gICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA8PT4gY29sbGFwc2VkJywgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJykpLFxuICAgIF0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRhYmxlQ29tcG9uZW50IGV4dGVuZHMgVGFibGUge1xuICBkZWZhdWx0QWN0aW9uVG9vbGJhcklkOiBzdHJpbmcgPSBTbWFydEdyaWRUb29sYmFyQWN0aW9uc1V0aWwuZGVmYXVsdEFjdGlvblRvb2xiYXJJZDtcblxuICBjb25zdHJ1Y3RvcihjZlNlcnZpY2U6IENvbXBvbmVudEZhY3RvcnlTZXJ2aWNlKSB7XG4gICAgc3VwZXIoY2ZTZXJ2aWNlKTtcbiAgfVxufVxuIiwiPHRhYmxlXG4gICNteVRhYmxlXG4gIG1hdC10YWJsZVxuICBbZGF0YVNvdXJjZV09XCJzbWFydFRhYmxlLnRhYmxlUm93c1wiXG4gIGNsYXNzPVwiZnVsbC13aWR0aFwiXG4gIG11bHRpVGVtcGxhdGVEYXRhUm93c1xuPlxuICA8IS0tIENvbHVtbiBEZXNjcmlwdG9yIC0tPlxuICBAaWYoc21hcnRUYWJsZS50aXRsZSl7XG4gIDxjYXB0aW9uICpuZ0lmPVwic21hcnRUYWJsZS50aXRsZVwiIGNsYXNzPVwiY2FwdGlvblRpdGxlXCI+XG4gICAge3sgc21hcnRUYWJsZS50aXRsZSB9fVxuICA8L2NhcHRpb24+XG5cbiAgfVxuICA8bmctY29udGFpbmVyXG4gICAgKm5nRm9yPVwibGV0IGhlYWRlciBvZiBzbWFydFRhYmxlLnRhYmxlSGVhZGVyczsgbGV0IGkgPSBpbmRleFwiXG4gICAgbWF0Q29sdW1uRGVmPVwie3sgaGVhZGVyIH19XCJcbiAgPlxuICAgIDwhLS0gbXlfbWVudSBpcyB0aGUgaW1wbGljaXQgYWN0aW9uIGNvbHVtbiBwcmVzZW50IG9uIGFsbCB0YWJsZXM6IC0tPlxuICAgIEBpZiAoJ215X21lbnUnID09PSBoZWFkZXIpIHtcbiAgICA8dGhcbiAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgIFtuZ0NsYXNzXT1cImdldENvbHVtbkNsYXNzZXMoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyFbaV0pXCJcbiAgICAgIFtuZ1N0eWxlXT1cImdldENvbHVtblN0eWxlcyhzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIVtpXSlcIlxuICAgID5cbiAgICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhclxuICAgICAgICAjaGVhZGVyVG9vbGJhclxuICAgICAgICBbaWRdPVwiXG4gICAgICAgICAgc21hcnRUYWJsZS5nZXRHcmlkSWQoKVxuICAgICAgICAgICAgPyBzbWFydFRhYmxlLmdldEdyaWRJZCgpICsgJ19oZWFkZXJUb29sYmFyJ1xuICAgICAgICAgICAgOiAnZ3JpZF9ub3RfaW5pdGlhbGl6ZWQnXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICA8L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxuICAgIDwvdGg+XG4gICAgfSBAZWxzZSB7XG4gICAgPHRoXG4gICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICBbbmdDbGFzc109XCJnZXRDb2x1bW5DbGFzc2VzKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldKVwiXG4gICAgICBbbmdTdHlsZV09XCJnZXRDb2x1bW5TdHlsZXMoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyFbaV0pXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiaGVhZGVyID09PSAnaWNvbicgfHwgaGVhZGVyID09PSAnaW1nJyB8fCBoZWFkZXIgPT09ICdvcHRpb25zJyB8fCBoZWFkZXIgPT09ICdidXR0b24nXCJcbiAgICAgID48L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJoZWFkZXIgPT09ICdzZWxlY3QnXCI+XG4gICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldLnNob3dDaGVja2JveEluSGVhZGVyXCJcbiAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHRvZ2dsZUFsbFJvd3MoKSA6IG51bGxcIlxuICAgICAgICAgIFtjaGVja2VkXT1cInNtYXJ0VGFibGUuc2VsZWN0aW9uIS5oYXNWYWx1ZSgpICYmIGlzQWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic21hcnRUYWJsZS5zZWxlY3Rpb24hLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgW2FyaWEtbGFiZWxdPVwiY2hlY2tib3hMYWJlbCgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIVtpXS5zaG93Q2hlY2tib3hJbkhlYWRlclwiPlxuICAgICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tVGFibGVIZWFkZXJzW2ldIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgaGVhZGVyICE9PSAnaWNvbicgJiZcbiAgICAgICAgICBoZWFkZXIgIT09ICdpbWcnICYmXG4gICAgICAgICAgaGVhZGVyICE9PSAnb3B0aW9ucycgJiZcbiAgICAgICAgICBoZWFkZXIgIT09ICdidXR0b24nICYmXG4gICAgICAgICAgaGVhZGVyICE9PSAnc2VsZWN0JyAmJlxuICAgICAgICAgIGhlYWRlciAhPT0gJ2V4cGFuZCcgJiZcbiAgICAgICAgICBoZWFkZXIgIT09ICdhY3Rpb25zJ1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5zb3J0YWJsZTsgdGhlbiBzb3J0YWJsZTsgZWxzZSBub3RTb3J0YWJsZVwiPjwvZGl2PlxuICAgICAgICA8bmctdGVtcGxhdGUgI3NvcnRhYmxlPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJzb3J0QnV0dG9uQ2xpY2tlZCgkZXZlbnQsIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldKVwiXG4gICAgICAgICAgICAqbmdJZj1cInNtYXJ0VGFibGUuc29ydGFibGUgJiYgaXNTb3J0YWJsZShzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIVtpXSlcIlxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJzb3J0YWJsZUhlYWRlckJ1dHRvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgc21hcnRUYWJsZS5jdXN0b21UYWJsZUhlYWRlcnNbaV0gfX1cbiAgICAgICAgICAgIDxzbWFydC1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwic29ydGFibGVIZWFkZXJCdXR0b25JY29uXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXRTb3J0SWNvbihoZWFkZXIpXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJzb3J0XCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0U29ydEljb24oaGVhZGVyKSFcIlxuICAgICAgICAgICAgPjwvc21hcnQtaWNvbj5cbiAgICAgICAgICAgIDxzbWFydC1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwic29ydGFibGVIZWFkZXJCdXR0b25JY29uXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJoYXNTb3J0TnVtSWNvbihoZWFkZXIpXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJzb3J0XCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0U29ydE51bUljb24oaGVhZGVyKVwiXG4gICAgICAgICAgICA+PC9zbWFydC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vdFNvcnRhYmxlPlxuICAgICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tVGFibGVIZWFkZXJzW2ldIH19XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L3RoPlxuICAgIH1cbiAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIFtuZ0NsYXNzXT1cImlzRGlzYWJsZWQoZWxlbWVudCkgPyAnZGlzYWJsZWRSb3cnIDogJydcIj5cbiAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0eU5hbWUgPT09ICdzZWxlY3QnICYmXG4gICAgICAgICAgIWlzRGlzYWJsZWQoZWxlbWVudClcbiAgICAgICAgXCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIChjaGFuZ2UpPVwiXG4gICAgICAgICAgJGV2ZW50XG4gICAgICAgICAgICA/IHNldFNlbGVjdGlvbihcbiAgICAgICAgICAgICAgICBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5XG4gICAgICAgICAgICAgICAgICA/IHNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkoZWxlbWVudCwgc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSlcbiAgICAgICAgICAgICAgICAgIDogZWxlbWVudFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoZWxlbWVudClcIlxuICAgICAgICBbY2hlY2tlZF09XCJcbiAgICAgICAgICBzbWFydFRhYmxlLnNlbGVjdGlvbiEuaXNTZWxlY3RlZChcbiAgICAgICAgICAgIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcbiAgICAgICAgICAgICAgPyBzbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXG4gICAgICAgICAgICAgIDogZWxlbWVudFxuICAgICAgICAgIClcbiAgICAgICAgXCJcbiAgICAgICAgW2FyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgY2hlY2tib3hMYWJlbChcbiAgICAgICAgICAgIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcbiAgICAgICAgICAgICAgPyBzbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXG4gICAgICAgICAgICAgIDogZWxlbWVudFxuICAgICAgICAgIClcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgJiYgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LnR5cGUgPT09IHR5cGUoKS5EQVRFVElNRVwiPlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICBnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpXG4gICAgICAgICAgICAgIHwgc21hcnREYXRlVGltZSA6IHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8uZGF0ZUZvcm1hdFxuICAgICAgICAgIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuREFURVwiPlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICBnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpXG4gICAgICAgICAgICAgIHwgc21hcnREYXRlIDogc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy5kYXRlRm9ybWF0XG4gICAgICAgICAgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LnR5cGUgPT09IHR5cGUoKS5USU1FXCI+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgIGdldFZhbHVlKGVsZW1lbnQsIGhlYWRlcilcbiAgICAgICAgICAgICAgfCBzbWFydFRpbWUgOiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LmRhdGVGb3JtYXRcbiAgICAgICAgICB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8udHlwZSA9PT0gdHlwZSgpLkNIRUNLQk9YXCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCBbZGlzYWJsZWRdPVwidHJ1ZVwiIFtjaGVja2VkXT1cImdldFZhbHVlKGVsZW1lbnQsIGhlYWRlcilcIj48L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuSUNPTiAmJlxuICAgICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy5pY29ucz8ubGVuZ3RoXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzbWFydC1pY29uXG4gICAgICAgICAgICBbc21hcnRUb29sdGlwXT1cImdldFRvb2xUaXAoZWxlbWVudCwgaSlcIlxuICAgICAgICAgICAgW2ljb25dPVwiZ2V0SWNvbihnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpLCBpKSFcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImdldENvbG9yKGdldFZhbHVlKGVsZW1lbnQsIGhlYWRlciksIGkpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9zbWFydC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNtYXJ0LXRhYmxlLWljb24tY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGlyIG9mIGdldEltYWdlUmVzb3VyY2VJY29ucyhlbGVtZW50LCBoZWFkZXIpXCI+XG4gICAgICAgICAgPHNtYXJ0LWljb24gW2ltYWdlUmVzb3VyY2VdPVwiaXJcIj4gPC9zbWFydC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgJiYgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5idXR0b25zXCJcbiAgICAgICAgY2xhc3M9XCJzbWFydC10YWJsZS1idXR0b25zLWNvbFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmJ1dHRvbnNcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0J1dHRvbihidXR0b24sIGVsZW1lbnQpXCIgW25nU3dpdGNoXT1cImJ1dHRvbi50eXBlXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgYnV0dG9uLCBlbGVtZW50KVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJzbWFydFRhYmxlQnV0dG9uVHlwZS5JQ09OXCJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwie3sgYnV0dG9uLmNvbG9yIH19XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNtYXJ0LWljb24gdGl0bGU9XCJ7eyBidXR0b24ubGFiZWwgfX1cIiBbaWNvbl09XCJidXR0b24uaWNvbiFcIj48L3NtYXJ0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidXR0b24sIGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cInNtYXJ0VGFibGVCdXR0b25UeXBlLk5PUk1BTFwiXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJ7eyBidXR0b24uY29sb3IgfX1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImJ1dHRvbi5pY29uXCIgW2ljb25dPVwiYnV0dG9uLmljb25cIj48L3NtYXJ0LWljb24+XG4gICAgICAgICAgICAgIHt7IGJ1dHRvbi5sYWJlbCA/PyAoYnV0dG9uLnRyYW5zbGF0b3IgPyBidXR0b24udHJhbnNsYXRvcihlbGVtZW50KS50aXRsZSA6ICcnKSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgYnV0dG9uLCBlbGVtZW50KVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJzbWFydFRhYmxlQnV0dG9uVHlwZS5SQUlTRURcIlxuICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cInt7IGJ1dHRvbi5jb2xvciB9fVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiYnV0dG9uLmljb25cIiBbaWNvbl09XCJidXR0b24uaWNvblwiPjwvc21hcnQtaWNvbj5cbiAgICAgICAgICAgICAge3sgYnV0dG9uLmxhYmVsID8/IChidXR0b24udHJhbnNsYXRvciA/IGJ1dHRvbi50cmFuc2xhdG9yKGVsZW1lbnQpLnRpdGxlIDogJycpIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cInNtYXJ0VGFibGVCdXR0b25UeXBlLk1FTlVcIiBjbGFzcz1cIm1lbnUtYnV0dG9uXCI+XG4gICAgICAgICAgICAgIDwhLS0tLS0tIFRPT0xCQVIgLS0tLS0tPlxuICAgICAgICAgICAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXJcbiAgICAgICAgICAgICAgICBbdWlBY3Rpb25Nb2RlbHNdPVwiZ2V0Um93Q29sdW1uQWN0aW9uKGVsZW1lbnQsIGRlZmF1bHRBY3Rpb25Ub29sYmFySWQpXCJcbiAgICAgICAgICAgICAgPjwvc21hcnQtdWktYWN0aW9uLXRvb2xiYXI+XG4gICAgICAgICAgICAgIDwhLS0tLS0tIFRPT0xCQVIgLS0tLS0tPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93TWVudUJ1dHRvbihlbGVtZW50LCBidXR0b24pXCJcbiAgICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgYnV0dG9uLCBlbGVtZW50LCB1bmRlZmluZWQsIHRydWUpXCJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInt7IGJ1dHRvbi5jb2xvciB9fVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImJ1dHRvbi5pY29uXCIgW2ljb25dPVwiYnV0dG9uLmljb25cIj48L3NtYXJ0LWljb24+XG4gICAgICAgICAgICAgICAgPCEtLSB7eyBidXR0b24ubGFiZWwgPz8gKGJ1dHRvbi50cmFuc2xhdG9yID8gYnV0dG9uLnRyYW5zbGF0b3IoZWxlbWVudCkudGl0bGUgOiAnJykgfX0gLS0+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJ1dHRvbi5tZW51SXRlbUJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGJ0biBvZiBnZXRNZW51QnV0dG9ucyhlbGVtZW50LCBidXR0b24pXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidG4sIGVsZW1lbnQsIHVuZGVmaW5lZCwgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFydC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJidG4/LnRyYW5zbGF0b3IoYnRuKT8uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiYnRuIS50cmFuc2xhdG9yIShidG4pIS5pY29uIVwiXG4gICAgICAgICAgICAgICAgICAgID48L3NtYXJ0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIHt7IGJ0bj8udHJhbnNsYXRvcihidG4pPy50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJ1dHRvbi5tZW51SXRlbUJ1dHRvbnNQcm9wZXJ0eU5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGJ0biBvZiBnZXRNZW51SXRlbUJ1dHRvbnNQcm9wZXJ0eU5hbWUoZWxlbWVudCwgYnV0dG9uKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJidG4uY29kZSAhPT0gQUNUSU9OX1NFUEVSQVRPUlwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidXR0b24sIGVsZW1lbnQsIGJ0biwgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnRuLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc21hcnRUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYnRuPy5kZXNjcmlwdG9yPy50b29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gYnRuPy5kZXNjcmlwdG9yPy50b29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYnV0dG9uLnRyYW5zbGF0b3IhKGJ0bikudG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNtYXJ0LXRhYmxlLWljb24tY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24udHJhbnNsYXRvciEoYnRuKS5pY29uUG9zaXRpb24gPT09ICdQT1NUJyA/ICdyZXZlcnNlZCcgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48c21hcnQtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ1dHRvbi50cmFuc2xhdG9yIShidG4pLmljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJidXR0b24udHJhbnNsYXRvciEoYnRuKS5pY29uIVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zbWFydC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgYnV0dG9uLnRyYW5zbGF0b3IhKGJ0bikudGl0bGUgfX08L2RpdlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlciAqbmdJZj1cImJ0bi5jb2RlID09PSBBQ1RJT05fU0VQRVJBVE9SXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmljb25cIj5cbiAgICAgICAgPHNtYXJ0LWljb25cbiAgICAgICAgICAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbj8uaWNvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5pY29uPy5jc3NDbGFzcyA/PyAnJ1wiXG4gICAgICAgICAgW2NvbG9yXT1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbj8uY29sb3JcIlxuICAgICAgICAgIFtpY29uXT1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbiEuaWNvblwiXG4gICAgICAgID5cbiAgICAgICAgPC9zbWFydC1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJlxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciAhPT0gdW5kZWZpbmVkXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciEoZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKSkgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgJiZcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnR5TmFtZSA9PT0gJ2V4cGFuZCdcbiAgICAgICAgXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGFyaWEtbGFiZWw9XCJleHBhbmQgcm93XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlKGVsZW1lbnQsICRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImV4cGFuZGVkRWxlbWVudCAhPT0gZWxlbWVudFwiIFtpY29uXT1cIidrZXlib2FyZF9hcnJvd19kb3duJ1wiPjwvc21hcnQtaWNvbj5cbiAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJleHBhbmRlZEVsZW1lbnQgPT09IGVsZW1lbnRcIiBbaWNvbl09XCIna2V5Ym9hcmRfYXJyb3dfdXAnXCI+PC9zbWFydC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgfHxcbiAgICAgICAgICAoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcyAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbiAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uYnV0dG9ucyAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciAmJlxuICAgICAgICAgICAgIShzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnR5TmFtZSA9PT0gJ3NlbGVjdCcpICYmXG4gICAgICAgICAgICAhKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydHlOYW1lID09PSAnZXhwYW5kJykpXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiaGVhZGVyID09PSAnaWNvbidcIiBbaWNvbl09XCJnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpIVwiPiA8L3NtYXJ0LWljb24+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cImhlYWRlciA9PT0gJ2ltZydcIlxuICAgICAgICAgIFtzcmNdPVwiZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKVwiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICBjbGFzcz1cInNtYXJ0dGFibGVJbWdcIlxuICAgICAgICAvPlxuICAgICAgICA8IS0tLS0tLSBUT09MQkFSIC0tLS0tLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dDZWxsVG9vbGJhcihlbGVtZW50LCBoZWFkZXIpXCI+XG4gICAgICAgICAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyXG4gICAgICAgICAgICBbdWlBY3Rpb25Nb2RlbHNdPVwiZ2V0Um93Q29sdW1uQWN0aW9uKGVsZW1lbnQsIGhlYWRlcilcIlxuICAgICAgICAgID48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLS0tLS0gVE9PTEJBUiAtLS0tLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgaGVhZGVyICE9PSAnaWNvbicgJiZcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ2ltZycgJiZcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ29wdGlvbicgJiZcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ2J1dHRvbicgJiZcbiAgICAgICAgICAgICFpc0ltYWdlUmVzb3VyY2UoZWxlbWVudCwgaGVhZGVyKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2lubmVySHRtbF09XCJnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC90ZD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBFeHBhbmRlZCBDb250ZW50IENvbHVtbiAtIFRoZSBkZXRhaWwgcm93IGlzIG1hZGUgdXAgb2YgdGhpcyBvbmUgY29sdW1uIHRoYXQgc3BhbnMgYWNyb3NzIGFsbCBjb2x1bW5zIC0tPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XG4gICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBbYXR0ci5jb2xzcGFuXT1cInNtYXJ0VGFibGUudGFibGVIZWFkZXJzLmxlbmd0aFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImV4YW1wbGUtZWxlbWVudC1kZXRhaWxcIlxuICAgICAgICBbQGRldGFpbEV4cGFuZF09XCJlbGVtZW50ID09IGV4cGFuZGVkRWxlbWVudCA/ICdleHBhbmRlZCcgOiAnY29sbGFwc2VkJ1wiXG4gICAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZXhwYW5kZWRBcmVhPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L3RkPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cInNtYXJ0VGFibGUudGFibGVIZWFkZXJzOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICA8bmctY29udGFpbmVyICptYXRSb3dEZWY9XCJsZXQgZWxlbWVudDsgY29sdW1uczogc21hcnRUYWJsZS50YWJsZUhlYWRlcnNcIj5cbiAgICA8dHJcbiAgICAgIG1hdC1yb3dcbiAgICAgIGNsYXNzPVwiZXhhbXBsZS1lbGVtZW50LXJvd1wiXG4gICAgICBbY2xhc3MuZXhhbXBsZS1leHBhbmRlZC1yb3ddPVwiZXhwYW5kZWRFbGVtZW50ID09PSBlbGVtZW50XCJcbiAgICAgIFtuZ0NsYXNzXT1cImdldFJvd0NsYXNzZXMoZWxlbWVudClcIlxuICAgICAgW25nU3R5bGVdPVwiZ2V0Um93U3R5bGVzKGVsZW1lbnQpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVPblJvd0NsaWNrKGVsZW1lbnQpXCJcbiAgICAgIChkYmxjbGljayk9XCJoYW5kbGVPblJvd0RvdWJsZUNsaWNrKCRldmVudCwgZWxlbWVudClcIlxuICAgID48L3RyPlxuICAgIDxsaWItZGVmYXVsdC1hY3Rpb25zLXBvcHVwXG4gICAgICAqbmdJZj1cInNtYXJ0VGFibGUuZGVmYXVsdEFjdGlvbkNvZGVzICYmIHNtYXJ0VGFibGUuZGVmYXVsdEFjdGlvbkNvZGVzLmxlbmd0aCA+IDBcIlxuICAgICAgI2RlZmF1bHRBY3Rpb25NZW51XG4gICAgICBbYnV0dG9uc109XCJnZXREZWZhdWx0QWN0aW9uc0ZvclJvdyhlbGVtZW50KSFcIlxuICAgICAgW3Jvd109XCJlbGVtZW50XCJcbiAgICA+PC9saWItZGVmYXVsdC1hY3Rpb25zLXBvcHVwPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnZXhwYW5kZWREZXRhaWwnXVwiIGNsYXNzPVwiZXhhbXBsZS1kZXRhaWwtcm93XCI+PC90cj5cbjwvdGFibGU+XG4iXX0=
|