@one-paragon/angular-utilities 0.1.15 → 0.1.16-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/action-state/action-state-spinner/action-state-spinner.component.mjs +2 -2
- package/esm2020/http-request-state/http-state-module.mjs +2 -2
- package/esm2020/table-builder/classes/TableState.mjs +4 -2
- package/esm2020/table-builder/classes/table-store.mjs +15 -1
- package/esm2020/table-builder/components/generic-table/generic-table.component.mjs +22 -9
- package/esm2020/table-builder/components/generic-table/paginator.component.mjs +2 -2
- package/esm2020/table-builder/components/group-by-list/group-by-list.component.mjs +21 -0
- package/esm2020/table-builder/components/header-menu/header-menu.component.mjs +3 -3
- package/esm2020/table-builder/components/index.mjs +2 -1
- package/esm2020/table-builder/components/table-container/table-container.mjs +72 -28
- package/esm2020/table-builder/table-builder.module.mjs +8 -3
- package/esm2020/utilities/directives/mat-toggle-group-directive.mjs +3 -2
- package/esm2020/utilities/directives/trim-whitespace.directive.mjs +29 -0
- package/esm2020/utilities/index.mjs +2 -1
- package/esm2020/utilities/module.mjs +6 -1
- package/fesm2015/one-paragon-angular-utilities.mjs +149 -38
- package/fesm2015/one-paragon-angular-utilities.mjs.map +1 -1
- package/fesm2020/one-paragon-angular-utilities.mjs +159 -40
- package/fesm2020/one-paragon-angular-utilities.mjs.map +1 -1
- package/package.json +5 -5
- package/table-builder/classes/TableState.d.ts +7 -0
- package/table-builder/classes/table-store.d.ts +8 -1
- package/table-builder/components/generic-table/generic-table.component.d.ts +7 -2
- package/table-builder/components/group-by-list/group-by-list.component.d.ts +10 -0
- package/table-builder/components/index.d.ts +1 -0
- package/table-builder/components/table-container/table-container.d.ts +12 -4
- package/table-builder/table-builder.module.d.ts +11 -10
- package/utilities/directives/trim-whitespace.directive.d.ts +9 -0
- package/utilities/index.d.ts +1 -0
- package/utilities/module.d.ts +7 -6
|
@@ -75,10 +75,10 @@ export class HeaderMenuComponent {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
HeaderMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: HeaderMenuComponent, deps: [{ token: i1.TableStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
78
|
-
HeaderMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.1", type: HeaderMenuComponent, selector: "tb-header-menu", inputs: { filter: "filter", metaData: "metaData" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<button mat-icon-button disableRipple [matMenuTriggerFor]=\"menu\" style=\"height:16px;\" [matMenuTriggerRestoreFocus]=\"false\">\r\n <mat-icon class=\"menu-icon\">more_vert</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=hideField(metaData.key)>\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n <span>Hide Column</span>\r\n </button>\r\n <ng-form #myForm=\"ngForm\" [ngSwitch]=\"true\" (keydown.enter)=\"onEnter(myForm.value)\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"'header-column-' + metaData.key\" />\r\n <input type=\"hidden\" name=\"filterType\" [ngModel]=\"myFilterType\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"metaData.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"metaData.fieldType\" />\r\n\r\n <ng-container *ngIf=\"(myFilterType === FilterType.Or || myFilterType === FilterType.In); else defaultFilter\">\r\n <tb-in-list-filter style=\"display:block;padding: 0 16px\" name='filterValue' [key]='metaData.key' [(ngModel)]='myFilterValue' >\r\n </tb-in-list-filter>\r\n </ng-container>\r\n\r\n\r\n <ng-template #defaultFilter>\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Link || metaData.fieldType === FieldType.String || metaData.fieldType === FieldType.Array || metaData.fieldType === FieldType.Unknown || metaData.fieldType === FieldType.PhoneNumber\">\r\n <mat-form-field stop-propagation class=\"font\" style=\"padding: 0 16px\">\r\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\r\n <mat-label>{{myFilterType === FilterType.StringDoesNotContain ? 'Does Not Contain...' : 'Contains...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matSuffix [matTooltip]=\"myFilterType === FilterType.StringDoesNotContain ? 'Contains' : 'Does Not Contain'\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setStringFilterType()\">\r\n <mat-icon [ngClass]=\"{'chosen-icon': myFilterType === FilterType.StringDoesNotContain }\">\r\n block\r\n </mat-icon>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Number || metaData.fieldType === FieldType.Currency\">\r\n <mat-form-field class=\"auto-width\" stop-propagation style=\"padding: 0 16px\">\r\n <mat-label>{{myFilterType === FilterType.NumberEquals ? 'Equals...' : myFilterType === FilterType.NumberLessThan ? 'Less Than...' : 'More Than...'}}</mat-label>\r\n <input matInput type='number' name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberLessThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberLessThan }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberGreaterThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberGreaterThan }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.NumberEquals)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberEquals }\">\r\n =</span>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Boolean\">\r\n <div style=\"padding: 0 16px\">\r\n <label>\r\n <mat-icon class=\"search-icon\">filter_list</mat-icon>\r\n </label>\r\n <mat-radio-group stop-propagation #ctrl=\"matRadioGroup\" #boolField='ngModel' class=\"font\" name=\"filterValue\" [ngModel]=\"myFilterValue\" >\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = true;\" [value]=\"true\">True</mat-radio-button><br/>\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = false\" [value]=\"false\">False</mat-radio-button><br/>\r\n </mat-radio-group>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Date\">\r\n <mat-form-field style=\"padding: 0 16px\" class=\"font auto-width\" stop-propagation >\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrAfter)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrAfter }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrBefore)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrBefore }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.DateIsOn)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateIsOn }\">\r\n =</span>\r\n </button>\r\n </span>\r\n <mat-label>{{myFilterType === FilterType.DateIsOn ? 'On...' :\r\n myFilterType === FilterType.DateOnOrBefore ? 'On or Before...' : 'On or After...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" [matDatepicker]=\"calendar\"\r\n (click)=\"calendar.open()\"/>\r\n <mat-datepicker-toggle matSuffix [for]=\"calendar\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #calendar></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <button mat-button (click)=\"onEnter(myForm.value)\" [disabled]=\"myForm.value.filterValue == undefined\" disableRipple>\r\n Apply\r\n </button>\r\n </ng-form>\r\n</mat-menu>\r\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}::ng-deep .form-field .mat-form-field-wrapper{padding-bottom:4px!important;padding-top:4px!important;margin-bottom:5px!important}.menu-icon{font-size:16px;line-height:16px!important;vertical-align:top!important}.search-icon{margin-right:16px;vertical-align:middle;height:24px;color:#0000008a;font-size:21px;line-height:1.125}.font{font-size:14px}.filter-radio-button:first-of-type{padding-left:0}.filter-radio-button{padding:10px 40px;min-width:110px}::ng-deep .form-field.mat-form-field-appearance-outline .mat-form-field-infix{padding:5px 0;width:auto}::ng-deep .auto-width .mat-form-field-infix{width:auto}.suffix-icons{font-size:14px;margin-left:6px}mat-icon.chosen-icon.mat-icon.suffix-icons,.chosen-icon{font-size:20px;color:green}mat-icon.mat-icon.suffix-icons.underline{-webkit-text-decoration:underline .1px solid;text-decoration:underline .1px solid;transform:scaleX(.7)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i4.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i5.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i5.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i9.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.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: i11.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i12.StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "component", type: i13.InListFilterComponent, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: ["key"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
78
|
+
HeaderMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.1", type: HeaderMenuComponent, selector: "tb-header-menu", inputs: { filter: "filter", metaData: "metaData" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<button mat-icon-button disableRipple [matMenuTriggerFor]=\"menu\" style=\"height:16px;\" [matMenuTriggerRestoreFocus]=\"false\">\r\n <mat-icon class=\"menu-icon\">more_vert</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=\"tableState.addGroupByKey(metaData.key)\">\r\n <mat-icon color=\"primary\">group</mat-icon>\r\n <span>Group By</span>\r\n </button>\r\n <button mat-menu-item (click)=hideField(metaData.key)>\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n <span>Hide Column</span>\r\n </button>\r\n <ng-form #myForm=\"ngForm\" [ngSwitch]=\"true\" (keydown.enter)=\"onEnter(myForm.value)\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"'header-column-' + metaData.key\" />\r\n <input type=\"hidden\" name=\"filterType\" [ngModel]=\"myFilterType\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"metaData.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"metaData.fieldType\" />\r\n\r\n <ng-container *ngIf=\"(myFilterType === FilterType.Or || myFilterType === FilterType.In); else defaultFilter\">\r\n <tb-in-list-filter style=\"display:block;padding: 0 16px\" name='filterValue' [key]='metaData.key' [(ngModel)]='myFilterValue' >\r\n </tb-in-list-filter>\r\n </ng-container>\r\n\r\n\r\n <ng-template #defaultFilter>\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Link || metaData.fieldType === FieldType.String || metaData.fieldType === FieldType.Array || metaData.fieldType === FieldType.Unknown || metaData.fieldType === FieldType.PhoneNumber\">\r\n <mat-form-field stop-propagation class=\"font\" style=\"padding: 0 16px\">\r\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\r\n <mat-label>{{myFilterType === FilterType.StringDoesNotContain ? 'Does Not Contain...' : 'Contains...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matSuffix [matTooltip]=\"myFilterType === FilterType.StringDoesNotContain ? 'Contains' : 'Does Not Contain'\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setStringFilterType()\">\r\n <mat-icon [ngClass]=\"{'chosen-icon': myFilterType === FilterType.StringDoesNotContain }\">\r\n block\r\n </mat-icon>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Number || metaData.fieldType === FieldType.Currency\">\r\n <mat-form-field class=\"auto-width\" stop-propagation style=\"padding: 0 16px\">\r\n <mat-label>{{myFilterType === FilterType.NumberEquals ? 'Equals...' : myFilterType === FilterType.NumberLessThan ? 'Less Than...' : 'More Than...'}}</mat-label>\r\n <input matInput type='number' name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberLessThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberLessThan }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberGreaterThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberGreaterThan }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.NumberEquals)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberEquals }\">\r\n =</span>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Boolean\">\r\n <div style=\"padding: 0 16px\">\r\n <label>\r\n <mat-icon class=\"search-icon\">filter_list</mat-icon>\r\n </label>\r\n <mat-radio-group stop-propagation #ctrl=\"matRadioGroup\" #boolField='ngModel' class=\"font\" name=\"filterValue\" [ngModel]=\"myFilterValue\" >\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = true;\" [value]=\"true\">True</mat-radio-button><br/>\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = false\" [value]=\"false\">False</mat-radio-button><br/>\r\n </mat-radio-group>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Date\">\r\n <mat-form-field style=\"padding: 0 16px\" class=\"font auto-width\" stop-propagation >\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrAfter)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrAfter }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrBefore)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrBefore }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.DateIsOn)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateIsOn }\">\r\n =</span>\r\n </button>\r\n </span>\r\n <mat-label>{{myFilterType === FilterType.DateIsOn ? 'On...' :\r\n myFilterType === FilterType.DateOnOrBefore ? 'On or Before...' : 'On or After...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" [matDatepicker]=\"calendar\"\r\n (click)=\"calendar.open()\"/>\r\n <mat-datepicker-toggle matSuffix [for]=\"calendar\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #calendar></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <button mat-button (click)=\"onEnter(myForm.value)\" [disabled]=\"myForm.value.filterValue == undefined\" disableRipple>\r\n Apply\r\n </button>\r\n </ng-form>\r\n</mat-menu>\r\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}::ng-deep .form-field .mat-form-field-wrapper{padding-bottom:4px!important;padding-top:4px!important;margin-bottom:5px!important}.menu-icon{font-size:16px;line-height:16px!important;vertical-align:top!important}.search-icon{margin-right:16px;vertical-align:middle;height:24px;color:#0000008a;font-size:21px;line-height:1.125}.font{font-size:14px}.filter-radio-button:first-of-type{padding-left:0}.filter-radio-button{padding:10px 40px;min-width:110px}::ng-deep .form-field.mat-form-field-appearance-outline .mat-form-field-infix{padding:5px 0;width:auto}::ng-deep .auto-width .mat-form-field-infix{width:auto}.suffix-icons{font-size:14px;margin-left:6px}mat-icon.chosen-icon.mat-icon.suffix-icons,.chosen-icon{font-size:20px;color:green}mat-icon.mat-icon.suffix-icons.underline{-webkit-text-decoration:underline .1px solid;text-decoration:underline .1px solid;transform:scaleX(.7)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i4.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i5.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i5.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i9.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.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: i11.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i12.StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "component", type: i13.InListFilterComponent, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: ["key"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
79
79
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: HeaderMenuComponent, decorators: [{
|
|
80
80
|
type: Component,
|
|
81
|
-
args: [{ selector: 'tb-header-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button mat-icon-button disableRipple [matMenuTriggerFor]=\"menu\" style=\"height:16px;\" [matMenuTriggerRestoreFocus]=\"false\">\r\n <mat-icon class=\"menu-icon\">more_vert</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=hideField(metaData.key)>\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n <span>Hide Column</span>\r\n </button>\r\n <ng-form #myForm=\"ngForm\" [ngSwitch]=\"true\" (keydown.enter)=\"onEnter(myForm.value)\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"'header-column-' + metaData.key\" />\r\n <input type=\"hidden\" name=\"filterType\" [ngModel]=\"myFilterType\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"metaData.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"metaData.fieldType\" />\r\n\r\n <ng-container *ngIf=\"(myFilterType === FilterType.Or || myFilterType === FilterType.In); else defaultFilter\">\r\n <tb-in-list-filter style=\"display:block;padding: 0 16px\" name='filterValue' [key]='metaData.key' [(ngModel)]='myFilterValue' >\r\n </tb-in-list-filter>\r\n </ng-container>\r\n\r\n\r\n <ng-template #defaultFilter>\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Link || metaData.fieldType === FieldType.String || metaData.fieldType === FieldType.Array || metaData.fieldType === FieldType.Unknown || metaData.fieldType === FieldType.PhoneNumber\">\r\n <mat-form-field stop-propagation class=\"font\" style=\"padding: 0 16px\">\r\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\r\n <mat-label>{{myFilterType === FilterType.StringDoesNotContain ? 'Does Not Contain...' : 'Contains...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matSuffix [matTooltip]=\"myFilterType === FilterType.StringDoesNotContain ? 'Contains' : 'Does Not Contain'\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setStringFilterType()\">\r\n <mat-icon [ngClass]=\"{'chosen-icon': myFilterType === FilterType.StringDoesNotContain }\">\r\n block\r\n </mat-icon>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Number || metaData.fieldType === FieldType.Currency\">\r\n <mat-form-field class=\"auto-width\" stop-propagation style=\"padding: 0 16px\">\r\n <mat-label>{{myFilterType === FilterType.NumberEquals ? 'Equals...' : myFilterType === FilterType.NumberLessThan ? 'Less Than...' : 'More Than...'}}</mat-label>\r\n <input matInput type='number' name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberLessThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberLessThan }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberGreaterThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberGreaterThan }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.NumberEquals)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberEquals }\">\r\n =</span>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Boolean\">\r\n <div style=\"padding: 0 16px\">\r\n <label>\r\n <mat-icon class=\"search-icon\">filter_list</mat-icon>\r\n </label>\r\n <mat-radio-group stop-propagation #ctrl=\"matRadioGroup\" #boolField='ngModel' class=\"font\" name=\"filterValue\" [ngModel]=\"myFilterValue\" >\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = true;\" [value]=\"true\">True</mat-radio-button><br/>\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = false\" [value]=\"false\">False</mat-radio-button><br/>\r\n </mat-radio-group>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Date\">\r\n <mat-form-field style=\"padding: 0 16px\" class=\"font auto-width\" stop-propagation >\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrAfter)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrAfter }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrBefore)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrBefore }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.DateIsOn)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateIsOn }\">\r\n =</span>\r\n </button>\r\n </span>\r\n <mat-label>{{myFilterType === FilterType.DateIsOn ? 'On...' :\r\n myFilterType === FilterType.DateOnOrBefore ? 'On or Before...' : 'On or After...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" [matDatepicker]=\"calendar\"\r\n (click)=\"calendar.open()\"/>\r\n <mat-datepicker-toggle matSuffix [for]=\"calendar\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #calendar></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <button mat-button (click)=\"onEnter(myForm.value)\" [disabled]=\"myForm.value.filterValue == undefined\" disableRipple>\r\n Apply\r\n </button>\r\n </ng-form>\r\n</mat-menu>\r\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}::ng-deep .form-field .mat-form-field-wrapper{padding-bottom:4px!important;padding-top:4px!important;margin-bottom:5px!important}.menu-icon{font-size:16px;line-height:16px!important;vertical-align:top!important}.search-icon{margin-right:16px;vertical-align:middle;height:24px;color:#0000008a;font-size:21px;line-height:1.125}.font{font-size:14px}.filter-radio-button:first-of-type{padding-left:0}.filter-radio-button{padding:10px 40px;min-width:110px}::ng-deep .form-field.mat-form-field-appearance-outline .mat-form-field-infix{padding:5px 0;width:auto}::ng-deep .auto-width .mat-form-field-infix{width:auto}.suffix-icons{font-size:14px;margin-left:6px}mat-icon.chosen-icon.mat-icon.suffix-icons,.chosen-icon{font-size:20px;color:green}mat-icon.mat-icon.suffix-icons.underline{-webkit-text-decoration:underline .1px solid;text-decoration:underline .1px solid;transform:scaleX(.7)}\n"] }]
|
|
81
|
+
args: [{ selector: 'tb-header-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button mat-icon-button disableRipple [matMenuTriggerFor]=\"menu\" style=\"height:16px;\" [matMenuTriggerRestoreFocus]=\"false\">\r\n <mat-icon class=\"menu-icon\">more_vert</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=\"tableState.addGroupByKey(metaData.key)\">\r\n <mat-icon color=\"primary\">group</mat-icon>\r\n <span>Group By</span>\r\n </button>\r\n <button mat-menu-item (click)=hideField(metaData.key)>\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n <span>Hide Column</span>\r\n </button>\r\n <ng-form #myForm=\"ngForm\" [ngSwitch]=\"true\" (keydown.enter)=\"onEnter(myForm.value)\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"'header-column-' + metaData.key\" />\r\n <input type=\"hidden\" name=\"filterType\" [ngModel]=\"myFilterType\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"metaData.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"metaData.fieldType\" />\r\n\r\n <ng-container *ngIf=\"(myFilterType === FilterType.Or || myFilterType === FilterType.In); else defaultFilter\">\r\n <tb-in-list-filter style=\"display:block;padding: 0 16px\" name='filterValue' [key]='metaData.key' [(ngModel)]='myFilterValue' >\r\n </tb-in-list-filter>\r\n </ng-container>\r\n\r\n\r\n <ng-template #defaultFilter>\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Link || metaData.fieldType === FieldType.String || metaData.fieldType === FieldType.Array || metaData.fieldType === FieldType.Unknown || metaData.fieldType === FieldType.PhoneNumber\">\r\n <mat-form-field stop-propagation class=\"font\" style=\"padding: 0 16px\">\r\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\r\n <mat-label>{{myFilterType === FilterType.StringDoesNotContain ? 'Does Not Contain...' : 'Contains...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matSuffix [matTooltip]=\"myFilterType === FilterType.StringDoesNotContain ? 'Contains' : 'Does Not Contain'\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setStringFilterType()\">\r\n <mat-icon [ngClass]=\"{'chosen-icon': myFilterType === FilterType.StringDoesNotContain }\">\r\n block\r\n </mat-icon>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Number || metaData.fieldType === FieldType.Currency\">\r\n <mat-form-field class=\"auto-width\" stop-propagation style=\"padding: 0 16px\">\r\n <mat-label>{{myFilterType === FilterType.NumberEquals ? 'Equals...' : myFilterType === FilterType.NumberLessThan ? 'Less Than...' : 'More Than...'}}</mat-label>\r\n <input matInput type='number' name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberLessThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberLessThan }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberGreaterThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberGreaterThan }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.NumberEquals)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberEquals }\">\r\n =</span>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Boolean\">\r\n <div style=\"padding: 0 16px\">\r\n <label>\r\n <mat-icon class=\"search-icon\">filter_list</mat-icon>\r\n </label>\r\n <mat-radio-group stop-propagation #ctrl=\"matRadioGroup\" #boolField='ngModel' class=\"font\" name=\"filterValue\" [ngModel]=\"myFilterValue\" >\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = true;\" [value]=\"true\">True</mat-radio-button><br/>\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = false\" [value]=\"false\">False</mat-radio-button><br/>\r\n </mat-radio-group>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Date\">\r\n <mat-form-field style=\"padding: 0 16px\" class=\"font auto-width\" stop-propagation >\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrAfter)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrAfter }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrBefore)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrBefore }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.DateIsOn)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateIsOn }\">\r\n =</span>\r\n </button>\r\n </span>\r\n <mat-label>{{myFilterType === FilterType.DateIsOn ? 'On...' :\r\n myFilterType === FilterType.DateOnOrBefore ? 'On or Before...' : 'On or After...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" [matDatepicker]=\"calendar\"\r\n (click)=\"calendar.open()\"/>\r\n <mat-datepicker-toggle matSuffix [for]=\"calendar\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #calendar></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <button mat-button (click)=\"onEnter(myForm.value)\" [disabled]=\"myForm.value.filterValue == undefined\" disableRipple>\r\n Apply\r\n </button>\r\n </ng-form>\r\n</mat-menu>\r\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}::ng-deep .form-field .mat-form-field-wrapper{padding-bottom:4px!important;padding-top:4px!important;margin-bottom:5px!important}.menu-icon{font-size:16px;line-height:16px!important;vertical-align:top!important}.search-icon{margin-right:16px;vertical-align:middle;height:24px;color:#0000008a;font-size:21px;line-height:1.125}.font{font-size:14px}.filter-radio-button:first-of-type{padding-left:0}.filter-radio-button{padding:10px 40px;min-width:110px}::ng-deep .form-field.mat-form-field-appearance-outline .mat-form-field-infix{padding:5px 0;width:auto}::ng-deep .auto-width .mat-form-field-infix{width:auto}.suffix-icons{font-size:14px;margin-left:6px}mat-icon.chosen-icon.mat-icon.suffix-icons,.chosen-icon{font-size:20px;color:green}mat-icon.mat-icon.suffix-icons.underline{-webkit-text-decoration:underline .1px solid;text-decoration:underline .1px solid;transform:scaleX(.7)}\n"] }]
|
|
82
82
|
}], ctorParameters: function () { return [{ type: i1.TableStore }]; }, propDecorators: { filter: [{
|
|
83
83
|
type: Input
|
|
84
84
|
}], metaData: [{
|
|
@@ -87,4 +87,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImpor
|
|
|
87
87
|
type: ViewChild,
|
|
88
88
|
args: [MatMenuTrigger]
|
|
89
89
|
}] } });
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy9oZWFkZXItbWVudS9oZWFkZXItbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2hlYWRlci1tZW51L2hlYWRlci1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFZLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBUXhELE1BQU0sT0FBTyxtQkFBbUI7SUFVOUIsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVQxQyxjQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLGVBQVUsR0FBRyxVQUFVLENBQUM7SUFRcUIsQ0FBQztJQUU5QyxTQUFTLENBQUMsR0FBVztRQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFO1lBQzVELElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPO1NBQ1I7UUFDRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQy9CLEtBQUssU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUN0QixLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDcEIsS0FBSyxTQUFTLENBQUMsV0FBVyxDQUFDO1lBQzNCLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQztZQUNyQixLQUFLLFNBQVMsQ0FBQyxPQUFPO2dCQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUM7Z0JBQzlDLE1BQU07WUFDUixLQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUM7WUFDeEIsS0FBSyxTQUFTLENBQUMsTUFBTTtnQkFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO2dCQUM1QyxNQUFNO1lBQ1IsS0FBSyxTQUFTLENBQUMsT0FBTztnQkFDbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO2dCQUM3QyxNQUFNO1lBQ1YsS0FBSyxTQUFTLENBQUMsSUFBSTtnQkFDZixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hDLE1BQU07WUFDVixLQUFLLFNBQVMsQ0FBQyxJQUFJO2dCQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxLQUFLLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztJQUNwSSxDQUFDO0lBRUQsYUFBYSxDQUFDLFVBQXNCO1FBQ2xDLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsTUFBa0I7UUFDeEIsSUFBSSxNQUFNLENBQUMsV0FBVyxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDOztnSEFsRVUsbUJBQW1CO29HQUFuQixtQkFBbUIsbUpBU25CLGNBQWMsZ0RDdEIzQix1bU5BMEdBOzJGRDdGYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU07aUdBUXRDLE1BQU07c0JBQWQsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNxQixPQUFPO3NCQUFqQyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkVHlwZSwgTWV0YURhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC1kZWYnO1xyXG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvZmlsdGVyVHlwZXMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJJbmZvIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9maWx0ZXItaW5mbyc7XHJcbmltcG9ydCB7IFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLXN0b3JlJztcclxuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGItaGVhZGVyLW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXItbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaGVhZGVyLW1lbnUuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhlYWRlck1lbnVDb21wb25lbnQge1xyXG4gIEZpZWxkVHlwZSA9IEZpZWxkVHlwZTtcclxuICBGaWx0ZXJUeXBlID0gRmlsdGVyVHlwZTtcclxuICBteUZpbHRlclR5cGUhOiBGaWx0ZXJUeXBlO1xyXG4gIG15RmlsdGVyVmFsdWU6IGFueTtcclxuXHJcbiAgQElucHV0KCkgZmlsdGVyITogUGFydGlhbDxGaWx0ZXJJbmZvPjtcclxuXHJcbiAgQElucHV0KCkgbWV0YURhdGEhOiBNZXRhRGF0YTtcclxuICBAVmlld0NoaWxkKE1hdE1lbnVUcmlnZ2VyKSB0cmlnZ2VyITogTWF0TWVudVRyaWdnZXI7XHJcbiAgY29uc3RydWN0b3IoIHB1YmxpYyB0YWJsZVN0YXRlOiBUYWJsZVN0b3JlKSB7fVxyXG5cclxuICBoaWRlRmllbGQoa2V5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGFibGVTdGF0ZS5oaWRlQ29sdW1uKGtleSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucmVzZXRGaWx0ZXJUeXBlKCk7XHJcbiAgfVxyXG5cclxuICByZXNldEZpbHRlclR5cGUoKSB7XHJcbiAgICBpZih0aGlzLm1ldGFEYXRhLmFkZGl0aW9uYWw/LmZpbHRlck9wdGlvbnM/LmZpbHRlcmFibGVWYWx1ZXMpIHtcclxuICAgICAgdGhpcy5teUZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkluO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0YURhdGEuZmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlLlN0cmluZzpcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuTGluazpcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuUGhvbmVOdW1iZXI6XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlLkFycmF5OlxyXG4gICAgICBjYXNlIEZpZWxkVHlwZS5Vbmtub3duOlxyXG4gICAgICAgIHRoaXMubXlGaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5TdHJpbmdDb250YWlucztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuQ3VycmVuY3k6XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlLk51bWJlcjpcclxuICAgICAgICB0aGlzLm15RmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuTnVtYmVyRXF1YWxzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZS5Cb29sZWFuOlxyXG4gICAgICAgICAgdGhpcy5teUZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkJvb2xlYW5FcXVhbHM7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuRGF0ZTpcclxuICAgICAgICAgIHRoaXMubXlGaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5EYXRlSXNPbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZS5FbnVtOlxyXG4gICAgICAgIHRoaXMubXlGaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5JbjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFN0cmluZ0ZpbHRlclR5cGUoKSB7XHJcbiAgICB0aGlzLm15RmlsdGVyVHlwZSA9IHRoaXMubXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLlN0cmluZ0NvbnRhaW5zID8gRmlsdGVyVHlwZS5TdHJpbmdEb2VzTm90Q29udGFpbiA6IEZpbHRlclR5cGUuU3RyaW5nQ29udGFpbnM7XHJcbiAgfVxyXG5cclxuICBzZXRGaWx0ZXJUeXBlKGZpbHRlclR5cGU6IEZpbHRlclR5cGUpIHtcclxuICAgIGlmIChmaWx0ZXJUeXBlID09PSB0aGlzLm15RmlsdGVyVHlwZSkge1xyXG4gICAgICB0aGlzLnJlc2V0RmlsdGVyVHlwZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5teUZpbHRlclR5cGUgPSBmaWx0ZXJUeXBlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25FbnRlcihmaWx0ZXI6IEZpbHRlckluZm8pIHtcclxuICAgIGlmIChmaWx0ZXIuZmlsdGVyVmFsdWUgIT0gdW5kZWZpbmVkICYmIGZpbHRlci5maWx0ZXJUeXBlKSB7XHJcbiAgICAgIHRoaXMudGFibGVTdGF0ZS5hZGRGaWx0ZXIoZmlsdGVyKTtcclxuICAgICAgdGhpcy50cmlnZ2VyLmNsb3NlTWVudSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlUmlwcGxlIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgc3R5bGU9XCJoZWlnaHQ6MTZweDtcIiBbbWF0TWVudVRyaWdnZXJSZXN0b3JlRm9jdXNdPVwiZmFsc2VcIj5cclxuICA8bWF0LWljb24gY2xhc3M9XCJtZW51LWljb25cIj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxyXG48L2J1dHRvbj5cclxuPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPWhpZGVGaWVsZChtZXRhRGF0YS5rZXkpPlxyXG4gICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPnZpc2liaWxpdHlfb2ZmPC9tYXQtaWNvbj5cclxuICAgIDxzcGFuPkhpZGUgQ29sdW1uPC9zcGFuPlxyXG4gIDwvYnV0dG9uPlxyXG4gIDxuZy1mb3JtICNteUZvcm09XCJuZ0Zvcm1cIiBbbmdTd2l0Y2hdPVwidHJ1ZVwiIChrZXlkb3duLmVudGVyKT1cIm9uRW50ZXIobXlGb3JtLnZhbHVlKVwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmaWx0ZXJJZFwiICBbbmdNb2RlbF09XCInaGVhZGVyLWNvbHVtbi0nICsgbWV0YURhdGEua2V5XCIgLz5cclxuICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsdGVyVHlwZVwiICBbbmdNb2RlbF09XCJteUZpbHRlclR5cGVcIiAvPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJrZXlcIiAgW25nTW9kZWxdPVwibWV0YURhdGEua2V5XCIgLz5cclxuICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmllbGRUeXBlXCIgIFtuZ01vZGVsXT1cIm1ldGFEYXRhLmZpZWxkVHlwZVwiIC8+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKG15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5PciB8fCBteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuSW4pOyBlbHNlIGRlZmF1bHRGaWx0ZXJcIj5cclxuICAgICAgICAgIDx0Yi1pbi1saXN0LWZpbHRlciAgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO3BhZGRpbmc6IDAgMTZweFwiICBuYW1lPSdmaWx0ZXJWYWx1ZScgW2tleV09J21ldGFEYXRhLmtleScgWyhuZ01vZGVsKV09J215RmlsdGVyVmFsdWUnID5cclxuICAgICAgICAgIDwvdGItaW4tbGlzdC1maWx0ZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEZpbHRlcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5MaW5rIHx8IG1ldGFEYXRhLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLlN0cmluZyB8fCBtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5BcnJheSB8fCBtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5Vbmtub3duIHx8IG1ldGFEYXRhLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLlBob25lTnVtYmVyXCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3RvcC1wcm9wYWdhdGlvbiBjbGFzcz1cImZvbnRcIiBzdHlsZT1cInBhZGRpbmc6IDAgMTZweFwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4IGNsYXNzPVwic2VhcmNoLWljb25cIj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7bXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLlN0cmluZ0RvZXNOb3RDb250YWluID8gJ0RvZXMgTm90IENvbnRhaW4uLi4nIDogJ0NvbnRhaW5zLi4uJ319PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPVwiZmlsdGVyVmFsdWVcIiBbbmdNb2RlbF09XCJmaWx0ZXIuZmlsdGVyVmFsdWVcIiAvPlxyXG4gICAgICAgICAgICA8c3BhbiBtYXRTdWZmaXggW21hdFRvb2x0aXBdPVwibXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLlN0cmluZ0RvZXNOb3RDb250YWluID8gJ0NvbnRhaW5zJyA6ICdEb2VzIE5vdCBDb250YWluJ1wiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzZXRTdHJpbmdGaWx0ZXJUeXBlKClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmdDbGFzc109XCJ7J2Nob3Nlbi1pY29uJzogbXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLlN0cmluZ0RvZXNOb3RDb250YWluIH1cIj5cclxuICAgICAgICAgICAgICAgICAgYmxvY2tcclxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIm1ldGFEYXRhLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLk51bWJlciB8fCBtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5DdXJyZW5jeVwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiYXV0by13aWR0aFwiICBzdG9wLXByb3BhZ2F0aW9uIHN0eWxlPVwicGFkZGluZzogMCAxNnB4XCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuTnVtYmVyRXF1YWxzID8gJ0VxdWFscy4uLicgOiBteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuTnVtYmVyTGVzc1RoYW4gPyAnTGVzcyBUaGFuLi4uJyA6ICdNb3JlIFRoYW4uLi4nfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9J251bWJlcicgIG5hbWU9XCJmaWx0ZXJWYWx1ZVwiIFtuZ01vZGVsXT1cImZpbHRlci5maWx0ZXJWYWx1ZVwiIC8+XHJcbiAgICAgICAgICAgIDxzcGFuIG1hdFByZWZpeD5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlUmlwcGxlPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJzZXRGaWx0ZXJUeXBlKEZpbHRlclR5cGUuTnVtYmVyTGVzc1RoYW4pXCIgY2xhc3M9XCJzdWZmaXgtaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Nob3Nlbi1pY29uJzogbXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLk51bWJlckxlc3NUaGFuIH1cIj5cclxuICAgICAgICAgICAgICAgICAgYXJyb3dfYmFja19pb3M8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVSaXBwbGU+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInNldEZpbHRlclR5cGUoRmlsdGVyVHlwZS5OdW1iZXJHcmVhdGVyVGhhbilcIiBjbGFzcz1cInN1ZmZpeC1pY29uc1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Nob3Nlbi1pY29uJzogbXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLk51bWJlckdyZWF0ZXJUaGFuIH1cIj5cclxuICAgICAgICAgICAgICAgICAgYXJyb3dfZm9yd2FyZF9pb3M8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVSaXBwbGU+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic2V0RmlsdGVyVHlwZShGaWx0ZXJUeXBlLk51bWJlckVxdWFscylcIiBjbGFzcz1cInN1ZmZpeC1pY29uc1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Nob3Nlbi1pY29uJzogbXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLk51bWJlckVxdWFscyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgID08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIm1ldGFEYXRhLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkJvb2xlYW5cIj5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAwIDE2cHhcIj5cclxuICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInNlYXJjaC1pY29uXCI+ZmlsdGVyX2xpc3Q8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIHN0b3AtcHJvcGFnYXRpb24gI2N0cmw9XCJtYXRSYWRpb0dyb3VwXCIgI2Jvb2xGaWVsZD0nbmdNb2RlbCcgY2xhc3M9XCJmb250XCIgbmFtZT1cImZpbHRlclZhbHVlXCIgW25nTW9kZWxdPVwibXlGaWx0ZXJWYWx1ZVwiID5cclxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cImZpbHRlci1yYWRpby1idXR0b25cIiAoY2xpY2spPVwibXlGaWx0ZXJWYWx1ZSA9IHRydWU7XCIgW3ZhbHVlXT1cInRydWVcIj5UcnVlPC9tYXQtcmFkaW8tYnV0dG9uPjxici8+XHJcbiAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJmaWx0ZXItcmFkaW8tYnV0dG9uXCIgKGNsaWNrKT1cIm15RmlsdGVyVmFsdWUgPSBmYWxzZVwiIFt2YWx1ZV09XCJmYWxzZVwiPkZhbHNlPC9tYXQtcmFkaW8tYnV0dG9uPjxici8+XHJcbiAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIm1ldGFEYXRhLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkRhdGVcIj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBzdHlsZT1cInBhZGRpbmc6IDAgMTZweFwiIGNsYXNzPVwiZm9udCBhdXRvLXdpZHRoXCIgc3RvcC1wcm9wYWdhdGlvbiA+XHJcbiAgICAgICAgICAgIDxzcGFuIG1hdFByZWZpeD5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlUmlwcGxlPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJzZXRGaWx0ZXJUeXBlKEZpbHRlclR5cGUuRGF0ZU9uT3JBZnRlcilcIiBjbGFzcz1cInN1ZmZpeC1pY29ucyB1bmRlcmxpbmVcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjaG9zZW4taWNvbic6IG15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5EYXRlT25PckFmdGVyIH1cIj5cclxuICAgICAgICAgICAgICAgICAgYXJyb3dfZm9yd2FyZF9pb3M8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVSaXBwbGU+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInNldEZpbHRlclR5cGUoRmlsdGVyVHlwZS5EYXRlT25PckJlZm9yZSlcIiBjbGFzcz1cInN1ZmZpeC1pY29ucyB1bmRlcmxpbmVcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjaG9zZW4taWNvbic6IG15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5EYXRlT25PckJlZm9yZSAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICBhcnJvd19iYWNrX2lvczwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gZGlzYWJsZVJpcHBsZT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJzZXRGaWx0ZXJUeXBlKEZpbHRlclR5cGUuRGF0ZUlzT24pXCIgY2xhc3M9XCJzdWZmaXgtaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjaG9zZW4taWNvbic6IG15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5EYXRlSXNPbiB9XCI+XHJcbiAgICAgICAgICAgICAgICAgID08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57e215RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5EYXRlSXNPbiA/ICdPbi4uLicgOlxyXG4gICAgICAgICAgICAgIG15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5EYXRlT25PckJlZm9yZSA/ICdPbiBvciBCZWZvcmUuLi4nIDogJ09uIG9yIEFmdGVyLi4uJ319PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPVwiZmlsdGVyVmFsdWVcIiBbbmdNb2RlbF09XCJmaWx0ZXIuZmlsdGVyVmFsdWVcIiBbbWF0RGF0ZXBpY2tlcl09XCJjYWxlbmRhclwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbGVuZGFyLm9wZW4oKVwiLz5cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJjYWxlbmRhclwiIHByZXZlbnRFbnRlcj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNjYWxlbmRhcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cIm9uRW50ZXIobXlGb3JtLnZhbHVlKVwiIFtkaXNhYmxlZF09XCJteUZvcm0udmFsdWUuZmlsdGVyVmFsdWUgPT0gdW5kZWZpbmVkXCIgZGlzYWJsZVJpcHBsZT5cclxuICAgICAgQXBwbHlcclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbmctZm9ybT5cclxuPC9tYXQtbWVudT5cclxuIl19
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy9oZWFkZXItbWVudS9oZWFkZXItbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2hlYWRlci1tZW51L2hlYWRlci1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFZLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBUXhELE1BQU0sT0FBTyxtQkFBbUI7SUFVOUIsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVQxQyxjQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLGVBQVUsR0FBRyxVQUFVLENBQUM7SUFRcUIsQ0FBQztJQUU5QyxTQUFTLENBQUMsR0FBVztRQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFO1lBQzVELElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPO1NBQ1I7UUFDRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQy9CLEtBQUssU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUN0QixLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDcEIsS0FBSyxTQUFTLENBQUMsV0FBVyxDQUFDO1lBQzNCLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQztZQUNyQixLQUFLLFNBQVMsQ0FBQyxPQUFPO2dCQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUM7Z0JBQzlDLE1BQU07WUFDUixLQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUM7WUFDeEIsS0FBSyxTQUFTLENBQUMsTUFBTTtnQkFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO2dCQUM1QyxNQUFNO1lBQ1IsS0FBSyxTQUFTLENBQUMsT0FBTztnQkFDbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO2dCQUM3QyxNQUFNO1lBQ1YsS0FBSyxTQUFTLENBQUMsSUFBSTtnQkFDZixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hDLE1BQU07WUFDVixLQUFLLFNBQVMsQ0FBQyxJQUFJO2dCQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxLQUFLLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztJQUNwSSxDQUFDO0lBRUQsYUFBYSxDQUFDLFVBQXNCO1FBQ2xDLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsTUFBa0I7UUFDeEIsSUFBSSxNQUFNLENBQUMsV0FBVyxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDOztnSEFsRVUsbUJBQW1CO29HQUFuQixtQkFBbUIsbUpBU25CLGNBQWMsZ0RDdEIzQixzeE5BOEdBOzJGRGpHYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU07aUdBUXRDLE1BQU07c0JBQWQsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNxQixPQUFPO3NCQUFqQyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkVHlwZSwgTWV0YURhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC1kZWYnO1xyXG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvZmlsdGVyVHlwZXMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJJbmZvIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9maWx0ZXItaW5mbyc7XHJcbmltcG9ydCB7IFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLXN0b3JlJztcclxuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGItaGVhZGVyLW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXItbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaGVhZGVyLW1lbnUuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhlYWRlck1lbnVDb21wb25lbnQge1xyXG4gIEZpZWxkVHlwZSA9IEZpZWxkVHlwZTtcclxuICBGaWx0ZXJUeXBlID0gRmlsdGVyVHlwZTtcclxuICBteUZpbHRlclR5cGUhOiBGaWx0ZXJUeXBlO1xyXG4gIG15RmlsdGVyVmFsdWU6IGFueTtcclxuXHJcbiAgQElucHV0KCkgZmlsdGVyITogUGFydGlhbDxGaWx0ZXJJbmZvPjtcclxuXHJcbiAgQElucHV0KCkgbWV0YURhdGEhOiBNZXRhRGF0YTtcclxuICBAVmlld0NoaWxkKE1hdE1lbnVUcmlnZ2VyKSB0cmlnZ2VyITogTWF0TWVudVRyaWdnZXI7XHJcbiAgY29uc3RydWN0b3IoIHB1YmxpYyB0YWJsZVN0YXRlOiBUYWJsZVN0b3JlKSB7fVxyXG5cclxuICBoaWRlRmllbGQoa2V5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGFibGVTdGF0ZS5oaWRlQ29sdW1uKGtleSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucmVzZXRGaWx0ZXJUeXBlKCk7XHJcbiAgfVxyXG5cclxuICByZXNldEZpbHRlclR5cGUoKSB7XHJcbiAgICBpZih0aGlzLm1ldGFEYXRhLmFkZGl0aW9uYWw/LmZpbHRlck9wdGlvbnM/LmZpbHRlcmFibGVWYWx1ZXMpIHtcclxuICAgICAgdGhpcy5teUZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkluO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0YURhdGEuZmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlLlN0cmluZzpcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuTGluazpcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuUGhvbmVOdW1iZXI6XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlLkFycmF5OlxyXG4gICAgICBjYXNlIEZpZWxkVHlwZS5Vbmtub3duOlxyXG4gICAgICAgIHRoaXMubXlGaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5TdHJpbmdDb250YWlucztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuQ3VycmVuY3k6XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlLk51bWJlcjpcclxuICAgICAgICB0aGlzLm15RmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuTnVtYmVyRXF1YWxzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZS5Cb29sZWFuOlxyXG4gICAgICAgICAgdGhpcy5teUZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkJvb2xlYW5FcXVhbHM7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuRGF0ZTpcclxuICAgICAgICAgIHRoaXMubXlGaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5EYXRlSXNPbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZS5FbnVtOlxyXG4gICAgICAgIHRoaXMubXlGaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5JbjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFN0cmluZ0ZpbHRlclR5cGUoKSB7XHJcbiAgICB0aGlzLm15RmlsdGVyVHlwZSA9IHRoaXMubXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLlN0cmluZ0NvbnRhaW5zID8gRmlsdGVyVHlwZS5TdHJpbmdEb2VzTm90Q29udGFpbiA6IEZpbHRlclR5cGUuU3RyaW5nQ29udGFpbnM7XHJcbiAgfVxyXG5cclxuICBzZXRGaWx0ZXJUeXBlKGZpbHRlclR5cGU6IEZpbHRlclR5cGUpIHtcclxuICAgIGlmIChmaWx0ZXJUeXBlID09PSB0aGlzLm15RmlsdGVyVHlwZSkge1xyXG4gICAgICB0aGlzLnJlc2V0RmlsdGVyVHlwZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5teUZpbHRlclR5cGUgPSBmaWx0ZXJUeXBlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25FbnRlcihmaWx0ZXI6IEZpbHRlckluZm8pIHtcclxuICAgIGlmIChmaWx0ZXIuZmlsdGVyVmFsdWUgIT0gdW5kZWZpbmVkICYmIGZpbHRlci5maWx0ZXJUeXBlKSB7XHJcbiAgICAgIHRoaXMudGFibGVTdGF0ZS5hZGRGaWx0ZXIoZmlsdGVyKTtcclxuICAgICAgdGhpcy50cmlnZ2VyLmNsb3NlTWVudSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlUmlwcGxlIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgc3R5bGU9XCJoZWlnaHQ6MTZweDtcIiBbbWF0TWVudVRyaWdnZXJSZXN0b3JlRm9jdXNdPVwiZmFsc2VcIj5cclxuICA8bWF0LWljb24gY2xhc3M9XCJtZW51LWljb25cIj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxyXG48L2J1dHRvbj5cclxuPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwidGFibGVTdGF0ZS5hZGRHcm91cEJ5S2V5KG1ldGFEYXRhLmtleSlcIj5cclxuICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5ncm91cDwvbWF0LWljb24+XHJcbiAgICA8c3Bhbj5Hcm91cCBCeTwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1oaWRlRmllbGQobWV0YURhdGEua2V5KT5cclxuICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj52aXNpYmlsaXR5X29mZjwvbWF0LWljb24+XHJcbiAgICA8c3Bhbj5IaWRlIENvbHVtbjwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuICA8bmctZm9ybSAjbXlGb3JtPVwibmdGb3JtXCIgW25nU3dpdGNoXT1cInRydWVcIiAoa2V5ZG93bi5lbnRlcik9XCJvbkVudGVyKG15Rm9ybS52YWx1ZSlcIj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsdGVySWRcIiAgW25nTW9kZWxdPVwiJ2hlYWRlci1jb2x1bW4tJyArIG1ldGFEYXRhLmtleVwiIC8+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImZpbHRlclR5cGVcIiAgW25nTW9kZWxdPVwibXlGaWx0ZXJUeXBlXCIgLz5cclxuICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwia2V5XCIgIFtuZ01vZGVsXT1cIm1ldGFEYXRhLmtleVwiIC8+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImZpZWxkVHlwZVwiICBbbmdNb2RlbF09XCJtZXRhRGF0YS5maWVsZFR5cGVcIiAvPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuT3IgfHwgbXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLkluKTsgZWxzZSBkZWZhdWx0RmlsdGVyXCI+XHJcbiAgICAgICAgICA8dGItaW4tbGlzdC1maWx0ZXIgIHN0eWxlPVwiZGlzcGxheTpibG9jaztwYWRkaW5nOiAwIDE2cHhcIiAgbmFtZT0nZmlsdGVyVmFsdWUnIFtrZXldPSdtZXRhRGF0YS5rZXknIFsobmdNb2RlbCldPSdteUZpbHRlclZhbHVlJyA+XHJcbiAgICAgICAgICA8L3RiLWluLWxpc3QtZmlsdGVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRGaWx0ZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwibWV0YURhdGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuTGluayB8fCBtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5TdHJpbmcgfHwgbWV0YURhdGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQXJyYXkgfHwgbWV0YURhdGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuVW5rbm93biB8fCBtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5QaG9uZU51bWJlclwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHN0b3AtcHJvcGFnYXRpb24gY2xhc3M9XCJmb250XCIgc3R5bGU9XCJwYWRkaW5nOiAwIDE2cHhcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeCBjbGFzcz1cInNlYXJjaC1pY29uXCI+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57e215RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5TdHJpbmdEb2VzTm90Q29udGFpbiA/ICdEb2VzIE5vdCBDb250YWluLi4uJyA6ICdDb250YWlucy4uLid9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT1cImZpbHRlclZhbHVlXCIgW25nTW9kZWxdPVwiZmlsdGVyLmZpbHRlclZhbHVlXCIgLz5cclxuICAgICAgICAgICAgPHNwYW4gbWF0U3VmZml4IFttYXRUb29sdGlwXT1cIm15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5TdHJpbmdEb2VzTm90Q29udGFpbiA/ICdDb250YWlucycgOiAnRG9lcyBOb3QgQ29udGFpbidcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2V0U3RyaW5nRmlsdGVyVHlwZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gW25nQ2xhc3NdPVwieydjaG9zZW4taWNvbic6IG15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5TdHJpbmdEb2VzTm90Q29udGFpbiB9XCI+XHJcbiAgICAgICAgICAgICAgICAgIGJsb2NrXHJcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5OdW1iZXIgfHwgbWV0YURhdGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQ3VycmVuY3lcIj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImF1dG8td2lkdGhcIiAgc3RvcC1wcm9wYWdhdGlvbiBzdHlsZT1cInBhZGRpbmc6IDAgMTZweFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7bXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLk51bWJlckVxdWFscyA/ICdFcXVhbHMuLi4nIDogbXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLk51bWJlckxlc3NUaGFuID8gJ0xlc3MgVGhhbi4uLicgOiAnTW9yZSBUaGFuLi4uJ319PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSdudW1iZXInICBuYW1lPVwiZmlsdGVyVmFsdWVcIiBbbmdNb2RlbF09XCJmaWx0ZXIuZmlsdGVyVmFsdWVcIiAvPlxyXG4gICAgICAgICAgICA8c3BhbiBtYXRQcmVmaXg+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gZGlzYWJsZVJpcHBsZT5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwic2V0RmlsdGVyVHlwZShGaWx0ZXJUeXBlLk51bWJlckxlc3NUaGFuKVwiIGNsYXNzPVwic3VmZml4LWljb25zXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjaG9zZW4taWNvbic6IG15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5OdW1iZXJMZXNzVGhhbiB9XCI+XHJcbiAgICAgICAgICAgICAgICAgIGFycm93X2JhY2tfaW9zPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlUmlwcGxlPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJzZXRGaWx0ZXJUeXBlKEZpbHRlclR5cGUuTnVtYmVyR3JlYXRlclRoYW4pXCIgY2xhc3M9XCJzdWZmaXgtaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjaG9zZW4taWNvbic6IG15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5OdW1iZXJHcmVhdGVyVGhhbiB9XCI+XHJcbiAgICAgICAgICAgICAgICAgIGFycm93X2ZvcndhcmRfaW9zPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlUmlwcGxlPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInNldEZpbHRlclR5cGUoRmlsdGVyVHlwZS5OdW1iZXJFcXVhbHMpXCIgY2xhc3M9XCJzdWZmaXgtaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjaG9zZW4taWNvbic6IG15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5OdW1iZXJFcXVhbHMgfVwiPlxyXG4gICAgICAgICAgICAgICAgICA9PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5Cb29sZWFuXCI+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMCAxNnB4XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzZWFyY2gtaWNvblwiPmZpbHRlcl9saXN0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBzdG9wLXByb3BhZ2F0aW9uICNjdHJsPVwibWF0UmFkaW9Hcm91cFwiICNib29sRmllbGQ9J25nTW9kZWwnIGNsYXNzPVwiZm9udFwiIG5hbWU9XCJmaWx0ZXJWYWx1ZVwiIFtuZ01vZGVsXT1cIm15RmlsdGVyVmFsdWVcIiA+XHJcbiAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJmaWx0ZXItcmFkaW8tYnV0dG9uXCIgKGNsaWNrKT1cIm15RmlsdGVyVmFsdWUgPSB0cnVlO1wiIFt2YWx1ZV09XCJ0cnVlXCI+VHJ1ZTwvbWF0LXJhZGlvLWJ1dHRvbj48YnIvPlxyXG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwiZmlsdGVyLXJhZGlvLWJ1dHRvblwiIChjbGljayk9XCJteUZpbHRlclZhbHVlID0gZmFsc2VcIiBbdmFsdWVdPVwiZmFsc2VcIj5GYWxzZTwvbWF0LXJhZGlvLWJ1dHRvbj48YnIvPlxyXG4gICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5EYXRlXCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJwYWRkaW5nOiAwIDE2cHhcIiBjbGFzcz1cImZvbnQgYXV0by13aWR0aFwiIHN0b3AtcHJvcGFnYXRpb24gPlxyXG4gICAgICAgICAgICA8c3BhbiBtYXRQcmVmaXg+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gZGlzYWJsZVJpcHBsZT5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwic2V0RmlsdGVyVHlwZShGaWx0ZXJUeXBlLkRhdGVPbk9yQWZ0ZXIpXCIgY2xhc3M9XCJzdWZmaXgtaWNvbnMgdW5kZXJsaW5lXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnY2hvc2VuLWljb24nOiBteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuRGF0ZU9uT3JBZnRlciB9XCI+XHJcbiAgICAgICAgICAgICAgICAgIGFycm93X2ZvcndhcmRfaW9zPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlUmlwcGxlPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJzZXRGaWx0ZXJUeXBlKEZpbHRlclR5cGUuRGF0ZU9uT3JCZWZvcmUpXCIgY2xhc3M9XCJzdWZmaXgtaWNvbnMgdW5kZXJsaW5lXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnY2hvc2VuLWljb24nOiBteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuRGF0ZU9uT3JCZWZvcmUgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgYXJyb3dfYmFja19pb3M8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVSaXBwbGU+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic2V0RmlsdGVyVHlwZShGaWx0ZXJUeXBlLkRhdGVJc09uKVwiIGNsYXNzPVwic3VmZml4LWljb25zXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnY2hvc2VuLWljb24nOiBteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuRGF0ZUlzT24gfVwiPlxyXG4gICAgICAgICAgICAgICAgICA9PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuRGF0ZUlzT24gPyAnT24uLi4nIDpcclxuICAgICAgICAgICAgICBteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuRGF0ZU9uT3JCZWZvcmUgPyAnT24gb3IgQmVmb3JlLi4uJyA6ICdPbiBvciBBZnRlci4uLid9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT1cImZpbHRlclZhbHVlXCIgW25nTW9kZWxdPVwiZmlsdGVyLmZpbHRlclZhbHVlXCIgW21hdERhdGVwaWNrZXJdPVwiY2FsZW5kYXJcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjYWxlbmRhci5vcGVuKClcIi8+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiY2FsZW5kYXJcIiBwcmV2ZW50RW50ZXI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjY2FsZW5kYXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJvbkVudGVyKG15Rm9ybS52YWx1ZSlcIiBbZGlzYWJsZWRdPVwibXlGb3JtLnZhbHVlLmZpbHRlclZhbHVlID09IHVuZGVmaW5lZFwiIGRpc2FibGVSaXBwbGU+XHJcbiAgICAgIEFwcGx5XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L25nLWZvcm0+XHJcbjwvbWF0LW1lbnU+XHJcbiJdfQ==
|
|
@@ -6,4 +6,5 @@ export * from './table-container-filter/filter-list/filter-list.component';
|
|
|
6
6
|
export * from './generic-table/generic-table.component';
|
|
7
7
|
export * from './table-container/table-container';
|
|
8
8
|
export * from './generic-table/paginator.component';
|
|
9
|
-
|
|
9
|
+
export * from './group-by-list/group-by-list.component';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsOEVBQThFLENBQUM7QUFDN0YsY0FBYyw0REFBNEQsQ0FBQztBQUMzRSxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHlDQUF5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kYXRlLWZpbHRlci9kYXRlLWZpbHRlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2dlbi1jb2wtZGlzcGxheWVyL2dlbi1jb2wtZGlzcGxheWVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLWNvbnRhaW5lci1maWx0ZXIvZ2VuLWZpbHRlci1kaXNwbGF5ZXIvZ2VuLWZpbHRlci1kaXNwbGF5ZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUtY29udGFpbmVyLWZpbHRlci9maWx0ZXItbGlzdC9maWx0ZXItbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9nZW5lcmljLXRhYmxlL2dlbmVyaWMtdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUtY29udGFpbmVyL3RhYmxlLWNvbnRhaW5lcic7XG5leHBvcnQgKiBmcm9tICcuL2dlbmVyaWMtdGFibGUvcGFnaW5hdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3VwLWJ5LWxpc3QvZ3JvdXAtYnktbGlzdC5jb21wb25lbnQnO1xuIl19
|