@leanix/components 0.2.247 → 0.2.250

Sign up to get free protection for your applications and to get access to all the features.
@@ -99,15 +99,6 @@ export class DateInputComponent {
99
99
  this.showDatepicker = false;
100
100
  }
101
101
  }
102
- onTab(forward) {
103
- if (forward && this.showDatepicker) {
104
- this.hidePopup();
105
- return false; // Prevent tab for now as ng2-bootstrap datepicker has a tabstop: 2 tabs needed to navigate for now
106
- // TODO: Check again in new version
107
- }
108
- this.hidePopup();
109
- return true;
110
- }
111
102
  onDateStringChange(newDateString, emit = true) {
112
103
  if (isValidDateString(newDateString)) {
113
104
  const date = createDateFromDateString(newDateString);
@@ -189,7 +180,7 @@ DateInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", versi
189
180
  DateInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: DateInputComponent, selector: "lx-date-input", inputs: { date: "date", dateString: "dateString", valueAccessor: "valueAccessor", inputId: "inputId", renderingStyle: "renderingStyle", placeholder: "placeholder", datepickerMode: "datepickerMode", initDateString: "initDateString", minDate: "minDate", maxDate: "maxDate", minMode: "minMode", maxMode: "maxMode", showWeeks: "showWeeks", formatDay: "formatDay", formatMonth: "formatMonth", formatYear: "formatYear", formatDayHeader: "formatDayHeader", formatDayTitle: "formatDayTitle", formatMonthTitle: "formatMonthTitle", startingDay: "startingDay", yearRange: "yearRange", onlyCurrentMonth: "onlyCurrentMonth", shortcutPropagation: "shortcutPropagation", customClass: "customClass", disabled: "disabled", dateDisabled: "dateDisabled" }, outputs: { dateChange: "dateChange", dateStringChange: "dateStringChange" }, providers: [
190
181
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateInputComponent), multi: true },
191
182
  { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateInputComponent), multi: true }
192
- ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"backdrop\" *ngIf=\"showDatepicker\" (click)=\"hidePopup()\"></div>\n<span class=\"wrapper\" [class.forLink]=\"renderingStyle === 'LINK'\" [class.has-error]=\"hasError\">\n <input\n #input\n class=\"form-control dateControl\"\n placeholder=\"{{ placeholder }}\"\n [id]=\"inputId\"\n [(ngModel)]=\"dateString\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onDateStringChange($event)\"\n (focus)=\"showPopup()\"\n (blur)=\"onBlur()\"\n (keydown.enter)=\"hidePopup()\"\n (keydown.escape)=\"hidePopup()\"\n (keydown.tab)=\"onTab(true)\"\n (keydown.shift.tab)=\"onTab(false)\"\n [class.text-danger]=\"hasError\"\n *ngIf=\"renderingStyle === 'INPUT'\"\n />\n <a class=\"dateControl\" (click)=\"togglePopup()\" *ngIf=\"renderingStyle === 'LINK'\">{{ date | lxDate: dateFormat }}</a>\n <div class=\"datepickerContainer\">\n <div class=\"calendar\">\n <datepicker\n class=\"popup\"\n *ngIf=\"showDatepicker\"\n (selectionDone)=\"onSelectionDone($event)\"\n [ngModel]=\"date\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [shortcutPropagation]=\"shortcutPropagation\"\n [customClass]=\"customClass\"\n [dateDisabled]=\"dateDisabled\"\n >\n </datepicker>\n </div>\n </div>\n</span>\n", styles: [".backdrop{position:fixed;top:0;right:0;bottom:0;left:0}.datepickerContainer{position:absolute;z-index:700}.wrapper .forLink .popup{top:15px}.dateControl,.calendar{position:relative}.popup{position:relative;left:0;z-index:700;border-radius:3px}.popup ::ng-deep .text-info{color:#2a303d}.popup ::ng-deep .text-muted{color:#99a5bb}.popup ::ng-deep .btn.active,.popup ::ng-deep .btn.active .text-info{color:#fff;background-color:#2a303d}.popup ::ng-deep .well{margin:0;border:1px solid #2a303d}:host-context(.input-group) .datepickerContainer{top:100%}\n"], components: [{ type: i1.DatePickerComponent, selector: "datepicker", inputs: ["datepickerMode", "showWeeks", "activeDate", "initDate", "minDate", "maxDate", "minMode", "maxMode", "formatDay", "formatMonth", "formatYear", "formatDayHeader", "formatDayTitle", "formatMonthTitle", "startingDay", "yearRange", "onlyCurrentMonth", "shortcutPropagation", "monthColLimit", "yearColLimit", "customClass", "dateDisabled", "dayDisabled"], outputs: ["selectionDone", "activeDateChange"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "lxDate": i4.CustomDatePipe } });
183
+ ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"backdrop\" *ngIf=\"showDatepicker\" (click)=\"hidePopup()\"></div>\n<span class=\"wrapper\" [class.forLink]=\"renderingStyle === 'LINK'\" [class.has-error]=\"hasError\">\n <input\n #input\n class=\"form-control dateControl\"\n placeholder=\"{{ placeholder }}\"\n [id]=\"inputId\"\n [(ngModel)]=\"dateString\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onDateStringChange($event)\"\n (focus)=\"showPopup()\"\n (blur)=\"onBlur()\"\n (keydown.enter)=\"hidePopup()\"\n (keydown.escape)=\"hidePopup()\"\n (keydown.tab)=\"hidePopup()\"\n (keydown.shift.tab)=\"hidePopup()\"\n [class.text-danger]=\"hasError\"\n *ngIf=\"renderingStyle === 'INPUT'\"\n />\n <a class=\"dateControl\" (click)=\"togglePopup()\" *ngIf=\"renderingStyle === 'LINK'\">{{ date | lxDate: dateFormat }}</a>\n <div class=\"datepickerContainer\">\n <div class=\"calendar\">\n <datepicker\n class=\"popup\"\n *ngIf=\"showDatepicker\"\n (selectionDone)=\"onSelectionDone($event)\"\n [ngModel]=\"date\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [shortcutPropagation]=\"shortcutPropagation\"\n [customClass]=\"customClass\"\n [dateDisabled]=\"dateDisabled\"\n >\n </datepicker>\n </div>\n </div>\n</span>\n", styles: [".backdrop{position:fixed;top:0;right:0;bottom:0;left:0}.datepickerContainer{position:absolute;z-index:700}.wrapper .forLink .popup{top:15px}.dateControl,.calendar{position:relative}.popup{position:relative;left:0;z-index:700;border-radius:3px}.popup ::ng-deep .text-info{color:#2a303d}.popup ::ng-deep .text-muted{color:#99a5bb}.popup ::ng-deep .btn.active,.popup ::ng-deep .btn.active .text-info{color:#fff;background-color:#2a303d}.popup ::ng-deep .well{margin:0;border:1px solid #2a303d}:host-context(.input-group) .datepickerContainer{top:100%}\n"], components: [{ type: i1.DatePickerComponent, selector: "datepicker", inputs: ["datepickerMode", "showWeeks", "activeDate", "initDate", "minDate", "maxDate", "minMode", "maxMode", "formatDay", "formatMonth", "formatYear", "formatDayHeader", "formatDayTitle", "formatMonthTitle", "startingDay", "yearRange", "onlyCurrentMonth", "shortcutPropagation", "monthColLimit", "yearColLimit", "customClass", "dateDisabled", "dayDisabled"], outputs: ["selectionDone", "activeDateChange"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "lxDate": i4.CustomDatePipe } });
193
184
  __decorate([
194
185
  Observe('initDateString')
195
186
  ], DateInputComponent.prototype, "initDateString$", void 0);
@@ -198,7 +189,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
198
189
  args: [{ selector: 'lx-date-input', providers: [
199
190
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateInputComponent), multi: true },
200
191
  { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateInputComponent), multi: true }
201
- ], template: "<div class=\"backdrop\" *ngIf=\"showDatepicker\" (click)=\"hidePopup()\"></div>\n<span class=\"wrapper\" [class.forLink]=\"renderingStyle === 'LINK'\" [class.has-error]=\"hasError\">\n <input\n #input\n class=\"form-control dateControl\"\n placeholder=\"{{ placeholder }}\"\n [id]=\"inputId\"\n [(ngModel)]=\"dateString\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onDateStringChange($event)\"\n (focus)=\"showPopup()\"\n (blur)=\"onBlur()\"\n (keydown.enter)=\"hidePopup()\"\n (keydown.escape)=\"hidePopup()\"\n (keydown.tab)=\"onTab(true)\"\n (keydown.shift.tab)=\"onTab(false)\"\n [class.text-danger]=\"hasError\"\n *ngIf=\"renderingStyle === 'INPUT'\"\n />\n <a class=\"dateControl\" (click)=\"togglePopup()\" *ngIf=\"renderingStyle === 'LINK'\">{{ date | lxDate: dateFormat }}</a>\n <div class=\"datepickerContainer\">\n <div class=\"calendar\">\n <datepicker\n class=\"popup\"\n *ngIf=\"showDatepicker\"\n (selectionDone)=\"onSelectionDone($event)\"\n [ngModel]=\"date\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [shortcutPropagation]=\"shortcutPropagation\"\n [customClass]=\"customClass\"\n [dateDisabled]=\"dateDisabled\"\n >\n </datepicker>\n </div>\n </div>\n</span>\n", styles: [".backdrop{position:fixed;top:0;right:0;bottom:0;left:0}.datepickerContainer{position:absolute;z-index:700}.wrapper .forLink .popup{top:15px}.dateControl,.calendar{position:relative}.popup{position:relative;left:0;z-index:700;border-radius:3px}.popup ::ng-deep .text-info{color:#2a303d}.popup ::ng-deep .text-muted{color:#99a5bb}.popup ::ng-deep .btn.active,.popup ::ng-deep .btn.active .text-info{color:#fff;background-color:#2a303d}.popup ::ng-deep .well{margin:0;border:1px solid #2a303d}:host-context(.input-group) .datepickerContainer{top:100%}\n"] }]
192
+ ], template: "<div class=\"backdrop\" *ngIf=\"showDatepicker\" (click)=\"hidePopup()\"></div>\n<span class=\"wrapper\" [class.forLink]=\"renderingStyle === 'LINK'\" [class.has-error]=\"hasError\">\n <input\n #input\n class=\"form-control dateControl\"\n placeholder=\"{{ placeholder }}\"\n [id]=\"inputId\"\n [(ngModel)]=\"dateString\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onDateStringChange($event)\"\n (focus)=\"showPopup()\"\n (blur)=\"onBlur()\"\n (keydown.enter)=\"hidePopup()\"\n (keydown.escape)=\"hidePopup()\"\n (keydown.tab)=\"hidePopup()\"\n (keydown.shift.tab)=\"hidePopup()\"\n [class.text-danger]=\"hasError\"\n *ngIf=\"renderingStyle === 'INPUT'\"\n />\n <a class=\"dateControl\" (click)=\"togglePopup()\" *ngIf=\"renderingStyle === 'LINK'\">{{ date | lxDate: dateFormat }}</a>\n <div class=\"datepickerContainer\">\n <div class=\"calendar\">\n <datepicker\n class=\"popup\"\n *ngIf=\"showDatepicker\"\n (selectionDone)=\"onSelectionDone($event)\"\n [ngModel]=\"date\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [shortcutPropagation]=\"shortcutPropagation\"\n [customClass]=\"customClass\"\n [dateDisabled]=\"dateDisabled\"\n >\n </datepicker>\n </div>\n </div>\n</span>\n", styles: [".backdrop{position:fixed;top:0;right:0;bottom:0;left:0}.datepickerContainer{position:absolute;z-index:700}.wrapper .forLink .popup{top:15px}.dateControl,.calendar{position:relative}.popup{position:relative;left:0;z-index:700;border-radius:3px}.popup ::ng-deep .text-info{color:#2a303d}.popup ::ng-deep .text-muted{color:#99a5bb}.popup ::ng-deep .btn.active,.popup ::ng-deep .btn.active .text-info{color:#fff;background-color:#2a303d}.popup ::ng-deep .well{margin:0;border:1px solid #2a303d}:host-context(.input-group) .datepickerContainer{top:100%}\n"] }]
202
193
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
203
194
  type: Inject,
204
195
  args: [DATE_FORMATS]
@@ -267,4 +258,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
267
258
  type: ViewChild,
268
259
  args: ['input']
