@ieeesa-npm/presentation 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2022/ieeesa-npm-presentation.mjs +5 -0
- package/esm2022/lib/assets/constants.json +91 -0
- package/esm2022/lib/components/autocomplete/autocomplete.component.mjs +143 -0
- package/esm2022/lib/components/checkbox/checkbox.component.mjs +102 -0
- package/esm2022/lib/components/date-picker/date-picker.component.mjs +306 -0
- package/esm2022/lib/components/date-picker-header/date-picker-header.component.mjs +153 -0
- package/esm2022/lib/components/dynamic-form/dynamic-form.component.mjs +310 -0
- package/esm2022/lib/components/form-error/form-error.component.mjs +24 -0
- package/esm2022/lib/components/input/input.component.mjs +78 -0
- package/esm2022/lib/components/notification/notification.component.mjs +43 -0
- package/esm2022/lib/components/radio/radio.component.mjs +93 -0
- package/esm2022/lib/components/search/search.component.mjs +137 -0
- package/esm2022/lib/components/select/select.component.mjs +253 -0
- package/esm2022/lib/components/text-area/text-area.component.mjs +31 -0
- package/esm2022/lib/date-formats.mjs +11 -0
- package/esm2022/lib/directives/dynamic-form-field/dynamic-form-field.directive.mjs +209 -0
- package/esm2022/lib/models/autocomplete-option.model.mjs +2 -0
- package/esm2022/lib/models/calendar.model.mjs +10 -0
- package/esm2022/lib/models/checkbox-option.model.mjs +2 -0
- package/esm2022/lib/models/date-picker.model.mjs +2 -0
- package/esm2022/lib/models/field-config.model.mjs +2 -0
- package/esm2022/lib/models/form-control-types.model.mjs +20 -0
- package/esm2022/lib/models/form-field.model.mjs +2 -0
- package/esm2022/lib/models/form-grid.model.mjs +2 -0
- package/esm2022/lib/models/form.model.mjs +2 -0
- package/esm2022/lib/models/radio-option.model.mjs +2 -0
- package/esm2022/lib/models/search.model.mjs +10 -0
- package/esm2022/lib/models/select-option.model.mjs +2 -0
- package/esm2022/lib/presentation.module.mjs +16 -0
- package/esm2022/lib/services/datepicker.service.mjs +55 -0
- package/esm2022/lib/services/form-utility.service.mjs +47 -0
- package/esm2022/lib/validation-patterns.mjs +7 -0
- package/esm2022/public-api.mjs +20 -0
- package/fesm2022/ieeesa-npm-presentation.mjs +1868 -0
- package/fesm2022/ieeesa-npm-presentation.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/autocomplete/autocomplete.component.d.ts +64 -0
- package/lib/components/checkbox/checkbox.component.d.ts +55 -0
- package/lib/components/date-picker/date-picker.component.d.ts +130 -0
- package/lib/components/date-picker-header/date-picker-header.component.d.ts +76 -0
- package/lib/components/dynamic-form/dynamic-form.component.d.ts +186 -0
- package/lib/components/form-error/form-error.component.d.ts +15 -0
- package/lib/components/input/input.component.d.ts +34 -0
- package/lib/components/notification/notification.component.d.ts +21 -0
- package/lib/components/radio/radio.component.d.ts +49 -0
- package/lib/components/search/search.component.d.ts +66 -0
- package/lib/components/select/select.component.d.ts +116 -0
- package/lib/components/text-area/text-area.component.d.ts +11 -0
- package/lib/date-formats.d.ts +10 -0
- package/lib/directives/dynamic-form-field/dynamic-form-field.directive.d.ts +78 -0
- package/lib/models/autocomplete-option.model.d.ts +4 -0
- package/lib/models/calendar.model.d.ts +5 -0
- package/lib/models/checkbox-option.model.d.ts +6 -0
- package/lib/models/date-picker.model.d.ts +13 -0
- package/lib/models/field-config.model.d.ts +42 -0
- package/lib/models/form-control-types.model.d.ts +10 -0
- package/lib/models/form-field.model.d.ts +6 -0
- package/lib/models/form-grid.model.d.ts +7 -0
- package/lib/models/form.model.d.ts +7 -0
- package/lib/models/radio-option.model.d.ts +5 -0
- package/lib/models/search.model.d.ts +5 -0
- package/lib/models/select-option.model.d.ts +5 -0
- package/lib/presentation.module.d.ts +6 -0
- package/lib/services/datepicker.service.d.ts +48 -0
- package/lib/services/form-utility.service.d.ts +29 -0
- package/lib/validation-patterns.d.ts +6 -0
- package/package.json +25 -0
- package/public-api.d.ts +16 -0
- package/src/lib/assets/constants.json +91 -0
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import { Component, EventEmitter, Injectable, Input, Output, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { FormControl, ReactiveFormsModule, Validators, } from '@angular/forms';
|
|
3
|
+
import { MomentDateAdapter, MAT_MOMENT_DATE_ADAPTER_OPTIONS, } from '@angular/material-moment-adapter';
|
|
4
|
+
import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, } from '@angular/material/core';
|
|
5
|
+
import { CommonModule } from '@angular/common';
|
|
6
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
7
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
8
|
+
import { MatExpansionModule } from '@angular/material/expansion';
|
|
9
|
+
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
10
|
+
import { MatMenuModule } from '@angular/material/menu';
|
|
11
|
+
import { MatInputModule } from '@angular/material/input';
|
|
12
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
13
|
+
import moment_ from 'moment';
|
|
14
|
+
import { DatePickerHeaderComponent } from '@presentation/components/date-picker-header/date-picker-header.component';
|
|
15
|
+
import { DateFormats } from '@presentation/date-formats';
|
|
16
|
+
import { CalendarType } from '@presentation/models/calendar.model';
|
|
17
|
+
import { FormErrorComponent } from '@presentation/components/form-error/form-error.component';
|
|
18
|
+
import * as buttonActionsInfo from '@presentation/assets/constants.json';
|
|
19
|
+
import { FormControlType } from '@presentation/models/form-control-types.model';
|
|
20
|
+
import * as i0 from "@angular/core";
|
|
21
|
+
import * as i1 from "@angular/forms";
|
|
22
|
+
import * as i2 from "@presentation/services/datepicker.service";
|
|
23
|
+
import * as i3 from "@presentation/services/form-utility.service";
|
|
24
|
+
import * as i4 from "@angular/common";
|
|
25
|
+
import * as i5 from "@angular/material/input";
|
|
26
|
+
import * as i6 from "@angular/material/form-field";
|
|
27
|
+
import * as i7 from "@angular/material/datepicker";
|
|
28
|
+
import * as i8 from "@angular/material/button";
|
|
29
|
+
const moment = moment_;
|
|
30
|
+
export class CustomDateAdapter extends MomentDateAdapter {
|
|
31
|
+
/**
|
|
32
|
+
* Overrides the getDayOfWeekNames method of MomentDateAdapter to show first letter of day in capital in date picker header.
|
|
33
|
+
* @return {string[]}
|
|
34
|
+
* @memberof CustomDateAdapter
|
|
35
|
+
*/
|
|
36
|
+
getDayOfWeekNames() {
|
|
37
|
+
return ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
|
|
38
|
+
}
|
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CustomDateAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
40
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CustomDateAdapter }); }
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CustomDateAdapter, decorators: [{
|
|
43
|
+
type: Injectable
|
|
44
|
+
}] });
|
|
45
|
+
/**
|
|
46
|
+
* Date selection of type SINGLE_DATE_SELECTION, DATE_RANGE_SELECTION and CALENDAR and handling of calendar events.
|
|
47
|
+
* @export
|
|
48
|
+
* @class DatePickerComponent
|
|
49
|
+
* @implements {FormField}
|
|
50
|
+
* @implements {OnInit}
|
|
51
|
+
* @implements {AfterViewInit}
|
|
52
|
+
*/
|
|
53
|
+
export class DatePickerComponent {
|
|
54
|
+
/**
|
|
55
|
+
* Gets preselected dates as an input.
|
|
56
|
+
* @memberof DatePickerComponent
|
|
57
|
+
*/
|
|
58
|
+
set selectedDates(value) {
|
|
59
|
+
this._selectedDates = value;
|
|
60
|
+
if (this.formControlName &&
|
|
61
|
+
this.selectedDates?.length === 1 &&
|
|
62
|
+
this.selectedDates[0] !== undefined &&
|
|
63
|
+
this.calendarType === CalendarType.SINGLE_DATE_SELECTION) {
|
|
64
|
+
this.datepickerService.selectedDate = value[0];
|
|
65
|
+
this.createFormGroup(value[0]);
|
|
66
|
+
this.datepickerService.isRangeSelection = false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Returns selected dates
|
|
71
|
+
* @readonly
|
|
72
|
+
* @type {string[]}
|
|
73
|
+
* @memberof DatePickerComponent
|
|
74
|
+
*/
|
|
75
|
+
get selectedDates() {
|
|
76
|
+
return this._selectedDates;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Gets preselected date range as an input.
|
|
80
|
+
* @memberof DatePickerComponent
|
|
81
|
+
*/
|
|
82
|
+
set selectedRange(value) {
|
|
83
|
+
this._selectedRange = value;
|
|
84
|
+
if (this.selectedRange?.length === 2 &&
|
|
85
|
+
this.calendarType === CalendarType.DATE_RANGE_SELECTION) {
|
|
86
|
+
this.createFormGroupWithRangeControls(value[0], value[1]);
|
|
87
|
+
this.setDateRange(value[0], value[1]);
|
|
88
|
+
this.datepickerService.isRangeSelection = true;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Returns selected date range
|
|
93
|
+
* @readonly
|
|
94
|
+
* @type {string[]}
|
|
95
|
+
* @memberof DatePickerComponent
|
|
96
|
+
*/
|
|
97
|
+
get selectedRange() {
|
|
98
|
+
return this._selectedRange;
|
|
99
|
+
}
|
|
100
|
+
constructor(
|
|
101
|
+
// eslint-disable-next-line no-unused-vars
|
|
102
|
+
fb,
|
|
103
|
+
// eslint-disable-next-line no-unused-vars
|
|
104
|
+
changeDetectorRef,
|
|
105
|
+
// eslint-disable-next-line no-unused-vars
|
|
106
|
+
datepickerService,
|
|
107
|
+
// eslint-disable-next-line no-unused-vars
|
|
108
|
+
formUtilityService // eslint-disable-next-line no-empty-function,
|
|
109
|
+
) {
|
|
110
|
+
this.fb = fb;
|
|
111
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
112
|
+
this.datepickerService = datepickerService;
|
|
113
|
+
this.formUtilityService = formUtilityService;
|
|
114
|
+
this.datePickerHeader = DatePickerHeaderComponent;
|
|
115
|
+
this.calendarTypes = CalendarType;
|
|
116
|
+
this._selectedDates = [];
|
|
117
|
+
this._selectedRange = [];
|
|
118
|
+
this.calendarType = CalendarType.SINGLE_DATE_SELECTION;
|
|
119
|
+
this.placeholderLabel = '';
|
|
120
|
+
this.isDisabled = false;
|
|
121
|
+
this.isLabelAlignedLeft = false;
|
|
122
|
+
this.datepickerLabel = '';
|
|
123
|
+
this.selectedDate = new EventEmitter();
|
|
124
|
+
this.selectedDateRange = new EventEmitter();
|
|
125
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
126
|
+
this.buttonActionsInfo = buttonActionsInfo;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Implementation of ngOnInit lifecycle hook method to creates config if its undefined and sets components instance variables if config is defined. Sets the form group value if form group is defined.
|
|
130
|
+
* @memberof DatePickerComponent
|
|
131
|
+
*/
|
|
132
|
+
ngOnInit() {
|
|
133
|
+
if (!this.config) {
|
|
134
|
+
const controlName = this.formControlName ?? 'datepicker';
|
|
135
|
+
this.config = this.formUtilityService.getFormFieldConfig(controlName, FormControlType.DATE);
|
|
136
|
+
if (this.config &&
|
|
137
|
+
this.calendarType === CalendarType.DATE_RANGE_SELECTION) {
|
|
138
|
+
this.config.dateRangeControls = {
|
|
139
|
+
startDate: 'startDate',
|
|
140
|
+
endDate: 'endDate',
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
this.initializePropertiesFromConfig();
|
|
146
|
+
}
|
|
147
|
+
if (!this.group) {
|
|
148
|
+
if (this.calendarType === CalendarType.SINGLE_DATE_SELECTION) {
|
|
149
|
+
this.createFormGroup();
|
|
150
|
+
}
|
|
151
|
+
else if (this.calendarType === CalendarType.DATE_RANGE_SELECTION) {
|
|
152
|
+
this.createFormGroupWithRangeControls();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Initializes properties from the config input
|
|
158
|
+
* @memberof DatePickerComponent
|
|
159
|
+
*/
|
|
160
|
+
initializePropertiesFromConfig() {
|
|
161
|
+
this.calendarType =
|
|
162
|
+
this.config?.datePicker?.calendarType ??
|
|
163
|
+
CalendarType.SINGLE_DATE_SELECTION;
|
|
164
|
+
this.placeholderLabel = this.config?.datePicker?.placeholderLabel ?? '';
|
|
165
|
+
this.datepickerLabel = this.config?.datePicker?.label ?? '';
|
|
166
|
+
this.isLabelAlignedLeft =
|
|
167
|
+
this.config?.datePicker?.isLabelAlignedLeft ?? false;
|
|
168
|
+
this.dateRange = this.config?.datePicker?.dateRange ?? {
|
|
169
|
+
minDate: '',
|
|
170
|
+
maxDate: '',
|
|
171
|
+
};
|
|
172
|
+
this.isDisabled = !!this.config.disabled;
|
|
173
|
+
if (this.config.datePicker?.calendarType === CalendarType.DATE_RANGE_SELECTION) {
|
|
174
|
+
this.group.addControl('startDate', new FormControl());
|
|
175
|
+
this.group.addControl('endDate', new FormControl());
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Handle date change event and emits the selected date.
|
|
180
|
+
* @memberof DatePickerComponent
|
|
181
|
+
*/
|
|
182
|
+
onDateChange() {
|
|
183
|
+
this.selectedDate.emit(this.group?.get(this.config.controlName)?.value);
|
|
184
|
+
this.datepickerService.selectedDate = this.group?.get(this.config.controlName)?.value;
|
|
185
|
+
this.datepickerService.isRangeSelection = false;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Sets and emits selected date range
|
|
189
|
+
* @memberof DatePickerComponent
|
|
190
|
+
*/
|
|
191
|
+
onDateRangeChange() {
|
|
192
|
+
this.datepickerService.isRangeSelection = true;
|
|
193
|
+
this.setDateRange(this.group.value.startDate ?? '', this.group.value.endDate ?? '');
|
|
194
|
+
this.selectedDateRange.emit({
|
|
195
|
+
startDate: this.group.value.startDate ?? '',
|
|
196
|
+
endDate: this.group.value.endDate ?? '',
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Sets the min and max date range.
|
|
201
|
+
* @param {(string | Date)} startDate
|
|
202
|
+
* @param {(string | Date)} endDate
|
|
203
|
+
* @memberof DatePickerComponent
|
|
204
|
+
*/
|
|
205
|
+
setDateRange(startDate, endDate) {
|
|
206
|
+
this.datepickerService.range.next({
|
|
207
|
+
start: startDate,
|
|
208
|
+
end: endDate,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Creates form group and initializes form value
|
|
213
|
+
* @param {string} [date]
|
|
214
|
+
* @memberof DatePickerComponent
|
|
215
|
+
*/
|
|
216
|
+
createFormGroup(date) {
|
|
217
|
+
this.group = this.fb.group({
|
|
218
|
+
[this.formControlName ? this.formControlName : 'datepicker']: date
|
|
219
|
+
? [moment(date).utc(true).format()]
|
|
220
|
+
: [],
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Creates form group with range type of controls and sets the min and max range values.
|
|
225
|
+
* @param {string} [startDate]
|
|
226
|
+
* @param {string} [endDate]
|
|
227
|
+
* @memberof DatePickerComponent
|
|
228
|
+
*/
|
|
229
|
+
createFormGroupWithRangeControls(startDate, endDate) {
|
|
230
|
+
this.group = this.fb.group({
|
|
231
|
+
startDate: startDate ? [moment(startDate).utc(true).format()] : [],
|
|
232
|
+
endDate: endDate ? [moment(endDate).utc(true).format()] : [],
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Checks if the form control has required validator.
|
|
237
|
+
* @return {boolean}
|
|
238
|
+
* @memberof DatePickerComponent
|
|
239
|
+
*/
|
|
240
|
+
isRequired() {
|
|
241
|
+
return this.group?.controls[this.config?.controlName]?.hasValidator(Validators.required);
|
|
242
|
+
}
|
|
243
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: DatePickerComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ChangeDetectorRef }, { token: i2.DatepickerService }, { token: i3.FormUtilityService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
244
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.3", type: DatePickerComponent, isStandalone: true, selector: "ieeesa-date-picker", inputs: { selectedDates: "selectedDates", selectedRange: "selectedRange", calendarType: "calendarType", formControlName: "formControlName", placeholderLabel: "placeholderLabel", isDisabled: "isDisabled", isLabelAlignedLeft: "isLabelAlignedLeft", datepickerLabel: "datepickerLabel", dateRange: "dateRange" }, outputs: { selectedDate: "selectedDate", selectedDateRange: "selectedDateRange" }, providers: [
|
|
245
|
+
{ provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } },
|
|
246
|
+
{
|
|
247
|
+
provide: DateAdapter,
|
|
248
|
+
useClass: CustomDateAdapter,
|
|
249
|
+
deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
provide: MAT_DATE_FORMATS,
|
|
253
|
+
useValue: DateFormats,
|
|
254
|
+
},
|
|
255
|
+
], ngImport: i0, template: "<div class=\"ieeesa-datepicker\">\r\n <div\r\n [formGroup]=\"group\"\r\n *ngIf=\"calendarType === calendarTypes.SINGLE_DATE_SELECTION\"\r\n class=\"ieeesa-datepicker--single-selection\"\r\n [ngClass]=\"!isRequired() ? 'ieeesa-datepicker__valid-date' : ''\"\r\n [ngClass]=\"{\r\n 'ieeesa-datepicker__valid-date': !isRequired(),\r\n 'ieeesa-datepicker__label-left': isLabelAlignedLeft,\r\n 'ieeesa-datepicker__label-top': !isLabelAlignedLeft\r\n }\"\r\n >\r\n <mat-label *ngIf=\"datepickerLabel\">{{ datepickerLabel }} </mat-label>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n (dateInput)=\"onDateChange()\"\r\n (click)=\"picker.open()\"\r\n [matDatepicker]=\"picker\"\r\n [formControlName]=\"config.controlName\"\r\n [placeholder]=\"buttonActionsInfo?.datePicker?.dateFormatLabel\"\r\n #calendar\r\n readonly\r\n />\r\n <mat-datepicker-toggle\r\n class=\"mat-datepicker-toggle\"\r\n matIconSuffix\r\n [for]=\"picker\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker [calendarHeaderComponent]=\"datePickerHeader\">\r\n <mat-datepicker-actions>\r\n <button\r\n mat-button\r\n class=\"mat-text-button ieeesa-datepicker__date-picker-button\"\r\n type=\"button\"\r\n matDatepickerCancel\r\n >\r\n {{ buttonActionsInfo?.button?.cancel }}\r\n </button>\r\n <button\r\n mat-button\r\n class=\"mat-text-button ieeesa-datepicker__date-picker-button\"\r\n color=\"primary\"\r\n type=\"button\"\r\n matDatepickerApply\r\n >\r\n {{ buttonActionsInfo?.button?.ok }}\r\n </button>\r\n </mat-datepicker-actions>\r\n </mat-datepicker>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\">\r\n </ieeesa-form-error>\r\n </div>\r\n\r\n <div\r\n [formGroup]=\"group\"\r\n *ngIf=\"calendarType === calendarTypes.DATE_RANGE_SELECTION\"\r\n class=\"ieeesa-datepicker--multi-selection\"\r\n [ngClass]=\"\r\n isLabelAlignedLeft\r\n ? 'ieeesa-datepicker__label-left'\r\n : 'ieeesa-datepicker__label-top'\r\n \"\r\n >\r\n <mat-label *ngIf=\"datepickerLabel\">{{ datepickerLabel }} </mat-label>\r\n <mat-form-field>\r\n <mat-date-range-input [rangePicker]=\"rangePicker\" [formGroup]=\"group\">\r\n <input\r\n matStartDate\r\n matInput\r\n [formControlName]=\"config.dateRangeControls?.startDate ?? ''\"\r\n [placeholder]=\"buttonActionsInfo?.datePicker?.dateFormatLabel + ' - '\"\r\n (dateChange)=\"onDateRangeChange()\"\r\n />\r\n <input\r\n matEndDate\r\n matInput\r\n [formControlName]=\"config.dateRangeControls?.endDate ?? ''\"\r\n [placeholder]=\"buttonActionsInfo?.datePicker?.dateFormatLabel\"\r\n (dateChange)=\"onDateRangeChange()\"\r\n />\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle\r\n class=\"mat-datepicker-toggle\"\r\n matIconSuffix\r\n [for]=\"rangePicker\"\r\n ></mat-datepicker-toggle>\r\n <mat-date-range-picker\r\n #rangePicker\r\n [calendarHeaderComponent]=\"datePickerHeader\"\r\n (dateInput)=\"onDateRangeChange()\"\r\n >\r\n <mat-date-range-picker-actions>\r\n <button\r\n mat-button\r\n class=\"mat-text-button ieeesa-datepicker__date-picker-button\"\r\n matDateRangePickerCancel\r\n type=\"button\"\r\n >\r\n {{ buttonActionsInfo?.button?.cancel }}\r\n </button>\r\n <button\r\n mat-button\r\n class=\"mat-text-button ieeesa-datepicker__date-picker-button\"\r\n color=\"primary\"\r\n matDateRangePickerApply\r\n (click)=\"onDateRangeChange()\"\r\n type=\"button\"\r\n >\r\n {{ buttonActionsInfo?.button?.ok }}\r\n </button>\r\n </mat-date-range-picker-actions>\r\n </mat-date-range-picker>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"calendarType === calendarTypes.CALENDAR\"\r\n class=\"ieeesa-datepicker--calendar\"\r\n >\r\n <mat-calendar\r\n [headerComponent]=\"datePickerHeader\"\r\n [(selected)]=\"calendarSelectedDate\"\r\n >\r\n </mat-calendar>\r\n </div>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane{width:100%;min-width:312px}.ieeesa-datepicker{min-width:360px;width:auto}.ieeesa-datepicker__label-left{display:flex}.ieeesa-datepicker__label-top{display:block}.ieeesa-datepicker__date-picker-button{background:linear-gradient(0deg,rgba(0,98,155,.11),rgba(0,98,155,.11)),#fffbfe}.ieeesa-datepicker--calendar{background:linear-gradient(0deg,rgba(0,98,155,.11),rgba(0,98,155,.11)),#fffbfe;border-radius:16px}.ieeesa-datepicker--calendar .mat-calendar-body-cell-container{margin:0;padding-top:24px 0}.ieeesa-datepicker--calendar .mat-calendar-table-header th,.ieeesa-datepicker--calendar .mat-calendar-body td{height:24px!important;padding-top:24px!important;width:24px!important;padding-bottom:24px!important}.ieeesa-datepicker--calendar .mat-calendar-body-selected{background-color:#00b5e2;color:#fff;border:none;box-shadow:none}.ieeesa-datepicker--calendar .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#00b5e2;color:#fff;border:none;box-shadow:none}.ieeesa-datepicker--calendar .mat-calendar-content{padding:0 8px 35px}.ieeesa-datepicker .mat-mdc-form-field{width:-webkit-fill-available}.ieeesa-datepicker .mat-mdc-text-field-wrapper.mdc-text-field.mdc-text-field--outlined.mdc-text-field--no-label,.ieeesa-datepicker .mdc-text-field--filled:not(.mdc-text-field--disabled){border:2px solid #00b5e2;border-radius:4px;height:56px;align-items:center;background-color:#f0f5f9}.ieeesa-datepicker .mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple:before{border:none}.ieeesa-datepicker .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input,.ieeesa-datepicker .mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:24px;color:#1c1b1f;letter-spacing:.03125em}.ieeesa-datepicker .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input::placeholder,.ieeesa-datepicker .mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input::placeholder{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-datepicker .mat-mdc-form-field-hint{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:16px;color:#49454f;letter-spacing:.025em}.ieeesa-datepicker .mat-datepicker-toggle-default-icon{width:18px;height:20px}.mat-datepicker-popup .mat-datepicker-content-container{background:linear-gradient(0deg,rgba(0,98,155,.11),rgba(0,98,155,.11)),#fffbfe;border-radius:28px}.mat-datepicker-popup .mat-datepicker-content-container .mat-calendar-body-cell-content{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#1c1b1f;letter-spacing:.03125em}.mat-datepicker-popup .mat-datepicker-content-container .mat-calendar-body-selected{background-color:#00b5e2;color:#fff;border:none;box-shadow:none}.mat-datepicker-popup .mat-datepicker-content-container .mat-calendar-body-in-range:before{background-color:#a7a8aa;color:#49454f}.mat-datepicker-popup .mat-datepicker-content{border-radius:28px}.mat-datepicker-popup .mat-calendar-table-header{position:relative;top:25px}.mat-datepicker-popup .mat-calendar-table-header th,.mat-datepicker-popup .mat-calendar-body td{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.mat-datepicker-popup .mat-calendar-table-header-divider,.mat-datepicker-popup .mat-calendar-body tr:first-child td:only-child{display:none}.mat-datepicker-popup .mat-calendar-body tr:first-child td:first-child:not(:only-child){visibility:hidden}.mat-datepicker-popup .mat-calendar-body{position:relative;top:20px}.mat-datepicker-popup .mat-mdc-menu-panel{min-width:360px;width:auto}.mat-datepicker-popup .mat-calendar-body-today{border-color:#00b5e2;color:#00b5e2}.mat-datepicker-popup .mat-datepicker-actions{padding:15px 10px 10px}.mat-datepicker-popup .mat-datepicker-toggle{color:#49454f}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormErrorComponent, selector: "ieeesa-form-error", inputs: ["formGroup", "config", "submitResponse"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i7.MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i7.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i7.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i7.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i7.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: i7.MatDatepickerActions, selector: "mat-datepicker-actions, mat-date-range-picker-actions" }, { kind: "directive", type: i7.MatDatepickerCancel, selector: "[matDatepickerCancel], [matDateRangePickerCancel]" }, { kind: "directive", type: i7.MatDatepickerApply, selector: "[matDatepickerApply], [matDateRangePickerApply]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
256
|
+
}
|
|
257
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: DatePickerComponent, decorators: [{
|
|
258
|
+
type: Component,
|
|
259
|
+
args: [{ selector: 'ieeesa-date-picker', standalone: true, imports: [
|
|
260
|
+
CommonModule,
|
|
261
|
+
ReactiveFormsModule,
|
|
262
|
+
FormErrorComponent,
|
|
263
|
+
MatExpansionModule,
|
|
264
|
+
MatMenuModule,
|
|
265
|
+
MatIconModule,
|
|
266
|
+
MatInputModule,
|
|
267
|
+
MatFormFieldModule,
|
|
268
|
+
MatDatepickerModule,
|
|
269
|
+
DatePickerHeaderComponent,
|
|
270
|
+
MatButtonModule,
|
|
271
|
+
], providers: [
|
|
272
|
+
{ provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } },
|
|
273
|
+
{
|
|
274
|
+
provide: DateAdapter,
|
|
275
|
+
useClass: CustomDateAdapter,
|
|
276
|
+
deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
provide: MAT_DATE_FORMATS,
|
|
280
|
+
useValue: DateFormats,
|
|
281
|
+
},
|
|
282
|
+
], encapsulation: ViewEncapsulation.None, template: "<div class=\"ieeesa-datepicker\">\r\n <div\r\n [formGroup]=\"group\"\r\n *ngIf=\"calendarType === calendarTypes.SINGLE_DATE_SELECTION\"\r\n class=\"ieeesa-datepicker--single-selection\"\r\n [ngClass]=\"!isRequired() ? 'ieeesa-datepicker__valid-date' : ''\"\r\n [ngClass]=\"{\r\n 'ieeesa-datepicker__valid-date': !isRequired(),\r\n 'ieeesa-datepicker__label-left': isLabelAlignedLeft,\r\n 'ieeesa-datepicker__label-top': !isLabelAlignedLeft\r\n }\"\r\n >\r\n <mat-label *ngIf=\"datepickerLabel\">{{ datepickerLabel }} </mat-label>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n (dateInput)=\"onDateChange()\"\r\n (click)=\"picker.open()\"\r\n [matDatepicker]=\"picker\"\r\n [formControlName]=\"config.controlName\"\r\n [placeholder]=\"buttonActionsInfo?.datePicker?.dateFormatLabel\"\r\n #calendar\r\n readonly\r\n />\r\n <mat-datepicker-toggle\r\n class=\"mat-datepicker-toggle\"\r\n matIconSuffix\r\n [for]=\"picker\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker [calendarHeaderComponent]=\"datePickerHeader\">\r\n <mat-datepicker-actions>\r\n <button\r\n mat-button\r\n class=\"mat-text-button ieeesa-datepicker__date-picker-button\"\r\n type=\"button\"\r\n matDatepickerCancel\r\n >\r\n {{ buttonActionsInfo?.button?.cancel }}\r\n </button>\r\n <button\r\n mat-button\r\n class=\"mat-text-button ieeesa-datepicker__date-picker-button\"\r\n color=\"primary\"\r\n type=\"button\"\r\n matDatepickerApply\r\n >\r\n {{ buttonActionsInfo?.button?.ok }}\r\n </button>\r\n </mat-datepicker-actions>\r\n </mat-datepicker>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\">\r\n </ieeesa-form-error>\r\n </div>\r\n\r\n <div\r\n [formGroup]=\"group\"\r\n *ngIf=\"calendarType === calendarTypes.DATE_RANGE_SELECTION\"\r\n class=\"ieeesa-datepicker--multi-selection\"\r\n [ngClass]=\"\r\n isLabelAlignedLeft\r\n ? 'ieeesa-datepicker__label-left'\r\n : 'ieeesa-datepicker__label-top'\r\n \"\r\n >\r\n <mat-label *ngIf=\"datepickerLabel\">{{ datepickerLabel }} </mat-label>\r\n <mat-form-field>\r\n <mat-date-range-input [rangePicker]=\"rangePicker\" [formGroup]=\"group\">\r\n <input\r\n matStartDate\r\n matInput\r\n [formControlName]=\"config.dateRangeControls?.startDate ?? ''\"\r\n [placeholder]=\"buttonActionsInfo?.datePicker?.dateFormatLabel + ' - '\"\r\n (dateChange)=\"onDateRangeChange()\"\r\n />\r\n <input\r\n matEndDate\r\n matInput\r\n [formControlName]=\"config.dateRangeControls?.endDate ?? ''\"\r\n [placeholder]=\"buttonActionsInfo?.datePicker?.dateFormatLabel\"\r\n (dateChange)=\"onDateRangeChange()\"\r\n />\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle\r\n class=\"mat-datepicker-toggle\"\r\n matIconSuffix\r\n [for]=\"rangePicker\"\r\n ></mat-datepicker-toggle>\r\n <mat-date-range-picker\r\n #rangePicker\r\n [calendarHeaderComponent]=\"datePickerHeader\"\r\n (dateInput)=\"onDateRangeChange()\"\r\n >\r\n <mat-date-range-picker-actions>\r\n <button\r\n mat-button\r\n class=\"mat-text-button ieeesa-datepicker__date-picker-button\"\r\n matDateRangePickerCancel\r\n type=\"button\"\r\n >\r\n {{ buttonActionsInfo?.button?.cancel }}\r\n </button>\r\n <button\r\n mat-button\r\n class=\"mat-text-button ieeesa-datepicker__date-picker-button\"\r\n color=\"primary\"\r\n matDateRangePickerApply\r\n (click)=\"onDateRangeChange()\"\r\n type=\"button\"\r\n >\r\n {{ buttonActionsInfo?.button?.ok }}\r\n </button>\r\n </mat-date-range-picker-actions>\r\n </mat-date-range-picker>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"calendarType === calendarTypes.CALENDAR\"\r\n class=\"ieeesa-datepicker--calendar\"\r\n >\r\n <mat-calendar\r\n [headerComponent]=\"datePickerHeader\"\r\n [(selected)]=\"calendarSelectedDate\"\r\n >\r\n </mat-calendar>\r\n </div>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane{width:100%;min-width:312px}.ieeesa-datepicker{min-width:360px;width:auto}.ieeesa-datepicker__label-left{display:flex}.ieeesa-datepicker__label-top{display:block}.ieeesa-datepicker__date-picker-button{background:linear-gradient(0deg,rgba(0,98,155,.11),rgba(0,98,155,.11)),#fffbfe}.ieeesa-datepicker--calendar{background:linear-gradient(0deg,rgba(0,98,155,.11),rgba(0,98,155,.11)),#fffbfe;border-radius:16px}.ieeesa-datepicker--calendar .mat-calendar-body-cell-container{margin:0;padding-top:24px 0}.ieeesa-datepicker--calendar .mat-calendar-table-header th,.ieeesa-datepicker--calendar .mat-calendar-body td{height:24px!important;padding-top:24px!important;width:24px!important;padding-bottom:24px!important}.ieeesa-datepicker--calendar .mat-calendar-body-selected{background-color:#00b5e2;color:#fff;border:none;box-shadow:none}.ieeesa-datepicker--calendar .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#00b5e2;color:#fff;border:none;box-shadow:none}.ieeesa-datepicker--calendar .mat-calendar-content{padding:0 8px 35px}.ieeesa-datepicker .mat-mdc-form-field{width:-webkit-fill-available}.ieeesa-datepicker .mat-mdc-text-field-wrapper.mdc-text-field.mdc-text-field--outlined.mdc-text-field--no-label,.ieeesa-datepicker .mdc-text-field--filled:not(.mdc-text-field--disabled){border:2px solid #00b5e2;border-radius:4px;height:56px;align-items:center;background-color:#f0f5f9}.ieeesa-datepicker .mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple:before{border:none}.ieeesa-datepicker .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input,.ieeesa-datepicker .mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:24px;color:#1c1b1f;letter-spacing:.03125em}.ieeesa-datepicker .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input::placeholder,.ieeesa-datepicker .mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input::placeholder{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-datepicker .mat-mdc-form-field-hint{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:16px;color:#49454f;letter-spacing:.025em}.ieeesa-datepicker .mat-datepicker-toggle-default-icon{width:18px;height:20px}.mat-datepicker-popup .mat-datepicker-content-container{background:linear-gradient(0deg,rgba(0,98,155,.11),rgba(0,98,155,.11)),#fffbfe;border-radius:28px}.mat-datepicker-popup .mat-datepicker-content-container .mat-calendar-body-cell-content{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#1c1b1f;letter-spacing:.03125em}.mat-datepicker-popup .mat-datepicker-content-container .mat-calendar-body-selected{background-color:#00b5e2;color:#fff;border:none;box-shadow:none}.mat-datepicker-popup .mat-datepicker-content-container .mat-calendar-body-in-range:before{background-color:#a7a8aa;color:#49454f}.mat-datepicker-popup .mat-datepicker-content{border-radius:28px}.mat-datepicker-popup .mat-calendar-table-header{position:relative;top:25px}.mat-datepicker-popup .mat-calendar-table-header th,.mat-datepicker-popup .mat-calendar-body td{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.mat-datepicker-popup .mat-calendar-table-header-divider,.mat-datepicker-popup .mat-calendar-body tr:first-child td:only-child{display:none}.mat-datepicker-popup .mat-calendar-body tr:first-child td:first-child:not(:only-child){visibility:hidden}.mat-datepicker-popup .mat-calendar-body{position:relative;top:20px}.mat-datepicker-popup .mat-mdc-menu-panel{min-width:360px;width:auto}.mat-datepicker-popup .mat-calendar-body-today{border-color:#00b5e2;color:#00b5e2}.mat-datepicker-popup .mat-datepicker-actions{padding:15px 10px 10px}.mat-datepicker-popup .mat-datepicker-toggle{color:#49454f}\n"] }]
|
|
283
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }, { type: i2.DatepickerService }, { type: i3.FormUtilityService }]; }, propDecorators: { selectedDates: [{
|
|
284
|
+
type: Input
|
|
285
|
+
}], selectedRange: [{
|
|
286
|
+
type: Input
|
|
287
|
+
}], calendarType: [{
|
|
288
|
+
type: Input
|
|
289
|
+
}], formControlName: [{
|
|
290
|
+
type: Input
|
|
291
|
+
}], placeholderLabel: [{
|
|
292
|
+
type: Input
|
|
293
|
+
}], isDisabled: [{
|
|
294
|
+
type: Input
|
|
295
|
+
}], isLabelAlignedLeft: [{
|
|
296
|
+
type: Input
|
|
297
|
+
}], datepickerLabel: [{
|
|
298
|
+
type: Input
|
|
299
|
+
}], dateRange: [{
|
|
300
|
+
type: Input
|
|
301
|
+
}], selectedDate: [{
|
|
302
|
+
type: Output
|
|
303
|
+
}], selectedDateRange: [{
|
|
304
|
+
type: Output
|
|
305
|
+
}] } });
|
|
306
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc2VudGF0aW9uL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzZW50YXRpb24vc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBRUwsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsV0FBVyxFQUVYLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLCtCQUErQixHQUNoQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLGVBQWUsR0FDaEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxF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ZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdGFibGUsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICBNb21lbnREYXRlQWRhcHRlcixcclxuICBNQVRfTU9NRU5UX0RBVEVfQURBUFRFUl9PUFRJT05TLFxyXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyJztcclxuaW1wb3J0IHtcclxuICBEYXRlQWRhcHRlcixcclxuICBNQVRfREFURV9GT1JNQVRTLFxyXG4gIE1BVF9EQVRFX0xPQ0FMRSxcclxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0RXhwYW5zaW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcclxuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgbW9tZW50XyBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBEYXRlUGlja2VySGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnQHByZXNlbnRhdGlvbi9jb21wb25lbnRzL2RhdGUtcGlja2VyLWhlYWRlci9kYXRlLXBpY2tlci1oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGF0ZUZvcm1hdHMgfSBmcm9tICdAcHJlc2VudGF0aW9uL2RhdGUtZm9ybWF0cyc7XHJcbmltcG9ydCB7IEZpZWxkQ29uZmlnIH0gZnJvbSAnQHByZXNlbnRhdGlvbi9tb2RlbHMvZmllbGQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJUeXBlIH0gZnJvbSAnQHByZXNlbnRhdGlvbi9tb2RlbHMvY2FsZW5kYXIubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtRXJyb3JDb21wb25lbnQgfSBmcm9tICdAcHJlc2VudGF0aW9uL2NvbXBvbmVudHMvZm9ybS1lcnJvci9mb3JtLWVycm9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVwaWNrZXJTZXJ2aWNlIH0gZnJvbSAnQHByZXNlbnRhdGlvbi9zZXJ2aWNlcy9kYXRlcGlja2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tICdAcHJlc2VudGF0aW9uL21vZGVscy9mb3JtLWZpZWxkLm1vZGVsJztcclxuaW1wb3J0ICogYXMgYnV0dG9uQWN0aW9uc0luZm8gZnJvbSAnQHByZXNlbnRhdGlvbi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbFR5cGUgfSBmcm9tICdAcHJlc2VudGF0aW9uL21vZGVscy9mb3JtLWNvbnRyb2wtdHlwZXMubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAcHJlc2VudGF0aW9uL3NlcnZpY2VzL2Zvcm0tdXRpbGl0eS5zZXJ2aWNlJztcclxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGVBZGFwdGVyIGV4dGVuZHMgTW9tZW50RGF0ZUFkYXB0ZXIge1xyXG4gIC8qKlxyXG4gICAqIE92ZXJyaWRlcyB0aGUgZ2V0RGF5T2ZXZWVrTmFtZXMgbWV0aG9kIG9mIE1vbWVudERhdGVBZGFwdGVyIHRvIHNob3cgZmlyc3QgbGV0dGVyIG9mIGRheSBpbiBjYXBpdGFsIGluIGRhdGUgcGlja2VyIGhlYWRlci5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cclxuICAgKiBAbWVtYmVyb2YgQ3VzdG9tRGF0ZUFkYXB0ZXJcclxuICAgKi9cclxuICBvdmVycmlkZSBnZXREYXlPZldlZWtOYW1lcygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ107XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogRGF0ZSBzZWxlY3Rpb24gb2YgdHlwZSBTSU5HTEVfREFURV9TRUxFQ1RJT04sIERBVEVfUkFOR0VfU0VMRUNUSU9OIGFuZCBDQUxFTkRBUiBhbmQgaGFuZGxpbmcgb2YgY2FsZW5kYXIgZXZlbnRzLlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50XHJcbiAqIEBpbXBsZW1lbnRzIHtGb3JtRmllbGR9XHJcbiAqIEBpbXBsZW1lbnRzIHtPbkluaXR9XHJcbiAqIEBpbXBsZW1lbnRzIHtBZnRlclZpZXdJbml0fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtZGF0ZS1waWNrZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEZvcm1FcnJvckNvbXBvbmVudCxcclxuICAgIE1hdEV4cGFuc2lvbk1vZHVsZSxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxyXG4gICAgRGF0ZVBpY2tlckhlYWRlckNvbXBvbmVudCxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgeyBwcm92aWRlOiBNQVRfTU9NRU5UX0RBVEVfQURBUFRFUl9PUFRJT05TLCB1c2VWYWx1ZTogeyB1c2VVdGM6IHRydWUgfSB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBEYXRlQWRhcHRlcixcclxuICAgICAgdXNlQ2xhc3M6IEN1c3RvbURhdGVBZGFwdGVyLFxyXG4gICAgICBkZXBzOiBbTUFUX0RBVEVfTE9DQUxFLCBNQVRfTU9NRU5UX0RBVEVfQURBUFRFUl9PUFRJT05TXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsXHJcbiAgICAgIHVzZVZhbHVlOiBEYXRlRm9ybWF0cyxcclxuICAgIH0sXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBGb3JtRmllbGQsIE9uSW5pdCB7XHJcbiAgY29uZmlnITogRmllbGRDb25maWc7XHJcbiAgZ3JvdXAhOiBGb3JtR3JvdXA7XHJcbiAgZGF0ZVBpY2tlckhlYWRlciA9IERhdGVQaWNrZXJIZWFkZXJDb21wb25lbnQ7XHJcbiAgY2FsZW5kYXJUeXBlcyA9IENhbGVuZGFyVHlwZTtcclxuICBwcml2YXRlIF9zZWxlY3RlZERhdGVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgcHJlc2VsZWN0ZWQgZGF0ZXMgYXMgYW4gaW5wdXQuXHJcbiAgICogQG1lbWJlcm9mIERhdGVQaWNrZXJDb21wb25lbnRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZWxlY3RlZERhdGVzKHZhbHVlOiBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWREYXRlcyA9IHZhbHVlO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZvcm1Db250cm9sTmFtZSAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZXM/Lmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZXNbMF0gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNhbGVuZGFyVHlwZSA9PT0gQ2FsZW5kYXJUeXBlLlNJTkdMRV9EQVRFX1NFTEVDVElPTlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZGF0ZXBpY2tlclNlcnZpY2Uuc2VsZWN0ZWREYXRlID0gdmFsdWVbMF07XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKHZhbHVlWzBdKTtcclxuICAgICAgdGhpcy5kYXRlcGlja2VyU2VydmljZS5pc1JhbmdlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgc2VsZWN0ZWQgZGF0ZXNcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7c3RyaW5nW119XHJcbiAgICogQG1lbWJlcm9mIERhdGVQaWNrZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXQgc2VsZWN0ZWREYXRlcygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXRlcztcclxuICB9XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRSYW5nZTogc3RyaW5nW10gPSBbXTtcclxuICAvKipcclxuICAgKiBHZXRzIHByZXNlbGVjdGVkIGRhdGUgcmFuZ2UgYXMgYW4gaW5wdXQuXHJcbiAgICogQG1lbWJlcm9mIERhdGVQaWNrZXJDb21wb25lbnRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZWxlY3RlZFJhbmdlKHZhbHVlOiBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRSYW5nZSA9IHZhbHVlO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFuZ2U/Lmxlbmd0aCA9PT0gMiAmJlxyXG4gICAgICB0aGlzLmNhbGVuZGFyVHlwZSA9PT0gQ2FsZW5kYXJUeXBlLkRBVEVfUkFOR0VfU0VMRUNUSU9OXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jcmVhdGVGb3JtR3JvdXBXaXRoUmFuZ2VDb250cm9scyh2YWx1ZVswXSwgdmFsdWVbMV0pO1xyXG4gICAgICB0aGlzLnNldERhdGVSYW5nZSh2YWx1ZVswXSwgdmFsdWVbMV0pO1xyXG4gICAgICB0aGlzLmRhdGVwaWNrZXJTZXJ2aWNlLmlzUmFuZ2VTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHNlbGVjdGVkIGRhdGUgcmFuZ2VcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7c3RyaW5nW119XHJcbiAgICogQG1lbWJlcm9mIERhdGVQaWNrZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXQgc2VsZWN0ZWRSYW5nZSgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRSYW5nZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGNhbGVuZGFyVHlwZTogQ2FsZW5kYXJUeXBlID0gQ2FsZW5kYXJUeXBlLlNJTkdMRV9EQVRFX1NFTEVDVElPTjtcclxuICBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXJMYWJlbCA9ICcnO1xyXG4gIEBJbnB1dCgpIGlzRGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc0xhYmVsQWxpZ25lZExlZnQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBkYXRlcGlja2VyTGFiZWwgPSAnJztcclxuICBASW5wdXQoKSBkYXRlUmFuZ2UhOiB7IG1pbkRhdGU6IHN0cmluZzsgbWF4RGF0ZTogc3RyaW5nIH07XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkRGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZERhdGVSYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgc3RhcnREYXRlOiBzdHJpbmc7XHJcbiAgICBlbmREYXRlOiBzdHJpbmc7XHJcbiAgfT4oKTtcclxuICBjYWxlbmRhclNlbGVjdGVkRGF0ZSE6IERhdGU7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBidXR0b25BY3Rpb25zSW5mbzogYW55ID0gYnV0dG9uQWN0aW9uc0luZm87XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBkYXRlcGlja2VyU2VydmljZTogRGF0ZXBpY2tlclNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZm9ybVV0aWxpdHlTZXJ2aWNlOiBGb3JtVXRpbGl0eVNlcnZpY2UgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uLFxyXG4gICkge31cclxuICAvKipcclxuICAgKiBJbXBsZW1lbnRhdGlvbiBvZiAgbmdPbkluaXQgbGlmZWN5Y2xlIGhvb2sgbWV0aG9kIHRvIGNyZWF0ZXMgY29uZmlnIGlmIGl0cyB1bmRlZmluZWQgYW5kIHNldHMgY29tcG9uZW50cyBpbnN0YW5jZSB2YXJpYWJsZXMgaWYgY29uZmlnIGlzIGRlZmluZWQuIFNldHMgdGhlIGZvcm0gZ3JvdXAgdmFsdWUgaWYgZm9ybSBncm91cCBpcyBkZWZpbmVkLlxyXG4gICAqIEBtZW1iZXJvZiBEYXRlUGlja2VyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2xOYW1lID0gdGhpcy5mb3JtQ29udHJvbE5hbWUgPz8gJ2RhdGVwaWNrZXInO1xyXG4gICAgICB0aGlzLmNvbmZpZyA9IHRoaXMuZm9ybVV0aWxpdHlTZXJ2aWNlLmdldEZvcm1GaWVsZENvbmZpZyhcclxuICAgICAgICBjb250cm9sTmFtZSxcclxuICAgICAgICBGb3JtQ29udHJvbFR5cGUuREFURVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jb25maWcgJiZcclxuICAgICAgICB0aGlzLmNhbGVuZGFyVHlwZSA9PT0gQ2FsZW5kYXJUeXBlLkRBVEVfUkFOR0VfU0VMRUNUSU9OXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnLmRhdGVSYW5nZUNvbnRyb2xzID0ge1xyXG4gICAgICAgICAgc3RhcnREYXRlOiAnc3RhcnREYXRlJyxcclxuICAgICAgICAgIGVuZERhdGU6ICdlbmREYXRlJyxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVQcm9wZXJ0aWVzRnJvbUNvbmZpZygpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmdyb3VwKSB7XHJcbiAgICAgIGlmICh0aGlzLmNhbGVuZGFyVHlwZSA9PT0gQ2FsZW5kYXJUeXBlLlNJTkdMRV9EQVRFX1NFTEVDVElPTikge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jYWxlbmRhclR5cGUgPT09IENhbGVuZGFyVHlwZS5EQVRFX1JBTkdFX1NFTEVDVElPTikge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwV2l0aFJhbmdlQ29udHJvbHMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgcHJvcGVydGllcyBmcm9tIHRoZSBjb25maWcgaW5wdXRcclxuICAgKiBAbWVtYmVyb2YgRGF0ZVBpY2tlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGluaXRpYWxpemVQcm9wZXJ0aWVzRnJvbUNvbmZpZygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FsZW5kYXJUeXBlID1cclxuICAgICAgdGhpcy5jb25maWc/LmRhdGVQaWNrZXI/LmNhbGVuZGFyVHlwZSA/P1xyXG4gICAgICBDYWxlbmRhclR5cGUuU0lOR0xFX0RBVEVfU0VMRUNUSU9OO1xyXG4gICAgdGhpcy5wbGFjZWhvbGRlckxhYmVsID0gdGhpcy5jb25maWc/LmRhdGVQaWNrZXI/LnBsYWNlaG9sZGVyTGFiZWwgPz8gJyc7XHJcbiAgICB0aGlzLmRhdGVwaWNrZXJMYWJlbCA9IHRoaXMuY29uZmlnPy5kYXRlUGlja2VyPy5sYWJlbCA/PyAnJztcclxuICAgIHRoaXMuaXNMYWJlbEFsaWduZWRMZWZ0ID1cclxuICAgICAgdGhpcy5jb25maWc/LmRhdGVQaWNrZXI/LmlzTGFiZWxBbGlnbmVkTGVmdCA/PyBmYWxzZTtcclxuICAgIHRoaXMuZGF0ZVJhbmdlID0gdGhpcy5jb25maWc/LmRhdGVQaWNrZXI/LmRhdGVSYW5nZSA/PyB7XHJcbiAgICAgIG1pbkRhdGU6ICcnLFxyXG4gICAgICBtYXhEYXRlOiAnJyxcclxuICAgIH07XHJcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSAhIXRoaXMuY29uZmlnLmRpc2FibGVkO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNvbmZpZy5kYXRlUGlja2VyPy5jYWxlbmRhclR5cGUgPT09IENhbGVuZGFyVHlwZS5EQVRFX1JBTkdFX1NFTEVDVElPTlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCgnc3RhcnREYXRlJywgbmV3IEZvcm1Db250cm9sKCkpO1xyXG4gICAgICB0aGlzLmdyb3VwLmFkZENvbnRyb2woJ2VuZERhdGUnLCBuZXcgRm9ybUNvbnRyb2woKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBkYXRlIGNoYW5nZSBldmVudCBhbmQgZW1pdHMgdGhlIHNlbGVjdGVkIGRhdGUuXHJcbiAgICogQG1lbWJlcm9mIERhdGVQaWNrZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkRhdGVDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZS5lbWl0KHRoaXMuZ3JvdXA/LmdldCh0aGlzLmNvbmZpZy5jb250cm9sTmFtZSk/LnZhbHVlKTtcclxuICAgIHRoaXMuZGF0ZXBpY2tlclNlcnZpY2Uuc2VsZWN0ZWREYXRlID0gdGhpcy5ncm91cD8uZ2V0KFxyXG4gICAgICB0aGlzLmNvbmZpZy5jb250cm9sTmFtZVxyXG4gICAgKT8udmFsdWU7XHJcbiAgICB0aGlzLmRhdGVwaWNrZXJTZXJ2aWNlLmlzUmFuZ2VTZWxlY3Rpb24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgYW5kIGVtaXRzIHNlbGVjdGVkIGRhdGUgcmFuZ2VcclxuICAgKiBAbWVtYmVyb2YgRGF0ZVBpY2tlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRGF0ZVJhbmdlQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRlcGlja2VyU2VydmljZS5pc1JhbmdlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuc2V0RGF0ZVJhbmdlKFxyXG4gICAgICB0aGlzLmdyb3VwLnZhbHVlLnN0YXJ0RGF0ZSA/PyAnJyxcclxuICAgICAgdGhpcy5ncm91cC52YWx1ZS5lbmREYXRlID8/ICcnXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW1pdCh7XHJcbiAgICAgIHN0YXJ0RGF0ZTogdGhpcy5ncm91cC52YWx1ZS5zdGFydERhdGUgPz8gJycsXHJcbiAgICAgIGVuZERhdGU6IHRoaXMuZ3JvdXAudmFsdWUuZW5kRGF0ZSA/PyAnJyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbWluIGFuZCBtYXggZGF0ZSByYW5nZS5cclxuICAgKiBAcGFyYW0geyhzdHJpbmcgfCBEYXRlKX0gc3RhcnREYXRlXHJcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgRGF0ZSl9IGVuZERhdGVcclxuICAgKiBAbWVtYmVyb2YgRGF0ZVBpY2tlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNldERhdGVSYW5nZShzdGFydERhdGU6IHN0cmluZyB8IERhdGUsIGVuZERhdGU6IHN0cmluZyB8IERhdGUpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0ZXBpY2tlclNlcnZpY2UucmFuZ2UubmV4dCh7XHJcbiAgICAgIHN0YXJ0OiBzdGFydERhdGUsXHJcbiAgICAgIGVuZDogZW5kRGF0ZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBmb3JtIGdyb3VwIGFuZCBpbml0aWFsaXplcyBmb3JtIHZhbHVlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRlXVxyXG4gICAqIEBtZW1iZXJvZiBEYXRlUGlja2VyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgY3JlYXRlRm9ybUdyb3VwKGRhdGU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgW3RoaXMuZm9ybUNvbnRyb2xOYW1lID8gdGhpcy5mb3JtQ29udHJvbE5hbWUgOiAnZGF0ZXBpY2tlciddOiBkYXRlXHJcbiAgICAgICAgPyBbbW9tZW50KGRhdGUpLnV0Yyh0cnVlKS5mb3JtYXQoKV1cclxuICAgICAgICA6IFtdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgZm9ybSBncm91cCB3aXRoIHJhbmdlIHR5cGUgb2YgY29udHJvbHMgYW5kIHNldHMgdGhlIG1pbiBhbmQgbWF4IHJhbmdlIHZhbHVlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0YXJ0RGF0ZV1cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2VuZERhdGVdXHJcbiAgICogQG1lbWJlcm9mIERhdGVQaWNrZXJDb21wb25lbnRcclxuICAgKi9cclxuICBjcmVhdGVGb3JtR3JvdXBXaXRoUmFuZ2VDb250cm9scyhzdGFydERhdGU/OiBzdHJpbmcsIGVuZERhdGU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgc3RhcnREYXRlOiBzdGFydERhdGUgPyBbbW9tZW50KHN0YXJ0RGF0ZSkudXRjKHRydWUpLmZvcm1hdCgpXSA6IFtdLFxyXG4gICAgICBlbmREYXRlOiBlbmREYXRlID8gW21vbWVudChlbmREYXRlKS51dGModHJ1ZSkuZm9ybWF0KCldIDogW10sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIHRoZSBmb3JtIGNvbnRyb2wgaGFzIHJlcXVpcmVkIHZhbGlkYXRvci5cclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBEYXRlUGlja2VyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdyb3VwPy5jb250cm9sc1t0aGlzLmNvbmZpZz8uY29udHJvbE5hbWVdPy5oYXNWYWxpZGF0b3IoXHJcbiAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpZWVlc2EtZGF0ZXBpY2tlclwiPlxyXG4gIDxkaXZcclxuICAgIFtmb3JtR3JvdXBdPVwiZ3JvdXBcIlxyXG4gICAgKm5nSWY9XCJjYWxlbmRhclR5cGUgPT09IGNhbGVuZGFyVHlwZXMuU0lOR0xFX0RBVEVfU0VMRUNUSU9OXCJcclxuICAgIGNsYXNzPVwiaWVlZXNhLWRhdGVwaWNrZXItLXNpbmdsZS1zZWxlY3Rpb25cIlxyXG4gICAgW25nQ2xhc3NdPVwiIWlzUmVxdWlyZWQoKSA/ICdpZWVlc2EtZGF0ZXBpY2tlcl9fdmFsaWQtZGF0ZScgOiAnJ1wiXHJcbiAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICdpZWVlc2EtZGF0ZXBpY2tlcl9fdmFsaWQtZGF0ZSc6ICFpc1JlcXVpcmVkKCksXHJcbiAgICAgICdpZWVlc2EtZGF0ZXBpY2tlcl9fbGFiZWwtbGVmdCc6IGlzTGFiZWxBbGlnbmVkTGVmdCxcclxuICAgICAgJ2llZWVzYS1kYXRlcGlja2VyX19sYWJlbC10b3AnOiAhaXNMYWJlbEFsaWduZWRMZWZ0XHJcbiAgICB9XCJcclxuICA+XHJcbiAgICA8bWF0LWxhYmVsICpuZ0lmPVwiZGF0ZXBpY2tlckxhYmVsXCI+e3sgZGF0ZXBpY2tlckxhYmVsIH19IDwvbWF0LWxhYmVsPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgIChkYXRlSW5wdXQpPVwib25EYXRlQ2hhbmdlKClcIlxyXG4gICAgICAgIChjbGljayk9XCJwaWNrZXIub3BlbigpXCJcclxuICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29uZmlnLmNvbnRyb2xOYW1lXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiYnV0dG9uQWN0aW9uc0luZm8/LmRhdGVQaWNrZXI/LmRhdGVGb3JtYXRMYWJlbFwiXHJcbiAgICAgICAgI2NhbGVuZGFyXHJcbiAgICAgICAgcmVhZG9ubHlcclxuICAgICAgLz5cclxuICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZVxyXG4gICAgICAgIGNsYXNzPVwibWF0LWRhdGVwaWNrZXItdG9nZ2xlXCJcclxuICAgICAgICBtYXRJY29uU3VmZml4XHJcbiAgICAgICAgW2Zvcl09XCJwaWNrZXJcIlxyXG4gICAgICA+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyIFtjYWxlbmRhckhlYWRlckNvbXBvbmVudF09XCJkYXRlUGlja2VySGVhZGVyXCI+XHJcbiAgICAgICAgPG1hdC1kYXRlcGlja2VyLWFjdGlvbnM+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJtYXQtdGV4dC1idXR0b24gaWVlZXNhLWRhdGVwaWNrZXJfX2RhdGUtcGlja2VyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXREYXRlcGlja2VyQ2FuY2VsXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGJ1dHRvbkFjdGlvbnNJbmZvPy5idXR0b24/LmNhbmNlbCB9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJtYXQtdGV4dC1idXR0b24gaWVlZXNhLWRhdGVwaWNrZXJfX2RhdGUtcGlja2VyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXREYXRlcGlja2VyQXBwbHlcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgYnV0dG9uQWN0aW9uc0luZm8/LmJ1dHRvbj8ub2sgfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LWRhdGVwaWNrZXItYWN0aW9ucz5cclxuICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8aWVlZXNhLWZvcm0tZXJyb3IgW2Zvcm1Hcm91cF09XCJncm91cFwiIFtjb25maWddPVwiY29uZmlnXCI+XHJcbiAgICA8L2llZWVzYS1mb3JtLWVycm9yPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICBbZm9ybUdyb3VwXT1cImdyb3VwXCJcclxuICAgICpuZ0lmPVwiY2FsZW5kYXJUeXBlID09PSBjYWxlbmRhclR5cGVzLkRBVEVfUkFOR0VfU0VMRUNUSU9OXCJcclxuICAgIGNsYXNzPVwiaWVlZXNhLWRhdGVwaWNrZXItLW11bHRpLXNlbGVjdGlvblwiXHJcbiAgICBbbmdDbGFzc109XCJcclxuICAgICAgaXNMYWJlbEFsaWduZWRMZWZ0XHJcbiAgICAgICAgPyAnaWVlZXNhLWRhdGVwaWNrZXJfX2xhYmVsLWxlZnQnXHJcbiAgICAgICAgOiAnaWVlZXNhLWRhdGVwaWNrZXJfX2xhYmVsLXRvcCdcclxuICAgIFwiXHJcbiAgPlxyXG4gICAgPG1hdC1sYWJlbCAqbmdJZj1cImRhdGVwaWNrZXJMYWJlbFwiPnt7IGRhdGVwaWNrZXJMYWJlbCB9fSA8L21hdC1sYWJlbD5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0IFtyYW5nZVBpY2tlcl09XCJyYW5nZVBpY2tlclwiIFtmb3JtR3JvdXBdPVwiZ3JvdXBcIj5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIG1hdFN0YXJ0RGF0ZVxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29uZmlnLmRhdGVSYW5nZUNvbnRyb2xzPy5zdGFydERhdGUgPz8gJydcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImJ1dHRvbkFjdGlvbnNJbmZvPy5kYXRlUGlja2VyPy5kYXRlRm9ybWF0TGFiZWwgKyAnIC0gJ1wiXHJcbiAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVSYW5nZUNoYW5nZSgpXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0RW5kRGF0ZVxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29uZmlnLmRhdGVSYW5nZUNvbnRyb2xzPy5lbmREYXRlID8/ICcnXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJidXR0b25BY3Rpb25zSW5mbz8uZGF0ZVBpY2tlcj8uZGF0ZUZvcm1hdExhYmVsXCJcclxuICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm9uRGF0ZVJhbmdlQ2hhbmdlKClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XHJcbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGVcclxuICAgICAgICBjbGFzcz1cIm1hdC1kYXRlcGlja2VyLXRvZ2dsZVwiXHJcbiAgICAgICAgbWF0SWNvblN1ZmZpeFxyXG4gICAgICAgIFtmb3JdPVwicmFuZ2VQaWNrZXJcIlxyXG4gICAgICA+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXJcclxuICAgICAgICAjcmFuZ2VQaWNrZXJcclxuICAgICAgICBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiZGF0ZVBpY2tlckhlYWRlclwiXHJcbiAgICAgICAgKGRhdGVJbnB1dCk9XCJvbkRhdGVSYW5nZUNoYW5nZSgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXItYWN0aW9ucz5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cIm1hdC10ZXh0LWJ1dHRvbiBpZWVlc2EtZGF0ZXBpY2tlcl9fZGF0ZS1waWNrZXItYnV0dG9uXCJcclxuICAgICAgICAgICAgbWF0RGF0ZVJhbmdlUGlja2VyQ2FuY2VsXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBidXR0b25BY3Rpb25zSW5mbz8uYnV0dG9uPy5jYW5jZWwgfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtYnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWF0LXRleHQtYnV0dG9uIGllZWVzYS1kYXRlcGlja2VyX19kYXRlLXBpY2tlci1idXR0b25cIlxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXREYXRlUmFuZ2VQaWNrZXJBcHBseVxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25EYXRlUmFuZ2VDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBidXR0b25BY3Rpb25zSW5mbz8uYnV0dG9uPy5vayB9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1waWNrZXItYWN0aW9ucz5cclxuICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cImNhbGVuZGFyVHlwZSA9PT0gY2FsZW5kYXJUeXBlcy5DQUxFTkRBUlwiXHJcbiAgICBjbGFzcz1cImllZWVzYS1kYXRlcGlja2VyLS1jYWxlbmRhclwiXHJcbiAgPlxyXG4gICAgPG1hdC1jYWxlbmRhclxyXG4gICAgICBbaGVhZGVyQ29tcG9uZW50XT1cImRhdGVQaWNrZXJIZWFkZXJcIlxyXG4gICAgICBbKHNlbGVjdGVkKV09XCJjYWxlbmRhclNlbGVjdGVkRGF0ZVwiXHJcbiAgICA+XHJcbiAgICA8L21hdC1jYWxlbmRhcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|