@openziti/ziti-console-lib 0.6.3 → 0.6.5
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/assets/styles/global.scss +130 -5
- package/assets/styles/ziti.css +2 -2
- package/esm2022/lib/features/config-editor/config-editor.component.mjs +76 -15
- package/esm2022/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.mjs +7 -3
- package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.mjs +22 -1
- package/esm2022/lib/features/dynamic-widgets/number/number-input.component.mjs +10 -9
- package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/port-ranges/port-ranges.component.mjs +4 -1
- package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +28 -6
- package/esm2022/lib/features/dynamic-widgets/selector/selector-input.component.mjs +102 -39
- package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +33 -8
- package/esm2022/lib/features/dynamic-widgets/text-list/text-list-input.component.mjs +9 -5
- package/esm2022/lib/features/json-view/json-view.component.mjs +3 -3
- package/esm2022/lib/features/messaging/growler.component.mjs +4 -4
- package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +33 -4
- package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +2 -4
- package/esm2022/lib/features/qr-code/qr-code.component.mjs +4 -1
- package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +7 -1
- package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +10 -3
- package/esm2022/lib/pages/configurations/configurations-page.component.mjs +7 -1
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +2 -2
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.service.mjs +2 -17
- package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +2 -2
- package/esm2022/lib/pages/edge-routers/edge-routers-page.service.mjs +22 -32
- package/esm2022/lib/pages/identities/identities-page.component.mjs +2 -2
- package/esm2022/lib/pages/identities/identities-page.service.mjs +19 -30
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.mjs +2 -2
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.mjs +3 -18
- package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +2 -3
- package/esm2022/lib/pages/service-policies/service-policies-page.service.mjs +2 -17
- package/esm2022/lib/pages/services/services-page.component.mjs +2 -2
- package/esm2022/lib/pages/services/services-page.service.mjs +9 -17
- package/esm2022/lib/services/schema.service.mjs +2 -2
- package/esm2022/lib/services/settings-service.class.mjs +2 -2
- package/esm2022/lib/shared/list-page-component.class.mjs +17 -2
- package/esm2022/lib/shared/list-page-service.class.mjs +22 -4
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/openziti-ziti-console-lib.mjs +425 -220
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/features/config-editor/config-editor.component.d.ts +7 -3
- package/lib/features/config-editor/config-editor.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.d.ts +2 -0
- package/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.d.ts +5 -0
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/number/number-input.component.d.ts +2 -0
- package/lib/features/dynamic-widgets/number/number-input.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/port-ranges/port-ranges.component.d.ts +1 -0
- package/lib/features/dynamic-widgets/port-ranges/port-ranges.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.d.ts +8 -6
- package/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/selector/selector-input.component.d.ts +9 -2
- package/lib/features/dynamic-widgets/selector/selector-input.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/string/string-input.component.d.ts +4 -1
- package/lib/features/dynamic-widgets/string/string-input.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts +2 -0
- package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts.map +1 -1
- package/lib/features/json-view/json-view.component.d.ts +2 -2
- package/lib/features/json-view/json-view.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +3 -0
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
- package/lib/features/qr-code/qr-code.component.d.ts.map +1 -1
- package/lib/pages/auth-policies/auth-policies-page.component.d.ts.map +1 -1
- package/lib/pages/auth-policies/auth-policies-page.service.d.ts.map +1 -1
- package/lib/pages/configurations/configurations-page.component.d.ts.map +1 -1
- package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts +0 -2
- package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts.map +1 -1
- package/lib/pages/edge-routers/edge-routers-page.service.d.ts +5 -3
- package/lib/pages/edge-routers/edge-routers-page.service.d.ts.map +1 -1
- package/lib/pages/identities/identities-page.service.d.ts +4 -2
- package/lib/pages/identities/identities-page.service.d.ts.map +1 -1
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts +0 -2
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts.map +1 -1
- package/lib/pages/service-policies/service-policies-page.component.d.ts.map +1 -1
- package/lib/pages/service-policies/service-policies-page.service.d.ts +0 -2
- package/lib/pages/service-policies/service-policies-page.service.d.ts.map +1 -1
- package/lib/pages/services/services-page.service.d.ts +4 -2
- package/lib/pages/services/services-page.service.d.ts.map +1 -1
- package/lib/services/settings-service.class.d.ts +1 -1
- package/lib/shared/list-page-component.class.d.ts +2 -0
- package/lib/shared/list-page-component.class.d.ts.map +1 -1
- package/lib/shared/list-page-service.class.d.ts +6 -0
- package/lib/shared/list-page-service.class.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -41,13 +41,15 @@ import * as i7 from 'ag-grid-angular';
|
|
|
41
41
|
import { AgGridModule } from 'ag-grid-angular';
|
|
42
42
|
import * as i3$3 from '@angular/cdk/bidi';
|
|
43
43
|
import { MatRadioModule } from '@angular/material/radio';
|
|
44
|
-
import { createAjvValidator,
|
|
44
|
+
import { createAjvValidator, createJSONEditor, Mode } from 'vanilla-jsoneditor';
|
|
45
45
|
import * as d3 from 'd3';
|
|
46
46
|
import * as i6 from '@angular/material/autocomplete';
|
|
47
47
|
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
48
48
|
import * as i7$1 from '@angular/material/core';
|
|
49
49
|
import semver from 'semver';
|
|
50
50
|
import { JsonEditorComponent, NgJsonEditorModule } from 'ang-jsoneditor';
|
|
51
|
+
import Ajv from 'ajv';
|
|
52
|
+
import addFormats from 'ajv-formats';
|
|
51
53
|
import * as i6$1 from 'primeng/inputtext';
|
|
52
54
|
import * as i8 from 'primeng/button';
|
|
53
55
|
import { Resolver } from '@stoplight/json-ref-resolver';
|
|
@@ -421,7 +423,7 @@ class SettingsServiceClass {
|
|
|
421
423
|
growler$3.error("Name and URL required");
|
|
422
424
|
}
|
|
423
425
|
else {
|
|
424
|
-
this.controllerSave(name, url);
|
|
426
|
+
return this.controllerSave(name, url);
|
|
425
427
|
}
|
|
426
428
|
}
|
|
427
429
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SettingsServiceClass, deps: [{ token: i1$1.HttpBackend }, { token: GrowlerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
@@ -1203,11 +1205,15 @@ class StringInputComponent {
|
|
|
1203
1205
|
this.error = '';
|
|
1204
1206
|
this.fieldValueChange = new EventEmitter();
|
|
1205
1207
|
this.valueChange = new Subject();
|
|
1208
|
+
this._isValid = true;
|
|
1206
1209
|
}
|
|
1207
1210
|
set fieldName(name) {
|
|
1208
1211
|
this._fieldName = name;
|
|
1209
1212
|
this._idName = name.replace(/\s/g, '').toLowerCase();
|
|
1210
1213
|
}
|
|
1214
|
+
setIsValid(isValid) {
|
|
1215
|
+
this._isValid = isValid;
|
|
1216
|
+
}
|
|
1211
1217
|
onKeyup() {
|
|
1212
1218
|
debounce(() => {
|
|
1213
1219
|
this.fieldValueChange.emit(this.fieldValue);
|
|
@@ -1215,31 +1221,51 @@ class StringInputComponent {
|
|
|
1215
1221
|
}, 500)();
|
|
1216
1222
|
}
|
|
1217
1223
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: StringInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1218
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: StringInputComponent, selector: "lib-string-input", inputs: { fieldName: "fieldName", fieldValue: "fieldValue", placeholder: "placeholder", parentage: "parentage", labelColor: "labelColor", fieldClass: "fieldClass", error: "error" }, outputs: { fieldValueChange: "fieldValueChange" }, ngImport: i0, template: `
|
|
1219
|
-
<div [ngClass]="fieldClass">
|
|
1220
|
-
<
|
|
1224
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: StringInputComponent, selector: "lib-string-input", inputs: { fieldName: "fieldName", helpText: "helpText", fieldValue: "fieldValue", placeholder: "placeholder", parentage: "parentage", labelColor: "labelColor", fieldClass: "fieldClass", error: "error" }, outputs: { fieldValueChange: "fieldValueChange" }, ngImport: i0, template: `
|
|
1225
|
+
<div [ngClass]="fieldClass + (!_isValid ? 'invalid' : '')" class="string-input-container">
|
|
1226
|
+
<div class="label-container">
|
|
1227
|
+
<label for="schema_{{parentage?parentage+'_':''}}{{_idName}}" [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1228
|
+
<div
|
|
1229
|
+
*ngIf="helpText"
|
|
1230
|
+
class="form-field-info infoicon"
|
|
1231
|
+
matTooltip="{{helpText}}"
|
|
1232
|
+
matTooltipPosition="above"
|
|
1233
|
+
matTooltipClass="wide-tooltip"
|
|
1234
|
+
></div>
|
|
1235
|
+
</div>
|
|
1221
1236
|
<input id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1222
1237
|
type="text" class="jsonEntry"
|
|
1223
1238
|
[ngClass]="{'error': error}"
|
|
1224
1239
|
[placeholder]="placeholder" [(ngModel)]="fieldValue" (paste)="onKeyup()" (keyup)="onKeyup()"/>
|
|
1225
1240
|
<div *ngIf="error" class="error">{{error}}</div>
|
|
1226
1241
|
</div>
|
|
1227
|
-
`, isInline: true, styles: ["input.error{border-color:red}
|
|
1242
|
+
`, isInline: true, styles: [".string-input-container{margin:var(--marginSmall) 0}.string-input-container label{margin-bottom:0;margin-top:0;width:-moz-fit-content;width:fit-content}.string-input-container input.error{border-color:red}.string-input-container div.error{color:red}.label-container{display:flex;gap:5px;margin-bottom:5px;margin-top:10px}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] }); }
|
|
1228
1243
|
}
|
|
1229
1244
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: StringInputComponent, decorators: [{
|
|
1230
1245
|
type: Component,
|
|
1231
1246
|
args: [{ selector: 'lib-string-input', template: `
|
|
1232
|
-
<div [ngClass]="fieldClass">
|
|
1233
|
-
<
|
|
1247
|
+
<div [ngClass]="fieldClass + (!_isValid ? 'invalid' : '')" class="string-input-container">
|
|
1248
|
+
<div class="label-container">
|
|
1249
|
+
<label for="schema_{{parentage?parentage+'_':''}}{{_idName}}" [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1250
|
+
<div
|
|
1251
|
+
*ngIf="helpText"
|
|
1252
|
+
class="form-field-info infoicon"
|
|
1253
|
+
matTooltip="{{helpText}}"
|
|
1254
|
+
matTooltipPosition="above"
|
|
1255
|
+
matTooltipClass="wide-tooltip"
|
|
1256
|
+
></div>
|
|
1257
|
+
</div>
|
|
1234
1258
|
<input id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1235
1259
|
type="text" class="jsonEntry"
|
|
1236
1260
|
[ngClass]="{'error': error}"
|
|
1237
1261
|
[placeholder]="placeholder" [(ngModel)]="fieldValue" (paste)="onKeyup()" (keyup)="onKeyup()"/>
|
|
1238
1262
|
<div *ngIf="error" class="error">{{error}}</div>
|
|
1239
1263
|
</div>
|
|
1240
|
-
`, styles: ["input.error{border-color:red}
|
|
1264
|
+
`, styles: [".string-input-container{margin:var(--marginSmall) 0}.string-input-container label{margin-bottom:0;margin-top:0;width:-moz-fit-content;width:fit-content}.string-input-container input.error{border-color:red}.string-input-container div.error{color:red}.label-container{display:flex;gap:5px;margin-bottom:5px;margin-top:10px}\n"] }]
|
|
1241
1265
|
}], propDecorators: { fieldName: [{
|
|
1242
1266
|
type: Input
|
|
1267
|
+
}], helpText: [{
|
|
1268
|
+
type: Input
|
|
1243
1269
|
}], fieldValue: [{
|
|
1244
1270
|
type: Input
|
|
1245
1271
|
}], placeholder: [{
|
|
@@ -1267,11 +1293,15 @@ class NumberInputComponent {
|
|
|
1267
1293
|
this.error = '';
|
|
1268
1294
|
this.fieldValueChange = new EventEmitter();
|
|
1269
1295
|
this.valueChange = new Subject();
|
|
1296
|
+
this._isValid = true;
|
|
1270
1297
|
}
|
|
1271
1298
|
set fieldName(name) {
|
|
1272
1299
|
this._fieldName = name;
|
|
1273
1300
|
this._idName = name.replace(/\s/g, '').toLowerCase();
|
|
1274
1301
|
}
|
|
1302
|
+
setIsValid(isValid) {
|
|
1303
|
+
this._isValid = isValid;
|
|
1304
|
+
}
|
|
1275
1305
|
onKeyup() {
|
|
1276
1306
|
debounce(() => {
|
|
1277
1307
|
this.fieldValueChange.emit(this.fieldValue);
|
|
@@ -1280,7 +1310,7 @@ class NumberInputComponent {
|
|
|
1280
1310
|
}
|
|
1281
1311
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NumberInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1282
1312
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NumberInputComponent, selector: "lib-number-input", inputs: { fieldName: "fieldName", fieldValue: "fieldValue", placeholder: "placeholder", parentage: "parentage", labelColor: "labelColor", fieldClass: "fieldClass", error: "error" }, outputs: { fieldValueChange: "fieldValueChange" }, ngImport: i0, template: `
|
|
1283
|
-
<div [ngClass]="fieldClass">
|
|
1313
|
+
<div [ngClass]="fieldClass + (!_isValid ? 'invalid' : '')" class="{{!_isValid ? 'invalid' : ''}} number-input-container">
|
|
1284
1314
|
<label for="schema_{{parentage?parentage+'_':''}}{{_idName}}" [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1285
1315
|
<input id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1286
1316
|
type="number" class="jsonEntry"
|
|
@@ -1288,14 +1318,12 @@ class NumberInputComponent {
|
|
|
1288
1318
|
[placeholder]="placeholder" [(ngModel)]="fieldValue" (paste)="onKeyup()" (keyup)="onKeyup()"/>
|
|
1289
1319
|
<div *ngIf="error" class="error">{{error}}</div>
|
|
1290
1320
|
</div>
|
|
1291
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { 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"] }] }); }
|
|
1321
|
+
`, isInline: true, styles: [".number-input-container{margin:var(--marginSmall) 0}.number-input-container label{margin-bottom:0;margin-top:0}.number-input-container input.error{border-color:red}.number-input-container div.error{color:red}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { 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"] }] }); }
|
|
1292
1322
|
}
|
|
1293
1323
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NumberInputComponent, decorators: [{
|
|
1294
1324
|
type: Component,
|
|
1295
|
-
args: [{
|
|
1296
|
-
|
|
1297
|
-
template: `
|
|
1298
|
-
<div [ngClass]="fieldClass">
|
|
1325
|
+
args: [{ selector: 'lib-number-input', template: `
|
|
1326
|
+
<div [ngClass]="fieldClass + (!_isValid ? 'invalid' : '')" class="{{!_isValid ? 'invalid' : ''}} number-input-container">
|
|
1299
1327
|
<label for="schema_{{parentage?parentage+'_':''}}{{_idName}}" [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1300
1328
|
<input id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1301
1329
|
type="number" class="jsonEntry"
|
|
@@ -1303,8 +1331,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1303
1331
|
[placeholder]="placeholder" [(ngModel)]="fieldValue" (paste)="onKeyup()" (keyup)="onKeyup()"/>
|
|
1304
1332
|
<div *ngIf="error" class="error">{{error}}</div>
|
|
1305
1333
|
</div>
|
|
1306
|
-
|
|
1307
|
-
}]
|
|
1334
|
+
`, styles: [".number-input-container{margin:var(--marginSmall) 0}.number-input-container label{margin-bottom:0;margin-top:0}.number-input-container input.error{border-color:red}.number-input-container div.error{color:red}\n"] }]
|
|
1308
1335
|
}], propDecorators: { fieldName: [{
|
|
1309
1336
|
type: Input
|
|
1310
1337
|
}], fieldValue: [{
|
|
@@ -1453,7 +1480,7 @@ class ObjectComponent {
|
|
|
1453
1480
|
<div *ngIf="showAdd" class="save-button button" (click)="addClicked()">Add</div>
|
|
1454
1481
|
</div>
|
|
1455
1482
|
</div>
|
|
1456
|
-
`, isInline: true, styles: [":host>label{margin-top:0}.wrapper{border-radius:.
|
|
1483
|
+
`, isInline: true, styles: [":host>label{margin-top:0}.wrapper{border-radius:.3rem;padding:calc(var(--paddingSmall) + 2px) var(--paddingXL);display:flex;flex-direction:column;gap:5px;margin-top:var(--marginXL)}.wrapper.closed{cursor:pointer}.wrapper .object-main-content{display:flex;flex-direction:column;gap:5px}.wrapper .object-main-content[hidden]{display:none}.wrapper .save-button{margin-top:var(--marginSmall);margin-bottom:var(--marginSmall);height:35px;min-width:140px;border-style:solid;border-width:1px;border-color:var(--stroke)}.object-header-container{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}.object-header-container .object-header-title{width:100%;display:flex;justify-content:space-between;align-items:center;height:23px;cursor:pointer}.object-header-container .object-label{margin:0;cursor:pointer}.expand-toggle{font-family:zac;font-weight:600;font-size:23px;width:15px;color:var(--stroke);height:20px;margin-top:-3px;cursor:pointer}.expand-toggle:before{content:\"\\e91f\"}.expand-toggle.open{transform:rotate(270deg);margin-top:7px;margin-right:3px}.added-items-list{margin-top:var(--marginSmall);width:100%}.added-items-list label,.added-items-list .added-items-label{margin-top:0}.added-items-list .object-list-items-container{background-color:#ffffff4d;border-radius:var(--inputBorderRadius);display:flex;flex-direction:column;padding:5px}.added-items-list .object-list-items-container .none-added-label{padding-left:var(--paddingSmall);color:var(--white);opacity:.7}.added-items-list .object-list-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.added-items-list .object-list-item .preview-name{color:var(--formBackground);font-weight:600;margin-left:var(--marginSmall);margin-bottom:2px}.added-items-list .object-list-item .icon-clear{color:var(--formBackground);cursor:pointer}.added-items-list .object-list-item .icon-clear:hover{color:var(--primary)}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] }); }
|
|
1457
1484
|
}
|
|
1458
1485
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ObjectComponent, decorators: [{
|
|
1459
1486
|
type: Component,
|
|
@@ -1479,7 +1506,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1479
1506
|
<div *ngIf="showAdd" class="save-button button" (click)="addClicked()">Add</div>
|
|
1480
1507
|
</div>
|
|
1481
1508
|
</div>
|
|
1482
|
-
`, styles: [":host>label{margin-top:0}.wrapper{border-radius:.
|
|
1509
|
+
`, styles: [":host>label{margin-top:0}.wrapper{border-radius:.3rem;padding:calc(var(--paddingSmall) + 2px) var(--paddingXL);display:flex;flex-direction:column;gap:5px;margin-top:var(--marginXL)}.wrapper.closed{cursor:pointer}.wrapper .object-main-content{display:flex;flex-direction:column;gap:5px}.wrapper .object-main-content[hidden]{display:none}.wrapper .save-button{margin-top:var(--marginSmall);margin-bottom:var(--marginSmall);height:35px;min-width:140px;border-style:solid;border-width:1px;border-color:var(--stroke)}.object-header-container{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}.object-header-container .object-header-title{width:100%;display:flex;justify-content:space-between;align-items:center;height:23px;cursor:pointer}.object-header-container .object-label{margin:0;cursor:pointer}.expand-toggle{font-family:zac;font-weight:600;font-size:23px;width:15px;color:var(--stroke);height:20px;margin-top:-3px;cursor:pointer}.expand-toggle:before{content:\"\\e91f\"}.expand-toggle.open{transform:rotate(270deg);margin-top:7px;margin-right:3px}.added-items-list{margin-top:var(--marginSmall);width:100%}.added-items-list label,.added-items-list .added-items-label{margin-top:0}.added-items-list .object-list-items-container{background-color:#ffffff4d;border-radius:var(--inputBorderRadius);display:flex;flex-direction:column;padding:5px}.added-items-list .object-list-items-container .none-added-label{padding-left:var(--paddingSmall);color:var(--white);opacity:.7}.added-items-list .object-list-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.added-items-list .object-list-item .preview-name{color:var(--formBackground);font-weight:600;margin-left:var(--marginSmall);margin-bottom:2px}.added-items-list .object-list-item .icon-clear{color:var(--formBackground);cursor:pointer}.added-items-list .object-list-item .icon-clear:hover{color:var(--primary)}\n"] }]
|
|
1483
1510
|
}], ctorParameters: function () { return []; }, propDecorators: { wrapperContents: [{
|
|
1484
1511
|
type: ViewChild,
|
|
1485
1512
|
args: ["wrappercontents", { read: ViewContainerRef, static: true }]
|
|
@@ -1513,7 +1540,7 @@ class SelectorInputComponent {
|
|
|
1513
1540
|
this._idName = 'fieldname';
|
|
1514
1541
|
this._valueList = [];
|
|
1515
1542
|
this.listIsObject = false;
|
|
1516
|
-
this.
|
|
1543
|
+
this.hideSelect = false;
|
|
1517
1544
|
this.placeholder = '';
|
|
1518
1545
|
this.parentage = [];
|
|
1519
1546
|
this.labelColor = '#000000';
|
|
@@ -1521,73 +1548,135 @@ class SelectorInputComponent {
|
|
|
1521
1548
|
this.error = '';
|
|
1522
1549
|
this.fieldValueChange = new EventEmitter();
|
|
1523
1550
|
this.valueChange = new Subject();
|
|
1551
|
+
this._isValid = true;
|
|
1524
1552
|
}
|
|
1525
1553
|
set fieldName(name) {
|
|
1526
1554
|
this._fieldName = name;
|
|
1527
1555
|
this._idName = name.replace(/\s/g, '').toLowerCase();
|
|
1528
1556
|
}
|
|
1557
|
+
set fieldValue(val) {
|
|
1558
|
+
this._fieldValue = val;
|
|
1559
|
+
}
|
|
1560
|
+
get fieldValue() {
|
|
1561
|
+
return this._fieldValue;
|
|
1562
|
+
}
|
|
1529
1563
|
set valueList(list) {
|
|
1530
1564
|
this.listIsObject = list?.length > 0 && typeof list[0] !== 'string';
|
|
1531
1565
|
this._valueList = list;
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1566
|
+
let valToSet;
|
|
1567
|
+
list.forEach(item => {
|
|
1568
|
+
if (item.default) {
|
|
1569
|
+
valToSet = item.value;
|
|
1570
|
+
}
|
|
1535
1571
|
});
|
|
1572
|
+
valToSet = valToSet || this.fieldValue;
|
|
1573
|
+
this.reInitSelect();
|
|
1536
1574
|
}
|
|
1537
1575
|
;
|
|
1576
|
+
setIsValid(isValid) {
|
|
1577
|
+
this._isValid = isValid;
|
|
1578
|
+
}
|
|
1538
1579
|
selected() {
|
|
1539
1580
|
debounce(() => {
|
|
1581
|
+
if (this.fieldValue === 'undefined') {
|
|
1582
|
+
this.fieldValue = undefined;
|
|
1583
|
+
}
|
|
1540
1584
|
this.fieldValueChange.emit(this.fieldValue);
|
|
1541
1585
|
this.valueChange.next(this.fieldValue);
|
|
1542
1586
|
}, 500)();
|
|
1543
1587
|
}
|
|
1588
|
+
reInitSelect() {
|
|
1589
|
+
this.hideSelect = true;
|
|
1590
|
+
defer(() => {
|
|
1591
|
+
this.hideSelect = false;
|
|
1592
|
+
});
|
|
1593
|
+
}
|
|
1544
1594
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectorInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1545
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SelectorInputComponent, selector: "lib-selector-input", inputs: { fieldName: "fieldName", fieldValue: "fieldValue", placeholder: "placeholder", parentage: "parentage", valueList: "valueList", labelColor: "labelColor", fieldClass: "fieldClass", error: "error" }, outputs: { fieldValueChange: "fieldValueChange" }, ngImport: i0, template: `
|
|
1546
|
-
<div [ngClass]="fieldClass">
|
|
1547
|
-
<
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1595
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SelectorInputComponent, selector: "lib-selector-input", inputs: { fieldName: "fieldName", fieldValue: "fieldValue", helpText: "helpText", placeholder: "placeholder", parentage: "parentage", valueList: "valueList", labelColor: "labelColor", fieldClass: "fieldClass", error: "error" }, outputs: { fieldValueChange: "fieldValueChange" }, ngImport: i0, template: `
|
|
1596
|
+
<div [ngClass]="fieldClass + (!_isValid ? 'invalid' : '')" class="selector-input-container">
|
|
1597
|
+
<div class="label-container">
|
|
1598
|
+
<label [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1599
|
+
<div
|
|
1600
|
+
*ngIf="helpText"
|
|
1601
|
+
class="form-field-info infoicon"
|
|
1602
|
+
matTooltip="{{helpText}}"
|
|
1603
|
+
matTooltipPosition="above"
|
|
1604
|
+
matTooltipClass="wide-tooltip"
|
|
1605
|
+
></div>
|
|
1606
|
+
</div>
|
|
1607
|
+
<select
|
|
1608
|
+
*ngIf="!hideSelect"
|
|
1609
|
+
id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1610
|
+
class="jsonEntry"
|
|
1611
|
+
[ngClass]="{'error': error}"
|
|
1612
|
+
[(ngModel)]="fieldValue"
|
|
1613
|
+
(change)="selected()"
|
|
1614
|
+
>
|
|
1615
|
+
<option [value]="undefined" *ngIf="placeholder">{{placeholder}}</option>
|
|
1616
|
+
<ng-container *ngIf="!listIsObject">
|
|
1617
|
+
<option *ngFor="let name of _valueList" [value]="name">{{name}}</option>
|
|
1618
|
+
</ng-container>
|
|
1619
|
+
<ng-container *ngIf="listIsObject">
|
|
1620
|
+
<option *ngFor="let data of _valueList" [value]="data.value">{{data.name}}</option>
|
|
1621
|
+
</ng-container>
|
|
1622
|
+
</select>
|
|
1623
|
+
<select
|
|
1624
|
+
*ngIf="hideSelect"
|
|
1625
|
+
class="placeholder-select"
|
|
1626
|
+
[ngClass]="{'error': error}"
|
|
1627
|
+
[(ngModel)]="fieldValue"
|
|
1628
|
+
>
|
|
1559
1629
|
</select>
|
|
1560
1630
|
<div *ngIf="error" class="error">{{error}}</div>
|
|
1561
1631
|
</div>
|
|
1562
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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"] }] }); }
|
|
1632
|
+
`, isInline: true, styles: [".selector-input-container{margin:var(--marginSmall) 0}.selector-input-container label{margin-bottom:0;margin-top:0;width:-moz-fit-content;width:fit-content}.selector-input-container input.error{border-color:red}.selector-input-container div.error{color:red}.label-container{display:flex;gap:5px;margin-bottom:5px;margin-top:10px}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] }); }
|
|
1563
1633
|
}
|
|
1564
1634
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectorInputComponent, decorators: [{
|
|
1565
1635
|
type: Component,
|
|
1566
|
-
args: [{
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1636
|
+
args: [{ selector: 'lib-selector-input', template: `
|
|
1637
|
+
<div [ngClass]="fieldClass + (!_isValid ? 'invalid' : '')" class="selector-input-container">
|
|
1638
|
+
<div class="label-container">
|
|
1639
|
+
<label [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1640
|
+
<div
|
|
1641
|
+
*ngIf="helpText"
|
|
1642
|
+
class="form-field-info infoicon"
|
|
1643
|
+
matTooltip="{{helpText}}"
|
|
1644
|
+
matTooltipPosition="above"
|
|
1645
|
+
matTooltipClass="wide-tooltip"
|
|
1646
|
+
></div>
|
|
1647
|
+
</div>
|
|
1648
|
+
<select
|
|
1649
|
+
*ngIf="!hideSelect"
|
|
1650
|
+
id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1651
|
+
class="jsonEntry"
|
|
1652
|
+
[ngClass]="{'error': error}"
|
|
1653
|
+
[(ngModel)]="fieldValue"
|
|
1654
|
+
(change)="selected()"
|
|
1655
|
+
>
|
|
1656
|
+
<option [value]="undefined" *ngIf="placeholder">{{placeholder}}</option>
|
|
1657
|
+
<ng-container *ngIf="!listIsObject">
|
|
1658
|
+
<option *ngFor="let name of _valueList" [value]="name">{{name}}</option>
|
|
1659
|
+
</ng-container>
|
|
1660
|
+
<ng-container *ngIf="listIsObject">
|
|
1661
|
+
<option *ngFor="let data of _valueList" [value]="data.value">{{data.name}}</option>
|
|
1662
|
+
</ng-container>
|
|
1663
|
+
</select>
|
|
1664
|
+
<select
|
|
1665
|
+
*ngIf="hideSelect"
|
|
1666
|
+
class="placeholder-select"
|
|
1667
|
+
[ngClass]="{'error': error}"
|
|
1668
|
+
[(ngModel)]="fieldValue"
|
|
1669
|
+
>
|
|
1582
1670
|
</select>
|
|
1583
1671
|
<div *ngIf="error" class="error">{{error}}</div>
|
|
1584
1672
|
</div>
|
|
1585
|
-
|
|
1586
|
-
}]
|
|
1673
|
+
`, styles: [".selector-input-container{margin:var(--marginSmall) 0}.selector-input-container label{margin-bottom:0;margin-top:0;width:-moz-fit-content;width:fit-content}.selector-input-container input.error{border-color:red}.selector-input-container div.error{color:red}.label-container{display:flex;gap:5px;margin-bottom:5px;margin-top:10px}\n"] }]
|
|
1587
1674
|
}], propDecorators: { fieldName: [{
|
|
1588
1675
|
type: Input
|
|
1589
1676
|
}], fieldValue: [{
|
|
1590
1677
|
type: Input
|
|
1678
|
+
}], helpText: [{
|
|
1679
|
+
type: Input
|
|
1591
1680
|
}], placeholder: [{
|
|
1592
1681
|
type: Input
|
|
1593
1682
|
}], parentage: [{
|
|
@@ -1632,6 +1721,7 @@ class CheckboxListInputComponent {
|
|
|
1632
1721
|
this.error = '';
|
|
1633
1722
|
this.fieldValueChange = new EventEmitter();
|
|
1634
1723
|
this.valueChange = new Subject();
|
|
1724
|
+
this._isValid = true;
|
|
1635
1725
|
}
|
|
1636
1726
|
set fieldName(name) {
|
|
1637
1727
|
this._fieldName = name;
|
|
@@ -1679,9 +1769,12 @@ class CheckboxListInputComponent {
|
|
|
1679
1769
|
this.valueChange.next(this._fieldValue);
|
|
1680
1770
|
});
|
|
1681
1771
|
}
|
|
1772
|
+
setIsValid(isValid) {
|
|
1773
|
+
this._isValid = isValid;
|
|
1774
|
+
}
|
|
1682
1775
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CheckboxListInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1683
1776
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CheckboxListInputComponent, selector: "lib-checkbox-list-input", inputs: { fieldName: "fieldName", fieldValue: "fieldValue", placeholder: "placeholder", parentage: "parentage", valueList: "valueList", labelColor: "labelColor", fieldClass: "fieldClass", error: "error" }, outputs: { fieldValueChange: "fieldValueChange" }, ngImport: i0, template: `
|
|
1684
|
-
<div [ngClass]="fieldClass">
|
|
1777
|
+
<div [ngClass]="fieldClass + (!_isValid ? ' invalid' : '')">
|
|
1685
1778
|
<label [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1686
1779
|
<div *ngFor="let item of items">
|
|
1687
1780
|
<input type="checkbox"
|
|
@@ -1697,7 +1790,7 @@ class CheckboxListInputComponent {
|
|
|
1697
1790
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CheckboxListInputComponent, decorators: [{
|
|
1698
1791
|
type: Component,
|
|
1699
1792
|
args: [{ selector: 'lib-checkbox-list-input', template: `
|
|
1700
|
-
<div [ngClass]="fieldClass">
|
|
1793
|
+
<div [ngClass]="fieldClass + (!_isValid ? ' invalid' : '')">
|
|
1701
1794
|
<label [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1702
1795
|
<div *ngFor="let item of items">
|
|
1703
1796
|
<input type="checkbox"
|
|
@@ -1756,6 +1849,7 @@ class TextListInputComponent {
|
|
|
1756
1849
|
this.error = '';
|
|
1757
1850
|
this.fieldValueChange = new EventEmitter();
|
|
1758
1851
|
this.valueChange = new Subject();
|
|
1852
|
+
this._isValid = true;
|
|
1759
1853
|
}
|
|
1760
1854
|
set fieldName(name) {
|
|
1761
1855
|
this._fieldName = name;
|
|
@@ -1785,9 +1879,12 @@ class TextListInputComponent {
|
|
|
1785
1879
|
this.valueChange.next(this.fieldValue);
|
|
1786
1880
|
}, 500)();
|
|
1787
1881
|
}
|
|
1882
|
+
setIsValid(isValid) {
|
|
1883
|
+
this._isValid = isValid;
|
|
1884
|
+
}
|
|
1788
1885
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TextListInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1789
1886
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TextListInputComponent, selector: "lib-text-list-input", inputs: { fieldName: "fieldName", fieldValue: "fieldValue", placeholder: "placeholder", parentage: "parentage", labelColor: "labelColor", fieldClass: "fieldClass", error: "error" }, outputs: { fieldValueChange: "fieldValueChange" }, ngImport: i0, template: `
|
|
1790
|
-
<div [ngClass]="fieldClass">
|
|
1887
|
+
<div [ngClass]="fieldClass + (!_isValid ? ' invalid' : '')">
|
|
1791
1888
|
<label for="schema_{{parentage?parentage+'_':''}}{{_idName}}" [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1792
1889
|
<p-chips id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1793
1890
|
(keyup)="onKeyup($event)"
|
|
@@ -1795,7 +1892,7 @@ class TextListInputComponent {
|
|
|
1795
1892
|
[allowDuplicate]="false"
|
|
1796
1893
|
[placeholder]="placeholder"
|
|
1797
1894
|
[addOnBlur]="true"
|
|
1798
|
-
[ngClass]="fieldClass"
|
|
1895
|
+
[ngClass]="fieldClass + (!_isValid ? ' invalid' : '')"
|
|
1799
1896
|
(onBlur)="emitEvents()"
|
|
1800
1897
|
separator=",">
|
|
1801
1898
|
</p-chips>
|
|
@@ -1806,7 +1903,7 @@ class TextListInputComponent {
|
|
|
1806
1903
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TextListInputComponent, decorators: [{
|
|
1807
1904
|
type: Component,
|
|
1808
1905
|
args: [{ selector: 'lib-text-list-input', template: `
|
|
1809
|
-
<div [ngClass]="fieldClass">
|
|
1906
|
+
<div [ngClass]="fieldClass + (!_isValid ? ' invalid' : '')">
|
|
1810
1907
|
<label for="schema_{{parentage?parentage+'_':''}}{{_idName}}" [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1811
1908
|
<p-chips id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1812
1909
|
(keyup)="onKeyup($event)"
|
|
@@ -1814,7 +1911,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1814
1911
|
[allowDuplicate]="false"
|
|
1815
1912
|
[placeholder]="placeholder"
|
|
1816
1913
|
[addOnBlur]="true"
|
|
1817
|
-
[ngClass]="fieldClass"
|
|
1914
|
+
[ngClass]="fieldClass + (!_isValid ? ' invalid' : '')"
|
|
1818
1915
|
(onBlur)="emitEvents()"
|
|
1819
1916
|
separator=",">
|
|
1820
1917
|
</p-chips>
|
|
@@ -1883,6 +1980,12 @@ class ProtocolAddressPortInputComponent {
|
|
|
1883
1980
|
this.portFieldName = 'Port';
|
|
1884
1981
|
this.checkAddressDebounced = debounce(this.checkAddress, 100, { maxWait: 100, leading: true });
|
|
1885
1982
|
this.errors = {};
|
|
1983
|
+
this.props = [
|
|
1984
|
+
{ key: 'protocol', value: undefined },
|
|
1985
|
+
{ key: 'address', value: undefined },
|
|
1986
|
+
{ key: 'hostname', value: undefined },
|
|
1987
|
+
{ key: 'port', value: undefined }
|
|
1988
|
+
];
|
|
1886
1989
|
this._addressChanged = false;
|
|
1887
1990
|
}
|
|
1888
1991
|
ngOnInit() {
|
|
@@ -1915,13 +2018,29 @@ class ProtocolAddressPortInputComponent {
|
|
|
1915
2018
|
const address = isEmpty(this.address) ? undefined : this.address;
|
|
1916
2019
|
const hostname = isEmpty(this.hostname) ? undefined : this.hostname;
|
|
1917
2020
|
const port = !isNumber(this.port) ? undefined : this.port;
|
|
1918
|
-
|
|
2021
|
+
this.props = [
|
|
1919
2022
|
{ key: 'protocol', value: protocol },
|
|
1920
|
-
{ key: 'address', value: address },
|
|
1921
|
-
{ key: 'hostname', value: hostname },
|
|
1922
2023
|
{ key: 'port', value: port }
|
|
1923
2024
|
];
|
|
1924
|
-
|
|
2025
|
+
if (this.showAddress) {
|
|
2026
|
+
this.props.push({ key: 'address', value: address });
|
|
2027
|
+
}
|
|
2028
|
+
if (this.showHostName) {
|
|
2029
|
+
this.props.push({ key: 'hostname', value: hostname });
|
|
2030
|
+
}
|
|
2031
|
+
return this.props;
|
|
2032
|
+
}
|
|
2033
|
+
setValidationErrors(propertyPath = '', validationErrors) {
|
|
2034
|
+
this.props.forEach((prop) => {
|
|
2035
|
+
const hasValidationError = validationErrors?.some((error) => {
|
|
2036
|
+
let pathToMach = error.instancePath;
|
|
2037
|
+
if (!isEmpty(error?.params?.missingProperty)) {
|
|
2038
|
+
pathToMach += '/' + error?.params?.missingProperty;
|
|
2039
|
+
}
|
|
2040
|
+
return pathToMach === propertyPath + '/' + prop.key;
|
|
2041
|
+
});
|
|
2042
|
+
this.errors[prop.key] = hasValidationError;
|
|
2043
|
+
});
|
|
1925
2044
|
}
|
|
1926
2045
|
isValid() {
|
|
1927
2046
|
this.errors = {};
|
|
@@ -1957,7 +2076,7 @@ class ProtocolAddressPortInputComponent {
|
|
|
1957
2076
|
this.hostname = data.hostname;
|
|
1958
2077
|
}
|
|
1959
2078
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProtocolAddressPortInputComponent, deps: [{ token: ValidationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1960
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ProtocolAddressPortInputComponent, selector: "lib-protocol-address-port-input", inputs: { protocolList: "protocolList", showProtocol: "showProtocol", showAddress: "showAddress", showHostName: "showHostName", showPort: "showPort", disableProtocol: "disableProtocol", disableAddress: "disableAddress", disableHostName: "disableHostName", disablePort: "disablePort", protocol: "protocol", address: "address", hostname: "hostname", port: "port", parentage: "parentage", labelColor: "labelColor", labelPrefix: "labelPrefix", fieldClass: "fieldClass", error: "error" }, outputs: { fieldValueChange: "fieldValueChange", portChange: "portChange", addressChange: "addressChange", hostnameChange: "hostnameChange", protocolChange: "protocolChange" }, ngImport: i0, template: "<div class=\"grid {{className}}\">\n <div *ngIf=\"showProtocol\" [ngClass]=\"{disabled: disableProtocol, invalid: errors['protocol']}\">\n <lib-selector-input [fieldName]=\"protocolFieldName\"\n [(fieldValue)]=\"protocol\"\n [labelColor]=\"labelColor\"\n [placeholder]=\"undefined\"\n [valueList]=\"['tcp', 'udp']\"\n (fieldValueChange)=\"update()\"\n ></lib-selector-input>\n </div>\n <div *ngIf=\"showAddress\" [ngClass]=\"{disabled: disableAddress, invalid: errors['address']}\">\n <lib-string-input [fieldName]=\"addressFieldName\"\n [(fieldValue)]=\"address\"\n [labelColor]=\"labelColor\"\n [placeholder]=\"'host.name'\"\n (fieldValueChange)=\"update()\"\n ></lib-string-input>\n </div>\n <div *ngIf=\"showHostName\" [ngClass]=\"{disabled: disableHostName, invalid: errors['hostname']}\">\n <lib-string-input [fieldName]=\"hostnameFieldName\"\n [(fieldValue)]=\"hostname\"\n [labelColor]=\"labelColor\"\n [placeholder]=\"'host.name'\"\n (fieldValueChange)=\"update()\"\n ></lib-string-input>\n </div>\n <div *ngIf=\"showPort\" [ngClass]=\"{disabled: disablePort, invalid: errors['port']}\">\n <lib-number-input [fieldName]=\"portFieldName\"\n [(fieldValue)]=\"port\"\n [labelColor]=\"labelColor\"\n [placeholder]=\"'0'\"\n (fieldValueChange)=\"update()\"\n ></lib-number-input>\n </div>\n</div>\n", styles: [".grid{display:grid;grid-template-columns:auto;grid-gap:10px}.grid.addressFull{grid-template-columns:75px auto 75px}.grid.addressFull .disabled{opacity:.5;pointer-events:none}.grid.address-only{grid-template-columns:auto}.host-name-port{grid-template-columns:auto 75px}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: StringInputComponent, selector: "lib-string-input", inputs: ["fieldName", "fieldValue", "placeholder", "parentage", "labelColor", "fieldClass", "error"], outputs: ["fieldValueChange"] }, { kind: "component", type: NumberInputComponent, selector: "lib-number-input", inputs: ["fieldName", "fieldValue", "placeholder", "parentage", "labelColor", "fieldClass", "error"], outputs: ["fieldValueChange"] }, { kind: "component", type: SelectorInputComponent, selector: "lib-selector-input", inputs: ["fieldName", "fieldValue", "placeholder", "parentage", "valueList", "labelColor", "fieldClass", "error"], outputs: ["fieldValueChange"] }] }); }
|
|
2079
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ProtocolAddressPortInputComponent, selector: "lib-protocol-address-port-input", inputs: { protocolList: "protocolList", showProtocol: "showProtocol", showAddress: "showAddress", showHostName: "showHostName", showPort: "showPort", disableProtocol: "disableProtocol", disableAddress: "disableAddress", disableHostName: "disableHostName", disablePort: "disablePort", protocol: "protocol", address: "address", hostname: "hostname", port: "port", parentage: "parentage", labelColor: "labelColor", labelPrefix: "labelPrefix", fieldClass: "fieldClass", error: "error" }, outputs: { fieldValueChange: "fieldValueChange", portChange: "portChange", addressChange: "addressChange", hostnameChange: "hostnameChange", protocolChange: "protocolChange" }, ngImport: i0, template: "<div class=\"grid {{className}}\">\n <div *ngIf=\"showProtocol\" [ngClass]=\"{disabled: disableProtocol, invalid: errors['protocol']}\">\n <lib-selector-input [fieldName]=\"protocolFieldName\"\n [(fieldValue)]=\"protocol\"\n [labelColor]=\"labelColor\"\n [placeholder]=\"undefined\"\n [valueList]=\"['tcp', 'udp']\"\n (fieldValueChange)=\"update()\"\n ></lib-selector-input>\n </div>\n <div *ngIf=\"showAddress\" [ngClass]=\"{disabled: disableAddress, invalid: errors['address']}\">\n <lib-string-input [fieldName]=\"addressFieldName\"\n [(fieldValue)]=\"address\"\n [labelColor]=\"labelColor\"\n [placeholder]=\"'host.name'\"\n (fieldValueChange)=\"update()\"\n ></lib-string-input>\n </div>\n <div *ngIf=\"showHostName\" [ngClass]=\"{disabled: disableHostName, invalid: errors['hostname']}\">\n <lib-string-input [fieldName]=\"hostnameFieldName\"\n [(fieldValue)]=\"hostname\"\n [labelColor]=\"labelColor\"\n [placeholder]=\"'host.name'\"\n (fieldValueChange)=\"update()\"\n ></lib-string-input>\n </div>\n <div *ngIf=\"showPort\" [ngClass]=\"{disabled: disablePort, invalid: errors['port']}\">\n <lib-number-input [fieldName]=\"portFieldName\"\n [(fieldValue)]=\"port\"\n [labelColor]=\"labelColor\"\n [placeholder]=\"'0'\"\n (fieldValueChange)=\"update()\"\n ></lib-number-input>\n </div>\n</div>\n", styles: [".grid{display:grid;grid-template-columns:auto;grid-gap:10px}.grid.addressFull{grid-template-columns:75px auto 75px}.grid.addressFull .disabled{opacity:.5;pointer-events:none}.grid.address-only{grid-template-columns:auto}.host-name-port{grid-template-columns:auto 75px}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: StringInputComponent, selector: "lib-string-input", inputs: ["fieldName", "helpText", "fieldValue", "placeholder", "parentage", "labelColor", "fieldClass", "error"], outputs: ["fieldValueChange"] }, { kind: "component", type: NumberInputComponent, selector: "lib-number-input", inputs: ["fieldName", "fieldValue", "placeholder", "parentage", "labelColor", "fieldClass", "error"], outputs: ["fieldValueChange"] }, { kind: "component", type: SelectorInputComponent, selector: "lib-selector-input", inputs: ["fieldName", "fieldValue", "helpText", "placeholder", "parentage", "valueList", "labelColor", "fieldClass", "error"], outputs: ["fieldValueChange"] }] }); }
|
|
1961
2080
|
}
|
|
1962
2081
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProtocolAddressPortInputComponent, decorators: [{
|
|
1963
2082
|
type: Component,
|
|
@@ -2569,6 +2688,11 @@ let ListPageServiceClass = class ListPageServiceClass {
|
|
|
2569
2688
|
this.csvDownloadService = csvDownloadService;
|
|
2570
2689
|
this.extensionService = extensionService;
|
|
2571
2690
|
this.router = router;
|
|
2691
|
+
this.CSV_COLUMNS = [
|
|
2692
|
+
{ label: 'Name', path: 'name' },
|
|
2693
|
+
{ label: 'ID', path: 'id' },
|
|
2694
|
+
{ label: 'Created At', path: 'createdAt' }
|
|
2695
|
+
];
|
|
2572
2696
|
this.basePath = '';
|
|
2573
2697
|
this.headerComponentParams = {
|
|
2574
2698
|
filterType: 'TEXTINPUT',
|
|
@@ -2668,13 +2792,26 @@ let ListPageServiceClass = class ListPageServiceClass {
|
|
|
2668
2792
|
row.actionList = [...row.actionList, ...keys];
|
|
2669
2793
|
}
|
|
2670
2794
|
}
|
|
2795
|
+
downloadItems(selectedItems) {
|
|
2796
|
+
this.csvDownloadService.download(this.resourceType, selectedItems, this.CSV_COLUMNS, false, false, undefined, false);
|
|
2797
|
+
}
|
|
2798
|
+
downloadAllItems() {
|
|
2799
|
+
const paging = cloneDeep(this.DEFAULT_PAGING);
|
|
2800
|
+
paging.total = -1;
|
|
2801
|
+
return this.getTableData(this.resourceType, paging, undefined, undefined)
|
|
2802
|
+
.then((results) => {
|
|
2803
|
+
return this.downloadItems(results?.data);
|
|
2804
|
+
});
|
|
2805
|
+
}
|
|
2671
2806
|
getTableData(resourceType, paging, filters, sort) {
|
|
2672
|
-
paging
|
|
2807
|
+
if (!paging) {
|
|
2808
|
+
paging = { ...this.DEFAULT_PAGING };
|
|
2809
|
+
}
|
|
2673
2810
|
if (sort) {
|
|
2674
2811
|
paging.sort = sort.sortBy;
|
|
2675
2812
|
paging.order = sort.ordering;
|
|
2676
2813
|
}
|
|
2677
|
-
for (let idx = 0; idx < filters
|
|
2814
|
+
for (let idx = 0; idx < filters?.length; idx++) {
|
|
2678
2815
|
paging.noSearch = false;
|
|
2679
2816
|
paging.searchOn = filters[idx].columnId;
|
|
2680
2817
|
paging.filter = filters[idx].value;
|
|
@@ -2739,6 +2876,7 @@ class ListPageComponent {
|
|
|
2739
2876
|
this.modalOpen = false;
|
|
2740
2877
|
this.gridObj = {};
|
|
2741
2878
|
this.subscription = new Subscription();
|
|
2879
|
+
this.growlerSvc = inject(GrowlerService);
|
|
2742
2880
|
}
|
|
2743
2881
|
ngOnInit() {
|
|
2744
2882
|
this.filterService.currentPage = 1;
|
|
@@ -2810,6 +2948,18 @@ class ListPageComponent {
|
|
|
2810
2948
|
this.isLoading = false;
|
|
2811
2949
|
});
|
|
2812
2950
|
}
|
|
2951
|
+
downloadAllItems() {
|
|
2952
|
+
this.isLoading = true;
|
|
2953
|
+
this.svc.downloadAllItems().then(() => {
|
|
2954
|
+
const growlerData = new GrowlerModel('success', 'Success', `Download Finished`, `The requested items have been downloaded`);
|
|
2955
|
+
this.growlerSvc.show(growlerData);
|
|
2956
|
+
}).catch(() => {
|
|
2957
|
+
const growlerData = new GrowlerModel('error', 'Error', `Download Failed`, `Failed to retrieve items for download`);
|
|
2958
|
+
this.growlerSvc.show(growlerData);
|
|
2959
|
+
}).finally(() => {
|
|
2960
|
+
this.isLoading = false;
|
|
2961
|
+
});
|
|
2962
|
+
}
|
|
2813
2963
|
openBulkDelete(selectedItems, entityTypeLabel = 'item(s)') {
|
|
2814
2964
|
const selectedIds = selectedItems.map((row) => {
|
|
2815
2965
|
return row.id;
|
|
@@ -3338,6 +3488,9 @@ class PortRangesComponent {
|
|
|
3338
3488
|
});
|
|
3339
3489
|
this.invalid = invalid;
|
|
3340
3490
|
}
|
|
3491
|
+
setIsValid(isValid) {
|
|
3492
|
+
this.invalid = !isValid;
|
|
3493
|
+
}
|
|
3341
3494
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PortRangesComponent, deps: [{ token: ValidationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3342
3495
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PortRangesComponent, selector: "lib-port-ranges", inputs: { fieldValue: "fieldValue" }, outputs: { fieldValueChanged: "fieldValueChanged" }, ngImport: i0, template: "<label>PORT RANGES</label>\n<p-chips\n (onAdd)=\"validateConfig()\"\n (onRemove)=\"validateConfig()\"\n (keyup)=\"onKeyup($event)\"\n [(ngModel)]=\"fieldValue\"\n [allowDuplicate]=\"false\"\n [ngClass]=\"{ error: invalid }\"\n [placeholder]=\"'80 120-125 443 8080'\"\n [addOnBlur]=\"true\"\n separator=\",\"\n>\n</p-chips>", styles: [""], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i3$1.Chips, selector: "p-chips", inputs: ["style", "styleClass", "disabled", "field", "placeholder", "max", "ariaLabel", "ariaLabelledBy", "tabindex", "inputId", "allowDuplicate", "inputStyle", "inputStyleClass", "addOnTab", "addOnBlur", "separator", "showClear"], outputs: ["onAdd", "onRemove", "onFocus", "onBlur", "onChipClick", "onClear"] }] }); }
|
|
3343
3496
|
}
|
|
@@ -3435,6 +3588,14 @@ class ForwardingConfigComponent {
|
|
|
3435
3588
|
this.allowedPortRangesChange = new EventEmitter();
|
|
3436
3589
|
this.allowedProtocolsChange = new EventEmitter();
|
|
3437
3590
|
this.errors = {};
|
|
3591
|
+
this.props = [
|
|
3592
|
+
{ key: 'allowedAddresses', value: undefined },
|
|
3593
|
+
{ key: 'allowedPortRanges', value: undefined },
|
|
3594
|
+
{ key: 'forwardPort', value: undefined },
|
|
3595
|
+
{ key: 'forwardProtocol', value: undefined },
|
|
3596
|
+
{ key: 'forwardAddress', value: undefined },
|
|
3597
|
+
{ key: 'allowedProtocols', value: undefined },
|
|
3598
|
+
];
|
|
3438
3599
|
}
|
|
3439
3600
|
forwardProtocolToggled(event) {
|
|
3440
3601
|
if (!this.forwardProtocol) {
|
|
@@ -3508,6 +3669,19 @@ class ForwardingConfigComponent {
|
|
|
3508
3669
|
}
|
|
3509
3670
|
return isEmpty(this.errors) && papIsValid;
|
|
3510
3671
|
}
|
|
3672
|
+
setValidationErrors(propertyPath = '', validationErrors) {
|
|
3673
|
+
this.props.forEach((prop) => {
|
|
3674
|
+
const hasValidationError = validationErrors?.some((error) => {
|
|
3675
|
+
let pathToMach = error.instancePath;
|
|
3676
|
+
if (!isEmpty(error?.params?.missingProperty)) {
|
|
3677
|
+
pathToMach += '/' + error?.params?.missingProperty;
|
|
3678
|
+
}
|
|
3679
|
+
return pathToMach === propertyPath + '/' + prop.key;
|
|
3680
|
+
});
|
|
3681
|
+
this.errors[prop.key] = hasValidationError;
|
|
3682
|
+
});
|
|
3683
|
+
this.papComponent.setValidationErrors(propertyPath, validationErrors);
|
|
3684
|
+
}
|
|
3511
3685
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ForwardingConfigComponent, deps: [{ token: ForwardingConfigService }, { token: ValidationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3512
3686
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ForwardingConfigComponent, selector: "lib-forwarding-config", inputs: { protocol: "protocol", address: "address", port: "port", forwardProtocol: "forwardProtocol", forwardAddress: "forwardAddress", forwardPort: "forwardPort", allowedAddresses: "allowedAddresses", allowedPortRanges: "allowedPortRanges", allowedProtocols: "allowedProtocols" }, outputs: { protocolChange: "protocolChange", addressChange: "addressChange", portChange: "portChange", forwardProtocolChange: "forwardProtocolChange", forwardAddressChange: "forwardAddressChange", forwardPortChange: "forwardPortChange", allowedAddressesChange: "allowedAddressesChange", allowedPortRangesChange: "allowedPortRangesChange", allowedProtocolsChange: "allowedProtocolsChange" }, viewQueries: [{ propertyName: "papComponent", first: true, predicate: ["papComponent"], descendants: true }], ngImport: i0, template: "<div class=\"forwarding-config-container\">\n <lib-protocol-address-port-input\n [showProtocol]=\"true\"\n [showAddress]=\"true\"\n [showHostName]=\"false\"\n [showPort]=\"true\"\n [disableProtocol]=\"forwardProtocol\"\n [disableAddress]=\"forwardAddress\"\n [disablePort]=\"forwardPort\"\n [(protocol)]=\"protocol\"\n [(address)]=\"address\"\n [(port)]=\"port\"\n #papComponent\n ></lib-protocol-address-port-input>\n <div class=\"forwarding-config-toggles\">\n <lib-boolean-toggle-input\n [fieldName]=\"'FORWARD PROTOCOL'\"\n [(fieldValue)]=\"forwardProtocol\"\n (fieldValueChange)=\"forwardProtocolToggled($event)\"\n >\n </lib-boolean-toggle-input>\n <lib-boolean-toggle-input\n [fieldName]=\"'FORWARD ADDRESS'\"\n [(fieldValue)]=\"forwardAddress\"\n (fieldValueChange)=\"forwardAddressToggled($event)\"\n >\n </lib-boolean-toggle-input>\n <lib-boolean-toggle-input\n [fieldName]=\"'FORWARD PORT'\"\n [(fieldValue)]=\"forwardPort\"\n (fieldValueChange)=\"forwardPortToggled($event)\"\n >\n </lib-boolean-toggle-input>\n </div>\n <div class=\"forwarding-config-allowed-inputs\">\n <lib-checkbox-list-input\n *ngIf=\"forwardProtocol\"\n [ngClass]=\"{invalid: errors['allowedProtocols']}\"\n [fieldName]=\"'ALLOWED PROTOCOLS'\"\n [valueList]=\"['tcp', 'udp']\"\n [(fieldValue)]=\"allowedProtocols\"\n >\n </lib-checkbox-list-input>\n <lib-text-list-input\n *ngIf=\"forwardAddress\"\n [ngClass]=\"{invalid: errors['allowedAddresses']}\"\n [fieldName]=\"'ALLOWED ADDRESSES'\"\n [placeholder]=\"'10.10.0.0/24 domain.com'\"\n [(fieldValue)]=\"allowedAddresses\"\n [labelColor]=\"'#000000'\"\n >\n </lib-text-list-input>\n <lib-text-list-input\n *ngIf=\"forwardPort\"\n [ngClass]=\"{invalid: errors['allowedPortRanges']}\"\n [fieldName]=\"'ALLOWED PORT RANGES'\"\n [placeholder]=\"'80 120-125 443 8080'\"\n [(fieldValue)]=\"allowedPortRanges\"\n [labelColor]=\"'#000000'\"\n [fieldClass]=\"errors['allowedPortRanges'] ? 'error' : ''\"\n (fieldValueChange)=\"validatePortRanges()\"\n >\n </lib-text-list-input>\n </div>\n</div>\n", styles: [".forwarding-config-container{display:flex;flex-direction:column;align-items:center;justify-content:flex-start}.forwarding-config-container .forwarding-config-toggles{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:50px}.forwarding-config-container .forwarding-config-allowed-inputs{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;width:100%}.forwarding-config-container *{width:100%}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: BooleanToggleInputComponent, selector: "lib-boolean-toggle-input", inputs: ["fieldName", "fieldValue", "parentage", "labelColor", "fieldClass", "error"], outputs: ["fieldValueChange"] }, { kind: "component", type: TextListInputComponent, selector: "lib-text-list-input", inputs: ["fieldName", "fieldValue", "placeholder", "parentage", "labelColor", "fieldClass", "error"], outputs: ["fieldValueChange"] }, { kind: "component", type: CheckboxListInputComponent, selector: "lib-checkbox-list-input", inputs: ["fieldName", "fieldValue", "placeholder", "parentage", "valueList", "labelColor", "fieldClass", "error"], outputs: ["fieldValueChange"] }, { kind: "component", type: ProtocolAddressPortInputComponent, selector: "lib-protocol-address-port-input", inputs: ["protocolList", "showProtocol", "showAddress", "showHostName", "showPort", "disableProtocol", "disableAddress", "disableHostName", "disablePort", "protocol", "address", "hostname", "port", "parentage", "labelColor", "labelPrefix", "fieldClass", "error"], outputs: ["fieldValueChange", "portChange", "addressChange", "hostnameChange", "protocolChange"] }] }); }
|
|
3513
3687
|
}
|
|
@@ -3991,9 +4165,9 @@ class SchemaService {
|
|
|
3991
4165
|
const val = list?.length > 0 ? list[0] : '';
|
|
3992
4166
|
let componentRef = view.createComponent(SelectorInputComponent);
|
|
3993
4167
|
componentRef.setInput('fieldName', this.getLabel(key));
|
|
4168
|
+
componentRef.setInput('placeholder', `select ${key}`);
|
|
3994
4169
|
if (parentage && !_.isEmpty(parentage))
|
|
3995
4170
|
componentRef.setInput('parentage', parentage);
|
|
3996
|
-
componentRef.setInput('fieldValue', val);
|
|
3997
4171
|
componentRef.setInput('valueList', list);
|
|
3998
4172
|
componentRef.setInput('labelColor', this.lColorArray[nestLevel]);
|
|
3999
4173
|
return componentRef;
|
|
@@ -5304,23 +5478,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
5304
5478
|
See the License for the specific language governing permissions and
|
|
5305
5479
|
limitations under the License.
|
|
5306
5480
|
*/
|
|
5307
|
-
const CSV_COLUMNS$5 = [
|
|
5308
|
-
{ label: 'Name', path: 'name' },
|
|
5309
|
-
{ label: 'Roles', path: 'roleAttributes' },
|
|
5310
|
-
{ label: 'Online', path: 'hasApiSession' },
|
|
5311
|
-
{ label: 'Edge Router Connected', path: 'hasEdgeRouterConnection' },
|
|
5312
|
-
{ label: 'OS', path: 'envInfo.os' },
|
|
5313
|
-
{ label: 'OS Version', path: 'envInfo.osVersion' },
|
|
5314
|
-
{ label: 'SDK', path: 'sdkInfo.version' },
|
|
5315
|
-
{ label: 'App Version', path: 'sdkInfo.appVersion' },
|
|
5316
|
-
{ label: 'Type', path: 'typeId' },
|
|
5317
|
-
{ label: 'Is Admin', path: 'isAdmin' },
|
|
5318
|
-
{ label: 'Auth Policy', path: 'authPolicy.name' },
|
|
5319
|
-
{ label: 'Auth Policy ID', path: 'authPolicy.id' },
|
|
5320
|
-
{ label: 'MFA Enabled', path: 'isMfaEnabled' },
|
|
5321
|
-
{ label: 'Created At', path: 'createdAt' },
|
|
5322
|
-
{ label: 'ID', path: 'id' },
|
|
5323
|
-
];
|
|
5324
5481
|
class IdentitiesPageService extends ListPageServiceClass {
|
|
5325
5482
|
constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService, router) {
|
|
5326
5483
|
super(settings, filterService, csvDownloadService, extService, router);
|
|
@@ -5331,6 +5488,23 @@ class IdentitiesPageService extends ListPageServiceClass {
|
|
|
5331
5488
|
this.router = router;
|
|
5332
5489
|
this.paging = this.DEFAULT_PAGING;
|
|
5333
5490
|
this.modalType = 'identities';
|
|
5491
|
+
this.CSV_COLUMNS = [
|
|
5492
|
+
{ label: 'Name', path: 'name' },
|
|
5493
|
+
{ label: 'Roles', path: 'roleAttributes' },
|
|
5494
|
+
{ label: 'Online', path: 'hasApiSession' },
|
|
5495
|
+
{ label: 'Edge Router Connected', path: 'hasEdgeRouterConnection' },
|
|
5496
|
+
{ label: 'OS', path: 'envInfo.os' },
|
|
5497
|
+
{ label: 'OS Version', path: 'envInfo.osVersion' },
|
|
5498
|
+
{ label: 'SDK', path: 'sdkInfo.version' },
|
|
5499
|
+
{ label: 'App Version', path: 'sdkInfo.appVersion' },
|
|
5500
|
+
{ label: 'Type', path: 'typeId' },
|
|
5501
|
+
{ label: 'Is Admin', path: 'isAdmin' },
|
|
5502
|
+
{ label: 'Auth Policy', path: 'authPolicy.name' },
|
|
5503
|
+
{ label: 'Auth Policy ID', path: 'authPolicy.id' },
|
|
5504
|
+
{ label: 'MFA Enabled', path: 'isMfaEnabled' },
|
|
5505
|
+
{ label: 'Created At', path: 'createdAt' },
|
|
5506
|
+
{ label: 'ID', path: 'id' },
|
|
5507
|
+
];
|
|
5334
5508
|
this.selectedIdentity = new Identity$1();
|
|
5335
5509
|
this.columnFilters = {
|
|
5336
5510
|
name: '',
|
|
@@ -5696,14 +5870,6 @@ class IdentitiesPageService extends ListPageServiceClass {
|
|
|
5696
5870
|
}
|
|
5697
5871
|
return expiresAt;
|
|
5698
5872
|
}
|
|
5699
|
-
downloadAllItems() {
|
|
5700
|
-
const paging = cloneDeep(this.paging);
|
|
5701
|
-
paging.total = 2000;
|
|
5702
|
-
super.getTableData('identities', paging, undefined, undefined)
|
|
5703
|
-
.then((results) => {
|
|
5704
|
-
return this.downloadItems(results?.data);
|
|
5705
|
-
});
|
|
5706
|
-
}
|
|
5707
5873
|
resetEnrollment(identity, date) {
|
|
5708
5874
|
let id = identity?.authenticators?.cert?.id;
|
|
5709
5875
|
if (!id) {
|
|
@@ -5725,9 +5891,6 @@ class IdentitiesPageService extends ListPageServiceClass {
|
|
|
5725
5891
|
this.growlerService.show(growlerData);
|
|
5726
5892
|
});
|
|
5727
5893
|
}
|
|
5728
|
-
downloadItems(selectedItems) {
|
|
5729
|
-
this.csvDownloadService.download('identities', selectedItems, CSV_COLUMNS$5, false, false, undefined, false);
|
|
5730
|
-
}
|
|
5731
5894
|
openUpdate(itemId) {
|
|
5732
5895
|
this.modalType = 'identity';
|
|
5733
5896
|
this.sideModalOpen = true;
|
|
@@ -5889,24 +6052,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
5889
6052
|
args: [EDGE_ROUTER_EXTENSION_SERVICE]
|
|
5890
6053
|
}] }]; } });
|
|
5891
6054
|
|
|
5892
|
-
const CSV_COLUMNS$4 = [
|
|
5893
|
-
{ label: 'Name', path: 'name' },
|
|
5894
|
-
{ label: 'Attributes', path: 'roleAttributes' },
|
|
5895
|
-
{ label: 'Verified', path: 'isVerified' },
|
|
5896
|
-
{ label: 'Online', path: 'isOnline' },
|
|
5897
|
-
{ label: 'Created', path: 'createdAt' },
|
|
5898
|
-
{ label: 'Token', path: 'enrollmentToken' },
|
|
5899
|
-
{ label: 'No Traversal', path: 'noTraversal' },
|
|
5900
|
-
{ label: 'Host Name', path: 'hostname' },
|
|
5901
|
-
{ label: 'Disabled', path: 'disabled' },
|
|
5902
|
-
{ label: 'Tunneler Enabled', path: 'isTunnelerEnabled' },
|
|
5903
|
-
{ label: 'OS', path: 'versionInfo.os' },
|
|
5904
|
-
{ label: 'Architecture', path: 'versionInfo.arch' },
|
|
5905
|
-
{ label: 'Version', path: 'versionInfo.version' },
|
|
5906
|
-
{ label: 'Revision', path: 'versionInfo.revision' },
|
|
5907
|
-
{ label: 'Fingerprint', path: 'fingerprint' },
|
|
5908
|
-
{ label: 'ID', path: 'id' },
|
|
5909
|
-
];
|
|
5910
6055
|
class EdgeRoutersPageService extends ListPageServiceClass {
|
|
5911
6056
|
constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService, router) {
|
|
5912
6057
|
super(settings, filterService, csvDownloadService, extService, router);
|
|
@@ -5918,6 +6063,24 @@ class EdgeRoutersPageService extends ListPageServiceClass {
|
|
|
5918
6063
|
this.router = router;
|
|
5919
6064
|
this.paging = this.DEFAULT_PAGING;
|
|
5920
6065
|
this.modalType = 'edge-router';
|
|
6066
|
+
this.CSV_COLUMNS = [
|
|
6067
|
+
{ label: 'Name', path: 'name' },
|
|
6068
|
+
{ label: 'Attributes', path: 'roleAttributes' },
|
|
6069
|
+
{ label: 'Verified', path: 'isVerified' },
|
|
6070
|
+
{ label: 'Online', path: 'isOnline' },
|
|
6071
|
+
{ label: 'Created', path: 'createdAt' },
|
|
6072
|
+
{ label: 'Token', path: 'enrollmentToken' },
|
|
6073
|
+
{ label: 'No Traversal', path: 'noTraversal' },
|
|
6074
|
+
{ label: 'Host Name', path: 'hostname' },
|
|
6075
|
+
{ label: 'Disabled', path: 'disabled' },
|
|
6076
|
+
{ label: 'Tunneler Enabled', path: 'isTunnelerEnabled' },
|
|
6077
|
+
{ label: 'OS', path: 'versionInfo.os' },
|
|
6078
|
+
{ label: 'Architecture', path: 'versionInfo.arch' },
|
|
6079
|
+
{ label: 'Version', path: 'versionInfo.version' },
|
|
6080
|
+
{ label: 'Revision', path: 'versionInfo.revision' },
|
|
6081
|
+
{ label: 'Fingerprint', path: 'fingerprint' },
|
|
6082
|
+
{ label: 'ID', path: 'id' },
|
|
6083
|
+
];
|
|
5921
6084
|
this.selectedEdgeRouter = new EdgeRouter();
|
|
5922
6085
|
this.columnFilters = {
|
|
5923
6086
|
name: '',
|
|
@@ -6107,8 +6270,9 @@ class EdgeRoutersPageService extends ListPageServiceClass {
|
|
|
6107
6270
|
}
|
|
6108
6271
|
return tableColumns;
|
|
6109
6272
|
}
|
|
6110
|
-
getData(filters, sort) {
|
|
6273
|
+
getData(filters, sort, page) {
|
|
6111
6274
|
// we can customize filters or sorting here before moving on...
|
|
6275
|
+
this.paging.page = page || this.paging.page;
|
|
6112
6276
|
return super.getTableData('edge-routers', this.paging, filters, sort)
|
|
6113
6277
|
.then((results) => {
|
|
6114
6278
|
return this.processData(results);
|
|
@@ -6149,17 +6313,6 @@ class EdgeRoutersPageService extends ListPageServiceClass {
|
|
|
6149
6313
|
element.click();
|
|
6150
6314
|
document.body.removeChild(element);
|
|
6151
6315
|
}
|
|
6152
|
-
downloadAllItems() {
|
|
6153
|
-
const paging = cloneDeep(this.paging);
|
|
6154
|
-
paging.total = 2000;
|
|
6155
|
-
super.getTableData('edge-routers', paging, undefined, undefined)
|
|
6156
|
-
.then((results) => {
|
|
6157
|
-
return this.downloadItems(results?.data);
|
|
6158
|
-
});
|
|
6159
|
-
}
|
|
6160
|
-
downloadItems(selectedItems) {
|
|
6161
|
-
this.csvDownloadService.download('edge-routers', selectedItems, CSV_COLUMNS$4, false, false, undefined, false);
|
|
6162
|
-
}
|
|
6163
6316
|
reenroll(router) {
|
|
6164
6317
|
const data = {
|
|
6165
6318
|
appendId: 'ReenrollRouter',
|
|
@@ -6312,6 +6465,9 @@ class QrCodeComponent {
|
|
|
6312
6465
|
});
|
|
6313
6466
|
}
|
|
6314
6467
|
expandQRCode() {
|
|
6468
|
+
if (!this.canExpand) {
|
|
6469
|
+
return;
|
|
6470
|
+
}
|
|
6315
6471
|
const data = {
|
|
6316
6472
|
jwt: this.jwt,
|
|
6317
6473
|
expiration: this.expiration,
|
|
@@ -7952,6 +8108,12 @@ class ConfigurationsPageComponent extends ListPageComponent {
|
|
|
7952
8108
|
case 'delete':
|
|
7953
8109
|
this.deleteItem(event.item);
|
|
7954
8110
|
break;
|
|
8111
|
+
case 'download-all':
|
|
8112
|
+
this.downloadAllItems();
|
|
8113
|
+
break;
|
|
8114
|
+
case 'download-selected':
|
|
8115
|
+
this.svc.downloadItems(this.selectedItems);
|
|
8116
|
+
break;
|
|
7955
8117
|
default:
|
|
7956
8118
|
break;
|
|
7957
8119
|
}
|
|
@@ -8648,7 +8810,7 @@ class JsonViewComponent {
|
|
|
8648
8810
|
text: undefined,
|
|
8649
8811
|
json: this.data || {}
|
|
8650
8812
|
};
|
|
8651
|
-
this.editor =
|
|
8813
|
+
this.editor = createJSONEditor({
|
|
8652
8814
|
target: this.editorDiv.nativeElement,
|
|
8653
8815
|
props: {
|
|
8654
8816
|
validator: this.validator,
|
|
@@ -10471,7 +10633,7 @@ class IdentitiesPageComponent extends ListPageComponent {
|
|
|
10471
10633
|
this.showQRCode(event.item);
|
|
10472
10634
|
break;
|
|
10473
10635
|
case 'download-all':
|
|
10474
|
-
this.
|
|
10636
|
+
this.downloadAllItems();
|
|
10475
10637
|
break;
|
|
10476
10638
|
case 'download-selected':
|
|
10477
10639
|
this.svc.downloadItems(this.selectedItems);
|
|
@@ -10648,7 +10810,7 @@ class EdgeRoutersPageComponent extends ListPageComponent {
|
|
|
10648
10810
|
this.downloadJWT(event.item);
|
|
10649
10811
|
break;
|
|
10650
10812
|
case 'download-all':
|
|
10651
|
-
this.
|
|
10813
|
+
this.downloadAllItems();
|
|
10652
10814
|
break;
|
|
10653
10815
|
case 'download-selected':
|
|
10654
10816
|
this.svc.downloadItems(this.selectedItems);
|
|
@@ -10949,10 +11111,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
10949
11111
|
See the License for the specific language governing permissions and
|
|
10950
11112
|
limitations under the License.
|
|
10951
11113
|
*/
|
|
10952
|
-
const CSV_COLUMNS$3 = [
|
|
10953
|
-
{ label: 'Name', path: 'name' },
|
|
10954
|
-
{ label: 'Created At', path: 'createdAt' }
|
|
10955
|
-
];
|
|
10956
11114
|
class ServicesPageService extends ListPageServiceClass {
|
|
10957
11115
|
constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService, router, servicePolicyService) {
|
|
10958
11116
|
super(settings, filterService, csvDownloadService, extService, router);
|
|
@@ -10965,6 +11123,13 @@ class ServicesPageService extends ListPageServiceClass {
|
|
|
10965
11123
|
this.servicePolicyService = servicePolicyService;
|
|
10966
11124
|
this.paging = this.DEFAULT_PAGING;
|
|
10967
11125
|
this.modalType = 'service';
|
|
11126
|
+
this.CSV_COLUMNS = [
|
|
11127
|
+
{ label: 'Name', path: 'name' },
|
|
11128
|
+
{ label: 'ID', path: 'id' },
|
|
11129
|
+
{ label: 'Encryption Required', path: 'encryptionRequired' },
|
|
11130
|
+
{ label: 'Terminator Strategy', path: 'terminatorStrategy' },
|
|
11131
|
+
{ label: 'Created At', path: 'createdAt' },
|
|
11132
|
+
];
|
|
10968
11133
|
this.serviceType = '';
|
|
10969
11134
|
this.selectedService = new Service$1();
|
|
10970
11135
|
this.columnFilters = {
|
|
@@ -11094,17 +11259,6 @@ class ServicesPageService extends ListPageServiceClass {
|
|
|
11094
11259
|
getIdentityRoleAttributes() {
|
|
11095
11260
|
return this.zitiService.get('identity-role-attributes', {}, []);
|
|
11096
11261
|
}
|
|
11097
|
-
downloadAllItems() {
|
|
11098
|
-
const paging = cloneDeep(this.paging);
|
|
11099
|
-
paging.total = this.totalCount;
|
|
11100
|
-
super.getTableData('services', paging, undefined, undefined)
|
|
11101
|
-
.then((results) => {
|
|
11102
|
-
return this.downloadItems(results?.data);
|
|
11103
|
-
});
|
|
11104
|
-
}
|
|
11105
|
-
downloadItems(selectedItems) {
|
|
11106
|
-
this.csvDownloadService.download('services', selectedItems, CSV_COLUMNS$3, false, false, undefined, false);
|
|
11107
|
-
}
|
|
11108
11262
|
openSelection() {
|
|
11109
11263
|
this.router.navigateByUrl('/services/select');
|
|
11110
11264
|
}
|
|
@@ -11565,7 +11719,7 @@ class ServicesPageComponent extends ListPageComponent {
|
|
|
11565
11719
|
this.deleteItem(event.item);
|
|
11566
11720
|
break;
|
|
11567
11721
|
case 'download-all':
|
|
11568
|
-
this.
|
|
11722
|
+
this.downloadAllItems();
|
|
11569
11723
|
break;
|
|
11570
11724
|
case 'download-selected':
|
|
11571
11725
|
this.svc.downloadItems(this.selectedItems);
|
|
@@ -12197,7 +12351,7 @@ class GrowlerComponent {
|
|
|
12197
12351
|
this.show = true;
|
|
12198
12352
|
setTimeout(() => {
|
|
12199
12353
|
this.show = false;
|
|
12200
|
-
},
|
|
12354
|
+
}, 7000);
|
|
12201
12355
|
}
|
|
12202
12356
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GrowlerComponent, deps: [{ token: GrowlerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12203
12357
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GrowlerComponent, selector: "lib-growler", inputs: { title: "title", subtitle: "subtitle", level: "level", content: "content", show: "show" }, ngImport: i0, template: `
|
|
@@ -12206,7 +12360,7 @@ class GrowlerComponent {
|
|
|
12206
12360
|
<div class="subtitle">{{ subtitle }}</div>
|
|
12207
12361
|
<div [innerHTML]="content" class="content"></div>
|
|
12208
12362
|
<div class="icon"></div>
|
|
12209
|
-
</div>`, isInline: true, styles: ["#Growler{position:fixed;right:20px;bottom:-100px;min-width:300px;z-index:999999999;max-width:500px}#NotificationsMenu .growler{position:relative;width:100%;margin-bottom:20px;opacity:1}.growler{background-color:var(--background);min-height:105px;min-width:334px;font-size:16px;color:#000;text-align:left;border-radius:6px;box-shadow:0 12px 23px #0000001a;transition:.5s;opacity:0}#Growler.open{bottom:20px}.growler.open{opacity:1}.growler .time{font-size:13px;color:#fff;position:absolute;top:7px;right:10px;font-weight:600;font-family:Open Sans,serif}.growler.error .title{background-color:#ff104b}.growler.success .title{background-color:#03db5c}.growler.warning .title{background-color:#ffc103}.growler.info .title{background-color:#0971ff}.growler.bug .title{background-color:#ff104b}.growler .title{padding-left:10px;padding-right:10px;font-size:14px;color:#fff;line-height:30px;text-transform:uppercase;background-color:#03db5c;border-top-left-radius:6px;border-top-right-radius:6px;font-weight:600;font-family:Open Sans,serif}.growler .subtitle{padding-top:10px;font-size:15px;font-weight:700;padding-left:75px;padding-right:10px}.growler .content{font-size:13px;padding-left:75px;padding-right:10px;margin-top:2px;line-height:14px;text-overflow:ellipsis;overflow:hidden;font-weight:400;font-family:Open Sans,serif;color:var(--tableText);padding-bottom:10px}.growler .icon{width:55px;height:55px;background-position:center center;background-size:80%;position:absolute;left:10px;top:40px}.growler.error .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.success .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.info .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.warning .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.bug .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg style%3D'enable-background%3Anew 0 0 21 24%3B' version%3D'1.1' viewBox%3D'0 0 21 24' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFE1EB%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09'%2F%3E %3Cpolygon class%3D'st0' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'10.5%2C8.5 15.5%2C8.5 14%2C5 10.5%2C4 %09'%2F%3E %3Cpolygon class%3D'st1' points%3D'10.5%2C23.5 15.5%2C21 15.5%2C10.5 10.5%2C10.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cg%3E%09%09%3Cpolyline class%3D'st2' points%3D'6.5%2C0.5 6.5%2C2.5 8.1%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'14.5%2C0.5 14.5%2C2.5 12.9%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C10.5 3%2C10.5 0.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C14.5 3%2C14.5 0.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C18.5 3%2C18.5 0.5%2C20.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C10.5 18%2C10.5 20.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C14.5 18%2C14.5 20.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C18.5 18%2C18.5 20.5%2C20.5 %09%09'%2F%3E %3Cline class%3D'st2' x1%3D'10.5' x2%3D'10.5' y1%3D'23.5' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'5.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'15.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cpolygon class%3D'st2' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09%09'%2F%3E %3Cpolygon class%3D'st2' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09%09'%2F%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}#NotificationsMenu{z-index:9999;width:0;position:fixed;top:0;bottom:0;left:-80px;background-color:var(--background);border-right:3px solid var(--inputBorder);transition:.3s;opacity:0;overflow:hidden}#NotificationsList{overflow-x:visible;overflow-y:auto;position:absolute;inset:70px 0 0;clear:both;padding:0 22px 22px}#NotificationsMenu.open,#NotificationsList.open{width:380px;left:0;opacity:1}#NotificationsMenu .header.icon{background-image:unset;text-align:center;font-size:30px;font-weight:800;color:var(--icon);line-height:30px;position:relative;float:left;width:30px;height:30px;margin:20px 33px 20px 20px;background-size:75%;left:10px;top:0}#NotificationsMenu .header.title{font-weight:300;font-family:Russo One,serif;font-size:24px;line-height:78px;color:var(--primaryColor);filter:brightness(50%);padding-left:20px;text-transform:uppercase}.NoNotificationsText{margin:0;color:var(--tableText);font-weight:600;font-family:Open Sans,Arial,sans-serif;font-size:14px}#NotificationMenuClose{color:var(--icon);font-size:35px;text-align:center;font-weight:600;line-height:40px;width:40px;height:40px;position:absolute;right:16px;top:17px;cursor:pointer;z-index:20;transition:.3s}#NotificationMenuClose:hover{filter:brightness(50%);transition:.3s}#NotificationMenuClose:active{filter:none;transform:scale(.95);transition:.3s}.sev{height:64px;background-size:40%;background-position:center center;position:relative;float:left}.sevError,.sevMajor,.sevCritical{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevWarning,.sevMinor{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevInfo{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevSuccess{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
12363
|
+
</div>`, isInline: true, styles: ["#Growler{position:fixed;right:20px;bottom:-100px;min-width:300px;z-index:999999999;max-width:500px}#NotificationsMenu .growler{position:relative;width:100%;margin-bottom:20px;opacity:1}.growler{background-color:var(--background);min-height:105px;min-width:334px;font-size:16px;color:#000;text-align:left;border-radius:6px;box-shadow:0 12px 23px #0000001a;transition:.5s;opacity:0}#Growler.open{bottom:20px}.growler.open{opacity:1}.growler .time{font-size:13px;color:#fff;position:absolute;top:7px;right:10px;font-weight:600;font-family:Open Sans,serif}.growler.error .title{background-color:#ff104b}.growler.success .title{background-color:#03db5c}.growler.warning .title{background-color:#ffc103}.growler.info .title{background-color:#0971ff}.growler.bug .title{background-color:#ff104b}.growler .title{padding-left:10px;padding-right:10px;font-size:14px;color:#fff;line-height:30px;text-transform:uppercase;background-color:#03db5c;border-top-left-radius:6px;border-top-right-radius:6px;font-weight:600;font-family:Open Sans,serif}.growler .subtitle{padding-top:10px;font-size:15px;font-weight:700;padding-left:75px;padding-right:10px}.growler .content{font-size:13px;padding-left:75px;padding-right:10px;margin-top:2px;line-height:14px;text-overflow:ellipsis;overflow:hidden;font-weight:400;font-family:Open Sans,serif;color:var(--tableText);padding-bottom:10px}.growler .icon{width:55px;height:55px;background-position:center center;background-size:80%;position:absolute;left:10px;top:40px}.growler.error .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.success .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.info .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.warning .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.bug .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg style%3D'enable-background%3Anew 0 0 21 24%3B' version%3D'1.1' viewBox%3D'0 0 21 24' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFE1EB%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09'%2F%3E %3Cpolygon class%3D'st0' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'10.5%2C8.5 15.5%2C8.5 14%2C5 10.5%2C4 %09'%2F%3E %3Cpolygon class%3D'st1' points%3D'10.5%2C23.5 15.5%2C21 15.5%2C10.5 10.5%2C10.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cg%3E%09%09%3Cpolyline class%3D'st2' points%3D'6.5%2C0.5 6.5%2C2.5 8.1%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'14.5%2C0.5 14.5%2C2.5 12.9%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C10.5 3%2C10.5 0.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C14.5 3%2C14.5 0.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C18.5 3%2C18.5 0.5%2C20.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C10.5 18%2C10.5 20.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C14.5 18%2C14.5 20.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C18.5 18%2C18.5 20.5%2C20.5 %09%09'%2F%3E %3Cline class%3D'st2' x1%3D'10.5' x2%3D'10.5' y1%3D'23.5' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'5.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'15.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cpolygon class%3D'st2' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09%09'%2F%3E %3Cpolygon class%3D'st2' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09%09'%2F%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}#NotificationsMenu{z-index:9999;width:0;position:fixed;top:0;bottom:0;left:-80px;background-color:var(--background);border-right:3px solid var(--inputBorder);transition:.3s;opacity:0;overflow:hidden}#NotificationsList{overflow-x:visible;overflow-y:auto;position:absolute;inset:70px 0 0;clear:both;padding:0 22px 22px}#NotificationsMenu.open,#NotificationsList.open{width:380px;left:0;opacity:1}#NotificationsMenu .header.icon{background-image:unset;text-align:center;font-size:30px;font-weight:800;color:var(--icon);line-height:30px;position:relative;float:left;width:30px;height:30px;margin:20px 33px 20px 20px;background-size:75%;left:10px;top:0}#NotificationsMenu .header.title{font-weight:300;font-family:Russo One,serif;font-size:24px;line-height:78px;color:var(--primaryColor);filter:brightness(50%);padding-left:20px;text-transform:uppercase}.NoNotificationsText{margin:0;color:var(--tableText);font-weight:600;font-family:Open Sans,Arial,sans-serif;font-size:14px}#NotificationMenuClose{color:var(--icon);font-size:35px;text-align:center;font-weight:600;line-height:40px;width:40px;height:40px;position:absolute;right:16px;top:17px;cursor:pointer;z-index:20;transition:.3s}#NotificationMenuClose:hover{filter:brightness(50%);transition:.3s}#NotificationMenuClose:active{filter:none;transform:scale(.95);transition:.3s}.sev{height:64px;background-size:40%;background-position:center center;position:relative;float:left}.sevError,.sevMajor,.sevCritical{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevWarning,.sevMinor{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevInfo{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevSuccess{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}::ng-deep .growler .content ul{margin-top:5px}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
12210
12364
|
}
|
|
12211
12365
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GrowlerComponent, decorators: [{
|
|
12212
12366
|
type: Component,
|
|
@@ -12216,7 +12370,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
12216
12370
|
<div class="subtitle">{{ subtitle }}</div>
|
|
12217
12371
|
<div [innerHTML]="content" class="content"></div>
|
|
12218
12372
|
<div class="icon"></div>
|
|
12219
|
-
</div>`, styles: ["#Growler{position:fixed;right:20px;bottom:-100px;min-width:300px;z-index:999999999;max-width:500px}#NotificationsMenu .growler{position:relative;width:100%;margin-bottom:20px;opacity:1}.growler{background-color:var(--background);min-height:105px;min-width:334px;font-size:16px;color:#000;text-align:left;border-radius:6px;box-shadow:0 12px 23px #0000001a;transition:.5s;opacity:0}#Growler.open{bottom:20px}.growler.open{opacity:1}.growler .time{font-size:13px;color:#fff;position:absolute;top:7px;right:10px;font-weight:600;font-family:Open Sans,serif}.growler.error .title{background-color:#ff104b}.growler.success .title{background-color:#03db5c}.growler.warning .title{background-color:#ffc103}.growler.info .title{background-color:#0971ff}.growler.bug .title{background-color:#ff104b}.growler .title{padding-left:10px;padding-right:10px;font-size:14px;color:#fff;line-height:30px;text-transform:uppercase;background-color:#03db5c;border-top-left-radius:6px;border-top-right-radius:6px;font-weight:600;font-family:Open Sans,serif}.growler .subtitle{padding-top:10px;font-size:15px;font-weight:700;padding-left:75px;padding-right:10px}.growler .content{font-size:13px;padding-left:75px;padding-right:10px;margin-top:2px;line-height:14px;text-overflow:ellipsis;overflow:hidden;font-weight:400;font-family:Open Sans,serif;color:var(--tableText);padding-bottom:10px}.growler .icon{width:55px;height:55px;background-position:center center;background-size:80%;position:absolute;left:10px;top:40px}.growler.error .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.success .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.info .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.warning .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.bug .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg style%3D'enable-background%3Anew 0 0 21 24%3B' version%3D'1.1' viewBox%3D'0 0 21 24' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFE1EB%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09'%2F%3E %3Cpolygon class%3D'st0' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'10.5%2C8.5 15.5%2C8.5 14%2C5 10.5%2C4 %09'%2F%3E %3Cpolygon class%3D'st1' points%3D'10.5%2C23.5 15.5%2C21 15.5%2C10.5 10.5%2C10.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cg%3E%09%09%3Cpolyline class%3D'st2' points%3D'6.5%2C0.5 6.5%2C2.5 8.1%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'14.5%2C0.5 14.5%2C2.5 12.9%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C10.5 3%2C10.5 0.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C14.5 3%2C14.5 0.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C18.5 3%2C18.5 0.5%2C20.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C10.5 18%2C10.5 20.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C14.5 18%2C14.5 20.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C18.5 18%2C18.5 20.5%2C20.5 %09%09'%2F%3E %3Cline class%3D'st2' x1%3D'10.5' x2%3D'10.5' y1%3D'23.5' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'5.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'15.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cpolygon class%3D'st2' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09%09'%2F%3E %3Cpolygon class%3D'st2' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09%09'%2F%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}#NotificationsMenu{z-index:9999;width:0;position:fixed;top:0;bottom:0;left:-80px;background-color:var(--background);border-right:3px solid var(--inputBorder);transition:.3s;opacity:0;overflow:hidden}#NotificationsList{overflow-x:visible;overflow-y:auto;position:absolute;inset:70px 0 0;clear:both;padding:0 22px 22px}#NotificationsMenu.open,#NotificationsList.open{width:380px;left:0;opacity:1}#NotificationsMenu .header.icon{background-image:unset;text-align:center;font-size:30px;font-weight:800;color:var(--icon);line-height:30px;position:relative;float:left;width:30px;height:30px;margin:20px 33px 20px 20px;background-size:75%;left:10px;top:0}#NotificationsMenu .header.title{font-weight:300;font-family:Russo One,serif;font-size:24px;line-height:78px;color:var(--primaryColor);filter:brightness(50%);padding-left:20px;text-transform:uppercase}.NoNotificationsText{margin:0;color:var(--tableText);font-weight:600;font-family:Open Sans,Arial,sans-serif;font-size:14px}#NotificationMenuClose{color:var(--icon);font-size:35px;text-align:center;font-weight:600;line-height:40px;width:40px;height:40px;position:absolute;right:16px;top:17px;cursor:pointer;z-index:20;transition:.3s}#NotificationMenuClose:hover{filter:brightness(50%);transition:.3s}#NotificationMenuClose:active{filter:none;transform:scale(.95);transition:.3s}.sev{height:64px;background-size:40%;background-position:center center;position:relative;float:left}.sevError,.sevMajor,.sevCritical{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevWarning,.sevMinor{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevInfo{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevSuccess{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}\n"] }]
|
|
12373
|
+
</div>`, styles: ["#Growler{position:fixed;right:20px;bottom:-100px;min-width:300px;z-index:999999999;max-width:500px}#NotificationsMenu .growler{position:relative;width:100%;margin-bottom:20px;opacity:1}.growler{background-color:var(--background);min-height:105px;min-width:334px;font-size:16px;color:#000;text-align:left;border-radius:6px;box-shadow:0 12px 23px #0000001a;transition:.5s;opacity:0}#Growler.open{bottom:20px}.growler.open{opacity:1}.growler .time{font-size:13px;color:#fff;position:absolute;top:7px;right:10px;font-weight:600;font-family:Open Sans,serif}.growler.error .title{background-color:#ff104b}.growler.success .title{background-color:#03db5c}.growler.warning .title{background-color:#ffc103}.growler.info .title{background-color:#0971ff}.growler.bug .title{background-color:#ff104b}.growler .title{padding-left:10px;padding-right:10px;font-size:14px;color:#fff;line-height:30px;text-transform:uppercase;background-color:#03db5c;border-top-left-radius:6px;border-top-right-radius:6px;font-weight:600;font-family:Open Sans,serif}.growler .subtitle{padding-top:10px;font-size:15px;font-weight:700;padding-left:75px;padding-right:10px}.growler .content{font-size:13px;padding-left:75px;padding-right:10px;margin-top:2px;line-height:14px;text-overflow:ellipsis;overflow:hidden;font-weight:400;font-family:Open Sans,serif;color:var(--tableText);padding-bottom:10px}.growler .icon{width:55px;height:55px;background-position:center center;background-size:80%;position:absolute;left:10px;top:40px}.growler.error .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.success .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.info .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.warning .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.bug .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg style%3D'enable-background%3Anew 0 0 21 24%3B' version%3D'1.1' viewBox%3D'0 0 21 24' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFE1EB%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09'%2F%3E %3Cpolygon class%3D'st0' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'10.5%2C8.5 15.5%2C8.5 14%2C5 10.5%2C4 %09'%2F%3E %3Cpolygon class%3D'st1' points%3D'10.5%2C23.5 15.5%2C21 15.5%2C10.5 10.5%2C10.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cg%3E%09%09%3Cpolyline class%3D'st2' points%3D'6.5%2C0.5 6.5%2C2.5 8.1%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'14.5%2C0.5 14.5%2C2.5 12.9%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C10.5 3%2C10.5 0.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C14.5 3%2C14.5 0.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C18.5 3%2C18.5 0.5%2C20.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C10.5 18%2C10.5 20.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C14.5 18%2C14.5 20.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C18.5 18%2C18.5 20.5%2C20.5 %09%09'%2F%3E %3Cline class%3D'st2' x1%3D'10.5' x2%3D'10.5' y1%3D'23.5' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'5.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'15.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cpolygon class%3D'st2' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09%09'%2F%3E %3Cpolygon class%3D'st2' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09%09'%2F%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}#NotificationsMenu{z-index:9999;width:0;position:fixed;top:0;bottom:0;left:-80px;background-color:var(--background);border-right:3px solid var(--inputBorder);transition:.3s;opacity:0;overflow:hidden}#NotificationsList{overflow-x:visible;overflow-y:auto;position:absolute;inset:70px 0 0;clear:both;padding:0 22px 22px}#NotificationsMenu.open,#NotificationsList.open{width:380px;left:0;opacity:1}#NotificationsMenu .header.icon{background-image:unset;text-align:center;font-size:30px;font-weight:800;color:var(--icon);line-height:30px;position:relative;float:left;width:30px;height:30px;margin:20px 33px 20px 20px;background-size:75%;left:10px;top:0}#NotificationsMenu .header.title{font-weight:300;font-family:Russo One,serif;font-size:24px;line-height:78px;color:var(--primaryColor);filter:brightness(50%);padding-left:20px;text-transform:uppercase}.NoNotificationsText{margin:0;color:var(--tableText);font-weight:600;font-family:Open Sans,Arial,sans-serif;font-size:14px}#NotificationMenuClose{color:var(--icon);font-size:35px;text-align:center;font-weight:600;line-height:40px;width:40px;height:40px;position:absolute;right:16px;top:17px;cursor:pointer;z-index:20;transition:.3s}#NotificationMenuClose:hover{filter:brightness(50%);transition:.3s}#NotificationMenuClose:active{filter:none;transform:scale(.95);transition:.3s}.sev{height:64px;background-size:40%;background-position:center center;position:relative;float:left}.sevError,.sevMajor,.sevCritical{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevWarning,.sevMinor{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevInfo{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevSuccess{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}::ng-deep .growler .content ul{margin-top:5px}\n"] }]
|
|
12220
12374
|
}], ctorParameters: function () { return [{ type: GrowlerService }]; }, propDecorators: { title: [{
|
|
12221
12375
|
type: Input
|
|
12222
12376
|
}], subtitle: [{
|
|
@@ -16084,8 +16238,6 @@ class ServiceFormService {
|
|
|
16084
16238
|
let configId;
|
|
16085
16239
|
if (this.selectedConfigId === 'add-new') {
|
|
16086
16240
|
if (!this.validateConfig()) {
|
|
16087
|
-
const growlerData = new GrowlerModel('error', 'Error', `Error Validating Config`, 'The entered configuration is invalid. Please update missing/invalid fields and try again.');
|
|
16088
|
-
this.growlerService.show(growlerData);
|
|
16089
16241
|
return;
|
|
16090
16242
|
}
|
|
16091
16243
|
const newConfig = {
|
|
@@ -16223,7 +16375,7 @@ class ServiceFormService {
|
|
|
16223
16375
|
}
|
|
16224
16376
|
validateConfig() {
|
|
16225
16377
|
this.configErrors = {};
|
|
16226
|
-
this.configEditor?.validateConfig();
|
|
16378
|
+
this.configEditor?.validateConfig(this.selectedConfigType?.schema, true);
|
|
16227
16379
|
if (isEmpty(this.newConfigName)) {
|
|
16228
16380
|
this.configErrors['name'] = true;
|
|
16229
16381
|
}
|
|
@@ -16299,8 +16451,9 @@ class ConfigEditorComponent {
|
|
|
16299
16451
|
get schema() {
|
|
16300
16452
|
return this._schema;
|
|
16301
16453
|
}
|
|
16302
|
-
constructor(schemaSvc) {
|
|
16454
|
+
constructor(schemaSvc, growlerService) {
|
|
16303
16455
|
this.schemaSvc = schemaSvc;
|
|
16456
|
+
this.growlerService = growlerService;
|
|
16304
16457
|
this.items = [];
|
|
16305
16458
|
this.lColorArray = [
|
|
16306
16459
|
'white',
|
|
@@ -16459,31 +16612,87 @@ class ConfigEditorComponent {
|
|
|
16459
16612
|
});
|
|
16460
16613
|
return data;
|
|
16461
16614
|
}
|
|
16462
|
-
validateConfig() {
|
|
16615
|
+
validateConfig(schema, showGrowler = true) {
|
|
16616
|
+
let validationErrors;
|
|
16617
|
+
let valid = true;
|
|
16618
|
+
if (schema) {
|
|
16619
|
+
// Initialize Ajv
|
|
16620
|
+
const ajv = new Ajv({ allErrors: true });
|
|
16621
|
+
addFormats(ajv);
|
|
16622
|
+
ajv.addFormat('idn-hostname', /^.+$/);
|
|
16623
|
+
const validate = ajv.compile(schema);
|
|
16624
|
+
valid = validate(this.configData);
|
|
16625
|
+
validationErrors = validate.errors;
|
|
16626
|
+
}
|
|
16463
16627
|
this.configErrors = {};
|
|
16464
|
-
const
|
|
16465
|
-
|
|
16628
|
+
const propertyValidationMap = {};
|
|
16629
|
+
this.validateConfigItems(this.items, undefined, '', validationErrors);
|
|
16630
|
+
this.buildPropertyValidationMap(validationErrors, propertyValidationMap);
|
|
16631
|
+
if (!valid) {
|
|
16466
16632
|
this.configErrors['configData'] = true;
|
|
16633
|
+
if (showGrowler) {
|
|
16634
|
+
this.displayConfigErrors(propertyValidationMap);
|
|
16635
|
+
}
|
|
16467
16636
|
}
|
|
16468
16637
|
this.configErrorsChange.emit(this.configErrors);
|
|
16469
16638
|
return isEmpty(this.configErrors);
|
|
16470
16639
|
}
|
|
16471
|
-
|
|
16640
|
+
buildPropertyValidationMap(validationErrors, propertyValidationMap) {
|
|
16641
|
+
validationErrors?.forEach((error) => {
|
|
16642
|
+
let path = error.instancePath;
|
|
16643
|
+
if (!isEmpty(error?.params?.missingProperty)) {
|
|
16644
|
+
path += '/' + error?.params?.missingProperty;
|
|
16645
|
+
}
|
|
16646
|
+
if (!isEmpty(path)) {
|
|
16647
|
+
propertyValidationMap[path] = `<b>${path}</b>: ${error.message}`;
|
|
16648
|
+
}
|
|
16649
|
+
});
|
|
16650
|
+
}
|
|
16651
|
+
validateConfigItems(items, parentType = 'object', path = '', validationErrors = []) {
|
|
16472
16652
|
let isValid = true;
|
|
16473
16653
|
items.forEach((item) => {
|
|
16474
16654
|
if (item.type === 'object') {
|
|
16475
|
-
|
|
16655
|
+
console.log(validationErrors);
|
|
16656
|
+
if (!this.validateConfigItems(item.items, item.type, path + '/' + item.key, validationErrors)) {
|
|
16476
16657
|
isValid = false;
|
|
16477
16658
|
}
|
|
16478
16659
|
}
|
|
16479
|
-
else if (item?.component?.instance?.
|
|
16480
|
-
|
|
16481
|
-
|
|
16660
|
+
else if (item?.component?.instance?.setValidationErrors) {
|
|
16661
|
+
item?.component?.instance?.setValidationErrors(path, validationErrors);
|
|
16662
|
+
}
|
|
16663
|
+
else {
|
|
16664
|
+
const hasValidationError = validationErrors?.some((error) => {
|
|
16665
|
+
let pathToMach = error.instancePath;
|
|
16666
|
+
if (!isEmpty(error?.params?.missingProperty)) {
|
|
16667
|
+
pathToMach += '/' + error?.params?.missingProperty;
|
|
16668
|
+
}
|
|
16669
|
+
const matched = pathToMach === (path + '/' + item.key);
|
|
16670
|
+
return matched;
|
|
16671
|
+
});
|
|
16672
|
+
if (item?.component?.instance?.setIsValid) {
|
|
16673
|
+
item?.component?.instance?.setIsValid(!hasValidationError);
|
|
16482
16674
|
}
|
|
16483
16675
|
}
|
|
16484
16676
|
});
|
|
16485
16677
|
return isValid;
|
|
16486
16678
|
}
|
|
16679
|
+
displayConfigErrors(propertyValidationMap) {
|
|
16680
|
+
let validationMessage = '';
|
|
16681
|
+
if (!isEmpty(propertyValidationMap)) {
|
|
16682
|
+
const props = keys(propertyValidationMap);
|
|
16683
|
+
props.forEach((key, index) => {
|
|
16684
|
+
validationMessage += `<li>${propertyValidationMap[key]}</li>`;
|
|
16685
|
+
});
|
|
16686
|
+
}
|
|
16687
|
+
if (isEmpty(validationMessage)) {
|
|
16688
|
+
validationMessage = 'The entered configuration is invalid. Please update missing/invalid fields and try again.';
|
|
16689
|
+
}
|
|
16690
|
+
else {
|
|
16691
|
+
validationMessage = `<ul style="margin-top: 5px;">${validationMessage}</ul>`;
|
|
16692
|
+
}
|
|
16693
|
+
const growlerData = new GrowlerModel('error', 'Error', `Error Validating Config`, validationMessage);
|
|
16694
|
+
this.growlerService.show(growlerData);
|
|
16695
|
+
}
|
|
16487
16696
|
formDataChanged() {
|
|
16488
16697
|
delay(() => {
|
|
16489
16698
|
this.getConfigDataFromForm();
|
|
@@ -16495,13 +16704,13 @@ class ConfigEditorComponent {
|
|
|
16495
16704
|
this.updateFormView(this.items, this.configData);
|
|
16496
16705
|
});
|
|
16497
16706
|
}
|
|
16498
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigEditorComponent, deps: [{ token: SchemaService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
16707
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigEditorComponent, deps: [{ token: SchemaService }, { token: GrowlerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
16499
16708
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ConfigEditorComponent, selector: "lib-config-editor", inputs: { configErrors: "configErrors", configData: "configData", showJsonView: "showJsonView", schema: "schema" }, outputs: { configErrorsChange: "configErrorsChange", configDataChange: "configDataChange" }, viewQueries: [{ propertyName: "dynamicForm", first: true, predicate: ["dynamicform"], descendants: true, read: ViewContainerRef }, { propertyName: "editor", first: true, predicate: JsonEditorComponent, descendants: true }], ngImport: i0, template: "<div class=\"form-field-extended-fields\" [hidden]=\"showJsonView\" (mouseup)=\"formDataChangedDebounced($event)\" (keyup)=\"formDataChangedDebounced($event)\">\n <ng-container #dynamicform></ng-container>\n</div>\n<lib-json-view *ngIf=\"showJsonView && !hideConfigJSON\" (dataChange)=\"jsonDataChangedDebounced($event)\" [(data)]=\"configData\"></lib-json-view>\n<lib-json-view *ngIf=\"showJsonView && hideConfigJSON\" [(data)]=\"configData\"></lib-json-view>", styles: [""], dependencies: [{ kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }] }); }
|
|
16500
16709
|
}
|
|
16501
16710
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigEditorComponent, decorators: [{
|
|
16502
16711
|
type: Component,
|
|
16503
16712
|
args: [{ selector: 'lib-config-editor', template: "<div class=\"form-field-extended-fields\" [hidden]=\"showJsonView\" (mouseup)=\"formDataChangedDebounced($event)\" (keyup)=\"formDataChangedDebounced($event)\">\n <ng-container #dynamicform></ng-container>\n</div>\n<lib-json-view *ngIf=\"showJsonView && !hideConfigJSON\" (dataChange)=\"jsonDataChangedDebounced($event)\" [(data)]=\"configData\"></lib-json-view>\n<lib-json-view *ngIf=\"showJsonView && hideConfigJSON\" [(data)]=\"configData\"></lib-json-view>" }]
|
|
16504
|
-
}], ctorParameters: function () { return [{ type: SchemaService }]; }, propDecorators: { configErrors: [{
|
|
16713
|
+
}], ctorParameters: function () { return [{ type: SchemaService }, { type: GrowlerService }]; }, propDecorators: { configErrors: [{
|
|
16505
16714
|
type: Input
|
|
16506
16715
|
}], configErrorsChange: [{
|
|
16507
16716
|
type: Output
|
|
@@ -17758,10 +17967,6 @@ class EdgeRouterPolicy {
|
|
|
17758
17967
|
See the License for the specific language governing permissions and
|
|
17759
17968
|
limitations under the License.
|
|
17760
17969
|
*/
|
|
17761
|
-
const CSV_COLUMNS$2 = [
|
|
17762
|
-
{ label: 'Name', path: 'name' },
|
|
17763
|
-
{ label: 'Created At', path: 'createdAt' }
|
|
17764
|
-
];
|
|
17765
17970
|
class EdgeRouterPoliciesPageService extends ListPageServiceClass {
|
|
17766
17971
|
constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService, router) {
|
|
17767
17972
|
super(settings, filterService, csvDownloadService, extService, router);
|
|
@@ -18104,17 +18309,6 @@ class EdgeRouterPoliciesPageService extends ListPageServiceClass {
|
|
|
18104
18309
|
return namedAttributes;
|
|
18105
18310
|
});
|
|
18106
18311
|
}
|
|
18107
|
-
downloadAllItems() {
|
|
18108
|
-
const paging = cloneDeep(this.paging);
|
|
18109
|
-
paging.total = this.totalCount;
|
|
18110
|
-
super.getTableData('edge-router-policies', paging, undefined, undefined)
|
|
18111
|
-
.then((results) => {
|
|
18112
|
-
return this.downloadItems(results?.data);
|
|
18113
|
-
});
|
|
18114
|
-
}
|
|
18115
|
-
downloadItems(selectedItems) {
|
|
18116
|
-
this.csvDownloadService.download('edge-router-policies', selectedItems, CSV_COLUMNS$2, false, false, undefined, false);
|
|
18117
|
-
}
|
|
18118
18312
|
openUpdate(item) {
|
|
18119
18313
|
this.modalType = 'edge-router-policies';
|
|
18120
18314
|
if (item) {
|
|
@@ -18215,7 +18409,7 @@ class EdgeRouterPoliciesPageComponent extends ListPageComponent {
|
|
|
18215
18409
|
this.deleteItem(event.item);
|
|
18216
18410
|
break;
|
|
18217
18411
|
case 'download-all':
|
|
18218
|
-
this.
|
|
18412
|
+
this.downloadAllItems();
|
|
18219
18413
|
break;
|
|
18220
18414
|
case 'download-selected':
|
|
18221
18415
|
this.svc.downloadItems(this.selectedItems);
|
|
@@ -18276,10 +18470,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
18276
18470
|
See the License for the specific language governing permissions and
|
|
18277
18471
|
limitations under the License.
|
|
18278
18472
|
*/
|
|
18279
|
-
const CSV_COLUMNS$1 = [
|
|
18280
|
-
{ label: 'Name', path: 'name' },
|
|
18281
|
-
{ label: 'Created At', path: 'createdAt' }
|
|
18282
|
-
];
|
|
18283
18473
|
class ServicePoliciesPageService extends ListPageServiceClass {
|
|
18284
18474
|
constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService, router) {
|
|
18285
18475
|
super(settings, filterService, csvDownloadService, extService, router);
|
|
@@ -18661,17 +18851,6 @@ class ServicePoliciesPageService extends ListPageServiceClass {
|
|
|
18661
18851
|
return namedAttributes;
|
|
18662
18852
|
});
|
|
18663
18853
|
}
|
|
18664
|
-
downloadAllItems() {
|
|
18665
|
-
const paging = cloneDeep(this.paging);
|
|
18666
|
-
paging.total = this.totalCount;
|
|
18667
|
-
super.getTableData('service-policies', paging, undefined, undefined)
|
|
18668
|
-
.then((results) => {
|
|
18669
|
-
return this.downloadItems(results?.data);
|
|
18670
|
-
});
|
|
18671
|
-
}
|
|
18672
|
-
downloadItems(selectedItems) {
|
|
18673
|
-
this.csvDownloadService.download('service-policies', selectedItems, CSV_COLUMNS$1, false, false, undefined, false);
|
|
18674
|
-
}
|
|
18675
18854
|
openUpdate(item) {
|
|
18676
18855
|
this.modalType = 'service-policies';
|
|
18677
18856
|
if (item) {
|
|
@@ -18734,7 +18913,6 @@ class ServicePoliciesPageComponent extends ListPageComponent {
|
|
|
18734
18913
|
}
|
|
18735
18914
|
ngOnInit() {
|
|
18736
18915
|
super.ngOnInit();
|
|
18737
|
-
this.getRoleAttributes();
|
|
18738
18916
|
this.tabs = this.tabNames.getTabs('policies');
|
|
18739
18917
|
}
|
|
18740
18918
|
headerActionClicked(action) {
|
|
@@ -18773,7 +18951,7 @@ class ServicePoliciesPageComponent extends ListPageComponent {
|
|
|
18773
18951
|
this.deleteItem(event.item);
|
|
18774
18952
|
break;
|
|
18775
18953
|
case 'download-all':
|
|
18776
|
-
this.
|
|
18954
|
+
this.downloadAllItems();
|
|
18777
18955
|
break;
|
|
18778
18956
|
case 'download-selected':
|
|
18779
18957
|
this.svc.downloadItems(this.selectedItems);
|
|
@@ -19525,10 +19703,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
19525
19703
|
See the License for the specific language governing permissions and
|
|
19526
19704
|
limitations under the License.
|
|
19527
19705
|
*/
|
|
19528
|
-
const CSV_COLUMNS = [
|
|
19529
|
-
{ label: 'Name', path: 'name' },
|
|
19530
|
-
{ label: 'Created At', path: 'createdAt' }
|
|
19531
|
-
];
|
|
19532
19706
|
class ServiceEdgeRouterPoliciesPageService extends ListPageServiceClass {
|
|
19533
19707
|
constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService, router) {
|
|
19534
19708
|
super(settings, filterService, csvDownloadService, extService, router);
|
|
@@ -19831,19 +20005,8 @@ class ServiceEdgeRouterPoliciesPageService extends ListPageServiceClass {
|
|
|
19831
20005
|
return result;
|
|
19832
20006
|
});
|
|
19833
20007
|
}
|
|
19834
|
-
downloadAllItems() {
|
|
19835
|
-
const paging = cloneDeep(this.paging);
|
|
19836
|
-
paging.total = this.totalCount;
|
|
19837
|
-
super.getTableData('edge-router-policies', paging, undefined, undefined)
|
|
19838
|
-
.then((results) => {
|
|
19839
|
-
return this.downloadItems(results?.data);
|
|
19840
|
-
});
|
|
19841
|
-
}
|
|
19842
|
-
downloadItems(selectedItems) {
|
|
19843
|
-
this.csvDownloadService.download('edge-router-policies', selectedItems, CSV_COLUMNS, false, false, undefined, false);
|
|
19844
|
-
}
|
|
19845
20008
|
openUpdate(item) {
|
|
19846
|
-
this.modalType = 'edge-router-policies';
|
|
20009
|
+
this.modalType = 'service-edge-router-policies';
|
|
19847
20010
|
if (item) {
|
|
19848
20011
|
this.selectedEdgeRouterPolicy = item;
|
|
19849
20012
|
this.selectedEdgeRouterPolicy.badges = [];
|
|
@@ -19942,7 +20105,7 @@ class ServiceEdgeRouterPoliciesPageComponent extends ListPageComponent {
|
|
|
19942
20105
|
this.deleteItem(event.item);
|
|
19943
20106
|
break;
|
|
19944
20107
|
case 'download-all':
|
|
19945
|
-
this.
|
|
20108
|
+
this.downloadAllItems();
|
|
19946
20109
|
break;
|
|
19947
20110
|
case 'download-selected':
|
|
19948
20111
|
this.svc.downloadItems(this.selectedItems);
|
|
@@ -20915,6 +21078,33 @@ class ConfigurationFormComponent extends ProjectableForm {
|
|
|
20915
21078
|
break;
|
|
20916
21079
|
}
|
|
20917
21080
|
}
|
|
21081
|
+
apiActionRequested(action) {
|
|
21082
|
+
switch (action.id) {
|
|
21083
|
+
case 'cli':
|
|
21084
|
+
this.copyCLICommand();
|
|
21085
|
+
break;
|
|
21086
|
+
case 'curl':
|
|
21087
|
+
this.copyCURLCommand();
|
|
21088
|
+
break;
|
|
21089
|
+
}
|
|
21090
|
+
}
|
|
21091
|
+
copyCLICommand() {
|
|
21092
|
+
const command = `ziti edge ${this.formData.id ? 'update' : 'create'} config ${this.formData.id ? `'${this.formData.id}'` : ''} ${this.formData.id ? '--name' : ''} '${this.formData.name}' --configTypeId '${this.formData.configTypeId}' --data '${JSON.stringify(this.formData.data)}' --tags-json '${JSON.stringify(this.formData.tags)}'`;
|
|
21093
|
+
navigator.clipboard.writeText(command);
|
|
21094
|
+
const growlerData = new GrowlerModel('success', 'Success', `Text Copied`, `CLI command copied to clipboard`);
|
|
21095
|
+
this.growlerService.show(growlerData);
|
|
21096
|
+
}
|
|
21097
|
+
copyCURLCommand() {
|
|
21098
|
+
const command = `curl '${this.apiCallURL}' \\
|
|
21099
|
+
${this.formData.id ? '--request PATCH \\' : '\\'}
|
|
21100
|
+
-H 'accept: application/json' \\
|
|
21101
|
+
-H 'content-type: application/json' \\
|
|
21102
|
+
-H 'zt-session: ${this.settings.session.id}' \\
|
|
21103
|
+
--data-raw '${JSON.stringify(this.apiData)}'`;
|
|
21104
|
+
navigator.clipboard.writeText(command);
|
|
21105
|
+
const growlerData = new GrowlerModel('success', 'Success', `Text Copied`, `CURL command copied to clipboard`);
|
|
21106
|
+
this.growlerService.show(growlerData);
|
|
21107
|
+
}
|
|
20918
21108
|
clear() {
|
|
20919
21109
|
this.formData.configTypeId = '';
|
|
20920
21110
|
this.clearForm();
|
|
@@ -20968,7 +21158,9 @@ class ConfigurationFormComponent extends ProjectableForm {
|
|
|
20968
21158
|
}
|
|
20969
21159
|
validate() {
|
|
20970
21160
|
this.errors = {};
|
|
20971
|
-
this.configEditor.validateConfig()
|
|
21161
|
+
if (!this.configEditor.validateConfig(this.selectedSchema, true)) {
|
|
21162
|
+
return false;
|
|
21163
|
+
}
|
|
20972
21164
|
if (isEmpty(this.formData.name)) {
|
|
20973
21165
|
this.errors['name'] = true;
|
|
20974
21166
|
}
|
|
@@ -21018,11 +21210,11 @@ class ConfigurationFormComponent extends ProjectableForm {
|
|
|
21018
21210
|
this._apiData = cloneDeep(this.apiData);
|
|
21019
21211
|
}
|
|
21020
21212
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigurationFormComponent, deps: [{ token: ConfigurationService }, { token: SchemaService }, { token: GrowlerService }, { token: SHAREDZ_EXTENSION }, { token: SETTINGS_SERVICE }, { token: ZITI_DATA_SERVICE }, { token: i4.Router }, { token: i4.ActivatedRoute }, { token: i1$4.Location }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
21021
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ConfigurationFormComponent, selector: "lib-configuration", inputs: { formData: "formData", errors: "errors" }, outputs: { close: "close" }, viewQueries: [{ propertyName: "configEditor", first: true, predicate: ["configEditor"], descendants: true, read: ConfigEditorComponent }], usesInheritance: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n tabindex=\"0\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"(formData.id ? 'Edit Config' : 'Create Config')\"\n [moreActions]=\"formData.moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [saveDisabled]=\"svc.saveDisabled || formDataInvalid\"\n [saveTooltip]=\"saveButtonTooltip\"\n ></lib-form-header>\n <div class=\"config-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Config Name'\" [label]=\"'Required'\">\n <input\n id=\"ConfigName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Name this config\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n (keyup)=\"apiData()\"\n >\n </lib-form-field-container>\n <lib-form-field-container [showHeader]=\"false\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">Configuration Data</span>\n <div class=\"form-header-toggle-container\">\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': !svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n FORM\n </span>\n <div class=\"form-header-toggle\" (click)=\"svc.toggleJSONView()\">\n <div\n class=\"form-toggle-switch\"\n [ngClass]=\"{'toggle-left': !svc.configJsonView, 'toggle-right': svc.configJsonView}\"\n >\n <div class=\"form-toggle-indicator\"></div>\n <div class=\"form-toggle-indicator\"></div>\n </div>\n </div>\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n JSON\n </span>\n </div>\n </div>\n <div class=\"form-field-input-group\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">{{isEditing ? 'Config Type' : 'Select a Config Type'}}</span>\n </div>\n <select\n id=\"ConfigTypes\"\n class=\"config-type-select\"\n [(ngModel)]=\"formData.configTypeId\"\n (change)=\"getSchema()\"\n [ngClass]=\"{disabled: isEditing, error: errors['configTypeId']}\"\n >\n <option value=\"\">Select A Type...</option>\n <option *ngFor=\"let config of options\"\n [value]=\"config.id\">{{config.name}}\n </option>\n </select>\n <lib-config-editor\n [hidden]=\"configTypeEmpty\"\n [schema]=\"selectedSchema\"\n [(configData)]=\"formData.data\"\n [showJsonView]=\"svc.configJsonView\"\n [(configErrors)]=\"errors\"\n (configDataChange)=\"dataChanged($event)\"\n #configEditor\n ></lib-config-editor>\n </div>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n <div class=\"url-copy icon-copy copy\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"_apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".config-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:var(--gapXL)}.config-type-select.disabled{opacity:.7;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText"], outputs: ["formViewChange", "actionRequested"] }, { kind: "component", type: FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }, { kind: "component", type: ConfigEditorComponent, selector: "lib-config-editor", inputs: ["configErrors", "configData", "showJsonView", "schema"], outputs: ["configErrorsChange", "configDataChange"] }] }); }
|
|
21213
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ConfigurationFormComponent, selector: "lib-configuration", inputs: { formData: "formData", errors: "errors" }, outputs: { close: "close" }, viewQueries: [{ propertyName: "configEditor", first: true, predicate: ["configEditor"], descendants: true, read: ConfigEditorComponent }], usesInheritance: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n tabindex=\"0\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"(formData.id ? 'Edit Config' : 'Create Config')\"\n [moreActions]=\"formData.moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [saveDisabled]=\"svc.saveDisabled || formDataInvalid\"\n [saveTooltip]=\"saveButtonTooltip\"\n ></lib-form-header>\n <div class=\"config-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Config Name'\" [label]=\"'Required'\">\n <input\n id=\"ConfigName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Name this config\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n (keyup)=\"apiData()\"\n >\n </lib-form-field-container>\n <lib-form-field-container [showHeader]=\"false\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">Configuration Data</span>\n <div class=\"form-header-toggle-container\">\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': !svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n FORM\n </span>\n <div class=\"form-header-toggle\" (click)=\"svc.toggleJSONView()\">\n <div\n class=\"form-toggle-switch\"\n [ngClass]=\"{'toggle-left': !svc.configJsonView, 'toggle-right': svc.configJsonView}\"\n >\n <div class=\"form-toggle-indicator\"></div>\n <div class=\"form-toggle-indicator\"></div>\n </div>\n </div>\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n JSON\n </span>\n </div>\n </div>\n <div class=\"form-field-input-group\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">{{isEditing ? 'Config Type' : 'Select a Config Type'}}</span>\n </div>\n <select\n id=\"ConfigTypes\"\n class=\"config-type-select\"\n [(ngModel)]=\"formData.configTypeId\"\n (change)=\"getSchema()\"\n [ngClass]=\"{disabled: isEditing, error: errors['configTypeId']}\"\n >\n <option value=\"\">Select A Type...</option>\n <option *ngFor=\"let config of options\"\n [value]=\"config.id\">{{config.name}}\n </option>\n </select>\n <lib-config-editor\n [hidden]=\"configTypeEmpty\"\n [schema]=\"selectedSchema\"\n [(configData)]=\"formData.data\"\n [showJsonView]=\"svc.configJsonView\"\n [(configErrors)]=\"errors\"\n (configDataChange)=\"dataChanged($event)\"\n #configEditor\n ></lib-config-editor>\n </div>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n <div class=\"url-copy icon-copy copy\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"_apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".config-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:var(--gapXL)}.config-type-select.disabled{opacity:.7;pointer-events:none}.form-group-column.three-fifths{width:calc(60% - 15px);min-width:550px;max-width:700px}.form-group-column.two-fifths{max-width:700px}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText"], outputs: ["formViewChange", "actionRequested"] }, { kind: "component", type: FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }, { kind: "component", type: ConfigEditorComponent, selector: "lib-config-editor", inputs: ["configErrors", "configData", "showJsonView", "schema"], outputs: ["configErrorsChange", "configDataChange"] }] }); }
|
|
21022
21214
|
}
|
|
21023
21215
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigurationFormComponent, decorators: [{
|
|
21024
21216
|
type: Component,
|
|
21025
|
-
args: [{ selector: 'lib-configuration', template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n tabindex=\"0\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"(formData.id ? 'Edit Config' : 'Create Config')\"\n [moreActions]=\"formData.moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [saveDisabled]=\"svc.saveDisabled || formDataInvalid\"\n [saveTooltip]=\"saveButtonTooltip\"\n ></lib-form-header>\n <div class=\"config-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Config Name'\" [label]=\"'Required'\">\n <input\n id=\"ConfigName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Name this config\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n (keyup)=\"apiData()\"\n >\n </lib-form-field-container>\n <lib-form-field-container [showHeader]=\"false\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">Configuration Data</span>\n <div class=\"form-header-toggle-container\">\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': !svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n FORM\n </span>\n <div class=\"form-header-toggle\" (click)=\"svc.toggleJSONView()\">\n <div\n class=\"form-toggle-switch\"\n [ngClass]=\"{'toggle-left': !svc.configJsonView, 'toggle-right': svc.configJsonView}\"\n >\n <div class=\"form-toggle-indicator\"></div>\n <div class=\"form-toggle-indicator\"></div>\n </div>\n </div>\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n JSON\n </span>\n </div>\n </div>\n <div class=\"form-field-input-group\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">{{isEditing ? 'Config Type' : 'Select a Config Type'}}</span>\n </div>\n <select\n id=\"ConfigTypes\"\n class=\"config-type-select\"\n [(ngModel)]=\"formData.configTypeId\"\n (change)=\"getSchema()\"\n [ngClass]=\"{disabled: isEditing, error: errors['configTypeId']}\"\n >\n <option value=\"\">Select A Type...</option>\n <option *ngFor=\"let config of options\"\n [value]=\"config.id\">{{config.name}}\n </option>\n </select>\n <lib-config-editor\n [hidden]=\"configTypeEmpty\"\n [schema]=\"selectedSchema\"\n [(configData)]=\"formData.data\"\n [showJsonView]=\"svc.configJsonView\"\n [(configErrors)]=\"errors\"\n (configDataChange)=\"dataChanged($event)\"\n #configEditor\n ></lib-config-editor>\n </div>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n <div class=\"url-copy icon-copy copy\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"_apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".config-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:var(--gapXL)}.config-type-select.disabled{opacity:.7;pointer-events:none}\n"] }]
|
|
21217
|
+
args: [{ selector: 'lib-configuration', template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n tabindex=\"0\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"(formData.id ? 'Edit Config' : 'Create Config')\"\n [moreActions]=\"formData.moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [saveDisabled]=\"svc.saveDisabled || formDataInvalid\"\n [saveTooltip]=\"saveButtonTooltip\"\n ></lib-form-header>\n <div class=\"config-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Config Name'\" [label]=\"'Required'\">\n <input\n id=\"ConfigName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Name this config\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n (keyup)=\"apiData()\"\n >\n </lib-form-field-container>\n <lib-form-field-container [showHeader]=\"false\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">Configuration Data</span>\n <div class=\"form-header-toggle-container\">\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': !svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n FORM\n </span>\n <div class=\"form-header-toggle\" (click)=\"svc.toggleJSONView()\">\n <div\n class=\"form-toggle-switch\"\n [ngClass]=\"{'toggle-left': !svc.configJsonView, 'toggle-right': svc.configJsonView}\"\n >\n <div class=\"form-toggle-indicator\"></div>\n <div class=\"form-toggle-indicator\"></div>\n </div>\n </div>\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n JSON\n </span>\n </div>\n </div>\n <div class=\"form-field-input-group\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">{{isEditing ? 'Config Type' : 'Select a Config Type'}}</span>\n </div>\n <select\n id=\"ConfigTypes\"\n class=\"config-type-select\"\n [(ngModel)]=\"formData.configTypeId\"\n (change)=\"getSchema()\"\n [ngClass]=\"{disabled: isEditing, error: errors['configTypeId']}\"\n >\n <option value=\"\">Select A Type...</option>\n <option *ngFor=\"let config of options\"\n [value]=\"config.id\">{{config.name}}\n </option>\n </select>\n <lib-config-editor\n [hidden]=\"configTypeEmpty\"\n [schema]=\"selectedSchema\"\n [(configData)]=\"formData.data\"\n [showJsonView]=\"svc.configJsonView\"\n [(configErrors)]=\"errors\"\n (configDataChange)=\"dataChanged($event)\"\n #configEditor\n ></lib-config-editor>\n </div>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n <div class=\"url-copy icon-copy copy\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"_apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".config-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:var(--gapXL)}.config-type-select.disabled{opacity:.7;pointer-events:none}.form-group-column.three-fifths{width:calc(60% - 15px);min-width:550px;max-width:700px}.form-group-column.two-fifths{max-width:700px}\n"] }]
|
|
21026
21218
|
}], ctorParameters: function () { return [{ type: ConfigurationService }, { type: SchemaService }, { type: GrowlerService }, { type: undefined, decorators: [{
|
|
21027
21219
|
type: Inject,
|
|
21028
21220
|
args: [SHAREDZ_EXTENSION]
|
|
@@ -21772,13 +21964,20 @@ class AuthPoliciesPageService extends ListPageServiceClass {
|
|
|
21772
21964
|
headerComponent: TableColumnDefaultComponent,
|
|
21773
21965
|
headerComponentParams: this.headerComponentParams,
|
|
21774
21966
|
cellRenderer: TableCellNameComponent,
|
|
21775
|
-
cellRendererParams: { pathRoot: this.basePath, cellNamePreCheck:
|
|
21967
|
+
cellRendererParams: { pathRoot: this.basePath, cellNamePreCheck: (data) => {
|
|
21968
|
+
this.checkDefaultAuthPolicy(data).then((result) => {
|
|
21969
|
+
if (!result) {
|
|
21970
|
+
return;
|
|
21971
|
+
}
|
|
21972
|
+
this.openEditForm(data?.data?.id);
|
|
21973
|
+
});
|
|
21974
|
+
} },
|
|
21776
21975
|
onCellClicked: (data) => {
|
|
21777
21976
|
if (this.hasSelectedText()) {
|
|
21778
21977
|
return;
|
|
21779
21978
|
}
|
|
21780
21979
|
this.checkDefaultAuthPolicy(data?.data).then((result) => {
|
|
21781
|
-
if (!result
|
|
21980
|
+
if (!result) {
|
|
21782
21981
|
return;
|
|
21783
21982
|
}
|
|
21784
21983
|
this.openEditForm(data?.data?.id);
|
|
@@ -21987,6 +22186,12 @@ class AuthPoliciesPageComponent extends ListPageComponent {
|
|
|
21987
22186
|
this.deleteItem(event.item);
|
|
21988
22187
|
});
|
|
21989
22188
|
break;
|
|
22189
|
+
case 'download-all':
|
|
22190
|
+
this.downloadAllItems();
|
|
22191
|
+
break;
|
|
22192
|
+
case 'download-selected':
|
|
22193
|
+
this.svc.downloadItems(this.selectedItems);
|
|
22194
|
+
break;
|
|
21990
22195
|
default:
|
|
21991
22196
|
break;
|
|
21992
22197
|
}
|
|
@@ -22801,7 +23006,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
22801
23006
|
}] });
|
|
22802
23007
|
|
|
22803
23008
|
const VERSION = {
|
|
22804
|
-
"version": "3.6.
|
|
23009
|
+
"version": "3.6.3"
|
|
22805
23010
|
};
|
|
22806
23011
|
|
|
22807
23012
|
/*
|