ngx-st-tables 1.1.9 → 1.1.11

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.
Files changed (43) hide show
  1. package/README.md +24 -24
  2. package/assets/base-table.scss +155 -154
  3. package/esm2020/lib/components/local-table/configurations/configurations.component.mjs +69 -70
  4. package/esm2020/lib/components/local-table/local-table.component.mjs +259 -242
  5. package/esm2020/lib/components/select-table/select-table.component.mjs +100 -0
  6. package/esm2020/lib/models/st-configurations-settings.model.mjs +2 -0
  7. package/esm2020/lib/models/st-global-search-settings.model.mjs +2 -0
  8. package/esm2020/lib/models/st-local-storage-configuration.model.mjs +2 -0
  9. package/esm2020/lib/models/st-local-table-column.model.mjs +2 -0
  10. package/esm2020/lib/models/st-local-table-columns.model.mjs +2 -0
  11. package/esm2020/lib/models/st-table-settings.model.mjs +2 -0
  12. package/esm2020/lib/ngx-st-tables.module.mjs +89 -0
  13. package/esm2020/lib/services/local-table.service.mjs +36 -33
  14. package/esm2020/ngx-st-tables.mjs +4 -4
  15. package/esm2020/public-api.mjs +15 -15
  16. package/fesm2015/ngx-st-tables.mjs +487 -477
  17. package/fesm2015/ngx-st-tables.mjs.map +1 -1
  18. package/fesm2020/ngx-st-tables.mjs +489 -479
  19. package/fesm2020/ngx-st-tables.mjs.map +1 -1
  20. package/index.d.ts +5 -5
  21. package/lib/components/local-table/configurations/configurations.component.d.ts +27 -27
  22. package/lib/components/local-table/local-table.component.d.ts +63 -63
  23. package/lib/components/select-table/{select-table.d.ts → select-table.component.d.ts} +37 -37
  24. package/lib/models/{local-table/st-configurations-settings.model.d.ts → st-configurations-settings.model.d.ts} +6 -6
  25. package/lib/models/{local-table/st-global-search-settings.model.d.ts → st-global-search-settings.model.d.ts} +4 -4
  26. package/lib/models/{local-table/st-local-storage-configuration.model.d.ts → st-local-storage-configuration.model.d.ts} +8 -8
  27. package/lib/models/{local-table/st-local-table-column.model.d.ts → st-local-table-column.model.d.ts} +22 -22
  28. package/lib/models/{local-table/st-local-table-columns.model.d.ts → st-local-table-columns.model.d.ts} +4 -4
  29. package/lib/models/{local-table/st-table-settings.model.d.ts → st-table-settings.model.d.ts} +3 -3
  30. package/lib/ngx-st-tables.module.d.ts +24 -0
  31. package/lib/services/local-table.service.d.ts +11 -10
  32. package/package.json +4 -5
  33. package/public-api.d.ts +11 -11
  34. package/assets/base-collapse-table.scss +0 -50
  35. package/esm2020/lib/components/select-table/select-table.mjs +0 -101
  36. package/esm2020/lib/models/local-table/st-configurations-settings.model.mjs +0 -2
  37. package/esm2020/lib/models/local-table/st-global-search-settings.model.mjs +0 -2
  38. package/esm2020/lib/models/local-table/st-local-storage-configuration.model.mjs +0 -2
  39. package/esm2020/lib/models/local-table/st-local-table-column.model.mjs +0 -2
  40. package/esm2020/lib/models/local-table/st-local-table-columns.model.mjs +0 -2
  41. package/esm2020/lib/models/local-table/st-table-settings.model.mjs +0 -2
  42. package/esm2020/lib/st-tables.module.mjs +0 -97
  43. package/lib/st-tables.module.d.ts +0 -24
