@resolveio/client-lib-core 15.1.7 → 15.1.9

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.
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL21vZGVscy9kaWFsb2cubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRGlhbG9nSW5wdXRGaWVsZE1vZGVsIHtcblx0bGFiZWw6IHN0cmluZztcblx0Zm9ybTogc3RyaW5nO1xuXHRkYXRhOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgYW55W107IFxuXHR2YWxpZGF0b3JzOiBhbnlbXTtcblx0dmFsaWRhdG9yRXJyb3JzPzogc3RyaW5nW107XG5cdHZhbGlkYXRvck1zZz86IHN0cmluZ1tdO1xuXHRwbGFjZWhvbGRlcj86IHN0cmluZztcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHR0eXBlPzogRGlhbG9nSW5wdXRGaWVsZFR5cGVzO1xuXHRvcHRpb25zPzogRGlhbG9nSW5wdXRGaWVsZFNlbGVjdE9wdGlvbnNbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaWFsb2dJbnB1dEZpZWxkU2VsZWN0T3B0aW9ucyB7XG5cdHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XG5cdHRleHQ6IHN0cmluZztcbn1cblxudHlwZSBEaWFsb2dJbnB1dEZpZWxkVHlwZXMgPSAndGV4dCcgfCAnbnVtYmVyJyB8ICdzZWxlY3QnIHwgJ25nLXNlbGVjdCcgfCAnc3RhdGUnIHwgJ2VtYWlsJyB8ICdwYXNzd29yZCcgfCAndGV4dGFyZWEnIHwgJ2Jvb2xlYW4nO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ1NlbGVjdFdpdGhCdXR0b25zT3B0aW9uTW9kZWwge1xuXHR2YWx1ZTogc3RyaW5nIHwgbnVtYmVyO1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHNlbGVjdGVkPzogYm9vbGVhbjtcbn0iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL21vZGVscy9kaWFsb2cubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRGlhbG9nSW5wdXRGaWVsZE1vZGVsIHtcblx0bGFiZWw6IHN0cmluZztcblx0Zm9ybTogc3RyaW5nO1xuXHRkYXRhOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgYW55W107IFxuXHR2YWxpZGF0b3JzOiBhbnlbXTtcblx0dmFsaWRhdG9yRXJyb3JzPzogc3RyaW5nW107XG5cdHZhbGlkYXRvck1zZz86IHN0cmluZ1tdO1xuXHRwbGFjZWhvbGRlcj86IHN0cmluZztcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHR0eXBlPzogRGlhbG9nSW5wdXRGaWVsZFR5cGVzO1xuXHRvcHRpb25zPzogRGlhbG9nSW5wdXRGaWVsZFNlbGVjdE9wdGlvbnNbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaWFsb2dJbnB1dEZpZWxkU2VsZWN0T3B0aW9ucyB7XG5cdHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XG5cdHRleHQ6IHN0cmluZztcbn1cblxudHlwZSBEaWFsb2dJbnB1dEZpZWxkVHlwZXMgPSAndGV4dCcgfCAnbnVtYmVyJyB8ICdzZWxlY3QnIHwgJ25nLXNlbGVjdCcgfCAnc3RhdGUnIHwgJ2VtYWlsJyB8ICdwYXNzd29yZCcgfCAndGV4dGFyZWEnIHwgJ2Jvb2xlYW4nIHwgJ2RhdGUnIHwgJ2RhdGV0aW1lJztcblxuZXhwb3J0IGludGVyZmFjZSBEaWFsb2dTZWxlY3RXaXRoQnV0dG9uc09wdGlvbk1vZGVsIHtcblx0dmFsdWU6IHN0cmluZyB8IG51bWJlcjtcblx0dGV4dDogc3RyaW5nO1xuXHRzZWxlY3RlZD86IGJvb2xlYW47XG59Il19
@@ -1,6 +1,6 @@
1
1
  import { Component, Input } from '@angular/core';
2
2
  import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
3
- import { FormControl, FormBuilder } from '@angular/forms';
3
+ import { FormBuilder, UntypedFormControl } from '@angular/forms';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@ng-bootstrap/ng-bootstrap";
6
6
  import * as i2 from "@angular/forms";
