@gravitee/ui-particles-angular 7.32.0 → 7.33.0-form-cron-p2-29c6c2c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/gio-form-cron/gio-form-cron.adapter.mjs +44 -38
- package/esm2020/lib/gio-form-cron/gio-form-cron.component.mjs +136 -65
- package/esm2020/lib/gio-form-cron/gio-form-cron.harness.mjs +36 -6
- package/esm2020/lib/gio-form-cron/gio-form-cron.module.mjs +35 -4
- package/fesm2015/gravitee-ui-particles-angular.mjs +300 -155
- package/fesm2015/gravitee-ui-particles-angular.mjs.map +1 -1
- package/fesm2020/gravitee-ui-particles-angular.mjs +283 -153
- package/fesm2020/gravitee-ui-particles-angular.mjs.map +1 -1
- package/lib/gio-form-cron/gio-form-cron.adapter.d.ts +1 -1
- package/lib/gio-form-cron/gio-form-cron.component.d.ts +16 -9
- package/lib/gio-form-cron/gio-form-cron.harness.d.ts +8 -1
- package/lib/gio-form-cron/gio-form-cron.module.d.ts +4 -1
- package/package.json +1 -1
- package/src/lib/gio-button-toggle-group/gio-button-toggle-group.scss +6 -1
|
@@ -1,41 +1,39 @@
|
|
|
1
|
-
import { Component,
|
|
2
|
-
import { FormControl, FormGroup } from '@angular/forms';
|
|
1
|
+
import { Component, HostBinding, forwardRef } from '@angular/core';
|
|
2
|
+
import { FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';
|
|
3
3
|
import { isEmpty, range } from 'lodash';
|
|
4
4
|
import { Subject } from 'rxjs';
|
|
5
|
-
import { takeUntil, tap } from 'rxjs/operators';
|
|
6
|
-
import { getDefaultCronDisplay, parseCronExpression, toCronExpression } from './gio-form-cron.adapter';
|
|
5
|
+
import { filter, takeUntil, tap } from 'rxjs/operators';
|
|
6
|
+
import { getDefaultCronDisplay, parseCronExpression, toCronDescription, toCronExpression } from './gio-form-cron.adapter';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/
|
|
9
|
-
import * as i2 from "@angular/
|
|
10
|
-
import * as i3 from "@angular/material/button
|
|
11
|
-
import * as i4 from "@angular/material/
|
|
12
|
-
import * as i5 from "@angular/material/
|
|
13
|
-
import * as i6 from "@angular/material/
|
|
14
|
-
import * as i7 from "@angular/
|
|
15
|
-
import * as i8 from "@angular/
|
|
8
|
+
import * as i1 from "@angular/cdk/a11y";
|
|
9
|
+
import * as i2 from "@angular/material/button-toggle";
|
|
10
|
+
import * as i3 from "@angular/material/button";
|
|
11
|
+
import * as i4 from "@angular/material/icon";
|
|
12
|
+
import * as i5 from "@angular/material/form-field";
|
|
13
|
+
import * as i6 from "@angular/material/select";
|
|
14
|
+
import * as i7 from "@angular/material/core";
|
|
15
|
+
import * as i8 from "@angular/common";
|
|
16
|
+
import * as i9 from "@angular/forms";
|
|
17
|
+
import * as i10 from "@angular/material/tooltip";
|
|
18
|
+
import * as i11 from "@angular/material/input";
|
|
16
19
|
export class GioFormCronComponent {
|
|
17
|
-
constructor(
|
|
18
|
-
this.ngControl = ngControl;
|
|
20
|
+
constructor(elRef, fm, ngZone) {
|
|
19
21
|
this.elRef = elRef;
|
|
20
22
|
this.fm = fm;
|
|
23
|
+
this.ngZone = ngZone;
|
|
21
24
|
this._onChange = () => ({});
|
|
22
25
|
this._onTouched = () => ({});
|
|
23
|
-
this.seconds = [...range(0,
|
|
24
|
-
this.minutes = [...range(0,
|
|
25
|
-
this.hours = [...range(0,
|
|
26
|
+
this.seconds = [...range(0, 60)];
|
|
27
|
+
this.minutes = [...range(0, 60)];
|
|
28
|
+
this.hours = [...range(0, 24)];
|
|
26
29
|
this.daysOfMonth = [...range(1, 32)];
|
|
27
30
|
this.daysOfWeek = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
|
|
31
|
+
this.isDisabled = false;
|
|
32
|
+
this.smallDisplay = false;
|
|
28
33
|
this.touched = false;
|
|
29
34
|
this.focused = false;
|
|
30
|
-
this.
|
|
31
|
-
this.cronDisplay = getDefaultCronDisplay(this.defaultMode);
|
|
35
|
+
this.hasError = false;
|
|
32
36
|
this.unsubscribe$ = new Subject();
|
|
33
|
-
// Replace the provider from above with this.
|
|
34
|
-
if (this.ngControl != null) {
|
|
35
|
-
// Setting the value accessor directly (instead of using
|
|
36
|
-
// the providers) to avoid running into a circular import.
|
|
37
|
-
this.ngControl.valueAccessor = this;
|
|
38
|
-
}
|
|
39
37
|
fm.monitor(elRef.nativeElement, true).subscribe(origin => {
|
|
40
38
|
this.focused = !!origin;
|
|
41
39
|
this._onTouched();
|
|
@@ -43,8 +41,17 @@ export class GioFormCronComponent {
|
|
|
43
41
|
});
|
|
44
42
|
}
|
|
45
43
|
ngOnInit() {
|
|
44
|
+
if (window.ResizeObserver) {
|
|
45
|
+
this.resizeObserver = new ResizeObserver(entries => {
|
|
46
|
+
this.ngZone.run(() => {
|
|
47
|
+
const width = entries[0].contentRect.width;
|
|
48
|
+
this.smallDisplay = width < 580;
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
this.resizeObserver.observe(this.elRef.nativeElement);
|
|
52
|
+
}
|
|
46
53
|
this.internalFormGroup = new FormGroup({
|
|
47
|
-
mode: new FormControl(
|
|
54
|
+
mode: new FormControl(),
|
|
48
55
|
secondInterval: new FormControl(),
|
|
49
56
|
minuteInterval: new FormControl(),
|
|
50
57
|
hourInterval: new FormControl(),
|
|
@@ -55,45 +62,69 @@ export class GioFormCronComponent {
|
|
|
55
62
|
minutes: new FormControl(),
|
|
56
63
|
customExpression: new FormControl(),
|
|
57
64
|
});
|
|
65
|
+
console.log('init ');
|
|
66
|
+
this.isDisabled ? this.internalFormGroup.disable({ emitEvent: false }) : this.internalFormGroup.enable({ emitEvent: false });
|
|
58
67
|
this.internalFormGroup
|
|
59
68
|
.get('mode')
|
|
60
|
-
?.valueChanges.pipe(tap(mode => {
|
|
69
|
+
?.valueChanges.pipe(filter(mode => !!mode), tap(mode => {
|
|
61
70
|
this.cronDisplay = getDefaultCronDisplay(mode);
|
|
62
71
|
this.refreshInternalForm();
|
|
63
72
|
}), takeUntil(this.unsubscribe$))
|
|
64
73
|
.subscribe();
|
|
65
74
|
this.internalFormGroup.valueChanges
|
|
66
75
|
?.pipe(tap(value => {
|
|
67
|
-
this.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
this.hasError = false;
|
|
77
|
+
if (!value?.mode) {
|
|
78
|
+
this._onChange(null);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
this.value = toCronExpression({
|
|
83
|
+
mode: value.mode,
|
|
84
|
+
secondInterval: value.secondInterval,
|
|
85
|
+
minuteInterval: value.minuteInterval,
|
|
86
|
+
hourInterval: value.hourInterval,
|
|
87
|
+
dayInterval: value.dayInterval,
|
|
88
|
+
dayOfWeek: value.dayOfWeek,
|
|
89
|
+
dayOfMonth: value.dayOfMonth,
|
|
90
|
+
customExpression: value.customExpression,
|
|
91
|
+
hours: value.hours,
|
|
92
|
+
minutes: value.minutes,
|
|
93
|
+
});
|
|
94
|
+
this.expressionDescription = toCronDescription(this.value);
|
|
95
|
+
this._onChange(this.value);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
this.hasError = true;
|
|
99
|
+
this.expressionDescription = `${error}` ?? 'Invalid cron expression.';
|
|
100
|
+
this._onChange(null);
|
|
101
|
+
}
|
|
80
102
|
}), takeUntil(this.unsubscribe$))
|
|
81
103
|
.subscribe();
|
|
82
104
|
this.refreshInternalForm();
|
|
83
105
|
}
|
|
84
106
|
ngOnDestroy() {
|
|
85
107
|
this.fm.stopMonitoring(this.elRef.nativeElement);
|
|
108
|
+
this.resizeObserver?.unobserve(this.elRef.nativeElement);
|
|
86
109
|
this.unsubscribe$.next();
|
|
87
110
|
this.unsubscribe$.complete();
|
|
88
111
|
}
|
|
89
112
|
// From ControlValueAccessor interface
|
|
90
113
|
writeValue(value) {
|
|
91
114
|
if (isEmpty(value)) {
|
|
115
|
+
this.onClear();
|
|
92
116
|
return;
|
|
93
117
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
118
|
+
try {
|
|
119
|
+
this.value = value;
|
|
120
|
+
this.cronDisplay = parseCronExpression(value);
|
|
121
|
+
this.expressionDescription = toCronDescription(this.value);
|
|
122
|
+
this.refreshInternalForm();
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
this.hasError = true;
|
|
126
|
+
this.expressionDescription = `${error}` ?? 'Invalid cron expression.';
|
|
127
|
+
}
|
|
97
128
|
}
|
|
98
129
|
// From ControlValueAccessor interface
|
|
99
130
|
registerOnChange(fn) {
|
|
@@ -103,32 +134,72 @@ export class GioFormCronComponent {
|
|
|
103
134
|
registerOnTouched(fn) {
|
|
104
135
|
this._onTouched = fn;
|
|
105
136
|
}
|
|
137
|
+
// From ControlValueAccessor interface
|
|
138
|
+
setDisabledState(isDisabled) {
|
|
139
|
+
this.isDisabled = isDisabled;
|
|
140
|
+
this.refreshInternalForm();
|
|
141
|
+
}
|
|
142
|
+
validate(_) {
|
|
143
|
+
return this.hasError ? { invalid: true } : null;
|
|
144
|
+
}
|
|
145
|
+
onClear() {
|
|
146
|
+
this.value = undefined;
|
|
147
|
+
this.cronDisplay = undefined;
|
|
148
|
+
this.internalFormGroup?.reset({}, { emitEvent: true });
|
|
149
|
+
}
|
|
106
150
|
refreshInternalForm() {
|
|
107
|
-
const d = this.cronDisplay;
|
|
108
151
|
if (!this.internalFormGroup)
|
|
109
152
|
return;
|
|
110
|
-
this.internalFormGroup.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
153
|
+
this.isDisabled ? this.internalFormGroup.disable({ emitEvent: false }) : this.internalFormGroup.enable({ emitEvent: false });
|
|
154
|
+
const d = this.cronDisplay;
|
|
155
|
+
if (d) {
|
|
156
|
+
this.internalFormGroup.patchValue({
|
|
157
|
+
mode: d.mode,
|
|
158
|
+
customExpression: d.customExpression,
|
|
159
|
+
secondInterval: d.secondInterval,
|
|
160
|
+
minuteInterval: d.minuteInterval,
|
|
161
|
+
hourInterval: d.hourInterval,
|
|
162
|
+
dayInterval: d.dayInterval,
|
|
163
|
+
dayOfWeek: d.dayOfWeek,
|
|
164
|
+
dayOfMonth: d.dayOfMonth,
|
|
165
|
+
hours: d.hours,
|
|
166
|
+
minutes: d.minutes,
|
|
167
|
+
}, { emitEvent: false });
|
|
168
|
+
}
|
|
122
169
|
}
|
|
123
170
|
}
|
|
124
|
-
GioFormCronComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioFormCronComponent, deps: [{ token:
|
|
125
|
-
GioFormCronComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioFormCronComponent, selector: "gio-form-cron",
|
|
171
|
+
GioFormCronComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioFormCronComponent, deps: [{ token: i0.ElementRef }, { token: i1.FocusMonitor }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
172
|
+
GioFormCronComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioFormCronComponent, selector: "gio-form-cron", host: { properties: { "class.smallDisplay": "this.smallDisplay", "class.disabled": "this.hasError" } }, providers: [
|
|
173
|
+
{
|
|
174
|
+
provide: NG_VALUE_ACCESSOR,
|
|
175
|
+
useExisting: forwardRef(() => GioFormCronComponent),
|
|
176
|
+
multi: true,
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
provide: NG_VALIDATORS,
|
|
180
|
+
useExisting: forwardRef(() => GioFormCronComponent),
|
|
181
|
+
multi: true,
|
|
182
|
+
},
|
|
183
|
+
], ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<div class=\"label\"><ng-content select=\"gio-form-cron-label\"></ng-content></div>\n<div class=\"wrapper\" [class.smallDisplay]=\"smallDisplay\" [class.disabled]=\"isDisabled\">\n <ng-container *ngIf=\"internalFormGroup\" [formGroup]=\"internalFormGroup\">\n <div class=\"menu\">\n <mat-button-toggle-group class=\"gio-button-toggle-group menu__mode\" name=\"mode\" aria-label=\"Cron mode\" formControlName=\"mode\">\n <mat-button-toggle value=\"secondly\" matTooltip=\"Secondly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 's' : 'Secondly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"minutely\" matTooltip=\"Minutely\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'm' : 'Minutely'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"hourly\" matTooltip=\"Hourly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'h' : 'Hourly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"daily\" matTooltip=\"Daily\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'D' : 'Daily'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"weekly\" matTooltip=\"Weekly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'W' : 'Weekly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"monthly\" matTooltip=\"Monthly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'M' : 'Monthly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"custom\" matTooltip=\"Custom\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'C' : 'Custom'\n }}</mat-button-toggle>\n </mat-button-toggle-group>\n <button *ngIf=\"value && !isDisabled\" mat-icon-button aria-label=\"Clear\" matTooltip=\"Clear\" type=\"button\" (click)=\"onClear()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <ng-container [ngSwitch]=\"internalFormGroup.get('mode')?.value\">\n <ng-container *ngSwitchCase=\"'secondly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Second</mat-label>\n <mat-select formControlName=\"secondInterval\">\n <mat-option *ngFor=\"let second of seconds\" [value]=\"second\">{{ second }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'minutely'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minute(s)</mat-label>\n <mat-select formControlName=\"minuteInterval\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'hourly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hour(s)</mat-label>\n <mat-select formControlName=\"hourInterval\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minute(s)</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'daily'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Day(s)</mat-label>\n <mat-select formControlName=\"dayInterval\">\n <mat-option *ngFor=\"let day of daysOfMonth\" [value]=\"day\">{{ day }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\"> at </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hour(s)</mat-label>\n <mat-select formControlName=\"hours\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minute(s)</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'weekly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-medium\">\n <mat-label>Day of the week</mat-label>\n <mat-select formControlName=\"dayOfWeek\">\n <mat-option *ngFor=\"let day of daysOfWeek; let index = index\" [value]=\"index\">{{ day }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\"> at </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hours</mat-label>\n <mat-select formControlName=\"hours\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minutes</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'monthly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">On the </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Day(s)</mat-label>\n <mat-select formControlName=\"dayOfMonth\">\n <mat-option *ngFor=\"let day of daysOfMonth\" [value]=\"day\">{{ day }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\"> of every month at </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hours</mat-label>\n <mat-select formControlName=\"hours\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minutes</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'custom'\">\n <div class=\"modeForm\">\n <mat-form-field class=\"modeForm__field-custom\">\n <mat-label>Cron expression</mat-label>\n <input matInput formControlName=\"customExpression\" placeholder=\"* * * * * *\" />\n </mat-form-field>\n </div>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"value; else placeholder\" class=\"preview\">\n <span *ngIf=\"internalFormGroup.get('mode')?.value !== 'custom'\" class=\"preview__value\">\n {{ value }}\n </span>\n <span class=\"preview__hint\">{{ expressionDescription }}</span>\n </div>\n </ng-container>\n\n <ng-template #placeholder>\n <div class=\"placeholder\">No cron expression defined.</div>\n </ng-template>\n</div>\n<div class=\"hint\"><ng-content select=\"gio-form-cron-hint\"></ng-content></div>\n", styles: [":host{display:block}.label{font:400 12px/16px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;padding-left:10px;color:#7a7b80}.label:empty{display:none}.wrapper{display:inline-flex;flex-direction:column;padding:8px;border:1px solid #d3d5dc;border-radius:8px}.wrapper:hover:not(.disabled){padding:7px;border:2px solid #313133}.wrapper .menu{display:inline-flex;margin-bottom:4px}.wrapper .menu__mode{border:none;margin-bottom:0}.wrapper .modeForm{margin-bottom:8px}.wrapper .modeForm__field-small,.wrapper .modeForm__field-medium,.wrapper .modeForm__field-custom{display:inline-block;height:52px}.wrapper .modeForm__field-small{width:80px}.wrapper .modeForm__field-medium{width:120px}.wrapper .modeForm__field-custom{width:100%}.wrapper .preview,.wrapper .placeholder{display:flex;flex-direction:column;align-items:center;padding:8px;border-radius:8px;background-color:#e7e8ef;color:#000}.wrapper .preview__hint,.wrapper .placeholder{font:400 12px/16px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.wrapper.disabled .preview,.wrapper.disabled .placeholder{opacity:.4}:host-context(.ng-invalid:not(.ng-pristine)) .wrapper{border-color:#ec4899}:host-context(.ng-invalid:not(.ng-pristine)) .wrapper .preview,:host-context(.ng-invalid:not(.ng-pristine)) .wrapper .placeholder{color:#ec4899}.hint{font:400 12px/16px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;padding-top:2px;padding-left:10px;color:#7a7b80}.hint:empty{display:none}\n"], components: [{ type: i2.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i5.MatLabel, selector: "mat-label" }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }] });
|
|
126
184
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioFormCronComponent, decorators: [{
|
|
127
185
|
type: Component,
|
|
128
|
-
args: [{ selector: 'gio-form-cron',
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tY3Jvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWNyb24vZ2lvLWZvcm0tY3Jvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWNyb24vZ2lvLWZvcm0tY3Jvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFFLFNBQVMsRUFBaUMsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQXdCLFdBQVcsRUFBRSxTQUFTLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsT0FBTyxFQUFlLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7QUFPcEgsTUFBTSxPQUFPLG9CQUFvQjtJQXNCL0IsWUFDc0MsU0FBb0IsRUFDdkMsS0FBaUIsRUFDakIsRUFBZ0I7UUFGRyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3ZDLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsT0FBRSxHQUFGLEVBQUUsQ0FBYztRQXhCNUIsY0FBUyxHQUFtQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZELGVBQVUsR0FBZSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBDLFlBQU8sR0FBRyxDQUFD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RUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE9BQU87UUFFcEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FDL0I7WUFDRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDWixnQkFBZ0IsRUFBRSxDQUFDLENBQUMsZ0JBQWdCO1lBQ3BDLGNBQWMsRUFBRSxDQUFDLENBQUMsY0FBYztZQUNoQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLGNBQWM7WUFDaEMsWUFBWSxFQUFFLENBQUMsQ0FBQyxZQUFZO1lBQzVCLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVztZQUMxQixTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVM7WUFDdEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO1lBRXhCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztZQUNkLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztTQUNuQixFQUNELEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUNyQixDQUFDO0lBQ0osQ0FBQzs7a0hBMUlVLG9CQUFvQjtzR0FBcEIsb0JBQW9CLHFEQy9CakMsc3NOQW9LQTs0RkRySWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGVBQWU7OzBCQTJCdEIsUUFBUTs7MEJBQUksSUFBSSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5XG5cbmltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNFbXB0eSwgcmFuZ2UgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IENyb25EaXNwbGF5LCBnZXREZWZhdWx0Q3JvbkRpc3BsYXksIHBhcnNlQ3JvbkV4cHJlc3Npb24sIHRvQ3JvbkV4cHJlc3Npb24gfSBmcm9tICcuL2dpby1mb3JtLWNyb24uYWRhcHRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dpby1mb3JtLWNyb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2lvLWZvcm0tY3Jvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dpby1mb3JtLWNyb24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgR2lvRm9ybUNyb25Db21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgX29uQ2hhbmdlOiAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiAoe30pO1xuXG4gIHB1YmxpYyBfb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4gKHt9KTtcblxuICBwdWJsaWMgc2Vjb25kcyA9IFsuLi5yYW5nZSgwLCA1OSldO1xuICBwdWJsaWMgbWludXRlcyA9IFsuLi5yYW5nZSgwLCA1OSldO1xuICBwdWJsaWMgaG91cnMgPSBbLi4ucmFuZ2UoMCwgMjMpXTtcbiAgcHVibGljIGRheXNPZk1vbnRoID0gWy4uLnJhbmdlKDEsIDMyKV07XG4gIHB1YmxpYyBkYXlzT2ZXZWVrID0gWydNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5JywgJ1N1bmRheSddO1xuICBwdWJsaWMgaW50ZXJuYWxGb3JtR3JvdXA/OiBGb3JtR3JvdXA7XG4gIHB1YmxpYyB2YWx1ZT86IHN0cmluZztcblxuICBwcml2YXRlIHRvdWNoZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBmb2N1c2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBkZWZhdWx0TW9kZSA9ICdzZWNvbmQnIGFzIGNvbnN0O1xuXG4gIHByaXZhdGUgY3JvbkRpc3BsYXk6IENyb25EaXNwbGF5ID0gZ2V0RGVmYXVsdENyb25EaXNwbGF5KHRoaXMuZGVmYXVsdE1vZGUpO1xuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm06IEZvY3VzTW9uaXRvcixcbiAgKSB7XG4gICAgLy8gUmVwbGFjZSB0aGUgcHJvdmlkZXIgZnJvbSBhYm92ZSB3aXRoIHRoaXMuXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcbiAgICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nXG4gICAgICAvLyB0aGUgcHJvdmlkZXJzKSB0byBhdm9pZCBydW5uaW5nIGludG8gYSBjaXJjdWxhciBpbXBvcnQuXG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG5cbiAgICBmbS5tb25pdG9yKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XG4gICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbnRlcm5hbEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgbW9kZTogbmV3IEZvcm1Db250cm9sKHRoaXMuZGVmYXVsdE1vZGUpLFxuICAgICAgc2Vjb25kSW50ZXJ2YWw6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgICAgbWludXRlSW50ZXJ2YWw6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgICAgaG91ckludGVydmFsOiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgICAgIGRheUludGVydmFsOiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgICAgIGRheU9mV2VlazogbmV3IEZvcm1Db250cm9sKCksXG4gICAgICBkYXlPZk1vbnRoOiBuZXcgRm9ybUNvbnRyb2woKSxcblxuICAgICAgaG91cnM6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgICAgbWludXRlczogbmV3IEZvcm1Db250cm9sKCksXG4gICAgICBjdXN0b21FeHByZXNzaW9uOiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgICB9KTtcblxuICAgIHRoaXMuaW50ZXJuYWxGb3JtR3JvdXBcbiAgICAgIC5nZXQoJ21vZGUnKVxuICAgICAgPy52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgdGFwKG1vZGUgPT4ge1xuICAgICAgICAgIHRoaXMuY3JvbkRpc3BsYXkgPSBnZXREZWZhdWx0Q3JvbkRpc3BsYXkobW9kZSk7XG5cbiAgICAgICAgICB0aGlzLnJlZnJlc2hJbnRlcm5hbEZvcm0oKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmludGVybmFsRm9ybUdyb3VwLnZhbHVlQ2hhbmdlc1xuICAgICAgPy5waXBlKFxuICAgICAgICB0YXAodmFsdWUgPT4ge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0b0Nyb25FeHByZXNzaW9uKHtcbiAgICAgICAgICAgIG1vZGU6IHZhbHVlLm1vZGUsXG4gICAgICAgICAgICBzZWNvbmRJbnRlcnZhbDogdmFsdWUuc2Vjb25kSW50ZXJ2YWwsXG4gICAgICAgICAgICBtaW51dGVJbnRlcnZhbDogdmFsdWUubWludXRlSW50ZXJ2YWwsXG4gICAgICAgICAgICBob3VySW50ZXJ2YWw6IHZhbHVlLmhvdXJJbnRlcnZhbCxcbiAgICAgICAgICAgIGRheUludGVydmFsOiB2YWx1ZS5kYXlJbnRlcnZhbCxcbiAgICAgICAgICAgIGRheU9mV2VlazogdmFsdWUuZGF5T2ZXZWVrLFxuICAgICAgICAgICAgZGF5T2ZNb250aDogdmFsdWUuZGF5T2ZNb250aCxcbiAgICAgICAgICAgIGN1c3RvbUV4cHJlc3Npb246IHZhbHVlLmN1c3RvbUV4cHJlc3Npb24sXG4gICAgICAgICAgICBob3VyczogdmFsdWUuaG91cnMsXG4gICAgICAgICAgICBtaW51dGVzOiB2YWx1ZS5taW51dGVzLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMucmVmcmVzaEludGVybmFsRm9ybSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZm0uc3RvcE1vbml0b3JpbmcodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY3JvbkRpc3BsYXkgPSBwYXJzZUNyb25FeHByZXNzaW9uKHZhbHVlKTtcbiAgICB0aGlzLnJlZnJlc2hJbnRlcm5hbEZvcm0oKTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hJbnRlcm5hbEZvcm0oKTogdm9pZCB7XG4gICAgY29uc3QgZCA9IHRoaXMuY3JvbkRpc3BsYXk7XG4gICAgaWYgKCF0aGlzLmludGVybmFsRm9ybUdyb3VwKSByZXR1cm47XG5cbiAgICB0aGlzLmludGVybmFsRm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIG1vZGU6IGQubW9kZSxcbiAgICAgICAgY3VzdG9tRXhwcmVzc2lvbjogZC5jdXN0b21FeHByZXNzaW9uLFxuICAgICAgICBzZWNvbmRJbnRlcnZhbDogZC5zZWNvbmRJbnRlcnZhbCxcbiAgICAgICAgbWludXRlSW50ZXJ2YWw6IGQubWludXRlSW50ZXJ2YWwsXG4gICAgICAgIGhvdXJJbnRlcnZhbDogZC5ob3VySW50ZXJ2YWwsXG4gICAgICAgIGRheUludGVydmFsOiBkLmRheUludGVydmFsLFxuICAgICAgICBkYXlPZldlZWs6IGQuZGF5T2ZXZWVrLFxuICAgICAgICBkYXlPZk1vbnRoOiBkLmRheU9mTW9udGgsXG5cbiAgICAgICAgaG91cnM6IGQuaG91cnMsXG4gICAgICAgIG1pbnV0ZXM6IGQubWludXRlcyxcbiAgICAgIH0sXG4gICAgICB7IGVtaXRFdmVudDogZmFsc2UgfSxcbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG5cbiAgICBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4tLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJpbnRlcm5hbEZvcm1Hcm91cFwiIFtmb3JtR3JvdXBdPVwiaW50ZXJuYWxGb3JtR3JvdXBcIj5cbiAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIGNsYXNzPVwiZ2lvLWJ1dHRvbi10b2dnbGUtZ3JvdXBcIiBuYW1lPVwibW9kZVwiIGFyaWEtbGFiZWw9XCJDcm9uIG1vZGVcIiBmb3JtQ29udHJvbE5hbWU9XCJtb2RlXCI+XG4gICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwic2Vjb25kXCI+U2Vjb25kbHk8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cIm1pbnV0ZVwiPk1pbnV0ZWx5PC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJob3VyXCI+SG91cmx5PC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJkYXlcIj5EYWlseTwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwid2Vla1wiPldlZWtseTwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwibW9udGhcIj5Nb250aGx5PC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJjdXN0b21cIj5DdXN0b208L21hdC1idXR0b24tdG9nZ2xlPlxuICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuXG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImludGVybmFsRm9ybUdyb3VwLmdldCgnbW9kZScpPy52YWx1ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZWNvbmQnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kZUZvcm1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj5FdmVyeSA8L3NwYW4+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPlNlY29uZDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInNlY29uZEludGVydmFsXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc2Vjb25kIG9mIHNlY29uZHNcIiBbdmFsdWVdPVwic2Vjb25kXCI+e3sgc2Vjb25kICsgMSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtaW51dGUnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kZUZvcm1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj5FdmVyeSA8L3NwYW4+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPk1pbnV0ZShzKTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cIm1pbnV0ZUludGVydmFsXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZXNcIiBbdmFsdWVdPVwibWludXRlXCI+e3sgbWludXRlICsgMSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidob3VyJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGVGb3JtXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3Jvbi1mb3JtLWxhYmVsXCI+RXZlcnkgPC9zcGFuPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD5Ib3VyKHMpPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiaG91ckludGVydmFsXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiIFt2YWx1ZV09XCJob3VyXCI+e3sgaG91ciArIDEgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNyb24tZm9ybS1sYWJlbFwiPjo8L3NwYW4+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPk1pbnV0ZShzKTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cIm1pbnV0ZXNcIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtaW51dGUgb2YgbWludXRlc1wiIFt2YWx1ZV09XCJtaW51dGVcIj57eyBtaW51dGUgKyAxIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RheSdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RlRm9ybVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNyb24tZm9ybS1sYWJlbFwiPkV2ZXJ5IDwvc3Bhbj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+RGF5KHMpPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiZGF5SW50ZXJ2YWxcIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5c09mTW9udGhcIiBbdmFsdWVdPVwiZGF5XCI+e3sgZGF5IH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj4gYXQgPC9zcGFuPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD5Ib3VyKHMpPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiaG91cnNcIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBob3VyIG9mIGhvdXJzXCIgW3ZhbHVlXT1cImhvdXJcIj57eyBob3VyICsgMSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3Jvbi1mb3JtLWxhYmVsXCI+Ojwvc3Bhbj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+TWludXRlKHMpPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwibWludXRlc1wiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCIgW3ZhbHVlXT1cIm1pbnV0ZVwiPnt7IG1pbnV0ZSArIDEgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInd2VlaydcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RlRm9ybVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNyb24tZm9ybS1sYWJlbFwiPkV2ZXJ5IDwvc3Bhbj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+RGF5IG9mIHRoZSB3ZWVrPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiZGF5T2ZXZWVrXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZGF5IG9mIGRheXNPZldlZWs7IGxldCBpbmRleCA9IGluZGV4XCIgW3ZhbHVlXT1cImluZGV4XCI+e3sgZGF5IH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj4gYXQgPC9zcGFuPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD5Ib3VyczwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImhvdXJzXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiIFt2YWx1ZV09XCJob3VyXCI+e3sgaG91ciArIDEgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNyb24tZm9ybS1sYWJlbFwiPjo8L3NwYW4+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPk1pbnV0ZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJtaW51dGVzXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZXNcIiBbdmFsdWVdPVwibWludXRlXCI+e3sgbWludXRlICsgMSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtb250aCdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RlRm9ybVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNyb24tZm9ybS1sYWJlbFwiPk9uIHRoZSA8L3NwYW4+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPkRheShzKSBvZiBldmVyeSBtb250aDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImRheU9mTW9udGhcIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5c09mTW9udGhcIiBbdmFsdWVdPVwiZGF5XCI+e3sgZGF5IH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj4gYXQgPC9zcGFuPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD5Ib3VyczwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImhvdXJzXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiIFt2YWx1ZV09XCJob3VyXCI+e3sgaG91ciArIDEgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNyb24tZm9ybS1sYWJlbFwiPjo8L3NwYW4+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPk1pbnV0ZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJtaW51dGVzXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZXNcIiBbdmFsdWVdPVwibWludXRlXCI+e3sgbWludXRlICsgMSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjdXN0b20nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kZUZvcm1cIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+Q3JvbiBleHByZXNzaW9uPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImN1c3RvbUV4cHJlc3Npb25cIiBwbGFjZWhvbGRlcj1cIiogKiAqICogKiAqXCIgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8ZGl2IGNsYXNzPVwicHJldmlld1wiPlxuICAgIHt7IHZhbHVlIH19XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
186
|
+
args: [{ selector: 'gio-form-cron', providers: [
|
|
187
|
+
{
|
|
188
|
+
provide: NG_VALUE_ACCESSOR,
|
|
189
|
+
useExisting: forwardRef(() => GioFormCronComponent),
|
|
190
|
+
multi: true,
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
provide: NG_VALIDATORS,
|
|
194
|
+
useExisting: forwardRef(() => GioFormCronComponent),
|
|
195
|
+
multi: true,
|
|
196
|
+
},
|
|
197
|
+
], template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<div class=\"label\"><ng-content select=\"gio-form-cron-label\"></ng-content></div>\n<div class=\"wrapper\" [class.smallDisplay]=\"smallDisplay\" [class.disabled]=\"isDisabled\">\n <ng-container *ngIf=\"internalFormGroup\" [formGroup]=\"internalFormGroup\">\n <div class=\"menu\">\n <mat-button-toggle-group class=\"gio-button-toggle-group menu__mode\" name=\"mode\" aria-label=\"Cron mode\" formControlName=\"mode\">\n <mat-button-toggle value=\"secondly\" matTooltip=\"Secondly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 's' : 'Secondly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"minutely\" matTooltip=\"Minutely\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'm' : 'Minutely'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"hourly\" matTooltip=\"Hourly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'h' : 'Hourly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"daily\" matTooltip=\"Daily\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'D' : 'Daily'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"weekly\" matTooltip=\"Weekly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'W' : 'Weekly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"monthly\" matTooltip=\"Monthly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'M' : 'Monthly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"custom\" matTooltip=\"Custom\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'C' : 'Custom'\n }}</mat-button-toggle>\n </mat-button-toggle-group>\n <button *ngIf=\"value && !isDisabled\" mat-icon-button aria-label=\"Clear\" matTooltip=\"Clear\" type=\"button\" (click)=\"onClear()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <ng-container [ngSwitch]=\"internalFormGroup.get('mode')?.value\">\n <ng-container *ngSwitchCase=\"'secondly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Second</mat-label>\n <mat-select formControlName=\"secondInterval\">\n <mat-option *ngFor=\"let second of seconds\" [value]=\"second\">{{ second }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'minutely'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minute(s)</mat-label>\n <mat-select formControlName=\"minuteInterval\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'hourly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hour(s)</mat-label>\n <mat-select formControlName=\"hourInterval\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minute(s)</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'daily'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Day(s)</mat-label>\n <mat-select formControlName=\"dayInterval\">\n <mat-option *ngFor=\"let day of daysOfMonth\" [value]=\"day\">{{ day }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\"> at </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hour(s)</mat-label>\n <mat-select formControlName=\"hours\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minute(s)</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'weekly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-medium\">\n <mat-label>Day of the week</mat-label>\n <mat-select formControlName=\"dayOfWeek\">\n <mat-option *ngFor=\"let day of daysOfWeek; let index = index\" [value]=\"index\">{{ day }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\"> at </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hours</mat-label>\n <mat-select formControlName=\"hours\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minutes</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'monthly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">On the </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Day(s)</mat-label>\n <mat-select formControlName=\"dayOfMonth\">\n <mat-option *ngFor=\"let day of daysOfMonth\" [value]=\"day\">{{ day }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\"> of every month at </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hours</mat-label>\n <mat-select formControlName=\"hours\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minutes</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'custom'\">\n <div class=\"modeForm\">\n <mat-form-field class=\"modeForm__field-custom\">\n <mat-label>Cron expression</mat-label>\n <input matInput formControlName=\"customExpression\" placeholder=\"* * * * * *\" />\n </mat-form-field>\n </div>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"value; else placeholder\" class=\"preview\">\n <span *ngIf=\"internalFormGroup.get('mode')?.value !== 'custom'\" class=\"preview__value\">\n {{ value }}\n </span>\n <span class=\"preview__hint\">{{ expressionDescription }}</span>\n </div>\n </ng-container>\n\n <ng-template #placeholder>\n <div class=\"placeholder\">No cron expression defined.</div>\n </ng-template>\n</div>\n<div class=\"hint\"><ng-content select=\"gio-form-cron-hint\"></ng-content></div>\n", styles: [":host{display:block}.label{font:400 12px/16px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;padding-left:10px;color:#7a7b80}.label:empty{display:none}.wrapper{display:inline-flex;flex-direction:column;padding:8px;border:1px solid #d3d5dc;border-radius:8px}.wrapper:hover:not(.disabled){padding:7px;border:2px solid #313133}.wrapper .menu{display:inline-flex;margin-bottom:4px}.wrapper .menu__mode{border:none;margin-bottom:0}.wrapper .modeForm{margin-bottom:8px}.wrapper .modeForm__field-small,.wrapper .modeForm__field-medium,.wrapper .modeForm__field-custom{display:inline-block;height:52px}.wrapper .modeForm__field-small{width:80px}.wrapper .modeForm__field-medium{width:120px}.wrapper .modeForm__field-custom{width:100%}.wrapper .preview,.wrapper .placeholder{display:flex;flex-direction:column;align-items:center;padding:8px;border-radius:8px;background-color:#e7e8ef;color:#000}.wrapper .preview__hint,.wrapper .placeholder{font:400 12px/16px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.wrapper.disabled .preview,.wrapper.disabled .placeholder{opacity:.4}:host-context(.ng-invalid:not(.ng-pristine)) .wrapper{border-color:#ec4899}:host-context(.ng-invalid:not(.ng-pristine)) .wrapper .preview,:host-context(.ng-invalid:not(.ng-pristine)) .wrapper .placeholder{color:#ec4899}.hint{font:400 12px/16px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;padding-top:2px;padding-left:10px;color:#7a7b80}.hint:empty{display:none}\n"] }]
|
|
198
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FocusMonitor }, { type: i0.NgZone }]; }, propDecorators: { smallDisplay: [{
|
|
199
|
+
type: HostBinding,
|
|
200
|
+
args: ['class.smallDisplay']
|
|
201
|
+
}], hasError: [{
|
|
202
|
+
type: HostBinding,
|
|
203
|
+
args: ['class.disabled']
|
|
204
|
+
}] } });
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tY3Jvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWNyb24vZ2lvLWZvcm0tY3Jvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWNyb24vZ2lvLWZvcm0tY3Jvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFFLFNBQVMsRUFBYyxXQUFXLEVBQTZCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBR0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxhQUFhLEVBQ2IsaUJBQWlCLEdBR2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQWUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQW1CdkksTUFBTSxPQUFPLG9CQUFvQjtJQTJCL0IsWUFBNkIsS0FBaUIsRUFBbUIsRUFBZ0IsRUFBbUIsTUFBYztRQUFyRixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQW1CLE9BQUUsR0FBRixFQUFFLENBQWM7UUFBbUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQTFCM0csY0FBUyxHQUFtQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZELGVBQVUsR0FBZSxHQUFHLEVB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aUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDOzRCQUNuRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtpSkFpQk0sWUFBWTtzQkFEbEIsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBTXpCLFFBQVE7c0JBRGYsV0FBVzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0LCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc0VtcHR5LCByYW5nZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDcm9uRGlzcGxheSwgZ2V0RGVmYXVsdENyb25EaXNwbGF5LCBwYXJzZUNyb25FeHByZXNzaW9uLCB0b0Nyb25EZXNjcmlwdGlvbiwgdG9Dcm9uRXhwcmVzc2lvbiB9IGZyb20gJy4vZ2lvLWZvcm0tY3Jvbi5hZGFwdGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2lvLWZvcm0tY3JvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9naW8tZm9ybS1jcm9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2lvLWZvcm0tY3Jvbi5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEdpb0Zvcm1Dcm9uQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEdpb0Zvcm1Dcm9uQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEdpb0Zvcm1Dcm9uQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95LCBWYWxpZGF0b3Ige1xuICBwdWJsaWMgX29uQ2hhbmdlOiAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiAoe30pO1xuXG4gIHB1YmxpYyBfb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4gKHt9KTtcblxuICBwdWJsaWMgc2Vjb25kcyA9IFsuLi5yYW5nZSgwLCA2MCldO1xuICBwdWJsaWMgbWludXRlcyA9IFsuLi5yYW5nZSgwLCA2MCldO1xuICBwdWJsaWMgaG91cnMgPSBbLi4ucmFuZ2UoMCwgMjQpXTtcbiAgcHVibGljIGRheXNPZk1vbnRoID0gWy4uLnJhbmdlKDEsIDMyKV07XG4gIHB1YmxpYyBkYXlzT2ZXZWVrID0gWydNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5JywgJ1N1bmRheSddO1xuICBwdWJsaWMgaW50ZXJuYWxGb3JtR3JvdXA/OiBGb3JtR3JvdXA7XG4gIHB1YmxpYyB2YWx1ZT86IHN0cmluZztcbiAgcHVibGljIGV4cHJlc3Npb25EZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcHVibGljIGlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWFsbERpc3BsYXknKVxuICBwdWJsaWMgc21hbGxEaXNwbGF5ID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB0b3VjaGVkID0gZmFsc2U7XG4gIHByaXZhdGUgZm9jdXNlZCA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkJylcbiAgcHJpdmF0ZSBoYXNFcnJvciA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY3JvbkRpc3BsYXk/OiBDcm9uRGlzcGxheTtcblxuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlcjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVsUmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIHJlYWRvbmx5IGZtOiBGb2N1c01vbml0b3IsIHByaXZhdGUgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmUpIHtcbiAgICBmbS5tb25pdG9yKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XG4gICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHdpbmRvdy5SZXNpemVPYnNlcnZlcikge1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IGVudHJpZXNbMF0uY29udGVudFJlY3Qud2lkdGg7XG4gICAgICAgICAgdGhpcy5zbWFsbERpc3BsYXkgPSB3aWR0aCA8IDU4MDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHRoaXMuaW50ZXJuYWxGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIG1vZGU6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgICAgc2Vjb25kSW50ZXJ2YWw6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgICAgbWludXRlSW50ZXJ2YWw6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgICAgaG91ckludGVydmFsOiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgICAgIGRheUludGVydmFsOiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgICAgIGRheU9mV2VlazogbmV3IEZvcm1Db250cm9sKCksXG4gICAgICBkYXlPZk1vbnRoOiBuZXcgRm9ybUNvbnRyb2woKSxcblxuICAgICAgaG91cnM6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgICAgbWludXRlczogbmV3IEZvcm1Db250cm9sKCksXG4gICAgICBjdXN0b21FeHByZXNzaW9uOiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZygnaW5pdCAnKTtcblxuICAgIHRoaXMuaXNEaXNhYmxlZCA/IHRoaXMuaW50ZXJuYWxGb3JtR3JvdXAuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSkgOiB0aGlzLmludGVybmFsRm9ybUdyb3VwLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cbiAgICB0aGlzLmludGVybmFsRm9ybUdyb3VwXG4gICAgICAuZ2V0KCdtb2RlJylcbiAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIGZpbHRlcihtb2RlID0+ICEhbW9kZSksXG4gICAgICAgIHRhcChtb2RlID0+IHtcbiAgICAgICAgICB0aGlzLmNyb25EaXNwbGF5ID0gZ2V0RGVmYXVsdENyb25EaXNwbGF5KG1vZGUpO1xuXG4gICAgICAgICAgdGhpcy5yZWZyZXNoSW50ZXJuYWxGb3JtKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5pbnRlcm5hbEZvcm1Hcm91cC52YWx1ZUNoYW5nZXNcbiAgICAgID8ucGlwZShcbiAgICAgICAgdGFwKHZhbHVlID0+IHtcbiAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgICAgaWYgKCF2YWx1ZT8ubW9kZSkge1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UobnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdG9Dcm9uRXhwcmVzc2lvbih7XG4gICAgICAgICAgICAgIG1vZGU6IHZhbHVlLm1vZGUsXG4gICAgICAgICAgICAgIHNlY29uZEludGVydmFsOiB2YWx1ZS5zZWNvbmRJbnRlcnZhbCxcbiAgICAgICAgICAgICAgbWludXRlSW50ZXJ2YWw6IHZhbHVlLm1pbnV0ZUludGVydmFsLFxuICAgICAgICAgICAgICBob3VySW50ZXJ2YWw6IHZhbHVlLmhvdXJJbnRlcnZhbCxcbiAgICAgICAgICAgICAgZGF5SW50ZXJ2YWw6IHZhbHVlLmRheUludGVydmFsLFxuICAgICAgICAgICAgICBkYXlPZldlZWs6IHZhbHVlLmRheU9mV2VlayxcbiAgICAgICAgICAgICAgZGF5T2ZNb250aDogdmFsdWUuZGF5T2ZNb250aCxcbiAgICAgICAgICAgICAgY3VzdG9tRXhwcmVzc2lvbjogdmFsdWUuY3VzdG9tRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgaG91cnM6IHZhbHVlLmhvdXJzLFxuICAgICAgICAgICAgICBtaW51dGVzOiB2YWx1ZS5taW51dGVzLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbkRlc2NyaXB0aW9uID0gdG9Dcm9uRGVzY3JpcHRpb24odGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5oYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25EZXNjcmlwdGlvbiA9IGAke2Vycm9yfWAgPz8gJ0ludmFsaWQgY3JvbiBleHByZXNzaW9uLic7XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZShudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5yZWZyZXNoSW50ZXJuYWxGb3JtKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5mbS5zdG9wTW9uaXRvcmluZyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LnVub2JzZXJ2ZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgICAgdGhpcy5vbkNsZWFyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLmNyb25EaXNwbGF5ID0gcGFyc2VDcm9uRXhwcmVzc2lvbih2YWx1ZSk7XG5cbiAgICAgIHRoaXMuZXhwcmVzc2lvbkRlc2NyaXB0aW9uID0gdG9Dcm9uRGVzY3JpcHRpb24odGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLnJlZnJlc2hJbnRlcm5hbEZvcm0oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYXNFcnJvciA9IHRydWU7XG4gICAgICB0aGlzLmV4cHJlc3Npb25EZXNjcmlwdGlvbiA9IGAke2Vycm9yfWAgPz8gJ0ludmFsaWQgY3JvbiBleHByZXNzaW9uLic7XG4gICAgfVxuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuXG4gICAgdGhpcy5yZWZyZXNoSW50ZXJuYWxGb3JtKCk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoXzogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmhhc0Vycm9yID8geyBpbnZhbGlkOiB0cnVlIH0gOiBudWxsO1xuICB9XG5cbiAgcHVibGljIG9uQ2xlYXIoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNyb25EaXNwbGF5ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaW50ZXJuYWxGb3JtR3JvdXA/LnJlc2V0KHt9LCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaEludGVybmFsRm9ybSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW50ZXJuYWxGb3JtR3JvdXApIHJldHVybjtcblxuICAgIHRoaXMuaXNEaXNhYmxlZCA/IHRoaXMuaW50ZXJuYWxGb3JtR3JvdXAuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSkgOiB0aGlzLmludGVybmFsRm9ybUdyb3VwLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cbiAgICBjb25zdCBkID0gdGhpcy5jcm9uRGlzcGxheTtcbiAgICBpZiAoZCkge1xuICAgICAgdGhpcy5pbnRlcm5hbEZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgbW9kZTogZC5tb2RlLFxuICAgICAgICAgIGN1c3RvbUV4cHJlc3Npb246IGQuY3VzdG9tRXhwcmVzc2lvbixcbiAgICAgICAgICBzZWNvbmRJbnRlcnZhbDogZC5zZWNvbmRJbnRlcnZhbCxcbiAgICAgICAgICBtaW51dGVJbnRlcnZhbDogZC5taW51dGVJbnRlcnZhbCxcbiAgICAgICAgICBob3VySW50ZXJ2YWw6IGQuaG91ckludGVydmFsLFxuICAgICAgICAgIGRheUludGVydmFsOiBkLmRheUludGVydmFsLFxuICAgICAgICAgIGRheU9mV2VlazogZC5kYXlPZldlZWssXG4gICAgICAgICAgZGF5T2ZNb250aDogZC5kYXlPZk1vbnRoLFxuXG4gICAgICAgICAgaG91cnM6IGQuaG91cnMsXG4gICAgICAgICAgbWludXRlczogZC5taW51dGVzLFxuICAgICAgICB9LFxuICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tXG5cbiAgICBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4tLT5cbjxkaXYgY2xhc3M9XCJsYWJlbFwiPjxuZy1jb250ZW50IHNlbGVjdD1cImdpby1mb3JtLWNyb24tbGFiZWxcIj48L25nLWNvbnRlbnQ+PC9kaXY+XG48ZGl2IGNsYXNzPVwid3JhcHBlclwiIFtjbGFzcy5zbWFsbERpc3BsYXldPVwic21hbGxEaXNwbGF5XCIgW2NsYXNzLmRpc2FibGVkXT1cImlzRGlzYWJsZWRcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImludGVybmFsRm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJpbnRlcm5hbEZvcm1Hcm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtZW51XCI+XG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgY2xhc3M9XCJnaW8tYnV0dG9uLXRvZ2dsZS1ncm91cCBtZW51X19tb2RlXCIgbmFtZT1cIm1vZGVcIiBhcmlhLWxhYmVsPVwiQ3JvbiBtb2RlXCIgZm9ybUNvbnRyb2xOYW1lPVwibW9kZVwiPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJzZWNvbmRseVwiIG1hdFRvb2x0aXA9XCJTZWNvbmRseVwiIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIXNtYWxsRGlzcGxheVwiPnt7XG4gICAgICAgICAgc21hbGxEaXNwbGF5ID8gJ3MnIDogJ1NlY29uZGx5J1xuICAgICAgICB9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cIm1pbnV0ZWx5XCIgbWF0VG9vbHRpcD1cIk1pbnV0ZWx5XCIgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhc21hbGxEaXNwbGF5XCI+e3tcbiAgICAgICAgICBzbWFsbERpc3BsYXkgPyAnbScgOiAnTWludXRlbHknXG4gICAgICAgIH19PC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiaG91cmx5XCIgbWF0VG9vbHRpcD1cIkhvdXJseVwiIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIXNtYWxsRGlzcGxheVwiPnt7XG4gICAgICAgICAgc21hbGxEaXNwbGF5ID8gJ2gnIDogJ0hvdXJseSdcbiAgICAgICAgfX08L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJkYWlseVwiIG1hdFRvb2x0aXA9XCJEYWlseVwiIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIXNtYWxsRGlzcGxheVwiPnt7XG4gICAgICAgICAgc21hbGxEaXNwbGF5ID8gJ0QnIDogJ0RhaWx5J1xuICAgICAgICB9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cIndlZWtseVwiIG1hdFRvb2x0aXA9XCJXZWVrbHlcIiBbbWF0VG9vbHRpcERpc2FibGVkXT1cIiFzbWFsbERpc3BsYXlcIj57e1xuICAgICAgICAgIHNtYWxsRGlzcGxheSA/ICdXJyA6ICdXZWVrbHknXG4gICAgICAgIH19PC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwibW9udGhseVwiIG1hdFRvb2x0aXA9XCJNb250aGx5XCIgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhc21hbGxEaXNwbGF5XCI+e3tcbiAgICAgICAgICBzbWFsbERpc3BsYXkgPyAnTScgOiAnTW9udGhseSdcbiAgICAgICAgfX08L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJjdXN0b21cIiBtYXRUb29sdGlwPVwiQ3VzdG9tXCIgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhc21hbGxEaXNwbGF5XCI+e3tcbiAgICAgICAgICBzbWFsbERpc3BsYXkgPyAnQycgOiAnQ3VzdG9tJ1xuICAgICAgICB9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgICAgPGJ1dHRvbiAqbmdJZj1cInZhbHVlICYmICFpc0Rpc2FibGVkXCIgbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJDbGVhclwiIG1hdFRvb2x0aXA9XCJDbGVhclwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DbGVhcigpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImludGVybmFsRm9ybUdyb3VwLmdldCgnbW9kZScpPy52YWx1ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlY29uZGx5J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kZUZvcm1cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNyb24tZm9ybS1sYWJlbFwiPkV2ZXJ5IDwvc3Bhbj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtb2RlRm9ybV9fZmllbGQtc21hbGxcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+U2Vjb25kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzZWNvbmRJbnRlcnZhbFwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc2Vjb25kIG9mIHNlY29uZHNcIiBbdmFsdWVdPVwic2Vjb25kXCI+e3sgc2Vjb25kIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtaW51dGVseSdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVGb3JtXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj5FdmVyeSA8L3NwYW4+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibW9kZUZvcm1fX2ZpZWxkLXNtYWxsXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPk1pbnV0ZShzKTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwibWludXRlSW50ZXJ2YWxcIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCIgW3ZhbHVlXT1cIm1pbnV0ZVwiPnt7IG1pbnV0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaG91cmx5J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kZUZvcm1cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNyb24tZm9ybS1sYWJlbFwiPkV2ZXJ5IDwvc3Bhbj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtb2RlRm9ybV9fZmllbGQtc21hbGxcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+SG91cihzKTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiaG91ckludGVydmFsXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBob3VyIG9mIGhvdXJzXCIgW3ZhbHVlXT1cImhvdXJcIj57eyBob3VyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj46PC9zcGFuPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1vZGVGb3JtX19maWVsZC1zbWFsbFwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5NaW51dGUocyk8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cIm1pbnV0ZXNcIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCIgW3ZhbHVlXT1cIm1pbnV0ZVwiPnt7IG1pbnV0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGFpbHknXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RlRm9ybVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Jvbi1mb3JtLWxhYmVsXCI+RXZlcnkgPC9zcGFuPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1vZGVGb3JtX19maWVsZC1zbWFsbFwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5EYXkocyk8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImRheUludGVydmFsXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5c09mTW9udGhcIiBbdmFsdWVdPVwiZGF5XCI+e3sgZGF5IH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj4gYXQgPC9zcGFuPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1vZGVGb3JtX19maWVsZC1zbWFsbFwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5Ib3VyKHMpPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJob3Vyc1wiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiIFt2YWx1ZV09XCJob3VyXCI+e3sgaG91ciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Jvbi1mb3JtLWxhYmVsXCI+Ojwvc3Bhbj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtb2RlRm9ybV9fZmllbGQtc21hbGxcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+TWludXRlKHMpPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJtaW51dGVzXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtaW51dGUgb2YgbWludXRlc1wiIFt2YWx1ZV09XCJtaW51dGVcIj57eyBtaW51dGUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3dlZWtseSdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVGb3JtXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj5FdmVyeSA8L3NwYW4+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibW9kZUZvcm1fX2ZpZWxkLW1lZGl1bVwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5EYXkgb2YgdGhlIHdlZWs8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImRheU9mV2Vla1wiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZGF5IG9mIGRheXNPZldlZWs7IGxldCBpbmRleCA9IGluZGV4XCIgW3ZhbHVlXT1cImluZGV4XCI+e3sgZGF5IH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj4gYXQgPC9zcGFuPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1vZGVGb3JtX19maWVsZC1zbWFsbFwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5Ib3VyczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiaG91cnNcIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIiBbdmFsdWVdPVwiaG91clwiPnt7IGhvdXIgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNyb24tZm9ybS1sYWJlbFwiPjo8L3NwYW4+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibW9kZUZvcm1fX2ZpZWxkLXNtYWxsXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPk1pbnV0ZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cIm1pbnV0ZXNcIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCIgW3ZhbHVlXT1cIm1pbnV0ZVwiPnt7IG1pbnV0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbW9udGhseSdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVGb3JtXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj5PbiB0aGUgPC9zcGFuPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1vZGVGb3JtX19maWVsZC1zbWFsbFwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5EYXkocyk8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImRheU9mTW9udGhcIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGRheSBvZiBkYXlzT2ZNb250aFwiIFt2YWx1ZV09XCJkYXlcIj57eyBkYXkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNyb24tZm9ybS1sYWJlbFwiPiBvZiBldmVyeSBtb250aCBhdCA8L3NwYW4+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibW9kZUZvcm1fX2ZpZWxkLXNtYWxsXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPkhvdXJzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJob3Vyc1wiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiIFt2YWx1ZV09XCJob3VyXCI+e3sgaG91ciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Jvbi1mb3JtLWxhYmVsXCI+Ojwvc3Bhbj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtb2RlRm9ybV9fZmllbGQtc21hbGxcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+TWludXRlczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwibWludXRlc1wiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZXNcIiBbdmFsdWVdPVwibWludXRlXCI+e3sgbWludXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjdXN0b20nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RlRm9ybVwiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1vZGVGb3JtX19maWVsZC1jdXN0b21cIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+Q3JvbiBleHByZXNzaW9uPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiY3VzdG9tRXhwcmVzc2lvblwiIHBsYWNlaG9sZGVyPVwiKiAqICogKiAqICpcIiAvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2ICpuZ0lmPVwidmFsdWU7IGVsc2UgcGxhY2Vob2xkZXJcIiBjbGFzcz1cInByZXZpZXdcIj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaW50ZXJuYWxGb3JtR3JvdXAuZ2V0KCdtb2RlJyk/LnZhbHVlICE9PSAnY3VzdG9tJ1wiIGNsYXNzPVwicHJldmlld19fdmFsdWVcIj5cbiAgICAgICAge3sgdmFsdWUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicHJldmlld19faGludFwiPnt7IGV4cHJlc3Npb25EZXNjcmlwdGlvbiB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNwbGFjZWhvbGRlcj5cbiAgICA8ZGl2IGNsYXNzPVwicGxhY2Vob2xkZXJcIj5ObyBjcm9uIGV4cHJlc3Npb24gZGVmaW5lZC48L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImhpbnRcIj48bmctY29udGVudCBzZWxlY3Q9XCJnaW8tZm9ybS1jcm9uLWhpbnRcIj48L25nLWNvbnRlbnQ+PC9kaXY+XG4iXX0=
|
|
@@ -15,7 +15,12 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';
|
|
17
17
|
import { MatButtonToggleGroupHarness } from '@angular/material/button-toggle/testing';
|
|
18
|
+
import { MatInputHarness } from '@angular/material/input/testing';
|
|
18
19
|
export class GioFormCronHarness extends ComponentHarness {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(...arguments);
|
|
22
|
+
this.getModeToggleGroup = this.locatorFor(MatButtonToggleGroupHarness.with({ selector: '[formControlName="mode"]' }));
|
|
23
|
+
}
|
|
19
24
|
/**
|
|
20
25
|
* Gets a `HarnessPredicate` that can be used to search for this harness.
|
|
21
26
|
*
|
|
@@ -26,17 +31,42 @@ export class GioFormCronHarness extends ComponentHarness {
|
|
|
26
31
|
return new HarnessPredicate(GioFormCronHarness, options);
|
|
27
32
|
}
|
|
28
33
|
async getMode() {
|
|
29
|
-
const mode = await this.
|
|
30
|
-
const selected = await (await mode.getToggles({ checked: true }))[0]
|
|
34
|
+
const mode = await this.getModeToggleGroup();
|
|
35
|
+
const selected = await (await mode.getToggles({ checked: true }))[0]?.getText();
|
|
31
36
|
if (!selected) {
|
|
32
|
-
|
|
37
|
+
return null;
|
|
33
38
|
}
|
|
34
39
|
return selected;
|
|
35
40
|
}
|
|
41
|
+
async setMode(mode) {
|
|
42
|
+
const modeToggle = await this.getModeToggleGroup();
|
|
43
|
+
await (await modeToggle.getToggles({ text: mode }))[0]?.check();
|
|
44
|
+
}
|
|
45
|
+
async clear() {
|
|
46
|
+
const clearButton = await this.locatorForOptional('[aria-label="Clear"]')();
|
|
47
|
+
await clearButton?.click();
|
|
48
|
+
}
|
|
36
49
|
async getValue() {
|
|
37
|
-
const value = await this.
|
|
38
|
-
return value
|
|
50
|
+
const value = await this.locatorForOptional('.preview__value')();
|
|
51
|
+
return value?.text() ?? null;
|
|
52
|
+
}
|
|
53
|
+
async setCustomValue(value) {
|
|
54
|
+
if ((await this.getMode()) !== 'Custom') {
|
|
55
|
+
await this.setMode('Custom');
|
|
56
|
+
}
|
|
57
|
+
const input = await this.locatorFor(MatInputHarness.with({ selector: '[formControlName="customExpression"]' }))();
|
|
58
|
+
await input.setValue(value);
|
|
59
|
+
}
|
|
60
|
+
async isDisabled() {
|
|
61
|
+
const mode = await this.getModeToggleGroup();
|
|
62
|
+
return mode.isDisabled();
|
|
63
|
+
}
|
|
64
|
+
async hasError() {
|
|
65
|
+
const host = await this.host();
|
|
66
|
+
const attribute = await host.getAttribute('class');
|
|
67
|
+
const error = attribute?.includes('ng-invalid');
|
|
68
|
+
return error ?? false;
|
|
39
69
|
}
|
|
40
70
|
}
|
|
41
71
|
GioFormCronHarness.hostSelector = 'gio-form-cron';
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tY3Jvbi5oYXJuZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvc3JjL2xpYi9naW8tZm9ybS1jcm9uL2dpby1mb3JtLWNyb24uaGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJbEUsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGdCQUFnQjtJQUF4RDs7UUFHWSx1QkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQTREN0gsQ0FBQztJQTFEQzs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBcUMsRUFBRTtRQUN4RCxPQUFPLElBQUksZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFN0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFFaEYsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFZO1FBQy9CLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDbkQsTUFBTSxDQUFDLE1BQU0sVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztRQUM1RSxNQUFNLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVE7UUFDbkIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBRWpFLE9BQU8sS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFhO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUN2QyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUI7UUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQ0FBc0MsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xILE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVU7UUFDckIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVE7UUFDbkIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELE1BQU0sS0FBSyxHQUFHLFNBQVMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEQsT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDO0lBQ3hCLENBQUM7O0FBN0RhLCtCQUFZLEdBQUcsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQmFzZUhhcm5lc3NGaWx0ZXJzLCBDb21wb25lbnRIYXJuZXNzLCBIYXJuZXNzUHJlZGljYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlR3JvdXBIYXJuZXNzIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZS90ZXN0aW5nJztcbmltcG9ydCB7IE1hdElucHV0SGFybmVzcyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0L3Rlc3RpbmcnO1xuXG5leHBvcnQgdHlwZSBHaW9Gb3JtQ3Jvbkhhcm5lc3NGaWx0ZXJzID0gQmFzZUhhcm5lc3NGaWx0ZXJzO1xuXG5leHBvcnQgY2xhc3MgR2lvRm9ybUNyb25IYXJuZXNzIGV4dGVuZHMgQ29tcG9uZW50SGFybmVzcyB7XG4gIHB1YmxpYyBzdGF0aWMgaG9zdFNlbGVjdG9yID0gJ2dpby1mb3JtLWNyb24nO1xuXG4gIHByb3RlY3RlZCBnZXRNb2RlVG9nZ2xlR3JvdXAgPSB0aGlzLmxvY2F0b3JGb3IoTWF0QnV0dG9uVG9nZ2xlR3JvdXBIYXJuZXNzLndpdGgoeyBzZWxlY3RvcjogJ1tmb3JtQ29udHJvbE5hbWU9XCJtb2RlXCJdJyB9KSk7XG5cbiAgLyoqXG4gICAqIEdldHMgYSBgSGFybmVzc1ByZWRpY2F0ZWAgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIHRoaXMgaGFybmVzcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgZmlsdGVyaW5nIHdoaWNoIGlucHV0IGluc3RhbmNlcyBhcmUgY29uc2lkZXJlZCBhIG1hdGNoLlxuICAgKiBAcmV0dXJuIGEgYEhhcm5lc3NQcmVkaWNhdGVgIGNvbmZpZ3VyZWQgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgd2l0aChvcHRpb25zOiBHaW9Gb3JtQ3Jvbkhhcm5lc3NGaWx0ZXJzID0ge30pOiBIYXJuZXNzUHJlZGljYXRlPEdpb0Zvcm1Dcm9uSGFybmVzcz4ge1xuICAgIHJldHVybiBuZXcgSGFybmVzc1ByZWRpY2F0ZShHaW9Gb3JtQ3Jvbkhhcm5lc3MsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE1vZGUoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgbW9kZSA9IGF3YWl0IHRoaXMuZ2V0TW9kZVRvZ2dsZUdyb3VwKCk7XG5cbiAgICBjb25zdCBzZWxlY3RlZCA9IGF3YWl0IChhd2FpdCBtb2RlLmdldFRvZ2dsZXMoeyBjaGVja2VkOiB0cnVlIH0pKVswXT8uZ2V0VGV4dCgpO1xuXG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRNb2RlKG1vZGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1vZGVUb2dnbGUgPSBhd2FpdCB0aGlzLmdldE1vZGVUb2dnbGVHcm91cCgpO1xuICAgIGF3YWl0IChhd2FpdCBtb2RlVG9nZ2xlLmdldFRvZ2dsZXMoeyB0ZXh0OiBtb2RlIH0pKVswXT8uY2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjbGVhcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjbGVhckJ1dHRvbiA9IGF3YWl0IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKCdbYXJpYS1sYWJlbD1cIkNsZWFyXCJdJykoKTtcbiAgICBhd2FpdCBjbGVhckJ1dHRvbj8uY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZSgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKCcucHJldmlld19fdmFsdWUnKSgpO1xuXG4gICAgcmV0dXJuIHZhbHVlPy50ZXh0KCkgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRDdXN0b21WYWx1ZSh2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKChhd2FpdCB0aGlzLmdldE1vZGUoKSkgIT09ICdDdXN0b20nKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldE1vZGUoJ0N1c3RvbScpO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5sb2NhdG9yRm9yKE1hdElucHV0SGFybmVzcy53aXRoKHsgc2VsZWN0b3I6ICdbZm9ybUNvbnRyb2xOYW1lPVwiY3VzdG9tRXhwcmVzc2lvblwiXScgfSkpKCk7XG4gICAgYXdhaXQgaW5wdXQuc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzRGlzYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbW9kZSA9IGF3YWl0IHRoaXMuZ2V0TW9kZVRvZ2dsZUdyb3VwKCk7XG4gICAgcmV0dXJuIG1vZGUuaXNEaXNhYmxlZCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGhhc0Vycm9yKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGhvc3QgPSBhd2FpdCB0aGlzLmhvc3QoKTtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBhd2FpdCBob3N0LmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICBjb25zdCBlcnJvciA9IGF0dHJpYnV0ZT8uaW5jbHVkZXMoJ25nLWludmFsaWQnKTtcblxuICAgIHJldHVybiBlcnJvciA/PyBmYWxzZTtcbiAgfVxufVxuIl19
|