package/README.md CHANGED
@@ -1,24 +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.
1
+ # NgxStTables
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.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.
@@ -1,154 +1,155 @@
1
-
2
- .search-form {
3
- button {
4
- height: 40px;
5
- }
6
-
7
- mat-form-field {
8
- &:first-child {
9
- padding-left: 0;
10
- }
11
-
12
- &:last-child {
13
- padding-right: 0;
14
- }
15
- }
16
-
17
-
18
- .clear {
19
- padding: 0;
20
-
21
- i {
22
- height: 20px;
23
- width: 20px;
24
- font-size: 20px;
25
- cursor: pointer;
26
- }
27
- }
28
- }
29
-
30
- table {
31
- width: 100%;
32
- box-shadow: none;
33
-
34
- th.mat-header-cell:first-of-type, td.mat-cell:first-of-type, td.mat-footer-cell:first-of-type {
35
- padding-left: 12px;
36
- }
37
-
38
- th.mat-header-cell:last-of-type, td.mat-cell:last-of-type, td.mat-footer-cell:last-of-type {
39
- padding-right: 12px;
40
- }
41
-
42
- &::ng-deep {
43
- thead {
44
- tr {
45
- background-color: #fff9c4;
46
-
47
- th {
48
- border-color: #fdd835;
49
- }
50
- }
51
- }
52
-
53
- tbody {
54
- & > tr {
55
- cursor: pointer;
56
-
57
- &.active {
58
- background-color: #a5d6a7;
59
- }
60
-
61
- &:hover {
62
- background-color: #a5d6a7;
63
- }
64
-
65
- &.disabled {
66
- cursor: not-allowed;
67
-
68
- &:hover {
69
- background-color: inherit;
70
- }
71
- }
72
-
73
- &.detail-row {
74
- height: 0;
75
- cursor: default;
76
-
77
- &:hover {
78
- background-color: transparent;
79
- }
80
-
81
- .element-detail {
82
- overflow: hidden;
83
- display: flex;
84
-
85
- p {
86
- padding: 20px 0;
87
- margin-bottom: 0;
88
- white-space: pre-wrap
89
- }
90
- }
91
- }
92
-
93
- td {
94
- i.active-row {
95
- color: #1b5e20;
96
- font-weight: bold;
97
- font-size: 25px;
98
- height: 25px;
99
- width: 25px;
100
- margin-top: 2px;
101
- }
102
- }
103
-
104
- td {
105
- & > div {
106
- max-height: 200px;
107
- overflow: hidden;
108
- overflow-y: auto;
109
- }
110
- a {
111
- button {
112
- color: #000;
113
- }
114
-
115
- i {
116
- color: #333;
117
- }
118
- }
119
- }
120
- }
121
- }
122
-
123
- .mat-column-active {
124
- width: 48px;
125
- }
126
- }
127
-
128
- &.no-hover {
129
- &::ng-deep {
130
-
131
- tbody {
132
- tr {
133
- cursor: default;
134
-
135
- &.active {
136
- background-color: transparent;
137
- }
138
-
139
- &:hover {
140
- background-color: transparent;
141
- }
142
- }
143
- }
144
- }
145
- }
146
-
147
- &.admin-table {
148
- &::ng-deep {
149
- .actions-cell {
150
- width: 100px;
151
- }
152
- }
153
- }
154
- }
1
+ .search-form {
2
+ button {
3
+ height: 40px;
4
+ }
5
+
6
+ mat-form-field {
7
+ &:first-child {
8
+ padding-left: 0;
9
+ }
10
+
11
+ &:last-child {
12
+ padding-right: 0;
13
+ }
14
+ }
15
+
16
+ .clear {
17
+ padding: 0;
18
+
19
+ i {
20
+ height: 20px;
21
+ width: 20px;
22
+ font-size: 20px;
23
+ cursor: pointer;
24
+ }
25
+ }
26
+ }
27
+
28
+ table {
29
+ width: 100%;
30
+ box-shadow: none;
31
+
32
+ th.mat-header-cell:first-of-type,
33
+ td.mat-cell:first-of-type,
34
+ td.mat-footer-cell:first-of-type {
35
+ padding-left: 12px;
36
+ }
37
+
38
+ th.mat-header-cell:last-of-type,
39
+ td.mat-cell:last-of-type,
40
+ td.mat-footer-cell:last-of-type {
41
+ padding-right: 12px;
42
+ }
43
+
44
+ &::ng-deep {
45
+ thead {
46
+ tr {
47
+ background-color: #fff9c4;
48
+
49
+ th {
50
+ border-color: #fdd835;
51
+ }
52
+ }
53
+ }
54
+
55
+ tbody {
56
+ & > tr {
57
+ cursor: pointer;
58
+
59
+ &.active {
60
+ background-color: #a5d6a7;
61
+ }
62
+
63
+ &:hover {
64
+ background-color: #a5d6a7;
65
+ }
66
+
67
+ &.disabled {
68
+ cursor: not-allowed;
69
+
70
+ &:hover {
71
+ background-color: inherit;
72
+ }
73
+ }
74
+
75
+ &.detail-row {
76
+ height: 0;
77
+ cursor: default;
78
+
79
+ &:hover {
80
+ background-color: transparent;
81
+ }
82
+
83
+ .element-detail {
84
+ overflow: hidden;
85
+ display: flex;
86
+
87
+ p {
88
+ padding: 20px 0;
89
+ margin-bottom: 0;
90
+ white-space: pre-wrap;
91
+ }
92
+ }
93
+ }
94
+
95
+ td {
96
+ i.active-row {
97
+ color: #1b5e20;
98
+ font-weight: bold;
99
+ font-size: 25px;
100
+ height: 25px;
101
+ width: 25px;
102
+ margin-top: 2px;
103
+ }
104
+ }
105
+
106
+ td {
107
+ & > div {
108
+ max-height: 200px;
109
+ overflow: hidden;
110
+ overflow-y: auto;
111
+ }
112
+ a {
113
+ button {
114
+ color: #000;
115
+ }
116
+
117
+ i {
118
+ color: #333;
119
+ }
120
+ }
121
+ }
122
+ }
123
+ }
124
+
125
+ .mat-column-active {
126
+ width: 48px;
127
+ }
128
+ }
129
+
130
+ &.no-hover {
131
+ &::ng-deep {
132
+ tbody {
133
+ tr {
134
+ cursor: default;
135
+
136
+ &.active {
137
+ background-color: transparent;
138
+ }
139
+
140
+ &:hover {
141
+ background-color: transparent;
142
+ }
143
+ }
144
+ }
145
+ }
146
+ }
147
+
148
+ &.admin-table {
149
+ &::ng-deep {
150
+ .actions-cell {
151
+ width: 100px;
152
+ }
153
+ }
154
+ }
155
+ }
@@ -1,70 +1,69 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "@angular/material/button";
5
- import * as i3 from "@angular/material/form-field";
6
- import * as i4 from "@angular/material/input";
7
- import * as i5 from "@angular/forms";
8
- import * as i6 from "@angular/material/select";
9
- import * as i7 from "@angular/material/core";
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: "14.3.0", ngImport: i0, type: ConfigurationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
53
- ConfigurationsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", 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;\">\r\n <ng-container *ngIf=\"!creatingConfiguration && !removingConfiguration\">\r\n <mat-form-field class=\"col-auto\" style=\"padding-right: 0;\">\r\n <mat-label>{{configurationsSettings.selectLabel}}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedConfig\" (ngModelChange)=\"selectedConfigChanged()\">\r\n <mat-option [value]=\"null\"></mat-option>\r\n <mat-option *ngFor=\"let config of configurations\" [value]=\"config\">{{config.configName}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"showCreateConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n add\r\n </span>\r\n </button>\r\n <button mat-icon-button class=\"col-auto red-icon\" [disabled]=\"!selectedConfig\" (click)=\"deleteConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n delete\r\n </span>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"creatingConfiguration\">\r\n <mat-form-field class=\"col-auto\">\r\n <mat-label>{{configurationsSettings.createLabel}}</mat-label>\r\n <input matInput [(ngModel)]=\"createConfigurationName\">\r\n </mat-form-field>\r\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"saveCreateConfiguration()\" [disabled]=\"!createConfigurationName\">\r\n <span class=\"material-icons-outlined\">\r\n done\r\n </span>\r\n </button>\r\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"hideCreateConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n close\r\n </span>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"removingConfiguration\">\r\n <p class=\"col-auto\" style=\"margin: 0; font-weight: bold;font-size: 16px;\">{{configurationsSettings.deleteWarningTitle}}</p>\r\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"acceptDeleteConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n done\r\n </span>\r\n </button>\r\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"declineDeleteConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n close\r\n </span>\r\n </button>\r\n </ng-container>\r\n</div>\r\n", styles: [".green-icon span{color:#2e7d32}.red-icon span{color:#c62828}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", 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;\">\r\n <ng-container *ngIf=\"!creatingConfiguration && !removingConfiguration\">\r\n <mat-form-field class=\"col-auto\" style=\"padding-right: 0;\">\r\n <mat-label>{{configurationsSettings.selectLabel}}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedConfig\" (ngModelChange)=\"selectedConfigChanged()\">\r\n <mat-option [value]=\"null\"></mat-option>\r\n <mat-option *ngFor=\"let config of configurations\" [value]=\"config\">{{config.configName}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"showCreateConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n add\r\n </span>\r\n </button>\r\n <button mat-icon-button class=\"col-auto red-icon\" [disabled]=\"!selectedConfig\" (click)=\"deleteConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n delete\r\n </span>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"creatingConfiguration\">\r\n <mat-form-field class=\"col-auto\">\r\n <mat-label>{{configurationsSettings.createLabel}}</mat-label>\r\n <input matInput [(ngModel)]=\"createConfigurationName\">\r\n </mat-form-field>\r\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"saveCreateConfiguration()\" [disabled]=\"!createConfigurationName\">\r\n <span class=\"material-icons-outlined\">\r\n done\r\n </span>\r\n </button>\r\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"hideCreateConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n close\r\n </span>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"removingConfiguration\">\r\n <p class=\"col-auto\" style=\"margin: 0; font-weight: bold;font-size: 16px;\">{{configurationsSettings.deleteWarningTitle}}</p>\r\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"acceptDeleteConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n done\r\n </span>\r\n </button>\r\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"declineDeleteConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n close\r\n </span>\r\n </button>\r\n </ng-container>\r\n</div>\r\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvY29uZmlndXJhdGlvbnMvY29uZmlndXJhdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvY29uZmlndXJhdGlvbnMvY29uZmlndXJhdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBVXRHLE1BQU0sT0FBTyx1QkFBdUI7SUE2QmhDO1FBZkEsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRzdDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUcxQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRWpELDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5Qiw0QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFFN0IsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBSzlCLENBQUM7SUF0QkQsSUFDSSxrQkFBa0IsQ0FBQyxNQUErQztRQUNsRSxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBcUJELFFBQVE7SUFDUixDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDdEMsQ0FBQztJQUVELHlCQUF5QjtRQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELDBCQUEwQjtRQUN0QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUM7SUFDbEUsQ0FBQzs7b0hBbkVRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHlVQ1ZwQyw0bEZBb0RBOzJGRDFDYSx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0ksNENBQTRDLG1CQUdyQyx1QkFBdUIsQ0FBQyxNQUFNOzBFQUsvQyxzQkFBc0I7c0JBRHJCLEtBQUs7Z0JBSU4sY0FBYztzQkFEYixLQUFLO2dCQUlGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFNTixlQUFlO3NCQURkLE1BQU07Z0JBSVAsWUFBWTtzQkFEWCxNQUFNO2dCQUlQLFlBQVk7c0JBRFgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1N0Q29uZmlndXJhdGlvbnNTZXR0aW5nc01vZGVsfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2xvY2FsLXRhYmxlL3N0LWNvbmZpZ3VyYXRpb25zLXNldHRpbmdzLm1vZGVsXCI7XHJcbmltcG9ydCB7U3RMb2NhbFN0b3JhZ2VDb25maWd1cmF0aW9uTW9kZWx9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvbG9jYWwtdGFibGUvc3QtbG9jYWwtc3RvcmFnZS1jb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYXBwLWNvbmZpZ3VyYXRpb25zW2NvbmZpZ3VyYXRpb25zU2V0dGluZ3NdJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmF0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb25maWd1cmF0aW9ucy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgY29uZmlndXJhdGlvbnNTZXR0aW5nczogU3RDb25maWd1cmF0aW9uc1NldHRpbmdzTW9kZWw7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGNvbmZpZ3VyYXRpb25zOiBTdExvY2FsU3RvcmFnZUNvbmZpZ3VyYXRpb25Nb2RlbFtdO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgaW5pdFNlbGVjdGVkQ29uZmlnKGNvbmZpZzogU3RMb2NhbFN0b3JhZ2VDb25maWd1cmF0aW9uTW9kZWwgfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZyA9IGNvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGNyZWF0ZU5ld0NvbmZpZyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcmVtb3ZlQ29uZmlnID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBjaGFuZ2VDb25maWcgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bGw+KCk7XHJcblxyXG4gICAgY3JlYXRpbmdDb25maWd1cmF0aW9uID0gZmFsc2U7XHJcbiAgICBjcmVhdGVDb25maWd1cmF0aW9uTmFtZSA9ICcnO1xyXG5cclxuICAgIHJlbW92aW5nQ29uZmlndXJhdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHNlbGVjdGVkQ29uZmlnOiBTdExvY2FsU3RvcmFnZUNvbmZpZ3VyYXRpb25Nb2RlbCB8IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0NyZWF0ZUNvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGluZ0NvbmZpZ3VyYXRpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlQ29uZmlndXJhdGlvbk5hbWUgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBoaWRlQ3JlYXRlQ29uZmlndXJhdGlvbigpIHtcclxuICAgICAgICB0aGlzLmNyZWF0aW5nQ29uZmlndXJhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlQ29uZmlndXJhdGlvbk5hbWUgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ3JlYXRlQ29uZmlndXJhdGlvbigpIHtcclxuICAgICAgICB0aGlzLmNyZWF0aW5nQ29uZmlndXJhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlTmV3Q29uZmlnLmVtaXQodGhpcy5jcmVhdGVDb25maWd1cmF0aW9uTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQ29uZmlndXJhdGlvbigpIHtcclxuICAgICAgICB0aGlzLnJlbW92aW5nQ29uZmlndXJhdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYWNjZXB0RGVsZXRlQ29uZmlndXJhdGlvbigpIHtcclxuICAgICAgICB0aGlzLnJlbW92aW5nQ29uZmlndXJhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ29uZmlnLmVtaXQodGhpcy5zZWxlY3RlZENvbmZpZyEuY29uZmlnSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlY2xpbmVEZWxldGVDb25maWd1cmF0aW9uKCkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZpbmdDb25maWd1cmF0aW9uID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWRDb25maWdDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlQ29uZmlnLmVtaXQodGhpcy5zZWxlY3RlZENvbmZpZz8uY29uZmlnSWQgfHwgbnVsbCk7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4iLCI8ZGl2IGNsYXNzPVwiY29sLWF1dG8gcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwicGFkZGluZzogMDtcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY3JlYXRpbmdDb25maWd1cmF0aW9uICYmICFyZW1vdmluZ0NvbmZpZ3VyYXRpb25cIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2wtYXV0b1wiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMDtcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57e2NvbmZpZ3VyYXRpb25zU2V0dGluZ3Muc2VsZWN0TGFiZWx9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29uZmlnXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRDb25maWdDaGFuZ2VkKClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJudWxsXCI+PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNvbmZpZyBvZiBjb25maWd1cmF0aW9uc1wiIFt2YWx1ZV09XCJjb25maWdcIj57e2NvbmZpZy5jb25maWdOYW1lfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiY29sLWF1dG8gZ3JlZW4taWNvblwiIChjbGljayk9XCJzaG93Q3JlYXRlQ29uZmlndXJhdGlvbigpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgIGFkZFxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJjb2wtYXV0byByZWQtaWNvblwiIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRDb25maWdcIiAoY2xpY2spPVwiZGVsZXRlQ29uZmlndXJhdGlvbigpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgIGRlbGV0ZVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3JlYXRpbmdDb25maWd1cmF0aW9uXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57e2NvbmZpZ3VyYXRpb25zU2V0dGluZ3MuY3JlYXRlTGFiZWx9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJjcmVhdGVDb25maWd1cmF0aW9uTmFtZVwiPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJjb2wtYXV0byBncmVlbi1pY29uXCIgKGNsaWNrKT1cInNhdmVDcmVhdGVDb25maWd1cmF0aW9uKClcIiBbZGlzYWJsZWRdPVwiIWNyZWF0ZUNvbmZpZ3VyYXRpb25OYW1lXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgIGRvbmVcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiY29sLWF1dG8gcmVkLWljb25cIiAoY2xpY2spPVwiaGlkZUNyZWF0ZUNvbmZpZ3VyYXRpb24oKVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICBjbG9zZVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVtb3ZpbmdDb25maWd1cmF0aW9uXCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJjb2wtYXV0b1wiIHN0eWxlPVwibWFyZ2luOiAwOyBmb250LXdlaWdodDogYm9sZDtmb250LXNpemU6IDE2cHg7XCI+e3tjb25maWd1cmF0aW9uc1NldHRpbmdzLmRlbGV0ZVdhcm5pbmdUaXRsZX19PC9wPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiY29sLWF1dG8gZ3JlZW4taWNvblwiIChjbGljayk9XCJhY2NlcHREZWxldGVDb25maWd1cmF0aW9uKClcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgZG9uZVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJjb2wtYXV0byByZWQtaWNvblwiIChjbGljayk9XCJkZWNsaW5lRGVsZXRlQ29uZmlndXJhdGlvbigpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgIGNsb3NlXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuIl19
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "@angular/material/button";
5
+ import * as i3 from "@angular/material/form-field";
6
+ import * as i4 from "@angular/material/input";
7
+ import * as i5 from "@angular/forms";
8
+ import * as i6 from "@angular/material/select";
9
+ import * as i7 from "@angular/material/core";
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
+ showCreateConfiguration() {
24
+ this.creatingConfiguration = true;
25
+ this.createConfigurationName = '';
26
+ }
27
+ hideCreateConfiguration() {
28
+ this.creatingConfiguration = false;
29
+ this.createConfigurationName = '';
30
+ }
31
+ saveCreateConfiguration() {
32
+ this.creatingConfiguration = false;
33
+ this.selectedConfig = null;
34
+ this.createNewConfig.emit(this.createConfigurationName);
35
+ }
36
+ deleteConfiguration() {
37
+ this.removingConfiguration = true;
38
+ }
39
+ acceptDeleteConfiguration() {
40
+ this.removingConfiguration = false;
41
+ this.selectedConfig = null;
42
+ this.removeConfig.emit(this.selectedConfig.configId);
43
+ }
44
+ declineDeleteConfiguration() {
45
+ this.removingConfiguration = false;
46
+ }
47
+ selectedConfigChanged() {
48
+ this.changeConfig.emit(this.selectedConfig?.configId || null);
49
+ }
50
+ }
51
+ ConfigurationsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ConfigurationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
52
+ ConfigurationsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ConfigurationsComponent, selector: "st-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\n [(ngModel)]=\"selectedConfig\"\n (ngModelChange)=\"selectedConfigChanged()\"\n >\n <mat-option [value]=\"null\"></mat-option>\n <mat-option *ngFor=\"let config of configurations\" [value]=\"config\">{{\n config.configName\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <button\n mat-icon-button\n class=\"col-auto green-icon\"\n (click)=\"showCreateConfiguration()\"\n >\n <span class=\"material-icons-outlined\"> add </span>\n </button>\n <button\n mat-icon-button\n class=\"col-auto red-icon\"\n [disabled]=\"!selectedConfig\"\n (click)=\"deleteConfiguration()\"\n >\n <span class=\"material-icons-outlined\"> delete </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\n mat-icon-button\n class=\"col-auto green-icon\"\n (click)=\"saveCreateConfiguration()\"\n [disabled]=\"!createConfigurationName\"\n >\n <span class=\"material-icons-outlined\"> done </span>\n </button>\n <button\n mat-icon-button\n class=\"col-auto red-icon\"\n (click)=\"hideCreateConfiguration()\"\n >\n <span class=\"material-icons-outlined\"> close </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\">\n {{ configurationsSettings.deleteWarningTitle }}\n </p>\n <button\n mat-icon-button\n class=\"col-auto green-icon\"\n (click)=\"acceptDeleteConfiguration()\"\n >\n <span class=\"material-icons-outlined\"> done </span>\n </button>\n <button\n mat-icon-button\n class=\"col-auto red-icon\"\n (click)=\"declineDeleteConfiguration()\"\n >\n <span class=\"material-icons-outlined\"> close </span>\n </button>\n </ng-container>\n</div>\n", styles: [".green-icon span{color:#2e7d32}.red-icon span{color:#c62828}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }] });
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ConfigurationsComponent, decorators: [{
54
+ type: Component,
55
+ args: [{ selector: 'st-configurations[configurationsSettings]', 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\n [(ngModel)]=\"selectedConfig\"\n (ngModelChange)=\"selectedConfigChanged()\"\n >\n <mat-option [value]=\"null\"></mat-option>\n <mat-option *ngFor=\"let config of configurations\" [value]=\"config\">{{\n config.configName\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <button\n mat-icon-button\n class=\"col-auto green-icon\"\n (click)=\"showCreateConfiguration()\"\n >\n <span class=\"material-icons-outlined\"> add </span>\n </button>\n <button\n mat-icon-button\n class=\"col-auto red-icon\"\n [disabled]=\"!selectedConfig\"\n (click)=\"deleteConfiguration()\"\n >\n <span class=\"material-icons-outlined\"> delete </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\n mat-icon-button\n class=\"col-auto green-icon\"\n (click)=\"saveCreateConfiguration()\"\n [disabled]=\"!createConfigurationName\"\n >\n <span class=\"material-icons-outlined\"> done </span>\n </button>\n <button\n mat-icon-button\n class=\"col-auto red-icon\"\n (click)=\"hideCreateConfiguration()\"\n >\n <span class=\"material-icons-outlined\"> close </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\">\n {{ configurationsSettings.deleteWarningTitle }}\n </p>\n <button\n mat-icon-button\n class=\"col-auto green-icon\"\n (click)=\"acceptDeleteConfiguration()\"\n >\n <span class=\"material-icons-outlined\"> done </span>\n </button>\n <button\n mat-icon-button\n class=\"col-auto red-icon\"\n (click)=\"declineDeleteConfiguration()\"\n >\n <span class=\"material-icons-outlined\"> close </span>\n </button>\n </ng-container>\n</div>\n", styles: [".green-icon span{color:#2e7d32}.red-icon span{color:#c62828}\n"] }]
56
+ }], ctorParameters: function () { return []; }, propDecorators: { configurationsSettings: [{
57
+ type: Input
58
+ }], configurations: [{
59
+ type: Input
60
+ }], initSelectedConfig: [{
61
+ type: Input
62
+ }], createNewConfig: [{
63
+ type: Output
64
+ }], removeConfig: [{
65
+ type: Output
66
+ }], changeConfig: [{
67
+ type: Output
68
+ }] } });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvY29uZmlndXJhdGlvbnMvY29uZmlndXJhdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvY29uZmlndXJhdGlvbnMvY29uZmlndXJhdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBUy9FLE1BQU0sT0FBTyx1QkFBdUI7SUEyQmxDO1FBZEEsb0JBQWUsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUczRCxpQkFBWSxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBR3hELGlCQUFZLEdBQWdDLElBQUksWUFBWSxFQUFFLENBQUM7UUFFL0QsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBQ3ZDLDRCQUF1QixHQUFXLEVBQUUsQ0FBQztRQUNyQywwQkFBcUIsR0FBWSxLQUFLLENBQUM7SUFJeEIsQ0FBQztJQXBCaEIsSUFDSSxrQkFBa0IsQ0FBQyxNQUErQztRQUNwRSxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztJQUMvQixDQUFDO0lBbUJELFFBQVEsS0FBVSxDQUFDO0lBRW5CLHVCQUF1QjtRQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztJQUNwQyxDQUFDO0lBRUQseUJBQXlCO1FBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsMEJBQTBCO1FBQ3hCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNoRSxDQUFDOztvSEEvRFUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsd1VDVHBDLGs1RUF5RUE7MkZEaEVhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSwyQ0FBMkM7MEVBTXJELHNCQUFzQjtzQkFEckIsS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBSUYsa0JBQWtCO3NCQURyQixLQUFLO2dCQU1OLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxZQUFZO3NCQURYLE1BQU07Z0JBSVAsWUFBWTtzQkFEWCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RDb25maWd1cmF0aW9uc1NldHRpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc3QtY29uZmlndXJhdGlvbnMtc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHsgU3RMb2NhbFN0b3JhZ2VDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc3QtbG9jYWwtc3RvcmFnZS1jb25maWd1cmF0aW9uLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3QtY29uZmlndXJhdGlvbnNbY29uZmlndXJhdGlvbnNTZXR0aW5nc10nLFxuICB0ZW1wbGF0ZVVybDogJy4vY29uZmlndXJhdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb25maWd1cmF0aW9ucy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIGNvbmZpZ3VyYXRpb25zU2V0dGluZ3M6IFN0Q29uZmlndXJhdGlvbnNTZXR0aW5nc01vZGVsO1xuXG4gIEBJbnB1dCgpXG4gIGNvbmZpZ3VyYXRpb25zOiBTdExvY2FsU3RvcmFnZUNvbmZpZ3VyYXRpb25Nb2RlbFtdO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBpbml0U2VsZWN0ZWRDb25maWcoY29uZmlnOiBTdExvY2FsU3RvcmFnZUNvbmZpZ3VyYXRpb25Nb2RlbCB8IG51bGwpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29uZmlnID0gY29uZmlnO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIGNyZWF0ZU5ld0NvbmZpZzogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIHJlbW92ZUNvbmZpZzogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIGNoYW5nZUNvbmZpZzogRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNyZWF0aW5nQ29uZmlndXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBjcmVhdGVDb25maWd1cmF0aW9uTmFtZTogc3RyaW5nID0gJyc7XG4gIHJlbW92aW5nQ29uZmlndXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNlbGVjdGVkQ29uZmlnOiBTdExvY2FsU3RvcmFnZUNvbmZpZ3VyYXRpb25Nb2RlbCB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBzaG93Q3JlYXRlQ29uZmlndXJhdGlvbigpIHtcbiAgICB0aGlzLmNyZWF0aW5nQ29uZmlndXJhdGlvbiA9IHRydWU7XG4gICAgdGhpcy5jcmVhdGVDb25maWd1cmF0aW9uTmFtZSA9ICcnO1xuICB9XG5cbiAgaGlkZUNyZWF0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgdGhpcy5jcmVhdGluZ0NvbmZpZ3VyYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmNyZWF0ZUNvbmZpZ3VyYXRpb25OYW1lID0gJyc7XG4gIH1cblxuICBzYXZlQ3JlYXRlQ29uZmlndXJhdGlvbigpIHtcbiAgICB0aGlzLmNyZWF0aW5nQ29uZmlndXJhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0ZWRDb25maWcgPSBudWxsO1xuICAgIHRoaXMuY3JlYXRlTmV3Q29uZmlnLmVtaXQodGhpcy5jcmVhdGVDb25maWd1cmF0aW9uTmFtZSk7XG4gIH1cblxuICBkZWxldGVDb25maWd1cmF0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZpbmdDb25maWd1cmF0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIGFjY2VwdERlbGV0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgdGhpcy5yZW1vdmluZ0NvbmZpZ3VyYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkQ29uZmlnID0gbnVsbDtcbiAgICB0aGlzLnJlbW92ZUNvbmZpZy5lbWl0KHRoaXMuc2VsZWN0ZWRDb25maWchLmNvbmZpZ0lkKTtcbiAgfVxuXG4gIGRlY2xpbmVEZWxldGVDb25maWd1cmF0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZpbmdDb25maWd1cmF0aW9uID0gZmFsc2U7XG4gIH1cblxuICBzZWxlY3RlZENvbmZpZ0NoYW5nZWQoKSB7XG4gICAgdGhpcy5jaGFuZ2VDb25maWcuZW1pdCh0aGlzLnNlbGVjdGVkQ29uZmlnPy5jb25maWdJZCB8fCBudWxsKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbC1hdXRvIHJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cInBhZGRpbmc6IDBcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjcmVhdGluZ0NvbmZpZ3VyYXRpb24gJiYgIXJlbW92aW5nQ29uZmlndXJhdGlvblwiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC1hdXRvXCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAwXCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IGNvbmZpZ3VyYXRpb25zU2V0dGluZ3Muc2VsZWN0TGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDb25maWdcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RlZENvbmZpZ0NoYW5nZWQoKVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJudWxsXCI+PC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgY29uZmlnIG9mIGNvbmZpZ3VyYXRpb25zXCIgW3ZhbHVlXT1cImNvbmZpZ1wiPnt7XG4gICAgICAgICAgY29uZmlnLmNvbmZpZ05hbWVcbiAgICAgICAgfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNsYXNzPVwiY29sLWF1dG8gZ3JlZW4taWNvblwiXG4gICAgICAoY2xpY2spPVwic2hvd0NyZWF0ZUNvbmZpZ3VyYXRpb24oKVwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPiBhZGQgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY2xhc3M9XCJjb2wtYXV0byByZWQtaWNvblwiXG4gICAgICBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkQ29uZmlnXCJcbiAgICAgIChjbGljayk9XCJkZWxldGVDb25maWd1cmF0aW9uKClcIlxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj4gZGVsZXRlIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNyZWF0aW5nQ29uZmlndXJhdGlvblwiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IGNvbmZpZ3VyYXRpb25zU2V0dGluZ3MuY3JlYXRlTGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImNyZWF0ZUNvbmZpZ3VyYXRpb25OYW1lXCIgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY2xhc3M9XCJjb2wtYXV0byBncmVlbi1pY29uXCJcbiAgICAgIChjbGljayk9XCJzYXZlQ3JlYXRlQ29uZmlndXJhdGlvbigpXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3JlYXRlQ29uZmlndXJhdGlvbk5hbWVcIlxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj4gZG9uZSA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjbGFzcz1cImNvbC1hdXRvIHJlZC1pY29uXCJcbiAgICAgIChjbGljayk9XCJoaWRlQ3JlYXRlQ29uZmlndXJhdGlvbigpXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+IGNsb3NlIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlbW92aW5nQ29uZmlndXJhdGlvblwiPlxuICAgIDxwIGNsYXNzPVwiY29sLWF1dG9cIiBzdHlsZT1cIm1hcmdpbjogMDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMTZweFwiPlxuICAgICAge3sgY29uZmlndXJhdGlvbnNTZXR0aW5ncy5kZWxldGVXYXJuaW5nVGl0bGUgfX1cbiAgICA8L3A+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjbGFzcz1cImNvbC1hdXRvIGdyZWVuLWljb25cIlxuICAgICAgKGNsaWNrKT1cImFjY2VwdERlbGV0ZUNvbmZpZ3VyYXRpb24oKVwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPiBkb25lIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNsYXNzPVwiY29sLWF1dG8gcmVkLWljb25cIlxuICAgICAgKGNsaWNrKT1cImRlY2xpbmVEZWxldGVDb25maWd1cmF0aW9uKClcIlxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj4gY2xvc2UgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19