@@ -24,11 +24,27 @@ export class DialogInputContent {
24
24
  ngOnInit() {
25
25
  this.formInput = this._fb.group({});
26
26
  for (let i = 0; i < this.inputFields.length; i++) {
27
- if (this.inputFields[i].validators === null) {
28
- this.formInput.addControl(this.inputFields[i].form, new FormControl({ value: this.inputFields[i].data, disabled: this.inputFields[i].disabled }));
27
+ if (this.inputFields[i].type !== 'datetime') {
28
+ if (this.inputFields[i].validators === null) {
29
+ this.formInput.addControl(this.inputFields[i].form, new UntypedFormControl({ value: this.inputFields[i].data, disabled: this.inputFields[i].disabled }));
30
+ }
31
+ else {
32
+ this.formInput.addControl(this.inputFields[i].form, new UntypedFormControl({ value: this.inputFields[i].data, disabled: this.inputFields[i].disabled }, this.inputFields[i].validators));
33
+ }
29
34
  }
30
35
  else {
31
- this.formInput.addControl(this.inputFields[i].form, new FormControl({ value: this.inputFields[i].data, disabled: this.inputFields[i].disabled }, this.inputFields[i].validators));
36
+ if (this.inputFields[i].validators === null) {
37
+ this.formInput.addControl(this.inputFields[i].form, new UntypedFormControl({ value: this.inputFields[i].data[0], disabled: this.inputFields[i].disabled }));
38
+ }
39
+ else {
40
+ this.formInput.addControl(this.inputFields[i].form, new UntypedFormControl({ value: this.inputFields[i].data[0], disabled: this.inputFields[i].disabled }, this.inputFields[i].validators));
41
+ }
42
+ if (this.inputFields[i].validators === null) {
43
+ this.formInput.addControl(this.inputFields[i].form + '_time', new UntypedFormControl({ value: this.inputFields[i].data[1], disabled: this.inputFields[i].disabled }));
44
+ }
45
+ else {
46
+ this.formInput.addControl(this.inputFields[i].form + '_time', new UntypedFormControl({ value: this.inputFields[i].data[1], disabled: this.inputFields[i].disabled }, this.inputFields[i].validators));
47
+ }
32
48
  }
33
49
  }
34
50
  }
@@ -75,7 +91,7 @@ DialogInputContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
75
91
  <label class="form-control-label">{{inputField.label}}</label>
76
92
  <em *ngIf="formInput.controls[inputField.form].hasError('required') && inputField.required">- Required</em>
77
93
  <em *ngIf="!formInput.controls[inputField.form].hasError('required') && formInput.controls[inputField.form].invalid">- Invalid</em>
78
- <div *ngIf="inputField.type !== 'state' && inputField.type !== 'textarea' && inputField.type !== 'number' && inputField.type !== 'select' && inputField.type !== 'boolean'">
94
+ <div *ngIf="inputField.type !== 'date' && inputField.type !== 'datetime' && inputField.type !== 'state' && inputField.type !== 'textarea' && inputField.type !== 'number' && inputField.type !== 'select' && inputField.type !== 'boolean'">
79
95
  <input [autofocus]="i === 0 ? true : false" [focus]="i === 0 ? true : false" [formControlName]="inputField.form" [ngClass]="['form-control', validateInput(inputField, formInput)]" [type]="(inputField.type ? inputField.type : 'text')">
80
96
  <ng-container *ngFor="let errorMsg of getErrorMessages(inputField, formInput);">
81
97
  <div class="invalid-feedback">{{errorMsg}}</div>
@@ -110,6 +126,35 @@ DialogInputContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
110
126
  <div class="invalid-feedback">{{errorMsg}}</div>
111
127
  </ng-container>
112
128
  </div>
129
+ <div *ngIf="inputField.type === 'date'">
130
+ <div class="input-group">
131
+ <input [formControlName]="inputField.form" placeholder="yyyy-mm-dd" ngbDatepicker [firstDayOfWeek]="7" #d="ngbDatepicker" [ngClass]="['form-control', validateInput(inputField, formInput)]" (click)="d.toggle()">
132
+ <div class="input-group-append" (click)="d.toggle()">
133
+ <div class="input-group-text">
134
+ <i class="fa fa-calendar" aria-hidden="true"></i>
135
+ </div>
136
+ </div>
137
+ </div>
138
+ </div>
139
+ <div *ngIf="inputField.type === 'datetime'">
140
+ <div class="row" style="align-items: center;">
141
+ <div class="col-sm-8">
142
+ <label class="form-control-label" style="align-items: top;">Date/Time</label>
143
+ <div class="input-group">
144
+ <input [formControlName]="inputField.form" placeholder="yyyy-mm-dd" ngbDatepicker [firstDayOfWeek]="7" #d="ngbDatepicker" [ngClass]="['form-control', validateInput(inputField, formInput)]" (click)="d.toggle()">
145
+ <div class="input-group-append" (click)="d.toggle()">
146
+ <div class="input-group-text">
147
+ <i class="fa fa-calendar" aria-hidden="true"></i>
148
+ </div>
149
+ </div>
150
+ </div>
151
+ </div>
152
+ <div class="col-sm-4">
153
+ <label class="form-control-label" style="align-items: top;">&nbsp;</label>
154
+ <ngb-timepicker [formControlName]="inputField.form + '_time'" meridian="ON" [ngClass]="[validateInput(inputField, formInput)]"></ngb-timepicker>
155
+ </div>
156
+ </div>
157
+ </div>
113
158
  <div *ngIf="inputField.type === 'boolean'" (click)="formInput.controls[inputField.form].setValue(!formInput.controls[inputField.form].value)">
114
159
  <i *ngIf="formInput.controls[inputField.form].value" class="fa fa-check" style="color: green; font-size: 24px;" aria-hidden="true"></i>
115
160
  <i *ngIf="!formInput.controls[inputField.form].value" class="fa fa-times" style="color: red; font-size: 24px;" aria-hidden="true"></i>
@@ -122,7 +167,7 @@ DialogInputContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
122
167
  <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>
123
168
  </div>
124
169
  </form>
125
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.FormButtonComponent, selector: "form-button", inputs: ["form", "disabled", "type"] }, { kind: "component", type: i4.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i4.NgOptionComponent, selector: "ng-option", inputs: ["value", "disabled"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.FocusDirective, selector: "[focus]", inputs: ["focus"] }] });
170
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "component", type: i1.NgbTimepicker, selector: "ngb-timepicker", inputs: ["meridian", "spinners", "seconds", "hourStep", "minuteStep", "secondStep", "readonlyInputs", "size"] }, { kind: "component", type: i3.FormButtonComponent, selector: "form-button", inputs: ["form", "disabled", "type"] }, { kind: "component", type: i4.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i4.NgOptionComponent, selector: "ng-option", inputs: ["value", "disabled"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.FocusDirective, selector: "[focus]", inputs: ["focus"] }] });
126
171
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DialogInputContent, decorators: [{
127
172
  type: Component,
128
173
  args: [{
@@ -140,7 +185,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
140
185
  <label class="form-control-label">{{inputField.label}}</label>
141
186
  <em *ngIf="formInput.controls[inputField.form].hasError('required') && inputField.required">- Required</em>
142
187
  <em *ngIf="!formInput.controls[inputField.form].hasError('required') && formInput.controls[inputField.form].invalid">- Invalid</em>
143
- <div *ngIf="inputField.type !== 'state' && inputField.type !== 'textarea' && inputField.type !== 'number' && inputField.type !== 'select' && inputField.type !== 'boolean'">
188
+ <div *ngIf="inputField.type !== 'date' && inputField.type !== 'datetime' && inputField.type !== 'state' && inputField.type !== 'textarea' && inputField.type !== 'number' && inputField.type !== 'select' && inputField.type !== 'boolean'">
144
189
  <input [autofocus]="i === 0 ? true : false" [focus]="i === 0 ? true : false" [formControlName]="inputField.form" [ngClass]="['form-control', validateInput(inputField, formInput)]" [type]="(inputField.type ? inputField.type : 'text')">
145
190
  <ng-container *ngFor="let errorMsg of getErrorMessages(inputField, formInput);">
146
191
  <div class="invalid-feedback">{{errorMsg}}</div>
@@ -175,6 +220,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
175
220
  <div class="invalid-feedback">{{errorMsg}}</div>
176
221
  </ng-container>
177
222
  </div>
223
+ <div *ngIf="inputField.type === 'date'">
224
+ <div class="input-group">
225
+ <input [formControlName]="inputField.form" placeholder="yyyy-mm-dd" ngbDatepicker [firstDayOfWeek]="7" #d="ngbDatepicker" [ngClass]="['form-control', validateInput(inputField, formInput)]" (click)="d.toggle()">
226
+ <div class="input-group-append" (click)="d.toggle()">
227
+ <div class="input-group-text">
228
+ <i class="fa fa-calendar" aria-hidden="true"></i>
229
+ </div>
230
+ </div>
231
+ </div>
232
+ </div>
233
+ <div *ngIf="inputField.type === 'datetime'">
234
+ <div class="row" style="align-items: center;">
235
+ <div class="col-sm-8">
236
+ <label class="form-control-label" style="align-items: top;">Date/Time</label>
237
+ <div class="input-group">
238
+ <input [formControlName]="inputField.form" placeholder="yyyy-mm-dd" ngbDatepicker [firstDayOfWeek]="7" #d="ngbDatepicker" [ngClass]="['form-control', validateInput(inputField, formInput)]" (click)="d.toggle()">
239
+ <div class="input-group-append" (click)="d.toggle()">
240
+ <div class="input-group-text">
241
+ <i class="fa fa-calendar" aria-hidden="true"></i>
242
+ </div>
243
+ </div>
244
+ </div>
245
+ </div>
246
+ <div class="col-sm-4">
247
+ <label class="form-control-label" style="align-items: top;">&nbsp;</label>
248
+ <ngb-timepicker [formControlName]="inputField.form + '_time'" meridian="ON" [ngClass]="[validateInput(inputField, formInput)]"></ngb-timepicker>
249
+ </div>
250
+ </div>
251
+ </div>
178
252
  <div *ngIf="inputField.type === 'boolean'" (click)="formInput.controls[inputField.form].setValue(!formInput.controls[inputField.form].value)">
179
253
  <i *ngIf="formInput.controls[inputField.form].value" class="fa fa-check" style="color: green; font-size: 24px;" aria-hidden="true"></i>
180
254
  <i *ngIf="!formInput.controls[inputField.form].value" class="fa fa-times" style="color: red; font-size: 24px;" aria-hidden="true"></i>
@@ -194,4 +268,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
194
268
  }], inputFields: [{
195
269
  type: Input
196
270
  }] } });
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmlucHV0LmNvbnRlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvd2lkZ2V0cy9kaWFsb2cvZGlhbG9nLmlucHV0LmNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFZLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RFLE9BQU8sRUFBeUIsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQWtFakYsa0RBQWtEO0FBQ2xELE1BQU0sT0FBTyxrQkFBa0I7SUFXOUIsWUFBbUIsWUFBNEIsRUFBVSxHQUFnQjtRQUF0RCxpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBVmhFLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUlqQyxXQUFNLEdBQWE7WUFDbEIsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsT0FBTztZQUNuTixVQUFVLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU07WUFDbk4sVUFBVSxFQUFFLFFBQVEsRUFBRSxj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RUFBRTtnQkFDbEYsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckM7U0FDRDtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ1osQ0FBQzs7Z0hBNURXLGtCQUFrQjtvR0FBbEIsa0JBQWtCLDRHQWhFcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2RFQ7NEZBR1csa0JBQWtCO2tCQWpFOUIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2RFQ7aUJBQ0Q7K0hBR1MsS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nYk1vZGFsLCBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IFZhbGlkYXRvcnMsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcblx0dGVtcGxhdGU6IGBcblx0XHQ8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1JbnB1dFwiIG5vdmFsaWRhdGUgKG5nU3VibWl0KT1cIl9hY3RpdmVNb2RhbC5jbG9zZSh0aGlzLmZvcm1JbnB1dC5jb250cm9scylcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cblx0XHRcdFx0PGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj48aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCIgc3R5bGU9XCJjb2xvcjogZ3JlZW47IGZvbnQtc2l6ZTogMC44NWVtXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyB0aXRsZSB9fTwvaDQ+XG5cdFx0XHRcdDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwiX2FjdGl2ZU1vZGFsLmRpc21pc3MoKVwiPlxuXHRcdFx0XHRcdDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG5cdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuXHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBpbnB1dEZpZWxkIG9mIGlucHV0RmllbGRzOyBsZXQgaSA9IGluZGV4XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPnt7aW5wdXRGaWVsZC5sYWJlbH19PC9sYWJlbD5cblx0XHRcdFx0XHRcdDxlbSAqbmdJZj1cImZvcm1JbnB1dC5jb250cm9sc1tpbnB1dEZpZWxkLmZvcm1dLmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIGlucHV0RmllbGQucmVxdWlyZWRcIj4tIFJlcXVpcmVkPC9lbT5cblx0XHRcdFx0XHRcdDxlbSAqbmdJZj1cIiFmb3JtSW5wdXQuY29udHJvbHNbaW5wdXRGaWVsZC5mb3JtXS5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBmb3JtSW5wdXQuY29udHJvbHNbaW5wdXRGaWVsZC5mb3JtXS5pbnZhbGlkXCI+LSBJbnZhbGlkPC9lbT5cblx0XHRcdFx0XHRcdDxkaXYgKm5nSWY9XCJpbnB1dEZpZWxkLnR5cGUgIT09ICdzdGF0ZScgJiYgaW5wdXRGaWVsZC50eXBlICE9PSAndGV4dGFyZWEnICYmIGlucHV0RmllbGQudHlwZSAhPT0gJ251bWJlcicgJiYgaW5wdXRGaWVsZC50eXBlICE9PSAnc2VsZWN0JyAmJiBpbnB1dEZpZWxkLnR5cGUgIT09ICdib29sZWFuJ1wiPlxuXHRcdFx0XHRcdFx0PGlucHV0IFthdXRvZm9jdXNdPVwiaSA9PT0gMCA/IHRydWUgOiBmYWxzZVwiIFtmb2N1c109XCJpID09PSAwID8gdHJ1ZSA6IGZhbHNlXCIgW2Zvcm1Db250cm9sTmFtZV09XCJpbnB1dEZpZWxkLmZvcm1cIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIHZhbGlkYXRlSW5wdXQoaW5wdXRGaWVsZCwgZm9ybUlucHV0KV1cIiBbdHlwZV09XCIoaW5wdXRGaWVsZC50eXBlID8gaW5wdXRGaWVsZC50eXBlIDogJ3RleHQnKVwiPlxuXHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlcnJvck1zZyBvZiBnZXRFcnJvck1lc3NhZ2VzKGlucHV0RmllbGQsIGZvcm1JbnB1dCk7XCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj57e2Vycm9yTXNnfX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgKm5nSWY9XCJpbnB1dEZpZWxkLnR5cGUgPT09ICdzZWxlY3QnXCI+XG5cdFx0XHRcdFx0XHRcdDxuZy1zZWxlY3QgW2Zvcm1Db250cm9sTmFtZV09XCJpbnB1dEZpZWxkLmZvcm1cIiBbbmdDbGFzc109XCJbdmFsaWRhdGVJbnB1dChpbnB1dEZpZWxkLCBmb3JtSW5wdXQpXVwiIFtwbGFjZWhvbGRlcl09XCJpbnB1dEZpZWxkLnBsYWNlaG9sZGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0PG5nLW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0IG9mIGlucHV0RmllbGQub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHQudmFsdWVcIiBbZGlzYWJsZWRdPVwib3B0LnZhbHVlID09PSAnZGlzYWJsZWQnXCI+e3tvcHQudGV4dH19PC9uZy1vcHRpb24+XG5cdFx0XHRcdFx0XHRcdDwvbmctc2VsZWN0PlxuXHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlcnJvck1zZyBvZiBnZXRFcnJvck1lc3NhZ2VzKGlucHV0RmllbGQsIGZvcm1JbnB1dCk7XCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj57e2Vycm9yTXNnfX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgKm5nSWY9XCJpbnB1dEZpZWxkLnR5cGUgPT09ICdzdGF0ZSdcIj5cblx0XHRcdFx0XHRcdFx0PHNlbGVjdCBbZm9ybUNvbnRyb2xOYW1lXT1cImlucHV0RmllbGQuZm9ybVwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgdmFsaWRhdGVJbnB1dChpbnB1dEZpZWxkLCBmb3JtSW5wdXQpXVwiPlxuXHRcdFx0XHRcdFx0XHRcdDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3QgU3RhdGU8L29wdGlvbj5cblx0XHRcdFx0XHRcdFx0XHQ8b3B0aW9uICpuZ0Zvcj1cImxldCBzdGF0ZSBvZiBzdGF0ZXNcIiBbdmFsdWVdPVwic3RhdGVcIj57e3N0YXRlfX08L29wdGlvbj5cblx0XHRcdFx0XHRcdFx0PC9zZWxlY3Q+XG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVycm9yTXNnIG9mIGdldEVycm9yTWVzc2FnZXMoaW5wdXRGaWVsZCwgZm9ybUlucHV0KTtcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPnt7ZXJyb3JNc2d9fTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiAqbmdJZj1cImlucHV0RmllbGQudHlwZSA9PT0gJ3RleHRhcmVhJ1wiPlxuXHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWEgcm93cz1cIjRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImlucHV0RmllbGQuZm9ybVwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgdmFsaWRhdGVJbnB1dChpbnB1dEZpZWxkLCBmb3JtSW5wdXQpXVwiPjwvdGV4dGFyZWE+XG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVycm9yTXNnIG9mIGdldEVycm9yTWVzc2FnZXMoaW5wdXRGaWVsZCwgZm9ybUlucHV0KTtcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPnt7ZXJyb3JNc2d9fTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiAqbmdJZj1cImlucHV0RmllbGQudHlwZSA9PT0gJ251bWJlcidcIj5cblx0XHRcdFx0XHRcdFx0PGlucHV0IFtmb3JtQ29udHJvbE5hbWVdPVwiaW5wdXRGaWVsZC5mb3JtXCIgdHlwZT1cIm51bWJlclwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgdmFsaWRhdGVJbnB1dChpbnB1dEZpZWxkLCBmb3JtSW5wdXQpXVwiPlxuXHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlcnJvck1zZyBvZiBnZXRFcnJvck1lc3NhZ2VzKGlucHV0RmllbGQsIGZvcm1JbnB1dCk7XCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj57e2Vycm9yTXNnfX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgKm5nSWY9XCJpbnB1dEZpZWxkLnR5cGUgPT09ICdib29sZWFuJ1wiIChjbGljayk9XCJmb3JtSW5wdXQuY29udHJvbHNbaW5wdXRGaWVsZC5mb3JtXS5zZXRWYWx1ZSghZm9ybUlucHV0LmNvbnRyb2xzW2lucHV0RmllbGQuZm9ybV0udmFsdWUpXCI+XG5cdFx0XHRcdFx0XHRcdDxpICpuZ0lmPVwiZm9ybUlucHV0LmNvbnRyb2xzW2lucHV0RmllbGQuZm9ybV0udmFsdWVcIiBjbGFzcz1cImZhIGZhLWNoZWNrXCIgc3R5bGU9XCJjb2xvcjogZ3JlZW47IGZvbnQtc2l6ZTogMjRweDtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG5cdFx0XHRcdFx0XHRcdDxpICpuZ0lmPVwiIWZvcm1JbnB1dC5jb250cm9sc1tpbnB1dEZpZWxkLmZvcm1dLnZhbHVlXCIgY2xhc3M9XCJmYSBmYS10aW1lc1wiIHN0eWxlPVwiY29sb3I6IHJlZDsgZm9udC1zaXplOiAyNHB4O1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuXHRcdFx0XHQ8Zm9ybS1idXR0b24gW2Zvcm1dPVwiZm9ybUlucHV0XCI+PC9mb3JtLWJ1dHRvbj5cblx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJfYWN0aXZlTW9kYWwuZGlzbWlzcygpXCI+Q2FuY2VsPC9idXR0b24+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Zvcm0+XG5cdGBcbn0pXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIERpYWxvZ0lucHV0Q29udGVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdEBJbnB1dCgpIHRpdGxlID0gJyc7XG5cdEBJbnB1dCgpIGlucHV0RmllbGRzOiBhbnlbXSA9IFtdO1xuXG5cdGZvcm1JbnB1dDogRm9ybUdyb3VwO1xuXG5cdHN0YXRlczogc3RyaW5nW10gPSBbXG5cdFx0J0FsYWJhbWEnLCAnQWxhc2thJywgJ0FyaXpvbmEnLCAnQXJrYW5zYXMnLCAnQ2FsaWZvcm5pYScsICdDb2xvcmFkbycsICdDb25uZWN0aWN1dCcsICdEZWxhd2FyZScsICdGbG9yaWRhJywgJ0dlb3JnaWEnLCAnSGF3YWlpJywgJ0lkYWhvJywgJ0lsbGlub2lzJywgJ0luZGlhbmEnLCAnSW93YScsICdLYW5zYXMnLCAnS2VudHVja3knLCAnTG91aXNpYW5hJywgJ01haW5lJyxcblx0XHQnTWFyeWxhbmQnLCAnTWFzc2FjaHVzZXR0cycsICdNaWNoaWdhbicsICdNaW5uZXNvdGEnLCAnTWlzc2lzc2lwcGknLCAnTWlzc291cmknLCAnTW9udGFuYScsICdOZWJyYXNrYScsICdOZXZhZGEnLCAnTmV3IEhhbXBzaGlyZScsICdOZXcgSmVyc2V5JywgJ05ldyBNZXhpY28nLCAnTmV3IFlvcmsnLCAnTm9ydGggQ2Fyb2xpbmEnLCAnTm9ydGggRGFrb3RhJywgJ09oaW8nLFxuXHRcdCdPa2xhaG9tYScsICdPcmVnb24nLCAnUGVubnN5bHZhbmlhJywgJ1Job2RlIElzbGFuZCcsICdTb3V0aCBDYXJvbGluYScsICdTb3V0aCBEYWtvdGEnLCAnVGVubmVzc2VlJywgJ1RleGFzJywgJ1V0YWgnLCAnVmVybW9udCcsICdWaXJnaW5pYScsICdXYXNoaW5ndG9uJywgJ1dlc3QgVmlyZ2luaWEnLCAnV2lzY29uc2luJywgJ1d5b21pbmcnXTtcblxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgX2FjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCwgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyKSB7fVxuXG5cdG5nT25Jbml0KCkge1xuXHRcdHRoaXMuZm9ybUlucHV0ID0gdGhpcy5fZmIuZ3JvdXAoe30pO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmlucHV0RmllbGRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5pbnB1dEZpZWxkc1tpXS52YWxpZGF0b3JzID09PSBudWxsKSB7XG5cdFx0XHRcdHRoaXMuZm9ybUlucHV0LmFkZENvbnRyb2wodGhpcy5pbnB1dEZpZWxkc1tpXS5mb3JtLCBuZXcgRm9ybUNvbnRyb2woe3ZhbHVlOiB0aGlzLmlucHV0RmllbGRzW2ldLmRhdGEsIGRpc2FibGVkOiB0aGlzLmlucHV0RmllbGRzW2ldLmRpc2FibGVkfSkpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHRoaXMuZm9ybUlucHV0LmFkZENvbnRyb2wodGhpcy5pbnB1dEZpZWxkc1tpXS5mb3JtLCBuZXcgRm9ybUNvbnRyb2woe3ZhbHVlOiB0aGlzLmlucHV0RmllbGRzW2ldLmRhdGEsIGRpc2FibGVkOiB0aGlzLmlucHV0RmllbGRzW2ldLmRpc2FibGVkfSwgdGhpcy5pbnB1dEZpZWxkc1tpXS52YWxpZGF0b3JzKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFsaWRhdGVJbnB1dChpbnB1dEZpZWxkLCBmb3JtSW5wdXQpIHtcblxuXHRcdGlmIChpbnB1dEZpZWxkLmRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRGaWVsZC52YWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoZm9ybUlucHV0LmNvbnRyb2xzW2lucHV0RmllbGQuZm9ybV0uaGFzRXJyb3IoW2lucHV0RmllbGQudmFsaWRhdG9yRXJyb3JzW2ldXSkpIHtcblx0XHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodmFsaWQgJiYgZm9ybUlucHV0LmNvbnRyb2xzW2lucHV0RmllbGQuZm9ybV0udmFsdWUgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiAnaXMtdmFsaWQnO1xuXHRcdH1cblx0XHRlbHNlIGlmICghaW5wdXRGaWVsZC52YWxpZGF0b3JzLmxlbmd0aCB8fCAoIWlucHV0RmllbGQucmVxdWlyZWQgJiYgdmFsaWQpKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdFxuXHRcdHJldHVybiAnaXMtaW52YWxpZCc7XG5cdH1cblxuXHRnZXRFcnJvck1lc3NhZ2VzKGlucHV0RmllbGQsIGZvcm1JbnB1dCkge1xuXHRcdGxldCByZXMgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRGaWVsZC52YWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoZm9ybUlucHV0LmNvbnRyb2xzW2lucHV0RmllbGQuZm9ybV0uaGFzRXJyb3IoW2lucHV0RmllbGQudmFsaWRhdG9yRXJyb3JzW2ldXSkpIHtcblx0XHRcdFx0cmVzLnB1c2goaW5wdXRGaWVsZC52YWxpZGF0b3JNc2dbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cbn1cbiJdfQ==
271
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmlucHV0LmNvbnRlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvd2lkZ2V0cy9kaWFsb2cvZGlhbG9nLmlucHV0LmNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFZLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RFLE9BQU8sRUFBYSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUErRjVFLGtEQUFrRDtBQUNsRCxNQUFNLE9BQU8sa0JBQWtCO0lBVzlCLFlBQW1CLFlBQTRCLEVBQVUsR0FBZ0I7UUFBdEQsaUJBQVksR0FBWixZQUFZLENBQWdCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQVZoRSxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFJakMsV0FBTSxHQUFhO1lBQ2xCLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE9BQU87WUFDbk4sVUFBVSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNO1lBQ25OLFVBQVUsRUFBRSxRQUFRLEVBQUUs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dCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nYk1vZGFsLCBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG5cdHRlbXBsYXRlOiBgXG5cdFx0PGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtSW5wdXRcIiBub3ZhbGlkYXRlIChuZ1N1Ym1pdCk9XCJfYWN0aXZlTW9kYWwuY2xvc2UodGhpcy5mb3JtSW5wdXQuY29udHJvbHMpXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG5cdFx0XHRcdDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZVwiIHN0eWxlPVwiY29sb3I6IGdyZWVuOyBmb250LXNpemU6IDAuODVlbVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgdGl0bGUgfX08L2g0PlxuXHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIl9hY3RpdmVNb2RhbC5kaXNtaXNzKClcIj5cblx0XHRcdFx0XHQ8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuXHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cblx0XHRcdFx0PGRpdiAqbmdGb3I9XCJsZXQgaW5wdXRGaWVsZCBvZiBpbnB1dEZpZWxkczsgbGV0IGkgPSBpbmRleFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG5cdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj57e2lucHV0RmllbGQubGFiZWx9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHQ8ZW0gKm5nSWY9XCJmb3JtSW5wdXQuY29udHJvbHNbaW5wdXRGaWVsZC5mb3JtXS5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBpbnB1dEZpZWxkLnJlcXVpcmVkXCI+LSBSZXF1aXJlZDwvZW0+XG5cdFx0XHRcdFx0XHQ8ZW0gKm5nSWY9XCIhZm9ybUlucHV0LmNvbnRyb2xzW2lucHV0RmllbGQuZm9ybV0uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgZm9ybUlucHV0LmNvbnRyb2xzW2lucHV0RmllbGQuZm9ybV0uaW52YWxpZFwiPi0gSW52YWxpZDwvZW0+XG5cdFx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiaW5wdXRGaWVsZC50eXBlICE9PSAnZGF0ZScgJiYgaW5wdXRGaWVsZC50eXBlICE9PSAnZGF0ZXRpbWUnICYmIGlucHV0RmllbGQudHlwZSAhPT0gJ3N0YXRlJyAmJiBpbnB1dEZpZWxkLnR5cGUgIT09ICd0ZXh0YXJlYScgJiYgaW5wdXRGaWVsZC50eXBlICE9PSAnbnVtYmVyJyAmJiBpbnB1dEZpZWxkLnR5cGUgIT09ICdzZWxlY3QnICYmIGlucHV0RmllbGQudHlwZSAhPT0gJ2Jvb2xlYW4nXCI+XG5cdFx0XHRcdFx0XHQ8aW5wdXQgW2F1dG9mb2N1c109XCJpID09PSAwID8gdHJ1ZSA6IGZhbHNlXCIgW2ZvY3VzXT1cImkgPT09IDAgPyB0cnVlIDogZmFsc2VcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImlucHV0RmllbGQuZm9ybVwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgdmFsaWRhdGVJbnB1dChpbnB1dEZpZWxkLCBmb3JtSW5wdXQpXVwiIFt0eXBlXT1cIihpbnB1dEZpZWxkLnR5cGUgPyBpbnB1dEZpZWxkLnR5cGUgOiAndGV4dCcpXCI+XG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVycm9yTXNnIG9mIGdldEVycm9yTWVzc2FnZXMoaW5wdXRGaWVsZCwgZm9ybUlucHV0KTtcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPnt7ZXJyb3JNc2d9fTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiAqbmdJZj1cImlucHV0RmllbGQudHlwZSA9PT0gJ3NlbGVjdCdcIj5cblx0XHRcdFx0XHRcdFx0PG5nLXNlbGVjdCBbZm9ybUNvbnRyb2xOYW1lXT1cImlucHV0RmllbGQuZm9ybVwiIFtuZ0NsYXNzXT1cIlt2YWxpZGF0ZUlucHV0KGlucHV0RmllbGQsIGZvcm1JbnB1dCldXCIgW3BsYWNlaG9sZGVyXT1cImlucHV0RmllbGQucGxhY2Vob2xkZXJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bmctb3B0aW9uICpuZ0Zvcj1cImxldCBvcHQgb2YgaW5wdXRGaWVsZC5vcHRpb25zXCIgW3ZhbHVlXT1cIm9wdC52YWx1ZVwiIFtkaXNhYmxlZF09XCJvcHQudmFsdWUgPT09ICdkaXNhYmxlZCdcIj57e29wdC50ZXh0fX08L25nLW9wdGlvbj5cblx0XHRcdFx0XHRcdFx0PC9uZy1zZWxlY3Q+XG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVycm9yTXNnIG9mIGdldEVycm9yTWVzc2FnZXMoaW5wdXRGaWVsZCwgZm9ybUlucHV0KTtcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPnt7ZXJyb3JNc2d9fTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiAqbmdJZj1cImlucHV0RmllbGQudHlwZSA9PT0gJ3N0YXRlJ1wiPlxuXHRcdFx0XHRcdFx0XHQ8c2VsZWN0IFtmb3JtQ29udHJvbE5hbWVdPVwiaW5wdXRGaWVsZC5mb3JtXCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCB2YWxpZGF0ZUlucHV0KGlucHV0RmllbGQsIGZvcm1JbnB1dCldXCI+XG5cdFx0XHRcdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGVjdCBTdGF0ZTwvb3B0aW9uPlxuXHRcdFx0XHRcdFx0XHRcdDxvcHRpb24gKm5nRm9yPVwibGV0IHN0YXRlIG9mIHN0YXRlc1wiIFt2YWx1ZV09XCJzdGF0ZVwiPnt7c3RhdGV9fTwvb3B0aW9uPlxuXHRcdFx0XHRcdFx0XHQ8L3NlbGVjdD5cblx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZXJyb3JNc2cgb2YgZ2V0RXJyb3JNZXNzYWdlcyhpbnB1dEZpZWxkLCBmb3JtSW5wdXQpO1wiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+e3tlcnJvck1zZ319PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiaW5wdXRGaWVsZC50eXBlID09PSAndGV4dGFyZWEnXCI+XG5cdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSByb3dzPVwiNFwiIFtmb3JtQ29udHJvbE5hbWVdPVwiaW5wdXRGaWVsZC5mb3JtXCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCB2YWxpZGF0ZUlucHV0KGlucHV0RmllbGQsIGZvcm1JbnB1dCldXCI+PC90ZXh0YXJlYT5cblx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZXJyb3JNc2cgb2YgZ2V0RXJyb3JNZXNzYWdlcyhpbnB1dEZpZWxkLCBmb3JtSW5wdXQpO1wiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+e3tlcnJvck1zZ319PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiaW5wdXRGaWVsZC50eXBlID09PSAnbnVtYmVyJ1wiPlxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgW2Zvcm1Db250cm9sTmFtZV09XCJpbnB1dEZpZWxkLmZvcm1cIiB0eXBlPVwibnVtYmVyXCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCB2YWxpZGF0ZUlucHV0KGlucHV0RmllbGQsIGZvcm1JbnB1dCldXCI+XG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVycm9yTXNnIG9mIGdldEVycm9yTWVzc2FnZXMoaW5wdXRGaWVsZCwgZm9ybUlucHV0KTtcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPnt7ZXJyb3JNc2d9fTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiAqbmdJZj1cImlucHV0RmllbGQudHlwZSA9PT0gJ2RhdGUnXCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBbZm9ybUNvbnRyb2xOYW1lXT1cImlucHV0RmllbGQuZm9ybVwiIHBsYWNlaG9sZGVyPVwieXl5eS1tbS1kZFwiIG5nYkRhdGVwaWNrZXIgW2ZpcnN0RGF5T2ZXZWVrXT1cIjdcIiAjZD1cIm5nYkRhdGVwaWNrZXJcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIHZhbGlkYXRlSW5wdXQoaW5wdXRGaWVsZCwgZm9ybUlucHV0KV1cIiAoY2xpY2spPVwiZC50b2dnbGUoKVwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIiAoY2xpY2spPVwiZC50b2dnbGUoKVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiAqbmdJZj1cImlucHV0RmllbGQudHlwZSA9PT0gJ2RhdGV0aW1lJ1wiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogdG9wO1wiPkRhdGUvVGltZTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IFtmb3JtQ29udHJvbE5hbWVdPVwiaW5wdXRGaWVsZC5mb3JtXCIgcGxhY2Vob2xkZXI9XCJ5eXl5LW1tLWRkXCIgbmdiRGF0ZXBpY2tlciBbZmlyc3REYXlPZldlZWtdPVwiN1wiICNkPVwibmdiRGF0ZXBpY2tlclwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgdmFsaWRhdGVJbnB1dChpbnB1dEZpZWxkLCBmb3JtSW5wdXQpXVwiIChjbGljayk9XCJkLnRvZ2dsZSgpXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIiAoY2xpY2spPVwiZC50b2dnbGUoKVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogdG9wO1wiPiZuYnNwOzwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmdiLXRpbWVwaWNrZXIgW2Zvcm1Db250cm9sTmFtZV09XCJpbnB1dEZpZWxkLmZvcm0gKyAnX3RpbWUnXCIgbWVyaWRpYW49XCJPTlwiIFtuZ0NsYXNzXT1cIlt2YWxpZGF0ZUlucHV0KGlucHV0RmllbGQsIGZvcm1JbnB1dCldXCI+PC9uZ2ItdGltZXBpY2tlcj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgKm5nSWY9XCJpbnB1dEZpZWxkLnR5cGUgPT09ICdib29sZWFuJ1wiIChjbGljayk9XCJmb3JtSW5wdXQuY29udHJvbHNbaW5wdXRGaWVsZC5mb3JtXS5zZXRWYWx1ZSghZm9ybUlucHV0LmNvbnRyb2xzW2lucHV0RmllbGQuZm9ybV0udmFsdWUpXCI+XG5cdFx0XHRcdFx0XHRcdDxpICpuZ0lmPVwiZm9ybUlucHV0LmNvbnRyb2xzW2lucHV0RmllbGQuZm9ybV0udmFsdWVcIiBjbGFzcz1cImZhIGZhLWNoZWNrXCIgc3R5bGU9XCJjb2xvcjogZ3JlZW47IGZvbnQtc2l6ZTogMjRweDtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG5cdFx0XHRcdFx0XHRcdDxpICpuZ0lmPVwiIWZvcm1JbnB1dC5jb250cm9sc1tpbnB1dEZpZWxkLmZvcm1dLnZhbHVlXCIgY2xhc3M9XCJmYSBmYS10aW1lc1wiIHN0eWxlPVwiY29sb3I6IHJlZDsgZm9udC1zaXplOiAyNHB4O1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuXHRcdFx0XHQ8Zm9ybS1idXR0b24gW2Zvcm1dPVwiZm9ybUlucHV0XCI+PC9mb3JtLWJ1dHRvbj5cblx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJfYWN0aXZlTW9kYWwuZGlzbWlzcygpXCI+Q2FuY2VsPC9idXR0b24+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Zvcm0+XG5cdGBcbn0pXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIERpYWxvZ0lucHV0Q29udGVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdEBJbnB1dCgpIHRpdGxlID0gJyc7XG5cdEBJbnB1dCgpIGlucHV0RmllbGRzOiBhbnlbXSA9IFtdO1xuXG5cdGZvcm1JbnB1dDogRm9ybUdyb3VwO1xuXG5cdHN0YXRlczogc3RyaW5nW10gPSBbXG5cdFx0J0FsYWJhbWEnLCAnQWxhc2thJywgJ0FyaXpvbmEnLCAnQXJrYW5zYXMnLCAnQ2FsaWZvcm5pYScsICdDb2xvcmFkbycsICdDb25uZWN0aWN1dCcsICdEZWxhd2FyZScsICdGbG9yaWRhJywgJ0dlb3JnaWEnLCAnSGF3YWlpJywgJ0lkYWhvJywgJ0lsbGlub2lzJywgJ0luZGlhbmEnLCAnSW93YScsICdLYW5zYXMnLCAnS2VudHVja3knLCAnTG91aXNpYW5hJywgJ01haW5lJyxcblx0XHQnTWFyeWxhbmQnLCAnTWFzc2FjaHVzZXR0cycsICdNaWNoaWdhbicsICdNaW5uZXNvdGEnLCAnTWlzc2lzc2lwcGknLCAnTWlzc291cmknLCAnTW9udGFuYScsICdOZWJyYXNrYScsICdOZXZhZGEnLCAnTmV3IEhhbXBzaGlyZScsICdOZXcgSmVyc2V5JywgJ05ldyBNZXhpY28nLCAnTmV3IFlvcmsnLCAnTm9ydGggQ2Fyb2xpbmEnLCAnTm9ydGggRGFrb3RhJywgJ09oaW8nLFxuXHRcdCdPa2xhaG9tYScsICdPcmVnb24nLCAnUGVubnN5bHZhbmlhJywgJ1Job2RlIElzbGFuZCcsICdTb3V0aCBDYXJvbGluYScsICdTb3V0aCBEYWtvdGEnLCAnVGVubmVzc2VlJywgJ1RleGFzJywgJ1V0YWgnLCAnVmVybW9udCcsICdWaXJnaW5pYScsICdXYXNoaW5ndG9uJywgJ1dlc3QgVmlyZ2luaWEnLCAnV2lzY29uc2luJywgJ1d5b21pbmcnXTtcblxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgX2FjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCwgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyKSB7fVxuXG5cdG5nT25Jbml0KCkge1xuXHRcdHRoaXMuZm9ybUlucHV0ID0gdGhpcy5fZmIuZ3JvdXAoe30pO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmlucHV0RmllbGRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5pbnB1dEZpZWxkc1tpXS50eXBlICE9PSAnZGF0ZXRpbWUnKSB7XG5cdFx0XHRcdGlmICh0aGlzLmlucHV0RmllbGRzW2ldLnZhbGlkYXRvcnMgPT09IG51bGwpIHtcblx0XHRcdFx0XHR0aGlzLmZvcm1JbnB1dC5hZGRDb250cm9sKHRoaXMuaW5wdXRGaWVsZHNbaV0uZm9ybSwgbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7dmFsdWU6IHRoaXMuaW5wdXRGaWVsZHNbaV0uZGF0YSwgZGlzYWJsZWQ6IHRoaXMuaW5wdXRGaWVsZHNbaV0uZGlzYWJsZWR9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5mb3JtSW5wdXQuYWRkQ29udHJvbCh0aGlzLmlucHV0RmllbGRzW2ldLmZvcm0sIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woe3ZhbHVlOiB0aGlzLmlucHV0RmllbGRzW2ldLmRhdGEsIGRpc2FibGVkOiB0aGlzLmlucHV0RmllbGRzW2ldLmRpc2FibGVkfSwgdGhpcy5pbnB1dEZpZWxkc1tpXS52YWxpZGF0b3JzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRpZiAodGhpcy5pbnB1dEZpZWxkc1tpXS52YWxpZGF0b3JzID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dGhpcy5mb3JtSW5wdXQuYWRkQ29udHJvbCh0aGlzLmlucHV0RmllbGRzW2ldLmZvcm0sIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woe3ZhbHVlOiB0aGlzLmlucHV0RmllbGRzW2ldLmRhdGFbMF0sIGRpc2FibGVkOiB0aGlzLmlucHV0RmllbGRzW2ldLmRpc2FibGVkfSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuZm9ybUlucHV0LmFkZENvbnRyb2wodGhpcy5pbnB1dEZpZWxkc1tpXS5mb3JtLCBuZXcgVW50eXBlZEZvcm1Db250cm9sKHt2YWx1ZTogdGhpcy5pbnB1dEZpZWxkc1tpXS5kYXRhWzBdLCBkaXNhYmxlZDogdGhpcy5pbnB1dEZpZWxkc1tpXS5kaXNhYmxlZH0sIHRoaXMuaW5wdXRGaWVsZHNbaV0udmFsaWRhdG9ycykpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXMuaW5wdXRGaWVsZHNbaV0udmFsaWRhdG9ycyA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdHRoaXMuZm9ybUlucHV0LmFkZENvbnRyb2wodGhpcy5pbnB1dEZpZWxkc1tpXS5mb3JtICsgJ190aW1lJywgbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7dmFsdWU6IHRoaXMuaW5wdXRGaWVsZHNbaV0uZGF0YVsxXSwgZGlzYWJsZWQ6IHRoaXMuaW5wdXRGaWVsZHNbaV0uZGlzYWJsZWR9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5mb3JtSW5wdXQuYWRkQ29udHJvbCh0aGlzLmlucHV0RmllbGRzW2ldLmZvcm0gKyAnX3RpbWUnLCBuZXcgVW50eXBlZEZvcm1Db250cm9sKHt2YWx1ZTogdGhpcy5pbnB1dEZpZWxkc1tpXS5kYXRhWzFdLCBkaXNhYmxlZDogdGhpcy5pbnB1dEZpZWxkc1tpXS5kaXNhYmxlZH0sIHRoaXMuaW5wdXRGaWVsZHNbaV0udmFsaWRhdG9ycykpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFsaWRhdGVJbnB1dChpbnB1dEZpZWxkLCBmb3JtSW5wdXQpIHtcblxuXHRcdGlmIChpbnB1dEZpZWxkLmRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRGaWVsZC52YWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoZm9ybUlucHV0LmNvbnRyb2xzW2lucHV0RmllbGQuZm9ybV0uaGFzRXJyb3IoW2lucHV0RmllbGQudmFsaWRhdG9yRXJyb3JzW2ldXSkpIHtcblx0XHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodmFsaWQgJiYgZm9ybUlucHV0LmNvbnRyb2xzW2lucHV0RmllbGQuZm9ybV0udmFsdWUgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiAnaXMtdmFsaWQnO1xuXHRcdH1cblx0XHRlbHNlIGlmICghaW5wdXRGaWVsZC52YWxpZGF0b3JzLmxlbmd0aCB8fCAoIWlucHV0RmllbGQucmVxdWlyZWQgJiYgdmFsaWQpKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdFxuXHRcdHJldHVybiAnaXMtaW52YWxpZCc7XG5cdH1cblxuXHRnZXRFcnJvck1lc3NhZ2VzKGlucHV0RmllbGQsIGZvcm1JbnB1dCkge1xuXHRcdGxldCByZXMgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRGaWVsZC52YWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoZm9ybUlucHV0LmNvbnRyb2xzW2lucHV0RmllbGQuZm9ybV0uaGFzRXJyb3IoW2lucHV0RmllbGQudmFsaWRhdG9yRXJyb3JzW2ldXSkpIHtcblx0XHRcdFx0cmVzLnB1c2goaW5wdXRGaWVsZC52YWxpZGF0b3JNc2dbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cbn1cbiJdfQ==
@@ -13,7 +13,7 @@ import { ToastrModule } from 'ngx-toastr';
13
13
  import * as i4 from '@angular/common/http';
