ngx-st-tables 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2020/lib/components/local-table/configurations/configurations.component.mjs +70 -0
- package/esm2020/lib/components/local-table/local-table.component.mjs +191 -0
- package/esm2020/lib/components/select-table/select-table.mjs +101 -0
- package/esm2020/lib/models/local-table/st-configurations-settings.model.mjs +2 -0
- package/esm2020/lib/models/local-table/st-global-search-settings.model.mjs +2 -0
- package/esm2020/lib/models/local-table/st-local-storage-configuration.model.mjs +2 -0
- package/esm2020/lib/models/local-table/st-local-table-column.model.mjs +2 -0
- package/esm2020/lib/models/local-table/st-local-table-columns.model.mjs +2 -0
- package/esm2020/lib/models/local-table/st-table-settings.model.mjs +2 -0
- package/esm2020/lib/services/local-table.service.mjs +33 -0
- package/esm2020/lib/st-tables.module.mjs +99 -0
- package/esm2020/ngx-st-tables.mjs +5 -0
- package/esm2020/public-api.mjs +15 -0
- package/fesm2015/ngx-st-tables.mjs +476 -0
- package/fesm2015/ngx-st-tables.mjs.map +1 -0
- package/fesm2020/ngx-st-tables.mjs +474 -0
- package/fesm2020/ngx-st-tables.mjs.map +1 -0
- package/lib/components/local-table/configurations/configurations.component.d.ts +27 -0
- package/lib/components/local-table/local-table.component.d.ts +56 -0
- package/lib/components/select-table/select-table.d.ts +37 -0
- package/lib/models/local-table/st-configurations-settings.model.d.ts +6 -0
- package/lib/models/local-table/st-global-search-settings.model.d.ts +4 -0
- package/lib/models/local-table/st-local-storage-configuration.model.d.ts +8 -0
- package/lib/models/local-table/st-local-table-column.model.d.ts +22 -0
- package/lib/models/local-table/st-local-table-columns.model.d.ts +4 -0
- package/lib/models/local-table/st-table-settings.model.d.ts +3 -0
- package/lib/services/local-table.service.d.ts +10 -0
- package/lib/st-tables.module.d.ts +24 -0
- package/ngx-st-tables.d.ts +5 -0
- package/package.json +33 -0
- package/public-api.d.ts +11 -0
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# NgxLocalTable
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project ngx-st-tables` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-st-tables`.
|
|
8
|
+
> Note: Don't forget to add `--project ngx-st-tables` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build ngx-st-tables` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build ngx-st-tables`, go to the dist folder `cd dist/ngx-st-tables` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test ngx-st-tables` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/material/form-field";
|
|
4
|
+
import * as i2 from "@angular/material/select";
|
|
5
|
+
import * as i3 from "@angular/material/core";
|
|
6
|
+
import * as i4 from "@angular/material/button";
|
|
7
|
+
import * as i5 from "@angular/common";
|
|
8
|
+
import * as i6 from "@angular/forms";
|
|
9
|
+
import * as i7 from "@angular/material/input";
|
|
10
|
+
export class ConfigurationsComponent {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.createNewConfig = new EventEmitter();
|
|
13
|
+
this.removeConfig = new EventEmitter();
|
|
14
|
+
this.changeConfig = new EventEmitter();
|
|
15
|
+
this.creatingConfiguration = false;
|
|
16
|
+
this.createConfigurationName = '';
|
|
17
|
+
this.removingConfiguration = false;
|
|
18
|
+
}
|
|
19
|
+
set initSelectedConfig(config) {
|
|
20
|
+
this.selectedConfig = config;
|
|
21
|
+
}
|
|
22
|
+
ngOnInit() {
|
|
23
|
+
}
|
|
24
|
+
showCreateConfiguration() {
|
|
25
|
+
this.creatingConfiguration = true;
|
|
26
|
+
this.createConfigurationName = '';
|
|
27
|
+
}
|
|
28
|
+
hideCreateConfiguration() {
|
|
29
|
+
this.creatingConfiguration = false;
|
|
30
|
+
this.createConfigurationName = '';
|
|
31
|
+
}
|
|
32
|
+
saveCreateConfiguration() {
|
|
33
|
+
this.creatingConfiguration = false;
|
|
34
|
+
this.selectedConfig = null;
|
|
35
|
+
this.createNewConfig.emit(this.createConfigurationName);
|
|
36
|
+
}
|
|
37
|
+
deleteConfiguration() {
|
|
38
|
+
this.removingConfiguration = true;
|
|
39
|
+
}
|
|
40
|
+
acceptDeleteConfiguration() {
|
|
41
|
+
this.removingConfiguration = false;
|
|
42
|
+
this.selectedConfig = null;
|
|
43
|
+
this.removeConfig.emit(this.selectedConfig.configId);
|
|
44
|
+
}
|
|
45
|
+
declineDeleteConfiguration() {
|
|
46
|
+
this.removingConfiguration = false;
|
|
47
|
+
}
|
|
48
|
+
selectedConfigChanged() {
|
|
49
|
+
this.changeConfig.emit(this.selectedConfig?.configId || null);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
ConfigurationsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ConfigurationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
53
|
+
ConfigurationsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: ConfigurationsComponent, selector: "app-configurations[configurationsSettings]", inputs: { configurationsSettings: "configurationsSettings", configurations: "configurations", initSelectedConfig: "initSelectedConfig" }, outputs: { createNewConfig: "createNewConfig", removeConfig: "removeConfig", changeConfig: "changeConfig" }, ngImport: i0, template: "<div class=\"col-auto row align-items-center\" style=\"padding: 0;\">\n <ng-container *ngIf=\"!creatingConfiguration && !removingConfiguration\">\n <mat-form-field class=\"col-auto\" style=\"padding-right: 0;\">\n <mat-label>{{configurationsSettings.selectLabel}}</mat-label>\n <mat-select [(ngModel)]=\"selectedConfig\" (ngModelChange)=\"selectedConfigChanged()\">\n <mat-option [value]=\"null\"></mat-option>\n <mat-option *ngFor=\"let config of configurations\" [value]=\"config\">{{config.configName}}</mat-option>\n </mat-select>\n </mat-form-field>\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"showCreateConfiguration()\">\n <span class=\"material-icons-outlined\">\n add\n </span>\n </button>\n <button mat-icon-button class=\"col-auto red-icon\" [disabled]=\"!selectedConfig\" (click)=\"deleteConfiguration()\">\n <span class=\"material-icons-outlined\">\n delete\n </span>\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"creatingConfiguration\">\n <mat-form-field class=\"col-auto\">\n <mat-label>{{configurationsSettings.createLabel}}</mat-label>\n <input matInput [(ngModel)]=\"createConfigurationName\">\n </mat-form-field>\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"saveCreateConfiguration()\" [disabled]=\"!createConfigurationName\">\n <span class=\"material-icons-outlined\">\n done\n </span>\n </button>\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"hideCreateConfiguration()\">\n <span class=\"material-icons-outlined\">\n close\n </span>\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"removingConfiguration\">\n <p class=\"col-auto\" style=\"margin: 0; font-weight: bold;font-size: 16px;\">{{configurationsSettings.deleteWarningTitle}}</p>\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"acceptDeleteConfiguration()\">\n <span class=\"material-icons-outlined\">\n done\n </span>\n </button>\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"declineDeleteConfiguration()\">\n <span class=\"material-icons-outlined\">\n close\n </span>\n </button>\n </ng-container>\n</div>\n", styles: [".green-icon span{color:#2e7d32}.red-icon span{color:#c62828}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i4.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"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.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"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ConfigurationsComponent, decorators: [{
|
|
55
|
+
type: Component,
|
|
56
|
+
args: [{ selector: 'app-configurations[configurationsSettings]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"col-auto row align-items-center\" style=\"padding: 0;\">\n <ng-container *ngIf=\"!creatingConfiguration && !removingConfiguration\">\n <mat-form-field class=\"col-auto\" style=\"padding-right: 0;\">\n <mat-label>{{configurationsSettings.selectLabel}}</mat-label>\n <mat-select [(ngModel)]=\"selectedConfig\" (ngModelChange)=\"selectedConfigChanged()\">\n <mat-option [value]=\"null\"></mat-option>\n <mat-option *ngFor=\"let config of configurations\" [value]=\"config\">{{config.configName}}</mat-option>\n </mat-select>\n </mat-form-field>\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"showCreateConfiguration()\">\n <span class=\"material-icons-outlined\">\n add\n </span>\n </button>\n <button mat-icon-button class=\"col-auto red-icon\" [disabled]=\"!selectedConfig\" (click)=\"deleteConfiguration()\">\n <span class=\"material-icons-outlined\">\n delete\n </span>\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"creatingConfiguration\">\n <mat-form-field class=\"col-auto\">\n <mat-label>{{configurationsSettings.createLabel}}</mat-label>\n <input matInput [(ngModel)]=\"createConfigurationName\">\n </mat-form-field>\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"saveCreateConfiguration()\" [disabled]=\"!createConfigurationName\">\n <span class=\"material-icons-outlined\">\n done\n </span>\n </button>\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"hideCreateConfiguration()\">\n <span class=\"material-icons-outlined\">\n close\n </span>\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"removingConfiguration\">\n <p class=\"col-auto\" style=\"margin: 0; font-weight: bold;font-size: 16px;\">{{configurationsSettings.deleteWarningTitle}}</p>\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"acceptDeleteConfiguration()\">\n <span class=\"material-icons-outlined\">\n done\n </span>\n </button>\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"declineDeleteConfiguration()\">\n <span class=\"material-icons-outlined\">\n close\n </span>\n </button>\n </ng-container>\n</div>\n", styles: [".green-icon span{color:#2e7d32}.red-icon span{color:#c62828}\n"] }]
|
|
57
|
+
}], ctorParameters: function () { return []; }, propDecorators: { configurationsSettings: [{
|
|
58
|
+
type: Input
|
|
59
|
+
}], configurations: [{
|
|
60
|
+
type: Input
|
|
61
|
+
}], initSelectedConfig: [{
|
|
62
|
+
type: Input
|
|
63
|
+
}], createNewConfig: [{
|
|
64
|
+
type: Output
|
|
65
|
+
}], removeConfig: [{
|
|
66
|
+
type: Output
|
|
67
|
+
}], changeConfig: [{
|
|
68
|
+
type: Output
|
|
69
|
+
}] } });
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvY29uZmlndXJhdGlvbnMvY29uZmlndXJhdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvY29uZmlndXJhdGlvbnMvY29uZmlndXJhdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBVXRHLE1BQU0sT0FBTyx1QkFBdUI7SUE2QmhDO1FBZkEsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRzdDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUcxQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRWpELDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5Qiw0QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFFN0IsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBSzlCLENBQUM7SUF0QkQsSUFDSSxrQkFBa0IsQ0FBQyxNQUErQztRQUNsRSxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBcUJELFFBQVE7SUFDUixDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDdEMsQ0FBQztJQUVELHlCQUF5QjtRQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELDBCQUEwQjtRQUN0QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUM7SUFDbEUsQ0FBQzs7b0hBbkVRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHlVQ1ZwQyxvL0VBb0RBOzJGRDFDYSx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0ksNENBQTRDLG1CQUdyQyx1QkFBdUIsQ0FBQyxNQUFNOzBFQUsvQyxzQkFBc0I7c0JBRHJCLEtBQUs7Z0JBSU4sY0FBYztzQkFEYixLQUFLO2dCQUlGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFNTixlQUFlO3NCQURkLE1BQU07Z0JBSVAsWUFBWTtzQkFEWCxNQUFNO2dCQUlQLFlBQVk7c0JBRFgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTdENvbmZpZ3VyYXRpb25zU2V0dGluZ3NNb2RlbH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9sb2NhbC10YWJsZS9zdC1jb25maWd1cmF0aW9ucy1zZXR0aW5ncy5tb2RlbFwiO1xuaW1wb3J0IHtTdExvY2FsU3RvcmFnZUNvbmZpZ3VyYXRpb25Nb2RlbH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9sb2NhbC10YWJsZS9zdC1sb2NhbC1zdG9yYWdlLWNvbmZpZ3VyYXRpb24ubW9kZWxcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtY29uZmlndXJhdGlvbnNbY29uZmlndXJhdGlvbnNTZXR0aW5nc10nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmF0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY29uZmlndXJhdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBASW5wdXQoKVxuICAgIGNvbmZpZ3VyYXRpb25zU2V0dGluZ3M6IFN0Q29uZmlndXJhdGlvbnNTZXR0aW5nc01vZGVsO1xuXG4gICAgQElucHV0KClcbiAgICBjb25maWd1cmF0aW9uczogU3RMb2NhbFN0b3JhZ2VDb25maWd1cmF0aW9uTW9kZWxbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGluaXRTZWxlY3RlZENvbmZpZyhjb25maWc6IFN0TG9jYWxTdG9yYWdlQ29uZmlndXJhdGlvbk1vZGVsIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnID0gY29uZmlnO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKVxuICAgIGNyZWF0ZU5ld0NvbmZpZyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcmVtb3ZlQ29uZmlnID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBjaGFuZ2VDb25maWcgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bGw+KCk7XG5cbiAgICBjcmVhdGluZ0NvbmZpZ3VyYXRpb24gPSBmYWxzZTtcbiAgICBjcmVhdGVDb25maWd1cmF0aW9uTmFtZSA9ICcnO1xuXG4gICAgcmVtb3ZpbmdDb25maWd1cmF0aW9uID0gZmFsc2U7XG5cbiAgICBzZWxlY3RlZENvbmZpZzogU3RMb2NhbFN0b3JhZ2VDb25maWd1cmF0aW9uTW9kZWwgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgfVxuXG4gICAgc2hvd0NyZWF0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgICAgIHRoaXMuY3JlYXRpbmdDb25maWd1cmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jcmVhdGVDb25maWd1cmF0aW9uTmFtZSA9ICcnO1xuICAgIH1cblxuICAgIGhpZGVDcmVhdGVDb25maWd1cmF0aW9uKCkge1xuICAgICAgICB0aGlzLmNyZWF0aW5nQ29uZmlndXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbmZpZ3VyYXRpb25OYW1lID0gJyc7XG4gICAgfVxuXG4gICAgc2F2ZUNyZWF0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgICAgIHRoaXMuY3JlYXRpbmdDb25maWd1cmF0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWcgPSBudWxsO1xuICAgICAgICB0aGlzLmNyZWF0ZU5ld0NvbmZpZy5lbWl0KHRoaXMuY3JlYXRlQ29uZmlndXJhdGlvbk5hbWUpO1xuICAgIH1cblxuICAgIGRlbGV0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgICAgIHRoaXMucmVtb3ZpbmdDb25maWd1cmF0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhY2NlcHREZWxldGVDb25maWd1cmF0aW9uKCkge1xuICAgICAgICB0aGlzLnJlbW92aW5nQ29uZmlndXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZW1vdmVDb25maWcuZW1pdCh0aGlzLnNlbGVjdGVkQ29uZmlnIS5jb25maWdJZCk7XG4gICAgfVxuXG4gICAgZGVjbGluZURlbGV0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgICAgIHRoaXMucmVtb3ZpbmdDb25maWd1cmF0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VsZWN0ZWRDb25maWdDaGFuZ2VkKCkge1xuICAgICAgICB0aGlzLmNoYW5nZUNvbmZpZy5lbWl0KHRoaXMuc2VsZWN0ZWRDb25maWc/LmNvbmZpZ0lkIHx8IG51bGwpO1xuICAgIH1cbn1cblxuXG4iLCI8ZGl2IGNsYXNzPVwiY29sLWF1dG8gcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwicGFkZGluZzogMDtcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNyZWF0aW5nQ29uZmlndXJhdGlvbiAmJiAhcmVtb3ZpbmdDb25maWd1cmF0aW9uXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC1hdXRvXCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAwO1wiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57e2NvbmZpZ3VyYXRpb25zU2V0dGluZ3Muc2VsZWN0TGFiZWx9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJzZWxlY3RlZENvbmZpZ1wiIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdGVkQ29uZmlnQ2hhbmdlZCgpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm51bGxcIj48L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNvbmZpZyBvZiBjb25maWd1cmF0aW9uc1wiIFt2YWx1ZV09XCJjb25maWdcIj57e2NvbmZpZy5jb25maWdOYW1lfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiY29sLWF1dG8gZ3JlZW4taWNvblwiIChjbGljayk9XCJzaG93Q3JlYXRlQ29uZmlndXJhdGlvbigpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgYWRkXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImNvbC1hdXRvIHJlZC1pY29uXCIgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZENvbmZpZ1wiIChjbGljayk9XCJkZWxldGVDb25maWd1cmF0aW9uKClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cbiAgICAgICAgICAgICAgICBkZWxldGVcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3JlYXRpbmdDb25maWd1cmF0aW9uXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7Y29uZmlndXJhdGlvbnNTZXR0aW5ncy5jcmVhdGVMYWJlbH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJjcmVhdGVDb25maWd1cmF0aW9uTmFtZVwiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImNvbC1hdXRvIGdyZWVuLWljb25cIiAoY2xpY2spPVwic2F2ZUNyZWF0ZUNvbmZpZ3VyYXRpb24oKVwiIFtkaXNhYmxlZF09XCIhY3JlYXRlQ29uZmlndXJhdGlvbk5hbWVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cbiAgICAgICAgICAgICAgICBkb25lXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImNvbC1hdXRvIHJlZC1pY29uXCIgKGNsaWNrKT1cImhpZGVDcmVhdGVDb25maWd1cmF0aW9uKClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cbiAgICAgICAgICAgICAgICBjbG9zZVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZW1vdmluZ0NvbmZpZ3VyYXRpb25cIj5cbiAgICAgICAgPHAgY2xhc3M9XCJjb2wtYXV0b1wiIHN0eWxlPVwibWFyZ2luOiAwOyBmb250LXdlaWdodDogYm9sZDtmb250LXNpemU6IDE2cHg7XCI+e3tjb25maWd1cmF0aW9uc1NldHRpbmdzLmRlbGV0ZVdhcm5pbmdUaXRsZX19PC9wPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImNvbC1hdXRvIGdyZWVuLWljb25cIiAoY2xpY2spPVwiYWNjZXB0RGVsZXRlQ29uZmlndXJhdGlvbigpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgZG9uZVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJjb2wtYXV0byByZWQtaWNvblwiIChjbGljayk9XCJkZWNsaW5lRGVsZXRlQ29uZmlndXJhdGlvbigpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgY2xvc2VcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';
|
|
2
|
+
import { MatTableDataSource } from '@angular/material/table';
|
|
3
|
+
import { MatPaginator } from '@angular/material/paginator';
|
|
4
|
+
import { MatSort } from "@angular/material/sort";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../services/local-table.service";
|
|
7
|
+
import * as i2 from "@angular/material/button";
|
|
8
|
+
import * as i3 from "@angular/material/menu";
|
|
9
|
+
import * as i4 from "@angular/material/checkbox";
|
|
10
|
+
import * as i5 from "./configurations/configurations.component";
|
|
11
|
+
import * as i6 from "@angular/material/form-field";
|
|
12
|
+
import * as i7 from "@angular/material/icon";
|
|
13
|
+
import * as i8 from "@angular/material/table";
|
|
14
|
+
import * as i9 from "@angular/material/sort";
|
|
15
|
+
import * as i10 from "@angular/material/paginator";
|
|
16
|
+
import * as i11 from "@angular/common";
|
|
17
|
+
import * as i12 from "@angular/forms";
|
|
18
|
+
import * as i13 from "@angular/material/input";
|
|
19
|
+
import * as i14 from "@angular/material/tooltip";
|
|
20
|
+
import * as i15 from "@angular/router";
|
|
21
|
+
import * as i16 from "ngx-st-date-format";
|
|
22
|
+
export class LocalTableComponent {
|
|
23
|
+
constructor(localTableService, changeDetector) {
|
|
24
|
+
this.localTableService = localTableService;
|
|
25
|
+
this.changeDetector = changeDetector;
|
|
26
|
+
this.pageSize = 10;
|
|
27
|
+
this.allowPickColumns = false;
|
|
28
|
+
this.localStorageName = '';
|
|
29
|
+
this.searchModel = '';
|
|
30
|
+
this.displayedColumns = [];
|
|
31
|
+
this.configurations = [];
|
|
32
|
+
this.initConfig = null;
|
|
33
|
+
this.activeConfig = null;
|
|
34
|
+
this._data = [];
|
|
35
|
+
this._columns = {};
|
|
36
|
+
}
|
|
37
|
+
set columns(columns) {
|
|
38
|
+
this._columns = columns;
|
|
39
|
+
this.columnsArray = this.getColumnsArray();
|
|
40
|
+
this.setDisplayedColumns();
|
|
41
|
+
}
|
|
42
|
+
get columns() {
|
|
43
|
+
return this._columns;
|
|
44
|
+
}
|
|
45
|
+
set data(data) {
|
|
46
|
+
this._data = data || [];
|
|
47
|
+
this.setTableSource();
|
|
48
|
+
}
|
|
49
|
+
get data() {
|
|
50
|
+
return this._data;
|
|
51
|
+
}
|
|
52
|
+
ngOnInit() {
|
|
53
|
+
if (this.localStorageName) {
|
|
54
|
+
const pageSize = localStorage.getItem(this.localStorageName);
|
|
55
|
+
if (pageSize) {
|
|
56
|
+
this.pageSize = parseInt(pageSize);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (this.configurationsSettings) {
|
|
60
|
+
this.localTableService.localStorageName = this.configurationsSettings?.localStorageName || '';
|
|
61
|
+
this.loadConfigs();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
ngAfterViewInit() {
|
|
65
|
+
if (this.configurationsSettings) {
|
|
66
|
+
this.paginator.page.subscribe(res => {
|
|
67
|
+
if (this.activeConfig) {
|
|
68
|
+
this.activeConfig.pageSize = res.pageSize;
|
|
69
|
+
this.updateConfigsToLocalStorage();
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
this.sort.sortChange.subscribe((res) => {
|
|
73
|
+
if (this.activeConfig) {
|
|
74
|
+
this.activeConfig.sortFieldName = res.active;
|
|
75
|
+
this.activeConfig.sortDirection = res.direction;
|
|
76
|
+
this.updateConfigsToLocalStorage();
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
this.paginator.pageSize = this.pageSize;
|
|
81
|
+
}
|
|
82
|
+
applySearch(event) {
|
|
83
|
+
const searchValue = event.target.value;
|
|
84
|
+
this.tableSource.filter = searchValue.trim().toLowerCase();
|
|
85
|
+
}
|
|
86
|
+
clearSearch() {
|
|
87
|
+
this.searchModel = '';
|
|
88
|
+
this.tableSource.filter = this.searchModel;
|
|
89
|
+
}
|
|
90
|
+
checkIfActionVisible(row, action) {
|
|
91
|
+
if (action.show) {
|
|
92
|
+
return action.show(row);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
columnVisibleChanged(column) {
|
|
99
|
+
this.setDisplayedColumns();
|
|
100
|
+
this.updateConfigsToLocalStorage();
|
|
101
|
+
}
|
|
102
|
+
newConfigCreated(name) {
|
|
103
|
+
const newConfig = this.generateNewConfig(name);
|
|
104
|
+
this.configurations.push(newConfig);
|
|
105
|
+
this.updateConfigsToLocalStorage();
|
|
106
|
+
this.initConfig = newConfig;
|
|
107
|
+
}
|
|
108
|
+
configRemoved(configId) {
|
|
109
|
+
this.configurations = this.configurations.filter(config => config.configId !== configId);
|
|
110
|
+
this.updateConfigsToLocalStorage();
|
|
111
|
+
}
|
|
112
|
+
configChanged(configId) {
|
|
113
|
+
this.activeConfig = (configId) ? this.configurations.find(config => config.configId === configId) : null;
|
|
114
|
+
if (this.activeConfig) {
|
|
115
|
+
this.setTableConfig(this.activeConfig.pageSize, this.activeConfig.columnsDisabled, this.activeConfig.sortFieldName, this.activeConfig.sortDirection);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
this.setTableConfig(this.pageSize, [], null, null);
|
|
119
|
+
this.clearSearch();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
updateConfigsToLocalStorage() {
|
|
123
|
+
this.localTableService.saveConfigs(this.configurations);
|
|
124
|
+
}
|
|
125
|
+
setTableSource() {
|
|
126
|
+
this.tableSource = new MatTableDataSource(this._data);
|
|
127
|
+
this.tableSource.paginator = this.paginator;
|
|
128
|
+
this.tableSource.sort = this.sort;
|
|
129
|
+
this.clearSearch();
|
|
130
|
+
this.changeDetector.markForCheck();
|
|
131
|
+
}
|
|
132
|
+
setDisplayedColumns() {
|
|
133
|
+
this.displayedColumns = Object.keys(this.columns).filter((column) => {
|
|
134
|
+
return this._columns[column].visible;
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
getColumnsArray() {
|
|
138
|
+
return Object.keys(this._columns)
|
|
139
|
+
.map((column) => this._columns[column]);
|
|
140
|
+
}
|
|
141
|
+
loadConfigs() {
|
|
142
|
+
this.configurations = this.localTableService.getConfigs();
|
|
143
|
+
}
|
|
144
|
+
generateNewConfig(configName) {
|
|
145
|
+
return {
|
|
146
|
+
configId: Date.now().toString(),
|
|
147
|
+
configName: configName,
|
|
148
|
+
columnsDisabled: this.columnsArray.filter(column => !column.visible).map(column => column.translateColumnName),
|
|
149
|
+
pageSize: this.paginator.pageSize,
|
|
150
|
+
sortFieldName: (this.sort.direction && this.sort.active) ? this.sort.active : null,
|
|
151
|
+
sortDirection: this.sort.direction || null
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
setTableConfig(pageSize, disabledColumns, sortFieldName, sortDirection) {
|
|
155
|
+
this.paginator.pageSize = pageSize;
|
|
156
|
+
this.sort.sort({ id: sortFieldName || '', start: sortDirection || 'asc', disableClear: false });
|
|
157
|
+
this.columnsArray.forEach(column => {
|
|
158
|
+
column.visible = disabledColumns.indexOf(column.translateColumnName) === -1;
|
|
159
|
+
});
|
|
160
|
+
this.setDisplayedColumns();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
LocalTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LocalTableComponent, deps: [{ token: i1.LocalTableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
164
|
+
LocalTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: LocalTableComponent, selector: "ngx-st-local-table", inputs: { tableSettings: "tableSettings", globalSearchSettings: "globalSearchSettings", pageSize: "pageSize", allowPickColumns: "allowPickColumns", configurationsSettings: "configurationsSettings", localStorageName: "localStorageName", columns: "columns", data: "data" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], ngImport: i0, template: "<div class=\"local-table\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col row align-items-center\" style=\"padding: 0;\" *ngIf=\"configurationsSettings || allowPickColumns\">\r\n <div class=\"col-auto\" style=\"padding: 0;\" *ngIf=\"allowPickColumns\">\r\n <button mat-icon-button class=\"col-auto\" [matMenuTriggerFor]=\"columnsMenu\">\r\n <span class=\"material-icons-outlined\">\r\n view_week\r\n </span>\r\n </button>\r\n <mat-menu #columnsMenu=\"matMenu\" xPosition=\"after\">\r\n <ng-container *ngFor=\"let column of columnsArray\">\r\n <div mat-menu-item *ngIf=\"!column.notShowInColumnPick\">\r\n <mat-checkbox\r\n [(ngModel)]=\"column.visible\"\r\n (ngModelChange)=\"columnVisibleChanged(column)\"\r\n style=\"margin-top: 5px;\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n {{column.translateColumnName}}\r\n </mat-checkbox>\r\n </div>\r\n </ng-container>\r\n </mat-menu>\r\n </div>\r\n\r\n <app-configurations\r\n *ngIf=\"configurationsSettings\"\r\n [configurationsSettings]=\"configurationsSettings\"\r\n [configurations]=\"configurations\"\r\n [initSelectedConfig]=\"initConfig\"\r\n (createNewConfig)=\"newConfigCreated($event)\"\r\n (removeConfig)=\"configRemoved($event)\"\r\n (changeConfig)=\"configChanged($event)\"\r\n ></app-configurations>\r\n </div>\r\n\r\n <div class=\"col\" style=\"padding: 0;\" *ngIf=\"globalSearchSettings?.show\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{globalSearchSettings?.label || 'Search'}}</mat-label>\r\n <input matInput (keyup)=\"applySearch($event)\" [(ngModel)]=\"searchModel\">\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearSearch()\">\r\n <mat-icon style=\"font-size: 22px\">close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n\r\n </div>\r\n\r\n <table [ngClass]=\"{'no-hover': !tableSettings?.rowClickAction}\" mat-table [dataSource]=\"tableSource\" matSort>\r\n\r\n <ng-container [matColumnDef]=\"column\" *ngFor=\"let column of displayedColumns\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n style=\"{{columns[column].width ? ('width:' + columns[column].width) : ''}}\"\r\n mat-sort-header\r\n [disabled]=\"!columns[column].sort\"\r\n >\r\n {{columns[column].translateColumnName }}\r\n <span class=\"material-icons search-icon\" [matMenuTriggerFor]=\"menu\" (click)=\"$event.stopPropagation()\"\r\n *ngIf=\"columns[column].search\">\r\n search\r\n </span>\r\n <mat-menu #menu=\"matMenu\" xPosition=\"before\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{columns[column].searchLabel || 'Search'}}</mat-label>\r\n <input matInput (keyup)=\"applySearch($event)\" [(ngModel)]=\"searchModel\"\r\n (click)=\"$event.stopPropagation()\">\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"searchModel=''\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </mat-menu>\r\n </th>\r\n <td mat-cell *matCellDef=\"let element\"\r\n style=\"{{columns[column].width ? ('width:' + columns[column].width) : ''}}\">\r\n <div class=\"actions-container\" [ngClass]=\"{'justify-content-end': columns[column].flexRight}\"\r\n *ngIf=\"columns[column].actions && columns[column].actions!.length > 0\">\r\n <ng-container *ngFor=\"let action of columns[column].actions\">\r\n <ng-container *ngIf=\"checkIfActionVisible(element, action)\">\r\n <button class=\"col-auto\" mat-icon-button\r\n type=\"button\"\r\n *ngIf=\"!action.url && action.action\"\r\n matTooltip=\"{{(action.tooltipName || '') }}\"\r\n [matTooltipDisabled]=\"!!!(action.tooltipName)\"\r\n (click)=\"action.action(element)\"\r\n >\r\n <span class=\"material-icons\">{{action.iconName}}</span>\r\n </button>\r\n\r\n <a *ngIf=\"action.url\" [routerLink]=\"action.url\">\r\n <button class=\"col-auto\" mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"{{(action.tooltipName || '') }}\"\r\n [matTooltipDisabled]=\"!!!(action.tooltipName)\"\r\n >\r\n <span class=\"material-icons\">{{action.iconName}}</span>\r\n </button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!columns[column].actions\">\r\n <ng-container *ngIf=\"columns[column].translateValue\">\r\n <p style=\"margin:0;padding:0\">{{columns[column].translateValue![element[column]] || '' }}</p>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!columns[column].translateValue\">\r\n <ng-container *ngIf=\"!columns[column].type || columns[column].type === 'string'\">\r\n <p style=\"margin:0;padding:0\">{{element[column]}}</p>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"columns[column].type === 'date'\">\r\n <p style=\"margin:0;padding:0\">{{element[column] | stDateTimeFormatPipe}}</p>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"tableSettings?.rowClickAction ? tableSettings.rowClickAction(row) : null\"></tr>\r\n </table>\r\n <mat-paginator [pageSizeOptions]=\"[5, 10, 15, 20, 25]\" showFirstLastButtons></mat-paginator>\r\n</div>\r\n", styles: [".search-form button{height:40px}.search-form mat-form-field:first-child{padding-left:0}.search-form mat-form-field:last-child{padding-right:0}.search-form .clear{padding:0}.search-form .clear i{height:20px;width:20px;font-size:20px;cursor:pointer}table{width:100%}table::ng-deep thead tr{background-color:#fff9c4}table::ng-deep thead tr th{border-color:#fdd835}table::ng-deep thead tr th:hover .order-icon{display:none}table::ng-deep thead tr th .order-icon{opacity:.4;font-size:20px}table::ng-deep thead tr th .search-icon{position:absolute;top:3px;right:0;opacity:.5;font-size:20px;margin:0 5px;font-weight:600}table::ng-deep thead tr th .search-icon:hover{opacity:.8}table::ng-deep thead tr th .mat-sort-header-content{text-align:left}table::ng-deep tbody tr{cursor:pointer}table::ng-deep tbody tr.active{background-color:#a5d6a7}table::ng-deep tbody tr:hover{background-color:#a5d6a7}table::ng-deep tbody tr.disabled{cursor:not-allowed}table::ng-deep tbody tr.disabled:hover{background-color:inherit}table::ng-deep tbody tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}table::ng-deep tbody tr td>div{max-height:200px;overflow:hidden;overflow-y:auto}table::ng-deep tbody tr td .actions-container{display:flex}table::ng-deep tbody tr td a button{color:#000}table::ng-deep tbody tr td a i{color:#333}table::ng-deep .mat-column-active{width:48px}table.no-hover::ng-deep tbody tr{cursor:default}table.no-hover::ng-deep tbody tr.active{background-color:transparent}table.no-hover::ng-deep tbody tr:hover{background-color:transparent}table.admin-table::ng-deep .actions-cell{width:100px}\n"], components: [{ type: i2.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"] }, { type: i3.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i5.ConfigurationsComponent, selector: "app-configurations[configurationsSettings]", inputs: ["configurationsSettings", "configurations", "initSelectedConfig"], outputs: ["createNewConfig", "removeConfig", "changeConfig"] }, { type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i9.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: i8.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i8.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i10.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }], directives: [{ type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i6.MatLabel, selector: "mat-label" }, { type: i13.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"] }, { type: i12.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.MatSuffix, selector: "[matSuffix]" }, { type: i9.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i8.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i8.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i8.MatCellDef, selector: "[matCellDef]" }, { type: i8.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i14.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i15.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i8.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i8.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }], pipes: { "stDateTimeFormatPipe": i16.DateTimeFormatPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
165
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LocalTableComponent, decorators: [{
|
|
166
|
+
type: Component,
|
|
167
|
+
args: [{ selector: 'ngx-st-local-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"local-table\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col row align-items-center\" style=\"padding: 0;\" *ngIf=\"configurationsSettings || allowPickColumns\">\r\n <div class=\"col-auto\" style=\"padding: 0;\" *ngIf=\"allowPickColumns\">\r\n <button mat-icon-button class=\"col-auto\" [matMenuTriggerFor]=\"columnsMenu\">\r\n <span class=\"material-icons-outlined\">\r\n view_week\r\n </span>\r\n </button>\r\n <mat-menu #columnsMenu=\"matMenu\" xPosition=\"after\">\r\n <ng-container *ngFor=\"let column of columnsArray\">\r\n <div mat-menu-item *ngIf=\"!column.notShowInColumnPick\">\r\n <mat-checkbox\r\n [(ngModel)]=\"column.visible\"\r\n (ngModelChange)=\"columnVisibleChanged(column)\"\r\n style=\"margin-top: 5px;\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n {{column.translateColumnName}}\r\n </mat-checkbox>\r\n </div>\r\n </ng-container>\r\n </mat-menu>\r\n </div>\r\n\r\n <app-configurations\r\n *ngIf=\"configurationsSettings\"\r\n [configurationsSettings]=\"configurationsSettings\"\r\n [configurations]=\"configurations\"\r\n [initSelectedConfig]=\"initConfig\"\r\n (createNewConfig)=\"newConfigCreated($event)\"\r\n (removeConfig)=\"configRemoved($event)\"\r\n (changeConfig)=\"configChanged($event)\"\r\n ></app-configurations>\r\n </div>\r\n\r\n <div class=\"col\" style=\"padding: 0;\" *ngIf=\"globalSearchSettings?.show\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{globalSearchSettings?.label || 'Search'}}</mat-label>\r\n <input matInput (keyup)=\"applySearch($event)\" [(ngModel)]=\"searchModel\">\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearSearch()\">\r\n <mat-icon style=\"font-size: 22px\">close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n\r\n </div>\r\n\r\n <table [ngClass]=\"{'no-hover': !tableSettings?.rowClickAction}\" mat-table [dataSource]=\"tableSource\" matSort>\r\n\r\n <ng-container [matColumnDef]=\"column\" *ngFor=\"let column of displayedColumns\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n style=\"{{columns[column].width ? ('width:' + columns[column].width) : ''}}\"\r\n mat-sort-header\r\n [disabled]=\"!columns[column].sort\"\r\n >\r\n {{columns[column].translateColumnName }}\r\n <span class=\"material-icons search-icon\" [matMenuTriggerFor]=\"menu\" (click)=\"$event.stopPropagation()\"\r\n *ngIf=\"columns[column].search\">\r\n search\r\n </span>\r\n <mat-menu #menu=\"matMenu\" xPosition=\"before\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{columns[column].searchLabel || 'Search'}}</mat-label>\r\n <input matInput (keyup)=\"applySearch($event)\" [(ngModel)]=\"searchModel\"\r\n (click)=\"$event.stopPropagation()\">\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"searchModel=''\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </mat-menu>\r\n </th>\r\n <td mat-cell *matCellDef=\"let element\"\r\n style=\"{{columns[column].width ? ('width:' + columns[column].width) : ''}}\">\r\n <div class=\"actions-container\" [ngClass]=\"{'justify-content-end': columns[column].flexRight}\"\r\n *ngIf=\"columns[column].actions && columns[column].actions!.length > 0\">\r\n <ng-container *ngFor=\"let action of columns[column].actions\">\r\n <ng-container *ngIf=\"checkIfActionVisible(element, action)\">\r\n <button class=\"col-auto\" mat-icon-button\r\n type=\"button\"\r\n *ngIf=\"!action.url && action.action\"\r\n matTooltip=\"{{(action.tooltipName || '') }}\"\r\n [matTooltipDisabled]=\"!!!(action.tooltipName)\"\r\n (click)=\"action.action(element)\"\r\n >\r\n <span class=\"material-icons\">{{action.iconName}}</span>\r\n </button>\r\n\r\n <a *ngIf=\"action.url\" [routerLink]=\"action.url\">\r\n <button class=\"col-auto\" mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"{{(action.tooltipName || '') }}\"\r\n [matTooltipDisabled]=\"!!!(action.tooltipName)\"\r\n >\r\n <span class=\"material-icons\">{{action.iconName}}</span>\r\n </button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!columns[column].actions\">\r\n <ng-container *ngIf=\"columns[column].translateValue\">\r\n <p style=\"margin:0;padding:0\">{{columns[column].translateValue![element[column]] || '' }}</p>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!columns[column].translateValue\">\r\n <ng-container *ngIf=\"!columns[column].type || columns[column].type === 'string'\">\r\n <p style=\"margin:0;padding:0\">{{element[column]}}</p>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"columns[column].type === 'date'\">\r\n <p style=\"margin:0;padding:0\">{{element[column] | stDateTimeFormatPipe}}</p>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"tableSettings?.rowClickAction ? tableSettings.rowClickAction(row) : null\"></tr>\r\n </table>\r\n <mat-paginator [pageSizeOptions]=\"[5, 10, 15, 20, 25]\" showFirstLastButtons></mat-paginator>\r\n</div>\r\n", styles: [".search-form button{height:40px}.search-form mat-form-field:first-child{padding-left:0}.search-form mat-form-field:last-child{padding-right:0}.search-form .clear{padding:0}.search-form .clear i{height:20px;width:20px;font-size:20px;cursor:pointer}table{width:100%}table::ng-deep thead tr{background-color:#fff9c4}table::ng-deep thead tr th{border-color:#fdd835}table::ng-deep thead tr th:hover .order-icon{display:none}table::ng-deep thead tr th .order-icon{opacity:.4;font-size:20px}table::ng-deep thead tr th .search-icon{position:absolute;top:3px;right:0;opacity:.5;font-size:20px;margin:0 5px;font-weight:600}table::ng-deep thead tr th .search-icon:hover{opacity:.8}table::ng-deep thead tr th .mat-sort-header-content{text-align:left}table::ng-deep tbody tr{cursor:pointer}table::ng-deep tbody tr.active{background-color:#a5d6a7}table::ng-deep tbody tr:hover{background-color:#a5d6a7}table::ng-deep tbody tr.disabled{cursor:not-allowed}table::ng-deep tbody tr.disabled:hover{background-color:inherit}table::ng-deep tbody tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}table::ng-deep tbody tr td>div{max-height:200px;overflow:hidden;overflow-y:auto}table::ng-deep tbody tr td .actions-container{display:flex}table::ng-deep tbody tr td a button{color:#000}table::ng-deep tbody tr td a i{color:#333}table::ng-deep .mat-column-active{width:48px}table.no-hover::ng-deep tbody tr{cursor:default}table.no-hover::ng-deep tbody tr.active{background-color:transparent}table.no-hover::ng-deep tbody tr:hover{background-color:transparent}table.admin-table::ng-deep .actions-cell{width:100px}\n"] }]
|
|
168
|
+
}], ctorParameters: function () { return [{ type: i1.LocalTableService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { paginator: [{
|
|
169
|
+
type: ViewChild,
|
|
170
|
+
args: [MatPaginator]
|
|
171
|
+
}], sort: [{
|
|
172
|
+
type: ViewChild,
|
|
173
|
+
args: [MatSort]
|
|
174
|
+
}], tableSettings: [{
|
|
175
|
+
type: Input
|
|
176
|
+
}], globalSearchSettings: [{
|
|
177
|
+
type: Input
|
|
178
|
+
}], pageSize: [{
|
|
179
|
+
type: Input
|
|
180
|
+
}], allowPickColumns: [{
|
|
181
|
+
type: Input
|
|
182
|
+
}], configurationsSettings: [{
|
|
183
|
+
type: Input
|
|
184
|
+
}], localStorageName: [{
|
|
185
|
+
type: Input
|
|
186
|
+
}], columns: [{
|
|
187
|
+
type: Input
|
|
188
|
+
}], data: [{
|
|
189
|
+
type: Input
|
|
190
|
+
}] } });
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvbG9jYWwtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvbG9jYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQix1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0gsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBY2pELE1BQU0sT0FBTyxtQkFBbUI7SUF5RDVCLFlBQ1ksaUJBQW9DLEVBQ3BDLGNBQWlDO1FBRGpDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBaEQ3QyxhQUFRLEdBQVcsRUFBRSxDQUFDO1FBR3RCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQU1sQyxxQkFBZ0IsR0FBVyxFQUFFLENBQUM7UUF3QjlCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLHFCQUFnQixHQUFhLEVBQUUsQ0FBQztRQUtoQyxtQkFBYyxHQUF1QyxFQUFFLENBQUM7UUFDeEQsZUFBVSxHQUE0QyxJQUFJLENBQUM7UUFDM0QsaUJBQVksR0FBNEMsSUFBSSxDQUFDO1FBRXJELFVBQUssR0FBVSxFQUFFLENBQUM7UUFDbEIsYUFBUSxHQUE2QixF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Qy9CLENBQUM7O2dIQS9MUSxtQkFBbUI7b0dBQW5CLG1CQUFtQixxWEFDakIsWUFBWSx1RUFDWixPQUFPLGdEQ3JCdEIsMHJPQThIQTsyRkQzR2EsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNJLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNO3dJQUd0QixTQUFTO3NCQUFqQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0gsSUFBSTtzQkFBdkIsU0FBUzt1QkFBQyxPQUFPO2dCQUdsQixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sb0JBQW9CO3NCQURuQixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixzQkFBc0I7c0JBRHJCLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSUYsT0FBTztzQkFEVixLQUFLO2dCQVlGLElBQUk7c0JBRFAsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBTdExvY2FsVGFibGVDb2x1bW5zTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbG9jYWwtdGFibGUvc3QtbG9jYWwtdGFibGUtY29sdW1ucy5tb2RlbCc7XHJcbmltcG9ydCB7IExvY2FsVGFibGVBY3Rpb25Db2x1bW5Nb2RlbCwgU3RMb2NhbFRhYmxlQ29sdW1uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbG9jYWwtdGFibGUvc3QtbG9jYWwtdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zb3J0XCI7XHJcbmltcG9ydCB7IFN0Q29uZmlndXJhdGlvbnNTZXR0aW5nc01vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVscy9sb2NhbC10YWJsZS9zdC1jb25maWd1cmF0aW9ucy1zZXR0aW5ncy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBTdEdsb2JhbFNlYXJjaFNldHRpbmdzTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2xvY2FsLXRhYmxlL3N0LWdsb2JhbC1zZWFyY2gtc2V0dGluZ3MubW9kZWxcIjtcclxuaW1wb3J0IHsgU3RMb2NhbFN0b3JhZ2VDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2xvY2FsLXRhYmxlL3N0LWxvY2FsLXN0b3JhZ2UtY29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBMb2NhbFRhYmxlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9sb2NhbC10YWJsZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydC9zb3J0LWRpcmVjdGlvblwiO1xyXG5pbXBvcnQgeyBTdFRhYmxlU2V0dGluZ3NNb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvbG9jYWwtdGFibGUvc3QtdGFibGUtc2V0dGluZ3MubW9kZWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICduZ3gtc3QtbG9jYWwtdGFibGUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xvY2FsLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2xvY2FsLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9jYWxUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgICBAVmlld0NoaWxkKE1hdFNvcnQpIHNvcnQ6IE1hdFNvcnQ7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHRhYmxlU2V0dGluZ3M6IFN0VGFibGVTZXR0aW5nc01vZGVsO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnbG9iYWxTZWFyY2hTZXR0aW5nczogU3RHbG9iYWxTZWFyY2hTZXR0aW5nc01vZGVsO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwYWdlU2l6ZTogbnVtYmVyID0gMTA7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGFsbG93UGlja0NvbHVtbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgY29uZmlndXJhdGlvbnNTZXR0aW5nczogU3RDb25maWd1cmF0aW9uc1NldHRpbmdzTW9kZWw7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGxvY2FsU3RvcmFnZU5hbWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgY29sdW1ucyhjb2x1bW5zOiBTdExvY2FsVGFibGVDb2x1bW5zTW9kZWwpIHtcclxuICAgICAgICB0aGlzLl9jb2x1bW5zID0gY29sdW1ucztcclxuICAgICAgICB0aGlzLmNvbHVtbnNBcnJheSA9IHRoaXMuZ2V0Q29sdW1uc0FycmF5KCk7XHJcbiAgICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbHVtbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBkYXRhKGRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGEgfHwgW107XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VGFibGVTb3VyY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2hNb2RlbCA9ICcnO1xyXG4gICAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW10gPSBbXTtcclxuICAgIHRhYmxlU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PjtcclxuXHJcbiAgICBjb2x1bW5zQXJyYXk6IFN0TG9jYWxUYWJsZUNvbHVtbk1vZGVsW107XHJcblxyXG4gICAgY29uZmlndXJhdGlvbnM6IFN0TG9jYWxTdG9yYWdlQ29uZmlndXJhdGlvbk1vZGVsW10gPSBbXTtcclxuICAgIGluaXRDb25maWc6IFN0TG9jYWxTdG9yYWdlQ29uZmlndXJhdGlvbk1vZGVsIHwgbnVsbCA9IG51bGw7XHJcbiAgICBhY3RpdmVDb25maWc6IFN0TG9jYWxTdG9yYWdlQ29uZmlndXJhdGlvbk1vZGVsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgcHJpdmF0ZSBfZGF0YTogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgX2NvbHVtbnM6IFN0TG9jYWxUYWJsZUNvbHVtbnNNb2RlbCA9IHt9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgbG9jYWxUYWJsZVNlcnZpY2U6IExvY2FsVGFibGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VOYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VTaXplID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VOYW1lKTtcclxuICAgICAgICAgICAgaWYgKHBhZ2VTaXplKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gcGFyc2VJbnQocGFnZVNpemUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uc1NldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9jYWxUYWJsZVNlcnZpY2UubG9jYWxTdG9yYWdlTmFtZSA9IHRoaXMuY29uZmlndXJhdGlvbnNTZXR0aW5ncz8ubG9jYWxTdG9yYWdlTmFtZSB8fCAnJztcclxuICAgICAgICAgICAgdGhpcy5sb2FkQ29uZmlncygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbnNTZXR0aW5ncykge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdlLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVDb25maWcucGFnZVNpemUgPSByZXMucGFnZVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb25maWdzVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNvcnQuc29ydENoYW5nZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVDb25maWcuc29ydEZpZWxkTmFtZSA9IHJlcy5hY3RpdmU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVDb25maWcuc29ydERpcmVjdGlvbiA9IHJlcy5kaXJlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb25maWdzVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlTZWFyY2goZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoVmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xyXG4gICAgICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyID0gc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJTZWFyY2goKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hNb2RlbCA9ICcnO1xyXG4gICAgICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyID0gdGhpcy5zZWFyY2hNb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmQWN0aW9uVmlzaWJsZShyb3c6IGFueSwgYWN0aW9uOiBMb2NhbFRhYmxlQWN0aW9uQ29sdW1uTW9kZWwpIHtcclxuICAgICAgICBpZiAoYWN0aW9uLnNob3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5zaG93KHJvdyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbHVtblZpc2libGVDaGFuZ2VkKGNvbHVtbjogU3RMb2NhbFRhYmxlQ29sdW1uTW9kZWwpIHtcclxuICAgICAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnMoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDb25maWdzVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdDb25maWdDcmVhdGVkKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IG5ld0NvbmZpZyA9IHRoaXMuZ2VuZXJhdGVOZXdDb25maWcobmFtZSk7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5wdXNoKG5ld0NvbmZpZyk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ29uZmlnc1RvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgdGhpcy5pbml0Q29uZmlnID0gbmV3Q29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpZ1JlbW92ZWQoY29uZmlnSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmZpbHRlcihjb25maWcgPT4gY29uZmlnLmNvbmZpZ0lkICE9PSBjb25maWdJZCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDb25maWdzVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maWdDaGFuZ2VkKGNvbmZpZ0lkOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVDb25maWcgPSAoY29uZmlnSWQpID8gdGhpcy5jb25maWd1cmF0aW9ucy5maW5kKGNvbmZpZyA9PiBjb25maWcuY29uZmlnSWQgPT09IGNvbmZpZ0lkKSEgOiBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZUNvbmZpZykge1xyXG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlQ29uZmlnKHRoaXMuYWN0aXZlQ29uZmlnLnBhZ2VTaXplLCB0aGlzLmFjdGl2ZUNvbmZpZy5jb2x1bW5zRGlzYWJsZWQsIHRoaXMuYWN0aXZlQ29uZmlnLnNvcnRGaWVsZE5hbWUsIHRoaXMuYWN0aXZlQ29uZmlnLnNvcnREaXJlY3Rpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVDb25maWcodGhpcy5wYWdlU2l6ZSwgW10sIG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VhcmNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ29uZmlnc1RvTG9jYWxTdG9yYWdlKCkge1xyXG4gICAgICAgIHRoaXMubG9jYWxUYWJsZVNlcnZpY2Uuc2F2ZUNvbmZpZ3ModGhpcy5jb25maWd1cmF0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRUYWJsZVNvdXJjZSgpIHtcclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KHRoaXMuX2RhdGEpO1xyXG4gICAgICAgIHRoaXMudGFibGVTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG4gICAgICAgIHRoaXMuY2xlYXJTZWFyY2goKTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0RGlzcGxheWVkQ29sdW1ucygpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmZpbHRlcigoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zW2NvbHVtbl0udmlzaWJsZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENvbHVtbnNBcnJheSgpOiBTdExvY2FsVGFibGVDb2x1bW5Nb2RlbFtdIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fY29sdW1ucylcclxuICAgICAgICAgICAgLm1hcCgoY29sdW1uKSA9PiB0aGlzLl9jb2x1bW5zW2NvbHVtbl0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZENvbmZpZ3MoKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucyA9IHRoaXMubG9jYWxUYWJsZVNlcnZpY2UuZ2V0Q29uZmlncygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2VuZXJhdGVOZXdDb25maWcoY29uZmlnTmFtZTogc3RyaW5nKTogU3RMb2NhbFN0b3JhZ2VDb25maWd1cmF0aW9uTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGNvbmZpZ0lkOiBEYXRlLm5vdygpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIGNvbmZpZ05hbWU6IGNvbmZpZ05hbWUsXHJcbiAgICAgICAgICAgIGNvbHVtbnNEaXNhYmxlZDogdGhpcy5jb2x1bW5zQXJyYXkuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLnZpc2libGUpLm1hcChjb2x1bW4gPT4gY29sdW1uLnRyYW5zbGF0ZUNvbHVtbk5hbWUpLFxyXG4gICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXHJcbiAgICAgICAgICAgIHNvcnRGaWVsZE5hbWU6ICh0aGlzLnNvcnQuZGlyZWN0aW9uICYmIHRoaXMuc29ydC5hY3RpdmUpID8gdGhpcy5zb3J0LmFjdGl2ZSA6IG51bGwsXHJcbiAgICAgICAgICAgIHNvcnREaXJlY3Rpb246IHRoaXMuc29ydC5kaXJlY3Rpb24gfHwgbnVsbFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFRhYmxlQ29uZmlnKHBhZ2VTaXplOiBudW1iZXIsIGRpc2FibGVkQ29sdW1uczogc3RyaW5nW10sIHNvcnRGaWVsZE5hbWU6IHN0cmluZyB8IG51bGwsIHNvcnREaXJlY3Rpb246IFNvcnREaXJlY3Rpb24gfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSBwYWdlU2l6ZTtcclxuICAgICAgICB0aGlzLnNvcnQuc29ydCh7IGlkOiBzb3J0RmllbGROYW1lIHx8ICcnLCBzdGFydDogc29ydERpcmVjdGlvbiB8fCAnYXNjJywgZGlzYWJsZUNsZWFyOiBmYWxzZSB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb2x1bW5zQXJyYXkuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICAgICAgICBjb2x1bW4udmlzaWJsZSA9IGRpc2FibGVkQ29sdW1ucy5pbmRleE9mKGNvbHVtbi50cmFuc2xhdGVDb2x1bW5OYW1lKSA9PT0gLTE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImxvY2FsLXRhYmxlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwicGFkZGluZzogMDtcIiAqbmdJZj1cImNvbmZpZ3VyYXRpb25zU2V0dGluZ3MgfHwgYWxsb3dQaWNrQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIiBzdHlsZT1cInBhZGRpbmc6IDA7XCIgKm5nSWY9XCJhbGxvd1BpY2tDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImNvbC1hdXRvXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbHVtbnNNZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3X3dlZWtcclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjY29sdW1uc01lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYWZ0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc0FycmF5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0LW1lbnUtaXRlbSAqbmdJZj1cIiFjb2x1bW4ubm90U2hvd0luQ29sdW1uUGlja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbHVtbi52aXNpYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY29sdW1uVmlzaWJsZUNoYW5nZWQoY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDogNXB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29sdW1uLnRyYW5zbGF0ZUNvbHVtbk5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8YXBwLWNvbmZpZ3VyYXRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb25maWd1cmF0aW9uc1NldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29uZmlndXJhdGlvbnNTZXR0aW5nc109XCJjb25maWd1cmF0aW9uc1NldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29uZmlndXJhdGlvbnNdPVwiY29uZmlndXJhdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpbml0U2VsZWN0ZWRDb25maWddPVwiaW5pdENvbmZpZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNyZWF0ZU5ld0NvbmZpZyk9XCJuZXdDb25maWdDcmVhdGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChyZW1vdmVDb25maWcpPVwiY29uZmlnUmVtb3ZlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlQ29uZmlnKT1cImNvbmZpZ0NoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2FwcC1jb25maWd1cmF0aW9ucz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwicGFkZGluZzogMDtcIiAqbmdJZj1cImdsb2JhbFNlYXJjaFNldHRpbmdzPy5zaG93XCI+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dsb2JhbFNlYXJjaFNldHRpbmdzPy5sYWJlbCB8fCAnU2VhcmNoJ319PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgKGtleXVwKT1cImFwcGx5U2VhcmNoKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInNlYXJjaE1vZGVsXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkNsZWFyXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6IDIycHhcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8dGFibGUgW25nQ2xhc3NdPVwieyduby1ob3Zlcic6ICF0YWJsZVNldHRpbmdzPy5yb3dDbGlja0FjdGlvbn1cIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwidGFibGVTb3VyY2VcIiBtYXRTb3J0PlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uXCIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBkaXNwbGF5ZWRDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxyXG4gICAgICAgICAgICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ7e2NvbHVtbnNbY29sdW1uXS53aWR0aCA/ICgnd2lkdGg6JyArIGNvbHVtbnNbY29sdW1uXS53aWR0aCkgOiAnJ319XCJcclxuICAgICAgICAgICAgICAgICAgICBtYXQtc29ydC1oZWFkZXJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNvbHVtbnNbY29sdW1uXS5zb3J0XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3tjb2x1bW5zW2NvbHVtbl0udHJhbnNsYXRlQ29sdW1uTmFtZSAgfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgc2VhcmNoLWljb25cIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW5zW2NvbHVtbl0uc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tjb2x1bW5zW2NvbHVtbl0uc2VhcmNoTGFiZWwgfHwgJ1NlYXJjaCd9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgKGtleXVwKT1cImFwcGx5U2VhcmNoKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInNlYXJjaE1vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJDbGVhclwiIChjbGljayk9XCJzZWFyY2hNb2RlbD0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwie3tjb2x1bW5zW2NvbHVtbl0ud2lkdGggPyAoJ3dpZHRoOicgKyBjb2x1bW5zW2NvbHVtbl0ud2lkdGgpIDogJyd9fVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieydqdXN0aWZ5LWNvbnRlbnQtZW5kJzogY29sdW1uc1tjb2x1bW5dLmZsZXhSaWdodH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbnNbY29sdW1uXS5hY3Rpb25zICYmIGNvbHVtbnNbY29sdW1uXS5hY3Rpb25zIS5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbHVtbnNbY29sdW1uXS5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja0lmQWN0aW9uVmlzaWJsZShlbGVtZW50LCBhY3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29sLWF1dG9cIiBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWFjdGlvbi51cmwgJiYgYWN0aW9uLmFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eyhhY3Rpb24udG9vbHRpcE5hbWUgfHwgJycpIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhISEoYWN0aW9uLnRvb2x0aXBOYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb24uYWN0aW9uKGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+e3thY3Rpb24uaWNvbk5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiYWN0aW9uLnVybFwiIFtyb3V0ZXJMaW5rXT1cImFjdGlvbi51cmxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29sLWF1dG9cIiBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7KGFjdGlvbi50b29sdGlwTmFtZSB8fCAnJykgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhISEoYWN0aW9uLnRvb2x0aXBOYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+e3thY3Rpb24uaWNvbk5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbnNbY29sdW1uXS5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbnNbY29sdW1uXS50cmFuc2xhdGVWYWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MFwiPnt7Y29sdW1uc1tjb2x1bW5dLnRyYW5zbGF0ZVZhbHVlIVtlbGVtZW50W2NvbHVtbl1dIHx8ICcnIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbnNbY29sdW1uXS50cmFuc2xhdGVWYWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbnNbY29sdW1uXS50eXBlIHx8IGNvbHVtbnNbY29sdW1uXS50eXBlID09PSAnc3RyaW5nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjBcIj57e2VsZW1lbnRbY29sdW1uXX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5zW2NvbHVtbl0udHlwZSA9PT0gJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MFwiPnt7ZWxlbWVudFtjb2x1bW5dIHwgc3REYXRlVGltZUZvcm1hdFBpcGV9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cclxuICAgICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucztcIiAoY2xpY2spPVwidGFibGVTZXR0aW5ncz8ucm93Q2xpY2tBY3Rpb24gPyB0YWJsZVNldHRpbmdzLnJvd0NsaWNrQWN0aW9uKHJvdykgOiBudWxsXCI+PC90cj5cclxuICAgIDwvdGFibGU+XHJcbiAgICA8bWF0LXBhZ2luYXRvciBbcGFnZVNpemVPcHRpb25zXT1cIls1LCAxMCwgMTUsIDIwLCAyNV1cIiBzaG93Rmlyc3RMYXN0QnV0dG9ucz48L21hdC1wYWdpbmF0b3I+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { MatPaginator } from '@angular/material/paginator';
|
|
3
|
+
import { MatTableDataSource } from '@angular/material/table';
|
|
4
|
+
import { FormControl } from '@angular/forms';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/material/form-field";
|
|
7
|
+
import * as i2 from "@angular/material/table";
|
|
8
|
+
import * as i3 from "@angular/material/paginator";
|
|
9
|
+
import * as i4 from "@angular/common";
|
|
10
|
+
import * as i5 from "@angular/material/input";
|
|
11
|
+
import * as i6 from "@angular/forms";
|
|
12
|
+
export class SelectTable {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.search = new FormControl('');
|
|
15
|
+
this.rowSelected = [];
|
|
16
|
+
this._validError = false;
|
|
17
|
+
this.required = false;
|
|
18
|
+
this.multiple = false;
|
|
19
|
+
this.searchLabel = 'Search';
|
|
20
|
+
this.selectedLabel = 'Selected';
|
|
21
|
+
this.returnRowSelected = new EventEmitter();
|
|
22
|
+
}
|
|
23
|
+
set setInitColumns(col) {
|
|
24
|
+
this.columns = ['active', ...Object.keys(col)];
|
|
25
|
+
this.initColumns = col;
|
|
26
|
+
}
|
|
27
|
+
set tableData(data) {
|
|
28
|
+
this.tableSource = new MatTableDataSource(data);
|
|
29
|
+
this.tableSource.paginator = this.paginator;
|
|
30
|
+
}
|
|
31
|
+
set validError(error) {
|
|
32
|
+
this._validError = error;
|
|
33
|
+
}
|
|
34
|
+
get validError() {
|
|
35
|
+
return this._validError;
|
|
36
|
+
}
|
|
37
|
+
ngOnInit() {
|
|
38
|
+
this.search.valueChanges.subscribe(res => {
|
|
39
|
+
this.tableSource.filter = res.trim().toLowerCase();
|
|
40
|
+
});
|
|
41
|
+
setTimeout(() => {
|
|
42
|
+
if (this.initSearchVal) {
|
|
43
|
+
this.search.setValue(this.initSearchVal);
|
|
44
|
+
this.rowClick(this.initSelected);
|
|
45
|
+
}
|
|
46
|
+
}, 1000);
|
|
47
|
+
}
|
|
48
|
+
clearSearch() {
|
|
49
|
+
this.search.setValue('');
|
|
50
|
+
}
|
|
51
|
+
rowClick(row) {
|
|
52
|
+
const found = this.rowSelected.find((tmpRow) => tmpRow === row);
|
|
53
|
+
if (found) {
|
|
54
|
+
this.rowSelected = this.rowSelected.filter((tmpRow) => tmpRow !== row);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
if (this.multiple) {
|
|
58
|
+
this.rowSelected.push(row);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.rowSelected = [row];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
this.returnRowSelected.emit(this.rowSelected);
|
|
65
|
+
}
|
|
66
|
+
checkActiveRow(row) {
|
|
67
|
+
return !!(this.rowSelected.find(activeRow => activeRow === row));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
SelectTable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SelectTable, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
71
|
+
SelectTable.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SelectTable, selector: "ngx-st-select-table", inputs: { title: "title", required: "required", multiple: "multiple", initSelected: "initSelected", initSearchVal: "initSearchVal", searchLabel: "searchLabel", selectedLabel: "selectedLabel", setInitColumns: "setInitColumns", tableData: "tableData", validError: "validError" }, outputs: { returnRowSelected: "returnRowSelected" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], ngImport: i0, template: "<div class=\"shared-table-selector\">\r\n <p class=\"title\" [ngClass]=\"{'error-text': validError}\">{{title}} {{required ? '*' : ''}}</p>\r\n\r\n <div class=\"search-form row align-items-center\">\r\n <div class=\"col-sm-12 col-md row align-items-center\">\r\n <mat-form-field class=\"col\">\r\n <input matInput placeholder=\"{{searchLabel}}\" [formControl]=\"search\">\r\n </mat-form-field>\r\n <div class=\"clear col-auto\">\r\n <i class=\"material-icons\" (click)=\"clearSearch()\">clear</i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <table mat-table [dataSource]=\"tableSource\">\r\n <ng-container *ngFor=\"let col of columns\" [matColumnDef]=\"col\" >\r\n <th mat-header-cell *matHeaderCellDef> {{(col === 'active') ? selectedLabel : initColumns[col]}} </th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <ng-container *ngIf=\"col === 'active'\">\r\n <i *ngIf=\"checkActiveRow(element)\" class=\"material-icons active-row\">done</i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"col !== 'active'\">\r\n {{element[col]}}\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"columns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: columns;\" (click)=\"rowClick(row)\" [ngClass]=\"{'active': checkActiveRow(row)}\"></tr>\r\n </table>\r\n <mat-paginator [pageSizeOptions]=\"[5]\"></mat-paginator>\r\n</div>\r\n", styles: [".title{margin-bottom:0;margin-top:1rem;font-weight:500}.title.error-text{color:#ef5350}\n", ".search-form button{height:40px}.search-form mat-form-field:first-child{padding-left:0}.search-form mat-form-field:last-child{padding-right:0}.search-form .clear{padding:0}.search-form .clear i{height:20px;width:20px;font-size:20px;cursor:pointer}table{width:100%}table::ng-deep thead tr{background-color:#fff9c4}table::ng-deep thead tr th{border-color:#fdd835}table::ng-deep tbody>tr{cursor:pointer}table::ng-deep tbody>tr.active{background-color:#a5d6a7}table::ng-deep tbody>tr:hover{background-color:#a5d6a7}table::ng-deep tbody>tr.disabled{cursor:not-allowed}table::ng-deep tbody>tr.disabled:hover{background-color:inherit}table::ng-deep tbody>tr.detail-row{height:0;cursor:default}table::ng-deep tbody>tr.detail-row:hover{background-color:transparent}table::ng-deep tbody>tr.detail-row .element-detail{overflow:hidden;display:flex}table::ng-deep tbody>tr.detail-row .element-detail p{padding:20px 0;margin-bottom:0;white-space:pre-wrap}table::ng-deep tbody>tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}table::ng-deep tbody>tr td>div{max-height:200px;overflow:hidden;overflow-y:auto}table::ng-deep tbody>tr td a button{color:#000}table::ng-deep tbody>tr td a i{color:#333}table::ng-deep .mat-column-active{width:48px}table.no-hover::ng-deep tbody tr{cursor:default}table.no-hover::ng-deep tbody tr.active{background-color:transparent}table.no-hover::ng-deep tbody tr:hover{background-color:transparent}table.admin-table::ng-deep .actions-cell{width:100px}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i3.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i2.MatCellDef, selector: "[matCellDef]" }, { type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }] });
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SelectTable, decorators: [{
|
|
73
|
+
type: Component,
|
|
74
|
+
args: [{ selector: 'ngx-st-select-table', template: "<div class=\"shared-table-selector\">\r\n <p class=\"title\" [ngClass]=\"{'error-text': validError}\">{{title}} {{required ? '*' : ''}}</p>\r\n\r\n <div class=\"search-form row align-items-center\">\r\n <div class=\"col-sm-12 col-md row align-items-center\">\r\n <mat-form-field class=\"col\">\r\n <input matInput placeholder=\"{{searchLabel}}\" [formControl]=\"search\">\r\n </mat-form-field>\r\n <div class=\"clear col-auto\">\r\n <i class=\"material-icons\" (click)=\"clearSearch()\">clear</i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <table mat-table [dataSource]=\"tableSource\">\r\n <ng-container *ngFor=\"let col of columns\" [matColumnDef]=\"col\" >\r\n <th mat-header-cell *matHeaderCellDef> {{(col === 'active') ? selectedLabel : initColumns[col]}} </th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <ng-container *ngIf=\"col === 'active'\">\r\n <i *ngIf=\"checkActiveRow(element)\" class=\"material-icons active-row\">done</i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"col !== 'active'\">\r\n {{element[col]}}\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"columns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: columns;\" (click)=\"rowClick(row)\" [ngClass]=\"{'active': checkActiveRow(row)}\"></tr>\r\n </table>\r\n <mat-paginator [pageSizeOptions]=\"[5]\"></mat-paginator>\r\n</div>\r\n", styles: [".title{margin-bottom:0;margin-top:1rem;font-weight:500}.title.error-text{color:#ef5350}\n", ".search-form button{height:40px}.search-form mat-form-field:first-child{padding-left:0}.search-form mat-form-field:last-child{padding-right:0}.search-form .clear{padding:0}.search-form .clear i{height:20px;width:20px;font-size:20px;cursor:pointer}table{width:100%}table::ng-deep thead tr{background-color:#fff9c4}table::ng-deep thead tr th{border-color:#fdd835}table::ng-deep tbody>tr{cursor:pointer}table::ng-deep tbody>tr.active{background-color:#a5d6a7}table::ng-deep tbody>tr:hover{background-color:#a5d6a7}table::ng-deep tbody>tr.disabled{cursor:not-allowed}table::ng-deep tbody>tr.disabled:hover{background-color:inherit}table::ng-deep tbody>tr.detail-row{height:0;cursor:default}table::ng-deep tbody>tr.detail-row:hover{background-color:transparent}table::ng-deep tbody>tr.detail-row .element-detail{overflow:hidden;display:flex}table::ng-deep tbody>tr.detail-row .element-detail p{padding:20px 0;margin-bottom:0;white-space:pre-wrap}table::ng-deep tbody>tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}table::ng-deep tbody>tr td>div{max-height:200px;overflow:hidden;overflow-y:auto}table::ng-deep tbody>tr td a button{color:#000}table::ng-deep tbody>tr td a i{color:#333}table::ng-deep .mat-column-active{width:48px}table.no-hover::ng-deep tbody tr{cursor:default}table.no-hover::ng-deep tbody tr.active{background-color:transparent}table.no-hover::ng-deep tbody tr:hover{background-color:transparent}table.admin-table::ng-deep .actions-cell{width:100px}\n"] }]
|
|
75
|
+
}], ctorParameters: function () { return []; }, propDecorators: { paginator: [{
|
|
76
|
+
type: ViewChild,
|
|
77
|
+
args: [MatPaginator]
|
|
78
|
+
}], title: [{
|
|
79
|
+
type: Input
|
|
80
|
+
}], required: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], multiple: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], initSelected: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], initSearchVal: [{
|
|
87
|
+
type: Input
|
|
88
|
+
}], searchLabel: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}], selectedLabel: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], returnRowSelected: [{
|
|
93
|
+
type: Output
|
|
94
|
+
}], setInitColumns: [{
|
|
95
|
+
type: Input
|
|
96
|
+
}], tableData: [{
|
|
97
|
+
type: Input
|
|
98
|
+
}], validError: [{
|
|
99
|
+
type: Input
|
|
100
|
+
}] } });
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LXRhYmxlL3NlbGVjdC10YWJsZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdC10YWJsZXMvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC10YWJsZS9zZWxlY3QtdGFibGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQU8zQyxNQUFNLE9BQU8sV0FBVztJQTBEcEI7UUFsREEsV0FBTSxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLGdCQUFXLEdBQVUsRUFBRSxDQUFDO1FBRWhCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBTTVCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFHakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQVNqQixnQkFBVyxHQUFHLFFBQVEsQ0FBQztRQUd2QixrQkFBYSxHQUFHLFVBQVUsQ0FBQztRQUczQixzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBd0I5QyxDQUFDO0lBdEJELElBQ0ksY0FBYyxDQUFDLEdBQThCO1FBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxD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ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtNYXRQYWdpbmF0b3J9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7TWF0VGFibGVEYXRhU291cmNlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7Rm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICduZ3gtc3Qtc2VsZWN0LXRhYmxlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtdGFibGUuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zZWxlY3QtdGFibGUuc2NzcycsICcuLi8uLi9iYXNlLXRhYmxlLnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VsZWN0VGFibGUgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuXHJcbiAgICB0YWJsZVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPGFueT47XHJcbiAgICBjb2x1bW5zOiBzdHJpbmdbXTtcclxuICAgIGluaXRDb2x1bW5zOiB7IFtjb2w6IHN0cmluZ106IHN0cmluZyB9O1xyXG5cclxuICAgIHNlYXJjaCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgICByb3dTZWxlY3RlZDogYW55W10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIF92YWxpZEVycm9yID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHRpdGxlOiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHJlcXVpcmVkID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIG11bHRpcGxlID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGluaXRTZWxlY3RlZDogYW55O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBpbml0U2VhcmNoVmFsOiBhbnk7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNlYXJjaExhYmVsID0gJ1NlYXJjaCc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNlbGVjdGVkTGFiZWwgPSAnU2VsZWN0ZWQnO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcmV0dXJuUm93U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgc2V0SW5pdENvbHVtbnMoY29sOiB7IFtjb2w6IHN0cmluZ106IHN0cmluZyB9KSB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gWydhY3RpdmUnLCAuLi5PYmplY3Qua2V5cyhjb2wpXTtcclxuICAgICAgICB0aGlzLmluaXRDb2x1bW5zID0gY29sO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgdGFibGVEYXRhKGRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8YW55PihkYXRhKTtcclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgdmFsaWRFcnJvcihlcnJvcjogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkRXJyb3IgPSBlcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdmFsaWRFcnJvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRFcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlYXJjaC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyID0gcmVzLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdFNlYXJjaFZhbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2guc2V0VmFsdWUodGhpcy5pbml0U2VhcmNoVmFsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm93Q2xpY2sodGhpcy5pbml0U2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJTZWFyY2goKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2guc2V0VmFsdWUoJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHJvd0NsaWNrKHJvdzogYW55KSB7XHJcbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLnJvd1NlbGVjdGVkLmZpbmQoKHRtcFJvdykgPT4gdG1wUm93ID09PSByb3cpO1xyXG4gICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGVkID0gdGhpcy5yb3dTZWxlY3RlZC5maWx0ZXIoKHRtcFJvdykgPT4gdG1wUm93ICE9PSByb3cpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGVkLnB1c2gocm93KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm93U2VsZWN0ZWQgPSBbcm93XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXR1cm5Sb3dTZWxlY3RlZC5lbWl0KHRoaXMucm93U2VsZWN0ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrQWN0aXZlUm93KHJvdzogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuICEhKHRoaXMucm93U2VsZWN0ZWQuZmluZChhY3RpdmVSb3cgPT4gYWN0aXZlUm93ID09PSByb3cpKTtcclxuICAgIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNoYXJlZC10YWJsZS1zZWxlY3RvclwiPlxyXG4gICAgPHAgY2xhc3M9XCJ0aXRsZVwiIFtuZ0NsYXNzXT1cInsnZXJyb3ItdGV4dCc6IHZhbGlkRXJyb3J9XCI+e3t0aXRsZX19IHt7cmVxdWlyZWQgPyAnKicgOiAnJ319PC9wPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtZm9ybSByb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQgcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cInt7c2VhcmNoTGFiZWx9fVwiIFtmb3JtQ29udHJvbF09XCJzZWFyY2hcIj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsZWFyIGNvbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIj5jbGVhcjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cInRhYmxlU291cmNlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbFwiID5cclxuICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4ge3soY29sID09PSAnYWN0aXZlJykgPyBzZWxlY3RlZExhYmVsIDogaW5pdENvbHVtbnNbY29sXX19IDwvdGg+XHJcbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sID09PSAnYWN0aXZlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY2hlY2tBY3RpdmVSb3coZWxlbWVudClcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGFjdGl2ZS1yb3dcIj5kb25lPC9pPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbCAhPT0gJ2FjdGl2ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2VsZW1lbnRbY29sXX19XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJjb2x1bW5zXCI+PC90cj5cclxuICAgICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogY29sdW1ucztcIiAoY2xpY2spPVwicm93Q2xpY2socm93KVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogY2hlY2tBY3RpdmVSb3cocm93KX1cIj48L3RyPlxyXG4gICAgPC90YWJsZT5cclxuICAgIDxtYXQtcGFnaW5hdG9yIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzVdXCI+PC9tYXQtcGFnaW5hdG9yPlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtY29uZmlndXJhdGlvbnMtc2V0dGluZ3MubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3QtdGFibGVzL3NyYy9saWIvbW9kZWxzL2xvY2FsLXRhYmxlL3N0LWNvbmZpZ3VyYXRpb25zLXNldHRpbmdzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFN0Q29uZmlndXJhdGlvbnNTZXR0aW5nc01vZGVsIHtcclxuICAgIGxvY2FsU3RvcmFnZU5hbWU6IHN0cmluZztcclxuICAgIHNlbGVjdExhYmVsOiBzdHJpbmc7XHJcbiAgICBjcmVhdGVMYWJlbDogc3RyaW5nO1xyXG4gICAgZGVsZXRlV2FybmluZ1RpdGxlOiBzdHJpbmc7XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtZ2xvYmFsLXNlYXJjaC1zZXR0aW5ncy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdC10YWJsZXMvc3JjL2xpYi9tb2RlbHMvbG9jYWwtdGFibGUvc3QtZ2xvYmFsLXNlYXJjaC1zZXR0aW5ncy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTdEdsb2JhbFNlYXJjaFNldHRpbmdzTW9kZWwge1xyXG4gICAgc2hvdzogYm9vbGVhbjtcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtbG9jYWwtc3RvcmFnZS1jb25maWd1cmF0aW9uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL21vZGVscy9sb2NhbC10YWJsZS9zdC1sb2NhbC1zdG9yYWdlLWNvbmZpZ3VyYXRpb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU3RMb2NhbFN0b3JhZ2VDb25maWd1cmF0aW9uTW9kZWwge1xyXG4gICAgY29uZmlnSWQ6IHN0cmluZztcclxuICAgIGNvbmZpZ05hbWU6IHN0cmluZztcclxuICAgIHBhZ2VTaXplOiBudW1iZXI7XHJcbiAgICBjb2x1bW5zRGlzYWJsZWQ6IHN0cmluZ1tdO1xyXG4gICAgc29ydEZpZWxkTmFtZTogc3RyaW5nIHwgbnVsbDtcclxuICAgIHNvcnREaXJlY3Rpb246ICdhc2MnfCdkZXNjJ3wnJ3xudWxsO1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtbG9jYWwtdGFibGUtY29sdW1uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL21vZGVscy9sb2NhbC10YWJsZS9zdC1sb2NhbC10YWJsZS1jb2x1bW4ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU3RMb2NhbFRhYmxlQ29sdW1uTW9kZWwge1xyXG4gICAgdHJhbnNsYXRlQ29sdW1uTmFtZTogc3RyaW5nO1xyXG4gICAgdmlzaWJsZTogYm9vbGVhbjtcclxuICAgIHR5cGU/OiAnc3RyaW5nJyB8ICdkYXRlJztcclxuICAgIHNvcnQ/OiBib29sZWFuO1xyXG4gICAgc2VhcmNoPzogYm9vbGVhbjtcclxuICAgIHNlYXJjaExhYmVsPzogc3RyaW5nO1xyXG4gICAgZmxleFJpZ2h0PzogYm9vbGVhbjtcclxuICAgIHdpZHRoPzogc3RyaW5nO1xyXG4gICAgYWN0aW9ucz86IExvY2FsVGFibGVBY3Rpb25Db2x1bW5Nb2RlbFtdIHwgdW5kZWZpbmVkO1xyXG4gICAgdHJhbnNsYXRlVmFsdWU/OiB7W3ZhbHVlOiBzdHJpbmddOiBzdHJpbmd9O1xyXG4gICAgbm90U2hvd0luQ29sdW1uUGljaz86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxUYWJsZUFjdGlvbkNvbHVtbk1vZGVsIHtcclxuICAgIGljb25OYW1lOiBzdHJpbmc7XHJcbiAgICB0b29sdGlwTmFtZT86IHN0cmluZztcclxuICAgIGFjdGlvbj86IChyb3c6IGFueSkgPT4gdm9pZDtcclxuICAgIHNob3c/OiAocm93OiBhbnkpID0+IGJvb2xlYW47XHJcbiAgICB1cmw/OiBzdHJpbmdbXTtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtbG9jYWwtdGFibGUtY29sdW1ucy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdC10YWJsZXMvc3JjL2xpYi9tb2RlbHMvbG9jYWwtdGFibGUvc3QtbG9jYWwtdGFibGUtY29sdW1ucy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdExvY2FsVGFibGVDb2x1bW5Nb2RlbH0gZnJvbSAnLi9zdC1sb2NhbC10YWJsZS1jb2x1bW4ubW9kZWwnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdExvY2FsVGFibGVDb2x1bW5zTW9kZWwge1xyXG4gICAgW2NvbHVtbk5hbWU6IHN0cmluZ106IFN0TG9jYWxUYWJsZUNvbHVtbk1vZGVsXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtdGFibGUtc2V0dGluZ3MubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3QtdGFibGVzL3NyYy9saWIvbW9kZWxzL2xvY2FsLXRhYmxlL3N0LXRhYmxlLXNldHRpbmdzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFN0VGFibGVTZXR0aW5nc01vZGVsIHtcclxuICAgIHJvd0NsaWNrQWN0aW9uOiAocm93OiBhbnkpID0+IHZvaWRcclxufVxyXG4iXX0=
|