@one-paragon/angular-utilities 1.3.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/one-paragon-angular-utilities.mjs +251 -252
- package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -1
- package/http-request-state/HttpRequestStateStore.d.ts +1 -1
- package/http-request-state/directives/HttpStateDirectiveBase.d.ts +1 -1
- package/package.json +1 -3
- package/rxjs/subscriber.directive.d.ts +1 -1
- package/table-builder/classes/table-store.d.ts +3 -3
- package/table-builder/components/link-column.component.d.ts +3 -3
- package/table-builder/components/table-container/table-container-imports.d.ts +1 -1
- package/table-builder/components/table-container/table-container.helpers/filter-state.helpers.d.ts +1 -1
- package/table-builder/directives/tb-filter.directive.d.ts +3 -3
- package/table-builder/ngrx/tableBuilderStateStore.d.ts +4 -4
- package/esm2022/action-state/action-state-spinner/action-state-spinner.component.mjs +0 -24
- package/esm2022/action-state/action-state-ui/action-state-ui.module.mjs +0 -20
- package/esm2022/action-state/index.mjs +0 -8
- package/esm2022/action-state/ngrx-ext/ngrx-ext.module.mjs +0 -23
- package/esm2022/action-state/ngrx.mjs +0 -47
- package/esm2022/http-request-state/HttpRequestStateFactory.mjs +0 -51
- package/esm2022/http-request-state/HttpRequestStateStore.mjs +0 -135
- package/esm2022/http-request-state/directives/HttpStateDirectiveBase.mjs +0 -30
- package/esm2022/http-request-state/directives/http-error-state-directive.mjs +0 -23
- package/esm2022/http-request-state/directives/http-inProgress-state-directive.mjs +0 -23
- package/esm2022/http-request-state/directives/http-notStarted-state-directive.mjs +0 -23
- package/esm2022/http-request-state/directives/http-success-state-directive.mjs +0 -29
- package/esm2022/http-request-state/directives/index.mjs +0 -6
- package/esm2022/http-request-state/directives/request-state-directive.mjs +0 -61
- package/esm2022/http-request-state/helpers.mjs +0 -22
- package/esm2022/http-request-state/http-request-state.mjs +0 -39
- package/esm2022/http-request-state/http-state-module.mjs +0 -40
- package/esm2022/http-request-state/index.mjs +0 -7
- package/esm2022/http-request-state/rxjs/getRequestorBody.mjs +0 -4
- package/esm2022/http-request-state/rxjs/getRequestorState.mjs +0 -3
- package/esm2022/http-request-state/rxjs/index.mjs +0 -5
- package/esm2022/http-request-state/rxjs/tapError.mjs +0 -12
- package/esm2022/http-request-state/rxjs/tapSuccess.mjs +0 -12
- package/esm2022/http-request-state/types.mjs +0 -16
- package/esm2022/ngrx/actionable-selector.mjs +0 -107
- package/esm2022/ngrx/index.mjs +0 -2
- package/esm2022/one-paragon-angular-utilities.mjs +0 -5
- package/esm2022/public-api.mjs +0 -20
- package/esm2022/rxjs/defaultShareReplay.mjs +0 -7
- package/esm2022/rxjs/index.mjs +0 -6
- package/esm2022/rxjs/mapError.mjs +0 -8
- package/esm2022/rxjs/rxjs-operators.mjs +0 -92
- package/esm2022/rxjs/subjectifier.mjs +0 -15
- package/esm2022/rxjs/subscriber.directive.mjs +0 -50
- package/esm2022/table-builder/classes/DefaultSettings.mjs +0 -6
- package/esm2022/table-builder/classes/MatTableObservableDataSource.mjs +0 -23
- package/esm2022/table-builder/classes/TableBuilderConfig.mjs +0 -18
- package/esm2022/table-builder/classes/TableBuilderDataSource.mjs +0 -48
- package/esm2022/table-builder/classes/TableState.mjs +0 -48
- package/esm2022/table-builder/classes/data-store.mjs +0 -15
- package/esm2022/table-builder/classes/display-col.mjs +0 -2
- package/esm2022/table-builder/classes/filter-info.mjs +0 -61
- package/esm2022/table-builder/classes/table-builder-general-settings.mjs +0 -116
- package/esm2022/table-builder/classes/table-builder.mjs +0 -77
- package/esm2022/table-builder/classes/table-store.mjs +0 -388
- package/esm2022/table-builder/components/array-column.component.mjs +0 -53
- package/esm2022/table-builder/components/column-builder/column-builder.component.mjs +0 -145
- package/esm2022/table-builder/components/column-builder/column-helpers.mjs +0 -45
- package/esm2022/table-builder/components/date-filter/date-filter.component.mjs +0 -29
- package/esm2022/table-builder/components/date-time-filter/date-time-filter.component.mjs +0 -24
- package/esm2022/table-builder/components/filter/filter.component.mjs +0 -64
- package/esm2022/table-builder/components/filter/in-list/in-list-filter.component.mjs +0 -102
- package/esm2022/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +0 -47
- package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +0 -306
- package/esm2022/table-builder/components/generic-table/paginator.component.mjs +0 -104
- package/esm2022/table-builder/components/group-by-list/group-by-list.component.mjs +0 -21
- package/esm2022/table-builder/components/header-menu/header-menu.component.mjs +0 -103
- package/esm2022/table-builder/components/in-filter/in-filter.component.mjs +0 -65
- package/esm2022/table-builder/components/index.mjs +0 -10
- package/esm2022/table-builder/components/initialization-component/initialization-component.mjs +0 -47
- package/esm2022/table-builder/components/link-column.component.mjs +0 -74
- package/esm2022/table-builder/components/number-filter/number-filter.component.mjs +0 -29
- package/esm2022/table-builder/components/profiles-menu/profiles-menu.component.mjs +0 -64
- package/esm2022/table-builder/components/scroll-strategy.mjs +0 -60
- package/esm2022/table-builder/components/sort-menu/sort-menu.component-store.mjs +0 -46
- package/esm2022/table-builder/components/sort-menu/sort-menu.component.mjs +0 -82
- package/esm2022/table-builder/components/table-container/table-container-imports.mjs +0 -26
- package/esm2022/table-builder/components/table-container/table-container.helpers/data-state.helpers.mjs +0 -135
- package/esm2022/table-builder/components/table-container/table-container.helpers/filter-state.helpers.mjs +0 -83
- package/esm2022/table-builder/components/table-container/table-container.helpers/groupBy.helpers.mjs +0 -71
- package/esm2022/table-builder/components/table-container/table-container.helpers/sort-state.helpers.mjs +0 -36
- package/esm2022/table-builder/components/table-container/table-container.mjs +0 -334
- package/esm2022/table-builder/components/table-container/tableProps.mjs +0 -8
- package/esm2022/table-builder/components/table-container/virtual-scroll-container.mjs +0 -155
- package/esm2022/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +0 -44
- package/esm2022/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +0 -35
- package/esm2022/table-builder/components/table-container-filter/table-wrapper-filter-store.mjs +0 -25
- package/esm2022/table-builder/directives/custom-cell-directive.mjs +0 -73
- package/esm2022/table-builder/directives/index.mjs +0 -6
- package/esm2022/table-builder/directives/multi-sort.directive.mjs +0 -50
- package/esm2022/table-builder/directives/resize-column.directive.mjs +0 -87
- package/esm2022/table-builder/directives/table-wrapper.directive.mjs +0 -18
- package/esm2022/table-builder/directives/tb-filter.directive.mjs +0 -396
- package/esm2022/table-builder/enums/filterTypes.mjs +0 -29
- package/esm2022/table-builder/functions/boolean-filter-function.mjs +0 -10
- package/esm2022/table-builder/functions/date-filter-function.mjs +0 -58
- package/esm2022/table-builder/functions/download-data.mjs +0 -12
- package/esm2022/table-builder/functions/null-filter-function.mjs +0 -8
- package/esm2022/table-builder/functions/number-filter-function.mjs +0 -32
- package/esm2022/table-builder/functions/sort-data-function.mjs +0 -17
- package/esm2022/table-builder/functions/string-filter-function.mjs +0 -41
- package/esm2022/table-builder/interfaces/ColumnInfo.mjs +0 -2
- package/esm2022/table-builder/interfaces/dictionary.mjs +0 -2
- package/esm2022/table-builder/interfaces/report-def.mjs +0 -50
- package/esm2022/table-builder/ngrx/tableBuilderStateStore.mjs +0 -154
- package/esm2022/table-builder/pipes/column-total.pipe.mjs +0 -22
- package/esm2022/table-builder/pipes/format-filter-type.pipe.mjs +0 -18
- package/esm2022/table-builder/pipes/format-filter-value.pipe.mjs +0 -43
- package/esm2022/table-builder/pipes/key-display.mjs +0 -18
- package/esm2022/table-builder/services/export-to-csv.service.mjs +0 -75
- package/esm2022/table-builder/services/link-creator.service.mjs +0 -50
- package/esm2022/table-builder/services/table-template-service.mjs +0 -60
- package/esm2022/table-builder/services/transform-creator.mjs +0 -100
- package/esm2022/table-builder/table-builder.module.mjs +0 -124
- package/esm2022/utilities/array-helpers.mjs +0 -14
- package/esm2022/utilities/directives/auto-focus.directive.mjs +0 -25
- package/esm2022/utilities/directives/clickEmitterDirective.mjs +0 -22
- package/esm2022/utilities/directives/clickSubject.mjs +0 -29
- package/esm2022/utilities/directives/conditional-classes.directive.mjs +0 -36
- package/esm2022/utilities/directives/dialog-service.mjs +0 -21
- package/esm2022/utilities/directives/dialog.mjs +0 -145
- package/esm2022/utilities/directives/mat-toggle-group-directive.mjs +0 -59
- package/esm2022/utilities/directives/prevent-enter.directive.mjs +0 -20
- package/esm2022/utilities/directives/stop-propagation.directive.mjs +0 -26
- package/esm2022/utilities/directives/styler.mjs +0 -41
- package/esm2022/utilities/directives/trim-whitespace.directive.mjs +0 -28
- package/esm2022/utilities/index.mjs +0 -16
- package/esm2022/utilities/module.mjs +0 -90
- package/esm2022/utilities/pipes/function.pipe.mjs +0 -22
- package/esm2022/utilities/pipes/phone.pipe.mjs +0 -20
- package/esm2022/utilities/pipes/space-case.pipes.mjs +0 -28
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, inject } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { map, tap } from 'rxjs/operators';
|
|
4
|
-
import { TableStore } from '../../../classes/table-store';
|
|
5
|
-
import { FieldType } from '../../../interfaces/report-def';
|
|
6
|
-
import { AsyncPipe, KeyValuePipe } from '@angular/common';
|
|
7
|
-
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
8
|
-
import { SpaceCasePipe, StopPropagationDirective } from '../../../../utilities';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/material/checkbox";
|
|
11
|
-
export class InListFilterComponent {
|
|
12
|
-
ref = inject(ChangeDetectorRef);
|
|
13
|
-
tableState = inject(TableStore);
|
|
14
|
-
value = [];
|
|
15
|
-
FieldType = FieldType;
|
|
16
|
-
writeValue(obj) {
|
|
17
|
-
this.value = obj;
|
|
18
|
-
if (this.value) {
|
|
19
|
-
this.selectedKeys = this.value.map(f => f);
|
|
20
|
-
}
|
|
21
|
-
this.ref.markForCheck();
|
|
22
|
-
}
|
|
23
|
-
onChange = (_) => { };
|
|
24
|
-
registerOnChange(fn) {
|
|
25
|
-
this.onChange = fn;
|
|
26
|
-
}
|
|
27
|
-
onTouched = () => { };
|
|
28
|
-
registerOnTouched(fn) {
|
|
29
|
-
this.onTouched = fn;
|
|
30
|
-
}
|
|
31
|
-
key;
|
|
32
|
-
keyValues$;
|
|
33
|
-
selectedKeys = [];
|
|
34
|
-
metaData;
|
|
35
|
-
ngOnInit() {
|
|
36
|
-
this.keyValues$ = this.tableState.getMetaData$(this.key).pipe(tap(metaData => this.metaData = metaData), map(metaData => {
|
|
37
|
-
if (metaData.additional?.filterOptions?.filterableValues) {
|
|
38
|
-
return metaData.additional.filterOptions.filterableValues.reduce((prev, cur) => { prev[cur] = cur; return prev; }, {});
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
if (metaData.fieldType === FieldType.Enum) {
|
|
42
|
-
return metaData.additional.enumMap;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return {};
|
|
46
|
-
}));
|
|
47
|
-
}
|
|
48
|
-
selectFilterChanged($event, val) {
|
|
49
|
-
if ($event.checked) {
|
|
50
|
-
this.selectedKeys = [...this.selectedKeys, val];
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
this.selectedKeys = this.selectedKeys.filter(item => item !== val);
|
|
54
|
-
}
|
|
55
|
-
this.value = this.selectedKeys;
|
|
56
|
-
this.onChange(this.value);
|
|
57
|
-
}
|
|
58
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: InListFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
59
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: InListFilterComponent, isStandalone: true, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: { key: "key" }, providers: [{
|
|
60
|
-
provide: NG_VALUE_ACCESSOR,
|
|
61
|
-
useExisting: InListFilterComponent,
|
|
62
|
-
multi: true
|
|
63
|
-
}], ngImport: i0, template: `
|
|
64
|
-
@for (item of keyValues$ | async| keyvalue; track item.key) {
|
|
65
|
-
<div>
|
|
66
|
-
<mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
|
|
67
|
-
{{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
|
|
68
|
-
</mat-checkbox>
|
|
69
|
-
</div>
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
`, isInline: true, dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
73
|
-
}
|
|
74
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: InListFilterComponent, decorators: [{
|
|
75
|
-
type: Component,
|
|
76
|
-
args: [{
|
|
77
|
-
selector: 'tb-in-list-filter , [tb-in-list-filter]',
|
|
78
|
-
template: `
|
|
79
|
-
@for (item of keyValues$ | async| keyvalue; track item.key) {
|
|
80
|
-
<div>
|
|
81
|
-
<mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
|
|
82
|
-
{{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
|
|
83
|
-
</mat-checkbox>
|
|
84
|
-
</div>
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
`,
|
|
88
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
89
|
-
providers: [{
|
|
90
|
-
provide: NG_VALUE_ACCESSOR,
|
|
91
|
-
useExisting: InListFilterComponent,
|
|
92
|
-
multi: true
|
|
93
|
-
}],
|
|
94
|
-
standalone: true,
|
|
95
|
-
imports: [
|
|
96
|
-
AsyncPipe, KeyValuePipe, MatCheckboxModule, StopPropagationDirective, SpaceCasePipe
|
|
97
|
-
]
|
|
98
|
-
}]
|
|
99
|
-
}], propDecorators: { key: [{
|
|
100
|
-
type: Input
|
|
101
|
-
}] } });
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW4tbGlzdC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy9maWx0ZXIvaW4tbGlzdC9pbi1saXN0LWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQW9CLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQXdCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFNBQVMsRUFBWSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUEwQmhGLE1BQU0sT0FBTyxxQkFBcUI7SUFDeEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFeEMsS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUNyQixTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQ3RCLFVBQVUsQ0FBQyxHQUFhO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBRWpCLElBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFD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Q0FBQzs0QkFDVixPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLHVCQUF1Qjs0QkFDbEMsS0FBSyxFQUFFLElBQUk7eUJBQ1osQ0FBQztvQkFDRixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFO3dCQUNQLFNBQVMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsd0JBQXdCLEVBQUUsYUFBYTtxQkFDcEY7aUJBQ0Y7OEJBeUJVLEdBQUc7c0JBQVgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NvbnRhaW5lclJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUYWJsZVN0b3JlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy90YWJsZS1zdG9yZSc7XHJcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2RpY3Rpb25hcnknO1xyXG5pbXBvcnQgeyBGaWVsZFR5cGUsIE1ldGFEYXRhIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtZGVmJztcclxuaW1wb3J0IHsgQXN5bmNQaXBlLCBLZXlWYWx1ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgU3BhY2VDYXNlUGlwZSwgU3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbGl0aWVzJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RiLWluLWxpc3QtZmlsdGVyICwgW3RiLWluLWxpc3QtZmlsdGVyXScsXHJcbiAgdGVtcGxhdGU6IGBcclxuICBAZm9yIChpdGVtIG9mIGtleVZhbHVlcyQgfCBhc3luY3wga2V5dmFsdWU7IHRyYWNrIGl0ZW0ua2V5KSB7XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8bWF0LWNoZWNrYm94IFtjaGVja2VkXT0nc2VsZWN0ZWRLZXlzLmluY2x1ZGVzKGl0ZW0ua2V5KScgc3RvcC1wcm9wYWdhdGlvbiAoY2hhbmdlKT0nc2VsZWN0RmlsdGVyQ2hhbmdlZCgkZXZlbnQsIGl0ZW0ua2V5KScgPlxyXG4gICAgICAgIHt7bWV0YURhdGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuRW51bSA/IChpdGVtLnZhbHVlIHwgc3BhY2VDYXNlKSA6IGl0ZW0udmFsdWV9fVxyXG4gICAgICA8L21hdC1jaGVja2JveD5cclxuICAgIDwvZGl2PlxyXG4gIH1cclxuXHJcbiAgYCxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFt7XHJcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgIHVzZUV4aXN0aW5nOiBJbkxpc3RGaWx0ZXJDb21wb25lbnQsXHJcbiAgICBtdWx0aTogdHJ1ZVxyXG4gIH1dLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQXN5bmNQaXBlLCBLZXlWYWx1ZVBpcGUsIE1hdENoZWNrYm94TW9kdWxlLCBTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmUsIFNwYWNlQ2FzZVBpcGVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbkxpc3RGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgcHJpdmF0ZSByZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgdGFibGVTdGF0ZSA9IGluamVjdChUYWJsZVN0b3JlKTtcclxuXHJcbiAgdmFsdWU6IHN0cmluZ1tdID0gW107XHJcbiAgRmllbGRUeXBlID0gRmllbGRUeXBlO1xyXG4gIHdyaXRlVmFsdWUob2JqOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IG9iajtcclxuXHJcbiAgICBpZih0aGlzLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gdGhpcy52YWx1ZS5tYXAoIGYgPT4gZiApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIG9uVG91Y2hlZCA9ICgpID0+IHsgfTtcclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuICBASW5wdXQoKSBrZXkhOiBzdHJpbmc7XHJcblxyXG4gIGtleVZhbHVlcyQhIDogT2JzZXJ2YWJsZTxEaWN0aW9uYXJ5PHN0cmluZz4+O1xyXG4gIHNlbGVjdGVkS2V5cyA6IHN0cmluZ1tdID0gW107XHJcbiAgbWV0YURhdGEhOiBNZXRhRGF0YTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmtleVZhbHVlcyQgPSB0aGlzLnRhYmxlU3RhdGUuZ2V0TWV0YURhdGEkKHRoaXMua2V5KS5waXBlKFxyXG4gICAgICB0YXAobWV0YURhdGEgPT4gdGhpcy5tZXRhRGF0YSA9IG1ldGFEYXRhKSxcclxuICAgICAgbWFwKCBtZXRhRGF0YSA9PiB7XHJcbiAgICAgICAgaWYobWV0YURhdGEuYWRkaXRpb25hbD8uZmlsdGVyT3B0aW9ucz8uZmlsdGVyYWJsZVZhbHVlcyApIHtcclxuICAgICAgICAgIHJldHVybiAgbWV0YURhdGEuYWRkaXRpb25hbC5maWx0ZXJPcHRpb25zLmZpbHRlcmFibGVWYWx1ZXMucmVkdWNlKCAocHJldjogYW55LCBjdXIpPT4geyBwcmV2W2N1cl0gPSBjdXI7IHJldHVybiBwcmV2IH0sIHt9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYobWV0YURhdGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuRW51bSApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1ldGFEYXRhLmFkZGl0aW9uYWwhLmVudW1NYXA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGaWx0ZXJDaGFuZ2VkKCRldmVudCwgdmFsKSB7XHJcbiAgICBpZigkZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IFsuLi50aGlzLnNlbGVjdGVkS2V5cywgdmFsXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gdGhpcy5zZWxlY3RlZEtleXMuZmlsdGVyKCBpdGVtID0+IGl0ZW0gIT09IHZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRLZXlzO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Component, ChangeDetectionStrategy, inject, computed } from '@angular/core';
|
|
2
|
-
import { TableStore } from '../../classes/table-store';
|
|
3
|
-
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
4
|
-
import { AsyncPipe } from '@angular/common';
|
|
5
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
6
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
7
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
8
|
-
import { MatMenuModule } from '@angular/material/menu';
|
|
9
|
-
import { SpaceCasePipe, StopPropagationDirective } from '../../../utilities';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@angular/material/tooltip";
|
|
12
|
-
import * as i2 from "@angular/material/icon";
|
|
13
|
-
import * as i3 from "@angular/material/button";
|
|
14
|
-
import * as i4 from "@angular/material/menu";
|
|
15
|
-
import * as i5 from "@angular/cdk/drag-drop";
|
|
16
|
-
export class GenColDisplayerComponent {
|
|
17
|
-
tableState = inject(TableStore);
|
|
18
|
-
$columns = computed(() => this.tableState.$orderedCodeVisibleMetaDatas().map(md => ({
|
|
19
|
-
key: md.key,
|
|
20
|
-
displayName: md.displayName,
|
|
21
|
-
isVisible: !this.tableState.$hiddenKeys().includes(md.key)
|
|
22
|
-
})));
|
|
23
|
-
reset(displayCols) {
|
|
24
|
-
displayCols.forEach(c => c.isVisible = true);
|
|
25
|
-
this.emit(displayCols);
|
|
26
|
-
}
|
|
27
|
-
drop(event) {
|
|
28
|
-
this.tableState.setUserDefinedOrder({ newOrder: event.currentIndex, oldOrder: event.previousIndex });
|
|
29
|
-
}
|
|
30
|
-
unset(displayCols) {
|
|
31
|
-
displayCols.forEach(c => c.isVisible = false);
|
|
32
|
-
this.emit(displayCols);
|
|
33
|
-
}
|
|
34
|
-
emit(displayCols) {
|
|
35
|
-
this.tableState.setHiddenColumns(displayCols.map(c => ({ key: c.key, visible: c.isVisible })));
|
|
36
|
-
}
|
|
37
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: GenColDisplayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
38
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: GenColDisplayerComponent, isStandalone: true, selector: "tb-col-displayer", ngImport: i0, template: "@if($columns(); as displayCols){\r\n <span matTooltip=\"Show/hide columns\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n </button>\r\n </span>\r\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\r\n\r\n <button mat-menu-item>\r\n <span matTooltip=\"Close\">\r\n <button class=\"filter-button\" mat-icon-button>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <button mat-menu-item stop-propagation>\r\n <span matTooltip=\"Show all columns\">\r\n <button mat-icon-button (click)=\"reset(displayCols)\">\r\n <mat-icon color=\"primary\">done_all</mat-icon>\r\n </button>\r\n </span>\r\n\r\n <span matTooltip=\"Hide all columns\">\r\n <button mat-icon-button (click)=\"unset(displayCols)\">\r\n <mat-icon color=\"primary\">cancel</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation [cdkDropListLockAxis]=\"'y'\">\r\n @for (col of displayCols; track col.key) {\r\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\">\r\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; align-items: center;\">\r\n @if(col.isVisible){\r\n <button mat-icon-button matTooltip=\"Hide Column\" class=\"show-hide\">\r\n <mat-icon color=\"primary\">check_box</mat-icon>\r\n </button>\r\n } @else {\r\n <button mat-icon-button matTooltip=\"Show Column\" class=\"show-hide\">\r\n <mat-icon>indeterminate_check_box</mat-icon>\r\n </button>\r\n }\r\n \r\n <p class=\"label\">\r\n {{col.displayName || (col.key | spaceCase) }}\r\n </p>\r\n\r\n </div>\r\n </button>\r\n }\r\n\r\n </div>\r\n </mat-menu>\r\n}", styles: [".show-hide{margin-right:15px;height:24px;width:24px;padding:4px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.mdc-list-item__primary-text{display:inline-block;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4.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: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.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: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
39
|
-
}
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: GenColDisplayerComponent, decorators: [{
|
|
41
|
-
type: Component,
|
|
42
|
-
args: [{ selector: 'tb-col-displayer', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
43
|
-
AsyncPipe, MatTooltipModule, MatIconModule, MatButtonModule, MatMenuModule, StopPropagationDirective,
|
|
44
|
-
DragDropModule, SpaceCasePipe
|
|
45
|
-
], template: "@if($columns(); as displayCols){\r\n <span matTooltip=\"Show/hide columns\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n </button>\r\n </span>\r\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\r\n\r\n <button mat-menu-item>\r\n <span matTooltip=\"Close\">\r\n <button class=\"filter-button\" mat-icon-button>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <button mat-menu-item stop-propagation>\r\n <span matTooltip=\"Show all columns\">\r\n <button mat-icon-button (click)=\"reset(displayCols)\">\r\n <mat-icon color=\"primary\">done_all</mat-icon>\r\n </button>\r\n </span>\r\n\r\n <span matTooltip=\"Hide all columns\">\r\n <button mat-icon-button (click)=\"unset(displayCols)\">\r\n <mat-icon color=\"primary\">cancel</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation [cdkDropListLockAxis]=\"'y'\">\r\n @for (col of displayCols; track col.key) {\r\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\">\r\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; align-items: center;\">\r\n @if(col.isVisible){\r\n <button mat-icon-button matTooltip=\"Hide Column\" class=\"show-hide\">\r\n <mat-icon color=\"primary\">check_box</mat-icon>\r\n </button>\r\n } @else {\r\n <button mat-icon-button matTooltip=\"Show Column\" class=\"show-hide\">\r\n <mat-icon>indeterminate_check_box</mat-icon>\r\n </button>\r\n }\r\n \r\n <p class=\"label\">\r\n {{col.displayName || (col.key | spaceCase) }}\r\n </p>\r\n\r\n </div>\r\n </button>\r\n }\r\n\r\n </div>\r\n </mat-menu>\r\n}", styles: [".show-hide{margin-right:15px;height:24px;width:24px;padding:4px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.mdc-list-item__primary-text{display:inline-block;width:100%}\n"] }]
|
|
46
|
-
}] });
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuLWNvbC1kaXNwbGF5ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy9nZW4tY29sLWRpc3BsYXllci9nZW4tY29sLWRpc3BsYXllci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2dlbi1jb2wtZGlzcGxheWVyL2dlbi1jb2wtZGlzcGxheWVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFjLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7QUFhN0UsTUFBTSxPQUFPLHdCQUF3QjtJQUMzQixVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLEdBQUcsQ0FBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkYsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHO1FBQ1gsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXO1FBQzNCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7S0FDM0QsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVMLEtBQUssQ0FBQyxXQUF5QjtRQUM3QixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFJLENBQUMsS0FBNEI7UUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtJQUNyRyxDQUFDO0lBQ0QsS0FBSyxDQUFDLFdBQXlCO1FBQzdCLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksQ0FBQyxXQUF5QjtRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRyxDQUFDO3VHQXRCVSx3QkFBd0I7MkZBQXhCLHdCQUF3Qiw0RUN0QnJDLDhnRUFzREMseXVCRHBDYyxnQkFBZ0IsNFRBQUUsYUFBYSxtTEFBRSxlQUFlLDJJQUFFLGFBQWEsOHZCQUFFLHdCQUF3Qiw4REFDcEcsY0FBYyx3L0JBQUUsYUFBYTs7MkZBR3BCLHdCQUF3QjtrQkFYcEMsU0FBUzsrQkFDRSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLHdCQUF3Qjt3QkFDcEcsY0FBYyxFQUFFLGFBQWE7cUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgaW5qZWN0LCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaXNwbGF5Q29sIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9kaXNwbGF5LWNvbCc7XHJcbmltcG9ydCB7IFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLXN0b3JlJztcclxuaW1wb3J0IHtDZGtEcmFnRHJvcCwgRHJhZ0Ryb3BNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBTcGFjZUNhc2VQaXBlLCBTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0Yi1jb2wtZGlzcGxheWVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuLWNvbC1kaXNwbGF5ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2dlbi1jb2wtZGlzcGxheWVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2ggLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQXN5bmNQaXBlLCBNYXRUb29sdGlwTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdE1lbnVNb2R1bGUsIFN0b3BQcm9wYWdhdGlvbkRpcmVjdGl2ZSxcclxuICAgIERyYWdEcm9wTW9kdWxlLCBTcGFjZUNhc2VQaXBlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuQ29sRGlzcGxheWVyQ29tcG9uZW50IHtcclxuICBwcml2YXRlIHRhYmxlU3RhdGUgPSBpbmplY3QoVGFibGVTdG9yZSk7XHJcbiAgJGNvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnRhYmxlU3RhdGUuJG9yZGVyZWRDb2RlVmlzaWJsZU1ldGFEYXRhcygpLm1hcCggbWQgPT4gKHtcclxuICAgIGtleTogbWQua2V5LFxyXG4gICAgZGlzcGxheU5hbWU6IG1kLmRpc3BsYXlOYW1lLFxyXG4gICAgaXNWaXNpYmxlOiAhdGhpcy50YWJsZVN0YXRlLiRoaWRkZW5LZXlzKCkuaW5jbHVkZXMobWQua2V5KVxyXG4gIH0pKSk7XHJcblxyXG4gIHJlc2V0KGRpc3BsYXlDb2xzOiBEaXNwbGF5Q29sW10pIHtcclxuICAgIGRpc3BsYXlDb2xzLmZvckVhY2goYyA9PiBjLmlzVmlzaWJsZSA9IHRydWUpO1xyXG4gICAgdGhpcy5lbWl0KGRpc3BsYXlDb2xzKTtcclxuICB9XHJcbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XHJcbiAgICB0aGlzLnRhYmxlU3RhdGUuc2V0VXNlckRlZmluZWRPcmRlcih7IG5ld09yZGVyOiBldmVudC5jdXJyZW50SW5kZXgsIG9sZE9yZGVyOmV2ZW50LnByZXZpb3VzSW5kZXggfSlcclxuICB9XHJcbiAgdW5zZXQoZGlzcGxheUNvbHM6IERpc3BsYXlDb2xbXSkge1xyXG4gICAgZGlzcGxheUNvbHMuZm9yRWFjaChjID0+IGMuaXNWaXNpYmxlID0gZmFsc2UpO1xyXG4gICAgdGhpcy5lbWl0KGRpc3BsYXlDb2xzKTtcclxuICB9XHJcblxyXG4gIGVtaXQoZGlzcGxheUNvbHM6IERpc3BsYXlDb2xbXSkge1xyXG4gICAgdGhpcy50YWJsZVN0YXRlLnNldEhpZGRlbkNvbHVtbnMoZGlzcGxheUNvbHMubWFwKCBjID0+ICh7a2V5OiBjLmtleSwgdmlzaWJsZTogYy5pc1Zpc2libGV9KSkpO1xyXG4gIH1cclxufVxyXG4iLCJAaWYoJGNvbHVtbnMoKTsgYXMgZGlzcGxheUNvbHMpe1xyXG4gIDxzcGFuIG1hdFRvb2x0aXA9XCJTaG93L2hpZGUgY29sdW1uc1wiPlxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIj5cclxuICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPnZpc2liaWxpdHlfb2ZmPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvc3Bhbj5cclxuICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJteS1tYXQtbWVudVwiPlxyXG5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbT5cclxuICAgICAgPHNwYW4gbWF0VG9vbHRpcD1cIkNsb3NlXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImZpbHRlci1idXR0b25cIiBtYXQtaWNvbi1idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gc3RvcC1wcm9wYWdhdGlvbj5cclxuICAgICAgPHNwYW4gbWF0VG9vbHRpcD1cIlNob3cgYWxsIGNvbHVtbnNcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVzZXQoZGlzcGxheUNvbHMpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+ZG9uZV9hbGw8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L3NwYW4+XHJcblxyXG4gICAgICA8c3BhbiBtYXRUb29sdGlwPVwiSGlkZSBhbGwgY29sdW1uc1wiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ1bnNldChkaXNwbGF5Q29scylcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8ZGl2IGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCIgc3RvcC1wcm9wYWdhdGlvbiBbY2RrRHJvcExpc3RMb2NrQXhpc109XCIneSdcIj5cclxuICAgICAgQGZvciAoY29sIG9mIGRpc3BsYXlDb2xzOyB0cmFjayBjb2wua2V5KSB7XHJcbiAgICAgICAgPGJ1dHRvbiBbY2xhc3MuaXNIaWRkZW5dPVwiIWNvbC5pc1Zpc2libGVcIiBzdG9wLXByb3BhZ2F0aW9uIG1hdC1tZW51LWl0ZW0gY2RrRHJhZyBbY2RrRHJhZ0RhdGFdPVwiY29sXCI+XHJcbiAgICAgICAgPGRpdiAoY2xpY2spPVwiY29sLmlzVmlzaWJsZSA9ICFjb2wuaXNWaXNpYmxlOyBlbWl0KGRpc3BsYXlDb2xzKVwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgIEBpZihjb2wuaXNWaXNpYmxlKXtcclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkhpZGUgQ29sdW1uXCIgY2xhc3M9XCJzaG93LWhpZGVcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+Y2hlY2tfYm94PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIlNob3cgQ29sdW1uXCIgY2xhc3M9XCJzaG93LWhpZGVcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+aW5kZXRlcm1pbmF0ZV9jaGVja19ib3g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJsYWJlbFwiPlxyXG4gICAgICAgICAgICB7e2NvbC5kaXNwbGF5TmFtZSB8fCAoY29sLmtleSB8IHNwYWNlQ2FzZSkgfX1cclxuICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICB9XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtbWVudT5cclxufSJdfQ==
|
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
import { Component, ViewChild, Input, ChangeDetectionStrategy, Output, ViewContainerRef, Injector, EventEmitter, computed, inject, input, viewChild, effect, untracked, signal } from '@angular/core';
|
|
2
|
-
import { MatFooterRowDef, MatHeaderRowDef, MatTable, MatTableModule } from '@angular/material/table';
|
|
3
|
-
import { SelectionModel } from '@angular/cdk/collections';
|
|
4
|
-
import { TableStore } from '../../classes/table-store';
|
|
5
|
-
import { map } from 'rxjs/operators';
|
|
6
|
-
import { ColumnBuilderComponent } from '../column-builder/column-builder.component';
|
|
7
|
-
import { previousAndCurrent } from '../../../rxjs/rxjs-operators';
|
|
8
|
-
import { CdkDropList, DragDropModule } from '@angular/cdk/drag-drop';
|
|
9
|
-
import { FunctionPipe } from '../../../utilities';
|
|
10
|
-
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
11
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
12
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
13
|
-
import { AsyncPipe, NgTemplateOutlet } from '@angular/common';
|
|
14
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
15
|
-
import { TransformCreator } from '../../services/transform-creator';
|
|
16
|
-
import { initIndexSymbol } from '../table-container/table-container.helpers/sort-state.helpers';
|
|
17
|
-
import { toObservable } from '@angular/core/rxjs-interop';
|
|
18
|
-
import { DataStore } from '../../classes/data-store';
|
|
19
|
-
import * as i0 from "@angular/core";
|
|
20
|
-
import * as i1 from "@angular/material/table";
|
|
21
|
-
import * as i2 from "@angular/cdk/drag-drop";
|
|
22
|
-
import * as i3 from "@angular/material/checkbox";
|
|
23
|
-
import * as i4 from "@angular/material/button";
|
|
24
|
-
import * as i5 from "@angular/material/icon";
|
|
25
|
-
export class GenericTableComponent {
|
|
26
|
-
state = inject(TableStore);
|
|
27
|
-
dataStore = inject(DataStore);
|
|
28
|
-
viewContainer = inject(ViewContainerRef);
|
|
29
|
-
transformCreator = inject(TransformCreator);
|
|
30
|
-
smallFooter = 10;
|
|
31
|
-
$headerRow = viewChild(MatHeaderRowDef);
|
|
32
|
-
$footerRow = viewChild(MatFooterRowDef);
|
|
33
|
-
$table = viewChild(MatTable);
|
|
34
|
-
drop(event) {
|
|
35
|
-
this.state.setUserDefinedOrder({ newOrder: event.currentIndex, oldOrder: event.previousIndex });
|
|
36
|
-
}
|
|
37
|
-
_trackBy;
|
|
38
|
-
set trackBy(trackBy) {
|
|
39
|
-
if (trackBy) {
|
|
40
|
-
this._trackBy = trackBy;
|
|
41
|
-
this.trackByFunction = (index, item) => item[trackBy];
|
|
42
|
-
}
|
|
43
|
-
this.setUpSelections(trackBy);
|
|
44
|
-
}
|
|
45
|
-
get trackBy() { return this._trackBy; }
|
|
46
|
-
$displayData = input.required({ alias: 'displayData' });
|
|
47
|
-
$displayDataLength = computed(() => this.$displayData()?.length || 0);
|
|
48
|
-
$hasFooterMeta = computed(() => this.state.$metaDataArray().some(md => !!md.additional?.footer));
|
|
49
|
-
$data = input.required({ alias: 'data' });
|
|
50
|
-
data$ = toObservable(this.$data);
|
|
51
|
-
$rows = input([], { alias: 'rows' });
|
|
52
|
-
$columnInfos = input.required({ alias: 'columnInfos' });
|
|
53
|
-
$hasCustomFooter = computed(() => this.$columnInfos()?.some(ci => !!ci.customCell?.columnDef?.footerCell));
|
|
54
|
-
dropList;
|
|
55
|
-
$footerRowStyle = computed(() => {
|
|
56
|
-
const hasData = !!this.$displayDataLength();
|
|
57
|
-
const metaFooter = this.$hasFooterMeta();
|
|
58
|
-
const customFooter = this.$hasCustomFooter();
|
|
59
|
-
const hasSelectionColumn = this.state.props().selectionColumn;
|
|
60
|
-
return customFooter || (hasData && (metaFooter || hasSelectionColumn)) ? 'regular-footer' : hasData ? 'no-footer' : 'small-footer';
|
|
61
|
-
});
|
|
62
|
-
$showFooterRow = computed(() => this.$footerRowStyle() !== 'no-footer');
|
|
63
|
-
_injector = inject(Injector);
|
|
64
|
-
injector = Injector.create({
|
|
65
|
-
providers: [
|
|
66
|
-
{ provide: MatTable, useFactory: () => this.$table() },
|
|
67
|
-
{ provide: CdkDropList, useFactory: () => this.dropList },
|
|
68
|
-
],
|
|
69
|
-
parent: this._injector
|
|
70
|
-
});
|
|
71
|
-
$hasSelectColumn = computed(() => this.state.selectSignal(state => state.props.selectionColumn)());
|
|
72
|
-
$hasIndexColumn = computed(() => this.state.selectSignal(state => state.props.indexColumn)());
|
|
73
|
-
$columns = signal({});
|
|
74
|
-
$showHeader = computed(() => !this.state.tableSettings().hideColumnHeader);
|
|
75
|
-
offset$ = this.dataStore.select(s => s.virtualScrollOffset);
|
|
76
|
-
constructor() {
|
|
77
|
-
this.setUpSelections();
|
|
78
|
-
effect(() => {
|
|
79
|
-
const columnInfos = this.$columnInfos() || [];
|
|
80
|
-
const table = this.$table();
|
|
81
|
-
if (!table)
|
|
82
|
-
return;
|
|
83
|
-
untracked(() => {
|
|
84
|
-
Object.entries(this.$columns()).forEach(([key, value]) => {
|
|
85
|
-
const columnInfo = columnInfos.find(ci => ci.metaData.key === key);
|
|
86
|
-
if (!columnInfo || columnInfo.customCell !== value.customCell) {
|
|
87
|
-
delete this.$columns()[key];
|
|
88
|
-
table?.removeColumnDef(value.columnDef);
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
columnInfos.forEach(ci => this.buildColumn(ci));
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
effect(() => {
|
|
95
|
-
const table = this.$table();
|
|
96
|
-
const rows = this.$rows();
|
|
97
|
-
const keys = this.$keys();
|
|
98
|
-
if (!table)
|
|
99
|
-
return;
|
|
100
|
-
untracked(() => {
|
|
101
|
-
rows.forEach(row => {
|
|
102
|
-
table.removeRowDef(row);
|
|
103
|
-
row.columns = keys;
|
|
104
|
-
table.addRowDef(row);
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
effect(() => {
|
|
109
|
-
const headerRow = this.$headerRow();
|
|
110
|
-
const showHeader = this.$showHeader();
|
|
111
|
-
const table = this.$table();
|
|
112
|
-
untracked(() => {
|
|
113
|
-
if (headerRow && showHeader && table)
|
|
114
|
-
table.addHeaderRowDef(headerRow);
|
|
115
|
-
else if (headerRow && table)
|
|
116
|
-
table.removeHeaderRowDef(headerRow);
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
effect(() => {
|
|
120
|
-
const footerRow = this.$footerRow();
|
|
121
|
-
const showFooter = this.$showFooterRow();
|
|
122
|
-
const table = this.$table();
|
|
123
|
-
untracked(() => {
|
|
124
|
-
if (footerRow && showFooter && table)
|
|
125
|
-
table.addFooterRowDef(footerRow);
|
|
126
|
-
else if (footerRow && table)
|
|
127
|
-
table.removeFooterRowDef(footerRow);
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
defaultTrackBy = (index, item) => item[initIndexSymbol];
|
|
132
|
-
trackByFunction = this.defaultTrackBy;
|
|
133
|
-
$keys = computed(() => {
|
|
134
|
-
const displayed = this.state.$orderedVisibleColumns();
|
|
135
|
-
const built = this.$columns();
|
|
136
|
-
const keys = displayed.filter(d => !!built[d]);
|
|
137
|
-
if (this.$hasSelectColumn()) {
|
|
138
|
-
keys.unshift('select');
|
|
139
|
-
}
|
|
140
|
-
if (this.$hasIndexColumn()) {
|
|
141
|
-
keys.unshift('index');
|
|
142
|
-
}
|
|
143
|
-
return keys;
|
|
144
|
-
});
|
|
145
|
-
keys$ = toObservable(this.$keys);
|
|
146
|
-
ngOnInit() {
|
|
147
|
-
this.state.on(this.selectableData$, (data) => {
|
|
148
|
-
if (this.selection.selected.length) {
|
|
149
|
-
const trackByFunction = this.trackBy ? (s) => data.every(d => d[this.trackBy] !== s[this.trackBy]) : s => !data.includes(s);
|
|
150
|
-
const removed = this.selection.selected.filter(trackByFunction);
|
|
151
|
-
this.selection.deselect(...removed);
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
$usePaginator = computed(() => this.state.tableSettings().usePaginator);
|
|
156
|
-
$useVirtualScroll = computed(() => this.state.$viewType().includes('virtual'));
|
|
157
|
-
$offsetIndex = computed(() => {
|
|
158
|
-
const virtualStart = this.dataStore.selectSignal(d => d.virtualEnds.start)();
|
|
159
|
-
const pageSize = this.state.$pageSize();
|
|
160
|
-
const currentPage = this.state.$currentPage();
|
|
161
|
-
if (this.$useVirtualScroll()) {
|
|
162
|
-
return virtualStart;
|
|
163
|
-
}
|
|
164
|
-
if (this.$usePaginator()) {
|
|
165
|
-
return pageSize * currentPage;
|
|
166
|
-
}
|
|
167
|
-
return 0;
|
|
168
|
-
});
|
|
169
|
-
isGroupHeader(_, row) {
|
|
170
|
-
return row.isGroupHeader;
|
|
171
|
-
}
|
|
172
|
-
setExpanded(key, groupKey, isExpanded) {
|
|
173
|
-
this.state.updateExpandedGroups({ key, isExpanded, groupKey });
|
|
174
|
-
}
|
|
175
|
-
buildColumn(column) {
|
|
176
|
-
const alreadyBuiltColumn = this.$columns()[column.metaData.key];
|
|
177
|
-
if (alreadyBuiltColumn) {
|
|
178
|
-
alreadyBuiltColumn.metaData = column.metaData;
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
const component = this.viewContainer.createComponent(ColumnBuilderComponent, {
|
|
182
|
-
index: 0,
|
|
183
|
-
injector: this.injector
|
|
184
|
-
});
|
|
185
|
-
component.instance.customCell = column.customCell;
|
|
186
|
-
component.instance.metaData = column.metaData;
|
|
187
|
-
component.instance.data$ = this.data$;
|
|
188
|
-
component.instance.whenViewInited(() => {
|
|
189
|
-
this.$columns.update(columnsDict => ({
|
|
190
|
-
...columnsDict,
|
|
191
|
-
[column.metaData.key]: component.instance
|
|
192
|
-
}));
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
selection;
|
|
197
|
-
selection$ = new EventEmitter();
|
|
198
|
-
masterToggleChecked$ = this.selection$.pipe(map(() => this.selection.hasValue() && this.isAllSelected()));
|
|
199
|
-
masterToggleIndeterminate$ = this.selection$.pipe(map(() => this.selection.hasValue() && !this.isAllSelected()));
|
|
200
|
-
setUpSelections(trackBy) {
|
|
201
|
-
this.selection = trackBy ? new SelectionModel(true, [], true, (a, b) => a[trackBy] === b[trackBy]) : new SelectionModel(true, []);
|
|
202
|
-
this.state.on(this.selection.changed, c => this.selection$.emit(c));
|
|
203
|
-
}
|
|
204
|
-
$selectableData = computed(() => {
|
|
205
|
-
if (this.state.$viewType() === 'virtual paginator' || this.state.$viewType() === 'paginator') {
|
|
206
|
-
const previousPageRecords = this.state.$currentPage() * this.state.$pageSize();
|
|
207
|
-
return this.$data().slice(previousPageRecords, previousPageRecords + this.state.$pageSize());
|
|
208
|
-
}
|
|
209
|
-
else if (this.state.$viewType() === 'all' || this.state.$viewType() === 'virtual all') {
|
|
210
|
-
return this.$data();
|
|
211
|
-
}
|
|
212
|
-
return [];
|
|
213
|
-
});
|
|
214
|
-
selectableData$ = toObservable(this.$selectableData);
|
|
215
|
-
isAllSelected() {
|
|
216
|
-
const numSelected = this.selection.selected.length;
|
|
217
|
-
const numRows = this.$selectableData()?.length || 0;
|
|
218
|
-
return numSelected === numRows;
|
|
219
|
-
}
|
|
220
|
-
/** Selects all rows if they are not all selected; otherwise clear selection. */
|
|
221
|
-
masterToggle() {
|
|
222
|
-
if (this.isAllSelected()) {
|
|
223
|
-
this.selection.clear();
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
this.selection.select(...this.$selectableData());
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
tableWidth = this.state.getUserDefinedTableSize$.pipe(previousAndCurrent(0), map(([previousUserDefinedWidth, currentUserDefinedWidth]) => {
|
|
230
|
-
if (currentUserDefinedWidth) {
|
|
231
|
-
return ({ width: `${currentUserDefinedWidth}px`, minWidth: 'fit-content' });
|
|
232
|
-
}
|
|
233
|
-
if (wasReset()) {
|
|
234
|
-
return ({ width: 'initial' });
|
|
235
|
-
}
|
|
236
|
-
return ({});
|
|
237
|
-
function wasReset() {
|
|
238
|
-
return (previousUserDefinedWidth ?? 0) >= 0 && currentUserDefinedWidth == null;
|
|
239
|
-
}
|
|
240
|
-
}));
|
|
241
|
-
getTransform = (key, val) => {
|
|
242
|
-
if (val == undefined || val === 'null')
|
|
243
|
-
return '';
|
|
244
|
-
try {
|
|
245
|
-
return this.transformCreator.createTransformer(this.$columns[key].metaData, true)({ [key]: val });
|
|
246
|
-
}
|
|
247
|
-
catch (error) {
|
|
248
|
-
return val;
|
|
249
|
-
}
|
|
250
|
-
};
|
|
251
|
-
$rowHeight = this.state.selectSignal(s => {
|
|
252
|
-
if (this.state.$isVirtual() && s.notPersistedTableSettings.useVirtualScroll?.enforceRowHeight) {
|
|
253
|
-
const height = s.notPersistedTableSettings.useVirtualScroll.rowHeight;
|
|
254
|
-
return height + 'px';
|
|
255
|
-
}
|
|
256
|
-
if (typeof s.notPersistedTableSettings.rowHeight === 'number') {
|
|
257
|
-
return s.notPersistedTableSettings.rowHeight + 'px';
|
|
258
|
-
}
|
|
259
|
-
return s.notPersistedTableSettings.rowHeight;
|
|
260
|
-
});
|
|
261
|
-
$headerHeight = this.state.selectSignal(s => {
|
|
262
|
-
if (this.state.$isVirtual() && s.notPersistedTableSettings.useVirtualScroll?.enforceHeaderHeight) {
|
|
263
|
-
const height = s.notPersistedTableSettings.useVirtualScroll.headerHeight;
|
|
264
|
-
return height + 'px';
|
|
265
|
-
}
|
|
266
|
-
if (typeof s.notPersistedTableSettings.headerHeight === 'number') {
|
|
267
|
-
return s.notPersistedTableSettings.headerHeight + 'px';
|
|
268
|
-
}
|
|
269
|
-
return s.notPersistedTableSettings.headerHeight;
|
|
270
|
-
});
|
|
271
|
-
$groupHeaderHeight = this.state.selectSignal(s => {
|
|
272
|
-
if (s.notPersistedTableSettings.groupHeaderHeight) {
|
|
273
|
-
return s.notPersistedTableSettings.groupHeaderHeight + 'px';
|
|
274
|
-
}
|
|
275
|
-
return this.$rowHeight();
|
|
276
|
-
});
|
|
277
|
-
$footerHeight = this.state.selectSignal(s => {
|
|
278
|
-
const footerStyle = this.$footerRowStyle();
|
|
279
|
-
switch (footerStyle) {
|
|
280
|
-
case 'regular-footer':
|
|
281
|
-
return this.$rowHeight();
|
|
282
|
-
case 'small-footer':
|
|
283
|
-
return `${this.smallFooter}px`;
|
|
284
|
-
default:
|
|
285
|
-
return '0px';
|
|
286
|
-
}
|
|
287
|
-
});
|
|
288
|
-
$stickyFooter = computed(() => this.state.props().stickyFooter || this.state.$isVirtual());
|
|
289
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: GenericTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
290
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: GenericTableComponent, isStandalone: true, selector: "tb-generic-table", inputs: { trackBy: { classPropertyName: "trackBy", publicName: "trackBy", isSignal: false, isRequired: false, transformFunction: null }, $displayData: { classPropertyName: "$displayData", publicName: "displayData", isSignal: true, isRequired: true, transformFunction: null }, $data: { classPropertyName: "$data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, $rows: { classPropertyName: "$rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, $columnInfos: { classPropertyName: "$columnInfos", publicName: "columnInfos", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { selection$: "selection$" }, viewQueries: [{ propertyName: "$headerRow", first: true, predicate: MatHeaderRowDef, descendants: true, isSignal: true }, { propertyName: "$footerRow", first: true, predicate: MatFooterRowDef, descendants: true, isSignal: true }, { propertyName: "$table", first: true, predicate: MatTable, descendants: true, isSignal: true }, { propertyName: "dropList", first: true, predicate: CdkDropList, descendants: true, static: true }], ngImport: i0, template: "<mat-table\r\n cdkDropList\r\n cdkDropListLockAxis='x'\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n class=\"table-drag-list\"\r\n #table\r\n [dataSource]=\"state.props().dataSource!\"\r\n [trackBy]=\"trackByFunction\"\r\n [style]=\"tableWidth | async \"\r\n>\r\n\r\n <!-- select column -->\r\n <ng-container matColumnDef=\"select\">\r\n\r\n <mat-header-cell *matHeaderCellDef class=\"select-column\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"!!(masterToggleChecked$ | async)\"\r\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n\r\n <mat-cell *matCellDef=\"let row\" class=\"select-column\">\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\"/>\r\n </mat-cell>\r\n\r\n <mat-footer-cell *matFooterCellDef class=\"select-column\">\r\n {{ selection.selected.length }}\r\n </mat-footer-cell>\r\n </ng-container>\r\n\r\n\r\n <!-- index column -->\r\n <ng-container matColumnDef=\"index\">\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" class=\"index-column\">#\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let i = index;\" class=\"index-column\">\r\n {{ 1 + i + $offsetIndex() }}\r\n </mat-cell>\r\n <mat-footer-cell *matFooterCellDef class=\"index-column\"></mat-footer-cell>\r\n </ng-container>\r\n\r\n <!-- Grouping -->\r\n <ng-container matColumnDef=\"groupHeader\">\r\n <mat-cell *matCellDef=\"let row\">\r\n @let expanded = (state.getIsExpanded | func : row.key : row.groupName );\r\n <div [style.paddingLeft]=\"row.padding + 'px !important'\">\r\n <button mat-icon-button (click)=\"setExpanded(row.key, row.groupName, !expanded());\">\r\n @if (!expanded()) {\r\n <mat-icon>chevron_right</mat-icon>\r\n } @else {\r\n <mat-icon>expand_more</mat-icon>\r\n }\r\n </button>\r\n {{ getTransform | func : row.key : row.groupHeaderDisplay }} ({{ row.length }})\r\n </div>\r\n <div style=\"flex-grow: 1\">\r\n <ng-container *ngTemplateOutlet=\"state.props().groupHeaderTemplate!; context: { element: row }\"></ng-container>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-row [style.height]=\"$rowHeight()\" [style.min-height]=\"$rowHeight()\"\r\n *matRowDef=\"let row; columns: $keys(); let i = index\"/>\r\n <mat-row [style.height]=\"state.props().groupHeaderHeight ? state.props().groupHeaderHeight + 'px' : $groupHeaderHeight()\"\r\n [style.min-height]=\"state.props().groupHeaderHeight ? state.props().groupHeaderHeight + 'px' : $groupHeaderHeight()\"\r\n *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"/>\r\n</mat-table>\r\n\r\n<mat-header-row [style.height]=\"$headerHeight()\" [style.min-height]=\"$headerHeight()\"\r\n *matHeaderRowDef=\"$keys(); sticky: state.props().isSticky\" [style.top.px]=\"((offset$ | async)! * -1)\"/>\r\n<mat-footer-row [style.height]=\"$footerHeight()\" [style.min-height]=\"$footerHeight()\"\r\n *matFooterRowDef=\"$keys(); sticky: $stickyFooter() \"\r\n [style.bottom.px]=\"$stickyFooter() ? (offset$ | async) : undefined\"/>\r\n", styles: [":host{--mat-paginator-container-size: initial}.select-column{min-width:var(--tb-min-select-column-width, 42px)}.index-column{min-width:var(--tb-min-index-column-width, 42px)}.mat-mdc-row:nth-child(odd){background-color:var(--tb-odd-row-background-color, #cdeefe)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:var(--tb-cell-padding, 0 0 0 .2rem);line-height:var(--tb-cell-line-height, normal)}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: FunctionPipe, name: "func" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
291
|
-
}
|
|
292
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: GenericTableComponent, decorators: [{
|
|
293
|
-
type: Component,
|
|
294
|
-
args: [{ selector: 'tb-generic-table', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
295
|
-
MatTableModule, DragDropModule, MatCheckboxModule, MatButtonModule, MatIconModule, NgTemplateOutlet,
|
|
296
|
-
MatTooltipModule, AsyncPipe, FunctionPipe,
|
|
297
|
-
], template: "<mat-table\r\n cdkDropList\r\n cdkDropListLockAxis='x'\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n class=\"table-drag-list\"\r\n #table\r\n [dataSource]=\"state.props().dataSource!\"\r\n [trackBy]=\"trackByFunction\"\r\n [style]=\"tableWidth | async \"\r\n>\r\n\r\n <!-- select column -->\r\n <ng-container matColumnDef=\"select\">\r\n\r\n <mat-header-cell *matHeaderCellDef class=\"select-column\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"!!(masterToggleChecked$ | async)\"\r\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n\r\n <mat-cell *matCellDef=\"let row\" class=\"select-column\">\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\"/>\r\n </mat-cell>\r\n\r\n <mat-footer-cell *matFooterCellDef class=\"select-column\">\r\n {{ selection.selected.length }}\r\n </mat-footer-cell>\r\n </ng-container>\r\n\r\n\r\n <!-- index column -->\r\n <ng-container matColumnDef=\"index\">\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" class=\"index-column\">#\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let i = index;\" class=\"index-column\">\r\n {{ 1 + i + $offsetIndex() }}\r\n </mat-cell>\r\n <mat-footer-cell *matFooterCellDef class=\"index-column\"></mat-footer-cell>\r\n </ng-container>\r\n\r\n <!-- Grouping -->\r\n <ng-container matColumnDef=\"groupHeader\">\r\n <mat-cell *matCellDef=\"let row\">\r\n @let expanded = (state.getIsExpanded | func : row.key : row.groupName );\r\n <div [style.paddingLeft]=\"row.padding + 'px !important'\">\r\n <button mat-icon-button (click)=\"setExpanded(row.key, row.groupName, !expanded());\">\r\n @if (!expanded()) {\r\n <mat-icon>chevron_right</mat-icon>\r\n } @else {\r\n <mat-icon>expand_more</mat-icon>\r\n }\r\n </button>\r\n {{ getTransform | func : row.key : row.groupHeaderDisplay }} ({{ row.length }})\r\n </div>\r\n <div style=\"flex-grow: 1\">\r\n <ng-container *ngTemplateOutlet=\"state.props().groupHeaderTemplate!; context: { element: row }\"></ng-container>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-row [style.height]=\"$rowHeight()\" [style.min-height]=\"$rowHeight()\"\r\n *matRowDef=\"let row; columns: $keys(); let i = index\"/>\r\n <mat-row [style.height]=\"state.props().groupHeaderHeight ? state.props().groupHeaderHeight + 'px' : $groupHeaderHeight()\"\r\n [style.min-height]=\"state.props().groupHeaderHeight ? state.props().groupHeaderHeight + 'px' : $groupHeaderHeight()\"\r\n *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"/>\r\n</mat-table>\r\n\r\n<mat-header-row [style.height]=\"$headerHeight()\" [style.min-height]=\"$headerHeight()\"\r\n *matHeaderRowDef=\"$keys(); sticky: state.props().isSticky\" [style.top.px]=\"((offset$ | async)! * -1)\"/>\r\n<mat-footer-row [style.height]=\"$footerHeight()\" [style.min-height]=\"$footerHeight()\"\r\n *matFooterRowDef=\"$keys(); sticky: $stickyFooter() \"\r\n [style.bottom.px]=\"$stickyFooter() ? (offset$ | async) : undefined\"/>\r\n", styles: [":host{--mat-paginator-container-size: initial}.select-column{min-width:var(--tb-min-select-column-width, 42px)}.index-column{min-width:var(--tb-min-index-column-width, 42px)}.mat-mdc-row:nth-child(odd){background-color:var(--tb-odd-row-background-color, #cdeefe)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:var(--tb-cell-padding, 0 0 0 .2rem);line-height:var(--tb-cell-line-height, normal)}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n"] }]
|
|
298
|
-
}], ctorParameters: () => [], propDecorators: { trackBy: [{
|
|
299
|
-
type: Input
|
|
300
|
-
}], dropList: [{
|
|
301
|
-
type: ViewChild,
|
|
302
|
-
args: [CdkDropList, { static: true }]
|
|
303
|
-
}], selection$: [{
|
|
304
|
-
type: Output
|
|
305
|
-
}] } });
|
|
306
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFvQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4TyxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBYSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFaEgsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBR3BGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWxFLE9BQU8sRUFBZSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9C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Z0JBQWdCO3dCQUNuRyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsWUFBWTtxQkFDMUM7d0RBaUJZLE9BQU87c0JBQW5CLEtBQUs7Z0JBZ0JvQyxRQUFRO3NCQUFqRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBNko5QixVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIElucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NvbnRhaW5lclJlZiwgSW5qZWN0b3IsIEV2ZW50RW1pdHRlciwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIHZpZXdDaGlsZCwgZWZmZWN0LCB1bnRyYWNrZWQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRGb290ZXJSb3dEZWYsIE1hdEhlYWRlclJvd0RlZiwgTWF0Um93RGVmLCBNYXRUYWJsZSwgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2VsZWN0aW9uQ2hhbmdlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLXN0b3JlJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb2x1bW5CdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1uLWJ1aWxkZXIvY29sdW1uLWJ1aWxkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGljdGlvbmFyeSc7XHJcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZic7XHJcbmltcG9ydCB7IHByZXZpb3VzQW5kQ3VycmVudCB9IGZyb20gJy4uLy4uLy4uL3J4anMvcnhqcy1vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb2x1bW5JbmZvIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9Db2x1bW5JbmZvJztcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIENka0Ryb3BMaXN0LCBEcmFnRHJvcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBGdW5jdGlvblBpcGUgfSBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IFRyYW5zZm9ybUNyZWF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2Zvcm0tY3JlYXRvcic7XHJcbmltcG9ydCB7IGluaXRJbmRleFN5bWJvbCB9IGZyb20gJy4uL3RhYmxlLWNvbnRhaW5lci90YWJsZS1jb250YWluZXIuaGVscGVycy9zb3J0LXN0YXRlLmhlbHBlcnMnO1xyXG5pbXBvcnQgeyBWaXJ0dWFsU2Nyb2xsT3B0aW9ucyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdGFibGUtYnVpbGRlci1nZW5lcmFsLXNldHRpbmdzJztcclxuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBEYXRhU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2RhdGEtc3RvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0Yi1nZW5lcmljLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTWF0VGFibGVNb2R1bGUsIERyYWdEcm9wTW9kdWxlLCBNYXRDaGVja2JveE1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBOZ1RlbXBsYXRlT3V0bGV0LFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSwgQXN5bmNQaXBlLCBGdW5jdGlvblBpcGUsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdlbmVyaWNUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHJvdGVjdGVkIHN0YXRlID0gaW5qZWN0KFRhYmxlU3RvcmUpO1xyXG4gIHByaXZhdGUgZGF0YVN0b3JlID0gaW5qZWN0KERhdGFTdG9yZSk7XHJcbiAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xyXG4gIHByaXZhdGUgdHJhbnNmb3JtQ3JlYXRvciA9IGluamVjdChUcmFuc2Zvcm1DcmVhdG9yKTtcclxuICBzbWFsbEZvb3RlciA9IDEwXHJcblxyXG4gICRoZWFkZXJSb3cgPSB2aWV3Q2hpbGQoTWF0SGVhZGVyUm93RGVmKTtcclxuICAkZm9vdGVyUm93ID0gdmlld0NoaWxkKE1hdEZvb3RlclJvd0RlZik7XHJcbiAgJHRhYmxlID0gdmlld0NoaWxkKE1hdFRhYmxlKTtcclxuXHJcbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XHJcbiAgICB0aGlzLnN0YXRlLnNldFVzZXJEZWZpbmVkT3JkZXIoeyBuZXdPcmRlcjpldmVudC5jdXJyZW50SW5kZXgsIG9sZE9yZGVyOmV2ZW50LnByZXZpb3VzSW5kZXggfSlcclxuICB9XHJcbiAgX3RyYWNrQnk/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2V0IHRyYWNrQnkodHJhY2tCeTogc3RyaW5nKXtcclxuICAgIGlmKHRyYWNrQnkpe1xyXG4gICAgICB0aGlzLl90cmFja0J5ID0gdHJhY2tCeTtcclxuICAgICAgdGhpcy50cmFja0J5RnVuY3Rpb24gPSAoaW5kZXg6bnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW1bdHJhY2tCeV07XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFVwU2VsZWN0aW9ucyh0cmFja0J5KTtcclxuICB9XHJcbiAgZ2V0IHRyYWNrQnkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX3RyYWNrQnkgfVxyXG4gICRkaXNwbGF5RGF0YSA9IGlucHV0LnJlcXVpcmVkPGFueVtdPih7IGFsaWFzOiAnZGlzcGxheURhdGEnIH0pO1xyXG4gICRkaXNwbGF5RGF0YUxlbmd0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuJGRpc3BsYXlEYXRhKCk/Lmxlbmd0aCB8fCAwKTtcclxuICAkaGFzRm9vdGVyTWV0YSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUuJG1ldGFEYXRhQXJyYXkoKS5zb21lKG1kID0+ICEhbWQuYWRkaXRpb25hbD8uZm9vdGVyKSlcclxuICAkZGF0YSA9IGlucHV0LnJlcXVpcmVkPGFueVtdPih7IGFsaWFzOiAnZGF0YScgfSlcclxuICBkYXRhJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLiRkYXRhKTtcclxuICAkcm93cyA9IGlucHV0PE1hdFJvd0RlZjxhbnk+W10+KFtdLCB7IGFsaWFzOiAncm93cycgfSk7XHJcbiAgJGNvbHVtbkluZm9zID0gaW5wdXQucmVxdWlyZWQ8Q29sdW1uSW5mb1tdPih7IGFsaWFzOiAnY29sdW1uSW5mb3MnIH0pO1xyXG4gICRoYXNDdXN0b21Gb290ZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLiRjb2x1bW5JbmZvcygpPy5zb21lKGNpID0+ICEhY2kuY3VzdG9tQ2VsbD8uY29sdW1uRGVmPy5mb290ZXJDZWxsKSlcclxuICBAVmlld0NoaWxkKENka0Ryb3BMaXN0LCB7IHN0YXRpYzogdHJ1ZSB9KSBkcm9wTGlzdCE6IENka0Ryb3BMaXN0O1xyXG4gICRmb290ZXJSb3dTdHlsZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IGhhc0RhdGEgPSAhIXRoaXMuJGRpc3BsYXlEYXRhTGVuZ3RoKCk7XHJcbiAgICBjb25zdCBtZXRhRm9vdGVyID0gdGhpcy4kaGFzRm9vdGVyTWV0YSgpO1xyXG4gICAgY29uc3QgY3VzdG9tRm9vdGVyID0gdGhpcy4kaGFzQ3VzdG9tRm9vdGVyKCk7XHJcbiAgICBjb25zdCBoYXNTZWxlY3Rpb25Db2x1bW4gPSB0aGlzLnN0YXRlLnByb3BzKCkuc2VsZWN0aW9uQ29sdW1uO1xyXG4gICAgcmV0dXJuIGN1c3RvbUZvb3RlciB8fCAoaGFzRGF0YSAmJiAobWV0YUZvb3RlciB8fCBoYXNTZWxlY3Rpb25Db2x1bW4pKSA/ICdyZWd1bGFyLWZvb3RlcicgOiBoYXNEYXRhID8gJ25vLWZvb3RlcicgOiAnc21hbGwtZm9vdGVyJztcclxuICB9KTtcclxuICAkc2hvd0Zvb3RlclJvdyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuJGZvb3RlclJvd1N0eWxlKCkgIT09ICduby1mb290ZXInKTtcclxuICBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xyXG4gIGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICB7cHJvdmlkZTogTWF0VGFibGUsIHVzZUZhY3Rvcnk6ICgpPT4gdGhpcy4kdGFibGUoKSB9LFxyXG4gICAgICB7cHJvdmlkZTogQ2RrRHJvcExpc3QsIHVzZUZhY3Rvcnk6ICgpPT4gdGhpcy5kcm9wTGlzdCB9LFxyXG4gICAgXSxcclxuICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcclxuICB9KTtcclxuXHJcbiAgJGhhc1NlbGVjdENvbHVtbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUuc2VsZWN0U2lnbmFsKHN0YXRlID0+IHN0YXRlLnByb3BzLnNlbGVjdGlvbkNvbHVtbikoKSk7XHJcbiAgJGhhc0luZGV4Q29sdW1uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0ZS5zZWxlY3RTaWduYWwoc3RhdGUgPT4gc3RhdGUucHJvcHMuaW5kZXhDb2x1bW4pKCkpO1xyXG4gICRjb2x1bW5zID0gc2lnbmFsPERpY3Rpb25hcnk8Q29sdW1uQnVpbGRlckNvbXBvbmVudD4+KHt9KTtcclxuICAkc2hvd0hlYWRlciA9IGNvbXB1dGVkKCgpID0+ICF0aGlzLnN0YXRlLnRhYmxlU2V0dGluZ3MoKS5oaWRlQ29sdW1uSGVhZGVyKVxyXG4gIG9mZnNldCQgPSB0aGlzLmRhdGFTdG9yZS5zZWxlY3QoIHMgPT4gcy52aXJ0dWFsU2Nyb2xsT2Zmc2V0ICk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5zZXRVcFNlbGVjdGlvbnMoKTtcclxuXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCBjb2x1bW5JbmZvcyA9IHRoaXMuJGNvbHVtbkluZm9zKCkgfHwgW107XHJcbiAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy4kdGFibGUoKTtcclxuICAgICAgaWYoIXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xyXG5cclxuICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLiRjb2x1bW5zKCkpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY29sdW1uSW5mbyA9IGNvbHVtbkluZm9zLmZpbmQoY2kgPT4gY2kubWV0YURhdGEua2V5ID09PSBrZXkpO1xyXG4gICAgICAgICAgaWYoIWNvbHVtbkluZm8gfHwgY29sdW1uSW5mby5jdXN0b21DZWxsICE9PSB2YWx1ZS5jdXN0b21DZWxsKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLiRjb2x1bW5zKClba2V5XTtcclxuICAgICAgICAgICAgdGFibGU/LnJlbW92ZUNvbHVtbkRlZih2YWx1ZS5jb2x1bW5EZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb2x1bW5JbmZvcy5mb3JFYWNoKGNpID0+IHRoaXMuYnVpbGRDb2x1bW4oY2kpKVxyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcblxyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgY29uc3QgdGFibGUgPSB0aGlzLiR0YWJsZSgpO1xyXG4gICAgICBjb25zdCByb3dzID0gdGhpcy4kcm93cygpO1xyXG4gICAgICBjb25zdCBrZXlzID0gdGhpcy4ka2V5cygpO1xyXG4gICAgICBpZighdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XHJcbiAgICAgICAgcm93cy5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgICB0YWJsZS5yZW1vdmVSb3dEZWYocm93KTtcclxuICAgICAgICAgIHJvdy5jb2x1bW5zID0ga2V5cztcclxuICAgICAgICAgIHRhYmxlLmFkZFJvd0RlZihyb3cpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgfSlcclxuXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCBoZWFkZXJSb3cgPSB0aGlzLiRoZWFkZXJSb3coKTtcclxuICAgICAgY29uc3Qgc2hvd0hlYWRlciA9IHRoaXMuJHNob3dIZWFkZXIoKTtcclxuICAgICAgY29uc3QgdGFibGUgPSB0aGlzLiR0YWJsZSgpO1xyXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xyXG4gICAgICAgIGlmKGhlYWRlclJvdyAmJiBzaG93SGVhZGVyICYmIHRhYmxlKSB0YWJsZS5hZGRIZWFkZXJSb3dEZWYoaGVhZGVyUm93KTtcclxuICAgICAgICBlbHNlIGlmKGhlYWRlclJvdyAmJiB0YWJsZSkgdGFibGUucmVtb3ZlSGVhZGVyUm93RGVmKGhlYWRlclJvdyk7XHJcbiAgICAgIH0pXHJcbiAgICB9KTtcclxuXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCBmb290ZXJSb3cgPSB0aGlzLiRmb290ZXJSb3coKTtcclxuICAgICAgY29uc3Qgc2hvd0Zvb3RlciA9IHRoaXMuJHNob3dGb290ZXJSb3coKTtcclxuICAgICAgY29uc3QgdGFibGUgPSB0aGlzLiR0YWJsZSgpO1xyXG4gICAgICBcclxuICAgICAgdW50cmFja2VkKCgpID0+IHtcclxuICAgICAgICBpZihmb290ZXJSb3cgJiYgc2hvd0Zvb3RlciAmJiB0YWJsZSkgdGFibGUuYWRkRm9vdGVyUm93RGVmKGZvb3RlclJvdyk7XHJcbiAgICAgICAgZWxzZSBpZihmb290ZXJSb3cgJiYgdGFibGUpIHRhYmxlLnJlbW92ZUZvb3RlclJvd0RlZihmb290ZXJSb3cpO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWZhdWx0VHJhY2tCeSA9IChpbmRleDpudW1iZXIsIGl0ZW06IGFueSkgPT4gaXRlbVtpbml0SW5kZXhTeW1ib2xdO1xyXG4gIHRyYWNrQnlGdW5jdGlvbiA9IHRoaXMuZGVmYXVsdFRyYWNrQnk7XHJcblxyXG4gICRrZXlzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5zdGF0ZS4kb3JkZXJlZFZpc2libGVDb2x1bW5zKCk7XHJcbiAgICBjb25zdCBidWlsdCA9IHRoaXMuJGNvbHVtbnMoKTtcclxuICAgIGNvbnN0IGtleXMgPSBkaXNwbGF5ZWQuZmlsdGVyKGQgPT4gISFidWlsdFtkXSk7XHJcbiAgICBpZih0aGlzLiRoYXNTZWxlY3RDb2x1bW4oKSl7XHJcbiAgICAgIGtleXMudW5zaGlmdCgnc2VsZWN0Jyk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLiRoYXNJbmRleENvbHVtbigpKSB7XHJcbiAgICAgIGtleXMudW5zaGlmdCgnaW5kZXgnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBrZXlzO1xyXG4gIH0pXHJcbiAga2V5cyQgPSB0b09ic2VydmFibGUodGhpcy4ka2V5cyk7XHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgdGhpcy5zdGF0ZS5vbih0aGlzLnNlbGVjdGFibGVEYXRhJCwgKGRhdGEpID0+IHtcclxuICAgICAgaWYodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoKXtcclxuICAgICAgICBjb25zdCB0cmFja0J5RnVuY3Rpb24gPSB0aGlzLnRyYWNrQnkgPyAocykgPT4gZGF0YS5ldmVyeShkID0+ICBkW3RoaXMudHJhY2tCeSFdICE9PSBzW3RoaXMudHJhY2tCeSFdKSA6IHMgPT4gIWRhdGEuaW5jbHVkZXMocyk7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmZpbHRlcih0cmFja0J5RnVuY3Rpb24pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KC4uLnJlbW92ZWQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICAkdXNlUGFnaW5hdG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0ZS50YWJsZVNldHRpbmdzKCkudXNlUGFnaW5hdG9yKTtcclxuICAkdXNlVmlydHVhbFNjcm9sbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUuJHZpZXdUeXBlKCkuaW5jbHVkZXMoJ3ZpcnR1YWwnKSk7XHJcbiAgJG9mZnNldEluZGV4ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgdmlydHVhbFN0YXJ0ID0gdGhpcy5kYXRhU3RvcmUuc2VsZWN0U2lnbmFsKGQgPT4gZC52aXJ0dWFsRW5kcy5zdGFydCkoKTtcclxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5zdGF0ZS4kcGFnZVNpemUoKTtcclxuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5zdGF0ZS4kY3VycmVudFBhZ2UoKTtcclxuICAgIGlmKHRoaXMuJHVzZVZpcnR1YWxTY3JvbGwoKSl7XHJcbiAgICAgIHJldHVybiB2aXJ0dWFsU3RhcnQ7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLiR1c2VQYWdpbmF0b3IoKSl7XHJcbiAgICAgIHJldHVybiBwYWdlU2l6ZSAqIGN1cnJlbnRQYWdlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDA7XHJcbiAgfSk7XHJcblxyXG5cclxuICBpc0dyb3VwSGVhZGVyKF86IG51bWJlciwgcm93OiB7IGlzR3JvdXBIZWFkZXI6IGJvb2xlYW4gfSkge1xyXG4gICAgcmV0dXJuIHJvdy5pc0dyb3VwSGVhZGVyO1xyXG4gIH1cclxuXHJcbiAgc2V0RXhwYW5kZWQoa2V5OiBzdHJpbmcsIGdyb3VwS2V5OiBzdHJpbmcsIGlzRXhwYW5kZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhdGUudXBkYXRlRXhwYW5kZWRHcm91cHMoeyBrZXkgLCBpc0V4cGFuZGVkLCBncm91cEtleSB9KTtcclxuICB9XHJcblxyXG4gIGJ1aWxkQ29sdW1uKGNvbHVtbjogQ29sdW1uSW5mbykge1xyXG4gICAgY29uc3QgYWxyZWFkeUJ1aWx0Q29sdW1uID0gdGhpcy4kY29sdW1ucygpW2NvbHVtbi5tZXRhRGF0YS5rZXldO1xyXG4gICAgaWYoYWxyZWFkeUJ1aWx0Q29sdW1uKSB7XHJcbiAgICAgIGFscmVhZHlCdWlsdENvbHVtbi5tZXRhRGF0YSA9IGNvbHVtbi5tZXRhRGF0YTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoQ29sdW1uQnVpbGRlckNvbXBvbmVudCwge1xyXG4gICAgICAgIGluZGV4OiAwLFxyXG4gICAgICAgIGluamVjdG9yOiB0aGlzLmluamVjdG9yXHJcbiAgICAgIH0pO1xyXG4gICAgICBjb21wb25lbnQuaW5zdGFuY2UuY3VzdG9tQ2VsbCA9IGNvbHVtbi5jdXN0b21DZWxsO1xyXG4gICAgICBjb21wb25lbnQuaW5zdGFuY2UubWV0YURhdGEgPSBjb2x1bW4ubWV0YURhdGE7XHJcbiAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS5kYXRhJCA9IHRoaXMuZGF0YSQ7XHJcbiAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS53aGVuVmlld0luaXRlZCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy4kY29sdW1ucy51cGRhdGUoY29sdW1uc0RpY3QgPT4gKHtcclxuICAgICAgICAgIC4uLmNvbHVtbnNEaWN0LFxyXG4gICAgICAgICAgW2NvbHVtbi5tZXRhRGF0YS5rZXldOiBjb21wb25lbnQuaW5zdGFuY2VcclxuICAgICAgICB9KSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0aW9uISA6IFNlbGVjdGlvbk1vZGVsPGFueT47XHJcbiAgQE91dHB1dCgpIHNlbGVjdGlvbiQgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdGlvbkNoYW5nZTxhbnk+PigpO1xyXG4gIG1hc3RlclRvZ2dsZUNoZWNrZWQkID0gdGhpcy5zZWxlY3Rpb24kLnBpcGUobWFwKCgpPT50aGlzLnNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmIHRoaXMuaXNBbGxTZWxlY3RlZCgpKSk7XHJcbiAgbWFzdGVyVG9nZ2xlSW5kZXRlcm1pbmF0ZSQgPSB0aGlzLnNlbGVjdGlvbiQucGlwZShtYXAoKCk9PnRoaXMuc2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIXRoaXMuaXNBbGxTZWxlY3RlZCgpKSk7XHJcbiAgc2V0VXBTZWxlY3Rpb25zKHRyYWNrQnk/OiBzdHJpbmcpe1xyXG4gICAgdGhpcy5zZWxlY3Rpb24gPSB0cmFja0J5ID8gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10sIHRydWUsIChhLCBiKSA9PiBhW3RyYWNrQnldID09PSBiW3RyYWNrQnldKSA6IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRydWUsIFtdKTtcclxuICAgIHRoaXMuc3RhdGUub24odGhpcy5zZWxlY3Rpb24uY2hhbmdlZCwgYyA9PiB0aGlzLnNlbGVjdGlvbiQuZW1pdChjKSk7XHJcbiAgfVxyXG4gICRzZWxlY3RhYmxlRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmKHRoaXMuc3RhdGUuJHZpZXdUeXBlKCkgPT09ICd2aXJ0dWFsIHBhZ2luYXRvcicgfHwgdGhpcy5zdGF0ZS4kdmlld1R5cGUoKSA9PT0gJ3BhZ2luYXRvcicpe1xyXG4gICAgICBjb25zdCBwcmV2aW91c1BhZ2VSZWNvcmRzID0gdGhpcy5zdGF0ZS4kY3VycmVudFBhZ2UoKSAqIHRoaXMuc3RhdGUuJHBhZ2VTaXplKCk7XHJcbiAgICAgIHJldHVybiB0aGlzLiRkYXRhKCkuc2xpY2UocHJldmlvdXNQYWdlUmVjb3JkcywgcHJldmlvdXNQYWdlUmVjb3JkcyArIHRoaXMuc3RhdGUuJHBhZ2VTaXplKCkpO1xyXG4gICAgfWVsc2UgaWYodGhpcy5zdGF0ZS4kdmlld1R5cGUoKSA9PT0gJ2FsbCcgfHwgdGhpcy5zdGF0ZS4kdmlld1R5cGUoKSA9PT0gJ3ZpcnR1YWwgYWxsJyl7XHJcbiAgICAgIHJldHVybiB0aGlzLiRkYXRhKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfSk7XHJcbiAgc2VsZWN0YWJsZURhdGEkID0gdG9PYnNlcnZhYmxlKHRoaXMuJHNlbGVjdGFibGVEYXRhKTtcclxuICBpc0FsbFNlbGVjdGVkKCkge1xyXG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XHJcbiAgICBjb25zdCBudW1Sb3dzID0gdGhpcy4kc2VsZWN0YWJsZURhdGEoKT8ubGVuZ3RoIHx8IDA7XHJcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XHJcbiAgfVxyXG5cclxuICAvKiogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xyXG4gIG1hc3RlclRvZ2dsZSgpIHtcclxuICAgIGlmKHRoaXMuaXNBbGxTZWxlY3RlZCgpKXtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMuJHNlbGVjdGFibGVEYXRhKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdGFibGVXaWR0aCA9IHRoaXMuc3RhdGUuZ2V0VXNlckRlZmluZWRUYWJsZVNpemUkLnBpcGUoXHJcbiAgICBwcmV2aW91c0FuZEN1cnJlbnQ8bnVtYmVyIHwgdW5kZWZpbmVkPigwKSxcclxuICAgIG1hcCgoW3ByZXZpb3VzVXNlckRlZmluZWRXaWR0aCwgY3VycmVudFVzZXJEZWZpbmVkV2lkdGhdKSA9PiB7XHJcbiAgICAgIGlmKCBjdXJyZW50VXNlckRlZmluZWRXaWR0aCl7XHJcbiAgICAgICAgcmV0dXJuICh7d2lkdGg6YCR7Y3VycmVudFVzZXJEZWZpbmVkV2lkdGh9cHhgLCBtaW5XaWR0aDogJ2ZpdC1jb250ZW50J30pO1xyXG4gICAgICB9IGlmKCB3YXNSZXNldCgpICl7XHJcbiAgICAgICAgcmV0dXJuICh7d2lkdGg6J2luaXRpYWwnfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICh7fSk7XHJcblxyXG4gICAgICBmdW5jdGlvbiB3YXNSZXNldCgpe1xyXG4gICAgICAgIHJldHVybiAocHJldmlvdXNVc2VyRGVmaW5lZFdpZHRoID8/IDApID49MCAmJiBjdXJyZW50VXNlckRlZmluZWRXaWR0aCA9PSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICk7XHJcblxyXG4gIGdldFRyYW5zZm9ybSA9IChrZXk6IHN0cmluZywgdmFsOiBzdHJpbmcpID0+IHtcclxuICAgIGlmKHZhbCA9PSB1bmRlZmluZWQgfHwgdmFsID09PSAnbnVsbCcpIHJldHVybiAnJztcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybUNyZWF0b3IuY3JlYXRlVHJhbnNmb3JtZXIodGhpcy4kY29sdW1uc1trZXldLm1ldGFEYXRhLCB0cnVlKSh7IFtrZXldOiB2YWx9KTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAkcm93SGVpZ2h0ID0gdGhpcy5zdGF0ZS5zZWxlY3RTaWduYWwocyA9PiB7XHJcbiAgICAgIGlmKHRoaXMuc3RhdGUuJGlzVmlydHVhbCgpICYmIChzLm5vdFBlcnNpc3RlZFRhYmxlU2V0dGluZ3MudXNlVmlydHVhbFNjcm9sbCBhcyBWaXJ0dWFsU2Nyb2xsT3B0aW9ucyk/LmVuZm9yY2VSb3dIZWlnaHQpe1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IChzLm5vdFBlcnNpc3RlZFRhYmxlU2V0dGluZ3MudXNlVmlydHVhbFNjcm9sbCBhcyBWaXJ0dWFsU2Nyb2xsT3B0aW9ucykhLnJvd0hlaWdodDtcclxuICAgICAgICByZXR1cm4gaGVpZ2h0ICsgJ3B4JyA7XHJcbiAgICAgIH1cclxuICAgICAgaWYodHlwZW9mIHMubm90UGVyc2lzdGVkVGFibGVTZXR0aW5ncy5yb3dIZWlnaHQgPT09ICdudW1iZXInKXtcclxuICAgICAgICByZXR1cm4gcy5ub3RQZXJzaXN0ZWRUYWJsZVNldHRpbmdzLnJvd0hlaWdodCArICdweCc7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHMubm90UGVyc2lzdGVkVGFibGVTZXR0aW5ncy5yb3dIZWlnaHQ7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICRoZWFkZXJIZWlnaHQgPSB0aGlzLnN0YXRlLnNlbGVjdFNpZ25hbChzID0+IHtcclxuICAgIGlmKHRoaXMuc3RhdGUuJGlzVmlydHVhbCgpICYmIChzLm5vdFBlcnNpc3RlZFRhYmxlU2V0dGluZ3MudXNlVmlydHVhbFNjcm9sbCBhcyBWaXJ0dWFsU2Nyb2xsT3B0aW9ucyk/LmVuZm9yY2VIZWFkZXJIZWlnaHQpe1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSAocy5ub3RQZXJzaXN0ZWRUYWJsZVNldHRpbmdzLnVzZVZpcnR1YWxTY3JvbGwgYXMgVmlydHVhbFNjcm9sbE9wdGlvbnMpIS5oZWFkZXJIZWlnaHQ7XHJcbiAgICAgIHJldHVybiBoZWlnaHQgKyAncHgnO1xyXG4gICAgfVxyXG4gICAgaWYodHlwZW9mIHMubm90UGVyc2lzdGVkVGFibGVTZXR0aW5ncy5oZWFkZXJIZWlnaHQgPT09ICdudW1iZXInKXtcclxuICAgICAgcmV0dXJuIHMubm90UGVyc2lzdGVkVGFibGVTZXR0aW5ncy5oZWFkZXJIZWlnaHQgKyAncHgnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHMubm90UGVyc2lzdGVkVGFibGVTZXR0aW5ncy5oZWFkZXJIZWlnaHQ7XHJcbiAgfSk7XHJcblxyXG4gICRncm91cEhlYWRlckhlaWdodCA9IHRoaXMuc3RhdGUuc2VsZWN0U2lnbmFsKHMgPT4ge1xyXG4gICAgaWYocy5ub3RQZXJzaXN0ZWRUYWJsZVNldHRpbmdzLmdyb3VwSGVhZGVySGVpZ2h0KXtcclxuICAgICAgcmV0dXJuIHMubm90UGVyc2lzdGVkVGFibGVTZXR0aW5ncy5ncm91cEhlYWRlckhlaWdodCArICdweCc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy4kcm93SGVpZ2h0KCk7XHJcbiAgfSk7XHJcblxyXG4gICRmb290ZXJIZWlnaHQgPSB0aGlzLnN0YXRlLnNlbGVjdFNpZ25hbChzID0+IHtcclxuICAgIGNvbnN0IGZvb3RlclN0eWxlID0gdGhpcy4kZm9vdGVyUm93U3R5bGUoKTtcclxuICAgIHN3aXRjaCAoZm9vdGVyU3R5bGUpIHtcclxuICAgICAgY2FzZSAncmVndWxhci1mb290ZXInOlxyXG4gICAgICAgIHJldHVybiB0aGlzLiRyb3dIZWlnaHQoKTtcclxuICAgICAgY2FzZSAnc21hbGwtZm9vdGVyJzpcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5zbWFsbEZvb3Rlcn1weGA7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICcwcHgnO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuXHJcbiAgJHN0aWNreUZvb3RlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUucHJvcHMoKS5zdGlja3lGb290ZXIgfHwgdGhpcy5zdGF0ZS4kaXNWaXJ0dWFsKCkpO1xyXG59XHJcbiIsIjxtYXQtdGFibGVcclxuICBjZGtEcm9wTGlzdFxyXG4gIGNka0Ryb3BMaXN0TG9ja0F4aXM9J3gnXHJcbiAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxyXG4gIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCJcclxuICBjbGFzcz1cInRhYmxlLWRyYWctbGlzdFwiXHJcbiAgI3RhYmxlXHJcbiAgW2RhdGFTb3VyY2VdPVwic3RhdGUucHJvcHMoKS5kYXRhU291cmNlIVwiXHJcbiAgW3RyYWNrQnldPVwidHJhY2tCeUZ1bmN0aW9uXCJcclxuICBbc3R5bGVdPVwidGFibGVXaWR0aCB8IGFzeW5jIFwiXHJcbj5cclxuXHJcbiAgPCEtLSBzZWxlY3QgY29sdW1uIC0tPlxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XHJcblxyXG4gICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiAgY2xhc3M9XCJzZWxlY3QtY29sdW1uXCI+XHJcbiAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIiEhKG1hc3RlclRvZ2dsZUNoZWNrZWQkIHwgYXN5bmMpXCJcclxuICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJtYXN0ZXJUb2dnbGVJbmRldGVybWluYXRlJCB8IGFzeW5jXCI+XHJcbiAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgPC9tYXQtaGVhZGVyLWNlbGw+XHJcblxyXG4gICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwic2VsZWN0LWNvbHVtblwiPlxyXG4gICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24udG9nZ2xlKHJvdykgOiBudWxsXCJcclxuICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpXCIvPlxyXG4gICAgPC9tYXQtY2VsbD5cclxuXHJcbiAgICA8bWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmIGNsYXNzPVwic2VsZWN0LWNvbHVtblwiPlxyXG4gICAgICB7eyBzZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoIH19XHJcbiAgICA8L21hdC1mb290ZXItY2VsbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gIDwhLS0gaW5kZXggY29sdW1uIC0tPlxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiaW5kZXhcIj5cclxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJmLW1hdC1oZWFkZXItY2VsbFwiIGNsYXNzPVwiaW5kZXgtY29sdW1uXCI+I1xyXG4gICAgPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaSA9IGluZGV4O1wiIGNsYXNzPVwiaW5kZXgtY29sdW1uXCI+XHJcbiAgICAgIHt7IDEgKyBpICsgJG9mZnNldEluZGV4KCkgfX1cclxuICAgIDwvbWF0LWNlbGw+XHJcbiAgICA8bWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmIGNsYXNzPVwiaW5kZXgtY29sdW1uXCI+PC9tYXQtZm9vdGVyLWNlbGw+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gR3JvdXBpbmcgLS0+XHJcbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJncm91cEhlYWRlclwiPlxyXG4gICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxyXG4gICAgICBAbGV0IGV4cGFuZGVkID0gKHN0YXRlLmdldElzRXhwYW5kZWQgfCBmdW5jIDogcm93LmtleSA6IHJvdy5ncm91cE5hbWUgKTtcclxuICAgICAgPGRpdiBbc3R5bGUucGFkZGluZ0xlZnRdPVwicm93LnBhZGRpbmcgKyAncHggIWltcG9ydGFudCdcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2V0RXhwYW5kZWQocm93LmtleSwgcm93Lmdyb3VwTmFtZSwgIWV4cGFuZGVkKCkpO1wiPlxyXG4gICAgICAgICAgQGlmICghZXhwYW5kZWQoKSkge1xyXG4gICAgICAgICAgICA8bWF0LWljb24+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XHJcbiAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgPG1hdC1pY29uPmV4cGFuZF9tb3JlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB7eyBnZXRUcmFuc2Zvcm0gfCBmdW5jIDogcm93LmtleSA6ICByb3cuZ3JvdXBIZWFkZXJEaXNwbGF5IH19ICh7eyByb3cubGVuZ3RoIH19KVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBzdHlsZT1cImZsZXgtZ3JvdzogMVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0ZS5wcm9wcygpLmdyb3VwSGVhZGVyVGVtcGxhdGUhOyBjb250ZXh0OiB7IGVsZW1lbnQ6IHJvdyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtY2VsbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG1hdC1yb3cgW3N0eWxlLmhlaWdodF09XCIkcm93SGVpZ2h0KClcIiBbc3R5bGUubWluLWhlaWdodF09XCIkcm93SGVpZ2h0KClcIlxyXG4gICAgICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiAka2V5cygpOyBsZXQgaSA9IGluZGV4XCIvPlxyXG4gIDxtYXQtcm93IFtzdHlsZS5oZWlnaHRdPVwic3RhdGUucHJvcHMoKS5ncm91cEhlYWRlckhlaWdodCA/IHN0YXRlLnByb3BzKCkuZ3JvdXBIZWFkZXJIZWlnaHQgKyAncHgnIDogJGdyb3VwSGVhZGVySGVpZ2h0KClcIlxyXG4gICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cInN0YXRlLnByb3BzKCkuZ3JvdXBIZWFkZXJIZWlnaHQgPyBzdGF0ZS5wcm9wcygpLmdyb3VwSGVhZGVySGVpZ2h0ICsgJ3B4JyA6ICRncm91cEhlYWRlckhlaWdodCgpXCJcclxuICAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydncm91cEhlYWRlciddOyB3aGVuOiBpc0dyb3VwSGVhZGVyXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIi8+XHJcbjwvbWF0LXRhYmxlPlxyXG5cclxuPG1hdC1oZWFkZXItcm93IFtzdHlsZS5oZWlnaHRdPVwiJGhlYWRlckhlaWdodCgpXCIgW3N0eWxlLm1pbi1oZWlnaHRdPVwiJGhlYWRlckhlaWdodCgpXCJcclxuICAqbWF0SGVhZGVyUm93RGVmPVwiJGtleXMoKTsgc3RpY2t5OiBzdGF0ZS5wcm9wcygpLmlzU3RpY2t5XCIgW3N0eWxlLnRvcC5weF09XCIoKG9mZnNldCQgfCBhc3luYykhICogLTEpXCIvPlxyXG48bWF0LWZvb3Rlci1yb3cgW3N0eWxlLmhlaWdodF09XCIkZm9vdGVySGVpZ2h0KClcIiBbc3R5bGUubWluLWhlaWdodF09XCIkZm9vdGVySGVpZ2h0KClcIlxyXG4gICptYXRGb290ZXJSb3dEZWY9XCIka2V5cygpOyBzdGlja3k6ICRzdGlja3lGb290ZXIoKSBcIlxyXG4gIFtzdHlsZS5ib3R0b20ucHhdPVwiJHN0aWNreUZvb3RlcigpID8gKG9mZnNldCQgfCBhc3luYykgOiB1bmRlZmluZWRcIi8+XHJcbiJdfQ==
|