14
14
  import { HttpClientModule } from '@angular/common/http';
15
15
  import * as i2 from '@angular/forms';
16
- import { FormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
16
+ import { UntypedFormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
17
17
  import * as i1$5 from 'ngx-device-detector';
18
18
  import { DeviceDetectorService } from 'ngx-device-detector';
19
19
  import * as i1$3 from '@ng-bootstrap/ng-bootstrap';
@@ -2188,11 +2188,27 @@ class DialogInputContent {
2188
2188
  ngOnInit() {
2189
2189
  this.formInput = this._fb.group({});
2190
2190
  for (let i = 0; i < this.inputFields.length; i++) {
2191
- if (this.inputFields[i].validators === null) {
2192
- this.formInput.addControl(this.inputFields[i].form, new FormControl({ value: this.inputFields[i].data, disabled: this.inputFields[i].disabled }));
2191
+ if (this.inputFields[i].type !== 'datetime') {
2192
+ if (this.inputFields[i].validators === null) {
2193
+ this.formInput.addControl(this.inputFields[i].form, new UntypedFormControl({ value: this.inputFields[i].data, disabled: this.inputFields[i].disabled }));
2194
+ }
2195
+ else {
2196
+ this.formInput.addControl(this.inputFields[i].form, new UntypedFormControl({ value: this.inputFields[i].data, disabled: this.inputFields[i].disabled }, this.inputFields[i].validators));
2197
+ }
2193
2198
  }
2194
2199
  else {
2195
- this.formInput.addControl(this.inputFields[i].form, new FormControl({ value: this.inputFields[i].data, disabled: this.inputFields[i].disabled }, this.inputFields[i].validators));
2200
+ if (this.inputFields[i].validators === null) {
2201
+ this.formInput.addControl(this.inputFields[i].form, new UntypedFormControl({ value: this.inputFields[i].data[0], disabled: this.inputFields[i].disabled }));
2202
+ }
2203
+ else {
2204
+ this.formInput.addControl(this.inputFields[i].form, new UntypedFormControl({ value: this.inputFields[i].data[0], disabled: this.inputFields[i].disabled }, this.inputFields[i].validators));
2205
+ }
2206
+ if (this.inputFields[i].validators === null) {
2207
+ this.formInput.addControl(this.inputFields[i].form + '_time', new UntypedFormControl({ value: this.inputFields[i].data[1], disabled: this.inputFields[i].disabled }));
2208
+ }
2209
+ else {
2210
+ this.formInput.addControl(this.inputFields[i].form + '_time', new UntypedFormControl({ value: this.inputFields[i].data[1], disabled: this.inputFields[i].disabled }, this.inputFields[i].validators));
2211
+ }
2196
2212
  }
2197
2213
  }
2198
2214
  }
@@ -2239,7 +2255,7 @@ DialogInputContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
2239
2255
  <label class="form-control-label">{{inputField.label}}</label>
2240
2256
  <em *ngIf="formInput.controls[inputField.form].hasError('required') && inputField.required">- Required</em>
2241
2257
  <em *ngIf="!formInput.controls[inputField.form].hasError('required') && formInput.controls[inputField.form].invalid">- Invalid</em>
2242
- <div *ngIf="inputField.type !== 'state' && inputField.type !== 'textarea' && inputField.type !== 'number' && inputField.type !== 'select' && inputField.type !== 'boolean'">
2258
+ <div *ngIf="inputField.type !== 'date' && inputField.type !== 'datetime' && inputField.type !== 'state' && inputField.type !== 'textarea' && inputField.type !== 'number' && inputField.type !== 'select' && inputField.type !== 'boolean'">
2243
2259
  <input [autofocus]="i === 0 ? true : false" [focus]="i === 0 ? true : false" [formControlName]="inputField.form" [ngClass]="['form-control', validateInput(inputField, formInput)]" [type]="(inputField.type ? inputField.type : 'text')">
2244
2260
  <ng-container *ngFor="let errorMsg of getErrorMessages(inputField, formInput);">
2245
2261
  <div class="invalid-feedback">{{errorMsg}}</div>
@@ -2274,6 +2290,35 @@ DialogInputContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
2274
2290
  <div class="invalid-feedback">{{errorMsg}}</div>
2275
2291
  </ng-container>
2276
2292
  </div>
2293
+ <div *ngIf="inputField.type === 'date'">
2294
+ <div class="input-group">
2295
+ <input [formControlName]="inputField.form" placeholder="yyyy-mm-dd" ngbDatepicker [firstDayOfWeek]="7" #d="ngbDatepicker" [ngClass]="['form-control', validateInput(inputField, formInput)]" (click)="d.toggle()">
2296
+ <div class="input-group-append" (click)="d.toggle()">
2297
+ <div class="input-group-text">
2298
+ <i class="fa fa-calendar" aria-hidden="true"></i>
2299
+ </div>
2300
+ </div>
2301
+ </div>
2302
+ </div>
2303
+ <div *ngIf="inputField.type === 'datetime'">
2304
+ <div class="row" style="align-items: center;">
2305
+ <div class="col-sm-8">
2306
+ <label class="form-control-label" style="align-items: top;">Date/Time</label>
2307
+ <div class="input-group">
2308
+ <input [formControlName]="inputField.form" placeholder="yyyy-mm-dd" ngbDatepicker [firstDayOfWeek]="7" #d="ngbDatepicker" [ngClass]="['form-control', validateInput(inputField, formInput)]" (click)="d.toggle()">
2309
+ <div class="input-group-append" (click)="d.toggle()">
2310
+ <div class="input-group-text">
2311
+ <i class="fa fa-calendar" aria-hidden="true"></i>
2312
+ </div>
2313
+ </div>
2314
+ </div>
2315
+ </div>
2316
+ <div class="col-sm-4">
2317
+ <label class="form-control-label" style="align-items: top;">&nbsp;</label>
2318
+ <ngb-timepicker [formControlName]="inputField.form + '_time'" meridian="ON" [ngClass]="[validateInput(inputField, formInput)]"></ngb-timepicker>
2319
+ </div>
2320
+ </div>
2321
+ </div>
2277
2322
  <div *ngIf="inputField.type === 'boolean'" (click)="formInput.controls[inputField.form].setValue(!formInput.controls[inputField.form].value)">
2278
2323
  <i *ngIf="formInput.controls[inputField.form].value" class="fa fa-check" style="color: green; font-size: 24px;" aria-hidden="true"></i>
2279
2324
  <i *ngIf="!formInput.controls[inputField.form].value" class="fa fa-times" style="color: red; font-size: 24px;" aria-hidden="true"></i>
@@ -2286,7 +2331,7 @@ DialogInputContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
2286
2331
  <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>
2287
2332
  </div>
2288
2333
  </form>
2289
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormButtonComponent, selector: "form-button", inputs: ["form", "disabled", "type"] }, { kind: "component", type: i4$1.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i4$1.NgOptionComponent, selector: "ng-option", inputs: ["value", "disabled"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: FocusDirective, selector: "[focus]", inputs: ["focus"] }] });
2334
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$3.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "component", type: i1$3.NgbTimepicker, selector: "ngb-timepicker", inputs: ["meridian", "spinners", "seconds", "hourStep", "minuteStep", "secondStep", "readonlyInputs", "size"] }, { kind: "component", type: FormButtonComponent, selector: "form-button", inputs: ["form", "disabled", "type"] }, { kind: "component", type: i4$1.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i4$1.NgOptionComponent, selector: "ng-option", inputs: ["value", "disabled"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: FocusDirective, selector: "[focus]", inputs: ["focus"] }] });
2290
2335
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DialogInputContent, decorators: [{
2291
2336
  type: Component,
2292
2337
  args: [{
@@ -2304,7 +2349,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2304
2349
  <label class="form-control-label">{{inputField.label}}</label>
2305
2350
  <em *ngIf="formInput.controls[inputField.form].hasError('required') && inputField.required">- Required</em>
2306
2351
  <em *ngIf="!formInput.controls[inputField.form].hasError('required') && formInput.controls[inputField.form].invalid">- Invalid</em>
2307
- <div *ngIf="inputField.type !== 'state' && inputField.type !== 'textarea' && inputField.type !== 'number' && inputField.type !== 'select' && inputField.type !== 'boolean'">
2352
+ <div *ngIf="inputField.type !== 'date' && inputField.type !== 'datetime' && inputField.type !== 'state' && inputField.type !== 'textarea' && inputField.type !== 'number' && inputField.type !== 'select' && inputField.type !== 'boolean'">
2308
2353
  <input [autofocus]="i === 0 ? true : false" [focus]="i === 0 ? true : false" [formControlName]="inputField.form" [ngClass]="['form-control', validateInput(inputField, formInput)]" [type]="(inputField.type ? inputField.type : 'text')">
2309
2354
  <ng-container *ngFor="let errorMsg of getErrorMessages(inputField, formInput);">
2310
2355
  <div class="invalid-feedback">{{errorMsg}}</div>
@@ -2339,6 +2384,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2339
2384
  <div class="invalid-feedback">{{errorMsg}}</div>
2340
2385
  </ng-container>
2341
2386
  </div>
2387
+ <div *ngIf="inputField.type === 'date'">
2388
+ <div class="input-group">
2389
+ <input [formControlName]="inputField.form" placeholder="yyyy-mm-dd" ngbDatepicker [firstDayOfWeek]="7" #d="ngbDatepicker" [ngClass]="['form-control', validateInput(inputField, formInput)]" (click)="d.toggle()">
2390
+ <div class="input-group-append" (click)="d.toggle()">
2391
+ <div class="input-group-text">
2392
+ <i class="fa fa-calendar" aria-hidden="true"></i>
2393
+ </div>
2394
+ </div>
2395
+ </div>
2396
+ </div>
2397
+ <div *ngIf="inputField.type === 'datetime'">
2398
+ <div class="row" style="align-items: center;">
2399
+ <div class="col-sm-8">
2400
+ <label class="form-control-label" style="align-items: top;">Date/Time</label>
2401
+ <div class="input-group">
2402
+ <input [formControlName]="inputField.form" placeholder="yyyy-mm-dd" ngbDatepicker [firstDayOfWeek]="7" #d="ngbDatepicker" [ngClass]="['form-control', validateInput(inputField, formInput)]" (click)="d.toggle()">
2403
+ <div class="input-group-append" (click)="d.toggle()">
2404
+ <div class="input-group-text">
2405
+ <i class="fa fa-calendar" aria-hidden="true"></i>
2406
+ </div>
2407
+ </div>
2408
+ </div>
2409
+ </div>
2410
+ <div class="col-sm-4">
2411
+ <label class="form-control-label" style="align-items: top;">&nbsp;</label>
2412
+ <ngb-timepicker [formControlName]="inputField.form + '_time'" meridian="ON" [ngClass]="[validateInput(inputField, formInput)]"></ngb-timepicker>
2413
+ </div>
2414
+ </div>
2415
+ </div>
2342
2416
  <div *ngIf="inputField.type === 'boolean'" (click)="formInput.controls[inputField.form].setValue(!formInput.controls[inputField.form].value)">
2343
2417
  <i *ngIf="formInput.controls[inputField.form].value" class="fa fa-check" style="color: green; font-size: 24px;" aria-hidden="true"></i>
2344
2418
  <i *ngIf="!formInput.controls[inputField.form].value" class="fa fa-times" style="color: red; font-size: 24px;" aria-hidden="true"></i>