269
260
  }] } });
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxQyxhQUFhLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUUsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQXVCLE1BQU0sb0NBQW9DLENBQUM7QUFDdkcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHdCQUF3QixFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7QUFLbEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoRCxNQUFN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QWdCO3NCQUEvQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1UsbUJBQW1CO3NCQUFsQyxLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBRVUsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUVjLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZm9ybWF0LCBzdGFydE9mRGF5IH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgRGF0ZUZvcm1hdHRlciwgRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEQVRFX0ZOX0xPQ0FMRSwgREFURV9GT1JNQVRTLCBEYXRlRm9ybWF0c1Byb3ZpZGVyIH0gZnJvbSAnLi4vLi4vLi4vY29yZS11aS9jb3JlLXVpLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBjb252ZXJ0RGF0ZVRvTG9jYWxlRGF0ZVN0cmluZywgY3JlYXRlRGF0ZUZyb21EYXRlU3RyaW5nLCBpc1ZhbGlkRGF0ZVN0cmluZyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kYXRlLWhlbHBlcnMnO1xuaW1wb3J0IHsgT2JzZXJ2ZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9vYnNlcnZlJztcblxuLy8gSW5wdXQgKyBuZzItYm9vdHN0cmFwIGRhdGVwaWNrZXJcbmV4cG9ydCB0eXBlIERhdGVJbnB1dFJlbmRlcmluZ1N0eWxlID0gJ0lOUFVUJyB8ICdMSU5LJztcblxuY29uc3QgREVGQVVMVF9NSU5fREFURSA9IG5ldyBEYXRlKCcwMDAwLTAxLTAxJyk7XG5jb25zdCBERUZBVUxUX01BWF9EQVRFID0gbmV3IERhdGUoJzk5OTktMTItMzEnKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbHgtZGF0ZS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnZGF0ZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydkYXRlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVJbnB1dENvbXBvbmVudCksIG11bHRpOiB0cnVlIH0sXG4gICAgeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlSW5wdXRDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7IC8vIG1haW4gZGF0ZSBpbnB1dDsgdGhpcyBpcyBhbHNvIHRoZSBvbmUgdXNlZCBmb3IgbmdNb2RlbCAmIGZvcm1Db250cm9sIVxuICBAT3V0cHV0KCkgZGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+KCk7IC8vIHRyaWdnZXJlZCB3aGVuZXZlciB0aGUgZGF0ZSBjaGFuZ2VzXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRlU3RyaW5nOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gc2Vjb25kYXJ5LCBhbHRlcm5hdGl2ZSBpbnB1dCB3aXRoIGRhdGUgc3RyaW5nXG4gIEBPdXRwdXQoKSBkYXRlU3RyaW5nQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBudWxsPigpOyAvLyB0cmlnZ2VyZWQgd2hlbmV2ZXIgdGhlIGRhdGUgY2hhbmdlc1xuICAvLyBEZXRlcm1pbmUgd2hldGhlciBmb3JtR3JvdXAncyB2YWx1ZSBhY2Nlc3NvciBpcyBhY2Nlc3NpbmcgdGhlIHNlbGVjdGVkIElEcyBvciB0aGUgc2VsZWN0ZWQgb2JqZWN0c1xuICBASW5wdXQoKSBwdWJsaWMgdmFsdWVBY2Nlc3NvcjogJ2RhdGUnIHwgJ2RhdGVTdHJpbmcnID0gJ2RhdGUnO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBpbnB1dElkOiBzdHJpbmcgPSAnJzsgLy8gaWQgdG8gYmUgc2V0IG9uIGlucHV0IHRvIGNvcnJlc3BvbmQgdG8gb3V0c2lkZSBsYWJlbFxuICBASW5wdXQoKSBwdWJsaWMgcmVuZGVyaW5nU3R5bGU6IERhdGVJbnB1dFJlbmRlcmluZ1N0eWxlID0gJ0lOUFVUJztcbiAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAneXl5eS1tbS1kZCc7XG5cbiAgLy8tLS0gSW5wdXRzIHJlcGxpY2F0ZWQgZnJvbSBkYXRlcGlja2VyOyAoc2VsZWN0aW9uRG9uZSkgaXMgbm90IG5lZWRlZCwgYXMgKGRhdGVDaGFuZ2UpIGlzIGVxdWl2YWxlblxuICBASW5wdXQoKSBwdWJsaWMgZGF0ZXBpY2tlck1vZGU6IHN0cmluZyA9ICdkYXknOyAvLyBzZXRzIGRhdGVwaWNrZXIgbW9kZSwgc3VwcG9ydHM6IGRheSwgbW9udGgsIHllYXJcbiAgQElucHV0KCkgaW5pdERhdGVTdHJpbmchOiBzdHJpbmc7IC8vIGRlZmF1bHQgZGF0ZSB0byBzaG93IGlmIG5nLW1vZGVsIHZhbHVlIGlzIG5vdCBzcGVjaWZpZWRcbiAgQE9ic2VydmUoJ2luaXREYXRlU3RyaW5nJykgaW5pdERhdGVTdHJpbmckITogT2JzZXJ2YWJsZTxzdHJpbmc+OyAvLyBkZWZhdWx0IGRhdGUgdG8gc2hvdyBpZiBuZy1tb2RlbCB2YWx1ZSBpcyBub3Qgc3BlY2lmaWVkXG4gIEBJbnB1dCgpIHB1YmxpYyBtaW5EYXRlID0gREVGQVVMVF9NSU5fREFURTsgLy8gb2xkZXN0IHNlbGVjdGFibGUgZGF0ZVxuICBASW5wdXQoKSBwdWJsaWMgbWF4RGF0ZSA9IERFRkFVTFRfTUFYX0RBVEU7IC8vIGxhdGVzdCBzZWxlY3RhYmxlIGRhdGVcbiAgQElucHV0KCkgcHVibGljIG1pbk1vZGU6IHN0cmluZyA9ICdkYXknOyAvLyBzZXQgbG93ZXIgZGF0ZXBpY2tlciBtb2RlLCBzdXBwb3J0czogZGF5LCBtb250aCwgeWVhclxuICBASW5wdXQoKSBwdWJsaWMgbWF4TW9kZTogc3RyaW5nID0gJ3llYXInOyAvLyBzZXRzIHVwcGVyIGRhdGVwaWNrZXIgbW9kZSwgc3VwcG9ydHM6IGRheSwgbW9udGgsIHllYXJcbiAgQElucHV0KCkgcHVibGljIHNob3dXZWVrczogYm9vbGVhbiA9IHRydWU7IC8vIGlmIGZhbHNlIHdlZWsgbnVtYmVycyB3aWxsIGJlIGhpZGRlblxuICBASW5wdXQoKSBwdWJsaWMgZm9ybWF0RGF5OiBzdHJpbmcgPSAnREQnOyAvLyBmb3JtYXQgb2YgZGF5IGluIG1vbnRoXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtYXRNb250aDogc3RyaW5nID0gJ01NTU0nOyAvLyBmb3JtYXQgb2YgbW9udGggaW4geWVhclxuICBASW5wdXQoKSBwdWJsaWMgZm9ybWF0WWVhcjogc3RyaW5nID0gJ1lZWVknOyAvLyBmb3JtYXQgb2YgeWVhciBpbiB5ZWFyIHJhbmdlXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtYXREYXlIZWFkZXI6IHN0cmluZyA9ICdkZCc7IC8vIGZvcm1hdCBvZiBkYXkgaW4gd2VlayBoZWFkZXJcbiAgQElucHV0KCkgcHVibGljIGZvcm1hdERheVRpdGxlOiBzdHJpbmcgPSAnTU1NTSBZWVlZJzsgLy8gZm9ybWF0IG9mIHRpdGxlIHdoZW4gc2VsZWN0aW5nIGRheVxuICBASW5wdXQoKSBwdWJsaWMgZm9ybWF0TW9udGhUaXRsZTogc3RyaW5nID0gJ1lZWVknOyAvLyBmb3JtYXQgb2YgdGl0bGUgd2hlbiBzZWxlY3RpbmcgbW9udGhcbiAgQElucHV0KCkgc3RhcnRpbmdEYXk6IG51bWJlciA9IDA7IC8vIHN0YXJ0aW5nIGRheSBvZiB0aGUgd2VlayBmcm9tIDAtNiAoMD1TdW5kYXksIC4uLiwgNj1TYXR1cmRheSkgcHVibGljXG4gIEBJbnB1dCgpIHB1YmxpYyB5ZWFyUmFuZ2U6IG51bWJlciA9IDIwOyAvLyBudW1iZXIgb2YgeWVhcnMgZGlzcGxheWVkIGluIHllYXIgc2VsZWN0aW9uXG4gIEBJbnB1dCgpIHB1YmxpYyBvbmx5Q3VycmVudE1vbnRoOiBib29sZWFuID0gZmFsc2U7IC8vIGlmIHRydWUgb25seSBkYXRlcyBmcm9tIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIG1vbnRoIHdpbGwgYmUgc2hvd25cbiAgQElucHV0KCkgcHVibGljIHNob3J0Y3V0UHJvcGFnYXRpb246IGJvb2xlYW4gPSBmYWxzZTsgLy8gIGlmIHRydWUgc2hvcnRjdXRgcyBldmVudCBwcm9wYWdhdGlvbiB3aWxsIGJlIGRpc2FibGVkXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21DbGFzczogeyBkYXRlOiBEYXRlOyBtb2RlOiBzdHJpbmc7IGNsYXp6OiBzdHJpbmcgfVtdID0gW107IC8vIGFycmF5IG9mIGN1c3RvbSBjc3MgY2xhc3NlcyB0byBiZSBhcHBsaWVkIHRvXG4gIC8vIHRhcmdldGVkIGRhdGVzXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZCE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRlRGlzYWJsZWQ6IHsgZGF0ZTogRGF0ZTsgbW9kZTogc3RyaW5nIH1bXSA9IFtdOyAvLyBhcnJheSBvZiBkaXNhYmxlZCBkYXRlcyBpZiBtb2RlIGlzIGRheSwgb3IgeWVhcnMsIGV0Yy5cblxuICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBzaG93RGF0ZXBpY2tlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBkYXRlRm9ybWF0OiBzdHJpbmc7XG4gIGluaXREYXRlITogRGF0ZTtcblxuICByZWFkb25seSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLy0tIEltcGxlbWVudCBDb250cm9sVmFsdWVBY2Nlc3NvclxuICBwcml2YXRlIGZvcm1Db250cm9sITogRm9ybUNvbnRyb2w7XG4gIGhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIG9uVG91Y2hlZCE6ICgpID0+IHZvaWQ7XG5cbiAgcHJvcGFnYXRlQ2hhbmdlID0gKF9kYXRlOiBEYXRlIHwgbnVsbCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChEQVRFX0ZPUk1BVFMpIHByaXZhdGUgZGF0ZUZvcm1hdHNQcm92aWRlcjogRGF0ZUZvcm1hdHNQcm92aWRlcixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERBVEVfRk5fTE9DQUxFKSBwcml2YXRlIGdldERhdGVGbkxvY2FsZT86IEZ1bmN0aW9uXG4gICkge1xuICAgIHRoaXMuZGF0ZUZvcm1hdCA9IHRoaXMuZGF0ZUZvcm1hdHNQcm92aWRlci5nZXREYXRlRm9ybWF0KCk7XG4gICAgLy8gUGF0Y2ggRGF0ZVBpY2tlciB1bnRpbCBodHRwczovL2dpdGh1Yi5jb20vdmFsb3Itc29mdHdhcmUvbmcyLWJvb3RzdHJhcC9pc3N1ZXMvMTM4NSBpcyByZXNvbHZlZFxuICAgIGNvbnN0IHdyaXRlVmFsdWUgPSBEYXRlUGlja2VyQ29tcG9uZW50LnByb3RvdHlwZS53cml0ZVZhbHVlO1xuICAgIERhdGVQaWNrZXJDb21wb25lbnQucHJvdG90eXBlLndyaXRlVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gd3JpdGVWYWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMgYXMgYW55KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gU29tZWhvdyBkYXRlcGlja2VyIGRvZXMgdXNlIGEgc2VwYXJhdGUgbW9tZW50IGluc3RhbmNlIHRoYW4gd2UgZG8uIFRoYXQgb25lIHJ1bnMgb24gbG9jYWxlIGVuIGJ5IGRlZmF1bHQuXG4gICAgLy8gU28gd2UgcGF0Y2ggdGhlIGZvcm1hdCBmdW5jdGlvbiBoZXJlIHRvIHVzZSBvdXIgbW9tZW50IGluc3RhbmNlLlxuICAgIC8vIE1heWJlIGl0IHdpbGwgYmUgZml4ZWQgd2l0aDogaHR0cHM6Ly9naXRodWIuY29tL3ZhbG9yLXNvZnR3YXJlL25neC1ib290c3RyYXAvaXNzdWVzLzQ1NVxuICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuZ2V0RGF0ZUZuTG9jYWxlID8gdGhpcy5nZXREYXRlRm5Mb2NhbGUoKSA6IG51bGw7XG4gICAgRGF0ZUZvcm1hdHRlci5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKGRhdGU6IERhdGUsIGY6IHN0cmluZykge1xuICAgICAgcmV0dXJuIGZvcm1hdChkYXRlLCBmLCB7IGxvY2FsZSB9KTtcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0RGF0ZVN0cmluZyQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKChkYXRlKSA9PiB7XG4gICAgICB0aGlzLmluaXREYXRlID0gY3JlYXRlRGF0ZUZyb21EYXRlU3RyaW5nKGRhdGUpID8/IHN0YXJ0T2ZEYXkobmV3IERhdGUoKSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydkYXRlJ10pIHtcbiAgICAgIHRoaXMuZGF0ZVN0cmluZyA9IHRoaXMuZGF0ZSA/IGNvbnZlcnREYXRlVG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMuZGF0ZSkgOiBudWxsO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlc1snZGF0ZVN0cmluZyddKSB7XG4gICAgICB0aGlzLm9uRGF0ZVN0cmluZ0NoYW5nZSh0aGlzLmRhdGVTdHJpbmcsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1cygpIHtcbiAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93UG9wdXAoKSB7XG4gICAgdGhpcy5zaG93RGF0ZXBpY2tlciA9IHRydWU7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlUG9wdXAoKSB7XG4gICAgdGhpcy5zaG93RGF0ZXBpY2tlciA9ICF0aGlzLnNob3dEYXRlcGlja2VyO1xuICB9XG5cbiAgcHVibGljIGhpZGVQb3B1cCgpIHtcbiAgICBpZiAodGhpcy5zaG93RGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5zaG93RGF0ZXBpY2tlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG9uVGFiKGZvcndhcmQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoZm9yd2FyZCAmJiB0aGlzLnNob3dEYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLmhpZGVQb3B1cCgpO1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBQcmV2ZW50IHRhYiBmb3Igbm93IGFzIG5nMi1ib290c3RyYXAgZGF0ZXBpY2tlciBoYXMgYSB0YWJzdG9wOiAyIHRhYnMgbmVlZGVkIHRvIG5hdmlnYXRlIGZvciBub3dcbiAgICAgIC8vIFRPRE86IENoZWNrIGFnYWluIGluIG5ldyB2ZXJzaW9uXG4gICAgfVxuICAgIHRoaXMuaGlkZVBvcHVwKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvbkRhdGVTdHJpbmdDaGFuZ2UobmV3RGF0ZVN0cmluZzogc3RyaW5nIHwgbnVsbCwgZW1pdDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAoaXNWYWxpZERhdGVTdHJpbmcobmV3RGF0ZVN0cmluZykpIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBjcmVhdGVEYXRlRnJvbURhdGVTdHJpbmcobmV3RGF0ZVN0cmluZyk7XG4gICAgICB0aGlzLnVwZGF0ZURhdGUoZGF0ZSwgZW1pdCk7XG4gICAgfSBlbHNlIGlmIChuZXdEYXRlU3RyaW5nID09PSBudWxsIHx8IG5ld0RhdGVTdHJpbmcgPT09ICcnKSB7XG4gICAgICB0aGlzLnVwZGF0ZURhdGUobnVsbCwgZW1pdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25TZWxlY3Rpb25Eb25lKG5ld0RhdGU6IERhdGUpIHtcbiAgICB0aGlzLnVwZGF0ZURhdGUobmV3RGF0ZSk7XG4gICAgdGhpcy5oaWRlUG9wdXAoKTtcbiAgfVxuXG4gIG9uQmx1cigpIHtcbiAgICBpZiAodGhpcy5vblRvdWNoZWQpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlKGRhdGU6IERhdGUgfCBudWxsLCBlbWl0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMuZGF0ZSA9IGRhdGU7XG4gICAgdGhpcy5kYXRlU3RyaW5nID0gdGhpcy5kYXRlID8gY29udmVydERhdGVUb0xvY2FsZURhdGVTdHJpbmcodGhpcy5kYXRlKSA6ICcnO1xuICAgIGlmIChlbWl0KSB7XG4gICAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdChkYXRlKTtcbiAgICAgIHRoaXMuZGF0ZVN0cmluZ0NoYW5nZS5lbWl0KHRoaXMuZGF0ZVN0cmluZyk7XG4gICAgfVxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKGRhdGUpO1xuICAgIHRoaXMucmVjaGVja0Vycm9ycygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNoZWNrRXJyb3JzKCkge1xuICAgIHRoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbCkge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuICB9XG5cbiAgLy8tLS0gSW1wbGVtZW50IENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIC8qKiBXcml0ZSBhIG5ldyB2YWx1ZSB0byB0aGUgZWxlbWVudC4gKi9cbiAgd3JpdGVWYWx1ZShuZXdEYXRlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMudmFsdWVBY2Nlc3NvciA9PT0gJ2RhdGUnKSB7XG4gICAgICB0aGlzLmRhdGUgPSBuZXdEYXRlIGFzIERhdGU7XG4gICAgICB0aGlzLmRhdGVTdHJpbmcgPSBjb252ZXJ0RGF0ZVRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmRhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGVTdHJpbmcgPSBuZXdEYXRlIGFzIHN0cmluZztcbiAgICAgIHRoaXMub25EYXRlU3RyaW5nQ2hhbmdlKHRoaXMuZGF0ZVN0cmluZywgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjb250cm9sIHJlY2VpdmVzIGEgY2hhbmdlIGV2ZW50LiAqL1xuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICBpZiAodGhpcy52YWx1ZUFjY2Vzc29yID09PSAnZGF0ZScpIHtcbiAgICAgIHRoaXMuZGF0ZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoZm4pO1xuICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZUFjY2Vzc29yID09PSAnZGF0ZVN0cmluZycpIHtcbiAgICAgIHRoaXMuZGF0ZVN0cmluZ0NoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoZm4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjb250cm9sIHJlY2VpdmVzIGEgdG91Y2ggZXZlbnQuICovXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9IGM7XG4gICAgcmV0dXJuIHRoaXMuaGFzRXJyb3JcbiAgICAgID8ge1xuICAgICAgICAgIGRhdGVGb3JtYXRFcnJvcjoge1xuICAgICAgICAgICAgZ2l2ZW46IHRoaXMuZGF0ZVN0cmluZyxcbiAgICAgICAgICAgIGZvcm1hdDogJ3l5eXktbW0tZGQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJiYWNrZHJvcFwiICpuZ0lmPVwic2hvd0RhdGVwaWNrZXJcIiAoY2xpY2spPVwiaGlkZVBvcHVwKClcIj48L2Rpdj5cbjxzcGFuIGNsYXNzPVwid3JhcHBlclwiIFtjbGFzcy5mb3JMaW5rXT1cInJlbmRlcmluZ1N0eWxlID09PSAnTElOSydcIiBbY2xhc3MuaGFzLWVycm9yXT1cImhhc0Vycm9yXCI+XG4gIDxpbnB1dFxuICAgICNpbnB1dFxuICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGRhdGVDb250cm9sXCJcbiAgICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIH19XCJcbiAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgWyhuZ01vZGVsKV09XCJkYXRlU3RyaW5nXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRGF0ZVN0cmluZ0NoYW5nZSgkZXZlbnQpXCJcbiAgICAoZm9jdXMpPVwic2hvd1BvcHVwKClcIlxuICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAoa2V5ZG93bi5lbnRlcik9XCJoaWRlUG9wdXAoKVwiXG4gICAgKGtleWRvd24uZXNjYXBlKT1cImhpZGVQb3B1cCgpXCJcbiAgICAoa2V5ZG93bi50YWIpPVwib25UYWIodHJ1ZSlcIlxuICAgIChrZXlkb3duLnNoaWZ0LnRhYik9XCJvblRhYihmYWxzZSlcIlxuICAgIFtjbGFzcy50ZXh0LWRhbmdlcl09XCJoYXNFcnJvclwiXG4gICAgKm5nSWY9XCJyZW5kZXJpbmdTdHlsZSA9PT0gJ0lOUFVUJ1wiXG4gIC8+XG4gIDxhIGNsYXNzPVwiZGF0ZUNvbnRyb2xcIiAoY2xpY2spPVwidG9nZ2xlUG9wdXAoKVwiICpuZ0lmPVwicmVuZGVyaW5nU3R5bGUgPT09ICdMSU5LJ1wiPnt7IGRhdGUgfCBseERhdGU6IGRhdGVGb3JtYXQgfX08L2E+XG4gIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyQ29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyXCI+XG4gICAgICA8ZGF0ZXBpY2tlclxuICAgICAgICBjbGFzcz1cInBvcHVwXCJcbiAgICAgICAgKm5nSWY9XCJzaG93RGF0ZXBpY2tlclwiXG4gICAgICAgIChzZWxlY3Rpb25Eb25lKT1cIm9uU2VsZWN0aW9uRG9uZSgkZXZlbnQpXCJcbiAgICAgICAgW25nTW9kZWxdPVwiZGF0ZVwiXG4gICAgICAgIFtkYXRlcGlja2VyTW9kZV09XCJkYXRlcGlja2VyTW9kZVwiXG4gICAgICAgIFtpbml0RGF0ZV09XCJpbml0RGF0ZVwiXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgICAgW21pbk1vZGVdPVwibWluTW9kZVwiXG4gICAgICAgIFttYXhNb2RlXT1cIm1heE1vZGVcIlxuICAgICAgICBbc2hvd1dlZWtzXT1cInNob3dXZWVrc1wiXG4gICAgICAgIFtmb3JtYXREYXldPVwiZm9ybWF0RGF5XCJcbiAgICAgICAgW2Zvcm1hdE1vbnRoXT1cImZvcm1hdE1vbnRoXCJcbiAgICAgICAgW2Zvcm1hdFllYXJdPVwiZm9ybWF0WWVhclwiXG4gICAgICAgIFtmb3JtYXREYXlIZWFkZXJdPVwiZm9ybWF0RGF5SGVhZGVyXCJcbiAgICAgICAgW2Zvcm1hdERheVRpdGxlXT1cImZvcm1hdERheVRpdGxlXCJcbiAgICAgICAgW2Zvcm1hdE1vbnRoVGl0bGVdPVwiZm9ybWF0TW9udGhUaXRsZVwiXG4gICAgICAgIFtzdGFydGluZ0RheV09XCJzdGFydGluZ0RheVwiXG4gICAgICAgIFt5ZWFyUmFuZ2VdPVwieWVhclJhbmdlXCJcbiAgICAgICAgW29ubHlDdXJyZW50TW9udGhdPVwib25seUN1cnJlbnRNb250aFwiXG4gICAgICAgIFtzaG9ydGN1dFByb3BhZ2F0aW9uXT1cInNob3J0Y3V0UHJvcGFnYXRpb25cIlxuICAgICAgICBbY3VzdG9tQ2xhc3NdPVwiY3VzdG9tQ2xhc3NcIlxuICAgICAgICBbZGF0ZURpc2FibGVkXT1cImRhdGVEaXNhYmxlZFwiXG4gICAgICA+XG4gICAgICA8L2RhdGVwaWNrZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9zcGFuPlxuIl19
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxQyxhQUFhLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUUsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQXVCLE1BQU0sb0NBQW9DLENBQUM7QUFDdkcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHdCQUF3QixFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7QUFLbEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoRCxNQUFN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QUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGZvcm1hdCwgc3RhcnRPZkRheSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IERhdGVGb3JtYXR0ZXIsIERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgREFURV9GTl9MT0NBTEUsIERBVEVfRk9STUFUUywgRGF0ZUZvcm1hdHNQcm92aWRlciB9IGZyb20gJy4uLy4uLy4uL2NvcmUtdWkvY29yZS11aS5jb25zdGFudHMnO1xuaW1wb3J0IHsgY29udmVydERhdGVUb0xvY2FsZURhdGVTdHJpbmcsIGNyZWF0ZURhdGVGcm9tRGF0ZVN0cmluZywgaXNWYWxpZERhdGVTdHJpbmcgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGF0ZS1oZWxwZXJzJztcbmltcG9ydCB7IE9ic2VydmUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvb2JzZXJ2ZSc7XG5cbi8vIElucHV0ICsgbmcyLWJvb3RzdHJhcCBkYXRlcGlja2VyXG5leHBvcnQgdHlwZSBEYXRlSW5wdXRSZW5kZXJpbmdTdHlsZSA9ICdJTlBVVCcgfCAnTElOSyc7XG5cbmNvbnN0IERFRkFVTFRfTUlOX0RBVEUgPSBuZXcgRGF0ZSgnMDAwMC0wMS0wMScpO1xuY29uc3QgREVGQVVMVF9NQVhfREFURSA9IG5ldyBEYXRlKCc5OTk5LTEyLTMxJyk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x4LWRhdGUtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJ2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnZGF0ZS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlSW5wdXRDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9LFxuICAgIHsgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZUlucHV0Q29tcG9uZW50KSwgbXVsdGk6IHRydWUgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuICBASW5wdXQoKSBwdWJsaWMgZGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsOyAvLyBtYWluIGRhdGUgaW5wdXQ7IHRoaXMgaXMgYWxzbyB0aGUgb25lIHVzZWQgZm9yIG5nTW9kZWwgJiBmb3JtQ29udHJvbCFcbiAgQE91dHB1dCgpIGRhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpOyAvLyB0cmlnZ2VyZWQgd2hlbmV2ZXIgdGhlIGRhdGUgY2hhbmdlc1xuICBASW5wdXQoKSBwdWJsaWMgZGF0ZVN0cmluZzogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIHNlY29uZGFyeSwgYWx0ZXJuYXRpdmUgaW5wdXQgd2l0aCBkYXRlIHN0cmluZ1xuICBAT3V0cHV0KCkgZGF0ZVN0cmluZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVsbD4oKTsgLy8gdHJpZ2dlcmVkIHdoZW5ldmVyIHRoZSBkYXRlIGNoYW5nZXNcbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgZm9ybUdyb3VwJ3MgdmFsdWUgYWNjZXNzb3IgaXMgYWNjZXNzaW5nIHRoZSBzZWxlY3RlZCBJRHMgb3IgdGhlIHNlbGVjdGVkIG9iamVjdHNcbiAgQElucHV0KCkgcHVibGljIHZhbHVlQWNjZXNzb3I6ICdkYXRlJyB8ICdkYXRlU3RyaW5nJyA9ICdkYXRlJztcblxuICBASW5wdXQoKSBwdWJsaWMgaW5wdXRJZDogc3RyaW5nID0gJyc7IC8vIGlkIHRvIGJlIHNldCBvbiBpbnB1dCB0byBjb3JyZXNwb25kIHRvIG91dHNpZGUgbGFiZWxcbiAgQElucHV0KCkgcHVibGljIHJlbmRlcmluZ1N0eWxlOiBEYXRlSW5wdXRSZW5kZXJpbmdTdHlsZSA9ICdJTlBVVCc7XG4gIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ3l5eXktbW0tZGQnO1xuXG4gIC8vLS0tIElucHV0cyByZXBsaWNhdGVkIGZyb20gZGF0ZXBpY2tlcjsgKHNlbGVjdGlvbkRvbmUpIGlzIG5vdCBuZWVkZWQsIGFzIChkYXRlQ2hhbmdlKSBpcyBlcXVpdmFsZW5cbiAgQElucHV0KCkgcHVibGljIGRhdGVwaWNrZXJNb2RlOiBzdHJpbmcgPSAnZGF5JzsgLy8gc2V0cyBkYXRlcGlja2VyIG1vZGUsIHN1cHBvcnRzOiBkYXksIG1vbnRoLCB5ZWFyXG4gIEBJbnB1dCgpIGluaXREYXRlU3RyaW5nITogc3RyaW5nOyAvLyBkZWZhdWx0IGRhdGUgdG8gc2hvdyBpZiBuZy1tb2RlbCB2YWx1ZSBpcyBub3Qgc3BlY2lmaWVkXG4gIEBPYnNlcnZlKCdpbml0RGF0ZVN0cmluZycpIGluaXREYXRlU3RyaW5nJCE6IE9ic2VydmFibGU8c3RyaW5nPjsgLy8gZGVmYXVsdCBkYXRlIHRvIHNob3cgaWYgbmctbW9kZWwgdmFsdWUgaXMgbm90IHNwZWNpZmllZFxuICBASW5wdXQoKSBwdWJsaWMgbWluRGF0ZSA9IERFRkFVTFRfTUlOX0RBVEU7IC8vIG9sZGVzdCBzZWxlY3RhYmxlIGRhdGVcbiAgQElucHV0KCkgcHVibGljIG1heERhdGUgPSBERUZBVUxUX01BWF9EQVRFOyAvLyBsYXRlc3Qgc2VsZWN0YWJsZSBkYXRlXG4gIEBJbnB1dCgpIHB1YmxpYyBtaW5Nb2RlOiBzdHJpbmcgPSAnZGF5JzsgLy8gc2V0IGxvd2VyIGRhdGVwaWNrZXIgbW9kZSwgc3VwcG9ydHM6IGRheSwgbW9udGgsIHllYXJcbiAgQElucHV0KCkgcHVibGljIG1heE1vZGU6IHN0cmluZyA9ICd5ZWFyJzsgLy8gc2V0cyB1cHBlciBkYXRlcGlja2VyIG1vZGUsIHN1cHBvcnRzOiBkYXksIG1vbnRoLCB5ZWFyXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93V2Vla3M6IGJvb2xlYW4gPSB0cnVlOyAvLyBpZiBmYWxzZSB3ZWVrIG51bWJlcnMgd2lsbCBiZSBoaWRkZW5cbiAgQElucHV0KCkgcHVibGljIGZvcm1hdERheTogc3RyaW5nID0gJ0REJzsgLy8gZm9ybWF0IG9mIGRheSBpbiBtb250aFxuICBASW5wdXQoKSBwdWJsaWMgZm9ybWF0TW9udGg6IHN0cmluZyA9ICdNTU1NJzsgLy8gZm9ybWF0IG9mIG1vbnRoIGluIHllYXJcbiAgQElucHV0KCkgcHVibGljIGZvcm1hdFllYXI6IHN0cmluZyA9ICdZWVlZJzsgLy8gZm9ybWF0IG9mIHllYXIgaW4geWVhciByYW5nZVxuICBASW5wdXQoKSBwdWJsaWMgZm9ybWF0RGF5SGVhZGVyOiBzdHJpbmcgPSAnZGQnOyAvLyBmb3JtYXQgb2YgZGF5IGluIHdlZWsgaGVhZGVyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtYXREYXlUaXRsZTogc3RyaW5nID0gJ01NTU0gWVlZWSc7IC8vIGZvcm1hdCBvZiB0aXRsZSB3aGVuIHNlbGVjdGluZyBkYXlcbiAgQElucHV0KCkgcHVibGljIGZvcm1hdE1vbnRoVGl0bGU6IHN0cmluZyA9ICdZWVlZJzsgLy8gZm9ybWF0IG9mIHRpdGxlIHdoZW4gc2VsZWN0aW5nIG1vbnRoXG4gIEBJbnB1dCgpIHN0YXJ0aW5nRGF5OiBudW1iZXIgPSAwOyAvLyBzdGFydGluZyBkYXkgb2YgdGhlIHdlZWsgZnJvbSAwLTYgKDA9U3VuZGF5LCAuLi4sIDY9U2F0dXJkYXkpIHB1YmxpY1xuICBASW5wdXQoKSBwdWJsaWMgeWVhclJhbmdlOiBudW1iZXIgPSAyMDsgLy8gbnVtYmVyIG9mIHllYXJzIGRpc3BsYXllZCBpbiB5ZWFyIHNlbGVjdGlvblxuICBASW5wdXQoKSBwdWJsaWMgb25seUN1cnJlbnRNb250aDogYm9vbGVhbiA9IGZhbHNlOyAvLyBpZiB0cnVlIG9ubHkgZGF0ZXMgZnJvbSB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBtb250aCB3aWxsIGJlIHNob3duXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG9ydGN1dFByb3BhZ2F0aW9uOiBib29sZWFuID0gZmFsc2U7IC8vICBpZiB0cnVlIHNob3J0Y3V0YHMgZXZlbnQgcHJvcGFnYXRpb24gd2lsbCBiZSBkaXNhYmxlZFxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tQ2xhc3M6IHsgZGF0ZTogRGF0ZTsgbW9kZTogc3RyaW5nOyBjbGF6ejogc3RyaW5nIH1bXSA9IFtdOyAvLyBhcnJheSBvZiBjdXN0b20gY3NzIGNsYXNzZXMgdG8gYmUgYXBwbGllZCB0b1xuICAvLyB0YXJnZXRlZCBkYXRlc1xuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQhOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgZGF0ZURpc2FibGVkOiB7IGRhdGU6IERhdGU7IG1vZGU6IHN0cmluZyB9W10gPSBbXTsgLy8gYXJyYXkgb2YgZGlzYWJsZWQgZGF0ZXMgaWYgbW9kZSBpcyBkYXksIG9yIHllYXJzLCBldGMuXG5cbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgc2hvd0RhdGVwaWNrZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGF0ZUZvcm1hdDogc3RyaW5nO1xuICBpbml0RGF0ZSE6IERhdGU7XG5cbiAgcmVhZG9ubHkgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8tLSBJbXBsZW1lbnQgQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgcHJpdmF0ZSBmb3JtQ29udHJvbCE6IEZvcm1Db250cm9sO1xuICBoYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBvblRvdWNoZWQhOiAoKSA9PiB2b2lkO1xuXG4gIHByb3BhZ2F0ZUNoYW5nZSA9IChfZGF0ZTogRGF0ZSB8IG51bGwpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoREFURV9GT1JNQVRTKSBwcml2YXRlIGRhdGVGb3JtYXRzUHJvdmlkZXI6IERhdGVGb3JtYXRzUHJvdmlkZXIsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChEQVRFX0ZOX0xPQ0FMRSkgcHJpdmF0ZSBnZXREYXRlRm5Mb2NhbGU/OiBGdW5jdGlvblxuICApIHtcbiAgICB0aGlzLmRhdGVGb3JtYXQgPSB0aGlzLmRhdGVGb3JtYXRzUHJvdmlkZXIuZ2V0RGF0ZUZvcm1hdCgpO1xuICAgIC8vIFBhdGNoIERhdGVQaWNrZXIgdW50aWwgaHR0cHM6Ly9naXRodWIuY29tL3ZhbG9yLXNvZnR3YXJlL25nMi1ib290c3RyYXAvaXNzdWVzLzEzODUgaXMgcmVzb2x2ZWRcbiAgICBjb25zdCB3cml0ZVZhbHVlID0gRGF0ZVBpY2tlckNvbXBvbmVudC5wcm90b3R5cGUud3JpdGVWYWx1ZTtcbiAgICBEYXRlUGlja2VyQ29tcG9uZW50LnByb3RvdHlwZS53cml0ZVZhbHVlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHdyaXRlVmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzIGFzIGFueSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFNvbWVob3cgZGF0ZXBpY2tlciBkb2VzIHVzZSBhIHNlcGFyYXRlIG1vbWVudCBpbnN0YW5jZSB0aGFuIHdlIGRvLiBUaGF0IG9uZSBydW5zIG9uIGxvY2FsZSBlbiBieSBkZWZhdWx0LlxuICAgIC8vIFNvIHdlIHBhdGNoIHRoZSBmb3JtYXQgZnVuY3Rpb24gaGVyZSB0byB1c2Ugb3VyIG1vbWVudCBpbnN0YW5jZS5cbiAgICAvLyBNYXliZSBpdCB3aWxsIGJlIGZpeGVkIHdpdGg6IGh0dHBzOi8vZ2l0aHViLmNvbS92YWxvci1zb2Z0d2FyZS9uZ3gtYm9vdHN0cmFwL2lzc3Vlcy80NTVcbiAgICBjb25zdCBsb2NhbGUgPSB0aGlzLmdldERhdGVGbkxvY2FsZSA/IHRoaXMuZ2V0RGF0ZUZuTG9jYWxlKCkgOiBudWxsO1xuICAgIERhdGVGb3JtYXR0ZXIucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uIChkYXRlOiBEYXRlLCBmOiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBmb3JtYXQoZGF0ZSwgZiwgeyBsb2NhbGUgfSk7XG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdERhdGVTdHJpbmckLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpLnN1YnNjcmliZSgoZGF0ZSkgPT4ge1xuICAgICAgdGhpcy5pbml0RGF0ZSA9IGNyZWF0ZURhdGVGcm9tRGF0ZVN0cmluZyhkYXRlKSA/PyBzdGFydE9mRGF5KG5ldyBEYXRlKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0ZSddKSB7XG4gICAgICB0aGlzLmRhdGVTdHJpbmcgPSB0aGlzLmRhdGUgPyBjb252ZXJ0RGF0ZVRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmRhdGUpIDogbnVsbDtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ2RhdGVTdHJpbmcnXSkge1xuICAgICAgdGhpcy5vbkRhdGVTdHJpbmdDaGFuZ2UodGhpcy5kYXRlU3RyaW5nLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgZm9jdXMoKSB7XG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgc2hvd1BvcHVwKCkge1xuICAgIHRoaXMuc2hvd0RhdGVwaWNrZXIgPSB0cnVlO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVBvcHVwKCkge1xuICAgIHRoaXMuc2hvd0RhdGVwaWNrZXIgPSAhdGhpcy5zaG93RGF0ZXBpY2tlcjtcbiAgfVxuXG4gIHB1YmxpYyBoaWRlUG9wdXAoKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMuc2hvd0RhdGVwaWNrZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBvbkRhdGVTdHJpbmdDaGFuZ2UobmV3RGF0ZVN0cmluZzogc3RyaW5nIHwgbnVsbCwgZW1pdDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAoaXNWYWxpZERhdGVTdHJpbmcobmV3RGF0ZVN0cmluZykpIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBjcmVhdGVEYXRlRnJvbURhdGVTdHJpbmcobmV3RGF0ZVN0cmluZyk7XG4gICAgICB0aGlzLnVwZGF0ZURhdGUoZGF0ZSwgZW1pdCk7XG4gICAgfSBlbHNlIGlmIChuZXdEYXRlU3RyaW5nID09PSBudWxsIHx8IG5ld0RhdGVTdHJpbmcgPT09ICcnKSB7XG4gICAgICB0aGlzLnVwZGF0ZURhdGUobnVsbCwgZW1pdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25TZWxlY3Rpb25Eb25lKG5ld0RhdGU6IERhdGUpIHtcbiAgICB0aGlzLnVwZGF0ZURhdGUobmV3RGF0ZSk7XG4gICAgdGhpcy5oaWRlUG9wdXAoKTtcbiAgfVxuXG4gIG9uQmx1cigpIHtcbiAgICBpZiAodGhpcy5vblRvdWNoZWQpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlKGRhdGU6IERhdGUgfCBudWxsLCBlbWl0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMuZGF0ZSA9IGRhdGU7XG4gICAgdGhpcy5kYXRlU3RyaW5nID0gdGhpcy5kYXRlID8gY29udmVydERhdGVUb0xvY2FsZURhdGVTdHJpbmcodGhpcy5kYXRlKSA6ICcnO1xuICAgIGlmIChlbWl0KSB7XG4gICAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdChkYXRlKTtcbiAgICAgIHRoaXMuZGF0ZVN0cmluZ0NoYW5nZS5lbWl0KHRoaXMuZGF0ZVN0cmluZyk7XG4gICAgfVxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKGRhdGUpO1xuICAgIHRoaXMucmVjaGVja0Vycm9ycygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNoZWNrRXJyb3JzKCkge1xuICAgIHRoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbCkge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuICB9XG5cbiAgLy8tLS0gSW1wbGVtZW50IENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIC8qKiBXcml0ZSBhIG5ldyB2YWx1ZSB0byB0aGUgZWxlbWVudC4gKi9cbiAgd3JpdGVWYWx1ZShuZXdEYXRlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMudmFsdWVBY2Nlc3NvciA9PT0gJ2RhdGUnKSB7XG4gICAgICB0aGlzLmRhdGUgPSBuZXdEYXRlIGFzIERhdGU7XG4gICAgICB0aGlzLmRhdGVTdHJpbmcgPSBjb252ZXJ0RGF0ZVRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmRhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGVTdHJpbmcgPSBuZXdEYXRlIGFzIHN0cmluZztcbiAgICAgIHRoaXMub25EYXRlU3RyaW5nQ2hhbmdlKHRoaXMuZGF0ZVN0cmluZywgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjb250cm9sIHJlY2VpdmVzIGEgY2hhbmdlIGV2ZW50LiAqL1xuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICBpZiAodGhpcy52YWx1ZUFjY2Vzc29yID09PSAnZGF0ZScpIHtcbiAgICAgIHRoaXMuZGF0ZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoZm4pO1xuICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZUFjY2Vzc29yID09PSAnZGF0ZVN0cmluZycpIHtcbiAgICAgIHRoaXMuZGF0ZVN0cmluZ0NoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoZm4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjb250cm9sIHJlY2VpdmVzIGEgdG91Y2ggZXZlbnQuICovXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9IGM7XG4gICAgcmV0dXJuIHRoaXMuaGFzRXJyb3JcbiAgICAgID8ge1xuICAgICAgICAgIGRhdGVGb3JtYXRFcnJvcjoge1xuICAgICAgICAgICAgZ2l2ZW46IHRoaXMuZGF0ZVN0cmluZyxcbiAgICAgICAgICAgIGZvcm1hdDogJ3l5eXktbW0tZGQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJiYWNrZHJvcFwiICpuZ0lmPVwic2hvd0RhdGVwaWNrZXJcIiAoY2xpY2spPVwiaGlkZVBvcHVwKClcIj48L2Rpdj5cbjxzcGFuIGNsYXNzPVwid3JhcHBlclwiIFtjbGFzcy5mb3JMaW5rXT1cInJlbmRlcmluZ1N0eWxlID09PSAnTElOSydcIiBbY2xhc3MuaGFzLWVycm9yXT1cImhhc0Vycm9yXCI+XG4gIDxpbnB1dFxuICAgICNpbnB1dFxuICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGRhdGVDb250cm9sXCJcbiAgICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIH19XCJcbiAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgWyhuZ01vZGVsKV09XCJkYXRlU3RyaW5nXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRGF0ZVN0cmluZ0NoYW5nZSgkZXZlbnQpXCJcbiAgICAoZm9jdXMpPVwic2hvd1BvcHVwKClcIlxuICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAoa2V5ZG93bi5lbnRlcik9XCJoaWRlUG9wdXAoKVwiXG4gICAgKGtleWRvd24uZXNjYXBlKT1cImhpZGVQb3B1cCgpXCJcbiAgICAoa2V5ZG93bi50YWIpPVwiaGlkZVBvcHVwKClcIlxuICAgIChrZXlkb3duLnNoaWZ0LnRhYik9XCJoaWRlUG9wdXAoKVwiXG4gICAgW2NsYXNzLnRleHQtZGFuZ2VyXT1cImhhc0Vycm9yXCJcbiAgICAqbmdJZj1cInJlbmRlcmluZ1N0eWxlID09PSAnSU5QVVQnXCJcbiAgLz5cbiAgPGEgY2xhc3M9XCJkYXRlQ29udHJvbFwiIChjbGljayk9XCJ0b2dnbGVQb3B1cCgpXCIgKm5nSWY9XCJyZW5kZXJpbmdTdHlsZSA9PT0gJ0xJTksnXCI+e3sgZGF0ZSB8IGx4RGF0ZTogZGF0ZUZvcm1hdCB9fTwvYT5cbiAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXJDb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXJcIj5cbiAgICAgIDxkYXRlcGlja2VyXG4gICAgICAgIGNsYXNzPVwicG9wdXBcIlxuICAgICAgICAqbmdJZj1cInNob3dEYXRlcGlja2VyXCJcbiAgICAgICAgKHNlbGVjdGlvbkRvbmUpPVwib25TZWxlY3Rpb25Eb25lKCRldmVudClcIlxuICAgICAgICBbbmdNb2RlbF09XCJkYXRlXCJcbiAgICAgICAgW2RhdGVwaWNrZXJNb2RlXT1cImRhdGVwaWNrZXJNb2RlXCJcbiAgICAgICAgW2luaXREYXRlXT1cImluaXREYXRlXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICBbbWluTW9kZV09XCJtaW5Nb2RlXCJcbiAgICAgICAgW21heE1vZGVdPVwibWF4TW9kZVwiXG4gICAgICAgIFtzaG93V2Vla3NdPVwic2hvd1dlZWtzXCJcbiAgICAgICAgW2Zvcm1hdERheV09XCJmb3JtYXREYXlcIlxuICAgICAgICBbZm9ybWF0TW9udGhdPVwiZm9ybWF0TW9udGhcIlxuICAgICAgICBbZm9ybWF0WWVhcl09XCJmb3JtYXRZZWFyXCJcbiAgICAgICAgW2Zvcm1hdERheUhlYWRlcl09XCJmb3JtYXREYXlIZWFkZXJcIlxuICAgICAgICBbZm9ybWF0RGF5VGl0bGVdPVwiZm9ybWF0RGF5VGl0bGVcIlxuICAgICAgICBbZm9ybWF0TW9udGhUaXRsZV09XCJmb3JtYXRNb250aFRpdGxlXCJcbiAgICAgICAgW3N0YXJ0aW5nRGF5XT1cInN0YXJ0aW5nRGF5XCJcbiAgICAgICAgW3llYXJSYW5nZV09XCJ5ZWFyUmFuZ2VcIlxuICAgICAgICBbb25seUN1cnJlbnRNb250aF09XCJvbmx5Q3VycmVudE1vbnRoXCJcbiAgICAgICAgW3Nob3J0Y3V0UHJvcGFnYXRpb25dPVwic2hvcnRjdXRQcm9wYWdhdGlvblwiXG4gICAgICAgIFtjdXN0b21DbGFzc109XCJjdXN0b21DbGFzc1wiXG4gICAgICAgIFtkYXRlRGlzYWJsZWRdPVwiZGF0ZURpc2FibGVkXCJcbiAgICAgID5cbiAgICAgIDwvZGF0ZXBpY2tlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3NwYW4+XG4iXX0=
@@ -58,6 +58,7 @@ export class PopoverComponent {
58
58
  constructor() {
59
59
  this.noMargin = false;
60
60
  this.allowOverflow = false;
61
+ this.autoFocus = false;
61
62
  /**
62
63
  * If you have a popover, that should usually be displayed above or below its anchor,
63
64
  * and this anchor is in a scrollable container, you should set this to true.
@@ -166,10 +167,10 @@ export class PopoverComponent {
166
167
  }
167
168
  }
168
169
  PopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: PopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
169
- PopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: PopoverComponent, selector: "lx-popover", inputs: { trigger: "trigger", horizontalAlign: "horizontalAlign", verticalAlign: "verticalAlign", noMargin: "noMargin", allowOverflow: "allowOverflow", adaptMarginsForViewportAlignChange: "adaptMarginsForViewportAlignChange" }, outputs: { opened: "opened", closed: "closed" }, queries: [{ propertyName: "explicitContent", first: true, predicate: PopoverContentDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "satPopover", first: true, predicate: SatPopover, descendants: true, static: true }, { propertyName: "implicitContent", first: true, predicate: ["implicitContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<sat-popover\n [anchor]=\"trigger.anchor\"\n [horizontalAlign]=\"horizontalAlign\"\n [verticalAlign]=\"verticalAlign\"\n [restoreFocus]=\"false\"\n [lockAlignment]=\"true\"\n [autoFocus]=\"false\"\n openTransition=\"0ms\"\n closeTransition=\"0ms\"\n (opened)=\"onOpen()\"\n (afterOpen)=\"onAfterOpen()\"\n (closed)=\"onClose()\"\n>\n <div\n class=\"popoverContainer\"\n [ngClass]=\"marginClasses\"\n [class.overflowHidden]=\"!allowOverflow\"\n (mouseenter)=\"trigger.showPopover(true)\"\n (mouseleave)=\"trigger.closePopover(true)\"\n >\n <ng-container *ngIf=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </ng-container>\n </div>\n</sat-popover>\n<ng-template #implicitContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["@keyframes subtleScaleUpKeyFrames{0%{transform:scale(.95);opacity:0}}.popoverContainer{position:relative;box-shadow:0 8px 12px 2px #00000026;max-width:600px;max-height:80vh;border-radius:3px;background-color:#fff;-webkit-hyphens:auto;hyphens:auto;animation:subtleScaleUpKeyFrames .2s ease}.popoverContainer.overflowHidden{overflow:hidden}.right{margin-left:18px}.left{margin-right:18px}.bottom{margin-top:18px}.top{margin-bottom:18px}\n"], components: [{ type: i1.SatPopover, selector: "sat-popover", inputs: ["anchor", "horizontalAlign", "xAlign", "verticalAlign", "yAlign", "forceAlignment", "lockAlignment", "autoFocus", "restoreFocus", "scrollStrategy", "hasBackdrop", "interactiveClose", "openTransition", "closeTransition", "openAnimationStartAtScale", "closeAnimationEndAtScale", "backdropClass", "panelClass"], outputs: ["opened", "closed", "afterOpen", "afterClose", "backdropClicked", "overlayKeydown"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
170
+ PopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: PopoverComponent, selector: "lx-popover", inputs: { trigger: "trigger", horizontalAlign: "horizontalAlign", verticalAlign: "verticalAlign", noMargin: "noMargin", allowOverflow: "allowOverflow", autoFocus: "autoFocus", adaptMarginsForViewportAlignChange: "adaptMarginsForViewportAlignChange" }, outputs: { opened: "opened", closed: "closed" }, queries: [{ propertyName: "explicitContent", first: true, predicate: PopoverContentDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "satPopover", first: true, predicate: SatPopover, descendants: true, static: true }, { propertyName: "implicitContent", first: true, predicate: ["implicitContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<sat-popover\n [anchor]=\"trigger.anchor\"\n [horizontalAlign]=\"horizontalAlign\"\n [verticalAlign]=\"verticalAlign\"\n [restoreFocus]=\"false\"\n [lockAlignment]=\"true\"\n [autoFocus]=\"autoFocus\"\n openTransition=\"0ms\"\n closeTransition=\"0ms\"\n (opened)=\"onOpen()\"\n (afterOpen)=\"onAfterOpen()\"\n (closed)=\"onClose()\"\n>\n <div\n class=\"popoverContainer\"\n [ngClass]=\"marginClasses\"\n [class.overflowHidden]=\"!allowOverflow\"\n (mouseenter)=\"trigger.showPopover(true)\"\n (mouseleave)=\"trigger.closePopover(true)\"\n (keydown.escape)=\"$event.stopPropagation(); trigger.closePopover(true)\"\n >\n <ng-container *ngIf=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </ng-container>\n </div>\n</sat-popover>\n<ng-template #implicitContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["@keyframes subtleScaleUpKeyFrames{0%{transform:scale(.95);opacity:0}}.popoverContainer{position:relative;box-shadow:0 8px 12px 2px #00000026;max-width:600px;max-height:80vh;border-radius:3px;background-color:#fff;-webkit-hyphens:auto;hyphens:auto;animation:subtleScaleUpKeyFrames .2s ease}.popoverContainer.overflowHidden{overflow:hidden}.right{margin-left:18px}.left{margin-right:18px}.bottom{margin-top:18px}.top{margin-bottom:18px}\n"], components: [{ type: i1.SatPopover, selector: "sat-popover", inputs: ["anchor", "horizontalAlign", "xAlign", "verticalAlign", "yAlign", "forceAlignment", "lockAlignment", "autoFocus", "restoreFocus", "scrollStrategy", "hasBackdrop", "interactiveClose", "openTransition", "closeTransition", "openAnimationStartAtScale", "closeAnimationEndAtScale", "backdropClass", "panelClass"], outputs: ["opened", "closed", "afterOpen", "afterClose", "backdropClicked", "overlayKeydown"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
170
171
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: PopoverComponent, decorators: [{
171
172
  type: Component,
172
- args: [{ selector: 'lx-popover', template: "<sat-popover\n [anchor]=\"trigger.anchor\"\n [horizontalAlign]=\"horizontalAlign\"\n [verticalAlign]=\"verticalAlign\"\n [restoreFocus]=\"false\"\n [lockAlignment]=\"true\"\n [autoFocus]=\"false\"\n openTransition=\"0ms\"\n closeTransition=\"0ms\"\n (opened)=\"onOpen()\"\n (afterOpen)=\"onAfterOpen()\"\n (closed)=\"onClose()\"\n>\n <div\n class=\"popoverContainer\"\n [ngClass]=\"marginClasses\"\n [class.overflowHidden]=\"!allowOverflow\"\n (mouseenter)=\"trigger.showPopover(true)\"\n (mouseleave)=\"trigger.closePopover(true)\"\n >\n <ng-container *ngIf=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </ng-container>\n </div>\n</sat-popover>\n<ng-template #implicitContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["@keyframes subtleScaleUpKeyFrames{0%{transform:scale(.95);opacity:0}}.popoverContainer{position:relative;box-shadow:0 8px 12px 2px #00000026;max-width:600px;max-height:80vh;border-radius:3px;background-color:#fff;-webkit-hyphens:auto;hyphens:auto;animation:subtleScaleUpKeyFrames .2s ease}.popoverContainer.overflowHidden{overflow:hidden}.right{margin-left:18px}.left{margin-right:18px}.bottom{margin-top:18px}.top{margin-bottom:18px}\n"] }]
173
+ args: [{ selector: 'lx-popover', template: "<sat-popover\n [anchor]=\"trigger.anchor\"\n [horizontalAlign]=\"horizontalAlign\"\n [verticalAlign]=\"verticalAlign\"\n [restoreFocus]=\"false\"\n [lockAlignment]=\"true\"\n [autoFocus]=\"autoFocus\"\n openTransition=\"0ms\"\n closeTransition=\"0ms\"\n (opened)=\"onOpen()\"\n (afterOpen)=\"onAfterOpen()\"\n (closed)=\"onClose()\"\n>\n <div\n class=\"popoverContainer\"\n [ngClass]=\"marginClasses\"\n [class.overflowHidden]=\"!allowOverflow\"\n (mouseenter)=\"trigger.showPopover(true)\"\n (mouseleave)=\"trigger.closePopover(true)\"\n (keydown.escape)=\"$event.stopPropagation(); trigger.closePopover(true)\"\n >\n <ng-container *ngIf=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </ng-container>\n </div>\n</sat-popover>\n<ng-template #implicitContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["@keyframes subtleScaleUpKeyFrames{0%{transform:scale(.95);opacity:0}}.popoverContainer{position:relative;box-shadow:0 8px 12px 2px #00000026;max-width:600px;max-height:80vh;border-radius:3px;background-color:#fff;-webkit-hyphens:auto;hyphens:auto;animation:subtleScaleUpKeyFrames .2s ease}.popoverContainer.overflowHidden{overflow:hidden}.right{margin-left:18px}.left{margin-right:18px}.bottom{margin-top:18px}.top{margin-bottom:18px}\n"] }]
173
174
  }], propDecorators: { trigger: [{
174
175
  type: Input
175
176
  }], horizontalAlign: [{
@@ -180,6 +181,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
180
181
  type: Input
181
182
  }], allowOverflow: [{
182
183
  type: Input
184
+ }], autoFocus: [{
185
+ type: Input
183
186
  }], adaptMarginsForViewportAlignChange: [{
184
187
  type: Input
185
188
  }], opened: [{
@@ -196,4 +199,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
196
199
  type: ContentChild,
197
200
  args: [PopoverContentDirective, { read: TemplateRef, static: true }]
198
201
  }] } });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9wb3BvdmVyLXVpL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL3BvcG92ZXItdWkvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkksT0FBTyxFQUFFLFVBQVUsRUFBc0QsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7OztBQUdyRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlERztBQU1ILE1BQU0sT0FBTyxnQkFBZ0I7SUFMN0I7UUFTVyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRS9COzs7Ozs7O1dBT0c7UUFDTSx1Q0FBa0MsR0FBRyxLQUFLLENBQUM7UUFFMUMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDbEMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFnQnBDLFlBQU8sR0FBRyxLQUFLLENBQUM7S0FtR3pCO0lBMUdDLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUdELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUM3RjtJQUNILENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsa0NBQWtDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwRjtJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyw0QkFBNEIsQ0FBQyxtQkFBcUQ7UUFDeEYsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFFRCxJQUFJLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDNUMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ3hFO1FBRUQsSUFBSSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQzVDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztTQUM5RTtRQUVELElBQUksbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsRUFBRTtZQUM3QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDMUU7UUFFRCxJQUFJLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDNUMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1NBQzVFO1FBRUQsSUFBSSxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO1lBQzdDLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxlQUEwQyxFQUFFLGFBQXNDO1FBQ2hILElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBRUQsSUFBSSxlQUFlLEtBQUssT0FBTyxFQUFFO1lBQy9CLElBQUksYUFBYSxLQUFLLFFBQVEsSUFBSSxhQUFhLEtBQUssT0FBTyxJQUFJLGFBQWEsS0FBSyxLQUFLLEVBQUU7Z0JBQ3RGLE9BQU8sT0FBTyxDQUFDO2FBQ2hCO2lCQUFNLElBQUksYUFBYSxLQUFLLE9BQU8sRUFBRTtnQkFDcEMsT0FBTyxXQUFXLENBQUM7YUFDcEI7aUJBQU0sSUFBSSxhQUFhLEtBQUssT0FBTyxFQUFFO2dCQUNwQyxPQUFPLGNBQWMsQ0FBQzthQUN2QjtTQUNGO1FBRUQsSUFBSSxlQUFlLEtBQUssUUFBUSxFQUFFO1lBQ2hDLElBQUksYUFBYSxLQUFLLFFBQVEsSUFBSSxhQUFhLEtBQUssT0FBTyxJQUFJLGFBQWEsS0FBSyxLQUFLLEVBQUU7Z0JBQ3RGLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7aUJBQU0sSUFBSSxhQUFhLEtBQUssT0FBTyxFQUFFO2dCQUNwQyxPQUFPLFVBQVUsQ0FBQzthQUNuQjtpQkFBTSxJQUFJLGFBQWEsS0FBSyxPQUFPLEVBQUU7Z0JBQ3BDLE9BQU8sYUFBYSxDQUFDO2FBQ3RCO1NBQ0Y7UUFFRCxJQUFJLGVBQWUsS0FBSyxRQUFRLElBQUksZUFBZSxLQUFLLE9BQU8sSUFBSSxlQUFlLEtBQUssS0FBSyxFQUFFO1lBQzVGLElBQUksYUFBYSxLQUFLLE9BQU8sRUFBRTtnQkFDN0IsT0FBTyxLQUFLLENBQUM7YUFDZDtpQkFBTSxJQUFJLGFBQWEsS0FBSyxPQUFPLEVBQUU7Z0JBQ3BDLE9BQU8sUUFBUSxDQUFDO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7OzZHQXBJVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQixvWEF1QmIsdUJBQXVCLDJCQUFVLFdBQVcsdUZBSC9DLFVBQVUsc01DaEZ2Qiw0eEJBNEJBOzJGRGdDYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0UsWUFBWTs4QkFLYixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFVRyxrQ0FBa0M7c0JBQTFDLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFFa0MsVUFBVTtzQkFBbEQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNTLGVBQWU7c0JBQTlELFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUU4QixlQUFlO3NCQUExRixZQUFZO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTYXRQb3BvdmVyLCBTYXRQb3BvdmVySG9yaXpvbnRhbEFsaWduLCBTYXRQb3BvdmVyVmVydGljYWxBbGlnbiB9IGZyb20gJ0BuY3N0YXRlL3NhdC1wb3BvdmVyJztcbmltcG9ydCB7IFBvcG92ZXJDb250ZW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9wb3BvdmVyLWNvbnRlbnQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFBvcG92ZXJUcmlnZ2VyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9wb3BvdmVyLWhvdmVyLmRpcmVjdGl2ZSc7XG5cbi8qKlxuICogSE9XIFRPIFVTRVxuICpcbiAqIFRoaXMgcG9wb3ZlciBlbmNhcHN1bGF0ZXMgdGhpcyBvcGVuIHNvdXJjZSBsaWJyYXJ5OiBodHRwczovL2dpdGh1Yi5jb20vbmNzdGF0ZS1zYXQvcG9wb3ZlcixcbiAqIG1ha2Ugc3VyZSB0byBhbHNvIGNoZWNrIG91dCB0aGUgZG9jcyBvdmVyIHRoZXJlLlxuICpcbiAqIEFzIG9mIHRvZGF5IHRoZXkgYXJlIHR3byB0cmlnZ2VyIHN0cmF0ZWdpZXMgdG8gZGlzcGxheSBhIHBvcG92ZXIuXG4gKiAxLiBTaG93IG9uIGhvdmVyaW5nIHRoZSBhbmNob3IgYW5kIHdoaWxlIGhvdmVyaW5nIHRoZSBwb3BvdmVyIGJvZHkuXG4gKiAyLiBTaG93IG9uIGNsaWNrIGFuZCB3aGlsZSBob3ZlcmluZyB0aGUgcG9wb3ZlciBib2R5LlxuICpcbiAqIEZvciB1c2UgY2FzZSAxLiB5b3Ugd291bGQgdXNlIHRoZSBseFBvcG92ZXJIb3ZlciBkaXJlY3RpdmUsIHdoaWNoIGV4cG9ydHMgYXMgaG92ZXJBbmNob3IuXG4gKlxuICogRXhhbXBsZTpcbiAqIDxkaXYgbHhQb3BvdmVySG92ZXJcbiAqICAgICAgaG92ZXJBbmNob3JcbiAqICAgICAgc2F0UG9wb3ZlckFuY2hvclxuICogICAgICAjYW5jaG9yPVwiaG92ZXJBbmNob3JcIj48L2Rpdj5cbiAqIDxseC1wb3BvdmVyIFt0cmlnZ2VyXT1cImFuY2hvclwiXG4gKiAgICAgICAgICAgICBob3Jpem9udGFsQWxpZ249XCJhZnRlclwiXG4gKiAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduPVwiY2VudGVyXCI+XG4gKiAgICA8cD5Qb3BvdmVyIGNvbnRlbnQ8L3A+XG4gKiA8L2x4LXBvcG92ZXI+XG4gKlxuICogRm9yIHVzZSBjYXNlIDIuIHlvdSB3b3VsZCB1c2UgdGhlIGx4UG9wb3ZlckNsaWNrIGRpcmVjdGl2ZSwgd2hpY2ggZXhwb3J0cyBhcyBjbGlja0FuY2hvci5cbiAqIE5vdGU6IFNpbmNlIHRoZSBvbmx5IGNvbXBvbmVudCB3aGVyZSB3ZSB1c2UgdGhlIGx4UG9wb3ZlckNsaWNrIGRpcmVjdGl2ZSAoUmVwb3J0Q29tcG9uZW50KVxuICogbmVlZHMgdG8gZmV0Y2ggc29tZSBkYXRhIGJlZm9yZSBvcGVuaW5nIGl0LCB3ZSBkbyBub3QgcmVnaXN0ZXIgYSBjbGljayBFdmVudExpc3RlbmVyIGluIHRoaXMgZGlyZWN0aXZlLFxuICogYnV0IHJlcXVpcmUgdGhlIGRldmVsb3BlciB0byBpbXBsZW1lbnQgdGhhdCBpbiB0aGUgY29tcG9uZW50LCB3aGVyZSB0aGUgcG9wb3ZlciBpcyB1c2VkLlxuICpcbiAqIEV4YW1wbGU6XG4gKiA8ZGl2IGx4UG9wb3ZlckNsaWNrXG4gKiAgICAgIGNsaWNrQW5jaG9yXG4gKiAgICAgIHNhdFBvcG92ZXJBbmNob3JcbiAqICAgICAgI2FuY2hvcj1cImNsaWNrQW5jaG9yXCJcbiAqICAgICAgKGNsaWNrKT1cInBvcG92ZXIub3BlbigpXCI+Q2xpY2sgTWUhPC9kaXY+XG4gKiA8bHgtcG9wb3ZlciBbdHJpZ2dlcl09XCJhbmNob3JcIlxuICogICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWduPVwiYWZ0ZXJcIlxuICogICAgICAgICAgICAgdmVydGljYWxBbGlnbj1cImNlbnRlclwiXG4gKiAgICAgICAgICAgICAjcG9wb3Zlcj5cbiAqICAgIDxwPlBvcG92ZXIgY29udGVudDwvcD5cbiAqIDwvbHgtcG9wb3Zlcj5cbiAqXG4gKiBJZiB0aGlzIGNvbXBvbmVudCBpcyB1c2VkIHdpdGggYW5ndWxhckNvbXBpbGVyT3B0aW9ucyBzdHJpY3RUZW1wbGF0ZXM9dHJ1ZSxcbiAqIHNhdFBvcG92ZXJBbmNob3IgbXVzdCBiZSBzZXQgdG8gdGhlIHJlZmVyZW5jZSB0byB0aGUgU2F0UG9wb3ZlciBpbnNpZGUgbHgtcG9wb3Zlci5cbiAqXG4gKiBFeGFtcGxlOlxuICogIDxkaXYgW3NhdFBvcG92ZXJBbmNob3JdPVwicG9wb3Zlci5zYXRQb3BvdmVyXCI+PC9kaXY+XG4gKiA8bHgtcG9wb3ZlciAjcG9wb3Zlcj5cbiAqICAgIDxwPlBvcG92ZXIgY29udGVudDwvcD5cbiAqIDwvbHgtcG9wb3Zlcj5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbHgtcG9wb3ZlcicsXG4gIHRlbXBsYXRlVXJsOiAncG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydwb3BvdmVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHRyaWdnZXIhOiBQb3BvdmVyVHJpZ2dlckRpcmVjdGl2ZTtcbiAgQElucHV0KCkgaG9yaXpvbnRhbEFsaWduITogU2F0UG9wb3Zlckhvcml6b250YWxBbGlnbjtcbiAgQElucHV0KCkgdmVydGljYWxBbGlnbiE6IFNhdFBvcG92ZXJWZXJ0aWNhbEFsaWduO1xuICBASW5wdXQoKSBub01hcmdpbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhbGxvd092ZXJmbG93ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElmIHlvdSBoYXZlIGEgcG9wb3ZlciwgdGhhdCBzaG91bGQgdXN1YWxseSBiZSBkaXNwbGF5ZWQgYWJvdmUgb3IgYmVsb3cgaXRzIGFuY2hvcixcbiAgICogYW5kIHRoaXMgYW5jaG9yIGlzIGluIGEgc2Nyb2xsYWJsZSBjb250YWluZXIsIHlvdSBzaG91bGQgc2V0IHRoaXMgdG8gdHJ1ZS5cbiAgICogU2F0UG9wb3ZlciB3aWxsIG9wZW4gdGhpcyBwb3BvdmVyIGluIHRoZSBkaXJlY3Rpb24gd2hlcmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlLFxuICAgKiBzbyBpdHMgcG9zaXRpb24gbWlnaHQgZGlmZmVyIGZyb20gdGhlIGhvcml6b250YWxBbGlnbiBhbmQgdmVydGljYWxBbGlnbiB2YWx1ZXMuXG4gICAqIEluIHRoaXMgY2FzZSB3ZSByZWx5IG9uIHRoZSBTYXRQb3BvdmVyOjpfY2xhc3NMaXN0IHByb3BlcnR5IHRvIGdldCB0aGUgY29tcHV0ZWRcbiAgICogcG9zaXRpb24gb2YgdGhlIHBvcG92ZXIgYWZ0ZXIgb3BlbmluZy5cbiAgICovXG4gIEBJbnB1dCgpIGFkYXB0TWFyZ2luc0ZvclZpZXdwb3J0QWxpZ25DaGFuZ2UgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBWaWV3Q2hpbGQoU2F0UG9wb3ZlciwgeyBzdGF0aWM6IHRydWUgfSkgc2F0UG9wb3ZlciE6IFNhdFBvcG92ZXI7XG4gIEBWaWV3Q2hpbGQoJ2ltcGxpY2l0Q29udGVudCcsIHsgc3RhdGljOiB0cnVlIH0pIGltcGxpY2l0Q29udGVudCE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZChQb3BvdmVyQ29udGVudERpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pIGV4cGxpY2l0Q29udGVudD86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgbWFyZ2luQ2xhc3NlcyE6IHN0cmluZztcblxuICBnZXQgY29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5leHBsaWNpdENvbnRlbnQgfHwgdGhpcy5pbXBsaWNpdENvbnRlbnQ7XG4gIH1cblxuICBnZXQgaXNPcGVuKCkge1xuICAgIHJldHVybiB0aGlzLl9pc09wZW47XG4gIH1cbiAgcHJpdmF0ZSBfaXNPcGVuID0gZmFsc2U7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydob3Jpem9udGFsQWxpZ24nXSAmJiBjaGFuZ2VzWyd2ZXJ0aWNhbEFsaWduJ10pIHtcbiAgICAgIHRoaXMubWFyZ2luQ2xhc3NlcyA9IHRoaXMuZ2V0RGVmYXVsdE1hcmdpbkNsYXNzZXModGhpcy5ob3Jpem9udGFsQWxpZ24sIHRoaXMudmVydGljYWxBbGlnbik7XG4gICAgfVxuICB9XG5cbiAgb3BlbigpIHtcbiAgICB0aGlzLnNhdFBvcG92ZXIub3BlbigpO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5zYXRQb3BvdmVyLmNsb3NlKCk7XG4gIH1cblxuICBvbk9wZW4oKSB7XG4gICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLm9wZW5lZC5lbWl0KCk7XG4gIH1cblxuICBvbkFmdGVyT3BlbigpIHtcbiAgICBpZiAodGhpcy5hZGFwdE1hcmdpbnNGb3JWaWV3cG9ydEFsaWduQ2hhbmdlKSB7XG4gICAgICB0aGlzLm1hcmdpbkNsYXNzZXMgPSB0aGlzLmdldE1hcmdpbkNsYXNzZXNGb3JDbGFzc0xpc3QodGhpcy5zYXRQb3BvdmVyLl9jbGFzc0xpc3QpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xvc2UoKSB7XG4gICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdFBvcG92ZXI6Ol9jbGFzc0xpc3Qgd2lsbCBjb250YWluIGEgbWFwIG9mIGFsaWdubWVudCBDU1MgY2xhc3Nlcywgb25jZSB0aGUgcG9wb3ZlciB3YXMgb3BlbmVkLlxuICAgKiBUaGVzZSBhbGlnbm1lbnQgY2xhc3NlcyBjYW4gYmUgZGlmZmVyZW50IGZyb20gd2hhdCB5b3Ugd291bGQgZXhwZWN0IGZyb20gdGhlIGhvcml6b250YWwtIGFuZCB2ZXJ0aWNhbEFsaWduIGlucHV0cyxcbiAgICogYmVjYXVzZSB0aGVyZSBtaWdodCBub3QgYmUgZW5vdWdoIHNwYWNlIGFib3ZlIHRoZSBhbmNob3IgdG8gbWVldCB0aGUgdmVydGljYWxBbGlnbj0nYWJvdmUnIGNyaXRlcmlhLFxuICAgKiBzbyBpdCB3aWxsIGJlIGRpc3BsYXllZCBiZWxvdyB0aGUgYW5jaG9yIGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIGdldE1hcmdpbkNsYXNzZXNGb3JDbGFzc0xpc3Qoc2F0UG9wb3ZlckNsYXNzTGlzdDogeyBbY2xhc3NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0pOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm5vTWFyZ2luKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKHNhdFBvcG92ZXJDbGFzc0xpc3RbJ3NhdC1wb3BvdmVyLWFib3ZlJ10pIHtcbiAgICAgIHJldHVybiB0aGlzLm1hcmdpbkNsYXNzZXMuaW5jbHVkZXMoJ3RvcCcpID8gdGhpcy5tYXJnaW5DbGFzc2VzIDogJ3RvcCc7XG4gICAgfVxuXG4gICAgaWYgKHNhdFBvcG92ZXJDbGFzc0xpc3RbJ3NhdC1wb3BvdmVyLWJlbG93J10pIHtcbiAgICAgIHJldHVybiB0aGlzLm1hcmdpbkNsYXNzZXMuaW5jbHVkZXMoJ2JvdHRvbScpID8gdGhpcy5tYXJnaW5DbGFzc2VzIDogJ2JvdHRvbSc7XG4gICAgfVxuXG4gICAgaWYgKHNhdFBvcG92ZXJDbGFzc0xpc3RbJ3NhdC1wb3BvdmVyLWJlZm9yZSddKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXJnaW5DbGFzc2VzLmluY2x1ZGVzKCdsZWZ0JykgPyB0aGlzLm1hcmdpbkNsYXNzZXMgOiAnbGVmdCc7XG4gICAgfVxuXG4gICAgaWYgKHNhdFBvcG92ZXJDbGFzc0xpc3RbJ3NhdC1wb3BvdmVyLWFmdGVyJ10pIHtcbiAgICAgIHJldHVybiB0aGlzLm1hcmdpbkNsYXNzZXMuaW5jbHVkZXMoJ3JpZ2h0JykgPyB0aGlzLm1hcmdpbkNsYXNzZXMgOiAncmlnaHQnO1xuICAgIH1cblxuICAgIGlmIChzYXRQb3BvdmVyQ2xhc3NMaXN0WydzYXQtcG9wb3Zlci1jZW50ZXInXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRNYXJnaW5DbGFzc2VzKGhvcml6b250YWxBbGlnbjogU2F0UG9wb3Zlckhvcml6b250YWxBbGlnbiwgdmVydGljYWxBbGlnbjogU2F0UG9wb3ZlclZlcnRpY2FsQWxpZ24pOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm5vTWFyZ2luKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKGhvcml6b250YWxBbGlnbiA9PT0gJ2FmdGVyJykge1xuICAgICAgaWYgKHZlcnRpY2FsQWxpZ24gPT09ICdjZW50ZXInIHx8IHZlcnRpY2FsQWxpZ24gPT09ICdzdGFydCcgfHwgdmVydGljYWxBbGlnbiA9PT0gJ2VuZCcpIHtcbiAgICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQWxpZ24gPT09ICdhYm92ZScpIHtcbiAgICAgICAgcmV0dXJuICdyaWdodCB0b3AnO1xuICAgICAgfSBlbHNlIGlmICh2ZXJ0aWNhbEFsaWduID09PSAnYmVsb3cnKSB7XG4gICAgICAgIHJldHVybiAncmlnaHQgYm90dG9tJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaG9yaXpvbnRhbEFsaWduID09PSAnYmVmb3JlJykge1xuICAgICAgaWYgKHZlcnRpY2FsQWxpZ24gPT09ICdjZW50ZXInIHx8IHZlcnRpY2FsQWxpZ24gPT09ICdzdGFydCcgfHwgdmVydGljYWxBbGlnbiA9PT0gJ2VuZCcpIHtcbiAgICAgICAgcmV0dXJuICdsZWZ0JztcbiAgICAgIH0gZWxzZSBpZiAodmVydGljYWxBbGlnbiA9PT0gJ2Fib3ZlJykge1xuICAgICAgICByZXR1cm4gJ2xlZnQgdG9wJztcbiAgICAgIH0gZWxzZSBpZiAodmVydGljYWxBbGlnbiA9PT0gJ2JlbG93Jykge1xuICAgICAgICByZXR1cm4gJ2xlZnQgYm90dG9tJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaG9yaXpvbnRhbEFsaWduID09PSAnY2VudGVyJyB8fCBob3Jpem9udGFsQWxpZ24gPT09ICdzdGFydCcgfHwgaG9yaXpvbnRhbEFsaWduID09PSAnZW5kJykge1xuICAgICAgaWYgKHZlcnRpY2FsQWxpZ24gPT09ICdhYm92ZScpIHtcbiAgICAgICAgcmV0dXJuICd0b3AnO1xuICAgICAgfSBlbHNlIGlmICh2ZXJ0aWNhbEFsaWduID09PSAnYmVsb3cnKSB7XG4gICAgICAgIHJldHVybiAnYm90dG9tJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4iLCI8c2F0LXBvcG92ZXJcbiAgW2FuY2hvcl09XCJ0cmlnZ2VyLmFuY2hvclwiXG4gIFtob3Jpem9udGFsQWxpZ25dPVwiaG9yaXpvbnRhbEFsaWduXCJcbiAgW3ZlcnRpY2FsQWxpZ25dPVwidmVydGljYWxBbGlnblwiXG4gIFtyZXN0b3JlRm9jdXNdPVwiZmFsc2VcIlxuICBbbG9ja0FsaWdubWVudF09XCJ0cnVlXCJcbiAgW2F1dG9Gb2N1c109XCJmYWxzZVwiXG4gIG9wZW5UcmFuc2l0aW9uPVwiMG1zXCJcbiAgY2xvc2VUcmFuc2l0aW9uPVwiMG1zXCJcbiAgKG9wZW5lZCk9XCJvbk9wZW4oKVwiXG4gIChhZnRlck9wZW4pPVwib25BZnRlck9wZW4oKVwiXG4gIChjbG9zZWQpPVwib25DbG9zZSgpXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwicG9wb3ZlckNvbnRhaW5lclwiXG4gICAgW25nQ2xhc3NdPVwibWFyZ2luQ2xhc3Nlc1wiXG4gICAgW2NsYXNzLm92ZXJmbG93SGlkZGVuXT1cIiFhbGxvd092ZXJmbG93XCJcbiAgICAobW91c2VlbnRlcik9XCJ0cmlnZ2VyLnNob3dQb3BvdmVyKHRydWUpXCJcbiAgICAobW91c2VsZWF2ZSk9XCJ0cmlnZ2VyLmNsb3NlUG9wb3Zlcih0cnVlKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNPcGVuXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvc2F0LXBvcG92ZXI+XG48bmctdGVtcGxhdGUgI2ltcGxpY2l0Q29udGVudD5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9wb3BvdmVyLXVpL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL3BvcG92ZXItdWkvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkksT0FBTyxFQUFFLFVBQVUsRUFBc0QsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7OztBQUdyRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlERztBQU1ILE1BQU0sT0FBTyxnQkFBZ0I7SUFMN0I7UUFTVyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFM0I7Ozs7Ozs7V0FPRztRQUNNLHVDQUFrQyxHQUFHLEtBQUssQ0FBQztRQUUxQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNsQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQWdCcEMsWUFBTyxHQUFHLEtBQUssQ0FBQztLQW1HekI7SUExR0MsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBR0QsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQzFELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzdGO0lBQ0gsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxrQ0FBa0MsRUFBRTtZQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3BGO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLDRCQUE0QixDQUFDLG1CQUFxRDtRQUN4RixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELElBQUksbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsRUFBRTtZQUM1QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDeEU7UUFFRCxJQUFJLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDNUMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1NBQzlFO1FBRUQsSUFBSSxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO1lBQzdDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUMxRTtRQUVELElBQUksbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsRUFBRTtZQUM1QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7U0FDNUU7UUFFRCxJQUFJLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLEVBQUU7WUFDN0MsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVPLHVCQUF1QixDQUFDLGVBQTBDLEVBQUUsYUFBc0M7UUFDaEgsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFFRCxJQUFJLGVBQWUsS0FBSyxPQUFPLEVBQUU7WUFDL0IsSUFBSSxhQUFhLEtBQUssUUFBUSxJQUFJLGFBQWEsS0FBSyxPQUFPLElBQUksYUFBYSxLQUFLLEtBQUssRUFBRTtnQkFDdEYsT0FBTyxPQUFPLENBQUM7YUFDaEI7aUJBQU0sSUFBSSxhQUFhLEtBQUssT0FBTyxFQUFFO2dCQUNwQyxPQUFPLFdBQVcsQ0FBQzthQUNwQjtpQkFBTSxJQUFJLGFBQWEsS0FBSyxPQUFPLEVBQUU7Z0JBQ3BDLE9BQU8sY0FBYyxDQUFDO2FBQ3ZCO1NBQ0Y7UUFFRCxJQUFJLGVBQWUsS0FBSyxRQUFRLEVBQUU7WUFDaEMsSUFBSSxhQUFhLEtBQUssUUFBUSxJQUFJLGFBQWEsS0FBSyxPQUFPLElBQUksYUFBYSxLQUFLLEtBQUssRUFBRTtnQkFDdEYsT0FBTyxNQUFNLENBQUM7YUFDZjtpQkFBTSxJQUFJLGFBQWEsS0FBSyxPQUFPLEVBQUU7Z0JBQ3BDLE9BQU8sVUFBVSxDQUFDO2FBQ25CO2lCQUFNLElBQUksYUFBYSxLQUFLLE9BQU8sRUFBRTtnQkFDcEMsT0FBTyxhQUFhLENBQUM7YUFDdEI7U0FDRjtRQUVELElBQUksZUFBZSxLQUFLLFFBQVEsSUFBSSxlQUFlLEtBQUssT0FBTyxJQUFJLGVBQWUsS0FBSyxLQUFLLEVBQUU7WUFDNUYsSUFBSSxhQUFhLEtBQUssT0FBTyxFQUFFO2dCQUM3QixPQUFPLEtBQUssQ0FBQzthQUNkO2lCQUFNLElBQUksYUFBYSxLQUFLLE9BQU8sRUFBRTtnQkFDcEMsT0FBTyxRQUFRLENBQUM7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs7NkdBcklVLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLDRZQXdCYix1QkFBdUIsMkJBQVUsV0FBVyx1RkFIL0MsVUFBVSxzTUNqRnZCLCsyQkE2QkE7MkZEK0JhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxZQUFZOzhCQUtiLE9BQU87c0JBQWYsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBVUcsa0NBQWtDO3NCQUExQyxLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBRWtDLFVBQVU7c0JBQWxELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDUyxlQUFlO3NCQUE5RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFOEIsZUFBZTtzQkFBMUYsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2F0UG9wb3ZlciwgU2F0UG9wb3Zlckhvcml6b250YWxBbGlnbiwgU2F0UG9wb3ZlclZlcnRpY2FsQWxpZ24gfSBmcm9tICdAbmNzdGF0ZS9zYXQtcG9wb3Zlcic7XG5pbXBvcnQgeyBQb3BvdmVyQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcG9wb3Zlci1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBQb3BvdmVyVHJpZ2dlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcG9wb3Zlci1ob3Zlci5kaXJlY3RpdmUnO1xuXG4vKipcbiAqIEhPVyBUTyBVU0VcbiAqXG4gKiBUaGlzIHBvcG92ZXIgZW5jYXBzdWxhdGVzIHRoaXMgb3BlbiBzb3VyY2UgbGlicmFyeTogaHR0cHM6Ly9naXRodWIuY29tL25jc3RhdGUtc2F0L3BvcG92ZXIsXG4gKiBtYWtlIHN1cmUgdG8gYWxzbyBjaGVjayBvdXQgdGhlIGRvY3Mgb3ZlciB0aGVyZS5cbiAqXG4gKiBBcyBvZiB0b2RheSB0aGV5IGFyZSB0d28gdHJpZ2dlciBzdHJhdGVnaWVzIHRvIGRpc3BsYXkgYSBwb3BvdmVyLlxuICogMS4gU2hvdyBvbiBob3ZlcmluZyB0aGUgYW5jaG9yIGFuZCB3aGlsZSBob3ZlcmluZyB0aGUgcG9wb3ZlciBib2R5LlxuICogMi4gU2hvdyBvbiBjbGljayBhbmQgd2hpbGUgaG92ZXJpbmcgdGhlIHBvcG92ZXIgYm9keS5cbiAqXG4gKiBGb3IgdXNlIGNhc2UgMS4geW91IHdvdWxkIHVzZSB0aGUgbHhQb3BvdmVySG92ZXIgZGlyZWN0aXZlLCB3aGljaCBleHBvcnRzIGFzIGhvdmVyQW5jaG9yLlxuICpcbiAqIEV4YW1wbGU6XG4gKiA8ZGl2IGx4UG9wb3ZlckhvdmVyXG4gKiAgICAgIGhvdmVyQW5jaG9yXG4gKiAgICAgIHNhdFBvcG92ZXJBbmNob3JcbiAqICAgICAgI2FuY2hvcj1cImhvdmVyQW5jaG9yXCI+PC9kaXY+XG4gKiA8bHgtcG9wb3ZlciBbdHJpZ2dlcl09XCJhbmNob3JcIlxuICogICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWduPVwiYWZ0ZXJcIlxuICogICAgICAgICAgICAgdmVydGljYWxBbGlnbj1cImNlbnRlclwiPlxuICogICAgPHA+UG9wb3ZlciBjb250ZW50PC9wPlxuICogPC9seC1wb3BvdmVyPlxuICpcbiAqIEZvciB1c2UgY2FzZSAyLiB5b3Ugd291bGQgdXNlIHRoZSBseFBvcG92ZXJDbGljayBkaXJlY3RpdmUsIHdoaWNoIGV4cG9ydHMgYXMgY2xpY2tBbmNob3IuXG4gKiBOb3RlOiBTaW5jZSB0aGUgb25seSBjb21wb25lbnQgd2hlcmUgd2UgdXNlIHRoZSBseFBvcG92ZXJDbGljayBkaXJlY3RpdmUgKFJlcG9ydENvbXBvbmVudClcbiAqIG5lZWRzIHRvIGZldGNoIHNvbWUgZGF0YSBiZWZvcmUgb3BlbmluZyBpdCwgd2UgZG8gbm90IHJlZ2lzdGVyIGEgY2xpY2sgRXZlbnRMaXN0ZW5lciBpbiB0aGlzIGRpcmVjdGl2ZSxcbiAqIGJ1dCByZXF1aXJlIHRoZSBkZXZlbG9wZXIgdG8gaW1wbGVtZW50IHRoYXQgaW4gdGhlIGNvbXBvbmVudCwgd2hlcmUgdGhlIHBvcG92ZXIgaXMgdXNlZC5cbiAqXG4gKiBFeGFtcGxlOlxuICogPGRpdiBseFBvcG92ZXJDbGlja1xuICogICAgICBjbGlja0FuY2hvclxuICogICAgICBzYXRQb3BvdmVyQW5jaG9yXG4gKiAgICAgICNhbmNob3I9XCJjbGlja0FuY2hvclwiXG4gKiAgICAgIChjbGljayk9XCJwb3BvdmVyLm9wZW4oKVwiPkNsaWNrIE1lITwvZGl2PlxuICogPGx4LXBvcG92ZXIgW3RyaWdnZXJdPVwiYW5jaG9yXCJcbiAqICAgICAgICAgICAgIGhvcml6b250YWxBbGlnbj1cImFmdGVyXCJcbiAqICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ249XCJjZW50ZXJcIlxuICogICAgICAgICAgICAgI3BvcG92ZXI+XG4gKiAgICA8cD5Qb3BvdmVyIGNvbnRlbnQ8L3A+XG4gKiA8L2x4LXBvcG92ZXI+XG4gKlxuICogSWYgdGhpcyBjb21wb25lbnQgaXMgdXNlZCB3aXRoIGFuZ3VsYXJDb21waWxlck9wdGlvbnMgc3RyaWN0VGVtcGxhdGVzPXRydWUsXG4gKiBzYXRQb3BvdmVyQW5jaG9yIG11c3QgYmUgc2V0IHRvIHRoZSByZWZlcmVuY2UgdG8gdGhlIFNhdFBvcG92ZXIgaW5zaWRlIGx4LXBvcG92ZXIuXG4gKlxuICogRXhhbXBsZTpcbiAqICA8ZGl2IFtzYXRQb3BvdmVyQW5jaG9yXT1cInBvcG92ZXIuc2F0UG9wb3ZlclwiPjwvZGl2PlxuICogPGx4LXBvcG92ZXIgI3BvcG92ZXI+XG4gKiAgICA8cD5Qb3BvdmVyIGNvbnRlbnQ8L3A+XG4gKiA8L2x4LXBvcG92ZXI+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x4LXBvcG92ZXInLFxuICB0ZW1wbGF0ZVVybDogJ3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsncG9wb3Zlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFBvcG92ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSB0cmlnZ2VyITogUG9wb3ZlclRyaWdnZXJEaXJlY3RpdmU7XG4gIEBJbnB1dCgpIGhvcml6b250YWxBbGlnbiE6IFNhdFBvcG92ZXJIb3Jpem9udGFsQWxpZ247XG4gIEBJbnB1dCgpIHZlcnRpY2FsQWxpZ24hOiBTYXRQb3BvdmVyVmVydGljYWxBbGlnbjtcbiAgQElucHV0KCkgbm9NYXJnaW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWxsb3dPdmVyZmxvdyA9IGZhbHNlO1xuICBASW5wdXQoKSBhdXRvRm9jdXMgPSBmYWxzZTtcblxuICAvKipcbiAgICogSWYgeW91IGhhdmUgYSBwb3BvdmVyLCB0aGF0IHNob3VsZCB1c3VhbGx5IGJlIGRpc3BsYXllZCBhYm92ZSBvciBiZWxvdyBpdHMgYW5jaG9yLFxuICAgKiBhbmQgdGhpcyBhbmNob3IgaXMgaW4gYSBzY3JvbGxhYmxlIGNvbnRhaW5lciwgeW91IHNob3VsZCBzZXQgdGhpcyB0byB0cnVlLlxuICAgKiBTYXRQb3BvdmVyIHdpbGwgb3BlbiB0aGlzIHBvcG92ZXIgaW4gdGhlIGRpcmVjdGlvbiB3aGVyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UsXG4gICAqIHNvIGl0cyBwb3NpdGlvbiBtaWdodCBkaWZmZXIgZnJvbSB0aGUgaG9yaXpvbnRhbEFsaWduIGFuZCB2ZXJ0aWNhbEFsaWduIHZhbHVlcy5cbiAgICogSW4gdGhpcyBjYXNlIHdlIHJlbHkgb24gdGhlIFNhdFBvcG92ZXI6Ol9jbGFzc0xpc3QgcHJvcGVydHkgdG8gZ2V0IHRoZSBjb21wdXRlZFxuICAgKiBwb3NpdGlvbiBvZiB0aGUgcG9wb3ZlciBhZnRlciBvcGVuaW5nLlxuICAgKi9cbiAgQElucHV0KCkgYWRhcHRNYXJnaW5zRm9yVmlld3BvcnRBbGlnbkNoYW5nZSA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBvcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZChTYXRQb3BvdmVyLCB7IHN0YXRpYzogdHJ1ZSB9KSBzYXRQb3BvdmVyITogU2F0UG9wb3ZlcjtcbiAgQFZpZXdDaGlsZCgnaW1wbGljaXRDb250ZW50JywgeyBzdGF0aWM6IHRydWUgfSkgaW1wbGljaXRDb250ZW50ITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKFBvcG92ZXJDb250ZW50RGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSkgZXhwbGljaXRDb250ZW50PzogVGVtcGxhdGVSZWY8YW55PjtcblxuICBtYXJnaW5DbGFzc2VzITogc3RyaW5nO1xuXG4gIGdldCBjb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmV4cGxpY2l0Q29udGVudCB8fCB0aGlzLmltcGxpY2l0Q29udGVudDtcbiAgfVxuXG4gIGdldCBpc09wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzT3BlbjtcbiAgfVxuICBwcml2YXRlIF9pc09wZW4gPSBmYWxzZTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2hvcml6b250YWxBbGlnbiddICYmIGNoYW5nZXNbJ3ZlcnRpY2FsQWxpZ24nXSkge1xuICAgICAgdGhpcy5tYXJnaW5DbGFzc2VzID0gdGhpcy5nZXREZWZhdWx0TWFyZ2luQ2xhc3Nlcyh0aGlzLmhvcml6b250YWxBbGlnbiwgdGhpcy52ZXJ0aWNhbEFsaWduKTtcbiAgICB9XG4gIH1cblxuICBvcGVuKCkge1xuICAgIHRoaXMuc2F0UG9wb3Zlci5vcGVuKCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLnNhdFBvcG92ZXIuY2xvc2UoKTtcbiAgfVxuXG4gIG9uT3BlbigpIHtcbiAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xuICAgIHRoaXMub3BlbmVkLmVtaXQoKTtcbiAgfVxuXG4gIG9uQWZ0ZXJPcGVuKCkge1xuICAgIGlmICh0aGlzLmFkYXB0TWFyZ2luc0ZvclZpZXdwb3J0QWxpZ25DaGFuZ2UpIHtcbiAgICAgIHRoaXMubWFyZ2luQ2xhc3NlcyA9IHRoaXMuZ2V0TWFyZ2luQ2xhc3Nlc0ZvckNsYXNzTGlzdCh0aGlzLnNhdFBvcG92ZXIuX2NsYXNzTGlzdCk7XG4gICAgfVxuICB9XG5cbiAgb25DbG9zZSgpIHtcbiAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2F0UG9wb3Zlcjo6X2NsYXNzTGlzdCB3aWxsIGNvbnRhaW4gYSBtYXAgb2YgYWxpZ25tZW50IENTUyBjbGFzc2VzLCBvbmNlIHRoZSBwb3BvdmVyIHdhcyBvcGVuZWQuXG4gICAqIFRoZXNlIGFsaWdubWVudCBjbGFzc2VzIGNhbiBiZSBkaWZmZXJlbnQgZnJvbSB3aGF0IHlvdSB3b3VsZCBleHBlY3QgZnJvbSB0aGUgaG9yaXpvbnRhbC0gYW5kIHZlcnRpY2FsQWxpZ24gaW5wdXRzLFxuICAgKiBiZWNhdXNlIHRoZXJlIG1pZ2h0IG5vdCBiZSBlbm91Z2ggc3BhY2UgYWJvdmUgdGhlIGFuY2hvciB0byBtZWV0IHRoZSB2ZXJ0aWNhbEFsaWduPSdhYm92ZScgY3JpdGVyaWEsXG4gICAqIHNvIGl0IHdpbGwgYmUgZGlzcGxheWVkIGJlbG93IHRoZSBhbmNob3IgaW5zdGVhZC5cbiAgICovXG4gIHByaXZhdGUgZ2V0TWFyZ2luQ2xhc3Nlc0ZvckNsYXNzTGlzdChzYXRQb3BvdmVyQ2xhc3NMaXN0OiB7IFtjbGFzc05hbWU6IHN0cmluZ106IGJvb2xlYW4gfSk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubm9NYXJnaW4pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAoc2F0UG9wb3ZlckNsYXNzTGlzdFsnc2F0LXBvcG92ZXItYWJvdmUnXSkge1xuICAgICAgcmV0dXJuIHRoaXMubWFyZ2luQ2xhc3Nlcy5pbmNsdWRlcygndG9wJykgPyB0aGlzLm1hcmdpbkNsYXNzZXMgOiAndG9wJztcbiAgICB9XG5cbiAgICBpZiAoc2F0UG9wb3ZlckNsYXNzTGlzdFsnc2F0LXBvcG92ZXItYmVsb3cnXSkge1xuICAgICAgcmV0dXJuIHRoaXMubWFyZ2luQ2xhc3Nlcy5pbmNsdWRlcygnYm90dG9tJykgPyB0aGlzLm1hcmdpbkNsYXNzZXMgOiAnYm90dG9tJztcbiAgICB9XG5cbiAgICBpZiAoc2F0UG9wb3ZlckNsYXNzTGlzdFsnc2F0LXBvcG92ZXItYmVmb3JlJ10pIHtcbiAgICAgIHJldHVybiB0aGlzLm1hcmdpbkNsYXNzZXMuaW5jbHVkZXMoJ2xlZnQnKSA/IHRoaXMubWFyZ2luQ2xhc3NlcyA6ICdsZWZ0JztcbiAgICB9XG5cbiAgICBpZiAoc2F0UG9wb3ZlckNsYXNzTGlzdFsnc2F0LXBvcG92ZXItYWZ0ZXInXSkge1xuICAgICAgcmV0dXJuIHRoaXMubWFyZ2luQ2xhc3Nlcy5pbmNsdWRlcygncmlnaHQnKSA/IHRoaXMubWFyZ2luQ2xhc3NlcyA6ICdyaWdodCc7XG4gICAgfVxuXG4gICAgaWYgKHNhdFBvcG92ZXJDbGFzc0xpc3RbJ3NhdC1wb3BvdmVyLWNlbnRlciddKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdE1hcmdpbkNsYXNzZXMoaG9yaXpvbnRhbEFsaWduOiBTYXRQb3BvdmVySG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWduOiBTYXRQb3BvdmVyVmVydGljYWxBbGlnbik6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubm9NYXJnaW4pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAoaG9yaXpvbnRhbEFsaWduID09PSAnYWZ0ZXInKSB7XG4gICAgICBpZiAodmVydGljYWxBbGlnbiA9PT0gJ2NlbnRlcicgfHwgdmVydGljYWxBbGlnbiA9PT0gJ3N0YXJ0JyB8fCB2ZXJ0aWNhbEFsaWduID09PSAnZW5kJykge1xuICAgICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICAgIH0gZWxzZSBpZiAodmVydGljYWxBbGlnbiA9PT0gJ2Fib3ZlJykge1xuICAgICAgICByZXR1cm4gJ3JpZ2h0IHRvcCc7XG4gICAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQWxpZ24gPT09ICdiZWxvdycpIHtcbiAgICAgICAgcmV0dXJuICdyaWdodCBib3R0b20nO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChob3Jpem9udGFsQWxpZ24gPT09ICdiZWZvcmUnKSB7XG4gICAgICBpZiAodmVydGljYWxBbGlnbiA9PT0gJ2NlbnRlcicgfHwgdmVydGljYWxBbGlnbiA9PT0gJ3N0YXJ0JyB8fCB2ZXJ0aWNhbEFsaWduID09PSAnZW5kJykge1xuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgICAgfSBlbHNlIGlmICh2ZXJ0aWNhbEFsaWduID09PSAnYWJvdmUnKSB7XG4gICAgICAgIHJldHVybiAnbGVmdCB0b3AnO1xuICAgICAgfSBlbHNlIGlmICh2ZXJ0aWNhbEFsaWduID09PSAnYmVsb3cnKSB7XG4gICAgICAgIHJldHVybiAnbGVmdCBib3R0b20nO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChob3Jpem9udGFsQWxpZ24gPT09ICdjZW50ZXInIHx8IGhvcml6b250YWxBbGlnbiA9PT0gJ3N0YXJ0JyB8fCBob3Jpem9udGFsQWxpZ24gPT09ICdlbmQnKSB7XG4gICAgICBpZiAodmVydGljYWxBbGlnbiA9PT0gJ2Fib3ZlJykge1xuICAgICAgICByZXR1cm4gJ3RvcCc7XG4gICAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQWxpZ24gPT09ICdiZWxvdycpIHtcbiAgICAgICAgcmV0dXJuICdib3R0b20nO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cbiIsIjxzYXQtcG9wb3ZlclxuICBbYW5jaG9yXT1cInRyaWdnZXIuYW5jaG9yXCJcbiAgW2hvcml6b250YWxBbGlnbl09XCJob3Jpem9udGFsQWxpZ25cIlxuICBbdmVydGljYWxBbGlnbl09XCJ2ZXJ0aWNhbEFsaWduXCJcbiAgW3Jlc3RvcmVGb2N1c109XCJmYWxzZVwiXG4gIFtsb2NrQWxpZ25tZW50XT1cInRydWVcIlxuICBbYXV0b0ZvY3VzXT1cImF1dG9Gb2N1c1wiXG4gIG9wZW5UcmFuc2l0aW9uPVwiMG1zXCJcbiAgY2xvc2VUcmFuc2l0aW9uPVwiMG1zXCJcbiAgKG9wZW5lZCk9XCJvbk9wZW4oKVwiXG4gIChhZnRlck9wZW4pPVwib25BZnRlck9wZW4oKVwiXG4gIChjbG9zZWQpPVwib25DbG9zZSgpXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwicG9wb3ZlckNvbnRhaW5lclwiXG4gICAgW25nQ2xhc3NdPVwibWFyZ2luQ2xhc3Nlc1wiXG4gICAgW2NsYXNzLm92ZXJmbG93SGlkZGVuXT1cIiFhbGxvd092ZXJmbG93XCJcbiAgICAobW91c2VlbnRlcik9XCJ0cmlnZ2VyLnNob3dQb3BvdmVyKHRydWUpXCJcbiAgICAobW91c2VsZWF2ZSk9XCJ0cmlnZ2VyLmNsb3NlUG9wb3Zlcih0cnVlKVwiXG4gICAgKGtleWRvd24uZXNjYXBlKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdHJpZ2dlci5jbG9zZVBvcG92ZXIodHJ1ZSlcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzT3BlblwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L3NhdC1wb3BvdmVyPlxuPG5nLXRlbXBsYXRlICNpbXBsaWNpdENvbnRlbnQ+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -3060,15 +3060,6 @@ class DateInputComponent {
3060
3060
  this.showDatepicker = false;
3061
3061
  }
3062
3062
  }
3063
- onTab(forward) {
3064
- if (forward && this.showDatepicker) {
3065
- this.hidePopup();
3066
- return false; // Prevent tab for now as ng2-bootstrap datepicker has a tabstop: 2 tabs needed to navigate for now
3067
- // TODO: Check again in new version
3068
- }
3069
- this.hidePopup();
3070
- return true;
3071
- }
3072
3063
  onDateStringChange(newDateString, emit = true) {
3073
3064
  if (isValidDateString(newDateString)) {
3074
3065
  const date = createDateFromDateString(newDateString);
@@ -3150,7 +3141,7 @@ DateInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", versi
3150
3141
  DateInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: DateInputComponent, selector: "lx-date-input", inputs: { date: "date", dateString: "dateString", valueAccessor: "valueAccessor", inputId: "inputId", renderingStyle: "renderingStyle", placeholder: "placeholder", datepickerMode: "datepickerMode", initDateString: "initDateString", minDate: "minDate", maxDate: "maxDate", minMode: "minMode", maxMode: "maxMode", showWeeks: "showWeeks", formatDay: "formatDay", formatMonth: "formatMonth", formatYear: "formatYear", formatDayHeader: "formatDayHeader", formatDayTitle: "formatDayTitle", formatMonthTitle: "formatMonthTitle", startingDay: "startingDay", yearRange: "yearRange", onlyCurrentMonth: "onlyCurrentMonth", shortcutPropagation: "shortcutPropagation", customClass: "customClass", disabled: "disabled", dateDisabled: "dateDisabled" }, outputs: { dateChange: "dateChange", dateStringChange: "dateStringChange" }, providers: [
3151
3142
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateInputComponent), multi: true },
3152
3143
  { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateInputComponent), multi: true }
3153
- ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"backdrop\" *ngIf=\"showDatepicker\" (click)=\"hidePopup()\"></div>\n<span class=\"wrapper\" [class.forLink]=\"renderingStyle === 'LINK'\" [class.has-error]=\"hasError\">\n <input\n #input\n class=\"form-control dateControl\"\n placeholder=\"{{ placeholder }}\"\n [id]=\"inputId\"\n [(ngModel)]=\"dateString\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onDateStringChange($event)\"\n (focus)=\"showPopup()\"\n (blur)=\"onBlur()\"\n (keydown.enter)=\"hidePopup()\"\n (keydown.escape)=\"hidePopup()\"\n (keydown.tab)=\"onTab(true)\"\n (keydown.shift.tab)=\"onTab(false)\"\n [class.text-danger]=\"hasError\"\n *ngIf=\"renderingStyle === 'INPUT'\"\n />\n <a class=\"dateControl\" (click)=\"togglePopup()\" *ngIf=\"renderingStyle === 'LINK'\">{{ date | lxDate: dateFormat }}</a>\n <div class=\"datepickerContainer\">\n <div class=\"calendar\">\n <datepicker\n class=\"popup\"\n *ngIf=\"showDatepicker\"\n (selectionDone)=\"onSelectionDone($event)\"\n [ngModel]=\"date\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [shortcutPropagation]=\"shortcutPropagation\"\n [customClass]=\"customClass\"\n [dateDisabled]=\"dateDisabled\"\n >\n </datepicker>\n </div>\n </div>\n</span>\n", styles: [".backdrop{position:fixed;top:0;right:0;bottom:0;left:0}.datepickerContainer{position:absolute;z-index:700}.wrapper .forLink .popup{top:15px}.dateControl,.calendar{position:relative}.popup{position:relative;left:0;z-index:700;border-radius:3px}.popup ::ng-deep .text-info{color:#2a303d}.popup ::ng-deep .text-muted{color:#99a5bb}.popup ::ng-deep .btn.active,.popup ::ng-deep .btn.active .text-info{color:#fff;background-color:#2a303d}.popup ::ng-deep .well{margin:0;border:1px solid #2a303d}:host-context(.input-group) .datepickerContainer{top:100%}\n"], components: [{ type: i1$3.DatePickerComponent, selector: "datepicker", inputs: ["datepickerMode", "showWeeks", "activeDate", "initDate", "minDate", "maxDate", "minMode", "maxMode", "formatDay", "formatMonth", "formatYear", "formatDayHeader", "formatDayTitle", "formatMonthTitle", "startingDay", "yearRange", "onlyCurrentMonth", "shortcutPropagation", "monthColLimit", "yearColLimit", "customClass", "dateDisabled", "dayDisabled"], outputs: ["selectionDone", "activeDateChange"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "lxDate": CustomDatePipe } });
3144
+ ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"backdrop\" *ngIf=\"showDatepicker\" (click)=\"hidePopup()\"></div>\n<span class=\"wrapper\" [class.forLink]=\"renderingStyle === 'LINK'\" [class.has-error]=\"hasError\">\n <input\n #input\n class=\"form-control dateControl\"\n placeholder=\"{{ placeholder }}\"\n [id]=\"inputId\"\n [(ngModel)]=\"dateString\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onDateStringChange($event)\"\n (focus)=\"showPopup()\"\n (blur)=\"onBlur()\"\n (keydown.enter)=\"hidePopup()\"\n (keydown.escape)=\"hidePopup()\"\n (keydown.tab)=\"hidePopup()\"\n (keydown.shift.tab)=\"hidePopup()\"\n [class.text-danger]=\"hasError\"\n *ngIf=\"renderingStyle === 'INPUT'\"\n />\n <a class=\"dateControl\" (click)=\"togglePopup()\" *ngIf=\"renderingStyle === 'LINK'\">{{ date | lxDate: dateFormat }}</a>\n <div class=\"datepickerContainer\">\n <div class=\"calendar\">\n <datepicker\n class=\"popup\"\n *ngIf=\"showDatepicker\"\n (selectionDone)=\"onSelectionDone($event)\"\n [ngModel]=\"date\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [shortcutPropagation]=\"shortcutPropagation\"\n [customClass]=\"customClass\"\n [dateDisabled]=\"dateDisabled\"\n >\n </datepicker>\n </div>\n </div>\n</span>\n", styles: [".backdrop{position:fixed;top:0;right:0;bottom:0;left:0}.datepickerContainer{position:absolute;z-index:700}.wrapper .forLink .popup{top:15px}.dateControl,.calendar{position:relative}.popup{position:relative;left:0;z-index:700;border-radius:3px}.popup ::ng-deep .text-info{color:#2a303d}.popup ::ng-deep .text-muted{color:#99a5bb}.popup ::ng-deep .btn.active,.popup ::ng-deep .btn.active .text-info{color:#fff;background-color:#2a303d}.popup ::ng-deep .well{margin:0;border:1px solid #2a303d}:host-context(.input-group) .datepickerContainer{top:100%}\n"], components: [{ type: i1$3.DatePickerComponent, selector: "datepicker", inputs: ["datepickerMode", "showWeeks", "activeDate", "initDate", "minDate", "maxDate", "minMode", "maxMode", "formatDay", "formatMonth", "formatYear", "formatDayHeader", "formatDayTitle", "formatMonthTitle", "startingDay", "yearRange", "onlyCurrentMonth", "shortcutPropagation", "monthColLimit", "yearColLimit", "customClass", "dateDisabled", "dayDisabled"], outputs: ["selectionDone", "activeDateChange"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "lxDate": CustomDatePipe } });
3154
3145
  __decorate([
3155
3146
  Observe('initDateString')
3156
3147
  ], DateInputComponent.prototype, "initDateString$", void 0);
@@ -3159,7 +3150,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
3159
3150
  args: [{ selector: 'lx-date-input', providers: [
3160
3151
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateInputComponent), multi: true },
3161
3152
  { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateInputComponent), multi: true }
3162
- ], template: "<div class=\"backdrop\" *ngIf=\"showDatepicker\" (click)=\"hidePopup()\"></div>\n<span class=\"wrapper\" [class.forLink]=\"renderingStyle === 'LINK'\" [class.has-error]=\"hasError\">\n <input\n #input\n class=\"form-control dateControl\"\n placeholder=\"{{ placeholder }}\"\n [id]=\"inputId\"\n [(ngModel)]=\"dateString\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onDateStringChange($event)\"\n (focus)=\"showPopup()\"\n (blur)=\"onBlur()\"\n (keydown.enter)=\"hidePopup()\"\n (keydown.escape)=\"hidePopup()\"\n (keydown.tab)=\"onTab(true)\"\n (keydown.shift.tab)=\"onTab(false)\"\n [class.text-danger]=\"hasError\"\n *ngIf=\"renderingStyle === 'INPUT'\"\n />\n <a class=\"dateControl\" (click)=\"togglePopup()\" *ngIf=\"renderingStyle === 'LINK'\">{{ date | lxDate: dateFormat }}</a>\n <div class=\"datepickerContainer\">\n <div class=\"calendar\">\n <datepicker\n class=\"popup\"\n *ngIf=\"showDatepicker\"\n (selectionDone)=\"onSelectionDone($event)\"\n [ngModel]=\"date\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [shortcutPropagation]=\"shortcutPropagation\"\n [customClass]=\"customClass\"\n [dateDisabled]=\"dateDisabled\"\n >\n </datepicker>\n </div>\n </div>\n</span>\n", styles: [".backdrop{position:fixed;top:0;right:0;bottom:0;left:0}.datepickerContainer{position:absolute;z-index:700}.wrapper .forLink .popup{top:15px}.dateControl,.calendar{position:relative}.popup{position:relative;left:0;z-index:700;border-radius:3px}.popup ::ng-deep .text-info{color:#2a303d}.popup ::ng-deep .text-muted{color:#99a5bb}.popup ::ng-deep .btn.active,.popup ::ng-deep .btn.active .text-info{color:#fff;background-color:#2a303d}.popup ::ng-deep .well{margin:0;border:1px solid #2a303d}:host-context(.input-group) .datepickerContainer{top:100%}\n"] }]
3153
+ ], template: "<div class=\"backdrop\" *ngIf=\"showDatepicker\" (click)=\"hidePopup()\"></div>\n<span class=\"wrapper\" [class.forLink]=\"renderingStyle === 'LINK'\" [class.has-error]=\"hasError\">\n <input\n #input\n class=\"form-control dateControl\"\n placeholder=\"{{ placeholder }}\"\n [id]=\"inputId\"\n [(ngModel)]=\"dateString\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onDateStringChange($event)\"\n (focus)=\"showPopup()\"\n (blur)=\"onBlur()\"\n (keydown.enter)=\"hidePopup()\"\n (keydown.escape)=\"hidePopup()\"\n (keydown.tab)=\"hidePopup()\"\n (keydown.shift.tab)=\"hidePopup()\"\n [class.text-danger]=\"hasError\"\n *ngIf=\"renderingStyle === 'INPUT'\"\n />\n <a class=\"dateControl\" (click)=\"togglePopup()\" *ngIf=\"renderingStyle === 'LINK'\">{{ date | lxDate: dateFormat }}</a>\n <div class=\"datepickerContainer\">\n <div class=\"calendar\">\n <datepicker\n class=\"popup\"\n *ngIf=\"showDatepicker\"\n (selectionDone)=\"onSelectionDone($event)\"\n [ngModel]=\"date\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [shortcutPropagation]=\"shortcutPropagation\"\n [customClass]=\"customClass\"\n [dateDisabled]=\"dateDisabled\"\n >\n </datepicker>\n </div>\n </div>\n</span>\n", styles: [".backdrop{position:fixed;top:0;right:0;bottom:0;left:0}.datepickerContainer{position:absolute;z-index:700}.wrapper .forLink .popup{top:15px}.dateControl,.calendar{position:relative}.popup{position:relative;left:0;z-index:700;border-radius:3px}.popup ::ng-deep .text-info{color:#2a303d}.popup ::ng-deep .text-muted{color:#99a5bb}.popup ::ng-deep .btn.active,.popup ::ng-deep .btn.active .text-info{color:#fff;background-color:#2a303d}.popup ::ng-deep .well{margin:0;border:1px solid #2a303d}:host-context(.input-group) .datepickerContainer{top:100%}\n"] }]
3163
3154
  }], ctorParameters: function () {
3164
3155
  return [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
3165
3156
  type: Inject,
@@ -6152,6 +6143,7 @@ class PopoverComponent {
6152
6143
  constructor() {
6153
6144
  this.noMargin = false;
6154
6145
  this.allowOverflow = false;
6146
+ this.autoFocus = false;
6155
6147
  /**
6156
6148
  * If you have a popover, that should usually be displayed above or below its anchor,
6157
6149
  * and this anchor is in a scrollable container, you should set this to true.
@@ -6260,10 +6252,10 @@ class PopoverComponent {
6260
6252
  }
6261
6253
  }
6262
6254
  PopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: PopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6263
- PopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: PopoverComponent, selector: "lx-popover", inputs: { trigger: "trigger", horizontalAlign: "horizontalAlign", verticalAlign: "verticalAlign", noMargin: "noMargin", allowOverflow: "allowOverflow", adaptMarginsForViewportAlignChange: "adaptMarginsForViewportAlignChange" }, outputs: { opened: "opened", closed: "closed" }, queries: [{ propertyName: "explicitContent", first: true, predicate: PopoverContentDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "satPopover", first: true, predicate: SatPopover, descendants: true, static: true }, { propertyName: "implicitContent", first: true, predicate: ["implicitContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<sat-popover\n [anchor]=\"trigger.anchor\"\n [horizontalAlign]=\"horizontalAlign\"\n [verticalAlign]=\"verticalAlign\"\n [restoreFocus]=\"false\"\n [lockAlignment]=\"true\"\n [autoFocus]=\"false\"\n openTransition=\"0ms\"\n closeTransition=\"0ms\"\n (opened)=\"onOpen()\"\n (afterOpen)=\"onAfterOpen()\"\n (closed)=\"onClose()\"\n>\n <div\n class=\"popoverContainer\"\n [ngClass]=\"marginClasses\"\n [class.overflowHidden]=\"!allowOverflow\"\n (mouseenter)=\"trigger.showPopover(true)\"\n (mouseleave)=\"trigger.closePopover(true)\"\n >\n <ng-container *ngIf=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </ng-container>\n </div>\n</sat-popover>\n<ng-template #implicitContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["@keyframes subtleScaleUpKeyFrames{0%{transform:scale(.95);opacity:0}}.popoverContainer{position:relative;box-shadow:0 8px 12px 2px #00000026;max-width:600px;max-height:80vh;border-radius:3px;background-color:#fff;-webkit-hyphens:auto;hyphens:auto;animation:subtleScaleUpKeyFrames .2s ease}.popoverContainer.overflowHidden{overflow:hidden}.right{margin-left:18px}.left{margin-right:18px}.bottom{margin-top:18px}.top{margin-bottom:18px}\n"], components: [{ type: i1$6.SatPopover, selector: "sat-popover", inputs: ["anchor", "horizontalAlign", "xAlign", "verticalAlign", "yAlign", "forceAlignment", "lockAlignment", "autoFocus", "restoreFocus", "scrollStrategy", "hasBackdrop", "interactiveClose", "openTransition", "closeTransition", "openAnimationStartAtScale", "closeAnimationEndAtScale", "backdropClass", "panelClass"], outputs: ["opened", "closed", "afterOpen", "afterClose", "backdropClicked", "overlayKeydown"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
6255
+ PopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: PopoverComponent, selector: "lx-popover", inputs: { trigger: "trigger", horizontalAlign: "horizontalAlign", verticalAlign: "verticalAlign", noMargin: "noMargin", allowOverflow: "allowOverflow", autoFocus: "autoFocus", adaptMarginsForViewportAlignChange: "adaptMarginsForViewportAlignChange" }, outputs: { opened: "opened", closed: "closed" }, queries: [{ propertyName: "explicitContent", first: true, predicate: PopoverContentDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "satPopover", first: true, predicate: SatPopover, descendants: true, static: true }, { propertyName: "implicitContent", first: true, predicate: ["implicitContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<sat-popover\n [anchor]=\"trigger.anchor\"\n [horizontalAlign]=\"horizontalAlign\"\n [verticalAlign]=\"verticalAlign\"\n [restoreFocus]=\"false\"\n [lockAlignment]=\"true\"\n [autoFocus]=\"autoFocus\"\n openTransition=\"0ms\"\n closeTransition=\"0ms\"\n (opened)=\"onOpen()\"\n (afterOpen)=\"onAfterOpen()\"\n (closed)=\"onClose()\"\n>\n <div\n class=\"popoverContainer\"\n [ngClass]=\"marginClasses\"\n [class.overflowHidden]=\"!allowOverflow\"\n (mouseenter)=\"trigger.showPopover(true)\"\n (mouseleave)=\"trigger.closePopover(true)\"\n (keydown.escape)=\"$event.stopPropagation(); trigger.closePopover(true)\"\n >\n <ng-container *ngIf=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </ng-container>\n </div>\n</sat-popover>\n<ng-template #implicitContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["@keyframes subtleScaleUpKeyFrames{0%{transform:scale(.95);opacity:0}}.popoverContainer{position:relative;box-shadow:0 8px 12px 2px #00000026;max-width:600px;max-height:80vh;border-radius:3px;background-color:#fff;-webkit-hyphens:auto;hyphens:auto;animation:subtleScaleUpKeyFrames .2s ease}.popoverContainer.overflowHidden{overflow:hidden}.right{margin-left:18px}.left{margin-right:18px}.bottom{margin-top:18px}.top{margin-bottom:18px}\n"], components: [{ type: i1$6.SatPopover, selector: "sat-popover", inputs: ["anchor", "horizontalAlign", "xAlign", "verticalAlign", "yAlign", "forceAlignment", "lockAlignment", "autoFocus", "restoreFocus", "scrollStrategy", "hasBackdrop", "interactiveClose", "openTransition", "closeTransition", "openAnimationStartAtScale", "closeAnimationEndAtScale", "backdropClass", "panelClass"], outputs: ["opened", "closed", "afterOpen", "afterClose", "backdropClicked", "overlayKeydown"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
6264
6256
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: PopoverComponent, decorators: [{
6265
6257
  type: Component,
6266
- args: [{ selector: 'lx-popover', template: "<sat-popover\n [anchor]=\"trigger.anchor\"\n [horizontalAlign]=\"horizontalAlign\"\n [verticalAlign]=\"verticalAlign\"\n [restoreFocus]=\"false\"\n [lockAlignment]=\"true\"\n [autoFocus]=\"false\"\n openTransition=\"0ms\"\n closeTransition=\"0ms\"\n (opened)=\"onOpen()\"\n (afterOpen)=\"onAfterOpen()\"\n (closed)=\"onClose()\"\n>\n <div\n class=\"popoverContainer\"\n [ngClass]=\"marginClasses\"\n [class.overflowHidden]=\"!allowOverflow\"\n (mouseenter)=\"trigger.showPopover(true)\"\n (mouseleave)=\"trigger.closePopover(true)\"\n >\n <ng-container *ngIf=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </ng-container>\n </div>\n</sat-popover>\n<ng-template #implicitContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["@keyframes subtleScaleUpKeyFrames{0%{transform:scale(.95);opacity:0}}.popoverContainer{position:relative;box-shadow:0 8px 12px 2px #00000026;max-width:600px;max-height:80vh;border-radius:3px;background-color:#fff;-webkit-hyphens:auto;hyphens:auto;animation:subtleScaleUpKeyFrames .2s ease}.popoverContainer.overflowHidden{overflow:hidden}.right{margin-left:18px}.left{margin-right:18px}.bottom{margin-top:18px}.top{margin-bottom:18px}\n"] }]
6258
+ args: [{ selector: 'lx-popover', template: "<sat-popover\n [anchor]=\"trigger.anchor\"\n [horizontalAlign]=\"horizontalAlign\"\n [verticalAlign]=\"verticalAlign\"\n [restoreFocus]=\"false\"\n [lockAlignment]=\"true\"\n [autoFocus]=\"autoFocus\"\n openTransition=\"0ms\"\n closeTransition=\"0ms\"\n (opened)=\"onOpen()\"\n (afterOpen)=\"onAfterOpen()\"\n (closed)=\"onClose()\"\n>\n <div\n class=\"popoverContainer\"\n [ngClass]=\"marginClasses\"\n [class.overflowHidden]=\"!allowOverflow\"\n (mouseenter)=\"trigger.showPopover(true)\"\n (mouseleave)=\"trigger.closePopover(true)\"\n (keydown.escape)=\"$event.stopPropagation(); trigger.closePopover(true)\"\n >\n <ng-container *ngIf=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </ng-container>\n </div>\n</sat-popover>\n<ng-template #implicitContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["@keyframes subtleScaleUpKeyFrames{0%{transform:scale(.95);opacity:0}}.popoverContainer{position:relative;box-shadow:0 8px 12px 2px #00000026;max-width:600px;max-height:80vh;border-radius:3px;background-color:#fff;-webkit-hyphens:auto;hyphens:auto;animation:subtleScaleUpKeyFrames .2s ease}.popoverContainer.overflowHidden{overflow:hidden}.right{margin-left:18px}.left{margin-right:18px}.bottom{margin-top:18px}.top{margin-bottom:18px}\n"] }]
6267
6259
  }], propDecorators: { trigger: [{
6268
6260
  type: Input
6269
6261
  }], horizontalAlign: [{
@@ -6274,6 +6266,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
6274
6266
  type: Input
6275
6267
  }], allowOverflow: [{
6276
6268
  type: Input
6269
+ }], autoFocus: [{
6270
+ type: Input
6277
6271
  }], adaptMarginsForViewportAlignChange: [{
6278
6272
  type: Input
6279
6273
  }], opened: [{