@sebgroup/green-angular 6.4.0 → 6.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/src/v-angular/datepicker/components/date-input/date-input.component.mjs +17 -5
- package/esm2022/src/v-angular/datepicker/components/datepicker/datepicker.component.mjs +64 -7
- package/esm2022/v-angular/datepicker/components/date-input/date-input.component.mjs +17 -5
- package/esm2022/v-angular/datepicker/components/datepicker/datepicker.component.mjs +64 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-datepicker.mjs +76 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-datepicker.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-v-angular.mjs +76 -7
- package/fesm2022/sebgroup-green-angular-v-angular.mjs.map +1 -1
- package/package.json +20 -20
- package/src/v-angular/datepicker/components/date-input/date-input.component.d.ts +6 -3
- package/src/v-angular/datepicker/components/datepicker/datepicker.component.d.ts +16 -2
- package/v-angular/datepicker/components/date-input/date-input.component.d.ts +6 -3
- package/v-angular/datepicker/components/datepicker/datepicker.component.d.ts +16 -2
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import '../../datepicker.globals';
|
|
2
|
+
import '@sebgroup/green-core/components/icon/icons/calendar.js';
|
|
3
|
+
import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js';
|
|
2
4
|
import { WeekDay } from '@angular/common';
|
|
3
5
|
import { ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Inject, Input, Optional, Self, ViewChild, } from '@angular/core';
|
|
4
6
|
import { NgControl } from '@angular/forms';
|
|
@@ -6,8 +8,6 @@ import { TRANSLOCO_SCOPE, TranslocoService, } from '@jsverse/transloco';
|
|
|
6
8
|
import { fromEvent, Subject } from 'rxjs';
|
|
7
9
|
import { startWith, takeUntil } from 'rxjs/operators';
|
|
8
10
|
import { DateControlValueAccessorComponent } from '../../date-control-value-accessor/date-control-value-accessor.component';
|
|
9
|
-
import '@sebgroup/green-core/components/icon/icons/calendar.js';
|
|
10
|
-
import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
12
|
import * as i1 from "@angular/forms";
|
|
13
13
|
import * as i2 from "@jsverse/transloco";
|
|
@@ -70,12 +70,15 @@ export class DateInputComponent extends DateControlValueAccessorComponent {
|
|
|
70
70
|
* Sets the displayed size of the date input field.
|
|
71
71
|
*/
|
|
72
72
|
this.size = 'large';
|
|
73
|
+
this.dynamicPosition = false;
|
|
73
74
|
/** @internal */
|
|
74
75
|
// calendarIcon: IconDefinition = faCalendarDays;
|
|
75
76
|
/** @internal */
|
|
76
77
|
this.shown = false;
|
|
77
78
|
/** @internal */
|
|
78
79
|
this.showInput$ = this.showInputDateSrc.asObservable().pipe(startWith(true));
|
|
80
|
+
/** Observable for listening to scrolls when the datepicker is open */
|
|
81
|
+
this.documentScroll$ = fromEvent(document, 'scroll');
|
|
79
82
|
/** Observable for listening to clicks outside of the datepicker. */
|
|
80
83
|
this.documentClick$ = fromEvent(document, 'click');
|
|
81
84
|
/** Subject used for unsubscribe pattern on above observable. */
|
|
@@ -146,6 +149,13 @@ export class DateInputComponent extends DateControlValueAccessorComponent {
|
|
|
146
149
|
}
|
|
147
150
|
// if shown is set to true, reset unsubscribe variable
|
|
148
151
|
this.datepickerClosed$.next(false);
|
|
152
|
+
// start listen to scroll
|
|
153
|
+
this.documentScroll$.pipe(takeUntil(this.datepickerClosed$)).subscribe({
|
|
154
|
+
next: () => {
|
|
155
|
+
// if document starts scrolling, close datepicker
|
|
156
|
+
return this.setShown(false);
|
|
157
|
+
},
|
|
158
|
+
});
|
|
149
159
|
// start listening for clicks outside the component
|
|
150
160
|
this.documentClick$.pipe(takeUntil(this.datepickerClosed$)).subscribe({
|
|
151
161
|
next: (event) => {
|
|
@@ -163,11 +173,11 @@ export class DateInputComponent extends DateControlValueAccessorComponent {
|
|
|
163
173
|
});
|
|
164
174
|
}
|
|
165
175
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateInputComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: TRANSLOCO_SCOPE, optional: true }, { token: i2.TranslocoService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
166
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DateInputComponent, selector: "nggv-dateinput,nggv-input[type=date]", inputs: { thook: "thook", type: "type", readonly: "readonly", disableDates: "disableDates", disableWeekDays: "disableWeekDays", minRows: "minRows", firstValid: "firstValid", lastValid: "lastValid", closingTime: "closingTime", firstDayOfWeek: "firstDayOfWeek", closeCalendarOnEscape: "closeCalendarOnEscape", size: "size" }, host: { listeners: { "keydown": "keyListener($event)" }, properties: { "attr.data-thook": "this.thook", "class.small": "this.isSmall", "class.large": "this.isLarge" } }, viewQueries: [{ propertyName: "toggleButtonRef", first: true, predicate: ["toggleCalendarButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-input'\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n </label>\n\n <!-- DESCRIPTION -->\n <div\n class=\"gds-field-label--small description hide-if-empty\"\n *ngIf=\"description\"\n >\n {{ description }}\n </div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state | nggvInputMaskFormat: dateInputMask }}\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- INPUT WRAPPER -->\n <ng-container *ngIf=\"!locked\">\n <div\n class=\"field-wrap\"\n [class.nggv-field--error]=\"invalid\"\n *ngIf=\"showInput$ | async\"\n >\n <!-- INPUT FIELD -->\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"nggv-field-date\"\n type=\"text\"\n autocomplete=\"off\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [nggvInputMask]=\"dateInputMask\"\n [value]=\"state\"\n title=\"\"\n (change)=\"onValueChange($event.target)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <button\n aria-label=\"toggle calendar\"\n #toggleCalendarButton\n class=\"nggv-button-date\"\n type=\"button\"\n data-thook=\"toggle-calendar-button\"\n (click)=\"toggleDatepicker()\"\n [disabled]=\"disabled\"\n >\n @if (size === 'small') {\n <gds-icon-calendar *nggCoreElement size=\"16px\"></gds-icon-calendar>\n }\n\n @if (size === 'large') {\n <gds-icon-calendar *nggCoreElement size=\"20px\"></gds-icon-calendar>\n }\n </button>\n </div>\n\n <!-- DATEPICKER -->\n <div class=\"nggv-datepicker\" *ngIf=\"shown\">\n <nggv-datepicker\n #input\n [type]=\"type\"\n [disableDates]=\"disableDates\"\n [disableWeekDays]=\"disableWeekDays\"\n [selected]=\"state\"\n [locale]=\"locale\"\n [minCalendarRows]=\"minRows\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [firstValid]=\"firstValid\"\n [lastValid]=\"lastValid\"\n [closingTime]=\"closingTime\"\n (ngvDateChange)=\"onDateChange($event)\"\n >\n <ng-content></ng-content>\n </nggv-datepicker>\n </div>\n\n <!-- ERRORS -->\n <ng-container\n *ngIf=\"\n invalid &&\n (error || ngControl?.invalid) &&\n (!errorList || !errorList.length)\n \"\n >\n <label\n class=\"gds-field-notice gds-field-notice--error\"\n [attr.for]=\"id + '-input'\"\n >\n <span class=\"error-item\">\n <span class=\"error-item--icon\">\n <gds-icon-triangle-exclamation\n *nggCoreElement\n [solid]=\"true\"\n size=\"16px\"\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </span>\n </label>\n </ng-container>\n <ng-container *ngFor=\"let error of errorList ?? []\">\n <label\n class=\"gds-field-notice gds-field-notice--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && error\"\n >\n <span class=\"error-item\">\n <span class=\"error-item--icon\">\n <gds-icon-triangle-exclamation\n *nggCoreElement\n [solid]=\"true\"\n size=\"16px\"\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n </label>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [":host{display:block;position:relative}@media (max-width: 47.98em){:host{min-width:100%}}:host .hide-if-empty:empty{display:none}:host .unset-state{padding-left:.5rem}:host .gds-field-label{display:block}:host .gds-field-label:is(label){margin-bottom:0}:host .gds-field-label.form-control{width:fit-content}@supports (-moz-appearance: none){:host .gds-field-label.form-control:focus:not(:focus-visible){box-shadow:none;outline:0}:host .gds-field-label.form-control:focus,:host .gds-field-label.form-control:focus-within{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}}:host .gds-field-label:not(.form-control){font-weight:500;width:100%;line-height:1.25rem}:host .gds-field-label+input,:host .gds-field-label+textarea,fieldset :host .gds-field-label+div,:host .gds-field-label+button,:host .gds-field-label+.group-stepper,:host .gds-field-label+.stepper-wrapper,:host .gds-field-label+.group{margin-top:.5rem}:host .gds-field-label+.form-info{margin-bottom:.5rem}:host label+.field-wrap,:host label+.nggv-field--locked{margin-top:.5rem}:host .description{font-size:.875rem;margin-bottom:.5rem;line-height:1.25rem;width:100%}:host .gds-field-label--optional:is(label){margin-bottom:0}:host .gds-field-label--optional.form-control{width:fit-content}@supports (-moz-appearance: none){:host .gds-field-label--optional.form-control:focus:not(:focus-visible){box-shadow:none;outline:0}:host .gds-field-label--optional.form-control:focus,:host .gds-field-label--optional.form-control:focus-within{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}}:host .gds-field-label--optional:not(.form-control){font-weight:500;width:100%;line-height:1.25rem}:host .gds-field-label--optional+input,:host .gds-field-label--optional+textarea,fieldset :host .gds-field-label--optional+div,:host .gds-field-label--optional+button,:host .gds-field-label--optional+.group-stepper,:host .gds-field-label--optional+.stepper-wrapper,:host .gds-field-label--optional+.group{margin-top:.5rem}:host .gds-field-label--optional+.form-info{margin-bottom:.5rem}:host .nggv-datepicker{margin-top:.25rem;position:absolute}:host .nggv-field--error{border-bottom:.125rem solid #9f000a!important}:host .nggv-field--error:focus,:host .nggv-field--error:active,:host .nggv-field--error:hover{border-bottom:.125rem solid #9f000a!important}:host .error-item{display:flex;gap:.5rem;color:#9f000a}:host .gds-field-notice{margin-top:.5rem;display:block;font-size:.875rem;line-height:1;font-weight:500}:host .field-wrap{border:1px solid #868686;border-radius:4px;outline:none;box-sizing:border-box;min-height:2.75rem;line-height:1.5;font-size:1rem;font-family:inherit;height:2.625rem;display:flex}:host .field-wrap *,:host .field-wrap *:before,:host .field-wrap *:after{box-sizing:border-box}:host .field-wrap .nggv-button-date{--text-disabled-color: #adadad;padding:.75rem 1rem;border-radius:var(--sg-border-radius);border:solid var(--sg-border-width) var(--sg-border-color);font-weight:500;min-height:2.75rem;align-items:center;display:inline-flex;justify-content:center;transition:all .3s cubic-bezier(.23,1,.32,1),outline-offset 0s,outline-width 0s;border-color:#333;color:#333;--color: rgb(51, 51, 51);background-color:transparent;min-height:2.5rem;border:none;border-radius:3px;width:2.625rem;height:2.625rem;min-width:2.625rem;border-top-left-radius:0!important;border-bottom-left-radius:0!important;text-align:right}:host .field-wrap .nggv-button-date:focus:not(:focus-visible){box-shadow:none;outline:0}:host .field-wrap .nggv-button-date:focus,:host .field-wrap .nggv-button-date:focus-visible{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}@media (max-width: 35.98em){:host .field-wrap .nggv-button-date{min-width:100%}}@media screen and (-ms-high-contrast: active){:host .field-wrap .nggv-button-date{border:2px solid currentcolor}}:host .field-wrap .nggv-button-date.small{min-height:2rem;padding:.4375rem .75rem;font-size:.875rem;line-height:1rem}:host .field-wrap .nggv-button-date.large{min-height:4rem;padding:1rem 1.5rem;font-size:1.5rem;line-height:2rem}:host .field-wrap .nggv-button-date:not(:disabled,.disabled,[aria-disabled]):hover{background-color:#333;color:#fff;--background: rgb(51, 51, 51);--color: rgb(255, 255, 255);border-color:#333}:host .field-wrap .nggv-button-date[aria-selected=true],:host .field-wrap .nggv-button-date:active,:host .field-wrap .nggv-button-date.active,:host .field-wrap .nggv-button-date.active:hover,:host .field-wrap .nggv-button-date:active:hover{background-color:#333;color:#fff;--background: rgb(51, 51, 51);--color: rgb(255, 255, 255);border-color:#333}:host .field-wrap .nggv-button-date[aria-selected]:hover,:host .field-wrap .nggv-button-date.active:hover,:host .field-wrap .nggv-button-date:active:hover{opacity:.9}:host .field-wrap .nggv-button-date:focus-visible{background-color:#333;color:#fff;--background: rgb(51, 51, 51);--color: rgb(255, 255, 255);border-color:#333!important}:host .field-wrap .nggv-button-date:disabled,:host .field-wrap .nggv-button-date.disabled,:host .field-wrap .nggv-button-date[aria-disabled=true]{color:var(--text-disabled-color)!important;border-color:var(--border-disabled-color)!important;cursor:not-allowed}:host .field-wrap .nggv-button-date:disabled::placeholder,:host .field-wrap .nggv-button-date.disabled::placeholder,:host .field-wrap .nggv-button-date[aria-disabled=true]::placeholder{color:var(--text-disabled-color)}@media (max-width: 47.98em){:host .field-wrap .nggv-button-date{width:2.625rem;height:2.625rem}}:host .field-wrap .nggv-button-date:focus{outline-color:#1a1a1a;outline-style:solid;outline-width:.125rem;outline-offset:.125rem}:host .field-wrap .nggv-button-date[disabled]{background-color:#f8f8f8!important;color:#adadad}@media (max-width: 35.98em){:host .field-wrap .nggv-button-date{min-width:initial}}:host .field-wrap input[type=text]::-webkit-inner-spin-button,:host .field-wrap input[type=text]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none;font-size:1rem;font-family:inherit}:host .field-wrap .nggv-field-date{border:1px solid #cecece;border-radius:4px 0 0 4px;outline:none;box-sizing:border-box;min-height:2.75rem;line-height:1.5;font-size:1rem;font-family:inherit;border:none;min-height:2.375rem;width:100%;padding-left:1rem}:host .field-wrap .nggv-field-date *,:host .field-wrap .nggv-field-date *:before,:host .field-wrap .nggv-field-date *:after{box-sizing:border-box}:host .field-wrap .nggv-field-date:hover{border-color:#41b0ee}:host .field-wrap .nggv-field-date:focus{outline-color:#1a1a1a;outline-style:solid;outline-width:.125rem;outline-offset:.125rem}:host .field-wrap .nggv-field-date:active{border-color:#cecece}:host .field-wrap .nggv-field-date[disabled]{background-color:#f8f8f8;border-color:#cecece}:host .field-wrap .nggv-field-date[disabled]::placeholder{color:#cecece}:host .field-wrap .nggv-field-date:not(:focus){border-right:none;padding-right:0}:host .field-wrap .nggv-field-date:focus{padding-right:0}:host.small .gds-field-label{font-size:.875rem;line-height:1rem}:host.small label+.field-wrap{margin-top:.25rem}:host.small .field-wrap{height:calc(2rem + 3px);min-height:calc(2rem + 3px)}:host.small .field-wrap .nggv-field-date{padding:.38rem .5rem;line-height:1rem;min-height:2rem;font-size:.875rem}:host.small .field-wrap .nggv-button-date{min-height:2rem;min-width:2rem;width:2rem;height:2rem;padding:0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "directive", type: i4.NggvInputMaskDirective, selector: "[nggvInputMask]", inputs: ["nggvInputMask"] }, { kind: "directive", type: i5.NggCoreElementDirective, selector: "[nggCoreElement]" }, { kind: "component", type: i6.DatepickerComponent, selector: "nggv-datepicker", inputs: ["firstDayOfWeek", "disableDates", "disableWeekDays", "minCalendarRows", "selected", "locale", "type", "firstValid", "lastValid", "closingTime"], outputs: ["ngvDateChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.InputMaskFormatPipe, name: "nggvInputMaskFormat" }] }); }
|
|
176
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DateInputComponent, selector: "nggv-dateinput,nggv-input[type=date]", inputs: { thook: "thook", type: "type", readonly: "readonly", disableDates: "disableDates", disableWeekDays: "disableWeekDays", minRows: "minRows", firstValid: "firstValid", lastValid: "lastValid", closingTime: "closingTime", firstDayOfWeek: "firstDayOfWeek", closeCalendarOnEscape: "closeCalendarOnEscape", size: "size", dynamicPosition: "dynamicPosition" }, host: { listeners: { "keydown": "keyListener($event)" }, properties: { "attr.data-thook": "this.thook", "class.small": "this.isSmall", "class.large": "this.isLarge" } }, viewQueries: [{ propertyName: "toggleButtonRef", first: true, predicate: ["toggleCalendarButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-input'\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n </label>\n\n <!-- DESCRIPTION -->\n <div\n class=\"gds-field-label--small description hide-if-empty\"\n *ngIf=\"description\"\n >\n {{ description }}\n </div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state | nggvInputMaskFormat: dateInputMask }}\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- INPUT WRAPPER -->\n <ng-container *ngIf=\"!locked\">\n <div\n class=\"field-wrap\"\n [class.nggv-field--error]=\"invalid\"\n *ngIf=\"showInput$ | async\"\n >\n <!-- INPUT FIELD -->\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"nggv-field-date\"\n type=\"text\"\n autocomplete=\"off\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [nggvInputMask]=\"dateInputMask\"\n [value]=\"state\"\n title=\"\"\n (change)=\"onValueChange($event.target)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <button\n aria-label=\"toggle calendar\"\n #toggleCalendarButton\n class=\"nggv-button-date\"\n type=\"button\"\n data-thook=\"toggle-calendar-button\"\n (click)=\"toggleDatepicker()\"\n [disabled]=\"disabled\"\n >\n @if (size === 'small') {\n <gds-icon-calendar *nggCoreElement size=\"16px\"></gds-icon-calendar>\n }\n\n @if (size === 'large') {\n <gds-icon-calendar *nggCoreElement size=\"20px\"></gds-icon-calendar>\n }\n </button>\n </div>\n\n <!-- DATEPICKER -->\n <div class=\"nggv-datepicker\" *ngIf=\"shown\">\n <nggv-datepicker\n #input\n [type]=\"type\"\n [disableDates]=\"disableDates\"\n [disableWeekDays]=\"disableWeekDays\"\n [selected]=\"state\"\n [locale]=\"locale\"\n [minCalendarRows]=\"minRows\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [firstValid]=\"firstValid\"\n [lastValid]=\"lastValid\"\n [closingTime]=\"closingTime\"\n [dynamicPosition]=\"dynamicPosition\"\n [size]=\"size\"\n (ngvDateChange)=\"onDateChange($event)\"\n >\n <ng-content></ng-content>\n </nggv-datepicker>\n </div>\n\n <!-- ERRORS -->\n <ng-container\n *ngIf=\"\n invalid &&\n (error || ngControl?.invalid) &&\n (!errorList || !errorList.length)\n \"\n >\n <label\n class=\"gds-field-notice gds-field-notice--error\"\n [attr.for]=\"id + '-input'\"\n >\n <span class=\"error-item\">\n <span class=\"error-item--icon\">\n <gds-icon-triangle-exclamation\n *nggCoreElement\n [solid]=\"true\"\n size=\"16px\"\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </span>\n </label>\n </ng-container>\n <ng-container *ngFor=\"let error of errorList ?? []\">\n <label\n class=\"gds-field-notice gds-field-notice--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && error\"\n >\n <span class=\"error-item\">\n <span class=\"error-item--icon\">\n <gds-icon-triangle-exclamation\n *nggCoreElement\n [solid]=\"true\"\n size=\"16px\"\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n </label>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [":host{display:block;position:relative}@media (max-width: 47.98em){:host{min-width:100%}}:host .hide-if-empty:empty{display:none}:host .unset-state{padding-left:.5rem}:host .gds-field-label{display:block}:host .gds-field-label:is(label){margin-bottom:0}:host .gds-field-label.form-control{width:fit-content}@supports (-moz-appearance: none){:host .gds-field-label.form-control:focus:not(:focus-visible){box-shadow:none;outline:0}:host .gds-field-label.form-control:focus,:host .gds-field-label.form-control:focus-within{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}}:host .gds-field-label:not(.form-control){font-weight:500;width:100%;line-height:1.25rem}:host .gds-field-label+input,:host .gds-field-label+textarea,fieldset :host .gds-field-label+div,:host .gds-field-label+button,:host .gds-field-label+.group-stepper,:host .gds-field-label+.stepper-wrapper,:host .gds-field-label+.group{margin-top:.5rem}:host .gds-field-label+.form-info{margin-bottom:.5rem}:host label+.field-wrap,:host label+.nggv-field--locked{margin-top:.5rem}:host .description{font-size:.875rem;margin-bottom:.5rem;line-height:1.25rem;width:100%}:host .gds-field-label--optional:is(label){margin-bottom:0}:host .gds-field-label--optional.form-control{width:fit-content}@supports (-moz-appearance: none){:host .gds-field-label--optional.form-control:focus:not(:focus-visible){box-shadow:none;outline:0}:host .gds-field-label--optional.form-control:focus,:host .gds-field-label--optional.form-control:focus-within{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}}:host .gds-field-label--optional:not(.form-control){font-weight:500;width:100%;line-height:1.25rem}:host .gds-field-label--optional+input,:host .gds-field-label--optional+textarea,fieldset :host .gds-field-label--optional+div,:host .gds-field-label--optional+button,:host .gds-field-label--optional+.group-stepper,:host .gds-field-label--optional+.stepper-wrapper,:host .gds-field-label--optional+.group{margin-top:.5rem}:host .gds-field-label--optional+.form-info{margin-bottom:.5rem}:host .nggv-datepicker{margin-top:.25rem;position:absolute}:host .nggv-field--error{border-bottom:.125rem solid #9f000a!important}:host .nggv-field--error:focus,:host .nggv-field--error:active,:host .nggv-field--error:hover{border-bottom:.125rem solid #9f000a!important}:host .error-item{display:flex;gap:.5rem;color:#9f000a}:host .gds-field-notice{margin-top:.5rem;display:block;font-size:.875rem;line-height:1;font-weight:500}:host .field-wrap{border:1px solid #868686;border-radius:4px;outline:none;box-sizing:border-box;min-height:2.75rem;line-height:1.5;font-size:1rem;font-family:inherit;height:2.625rem;display:flex}:host .field-wrap *,:host .field-wrap *:before,:host .field-wrap *:after{box-sizing:border-box}:host .field-wrap .nggv-button-date{--text-disabled-color: #adadad;padding:.75rem 1rem;border-radius:var(--sg-border-radius);border:solid var(--sg-border-width) var(--sg-border-color);font-weight:500;min-height:2.75rem;align-items:center;display:inline-flex;justify-content:center;transition:all .3s cubic-bezier(.23,1,.32,1),outline-offset 0s,outline-width 0s;border-color:#333;color:#333;--color: rgb(51, 51, 51);background-color:transparent;min-height:2.5rem;border:none;border-radius:3px;width:2.625rem;height:2.625rem;min-width:2.625rem;border-top-left-radius:0!important;border-bottom-left-radius:0!important;text-align:right}:host .field-wrap .nggv-button-date:focus:not(:focus-visible){box-shadow:none;outline:0}:host .field-wrap .nggv-button-date:focus,:host .field-wrap .nggv-button-date:focus-visible{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}@media (max-width: 35.98em){:host .field-wrap .nggv-button-date{min-width:100%}}@media screen and (-ms-high-contrast: active){:host .field-wrap .nggv-button-date{border:2px solid currentcolor}}:host .field-wrap .nggv-button-date.small{min-height:2rem;padding:.4375rem .75rem;font-size:.875rem;line-height:1rem}:host .field-wrap .nggv-button-date.large{min-height:4rem;padding:1rem 1.5rem;font-size:1.5rem;line-height:2rem}:host .field-wrap .nggv-button-date:not(:disabled,.disabled,[aria-disabled]):hover{background-color:#333;color:#fff;--background: rgb(51, 51, 51);--color: rgb(255, 255, 255);border-color:#333}:host .field-wrap .nggv-button-date[aria-selected=true],:host .field-wrap .nggv-button-date:active,:host .field-wrap .nggv-button-date.active,:host .field-wrap .nggv-button-date.active:hover,:host .field-wrap .nggv-button-date:active:hover{background-color:#333;color:#fff;--background: rgb(51, 51, 51);--color: rgb(255, 255, 255);border-color:#333}:host .field-wrap .nggv-button-date[aria-selected]:hover,:host .field-wrap .nggv-button-date.active:hover,:host .field-wrap .nggv-button-date:active:hover{opacity:.9}:host .field-wrap .nggv-button-date:focus-visible{background-color:#333;color:#fff;--background: rgb(51, 51, 51);--color: rgb(255, 255, 255);border-color:#333!important}:host .field-wrap .nggv-button-date:disabled,:host .field-wrap .nggv-button-date.disabled,:host .field-wrap .nggv-button-date[aria-disabled=true]{color:var(--text-disabled-color)!important;border-color:var(--border-disabled-color)!important;cursor:not-allowed}:host .field-wrap .nggv-button-date:disabled::placeholder,:host .field-wrap .nggv-button-date.disabled::placeholder,:host .field-wrap .nggv-button-date[aria-disabled=true]::placeholder{color:var(--text-disabled-color)}@media (max-width: 47.98em){:host .field-wrap .nggv-button-date{width:2.625rem;height:2.625rem}}:host .field-wrap .nggv-button-date:focus{outline-color:#1a1a1a;outline-style:solid;outline-width:.125rem;outline-offset:.125rem}:host .field-wrap .nggv-button-date[disabled]{background-color:#f8f8f8!important;color:#adadad}@media (max-width: 35.98em){:host .field-wrap .nggv-button-date{min-width:initial}}:host .field-wrap input[type=text]::-webkit-inner-spin-button,:host .field-wrap input[type=text]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none;font-size:1rem;font-family:inherit}:host .field-wrap .nggv-field-date{border:1px solid #cecece;border-radius:4px 0 0 4px;outline:none;box-sizing:border-box;min-height:2.75rem;line-height:1.5;font-size:1rem;font-family:inherit;border:none;min-height:2.375rem;width:100%;padding-left:1rem}:host .field-wrap .nggv-field-date *,:host .field-wrap .nggv-field-date *:before,:host .field-wrap .nggv-field-date *:after{box-sizing:border-box}:host .field-wrap .nggv-field-date:hover{border-color:#41b0ee}:host .field-wrap .nggv-field-date:focus{outline-color:#1a1a1a;outline-style:solid;outline-width:.125rem;outline-offset:.125rem}:host .field-wrap .nggv-field-date:active{border-color:#cecece}:host .field-wrap .nggv-field-date[disabled]{background-color:#f8f8f8;border-color:#cecece}:host .field-wrap .nggv-field-date[disabled]::placeholder{color:#cecece}:host .field-wrap .nggv-field-date:not(:focus){border-right:none;padding-right:0}:host .field-wrap .nggv-field-date:focus{padding-right:0}:host.small .gds-field-label{font-size:.875rem;line-height:1rem}:host.small label+.field-wrap{margin-top:.25rem}:host.small .field-wrap{height:calc(2rem + 3px);min-height:calc(2rem + 3px)}:host.small .field-wrap .nggv-field-date{padding:.38rem .5rem;line-height:1rem;min-height:2rem;font-size:.875rem}:host.small .field-wrap .nggv-button-date{min-height:2rem;min-width:2rem;width:2rem;height:2rem;padding:0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "directive", type: i4.NggvInputMaskDirective, selector: "[nggvInputMask]", inputs: ["nggvInputMask"] }, { kind: "directive", type: i5.NggCoreElementDirective, selector: "[nggCoreElement]" }, { kind: "component", type: i6.DatepickerComponent, selector: "nggv-datepicker", inputs: ["firstDayOfWeek", "disableDates", "disableWeekDays", "minCalendarRows", "selected", "locale", "type", "firstValid", "lastValid", "closingTime", "dynamicPosition", "size"], outputs: ["ngvDateChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.InputMaskFormatPipe, name: "nggvInputMaskFormat" }] }); }
|
|
167
177
|
}
|
|
168
178
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateInputComponent, decorators: [{
|
|
169
179
|
type: Component,
|
|
170
|
-
args: [{ selector: 'nggv-dateinput,nggv-input[type=date]', template: "<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-input'\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n </label>\n\n <!-- DESCRIPTION -->\n <div\n class=\"gds-field-label--small description hide-if-empty\"\n *ngIf=\"description\"\n >\n {{ description }}\n </div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state | nggvInputMaskFormat: dateInputMask }}\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- INPUT WRAPPER -->\n <ng-container *ngIf=\"!locked\">\n <div\n class=\"field-wrap\"\n [class.nggv-field--error]=\"invalid\"\n *ngIf=\"showInput$ | async\"\n >\n <!-- INPUT FIELD -->\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"nggv-field-date\"\n type=\"text\"\n autocomplete=\"off\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [nggvInputMask]=\"dateInputMask\"\n [value]=\"state\"\n title=\"\"\n (change)=\"onValueChange($event.target)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <button\n aria-label=\"toggle calendar\"\n #toggleCalendarButton\n class=\"nggv-button-date\"\n type=\"button\"\n data-thook=\"toggle-calendar-button\"\n (click)=\"toggleDatepicker()\"\n [disabled]=\"disabled\"\n >\n @if (size === 'small') {\n <gds-icon-calendar *nggCoreElement size=\"16px\"></gds-icon-calendar>\n }\n\n @if (size === 'large') {\n <gds-icon-calendar *nggCoreElement size=\"20px\"></gds-icon-calendar>\n }\n </button>\n </div>\n\n <!-- DATEPICKER -->\n <div class=\"nggv-datepicker\" *ngIf=\"shown\">\n <nggv-datepicker\n #input\n [type]=\"type\"\n [disableDates]=\"disableDates\"\n [disableWeekDays]=\"disableWeekDays\"\n [selected]=\"state\"\n [locale]=\"locale\"\n [minCalendarRows]=\"minRows\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [firstValid]=\"firstValid\"\n [lastValid]=\"lastValid\"\n [closingTime]=\"closingTime\"\n (ngvDateChange)=\"onDateChange($event)\"\n >\n <ng-content></ng-content>\n </nggv-datepicker>\n </div>\n\n <!-- ERRORS -->\n <ng-container\n *ngIf=\"\n invalid &&\n (error || ngControl?.invalid) &&\n (!errorList || !errorList.length)\n \"\n >\n <label\n class=\"gds-field-notice gds-field-notice--error\"\n [attr.for]=\"id + '-input'\"\n >\n <span class=\"error-item\">\n <span class=\"error-item--icon\">\n <gds-icon-triangle-exclamation\n *nggCoreElement\n [solid]=\"true\"\n size=\"16px\"\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </span>\n </label>\n </ng-container>\n <ng-container *ngFor=\"let error of errorList ?? []\">\n <label\n class=\"gds-field-notice gds-field-notice--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && error\"\n >\n <span class=\"error-item\">\n <span class=\"error-item--icon\">\n <gds-icon-triangle-exclamation\n *nggCoreElement\n [solid]=\"true\"\n size=\"16px\"\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n </label>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [":host{display:block;position:relative}@media (max-width: 47.98em){:host{min-width:100%}}:host .hide-if-empty:empty{display:none}:host .unset-state{padding-left:.5rem}:host .gds-field-label{display:block}:host .gds-field-label:is(label){margin-bottom:0}:host .gds-field-label.form-control{width:fit-content}@supports (-moz-appearance: none){:host .gds-field-label.form-control:focus:not(:focus-visible){box-shadow:none;outline:0}:host .gds-field-label.form-control:focus,:host .gds-field-label.form-control:focus-within{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}}:host .gds-field-label:not(.form-control){font-weight:500;width:100%;line-height:1.25rem}:host .gds-field-label+input,:host .gds-field-label+textarea,fieldset :host .gds-field-label+div,:host .gds-field-label+button,:host .gds-field-label+.group-stepper,:host .gds-field-label+.stepper-wrapper,:host .gds-field-label+.group{margin-top:.5rem}:host .gds-field-label+.form-info{margin-bottom:.5rem}:host label+.field-wrap,:host label+.nggv-field--locked{margin-top:.5rem}:host .description{font-size:.875rem;margin-bottom:.5rem;line-height:1.25rem;width:100%}:host .gds-field-label--optional:is(label){margin-bottom:0}:host .gds-field-label--optional.form-control{width:fit-content}@supports (-moz-appearance: none){:host .gds-field-label--optional.form-control:focus:not(:focus-visible){box-shadow:none;outline:0}:host .gds-field-label--optional.form-control:focus,:host .gds-field-label--optional.form-control:focus-within{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}}:host .gds-field-label--optional:not(.form-control){font-weight:500;width:100%;line-height:1.25rem}:host .gds-field-label--optional+input,:host .gds-field-label--optional+textarea,fieldset :host .gds-field-label--optional+div,:host .gds-field-label--optional+button,:host .gds-field-label--optional+.group-stepper,:host .gds-field-label--optional+.stepper-wrapper,:host .gds-field-label--optional+.group{margin-top:.5rem}:host .gds-field-label--optional+.form-info{margin-bottom:.5rem}:host .nggv-datepicker{margin-top:.25rem;position:absolute}:host .nggv-field--error{border-bottom:.125rem solid #9f000a!important}:host .nggv-field--error:focus,:host .nggv-field--error:active,:host .nggv-field--error:hover{border-bottom:.125rem solid #9f000a!important}:host .error-item{display:flex;gap:.5rem;color:#9f000a}:host .gds-field-notice{margin-top:.5rem;display:block;font-size:.875rem;line-height:1;font-weight:500}:host .field-wrap{border:1px solid #868686;border-radius:4px;outline:none;box-sizing:border-box;min-height:2.75rem;line-height:1.5;font-size:1rem;font-family:inherit;height:2.625rem;display:flex}:host .field-wrap *,:host .field-wrap *:before,:host .field-wrap *:after{box-sizing:border-box}:host .field-wrap .nggv-button-date{--text-disabled-color: #adadad;padding:.75rem 1rem;border-radius:var(--sg-border-radius);border:solid var(--sg-border-width) var(--sg-border-color);font-weight:500;min-height:2.75rem;align-items:center;display:inline-flex;justify-content:center;transition:all .3s cubic-bezier(.23,1,.32,1),outline-offset 0s,outline-width 0s;border-color:#333;color:#333;--color: rgb(51, 51, 51);background-color:transparent;min-height:2.5rem;border:none;border-radius:3px;width:2.625rem;height:2.625rem;min-width:2.625rem;border-top-left-radius:0!important;border-bottom-left-radius:0!important;text-align:right}:host .field-wrap .nggv-button-date:focus:not(:focus-visible){box-shadow:none;outline:0}:host .field-wrap .nggv-button-date:focus,:host .field-wrap .nggv-button-date:focus-visible{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}@media (max-width: 35.98em){:host .field-wrap .nggv-button-date{min-width:100%}}@media screen and (-ms-high-contrast: active){:host .field-wrap .nggv-button-date{border:2px solid currentcolor}}:host .field-wrap .nggv-button-date.small{min-height:2rem;padding:.4375rem .75rem;font-size:.875rem;line-height:1rem}:host .field-wrap .nggv-button-date.large{min-height:4rem;padding:1rem 1.5rem;font-size:1.5rem;line-height:2rem}:host .field-wrap .nggv-button-date:not(:disabled,.disabled,[aria-disabled]):hover{background-color:#333;color:#fff;--background: rgb(51, 51, 51);--color: rgb(255, 255, 255);border-color:#333}:host .field-wrap .nggv-button-date[aria-selected=true],:host .field-wrap .nggv-button-date:active,:host .field-wrap .nggv-button-date.active,:host .field-wrap .nggv-button-date.active:hover,:host .field-wrap .nggv-button-date:active:hover{background-color:#333;color:#fff;--background: rgb(51, 51, 51);--color: rgb(255, 255, 255);border-color:#333}:host .field-wrap .nggv-button-date[aria-selected]:hover,:host .field-wrap .nggv-button-date.active:hover,:host .field-wrap .nggv-button-date:active:hover{opacity:.9}:host .field-wrap .nggv-button-date:focus-visible{background-color:#333;color:#fff;--background: rgb(51, 51, 51);--color: rgb(255, 255, 255);border-color:#333!important}:host .field-wrap .nggv-button-date:disabled,:host .field-wrap .nggv-button-date.disabled,:host .field-wrap .nggv-button-date[aria-disabled=true]{color:var(--text-disabled-color)!important;border-color:var(--border-disabled-color)!important;cursor:not-allowed}:host .field-wrap .nggv-button-date:disabled::placeholder,:host .field-wrap .nggv-button-date.disabled::placeholder,:host .field-wrap .nggv-button-date[aria-disabled=true]::placeholder{color:var(--text-disabled-color)}@media (max-width: 47.98em){:host .field-wrap .nggv-button-date{width:2.625rem;height:2.625rem}}:host .field-wrap .nggv-button-date:focus{outline-color:#1a1a1a;outline-style:solid;outline-width:.125rem;outline-offset:.125rem}:host .field-wrap .nggv-button-date[disabled]{background-color:#f8f8f8!important;color:#adadad}@media (max-width: 35.98em){:host .field-wrap .nggv-button-date{min-width:initial}}:host .field-wrap input[type=text]::-webkit-inner-spin-button,:host .field-wrap input[type=text]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none;font-size:1rem;font-family:inherit}:host .field-wrap .nggv-field-date{border:1px solid #cecece;border-radius:4px 0 0 4px;outline:none;box-sizing:border-box;min-height:2.75rem;line-height:1.5;font-size:1rem;font-family:inherit;border:none;min-height:2.375rem;width:100%;padding-left:1rem}:host .field-wrap .nggv-field-date *,:host .field-wrap .nggv-field-date *:before,:host .field-wrap .nggv-field-date *:after{box-sizing:border-box}:host .field-wrap .nggv-field-date:hover{border-color:#41b0ee}:host .field-wrap .nggv-field-date:focus{outline-color:#1a1a1a;outline-style:solid;outline-width:.125rem;outline-offset:.125rem}:host .field-wrap .nggv-field-date:active{border-color:#cecece}:host .field-wrap .nggv-field-date[disabled]{background-color:#f8f8f8;border-color:#cecece}:host .field-wrap .nggv-field-date[disabled]::placeholder{color:#cecece}:host .field-wrap .nggv-field-date:not(:focus){border-right:none;padding-right:0}:host .field-wrap .nggv-field-date:focus{padding-right:0}:host.small .gds-field-label{font-size:.875rem;line-height:1rem}:host.small label+.field-wrap{margin-top:.25rem}:host.small .field-wrap{height:calc(2rem + 3px);min-height:calc(2rem + 3px)}:host.small .field-wrap .nggv-field-date{padding:.38rem .5rem;line-height:1rem;min-height:2rem;font-size:.875rem}:host.small .field-wrap .nggv-button-date{min-height:2rem;min-width:2rem;width:2rem;height:2rem;padding:0}\n"] }]
|
|
180
|
+
args: [{ selector: 'nggv-dateinput,nggv-input[type=date]', template: "<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-input'\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n </label>\n\n <!-- DESCRIPTION -->\n <div\n class=\"gds-field-label--small description hide-if-empty\"\n *ngIf=\"description\"\n >\n {{ description }}\n </div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state | nggvInputMaskFormat: dateInputMask }}\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- INPUT WRAPPER -->\n <ng-container *ngIf=\"!locked\">\n <div\n class=\"field-wrap\"\n [class.nggv-field--error]=\"invalid\"\n *ngIf=\"showInput$ | async\"\n >\n <!-- INPUT FIELD -->\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"nggv-field-date\"\n type=\"text\"\n autocomplete=\"off\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [nggvInputMask]=\"dateInputMask\"\n [value]=\"state\"\n title=\"\"\n (change)=\"onValueChange($event.target)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <button\n aria-label=\"toggle calendar\"\n #toggleCalendarButton\n class=\"nggv-button-date\"\n type=\"button\"\n data-thook=\"toggle-calendar-button\"\n (click)=\"toggleDatepicker()\"\n [disabled]=\"disabled\"\n >\n @if (size === 'small') {\n <gds-icon-calendar *nggCoreElement size=\"16px\"></gds-icon-calendar>\n }\n\n @if (size === 'large') {\n <gds-icon-calendar *nggCoreElement size=\"20px\"></gds-icon-calendar>\n }\n </button>\n </div>\n\n <!-- DATEPICKER -->\n <div class=\"nggv-datepicker\" *ngIf=\"shown\">\n <nggv-datepicker\n #input\n [type]=\"type\"\n [disableDates]=\"disableDates\"\n [disableWeekDays]=\"disableWeekDays\"\n [selected]=\"state\"\n [locale]=\"locale\"\n [minCalendarRows]=\"minRows\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [firstValid]=\"firstValid\"\n [lastValid]=\"lastValid\"\n [closingTime]=\"closingTime\"\n [dynamicPosition]=\"dynamicPosition\"\n [size]=\"size\"\n (ngvDateChange)=\"onDateChange($event)\"\n >\n <ng-content></ng-content>\n </nggv-datepicker>\n </div>\n\n <!-- ERRORS -->\n <ng-container\n *ngIf=\"\n invalid &&\n (error || ngControl?.invalid) &&\n (!errorList || !errorList.length)\n \"\n >\n <label\n class=\"gds-field-notice gds-field-notice--error\"\n [attr.for]=\"id + '-input'\"\n >\n <span class=\"error-item\">\n <span class=\"error-item--icon\">\n <gds-icon-triangle-exclamation\n *nggCoreElement\n [solid]=\"true\"\n size=\"16px\"\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </span>\n </label>\n </ng-container>\n <ng-container *ngFor=\"let error of errorList ?? []\">\n <label\n class=\"gds-field-notice gds-field-notice--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && error\"\n >\n <span class=\"error-item\">\n <span class=\"error-item--icon\">\n <gds-icon-triangle-exclamation\n *nggCoreElement\n [solid]=\"true\"\n size=\"16px\"\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n </label>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [":host{display:block;position:relative}@media (max-width: 47.98em){:host{min-width:100%}}:host .hide-if-empty:empty{display:none}:host .unset-state{padding-left:.5rem}:host .gds-field-label{display:block}:host .gds-field-label:is(label){margin-bottom:0}:host .gds-field-label.form-control{width:fit-content}@supports (-moz-appearance: none){:host .gds-field-label.form-control:focus:not(:focus-visible){box-shadow:none;outline:0}:host .gds-field-label.form-control:focus,:host .gds-field-label.form-control:focus-within{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}}:host .gds-field-label:not(.form-control){font-weight:500;width:100%;line-height:1.25rem}:host .gds-field-label+input,:host .gds-field-label+textarea,fieldset :host .gds-field-label+div,:host .gds-field-label+button,:host .gds-field-label+.group-stepper,:host .gds-field-label+.stepper-wrapper,:host .gds-field-label+.group{margin-top:.5rem}:host .gds-field-label+.form-info{margin-bottom:.5rem}:host label+.field-wrap,:host label+.nggv-field--locked{margin-top:.5rem}:host .description{font-size:.875rem;margin-bottom:.5rem;line-height:1.25rem;width:100%}:host .gds-field-label--optional:is(label){margin-bottom:0}:host .gds-field-label--optional.form-control{width:fit-content}@supports (-moz-appearance: none){:host .gds-field-label--optional.form-control:focus:not(:focus-visible){box-shadow:none;outline:0}:host .gds-field-label--optional.form-control:focus,:host .gds-field-label--optional.form-control:focus-within{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}}:host .gds-field-label--optional:not(.form-control){font-weight:500;width:100%;line-height:1.25rem}:host .gds-field-label--optional+input,:host .gds-field-label--optional+textarea,fieldset :host .gds-field-label--optional+div,:host .gds-field-label--optional+button,:host .gds-field-label--optional+.group-stepper,:host .gds-field-label--optional+.stepper-wrapper,:host .gds-field-label--optional+.group{margin-top:.5rem}:host .gds-field-label--optional+.form-info{margin-bottom:.5rem}:host .nggv-datepicker{margin-top:.25rem;position:absolute}:host .nggv-field--error{border-bottom:.125rem solid #9f000a!important}:host .nggv-field--error:focus,:host .nggv-field--error:active,:host .nggv-field--error:hover{border-bottom:.125rem solid #9f000a!important}:host .error-item{display:flex;gap:.5rem;color:#9f000a}:host .gds-field-notice{margin-top:.5rem;display:block;font-size:.875rem;line-height:1;font-weight:500}:host .field-wrap{border:1px solid #868686;border-radius:4px;outline:none;box-sizing:border-box;min-height:2.75rem;line-height:1.5;font-size:1rem;font-family:inherit;height:2.625rem;display:flex}:host .field-wrap *,:host .field-wrap *:before,:host .field-wrap *:after{box-sizing:border-box}:host .field-wrap .nggv-button-date{--text-disabled-color: #adadad;padding:.75rem 1rem;border-radius:var(--sg-border-radius);border:solid var(--sg-border-width) var(--sg-border-color);font-weight:500;min-height:2.75rem;align-items:center;display:inline-flex;justify-content:center;transition:all .3s cubic-bezier(.23,1,.32,1),outline-offset 0s,outline-width 0s;border-color:#333;color:#333;--color: rgb(51, 51, 51);background-color:transparent;min-height:2.5rem;border:none;border-radius:3px;width:2.625rem;height:2.625rem;min-width:2.625rem;border-top-left-radius:0!important;border-bottom-left-radius:0!important;text-align:right}:host .field-wrap .nggv-button-date:focus:not(:focus-visible){box-shadow:none;outline:0}:host .field-wrap .nggv-button-date:focus,:host .field-wrap .nggv-button-date:focus-visible{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}@media (max-width: 35.98em){:host .field-wrap .nggv-button-date{min-width:100%}}@media screen and (-ms-high-contrast: active){:host .field-wrap .nggv-button-date{border:2px solid currentcolor}}:host .field-wrap .nggv-button-date.small{min-height:2rem;padding:.4375rem .75rem;font-size:.875rem;line-height:1rem}:host .field-wrap .nggv-button-date.large{min-height:4rem;padding:1rem 1.5rem;font-size:1.5rem;line-height:2rem}:host .field-wrap .nggv-button-date:not(:disabled,.disabled,[aria-disabled]):hover{background-color:#333;color:#fff;--background: rgb(51, 51, 51);--color: rgb(255, 255, 255);border-color:#333}:host .field-wrap .nggv-button-date[aria-selected=true],:host .field-wrap .nggv-button-date:active,:host .field-wrap .nggv-button-date.active,:host .field-wrap .nggv-button-date.active:hover,:host .field-wrap .nggv-button-date:active:hover{background-color:#333;color:#fff;--background: rgb(51, 51, 51);--color: rgb(255, 255, 255);border-color:#333}:host .field-wrap .nggv-button-date[aria-selected]:hover,:host .field-wrap .nggv-button-date.active:hover,:host .field-wrap .nggv-button-date:active:hover{opacity:.9}:host .field-wrap .nggv-button-date:focus-visible{background-color:#333;color:#fff;--background: rgb(51, 51, 51);--color: rgb(255, 255, 255);border-color:#333!important}:host .field-wrap .nggv-button-date:disabled,:host .field-wrap .nggv-button-date.disabled,:host .field-wrap .nggv-button-date[aria-disabled=true]{color:var(--text-disabled-color)!important;border-color:var(--border-disabled-color)!important;cursor:not-allowed}:host .field-wrap .nggv-button-date:disabled::placeholder,:host .field-wrap .nggv-button-date.disabled::placeholder,:host .field-wrap .nggv-button-date[aria-disabled=true]::placeholder{color:var(--text-disabled-color)}@media (max-width: 47.98em){:host .field-wrap .nggv-button-date{width:2.625rem;height:2.625rem}}:host .field-wrap .nggv-button-date:focus{outline-color:#1a1a1a;outline-style:solid;outline-width:.125rem;outline-offset:.125rem}:host .field-wrap .nggv-button-date[disabled]{background-color:#f8f8f8!important;color:#adadad}@media (max-width: 35.98em){:host .field-wrap .nggv-button-date{min-width:initial}}:host .field-wrap input[type=text]::-webkit-inner-spin-button,:host .field-wrap input[type=text]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none;font-size:1rem;font-family:inherit}:host .field-wrap .nggv-field-date{border:1px solid #cecece;border-radius:4px 0 0 4px;outline:none;box-sizing:border-box;min-height:2.75rem;line-height:1.5;font-size:1rem;font-family:inherit;border:none;min-height:2.375rem;width:100%;padding-left:1rem}:host .field-wrap .nggv-field-date *,:host .field-wrap .nggv-field-date *:before,:host .field-wrap .nggv-field-date *:after{box-sizing:border-box}:host .field-wrap .nggv-field-date:hover{border-color:#41b0ee}:host .field-wrap .nggv-field-date:focus{outline-color:#1a1a1a;outline-style:solid;outline-width:.125rem;outline-offset:.125rem}:host .field-wrap .nggv-field-date:active{border-color:#cecece}:host .field-wrap .nggv-field-date[disabled]{background-color:#f8f8f8;border-color:#cecece}:host .field-wrap .nggv-field-date[disabled]::placeholder{color:#cecece}:host .field-wrap .nggv-field-date:not(:focus){border-right:none;padding-right:0}:host .field-wrap .nggv-field-date:focus{padding-right:0}:host.small .gds-field-label{font-size:.875rem;line-height:1rem}:host.small label+.field-wrap{margin-top:.25rem}:host.small .field-wrap{height:calc(2rem + 3px);min-height:calc(2rem + 3px)}:host.small .field-wrap .nggv-field-date{padding:.38rem .5rem;line-height:1rem;min-height:2rem;font-size:.875rem}:host.small .field-wrap .nggv-button-date{min-height:2rem;min-width:2rem;width:2rem;height:2rem;padding:0}\n"] }]
|
|
171
181
|
}], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
|
|
172
182
|
type: Self
|
|
173
183
|
}, {
|
|
@@ -213,8 +223,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
213
223
|
type: Input
|
|
214
224
|
}], size: [{
|
|
215
225
|
type: Input
|
|
226
|
+
}], dynamicPosition: [{
|
|
227
|
+
type: Input
|
|
216
228
|
}], keyListener: [{
|
|
217
229
|
type: HostListener,
|
|
218
230
|
args: ['keydown', ['$event']]
|
|
219
231
|
}] } });
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9kYXRlcGlja2VyL2NvbXBvbmVudHMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2RhdGVwaWNrZXIvY29tcG9uZW50cy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTywwQkFBMEIsQ0FBQTtBQUVqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDekMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUMsT0FBTyxFQUNMLGVBQWUsRUFFZixnQkFBZ0IsR0FDakIsTUFBTSxvQkFBb0IsQ0FBQTtBQUMzQixPQUFPLEVBQUUsU0FBUyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXJELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHlFQUF5RSxDQUFBO0FBSTNILE9BQU8sd0RBQXdELENBQUE7QUFDL0QsT0FBTyxvRUFBb0UsQ0FBQTs7Ozs7Ozs7QUFFM0U7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFNSCxNQUFNLE9BQU8sa0JBQ1gsU0FBUSxpQ0FBaUM7SUFTekMsSUFBZ0MsT0FBTztRQUNyQyxP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Q29udGVudCI6WyJpbXBvcnQgJy4uLy4uL2RhdGVwaWNrZXIuZ2xvYmFscydcblxuaW1wb3J0IHsgV2Vla0RheSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFNlbGYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHtcbiAgVFJBTlNMT0NPX1NDT1BFLFxuICBUcmFuc2xvY29TY29wZSxcbiAgVHJhbnNsb2NvU2VydmljZSxcbn0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJ1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IHN0YXJ0V2l0aCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IERhdGVDb250cm9sVmFsdWVBY2Nlc3NvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2RhdGUtY29udHJvbC12YWx1ZS1hY2Nlc3Nvci9kYXRlLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3IuY29tcG9uZW50J1xuXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVHlwZSB9IGZyb20gJy4uLy4uL2RhdGVwaWNrZXIubW9kZWxzJ1xuXG5pbXBvcnQgJ0BzZWJncm91cC9ncmVlbi1jb3JlL2NvbXBvbmVudHMvaWNvbi9pY29ucy9jYWxlbmRhci5qcydcbmltcG9ydCAnQHNlYmdyb3VwL2dyZWVuLWNvcmUvY29tcG9uZW50cy9pY29uL2ljb25zL3RyaWFuZ2xlLWV4Y2xhbWF0aW9uLmpzJ1xuXG4vKipcbiAqIERhdGUgcGlja2VycyBzaW1wbGlmeSB0aGUgdGFzayBvZiBzZWxlY3RpbmcgYSBkYXRlIGluIGEgdmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgY2FsZW5kYXIuXG4gKiBodHRwczovL2Rlc2lnbmxpYnJhcnkuc2ViZ3JvdXAuY29tL2NvbXBvbmVudHMvY29tcG9uZW50LWRhdGVwaWNrZXJcbiAqXG4gKiBTZWxlY3RvcjogYG5nZ3YtZGF0ZWlucHV0YFxuICpcbiAqIFdoZW4gZm9jdXNpbmcgYW4gZGF0ZSBlbGVtZW50LCB0aGUgY2FsZW5kYXIgYWxsb3dzIGZvciBuYXZpZ2F0aW9uIHVzaW5nIGJvdGggdGFiIGFuZCBhcnJvdyBrZXlzLlxuICogUHJlc3NpbmcgJ2VzYycgd2lsbCBjbG9zZSB0aGUgY2FsZW5kYXIuXG4gKlxuICogUmVxdWlyZXMgVHJhbnNsb2NvTG9jYWxlLCBidXQgaW4gdHVybiBhbGxvd3MgZm9yIHNldHRpbmcgbG9jYWxlIGR5bmFtaWNhbGx5OlxuICogaHR0cHM6Ly9qc3ZlcnNlLmdpdGh1Yi5pby90cmFuc2xvY28vZG9jcy9wbHVnaW5zL2xvY2FsZS8jbWFudWFsbHktc2V0dGluZy1sb2NhbGVcbiAqXG4gKiBUbyBjb25maWd1cmUgVHJhbnNsb2NvTG9jYWxlLCBmb2xsb3cgdGhpcyBndWlkZTpcbiAqIGh0dHBzOi8vanN2ZXJzZS5naXRodWIuaW8vdHJhbnNsb2NvL2RvY3MvcGx1Z2lucy9sb2NhbGUvI3NldHVwXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nZ3YtZGF0ZWlucHV0LG5nZ3YtaW5wdXRbdHlwZT1kYXRlXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlSW5wdXRDb21wb25lbnRcbiAgZXh0ZW5kcyBEYXRlQ29udHJvbFZhbHVlQWNjZXNzb3JDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3lcbntcbiAgQFZpZXdDaGlsZCgndG9nZ2xlQ2FsZW5kYXJCdXR0b24nKVxuICB0b2dnbGVCdXR0b25SZWY/OiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PlxuICAvKiogU3BlY2lhbCBwcm9wZXJ0eSB1c2VkIGZvciBzZWxlY3RpbmcgRE9NIGVsZW1lbnRzIGR1cmluZyBhdXRvbWF0ZWQgVUkgdGVzdGluZy4gKi9cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdGhvb2snKSBASW5wdXQoKSB0aG9vazogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9XG4gICAgJ2RhdGUtaW5wdXQnXG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWFsbCcpIGdldCBpc1NtYWxsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNpemUgPT09ICdzbWFsbCdcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MubGFyZ2UnKSBnZXQgaXNMYXJnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaXplID09PSAnbGFyZ2UnXG4gIH1cblxuICAvKiogU2V0IHR5cGUgb2YgY2FsZW5kYXI6IGVpdGhlciAnbm9ybWFsJyBvciAnZXhwYW5kZWQnLiBEZWZhdWx0IGlzICdub3JtYWwnLiAqL1xuICBASW5wdXQoKSB0eXBlOiBDYWxlbmRhclR5cGUgPSAnbm9ybWFsJ1xuICAvKiogSWYgc2V0IHRvIHRydWUsIHRoZSB2YWx1ZSB3aWxsIG5vdCBiZSBlZGl0YWJsZS4gKi9cbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZVxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgRGF0ZXMgb3IgcGFyc2FibGUgc3RyaW5ncyB0aGF0IGNvcnJlc3BvbmRzIHdpdGggZGF0ZXMgdGhhdCBzaG91bGQgbm90IGJlIHNlbGVjdGFibGUgaW4gdGhlIGNhbGVuZGFyLlxuICAgKiBJLmUuIGJhbmsgaG9saWRheXMuXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlRGF0ZXM6IChzdHJpbmcgfCBEYXRlKVtdID0gW11cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHdlZWtkYXlzIHRoYXQgc2hvdWxkIG5vdCBiZSBzZWxlY3RhYmxlIGluIHRoZSBjYWxlbmRhci5cbiAgICogQ2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBvciBpbnN0ZWFkIG9mIEBJbnB1dCgpIGRpc2FibGVEYXRlcy5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVXZWVrRGF5czogV2Vla0RheVtdID0gW11cbiAgLyoqIE1pbmludW0gbnVtYmVyIG9mIHJvd3Mgc2hvd24gaW4gdGhlIGNhbGVuZGFyLiAqL1xuICBASW5wdXQoKSBtaW5Sb3dzID0gNVxuICAvKiogU2V0cyBhIGZyb20tZGF0ZSBvZiB3aGljaCBhbGwgZGF0ZXMgYmVmb3JlIHdpbGwgYmUgaW52YWxpZC4gKi9cbiAgQElucHV0KCkgZmlyc3RWYWxpZDogRGF0ZSB8IHVuZGVmaW5lZFxuICAvKiogU2V0cyBhIHRvLWRhdGUgb2Ygd2hpY2ggYWxsIGRhdGVzIGFmdGVyIHdpbGwgYmUgaW52YWxpZC4gKi9cbiAgQElucHV0KCkgbGFzdFZhbGlkOiBEYXRlIHwgdW5kZWZpbmVkXG4gIC8qKiBTZXRzIGEgY2xvc2luZyB0aW1lIGZvciB0b2RheSB0byB0b2dnbGUgYXZhaWxhYmlsaXR5IGZvciB0b2RheSdzIGRhdGUuICovXG4gIEBJbnB1dCgpIGNsb3NpbmdUaW1lOiBEYXRlIHwgdW5kZWZpbmVkXG4gIC8qKiBTZXRzIGZpcnN0IGRheSBvZiB3ZWVrIGluIGNhbGVuZGFyLiBEZWZhdWx0cyB0byBNb25kYXkuICovXG4gIEBJbnB1dCgpIGZpcnN0RGF5T2ZXZWVrOiBXZWVrRGF5ID0gV2Vla0RheS5Nb25kYXlcbiAgLyoqIElmIHNldCB0byB0cnVlLCBpdCB3aWxsIGFsbG93IHRvIGNsb3NlIHRoZSBjYWxlbmRhciBvbiBlc2NhcGUgYnV0dG9uIGNsaWNrLiAqL1xuICBASW5wdXQoKSBjbG9zZUNhbGVuZGFyT25Fc2NhcGUgPSB0cnVlXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGRpc3BsYXllZCBzaXplIG9mIHRoZSBkYXRlIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgc2l6ZTogJ3NtYWxsJyB8ICdsYXJnZScgPSAnbGFyZ2UnXG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICAvLyBjYWxlbmRhckljb246IEljb25EZWZpbml0aW9uID0gZmFDYWxlbmRhckRheXM7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBzaG93biA9IGZhbHNlXG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBzaG93SW5wdXQkID0gdGhpcy5zaG93SW5wdXREYXRlU3JjLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc3RhcnRXaXRoKHRydWUpKVxuXG4gIC8qKiBPYnNlcnZhYmxlIGZvciBsaXN0ZW5pbmcgdG8gY2xpY2tzIG91dHNpZGUgb2YgdGhlIGRhdGVwaWNrZXIuICovXG4gIHByaXZhdGUgZG9jdW1lbnRDbGljayQ6IE9ic2VydmFibGU8RXZlbnQ+ID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKVxuICAvKiogU3ViamVjdCB1c2VkIGZvciB1bnN1YnNjcmliZSBwYXR0ZXJuIG9uIGFib3ZlIG9ic2VydmFibGUuICovXG4gIHByaXZhdGUgZGF0ZXBpY2tlckNsb3NlZCQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpXG5cbiAgY29uc3RydWN0b3IoXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFRSQU5TTE9DT19TQ09QRSlcbiAgICBwcm90ZWN0ZWQgdHJhbnNsb2NvU2NvcGU6IFRyYW5zbG9jb1Njb3BlLFxuICAgIHByb3RlY3RlZCB0cmFuc2xvY286IFRyYW5zbG9jb1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge1xuICAgIHN1cGVyKG5nQ29udHJvbCwgdHJhbnNsb2NvU2NvcGUsIGVsZW1lbnRSZWYsIGNkciwgdHJhbnNsb2NvKVxuICAgIC8vIHRoaXMuc2hvd0lucHV0JCA9IHRoaXMuc2hvd0lucHV0RGF0ZVNyYy5hc09ic2VydmFibGUoKVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlcGlja2VyQ2xvc2VkJC5uZXh0KHRydWUpXG4gICAgdGhpcy5kYXRlcGlja2VyQ2xvc2VkJC5jb21wbGV0ZSgpXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIENhbGxlZCBmcm9tIHRoZSBkYXRlcGlja2VyLWNvbXBvbmVudCB3aGVuIGEgZGF0ZSBidXR0b24gaXMgY2xpY2tlZCBpbiB0aGUgY2FsZW5kYXIuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRlIGRhdGUgb2JqZWN0IGVtaXR0ZWQgd2hlbiBzZWxlY3RpbmcgYSBkYXRlIGluIHRoZSBkYXRlcGlja2VyLlxuICAgKi9cbiAgb25EYXRlQ2hhbmdlKGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICAvLyBjb250cm9sIHZhbHVlIGFjY2Vzc29yIHdpbGwgZW5zdXJlIGNvcnJlY3QgZm9ybWF0dGluZyBvZiBzdGF0ZVxuICAgIHRoaXMuc3RhdGUgPSBEYXRlQ29udHJvbFZhbHVlQWNjZXNzb3JDb21wb25lbnQucGFyc2VEYXRlTGlrZShkYXRlKVxuICAgIC8vIGVtaXQgc3RhdGVcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc3RhdGUpXG4gICAgLy8gY2xvc2UgZGF0ZXBpY2tlciBhbmQgbW92ZSBmb2N1cyB0byBkYXRlcGlja2VyIGJ1dHRvblxuICAgIHRoaXMuc2V0U2hvd24oZmFsc2UpXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRvZ2dsZUJ1dHRvblJlZj8ubmF0aXZlRWxlbWVudC5mb2N1cygpLCAxKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBDYWxsZWQgd2hlbiBlbnRlcmluZyBkYXRlIG1hbnVhbGx5IGluIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgb25WYWx1ZUNoYW5nZShldmVudFRhcmdldDogYW55KTogdm9pZCB7XG4gICAgLy8gV2lsbCBiZSBpbiB0aGUgZm9ybWF0IHNlbGVjdGVkIGluIGlucHV0TWFza1xuICAgIGNvbnN0IHZhbHVlID0gYCR7ZXZlbnRUYXJnZXQuaW5wdXRtYXNrLnVuZG9WYWx1ZX1gID8/ICcnXG5cbiAgICAvLyBVc2UgcGFyc2VyZnVuY3Rpb24gZnJvbSBpbnB1dE1hc2sgdG8gcGFyc2UgdG8gYSBkYXRlIG9iamVjdCBzaW5jZSB2YWx1ZSBjYW4gYmUgaW4gbXVsdGlwbGUgZm9ybWF0c1xuICAgIC8vIFRoZW4gb250cm9sIHZhbHVlIGFjY2Vzc29yIHdpbGwgZW5zdXJlIGNvcnJlY3QgZm9ybWF0dGluZyBvZiBzdGF0ZVxuICAgIGNvbnN0IHBhcnNlZERhdGUgPSBEYXRlQ29udHJvbFZhbHVlQWNjZXNzb3JDb21wb25lbnQucGFyc2VEYXRlTGlrZShcbiAgICAgIHRoaXMuZGF0ZUlucHV0TWFzay5wYXJzZXIhKHZhbHVlKSxcbiAgICApXG5cbiAgICB0aGlzLnN0YXRlID0gcGFyc2VkRGF0ZVxuXG4gICAgLy8gZW1pdCBwYXJzZWQgZGF0ZVxuICAgIHRoaXMub25DaGFuZ2UocGFyc2VkRGF0ZSlcbiAgICB0aGlzLm9uVG91Y2hlZCgpXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIExpc3RlbiB0byAnZXNjJyBrZXlwcmVzcyBhbmQgY2xvc2VzIGRhdGVwaWNrZXIgaWYgb3Blbi5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBrZXlMaXN0ZW5lcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsb3NlQ2FsZW5kYXJPbkVzY2FwZSAmJiBldmVudC5rZXkgPT09ICdFc2NhcGUnKVxuICAgICAgdGhpcy5zZXRTaG93bihmYWxzZSlcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgdG9nZ2xlRGF0ZXBpY2tlcigpOiB2b2lkIHtcbiAgICB0aGlzLnNldFNob3duKCF0aGlzLnNob3duKVxuICB9XG5cbiAgLyoqIFRvIGV4dGVybmFsbHkgdHJpZ2dlciB0aGUgZGF0ZXBpY2tlciB0byBjbG9zZS4gKi9cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTaG93bihmYWxzZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHNob3duIHN0YXRlIG9mIHRoZSBkYXRlcGlja2VyIHBvcHVwLiBJZiB0cnVlIHRoZSBwb3B1cCB3aWxsIGJlIHZpc2libGUuXG4gICAqIElmIHRoZSBzdGF0ZSBpcyBzZXQgdG8gZmFsc2UsIGNhbGwgb25Ub3VjaGVkIHRvIG5vdGlmeSBhbnkgc3RhdGUgbGlzdGVuZXJzXG4gICAqIEBwYXJhbSBzdGF0ZSB0aGUgc2hvd24gc3RhdGUgd2hpY2ggdG8gc2V0LlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRTaG93bihzdGF0ZSA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLnNob3duID0gc3RhdGVcbiAgICBpZiAoIXRoaXMuc2hvd24pIHtcbiAgICAgIC8vIGlmIHNob3duIGlzIHNldCB0byBmYWxzZSwgc3RvcCBsaXN0ZW5pbmcgdG8gY2xpY2tzXG4gICAgICB0aGlzLmRhdGVwaWNrZXJDbG9zZWQkLm5leHQodHJ1ZSlcbiAgICAgIHJldHVybiB0aGlzLm9uVG91Y2hlZCgpXG4gICAgfVxuICAgIC8vIGlmIHNob3duIGlzIHNldCB0byB0cnVlLCByZXNldCB1bnN1YnNjcmliZSB2YXJpYWJsZVxuICAgIHRoaXMuZGF0ZXBpY2tlckNsb3NlZCQubmV4dChmYWxzZSlcbiAgICAvLyBzdGFydCBsaXN0ZW5pbmcgZm9yIGNsaWNrcyBvdXRzaWRlIHRoZSBjb21wb25lbnRcbiAgICB0aGlzLmRvY3VtZW50Q2xpY2skLnBpcGUodGFrZVVudGlsKHRoaXMuZGF0ZXBpY2tlckNsb3NlZCQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAvLyBjbGlja2luZyBvbiBhIGdyYXkgZGF0ZSBjYXVzZXMgdGhlIGRhdGVwaWNrZXIgdG8gcmVsb2FkIHRoZSBjYWxlbmRhciBkYXRlcyxcbiAgICAgICAgLy8gYW5kIHRoZSBidXR0b24gZWxlbWVudCBjbGlja2VkIHdpbGwgbm8gbG9uZ2VyIGJlIGNvbnNpZGVyZWQgYXMgYSBjaGlsZCBvZiB0aGUgZGF0ZXBpY2tlci5cbiAgICAgICAgLy8gYnV0IHRoZSBldmVudCB0YXJnZXQgcGF0aCB3aWxsIHN0aWxsIGNvbnRhaW4gdGhlIHBhcmVudCBlbGVtZW50XG4gICAgICAgIC8vIGlmIHRhcmdldCBoYXMgZGF0ZXBpY2tlciBwYXJlbnQsIGtlZXAgbGlzdGVuaW5nXG4gICAgICAgIGNvbnN0IGV2ZW50UGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpXG4gICAgICAgIGNvbnN0IGhhc0RhdGVwaWNrZXJQYXJlbnQgPSAhIWV2ZW50UGF0aC5maW5kKFxuICAgICAgICAgIChlKSA9PiBlID09PSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgKVxuICAgICAgICBpZiAoaGFzRGF0ZXBpY2tlclBhcmVudCkgcmV0dXJuXG4gICAgICAgIC8vIGVsc2UgdGhlIGNsaWNrIGlzIGNvbnNpZGVyZWQgdG8gYmUgb3V0c2lkZSwgY2xvc2UgZGF0ZXBpY2tlclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRTaG93bihmYWxzZSlcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxufVxuIiwiPCEtLSBMQUJFTCAtLT5cbjxuZy1jb250YWluZXIgKnRyYW5zbG9jbz1cImxldCB0OyByZWFkOiBzY29wZVwiPlxuICA8bGFiZWxcbiAgICBbaWRdPVwiaWQgKyAnLWxhYmVsJ1wiXG4gICAgY2xhc3M9XCJnZHMtZmllbGQtbGFiZWwgaGlkZS1pZi1lbXB0eVwiXG4gICAgW2F0dHIuZm9yXT1cImlkICsgJy1pbnB1dCdcIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxhYmVsQ29udGVudFRwbCB8fCBiYXNpY0xhYmVsQ29udGVudFRwbFwiXG4gICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNiYXNpY0xhYmVsQ29udGVudFRwbD5cbiAgICAgIDwhLS0gdG8gdHJpZ2dlciBjc3M6ZW1wdHkgaWYgbm8gbGFiZWwgd2FzIGFkZGVkIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxhYmVsXCI+XG4gICAgICAgIHt7IGxhYmVsIH19XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJvcHRpb25hbCA9PT0gdHJ1ZSB8fCAocmVxdWlyZWQgIT09IHRydWUgJiYgb3B0aW9uYWwgIT09IGZhbHNlKVwiXG4gICAgICAgICAgY2xhc3M9XCJnZHMtZmllbGQtbGFiZWwtLW9wdGlvbmFsXCJcbiAgICAgICAgPlxuICAgICAgICAgICh7eyB0KCdsYWJlbC5vcHRpb25hbCcpIH19KVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2xhYmVsPlxuXG4gIDwhLS0gREVTQ1JJUFRJT04gLS0+XG4gIDxkaXZcbiAgICBjbGFzcz1cImdkcy1maWVsZC1sYWJlbC0tc21hbGwgZGVzY3JpcHRpb24gaGlkZS1pZi1lbXB0eVwiXG4gICAgKm5nSWY9XCJkZXNjcmlwdGlvblwiXG4gID5cbiAgICB7eyBkZXNjcmlwdGlvbiB9fVxuICA8L2Rpdj5cblxuICA8IS0tIExPQ0tFRCBJTlBVVCAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvY2tlZFwiPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgbG9ja2VkVHBsIHx8IGRlZmF1bHRMb2NrZWRUcGw7XG4gICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBzdGF0ZSB9XG4gICAgICBcIlxuICAgID48L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdExvY2tlZFRwbD5cbiAgICAgIDxkaXZcbiAgICAgICAgW2lkXT1cImlkICsgJy1pbnB1dCdcIlxuICAgICAgICBjbGFzcz1cIm5nZ3YtZmllbGQtLWxvY2tlZFwiXG4gICAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgICAgIFthdHRyLnZhbHVlXT1cInN0YXRlXCJcbiAgICAgICAgW2F0dHIucm9sZV09XCJyb2xlXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhc3RhdGVcIiBjbGFzcz1cInVuc2V0LXN0YXRlXCI+LTwvc3Bhbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlXCI+XG4gICAgICAgICAge3sgc3RhdGUgfCBuZ2d2SW5wdXRNYXNrRm9ybWF0OiBkYXRlSW5wdXRNYXNrIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBJTlBVVCBXUkFQUEVSIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvY2tlZFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZmllbGQtd3JhcFwiXG4gICAgICBbY2xhc3Mubmdndi1maWVsZC0tZXJyb3JdPVwiaW52YWxpZFwiXG4gICAgICAqbmdJZj1cInNob3dJbnB1dCQgfCBhc3luY1wiXG4gICAgPlxuICAgICAgPCEtLSBJTlBVVCBGSUVMRCAtLT5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjaW5wdXRcbiAgICAgICAgW2lkXT1cImlkICsgJy1pbnB1dCdcIlxuICAgICAgICBjbGFzcz1cIm5nZ3YtZmllbGQtZGF0ZVwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICAgICAgW2F0dHIucmVxdWlyZWRdPVwicmVxdWlyZWQgfHwgbnVsbFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtyZWFkT25seV09XCJyZWFkb25seVwiXG4gICAgICAgIFthdHRyLnJvbGVdPVwicm9sZVwiXG4gICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJkZXNjcmlwdGlvblwiXG4gICAgICAgIFtuZ2d2SW5wdXRNYXNrXT1cImRhdGVJbnB1dE1hc2tcIlxuICAgICAgICBbdmFsdWVdPVwic3RhdGVcIlxuICAgICAgICB0aXRsZT1cIlwiXG4gICAgICAgIChjaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQudGFyZ2V0KVwiXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgICAvPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGFyaWEtbGFiZWw9XCJ0b2dnbGUgY2FsZW5kYXJcIlxuICAgICAgICAjdG9nZ2xlQ2FsZW5kYXJCdXR0b25cbiAgICAgICAgY2xhc3M9XCJuZ2d2LWJ1dHRvbi1kYXRlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGRhdGEtdGhvb2s9XCJ0b2dnbGUtY2FsZW5kYXItYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURhdGVwaWNrZXIoKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICA+XG4gICAgICAgIEBpZiAoc2l6ZSA9PT0gJ3NtYWxsJykge1xuICAgICAgICAgIDxnZHMtaWNvbi1jYWxlbmRhciAqbmdnQ29yZUVsZW1lbnQgc2l6ZT1cIjE2cHhcIj48L2dkcy1pY29uLWNhbGVuZGFyPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChzaXplID09PSAnbGFyZ2UnKSB7XG4gICAgICAgICAgPGdkcy1pY29uLWNhbGVuZGFyICpuZ2dDb3JlRWxlbWVudCBzaXplPVwiMjBweFwiPjwvZ2RzLWljb24tY2FsZW5kYXI+XG4gICAgICAgIH1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBEQVRFUElDS0VSIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJuZ2d2LWRhdGVwaWNrZXJcIiAqbmdJZj1cInNob3duXCI+XG4gICAgICA8bmdndi1kYXRlcGlja2VyXG4gICAgICAgICNpbnB1dFxuICAgICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgW2Rpc2FibGVEYXRlc109XCJkaXNhYmxlRGF0ZXNcIlxuICAgICAgICBbZGlzYWJsZVdlZWtEYXlzXT1cImRpc2FibGVXZWVrRGF5c1wiXG4gICAgICAgIFtzZWxlY3RlZF09XCJzdGF0ZVwiXG4gICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgW21pbkNhbGVuZGFyUm93c109XCJtaW5Sb3dzXCJcbiAgICAgICAgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrXCJcbiAgICAgICAgW2ZpcnN0VmFsaWRdPVwiZmlyc3RWYWxpZFwiXG4gICAgICAgIFtsYXN0VmFsaWRdPVwibGFzdFZhbGlkXCJcbiAgICAgICAgW2Nsb3NpbmdUaW1lXT1cImNsb3NpbmdUaW1lXCJcbiAgICAgICAgKG5ndkRhdGVDaGFuZ2UpPVwib25EYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L25nZ3YtZGF0ZXBpY2tlcj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRVJST1JTIC0tPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIGludmFsaWQgJiZcbiAgICAgICAgKGVycm9yIHx8IG5nQ29udHJvbD8uaW52YWxpZCkgJiZcbiAgICAgICAgKCFlcnJvckxpc3QgfHwgIWVycm9yTGlzdC5sZW5ndGgpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImdkcy1maWVsZC1ub3RpY2UgZ2RzLWZpZWxkLW5vdGljZS0tZXJyb3JcIlxuICAgICAgICBbYXR0ci5mb3JdPVwiaWQgKyAnLWlucHV0J1wiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItaXRlbVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItaXRlbS0taWNvblwiPlxuICAgICAgICAgICAgPGdkcy1pY29uLXRyaWFuZ2xlLWV4Y2xhbWF0aW9uXG4gICAgICAgICAgICAgICpuZ2dDb3JlRWxlbWVudFxuICAgICAgICAgICAgICBbc29saWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIHNpemU9XCIxNnB4XCJcbiAgICAgICAgICAgID48L2dkcy1pY29uLXRyaWFuZ2xlLWV4Y2xhbWF0aW9uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJlcnJvcjsgZWxzZSBlcnJvcnNSZWZcIlxuICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1pdGVtLS10ZXh0XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLWVycm9ybGFiZWwnXCJcbiAgICAgICAgICAgID57eyBlcnJvciB9fTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2Vycm9yc1JlZj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICpuZ0lmPVwiZmlyc3RFcnJvciBhcyBlcnJvclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItaXRlbS0tdGV4dFwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLWVycm9ybGFiZWwnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgdCgnZXJyb3IuZmllbGQnICsgZXJyb3I/LmNvZGUsIGVycm9yPy5wYXJhbXMpIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlcnJvciBvZiBlcnJvckxpc3QgPz8gW11cIj5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImdkcy1maWVsZC1ub3RpY2UgZ2RzLWZpZWxkLW5vdGljZS0tZXJyb3JcIlxuICAgICAgICBbYXR0ci5mb3JdPVwiaWQgKyAnLWlucHV0J1wiXG4gICAgICAgICpuZ0lmPVwiaW52YWxpZCAmJiBlcnJvclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItaXRlbVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItaXRlbS0taWNvblwiPlxuICAgICAgICAgICAgPGdkcy1pY29uLXRyaWFuZ2xlLWV4Y2xhbWF0aW9uXG4gICAgICAgICAgICAgICpuZ2dDb3JlRWxlbWVudFxuICAgICAgICAgICAgICBbc29saWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIHNpemU9XCIxNnB4XCJcbiAgICAgICAgICAgID48L2dkcy1pY29uLXRyaWFuZ2xlLWV4Y2xhbWF0aW9uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1pdGVtLS10ZXh0XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLWVycm9ybGFiZWwnXCJcbiAgICAgICAgICAgID57eyBlcnJvciB9fTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9kYXRlcGlja2VyL2NvbXBvbmVudHMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2RhdGVwaWNrZXIvY29tcG9uZW50cy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTywwQkFBMEIsQ0FBQTtBQUNqQyxPQUFPLHdEQUF3RCxDQUFBO0FBQy9ELE9BQU8sb0VBQW9FLENBQUE7QUFFM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3pDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUNSLElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzFDLE9BQU8sRUFDTCxlQUFlLEVBRWYsZ0JBQWdCLEdBQ2pCLE1BQU0sb0JBQW9CLENBQUE7QUFDM0IsT0FBTyxFQUFFLFNBQVMsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVyRCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQTs7Ozs7Ozs7QUFJM0g7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFNSCxNQUFNLE9BQU8sa0JBQ1gsU0FBUSxpQ0FBaUM7SUFTekMsSUFBZ0MsT0FBTztRQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFBO0lBQzlCLENBQUM7SUFFRCxJQUFnQyxPQUFPO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUE7SUFDOUIsQ0FBQztJQW9ERCxZQUM2QixTQUFvQixFQUdyQyxjQUE4QixFQUM5QixTQUEyQixFQUMzQixVQUFzQixFQUN0QixHQUFzQjtRQUVoQyxLQUFLLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBUmpDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFHckMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFyRWxDLG9GQUFvRjtRQUMzQyxVQUFLLEdBQzVDLFlBQVksQ0FBQTtRQVVkLGdGQUFnRjtRQUN2RSxTQUFJLEdBQWlCLFFBQVEsQ0FBQTtRQUN0QyxzREFBc0Q7UUFDN0MsYUFBUSxHQUFHLEtBQUssQ0FBQTtRQUN6Qjs7O1dBR0c7UUFDTSxpQkFBWSxHQUFzQixFQUFFLENBQUE7UUFDN0M7OztXQUdHO1FBQ00sb0JBQWUsR0FBYyxFQUFFLENBQUE7UUFDeEMsb0RBQW9EO1FBQzNDLFlBQU8sR0FBRyxDQUFDLENBQUE7UUFPcEIsOERBQThEO1FBQ3JELG1CQUFjLEdBQVksT0FBTyxDQUFDLE1BQU0sQ0FBQTtRQUNqRCxrRkFBa0Y7UUFDekUsMEJBQXFCLEdBQUcsSUFBSSxDQUFBO1FBRXJDOztXQUVHO1FBQ00sU0FBSSxHQUFzQixPQUFPLENBQUE7UUFFakMsb0JBQWUsR0FBRyxLQUFLLENBQUE7UUFFaEMsZ0JBQWdCO1FBQ2hCLGlEQUFpRDtRQUVqRCxnQkFBZ0I7UUFDaEIsVUFBSyxHQUFHLEtBQUssQ0FBQTtRQUViLGdCQUFnQjtRQUNoQixlQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUV2RSxzRUFBc0U7UUFDOUQsb0JBQWUsR0FBc0IsU0FBUyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUMxRSxvRUFBb0U7UUFDNUQsbUJBQWMsR0FBc0IsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN4RSxnRUFBZ0U7UUFDeEQsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQTtRQVloRCx5REFBeUQ7SUFDM0QsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNuQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLENBQUMsSUFBVTtRQUNyQixpRUFBaUU7UUFDakUsSUFBSSxDQUFDLEtBQUssR0FBRyxpQ0FBaUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbEUsYUFBYTtRQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3pCLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3BCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxDQUFDLFdBQWdCO1FBQzVCLDhDQUE4QztRQUM5QyxNQUFNLEtBQUssR0FBRyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFBO1FBRXhELHFHQUFxRztRQUNyRyxxRUFBcUU7UUFDckUsTUFBTSxVQUFVLEdBQUcsaUNBQWlDLENBQUMsYUFBYSxDQUNoRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU8sQ0FBQyxLQUFLLENBQUMsQ0FDbEMsQ0FBQTtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFBO1FBRXZCLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUNsQixDQUFDO0lBRUQ7OztPQUdHO0lBRUgsV0FBVyxDQUFDLEtBQW9CO1FBQzlCLElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUTtZQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBRUQscURBQXFEO0lBQ3JELEtBQUs7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3RCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIscURBQXFEO1lBQ3JELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDakMsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDekIsQ0FBQztRQUNELHNEQUFzRDtRQUN0RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRWxDLHlCQUF5QjtRQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDckUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDVCxpREFBaUQ7Z0JBQ2pELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUM3QixDQUFDO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsbURBQW1EO1FBQ25ELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNwRSxJQUFJLEVBQUUsQ0FBQyxLQUFZLEVBQUUsRUFBRTtnQkFDckIsOEVBQThFO2dCQUM5RSw0RkFBNEY7Z0JBQzVGLGtFQUFrRTtnQkFDbEUsa0RBQWtEO2dCQUNsRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUE7Z0JBQ3RDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQzFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQzNDLENBQUE7Z0JBQ0QsSUFBSSxtQkFBbUI7b0JBQUUsT0FBTTtnQkFDL0IsK0RBQStEO2dCQUMvRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDN0IsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7K0dBdExVLGtCQUFrQix1RUF1RW5CLGVBQWU7bUdBdkVkLGtCQUFrQiw4dUJDbkQvQix3OUtBNExBOzs0RkR6SWEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLHNDQUFzQzs7MEJBeUU3QyxJQUFJOzswQkFBSSxRQUFROzswQkFDaEIsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxlQUFlO2lJQWxFekIsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLHNCQUFzQjtnQkFHUSxLQUFLO3NCQUE3QyxXQUFXO3VCQUFDLGlCQUFpQjs7c0JBQUcsS0FBSztnQkFHTixPQUFPO3NCQUF0QyxXQUFXO3VCQUFDLGFBQWE7Z0JBSU0sT0FBTztzQkFBdEMsV0FBVzt1QkFBQyxhQUFhO2dCQUtqQixJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQThFTixXQUFXO3NCQURWLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICcuLi8uLi9kYXRlcGlja2VyLmdsb2JhbHMnXG5pbXBvcnQgJ0BzZWJncm91cC9ncmVlbi1jb3JlL2NvbXBvbmVudHMvaWNvbi9pY29ucy9jYWxlbmRhci5qcydcbmltcG9ydCAnQHNlYmdyb3VwL2dyZWVuLWNvcmUvY29tcG9uZW50cy9pY29uL2ljb25zL3RyaWFuZ2xlLWV4Y2xhbWF0aW9uLmpzJ1xuXG5pbXBvcnQgeyBXZWVrRGF5IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgU2VsZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQge1xuICBUUkFOU0xPQ09fU0NPUEUsXG4gIFRyYW5zbG9jb1Njb3BlLFxuICBUcmFuc2xvY29TZXJ2aWNlLFxufSBmcm9tICdAanN2ZXJzZS90cmFuc2xvY28nXG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgRGF0ZUNvbnRyb2xWYWx1ZUFjY2Vzc29yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZGF0ZS1jb250cm9sLXZhbHVlLWFjY2Vzc29yL2RhdGUtY29udHJvbC12YWx1ZS1hY2Nlc3Nvci5jb21wb25lbnQnXG5cbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJUeXBlIH0gZnJvbSAnLi4vLi4vZGF0ZXBpY2tlci5tb2RlbHMnXG5cbi8qKlxuICogRGF0ZSBwaWNrZXJzIHNpbXBsaWZ5IHRoZSB0YXNrIG9mIHNlbGVjdGluZyBhIGRhdGUgaW4gYSB2aXN1YWwgcmVwcmVzZW50YXRpb24gb2YgYSBjYWxlbmRhci5cbiAqIGh0dHBzOi8vZGVzaWdubGlicmFyeS5zZWJncm91cC5jb20vY29tcG9uZW50cy9jb21wb25lbnQtZGF0ZXBpY2tlclxuICpcbiAqIFNlbGVjdG9yOiBgbmdndi1kYXRlaW5wdXRgXG4gKlxuICogV2hlbiBmb2N1c2luZyBhbiBkYXRlIGVsZW1lbnQsIHRoZSBjYWxlbmRhciBhbGxvd3MgZm9yIG5hdmlnYXRpb24gdXNpbmcgYm90aCB0YWIgYW5kIGFycm93IGtleXMuXG4gKiBQcmVzc2luZyAnZXNjJyB3aWxsIGNsb3NlIHRoZSBjYWxlbmRhci5cbiAqXG4gKiBSZXF1aXJlcyBUcmFuc2xvY29Mb2NhbGUsIGJ1dCBpbiB0dXJuIGFsbG93cyBmb3Igc2V0dGluZyBsb2NhbGUgZHluYW1pY2FsbHk6XG4gKiBodHRwczovL2pzdmVyc2UuZ2l0aHViLmlvL3RyYW5zbG9jby9kb2NzL3BsdWdpbnMvbG9jYWxlLyNtYW51YWxseS1zZXR0aW5nLWxvY2FsZVxuICpcbiAqIFRvIGNvbmZpZ3VyZSBUcmFuc2xvY29Mb2NhbGUsIGZvbGxvdyB0aGlzIGd1aWRlOlxuICogaHR0cHM6Ly9qc3ZlcnNlLmdpdGh1Yi5pby90cmFuc2xvY28vZG9jcy9wbHVnaW5zL2xvY2FsZS8jc2V0dXBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdndi1kYXRlaW5wdXQsbmdndi1pbnB1dFt0eXBlPWRhdGVdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERhdGVJbnB1dENvbXBvbmVudFxuICBleHRlbmRzIERhdGVDb250cm9sVmFsdWVBY2Nlc3NvckNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uRGVzdHJveVxue1xuICBAVmlld0NoaWxkKCd0b2dnbGVDYWxlbmRhckJ1dHRvbicpXG4gIHRvZ2dsZUJ1dHRvblJlZj86IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+XG4gIC8qKiBTcGVjaWFsIHByb3BlcnR5IHVzZWQgZm9yIHNlbGVjdGluZyBET00gZWxlbWVudHMgZHVyaW5nIGF1dG9tYXRlZCBVSSB0ZXN0aW5nLiAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS10aG9vaycpIEBJbnB1dCgpIHRob29rOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID1cbiAgICAnZGF0ZS1pbnB1dCdcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtYWxsJykgZ2V0IGlzU21hbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gJ3NtYWxsJ1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5sYXJnZScpIGdldCBpc0xhcmdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNpemUgPT09ICdsYXJnZSdcbiAgfVxuXG4gIC8qKiBTZXQgdHlwZSBvZiBjYWxlbmRhcjogZWl0aGVyICdub3JtYWwnIG9yICdleHBhbmRlZCcuIERlZmF1bHQgaXMgJ25vcm1hbCcuICovXG4gIEBJbnB1dCgpIHR5cGU6IENhbGVuZGFyVHlwZSA9ICdub3JtYWwnXG4gIC8qKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHZhbHVlIHdpbGwgbm90IGJlIGVkaXRhYmxlLiAqL1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBEYXRlcyBvciBwYXJzYWJsZSBzdHJpbmdzIHRoYXQgY29ycmVzcG9uZHMgd2l0aCBkYXRlcyB0aGF0IHNob3VsZCBub3QgYmUgc2VsZWN0YWJsZSBpbiB0aGUgY2FsZW5kYXIuXG4gICAqIEkuZS4gYmFuayBob2xpZGF5cy5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVEYXRlczogKHN0cmluZyB8IERhdGUpW10gPSBbXVxuICAvKipcbiAgICogQW4gYXJyYXkgb2Ygd2Vla2RheXMgdGhhdCBzaG91bGQgbm90IGJlIHNlbGVjdGFibGUgaW4gdGhlIGNhbGVuZGFyLlxuICAgKiBDYW4gYmUgdXNlZCB0b2dldGhlciB3aXRoIG9yIGluc3RlYWQgb2YgQElucHV0KCkgZGlzYWJsZURhdGVzLlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZVdlZWtEYXlzOiBXZWVrRGF5W10gPSBbXVxuICAvKiogTWluaW51bSBudW1iZXIgb2Ygcm93cyBzaG93biBpbiB0aGUgY2FsZW5kYXIuICovXG4gIEBJbnB1dCgpIG1pblJvd3MgPSA1XG4gIC8qKiBTZXRzIGEgZnJvbS1kYXRlIG9mIHdoaWNoIGFsbCBkYXRlcyBiZWZvcmUgd2lsbCBiZSBpbnZhbGlkLiAqL1xuICBASW5wdXQoKSBmaXJzdFZhbGlkOiBEYXRlIHwgdW5kZWZpbmVkXG4gIC8qKiBTZXRzIGEgdG8tZGF0ZSBvZiB3aGljaCBhbGwgZGF0ZXMgYWZ0ZXIgd2lsbCBiZSBpbnZhbGlkLiAqL1xuICBASW5wdXQoKSBsYXN0VmFsaWQ6IERhdGUgfCB1bmRlZmluZWRcbiAgLyoqIFNldHMgYSBjbG9zaW5nIHRpbWUgZm9yIHRvZGF5IHRvIHRvZ2dsZSBhdmFpbGFiaWxpdHkgZm9yIHRvZGF5J3MgZGF0ZS4gKi9cbiAgQElucHV0KCkgY2xvc2luZ1RpbWU6IERhdGUgfCB1bmRlZmluZWRcbiAgLyoqIFNldHMgZmlyc3QgZGF5IG9mIHdlZWsgaW4gY2FsZW5kYXIuIERlZmF1bHRzIHRvIE1vbmRheS4gKi9cbiAgQElucHV0KCkgZmlyc3REYXlPZldlZWs6IFdlZWtEYXkgPSBXZWVrRGF5Lk1vbmRheVxuICAvKiogSWYgc2V0IHRvIHRydWUsIGl0IHdpbGwgYWxsb3cgdG8gY2xvc2UgdGhlIGNhbGVuZGFyIG9uIGVzY2FwZSBidXR0b24gY2xpY2suICovXG4gIEBJbnB1dCgpIGNsb3NlQ2FsZW5kYXJPbkVzY2FwZSA9IHRydWVcblxuICAvKipcbiAgICogU2V0cyB0aGUgZGlzcGxheWVkIHNpemUgb2YgdGhlIGRhdGUgaW5wdXQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ2xhcmdlJyA9ICdsYXJnZSdcblxuICBASW5wdXQoKSBkeW5hbWljUG9zaXRpb24gPSBmYWxzZVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgLy8gY2FsZW5kYXJJY29uOiBJY29uRGVmaW5pdGlvbiA9IGZhQ2FsZW5kYXJEYXlzO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgc2hvd24gPSBmYWxzZVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgc2hvd0lucHV0JCA9IHRoaXMuc2hvd0lucHV0RGF0ZVNyYy5hc09ic2VydmFibGUoKS5waXBlKHN0YXJ0V2l0aCh0cnVlKSlcblxuICAvKiogT2JzZXJ2YWJsZSBmb3IgbGlzdGVuaW5nIHRvIHNjcm9sbHMgd2hlbiB0aGUgZGF0ZXBpY2tlciBpcyBvcGVuICovXG4gIHByaXZhdGUgZG9jdW1lbnRTY3JvbGwkOiBPYnNlcnZhYmxlPEV2ZW50PiA9IGZyb21FdmVudChkb2N1bWVudCwgJ3Njcm9sbCcpXG4gIC8qKiBPYnNlcnZhYmxlIGZvciBsaXN0ZW5pbmcgdG8gY2xpY2tzIG91dHNpZGUgb2YgdGhlIGRhdGVwaWNrZXIuICovXG4gIHByaXZhdGUgZG9jdW1lbnRDbGljayQ6IE9ic2VydmFibGU8RXZlbnQ+ID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKVxuICAvKiogU3ViamVjdCB1c2VkIGZvciB1bnN1YnNjcmliZSBwYXR0ZXJuIG9uIGFib3ZlIG9ic2VydmFibGUuICovXG4gIHByaXZhdGUgZGF0ZXBpY2tlckNsb3NlZCQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpXG5cbiAgY29uc3RydWN0b3IoXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFRSQU5TTE9DT19TQ09QRSlcbiAgICBwcm90ZWN0ZWQgdHJhbnNsb2NvU2NvcGU6IFRyYW5zbG9jb1Njb3BlLFxuICAgIHByb3RlY3RlZCB0cmFuc2xvY286IFRyYW5zbG9jb1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge1xuICAgIHN1cGVyKG5nQ29udHJvbCwgdHJhbnNsb2NvU2NvcGUsIGVsZW1lbnRSZWYsIGNkciwgdHJhbnNsb2NvKVxuICAgIC8vIHRoaXMuc2hvd0lucHV0JCA9IHRoaXMuc2hvd0lucHV0RGF0ZVNyYy5hc09ic2VydmFibGUoKVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlcGlja2VyQ2xvc2VkJC5uZXh0KHRydWUpXG4gICAgdGhpcy5kYXRlcGlja2VyQ2xvc2VkJC5jb21wbGV0ZSgpXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIENhbGxlZCBmcm9tIHRoZSBkYXRlcGlja2VyLWNvbXBvbmVudCB3aGVuIGEgZGF0ZSBidXR0b24gaXMgY2xpY2tlZCBpbiB0aGUgY2FsZW5kYXIuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRlIGRhdGUgb2JqZWN0IGVtaXR0ZWQgd2hlbiBzZWxlY3RpbmcgYSBkYXRlIGluIHRoZSBkYXRlcGlja2VyLlxuICAgKi9cbiAgb25EYXRlQ2hhbmdlKGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICAvLyBjb250cm9sIHZhbHVlIGFjY2Vzc29yIHdpbGwgZW5zdXJlIGNvcnJlY3QgZm9ybWF0dGluZyBvZiBzdGF0ZVxuICAgIHRoaXMuc3RhdGUgPSBEYXRlQ29udHJvbFZhbHVlQWNjZXNzb3JDb21wb25lbnQucGFyc2VEYXRlTGlrZShkYXRlKVxuICAgIC8vIGVtaXQgc3RhdGVcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc3RhdGUpXG4gICAgLy8gY2xvc2UgZGF0ZXBpY2tlciBhbmQgbW92ZSBmb2N1cyB0byBkYXRlcGlja2VyIGJ1dHRvblxuICAgIHRoaXMuc2V0U2hvd24oZmFsc2UpXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRvZ2dsZUJ1dHRvblJlZj8ubmF0aXZlRWxlbWVudC5mb2N1cygpLCAxKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBDYWxsZWQgd2hlbiBlbnRlcmluZyBkYXRlIG1hbnVhbGx5IGluIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgb25WYWx1ZUNoYW5nZShldmVudFRhcmdldDogYW55KTogdm9pZCB7XG4gICAgLy8gV2lsbCBiZSBpbiB0aGUgZm9ybWF0IHNlbGVjdGVkIGluIGlucHV0TWFza1xuICAgIGNvbnN0IHZhbHVlID0gYCR7ZXZlbnRUYXJnZXQuaW5wdXRtYXNrLnVuZG9WYWx1ZX1gID8/ICcnXG5cbiAgICAvLyBVc2UgcGFyc2VyZnVuY3Rpb24gZnJvbSBpbnB1dE1hc2sgdG8gcGFyc2UgdG8gYSBkYXRlIG9iamVjdCBzaW5jZSB2YWx1ZSBjYW4gYmUgaW4gbXVsdGlwbGUgZm9ybWF0c1xuICAgIC8vIFRoZW4gb250cm9sIHZhbHVlIGFjY2Vzc29yIHdpbGwgZW5zdXJlIGNvcnJlY3QgZm9ybWF0dGluZyBvZiBzdGF0ZVxuICAgIGNvbnN0IHBhcnNlZERhdGUgPSBEYXRlQ29udHJvbFZhbHVlQWNjZXNzb3JDb21wb25lbnQucGFyc2VEYXRlTGlrZShcbiAgICAgIHRoaXMuZGF0ZUlucHV0TWFzay5wYXJzZXIhKHZhbHVlKSxcbiAgICApXG5cbiAgICB0aGlzLnN0YXRlID0gcGFyc2VkRGF0ZVxuXG4gICAgLy8gZW1pdCBwYXJzZWQgZGF0ZVxuICAgIHRoaXMub25DaGFuZ2UocGFyc2VkRGF0ZSlcbiAgICB0aGlzLm9uVG91Y2hlZCgpXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIExpc3RlbiB0byAnZXNjJyBrZXlwcmVzcyBhbmQgY2xvc2VzIGRhdGVwaWNrZXIgaWYgb3Blbi5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBrZXlMaXN0ZW5lcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsb3NlQ2FsZW5kYXJPbkVzY2FwZSAmJiBldmVudC5rZXkgPT09ICdFc2NhcGUnKVxuICAgICAgdGhpcy5zZXRTaG93bihmYWxzZSlcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgdG9nZ2xlRGF0ZXBpY2tlcigpOiB2b2lkIHtcbiAgICB0aGlzLnNldFNob3duKCF0aGlzLnNob3duKVxuICB9XG5cbiAgLyoqIFRvIGV4dGVybmFsbHkgdHJpZ2dlciB0aGUgZGF0ZXBpY2tlciB0byBjbG9zZS4gKi9cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTaG93bihmYWxzZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHNob3duIHN0YXRlIG9mIHRoZSBkYXRlcGlja2VyIHBvcHVwLiBJZiB0cnVlIHRoZSBwb3B1cCB3aWxsIGJlIHZpc2libGUuXG4gICAqIElmIHRoZSBzdGF0ZSBpcyBzZXQgdG8gZmFsc2UsIGNhbGwgb25Ub3VjaGVkIHRvIG5vdGlmeSBhbnkgc3RhdGUgbGlzdGVuZXJzXG4gICAqIEBwYXJhbSBzdGF0ZSB0aGUgc2hvd24gc3RhdGUgd2hpY2ggdG8gc2V0LlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRTaG93bihzdGF0ZSA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLnNob3duID0gc3RhdGVcbiAgICBpZiAoIXRoaXMuc2hvd24pIHtcbiAgICAgIC8vIGlmIHNob3duIGlzIHNldCB0byBmYWxzZSwgc3RvcCBsaXN0ZW5pbmcgdG8gY2xpY2tzXG4gICAgICB0aGlzLmRhdGVwaWNrZXJDbG9zZWQkLm5leHQodHJ1ZSlcbiAgICAgIHJldHVybiB0aGlzLm9uVG91Y2hlZCgpXG4gICAgfVxuICAgIC8vIGlmIHNob3duIGlzIHNldCB0byB0cnVlLCByZXNldCB1bnN1YnNjcmliZSB2YXJpYWJsZVxuICAgIHRoaXMuZGF0ZXBpY2tlckNsb3NlZCQubmV4dChmYWxzZSlcblxuICAgIC8vIHN0YXJ0IGxpc3RlbiB0byBzY3JvbGxcbiAgICB0aGlzLmRvY3VtZW50U2Nyb2xsJC5waXBlKHRha2VVbnRpbCh0aGlzLmRhdGVwaWNrZXJDbG9zZWQkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgLy8gaWYgZG9jdW1lbnQgc3RhcnRzIHNjcm9sbGluZywgY2xvc2UgZGF0ZXBpY2tlclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRTaG93bihmYWxzZSlcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIC8vIHN0YXJ0IGxpc3RlbmluZyBmb3IgY2xpY2tzIG91dHNpZGUgdGhlIGNvbXBvbmVudFxuICAgIHRoaXMuZG9jdW1lbnRDbGljayQucGlwZSh0YWtlVW50aWwodGhpcy5kYXRlcGlja2VyQ2xvc2VkJCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIC8vIGNsaWNraW5nIG9uIGEgZ3JheSBkYXRlIGNhdXNlcyB0aGUgZGF0ZXBpY2tlciB0byByZWxvYWQgdGhlIGNhbGVuZGFyIGRhdGVzLFxuICAgICAgICAvLyBhbmQgdGhlIGJ1dHRvbiBlbGVtZW50IGNsaWNrZWQgd2lsbCBubyBsb25nZXIgYmUgY29uc2lkZXJlZCBhcyBhIGNoaWxkIG9mIHRoZSBkYXRlcGlja2VyLlxuICAgICAgICAvLyBidXQgdGhlIGV2ZW50IHRhcmdldCBwYXRoIHdpbGwgc3RpbGwgY29udGFpbiB0aGUgcGFyZW50IGVsZW1lbnRcbiAgICAgICAgLy8gaWYgdGFyZ2V0IGhhcyBkYXRlcGlja2VyIHBhcmVudCwga2VlcCBsaXN0ZW5pbmdcbiAgICAgICAgY29uc3QgZXZlbnRQYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKClcbiAgICAgICAgY29uc3QgaGFzRGF0ZXBpY2tlclBhcmVudCA9ICEhZXZlbnRQYXRoLmZpbmQoXG4gICAgICAgICAgKGUpID0+IGUgPT09IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICApXG4gICAgICAgIGlmIChoYXNEYXRlcGlja2VyUGFyZW50KSByZXR1cm5cbiAgICAgICAgLy8gZWxzZSB0aGUgY2xpY2sgaXMgY29uc2lkZXJlZCB0byBiZSBvdXRzaWRlLCBjbG9zZSBkYXRlcGlja2VyXG4gICAgICAgIHJldHVybiB0aGlzLnNldFNob3duKGZhbHNlKVxuICAgICAgfSxcbiAgICB9KVxuICB9XG59XG4iLCI8IS0tIExBQkVMIC0tPlxuPG5nLWNvbnRhaW5lciAqdHJhbnNsb2NvPVwibGV0IHQ7IHJlYWQ6IHNjb3BlXCI+XG4gIDxsYWJlbFxuICAgIFtpZF09XCJpZCArICctbGFiZWwnXCJcbiAgICBjbGFzcz1cImdkcy1maWVsZC1sYWJlbCBoaWRlLWlmLWVtcHR5XCJcbiAgICBbYXR0ci5mb3JdPVwiaWQgKyAnLWlucHV0J1wiXG4gID5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGFiZWxDb250ZW50VHBsIHx8IGJhc2ljTGFiZWxDb250ZW50VHBsXCJcbiAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2Jhc2ljTGFiZWxDb250ZW50VHBsPlxuICAgICAgPCEtLSB0byB0cmlnZ2VyIGNzczplbXB0eSBpZiBubyBsYWJlbCB3YXMgYWRkZWQgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGFiZWxcIj5cbiAgICAgICAge3sgbGFiZWwgfX1cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cIm9wdGlvbmFsID09PSB0cnVlIHx8IChyZXF1aXJlZCAhPT0gdHJ1ZSAmJiBvcHRpb25hbCAhPT0gZmFsc2UpXCJcbiAgICAgICAgICBjbGFzcz1cImdkcy1maWVsZC1sYWJlbC0tb3B0aW9uYWxcIlxuICAgICAgICA+XG4gICAgICAgICAgKHt7IHQoJ2xhYmVsLm9wdGlvbmFsJykgfX0pXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbGFiZWw+XG5cbiAgPCEtLSBERVNDUklQVElPTiAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZ2RzLWZpZWxkLWxhYmVsLS1zbWFsbCBkZXNjcmlwdGlvbiBoaWRlLWlmLWVtcHR5XCJcbiAgICAqbmdJZj1cImRlc2NyaXB0aW9uXCJcbiAgPlxuICAgIHt7IGRlc2NyaXB0aW9uIH19XG4gIDwvZGl2PlxuXG4gIDwhLS0gTE9DS0VEIElOUFVUIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9ja2VkXCI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBsb2NrZWRUcGwgfHwgZGVmYXVsdExvY2tlZFRwbDtcbiAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHN0YXRlIH1cbiAgICAgIFwiXG4gICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TG9ja2VkVHBsPlxuICAgICAgPGRpdlxuICAgICAgICBbaWRdPVwiaWQgKyAnLWlucHV0J1wiXG4gICAgICAgIGNsYXNzPVwibmdndi1maWVsZC0tbG9ja2VkXCJcbiAgICAgICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICAgICAgW2F0dHIudmFsdWVdPVwic3RhdGVcIlxuICAgICAgICBbYXR0ci5yb2xlXT1cInJvbGVcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFzdGF0ZVwiIGNsYXNzPVwidW5zZXQtc3RhdGVcIj4tPC9zcGFuPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RhdGVcIj5cbiAgICAgICAgICB7eyBzdGF0ZSB8IG5nZ3ZJbnB1dE1hc2tGb3JtYXQ6IGRhdGVJbnB1dE1hc2sgfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIElOUFVUIFdSQVBQRVIgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9ja2VkXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmaWVsZC13cmFwXCJcbiAgICAgIFtjbGFzcy5uZ2d2LWZpZWxkLS1lcnJvcl09XCJpbnZhbGlkXCJcbiAgICAgICpuZ0lmPVwic2hvd0lucHV0JCB8IGFzeW5jXCJcbiAgICA+XG4gICAgICA8IS0tIElOUFVUIEZJRUxEIC0tPlxuICAgICAgPGlucHV0XG4gICAgICAgICNpbnB1dFxuICAgICAgICBbaWRdPVwiaWQgKyAnLWlucHV0J1wiXG4gICAgICAgIGNsYXNzPVwibmdndi1maWVsZC1kYXRlXCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgICBbYXR0ci5yZXF1aXJlZF09XCJyZXF1aXJlZCB8fCBudWxsXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgW2F0dHIucm9sZV09XCJyb2xlXCJcbiAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgW25nZ3ZJbnB1dE1hc2tdPVwiZGF0ZUlucHV0TWFza1wiXG4gICAgICAgIFt2YWx1ZV09XCJzdGF0ZVwiXG4gICAgICAgIHRpdGxlPVwiXCJcbiAgICAgICAgKGNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudC50YXJnZXQpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgIC8+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYXJpYS1sYWJlbD1cInRvZ2dsZSBjYWxlbmRhclwiXG4gICAgICAgICN0b2dnbGVDYWxlbmRhckJ1dHRvblxuICAgICAgICBjbGFzcz1cIm5nZ3YtYnV0dG9uLWRhdGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgZGF0YS10aG9vaz1cInRvZ2dsZS1jYWxlbmRhci1idXR0b25cIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGF0ZXBpY2tlcigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgID5cbiAgICAgICAgQGlmIChzaXplID09PSAnc21hbGwnKSB7XG4gICAgICAgICAgPGdkcy1pY29uLWNhbGVuZGFyICpuZ2dDb3JlRWxlbWVudCBzaXplPVwiMTZweFwiPjwvZ2RzLWljb24tY2FsZW5kYXI+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHNpemUgPT09ICdsYXJnZScpIHtcbiAgICAgICAgICA8Z2RzLWljb24tY2FsZW5kYXIgKm5nZ0NvcmVFbGVtZW50IHNpemU9XCIyMHB4XCI+PC9nZHMtaWNvbi1jYWxlbmRhcj5cbiAgICAgICAgfVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIERBVEVQSUNLRVIgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm5nZ3YtZGF0ZXBpY2tlclwiICpuZ0lmPVwic2hvd25cIj5cbiAgICAgIDxuZ2d2LWRhdGVwaWNrZXJcbiAgICAgICAgI2lucHV0XG4gICAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgICBbZGlzYWJsZURhdGVzXT1cImRpc2FibGVEYXRlc1wiXG4gICAgICAgIFtkaXNhYmxlV2Vla0RheXNdPVwiZGlzYWJsZVdlZWtEYXlzXCJcbiAgICAgICAgW3NlbGVjdGVkXT1cInN0YXRlXCJcbiAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICBbbWluQ2FsZW5kYXJSb3dzXT1cIm1pblJvd3NcIlxuICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwiZmlyc3REYXlPZldlZWtcIlxuICAgICAgICBbZmlyc3RWYWxpZF09XCJmaXJzdFZhbGlkXCJcbiAgICAgICAgW2xhc3RWYWxpZF09XCJsYXN0VmFsaWRcIlxuICAgICAgICBbY2xvc2luZ1RpbWVdPVwiY2xvc2luZ1RpbWVcIlxuICAgICAgICBbZHluYW1pY1Bvc2l0aW9uXT1cImR5bmFtaWNQb3NpdGlvblwiXG4gICAgICAgIFtzaXplXT1cInNpemVcIlxuICAgICAgICAobmd2RGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvbmdndi1kYXRlcGlja2VyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFUlJPUlMgLS0+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgaW52YWxpZCAmJlxuICAgICAgICAoZXJyb3IgfHwgbmdDb250cm9sPy5pbnZhbGlkKSAmJlxuICAgICAgICAoIWVycm9yTGlzdCB8fCAhZXJyb3JMaXN0Lmxlbmd0aClcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiZ2RzLWZpZWxkLW5vdGljZSBnZHMtZmllbGQtbm90aWNlLS1lcnJvclwiXG4gICAgICAgIFthdHRyLmZvcl09XCJpZCArICctaW5wdXQnXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvci1pdGVtXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvci1pdGVtLS1pY29uXCI+XG4gICAgICAgICAgICA8Z2RzLWljb24tdHJpYW5nbGUtZXhjbGFtYXRpb25cbiAgICAgICAgICAgICAgKm5nZ0NvcmVFbGVtZW50XG4gICAgICAgICAgICAgIFtzb2xpZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgc2l6ZT1cIjE2cHhcIlxuICAgICAgICAgICAgPjwvZ2RzLWljb24tdHJpYW5nbGUtZXhjbGFtYXRpb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cImVycm9yOyBlbHNlIGVycm9yc1JlZlwiXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLWl0ZW0tLXRleHRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctZXJyb3JsYWJlbCdcIlxuICAgICAgICAgICAgPnt7IGVycm9yIH19PC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZXJyb3JzUmVmPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCJmaXJzdEVycm9yIGFzIGVycm9yXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1pdGVtLS10ZXh0XCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctZXJyb3JsYWJlbCdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyB0KCdlcnJvci5maWVsZCcgKyBlcnJvcj8uY29kZSwgZXJyb3I/LnBhcmFtcykgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVycm9yIG9mIGVycm9yTGlzdCA/PyBbXVwiPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiZ2RzLWZpZWxkLW5vdGljZSBnZHMtZmllbGQtbm90aWNlLS1lcnJvclwiXG4gICAgICAgIFthdHRyLmZvcl09XCJpZCArICctaW5wdXQnXCJcbiAgICAgICAgKm5nSWY9XCJpbnZhbGlkICYmIGVycm9yXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvci1pdGVtXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvci1pdGVtLS1pY29uXCI+XG4gICAgICAgICAgICA8Z2RzLWljb24tdHJpYW5nbGUtZXhjbGFtYXRpb25cbiAgICAgICAgICAgICAgKm5nZ0NvcmVFbGVtZW50XG4gICAgICAgICAgICAgIFtzb2xpZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgc2l6ZT1cIjE2cHhcIlxuICAgICAgICAgICAgPjwvZ2RzLWljb24tdHJpYW5nbGUtZXhjbGFtYXRpb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLWl0ZW0tLXRleHRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctZXJyb3JsYWJlbCdcIlxuICAgICAgICAgICAgPnt7IGVycm9yIH19PC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { WeekDay } from '@angular/common';
|
|
2
|
-
import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
+
import { Component, ElementRef, EventEmitter, HostBinding, Input, Output, Renderer2, ViewChild, } from '@angular/core';
|
|
3
3
|
import { CalendarMonth } from '../../datepicker.models';
|
|
4
4
|
import { getSortedWeekDays, isValid } from '../../datepicker.utils';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
@@ -7,7 +7,15 @@ import * as i1 from "@angular/common";
|
|
|
7
7
|
import * as i2 from "../calendar/calendar.component";
|
|
8
8
|
import * as i3 from "../calendar-control/calendar-control.component";
|
|
9
9
|
export class DatepickerComponent {
|
|
10
|
-
|
|
10
|
+
get positionAttr() {
|
|
11
|
+
return this.datepickerPosition;
|
|
12
|
+
}
|
|
13
|
+
get sizeAttr() {
|
|
14
|
+
return this.size;
|
|
15
|
+
}
|
|
16
|
+
constructor(elementRef, renderer) {
|
|
17
|
+
this.elementRef = elementRef;
|
|
18
|
+
this.renderer = renderer;
|
|
11
19
|
this.calendarTemplate = null;
|
|
12
20
|
/** Emits a Date upon selection. */
|
|
13
21
|
this.ngvDateChange = new EventEmitter();
|
|
@@ -23,11 +31,20 @@ export class DatepickerComponent {
|
|
|
23
31
|
this.locale = 'en-US';
|
|
24
32
|
/** Set type of calendar. */
|
|
25
33
|
this.type = 'normal';
|
|
34
|
+
/**
|
|
35
|
+
* When true, the datepicker will automatically choose to open above or below the input
|
|
36
|
+
* based on available space in the viewport, and will scale its height to fit if needed.
|
|
37
|
+
*/
|
|
38
|
+
this.dynamicPosition = false;
|
|
39
|
+
/** Needed to determent where to place datepicker if dropdownPosition === 'top' */
|
|
40
|
+
this.size = 'large';
|
|
26
41
|
/** @internal */
|
|
27
42
|
/** @internal */
|
|
28
43
|
this.weekdayArray = [];
|
|
29
44
|
/** @internal */
|
|
30
45
|
this.disabledDatesForActiveMonth = [];
|
|
46
|
+
// Indicates whether the datepicker should be displayed below ('bottom') or above ('top') the input, based on available space.
|
|
47
|
+
this.datepickerPosition = 'bottom';
|
|
31
48
|
this.subs = [];
|
|
32
49
|
}
|
|
33
50
|
ngOnChanges(changes) {
|
|
@@ -50,6 +67,8 @@ export class DatepickerComponent {
|
|
|
50
67
|
? new Date(this.selected)
|
|
51
68
|
: new Date();
|
|
52
69
|
this.activeCalendar = new CalendarMonth(initDate);
|
|
70
|
+
if (this.dynamicPosition)
|
|
71
|
+
this.setDropdownPosition();
|
|
53
72
|
}
|
|
54
73
|
ngOnDestroy() {
|
|
55
74
|
this.subs.forEach((sub) => sub.unsubscribe());
|
|
@@ -100,13 +119,41 @@ export class DatepickerComponent {
|
|
|
100
119
|
this.selected = date;
|
|
101
120
|
this.changeActiveCalendar(new CalendarMonth(date));
|
|
102
121
|
}
|
|
103
|
-
|
|
104
|
-
|
|
122
|
+
setDropdownPosition() {
|
|
123
|
+
const datePicker = this.elementRef.nativeElement;
|
|
124
|
+
const parent = datePicker.parentElement;
|
|
125
|
+
const rect = parent.getBoundingClientRect();
|
|
126
|
+
const viewportHeight = window.innerHeight;
|
|
127
|
+
const spaceBelow = viewportHeight - rect.bottom;
|
|
128
|
+
const spaceAbove = rect.top;
|
|
129
|
+
const MARGIN = 10;
|
|
130
|
+
const DATEPICKER_HEIGHT = 362; // 6 ROWS OF DATES, TO BE SURE
|
|
131
|
+
let maxDatepickerHeight;
|
|
132
|
+
if (spaceBelow >= DATEPICKER_HEIGHT) {
|
|
133
|
+
this.datepickerPosition = 'bottom';
|
|
134
|
+
maxDatepickerHeight = DATEPICKER_HEIGHT;
|
|
135
|
+
}
|
|
136
|
+
else if (spaceAbove >= DATEPICKER_HEIGHT) {
|
|
137
|
+
this.datepickerPosition = 'top';
|
|
138
|
+
maxDatepickerHeight = DATEPICKER_HEIGHT;
|
|
139
|
+
}
|
|
140
|
+
else if (spaceBelow > spaceAbove) {
|
|
141
|
+
this.datepickerPosition = 'bottom';
|
|
142
|
+
maxDatepickerHeight = Math.max(spaceBelow - MARGIN, DATEPICKER_HEIGHT); // 10px margin, height 362px
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
this.datepickerPosition = 'top';
|
|
146
|
+
maxDatepickerHeight = Math.max(spaceAbove - MARGIN, DATEPICKER_HEIGHT); // 10px margin, height 362px
|
|
147
|
+
}
|
|
148
|
+
this.renderer.setStyle(datePicker, 'max-height', `${maxDatepickerHeight}px`);
|
|
149
|
+
}
|
|
150
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
151
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatepickerComponent, selector: "nggv-datepicker", inputs: { firstDayOfWeek: "firstDayOfWeek", disableDates: "disableDates", disableWeekDays: "disableWeekDays", minCalendarRows: "minCalendarRows", selected: "selected", locale: "locale", type: "type", firstValid: "firstValid", lastValid: "lastValid", closingTime: "closingTime", dynamicPosition: "dynamicPosition", size: "size" }, outputs: { ngvDateChange: "ngvDateChange" }, host: { properties: { "attr.data-position": "this.positionAttr", "attr.data-size": "this.sizeAttr" } }, viewQueries: [{ propertyName: "calendarTemplate", first: true, predicate: ["calendarTemplate"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- control for changing displayed calendar -->\n<nggv-calendar-control\n [activeCalendar]=\"activeCalendar\"\n [locale]=\"locale\"\n [type]=\"type\"\n (calendarChange)=\"changeActiveCalendar($event)\"\n>\n</nggv-calendar-control>\n\n<!-- label row for week -->\n<div class=\"nggv-weekday-row\">\n <span *ngFor=\"let weekday of weekdayArray\">{{\n weekday | date: 'EEE' : undefined : locale\n }}</span>\n</div>\n\n<!-- outlet for active calendar -->\n<div class=\"nggv-calendar-view-container\">\n <ng-container\n *ngTemplateOutlet=\"\n calendarTemplate;\n context: {\n calendar: activeCalendar,\n disableDates: disabledDatesForActiveMonth,\n }\n \"\n >\n </ng-container>\n</div>\n\n<div *ngIf=\"type === 'extended'\" class=\"gds-datepicker__controls\">\n <ng-content></ng-content>\n</div>\n\n<ng-template\n #calendarTemplate\n let-calendar=\"calendar\"\n let-disableDates=\"disableDates\"\n>\n <nggv-calendar\n [year]=\"calendar.year\"\n [month]=\"calendar.month\"\n [type]=\"type\"\n [locale]=\"locale\"\n [disableDates]=\"disableDates\"\n [selected]=\"selected\"\n [lastValid]=\"lastValid\"\n [firstValid]=\"firstValid\"\n [closingTime]=\"closingTime\"\n [disableWeekDays]=\"disableWeekDays\"\n [minCalendarRows]=\"minCalendarRows\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n (dateClick)=\"dateClickHandler($event)\"\n >\n </nggv-calendar>\n</ng-template>\n", styles: [":host{border-radius:4px;border:1px solid #868686;overflow:hidden;z-index:1000;background-color:#fff;position:absolute;display:block;box-shadow:0 0 12px #0000001a}:host .nggv-calendar-view-container{border-top:1px solid #f8f8f8;border-bottom:1px solid #f8f8f8;padding:.125em;width:auto}:host .nggv-weekday-row{display:flex;font-family:SEBSansSerif,Arial,sans-serif;font-size:.875rem}:host .nggv-weekday-row:first-child{font-size:.7em;line-height:2.5rem}:host .nggv-weekday-row button,:host .nggv-weekday-row span{padding:0;display:block;flex-grow:1;text-align:center;width:20%;color:#333}:host .nggv-weekday-row button:disabled,:host .nggv-weekday-row span:disabled{border-radius:0;border:0px solid transparent}:host .nggv-extended-controls{display:flex;padding:.5rem}:host[data-position=top]{top:auto;bottom:100%}:host[data-position=top][data-size=large]{transform:translateY(calc(-.5rem - 45px))}:host[data-position=top][data-size=small]{transform:translateY(calc(-.5rem - 35px))}:host[data-position=bottom]{bottom:0;transform:translateY(100%)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.CalendarComponent, selector: "nggv-calendar", inputs: ["year", "month", "selected", "locale", "minCalendarRows", "firstDayOfWeek", "type", "disableDates", "disableWeekDays", "firstValid", "lastValid", "closingTime"], outputs: ["dateClick"] }, { kind: "component", type: i3.CalendarControlComponent, selector: "nggv-calendar-control", inputs: ["activeCalendar", "locale", "type"], outputs: ["calendarChange"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] }); }
|
|
105
152
|
}
|
|
106
153
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerComponent, decorators: [{
|
|
107
154
|
type: Component,
|
|
108
|
-
args: [{ selector: 'nggv-datepicker', template: "<!-- control for changing displayed calendar -->\n<nggv-calendar-control\n [activeCalendar]=\"activeCalendar\"\n [locale]=\"locale\"\n [type]=\"type\"\n (calendarChange)=\"changeActiveCalendar($event)\"\n>\n</nggv-calendar-control>\n\n<!-- label row for week -->\n<div class=\"nggv-weekday-row\">\n <span *ngFor=\"let weekday of weekdayArray\">{{\n weekday | date: 'EEE' : undefined : locale\n }}</span>\n</div>\n\n<!-- outlet for active calendar -->\n<div class=\"nggv-calendar-view-container\">\n <ng-container\n *ngTemplateOutlet=\"\n calendarTemplate;\n context: {\n calendar: activeCalendar,\n disableDates: disabledDatesForActiveMonth,\n }\n \"\n >\n </ng-container>\n</div>\n\n<div *ngIf=\"type === 'extended'\" class=\"gds-datepicker__controls\">\n <ng-content></ng-content>\n</div>\n\n<ng-template\n #calendarTemplate\n let-calendar=\"calendar\"\n let-disableDates=\"disableDates\"\n>\n <nggv-calendar\n [year]=\"calendar.year\"\n [month]=\"calendar.month\"\n [type]=\"type\"\n [locale]=\"locale\"\n [disableDates]=\"disableDates\"\n [selected]=\"selected\"\n [lastValid]=\"lastValid\"\n [firstValid]=\"firstValid\"\n [closingTime]=\"closingTime\"\n [disableWeekDays]=\"disableWeekDays\"\n [minCalendarRows]=\"minCalendarRows\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n (dateClick)=\"dateClickHandler($event)\"\n >\n </nggv-calendar>\n</ng-template>\n", styles: [":host{border-radius:4px;border:1px solid #868686;overflow:hidden;z-index:1000;background-color:#fff;position:absolute;display:block;box-shadow:0 0 12px #0000001a}:host .nggv-calendar-view-container{border-top:1px solid #f8f8f8;border-bottom:1px solid #f8f8f8;padding:.125em;width:auto}:host .nggv-weekday-row{display:flex;font-family:SEBSansSerif,Arial,sans-serif;font-size:.875rem}:host .nggv-weekday-row:first-child{font-size:.7em;line-height:2.5rem}:host .nggv-weekday-row button,:host .nggv-weekday-row span{padding:0;display:block;flex-grow:1;text-align:center;width:20%;color:#333}:host .nggv-weekday-row button:disabled,:host .nggv-weekday-row span:disabled{border-radius:0;border:0px solid transparent}:host .nggv-extended-controls{display:flex;padding:.5rem}\n"] }]
|
|
109
|
-
}], propDecorators: { calendarTemplate: [{
|
|
155
|
+
args: [{ selector: 'nggv-datepicker', template: "<!-- control for changing displayed calendar -->\n<nggv-calendar-control\n [activeCalendar]=\"activeCalendar\"\n [locale]=\"locale\"\n [type]=\"type\"\n (calendarChange)=\"changeActiveCalendar($event)\"\n>\n</nggv-calendar-control>\n\n<!-- label row for week -->\n<div class=\"nggv-weekday-row\">\n <span *ngFor=\"let weekday of weekdayArray\">{{\n weekday | date: 'EEE' : undefined : locale\n }}</span>\n</div>\n\n<!-- outlet for active calendar -->\n<div class=\"nggv-calendar-view-container\">\n <ng-container\n *ngTemplateOutlet=\"\n calendarTemplate;\n context: {\n calendar: activeCalendar,\n disableDates: disabledDatesForActiveMonth,\n }\n \"\n >\n </ng-container>\n</div>\n\n<div *ngIf=\"type === 'extended'\" class=\"gds-datepicker__controls\">\n <ng-content></ng-content>\n</div>\n\n<ng-template\n #calendarTemplate\n let-calendar=\"calendar\"\n let-disableDates=\"disableDates\"\n>\n <nggv-calendar\n [year]=\"calendar.year\"\n [month]=\"calendar.month\"\n [type]=\"type\"\n [locale]=\"locale\"\n [disableDates]=\"disableDates\"\n [selected]=\"selected\"\n [lastValid]=\"lastValid\"\n [firstValid]=\"firstValid\"\n [closingTime]=\"closingTime\"\n [disableWeekDays]=\"disableWeekDays\"\n [minCalendarRows]=\"minCalendarRows\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n (dateClick)=\"dateClickHandler($event)\"\n >\n </nggv-calendar>\n</ng-template>\n", styles: [":host{border-radius:4px;border:1px solid #868686;overflow:hidden;z-index:1000;background-color:#fff;position:absolute;display:block;box-shadow:0 0 12px #0000001a}:host .nggv-calendar-view-container{border-top:1px solid #f8f8f8;border-bottom:1px solid #f8f8f8;padding:.125em;width:auto}:host .nggv-weekday-row{display:flex;font-family:SEBSansSerif,Arial,sans-serif;font-size:.875rem}:host .nggv-weekday-row:first-child{font-size:.7em;line-height:2.5rem}:host .nggv-weekday-row button,:host .nggv-weekday-row span{padding:0;display:block;flex-grow:1;text-align:center;width:20%;color:#333}:host .nggv-weekday-row button:disabled,:host .nggv-weekday-row span:disabled{border-radius:0;border:0px solid transparent}:host .nggv-extended-controls{display:flex;padding:.5rem}:host[data-position=top]{top:auto;bottom:100%}:host[data-position=top][data-size=large]{transform:translateY(calc(-.5rem - 45px))}:host[data-position=top][data-size=small]{transform:translateY(calc(-.5rem - 35px))}:host[data-position=bottom]{bottom:0;transform:translateY(100%)}\n"] }]
|
|
156
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { calendarTemplate: [{
|
|
110
157
|
type: ViewChild,
|
|
111
158
|
args: ['calendarTemplate']
|
|
112
159
|
}], ngvDateChange: [{
|
|
@@ -131,5 +178,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
131
178
|
type: Input
|
|
132
179
|
}], closingTime: [{
|
|
133
180
|
type: Input
|
|
181
|
+
}], dynamicPosition: [{
|
|
182
|
+
type: Input
|
|
183
|
+
}], size: [{
|
|
184
|
+
type: Input
|
|
185
|
+
}], positionAttr: [{
|
|
186
|
+
type: HostBinding,
|
|
187
|
+
args: ['attr.data-position']
|
|
188
|
+
}], sizeAttr: [{
|
|
189
|
+
type: HostBinding,
|
|
190
|
+
args: ['attr.data-size']
|
|
134
191
|
}] } });
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9kYXRlcGlja2VyL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2RhdGVwaWNrZXIvY29tcG9uZW50cy9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3pDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBR04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBR3RCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7Ozs7O0FBU25FLE1BQU0sT0FBTyxtQkFBbUI7SUFMaEM7UUFNaUMscUJBQWdCLEdBQzdDLElBQUksQ0FBQTtRQUVOLG1DQUFtQztRQUN6QixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUE7UUFFbEQsOERBQThEO1FBQ3JELG1CQUFjLEdBQVksT0FBTyxDQUFDLE1BQU0sQ0FBQTtRQUNqRCxxQkFBcUI7UUFDWixpQkFBWSxHQUFzQixFQUFFLENBQUE7UUFDN0Msa0NBQWtDO1FBQ3pCLG9CQUFlLEdBQWMsRUFBRSxDQUFBO1FBQ3hDLDZDQUE2QztRQUNwQyxvQkFBZSxHQUFHLENBQUMsQ0FBQTtRQUc1QixrQ0FBa0M7UUFDekIsV0FBTSxHQUF1QixPQUFPLENBQUE7UUFDN0MsNEJBQTRCO1FBQ25CLFNBQUksR0FBaUIsUUFBUSxDQUFB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J1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuXG5pbXBvcnQgeyBDYWxlbmRhck1vbnRoIH0gZnJvbSAnLi4vLi4vZGF0ZXBpY2tlci5tb2RlbHMnXG5pbXBvcnQgeyBnZXRTb3J0ZWRXZWVrRGF5cywgaXNWYWxpZCB9IGZyb20gJy4uLy4uL2RhdGVwaWNrZXIudXRpbHMnXG5cbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJUeXBlIH0gZnJvbSAnLi4vLi4vZGF0ZXBpY2tlci5tb2RlbHMnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nZ3YtZGF0ZXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyVGVtcGxhdGUnKSBjYWxlbmRhclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9XG4gICAgbnVsbFxuXG4gIC8qKiBFbWl0cyBhIERhdGUgdXBvbiBzZWxlY3Rpb24uICovXG4gIEBPdXRwdXQoKSBuZ3ZEYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpXG5cbiAgLyoqIFNldHMgZmlyc3QgZGF5IG9mIHdlZWsgaW4gY2FsZW5kYXIuIERlZmF1bHRzIHRvIE1vbmRheS4gKi9cbiAgQElucHV0KCkgZmlyc3REYXlPZldlZWs6IFdlZWtEYXkgPSBXZWVrRGF5Lk1vbmRheVxuICAvKiogQmFuayBob2xpZGF5cy4gKi9cbiAgQElucHV0KCkgZGlzYWJsZURhdGVzOiAoc3RyaW5nIHwgRGF0ZSlbXSA9IFtdXG4gIC8qKiBPdGhlciBub24gc2VsZWN0YWJsZSBkYXRlcy4gKi9cbiAgQElucHV0KCkgZGlzYWJsZVdlZWtEYXlzOiBXZWVrRGF5W10gPSBbXVxuICAvKiogTWluaW11bSBudW1iZXIgb2YgY2FsZW5kYXIgcm93cyBzaG93bi4gKi9cbiAgQElucHV0KCkgbWluQ2FsZW5kYXJSb3dzID0gNVxuICAvKiogSW5pdGlhbCBkYXRlIHNldCBhcyBzZWxlY3RlZC4gKi9cbiAgQElucHV0KCkgc2VsZWN0ZWQ6IERhdGUgfCB1bmRlZmluZWRcbiAgLyoqIFNldCBsb2NhbGUgZm9yIGRhdGUgZm9ybWF0LiAqL1xuICBASW5wdXQoKSBsb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICdlbi1VUydcbiAgLyoqIFNldCB0eXBlIG9mIGNhbGVuZGFyLiAqL1xuICBASW5wdXQoKSB0eXBlOiBDYWxlbmRhclR5cGUgPSAnbm9ybWFsJ1xuICAvKiogU2V0cyBhIGZyb20gZGF0ZSBvZiB3aGljaCBhbGwgZGF0ZXMgYmVmb3JlIHdpbGwgYmUgaW52YWxpZC4gKi9cbiAgQElucHV0KCkgZmlyc3RWYWxpZDogRGF0ZSB8IHVuZGVmaW5lZFxuICAvKiogU2V0cyBhIHRvIGRhdGUgb2Ygd2hpY2ggYWxsIGRhdGVzIGFmdGVyIHdpbGwgYmUgaW52YWxpZC4gKi9cbiAgQElucHV0KCkgbGFzdFZhbGlkOiBEYXRlIHwgdW5kZWZpbmVkXG4gIC8qKiBTZXRzIGEgY2xvc2luZyB0aW1lIGZvciB0b2RheSB0byB0b2dnbGUgYXZhaWxhYmlsaXR5IGZvciB0b2RheSdzIGRhdGUuICovXG4gIEBJbnB1dCgpIGNsb3NpbmdUaW1lOiBEYXRlIHwgdW5kZWZpbmVkXG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBhY3RpdmVDYWxlbmRhciE6IENhbGVuZGFyTW9udGggLyogID0gbmV3IENhbGVuZGFyTW9udGgobmV3IERhdGUoKSkgKi9cbiAgLyoqIEBpbnRlcm5hbCAqL1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgd2Vla2RheUFycmF5OiBEYXRlW10gPSBbXVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgZGlzYWJsZWREYXRlc0ZvckFjdGl2ZU1vbnRoOiBEYXRlW10gPSBbXVxuXG4gIHByaXZhdGUgc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzLnNlbGVjdGVkICYmXG4gICAgICAhIWNoYW5nZXMuc2VsZWN0ZWQuY3VycmVudFZhbHVlICYmXG4gICAgICAhY2hhbmdlcy5zZWxlY3RlZC5pc0ZpcnN0Q2hhbmdlKClcbiAgICApIHtcbiAgICAgIC8vIHNldCBhY3RpdmUgY2FsZW5kYXIgdG8gbWF0Y2ggc2VsZWN0ZWQgZGF0ZVxuICAgICAgY29uc3QgYWN0aXZlQ2FsZW5kYXIgPSBuZXcgQ2FsZW5kYXJNb250aChcbiAgICAgICAgbmV3IERhdGUoY2hhbmdlcy5zZWxlY3RlZC5jdXJyZW50VmFsdWUpLFxuICAgICAgKVxuICAgICAgdGhpcy5jaGFuZ2VBY3RpdmVDYWxlbmRhcihhY3RpdmVDYWxlbmRhcilcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5kaXNhYmxlRGF0ZXMgJiYgIWNoYW5nZXMuZGlzYWJsZURhdGVzLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgdGhpcy5kaXNhYmxlZERhdGVzRm9yQWN0aXZlTW9udGggPSB0aGlzLmdldERpc2FibGVkRGF0ZXNGb3IoXG4gICAgICAgIHRoaXMuYWN0aXZlQ2FsZW5kYXIsXG4gICAgICAgIGNoYW5nZXMuZGlzYWJsZURhdGVzLmN1cnJlbnRWYWx1ZSB8fCBbXSxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBpbml0aWF0ZSB3ZWVrIGxhYmVsIHJvd1xuICAgIHRoaXMud2Vla2RheUFycmF5ID0gZ2V0U29ydGVkV2Vla0RheXModGhpcy5maXJzdERheU9mV2VlaylcblxuICAgIC8vIGluaXRpYXRlIGNhbGVuZGFyXG4gICAgY29uc3QgaW5pdERhdGUgPVxuICAgICAgISF0aGlzLnNlbGVjdGVkICYmIGlzVmFsaWQodGhpcy5zZWxlY3RlZClcbiAgICAgICAgPyBuZXcgRGF0ZSh0aGlzLnNlbGVjdGVkKVxuICAgICAgICA6IG5ldyBEYXRlKClcbiAgICB0aGlzLmFjdGl2ZUNhbGVuZGFyID0gbmV3IENhbGVuZGFyTW9udGgoaW5pdERhdGUpXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogVXBkYXRlIGxvY2FsIGNhbGVuZGFyIHZhcmlhYmxlIGFuZCBjaGFuZ2VzIGRpc3BsYXllZCBjYWxlbmRhci5cbiAgICovXG4gIGNoYW5nZUFjdGl2ZUNhbGVuZGFyKGNhbGVuZGFyOiBDYWxlbmRhck1vbnRoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVDYWxlbmRhciA9IGNhbGVuZGFyXG4gICAgdGhpcy5kaXNhYmxlZERhdGVzRm9yQWN0aXZlTW9udGggPSB0aGlzLmdldERpc2FibGVkRGF0ZXNGb3IoXG4gICAgICBjYWxlbmRhcixcbiAgICAgIHRoaXMuZGlzYWJsZURhdGVzLFxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogUmV0dXJucyBhIHN1YnNldCBvZiBhbGwgZGlzYWJsZWQgZGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBtb250aCBjdXJyZW50IG1vbnRoIHRvIGZpbHRlciBmcm9tXG4gICAqIEBwYXJhbSBkaXNhYmxlRGF0ZXMgbWFzdGVyIGxpc3Qgb2YgYWxsIGRpc2FibGVkIGRhdGVzXG4gICAqIEByZXR1cm5zIGEgc3Vic2V0IHdpdGggY3VycmVudCBhbmQgYWRqYWNlbnQgbW9udGhzIGRpc2FibGVkIGRhdGVzXG4gICAqL1xuICBnZXREaXNhYmxlZERhdGVzRm9yKFxuICAgIGNhbGVuZGFyOiBDYWxlbmRhck1vbnRoLFxuICAgIGRpc2FibGVEYXRlcz86IChzdHJpbmcgfCBEYXRlKVtdLFxuICApOiBEYXRlW10ge1xuICAgIGlmICghZGlzYWJsZURhdGVzKSBkaXNhYmxlRGF0ZXMgPSBbXVxuICAgIC8vIHNldHMgbW9udGggdG8gdGFyZ2V0IG1vbnRoXG4gICAgY29uc3QgdGFyZ2V0TW9udGggPSBjYWxlbmRhci5kYXRlXG5cbiAgICAvLyBnZXRzIHByZXZpb3VzIG1vbnRoIGZyb20gdGFyZ2V0IG1vbnRoXG4gICAgY29uc3QgcHJldmlvdXNNb250aCA9IGNhbGVuZGFyLnByZXZpb3VzTW9udGgoKS5kYXRlXG5cbiAgICAvLyBnZXRzIG5leHQgbW9udGggZnJvbSB0YXJnZXQgbW9udGhcbiAgICBjb25zdCBuZXh0TW9udGggPSBjYWxlbmRhci5uZXh0TW9udGgoKS5kYXRlXG5cbiAgICAvLyBjaGVja3MgaWYgdHdvIGRhdGVzIGFyZSB3aXRoaW4gdGhlIHNhbWUgeWVhciBhbmQgbW9udGhcbiAgICBjb25zdCB3aXRoaW5TYW1lTW9udGggPSAoYTogRGF0ZSwgYjogRGF0ZSk6IGJvb2xlYW4gPT5cbiAgICAgIGEuZ2V0TW9udGgoKSA9PT0gYi5nZXRNb250aCgpICYmIGEuZ2V0RnVsbFllYXIoKSA9PT0gYi5nZXRGdWxsWWVhcigpXG5cbiAgICAvLyBmaWx0ZXIgb3V0IGRpc2FibGVkIGRhdGVzIGZvciBjdXJyZW50IGFuZCBhZGphY2VudCBtb250aHNcbiAgICByZXR1cm4gZGlzYWJsZURhdGVzXG4gICAgICAubWFwKChkOiBEYXRlIHwgc3RyaW5nKSA9PiBuZXcgRGF0ZShkKSlcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChkOiBEYXRlKSA9PlxuICAgICAgICAgIHdpdGhpblNhbWVNb250aChkLCBwcmV2aW91c01vbnRoKSB8fFxuICAgICAgICAgIHdpdGhpblNhbWVNb250aChkLCB0YXJnZXRNb250aCkgfHxcbiAgICAgICAgICB3aXRoaW5TYW1lTW9udGgoZCwgbmV4dE1vbnRoKSxcbiAgICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGRhdGUtY2xpY2tzIGZyb20gY2FsZW5kYXIgY29tcG9lbnRuLiBFbWl0cyBldmVudCBvciBjaGFuZ2VzIGNhbGVuZGFyLlxuICAgKiBAcGFyYW0gZGF0ZSBkYXRlIGNsaWNrZWQgaW4gY2FsZW5kYXJcbiAgICovXG4gIGRhdGVDbGlja0hhbmRsZXIoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIC8vIGlmIGEgZGF0ZSBpcyBjbGlja2VkIHdpdGhpbiB0aGUgYWN0aXZlIG1vbnRoLCBlbWl0IGRhdGVcbiAgICBpZiAoZGF0ZS5nZXRNb250aCgpID09PSB0aGlzLmFjdGl2ZUNhbGVuZGFyLm1vbnRoKVxuICAgICAgcmV0dXJuIHRoaXMubmd2RGF0ZUNoYW5nZS5lbWl0KGRhdGUpXG4gICAgLy8gZWxzZSwgY2hhbmdlIGFjdGl2ZSBjYWxlbmRhciB0byBtYXRjaCB0aGUgZGF0ZSBjbGlja2VkXG4gICAgdGhpcy5zZWxlY3RlZCA9IGRhdGVcbiAgICB0aGlzLmNoYW5nZUFjdGl2ZUNhbGVuZGFyKG5ldyBDYWxlbmRhck1vbnRoKGRhdGUpKVxuICB9XG59XG4iLCI8IS0tIGNvbnRyb2wgZm9yIGNoYW5naW5nIGRpc3BsYXllZCBjYWxlbmRhciAtLT5cbjxuZ2d2LWNhbGVuZGFyLWNvbnRyb2xcbiAgW2FjdGl2ZUNhbGVuZGFyXT1cImFjdGl2ZUNhbGVuZGFyXCJcbiAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICBbdHlwZV09XCJ0eXBlXCJcbiAgKGNhbGVuZGFyQ2hhbmdlKT1cImNoYW5nZUFjdGl2ZUNhbGVuZGFyKCRldmVudClcIlxuPlxuPC9uZ2d2LWNhbGVuZGFyLWNvbnRyb2w+XG5cbjwhLS0gbGFiZWwgcm93IGZvciB3ZWVrIC0tPlxuPGRpdiBjbGFzcz1cIm5nZ3Ytd2Vla2RheS1yb3dcIj5cbiAgPHNwYW4gKm5nRm9yPVwibGV0IHdlZWtkYXkgb2Ygd2Vla2RheUFycmF5XCI+e3tcbiAgICB3ZWVrZGF5IHwgZGF0ZTogJ0VFRScgOiB1bmRlZmluZWQgOiBsb2NhbGVcbiAgfX08L3NwYW4+XG48L2Rpdj5cblxuPCEtLSBvdXRsZXQgZm9yIGFjdGl2ZSBjYWxlbmRhciAtLT5cbjxkaXYgY2xhc3M9XCJuZ2d2LWNhbGVuZGFyLXZpZXctY29udGFpbmVyXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgY2FsZW5kYXJUZW1wbGF0ZTtcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgY2FsZW5kYXI6IGFjdGl2ZUNhbGVuZGFyLFxuICAgICAgICBkaXNhYmxlRGF0ZXM6IGRpc2FibGVkRGF0ZXNGb3JBY3RpdmVNb250aCxcbiAgICAgIH1cbiAgICBcIlxuICA+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJ0eXBlID09PSAnZXh0ZW5kZWQnXCIgY2xhc3M9XCJnZHMtZGF0ZXBpY2tlcl9fY29udHJvbHNcIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZVxuICAjY2FsZW5kYXJUZW1wbGF0ZVxuICBsZXQtY2FsZW5kYXI9XCJjYWxlbmRhclwiXG4gIGxldC1kaXNhYmxlRGF0ZXM9XCJkaXNhYmxlRGF0ZXNcIlxuPlxuICA8bmdndi1jYWxlbmRhclxuICAgIFt5ZWFyXT1cImNhbGVuZGFyLnllYXJcIlxuICAgIFttb250aF09XCJjYWxlbmRhci5tb250aFwiXG4gICAgW3R5cGVdPVwidHlwZVwiXG4gICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgIFtkaXNhYmxlRGF0ZXNdPVwiZGlzYWJsZURhdGVzXCJcbiAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICAgIFtsYXN0VmFsaWRdPVwibGFzdFZhbGlkXCJcbiAgICBbZmlyc3RWYWxpZF09XCJmaXJzdFZhbGlkXCJcbiAgICBbY2xvc2luZ1RpbWVdPVwiY2xvc2luZ1RpbWVcIlxuICAgIFtkaXNhYmxlV2Vla0RheXNdPVwiZGlzYWJsZVdlZWtEYXlzXCJcbiAgICBbbWluQ2FsZW5kYXJSb3dzXT1cIm1pbkNhbGVuZGFyUm93c1wiXG4gICAgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrXCJcbiAgICAoZGF0ZUNsaWNrKT1cImRhdGVDbGlja0hhbmRsZXIoJGV2ZW50KVwiXG4gID5cbiAgPC9uZ2d2LWNhbGVuZGFyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9kYXRlcGlja2VyL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2RhdGVwaWNrZXIvY29tcG9uZW50cy9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3pDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUlMLE1BQU0sRUFDTixTQUFTLEVBR1QsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBR3RCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7Ozs7O0FBU25FLE1BQU0sT0FBTyxtQkFBbUI7SUFtQzlCLElBQXVDLFlBQVk7UUFDakQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUE7SUFDaEMsQ0FBQztJQUVELElBQW1DLFFBQVE7UUFDekMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO0lBQ2xCLENBQUM7SUFpQkQsWUFDVSxVQUFzQixFQUN0QixRQUFtQjtRQURuQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUEzREUscUJBQWdCLEdBQzdDLElBQUksQ0FBQTtRQUVOLG1DQUFtQztRQUN6QixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUE7UUFFbEQsOERBQThEO1FBQ3JELG1CQUFj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Q0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxtQkFBbUIsSUFBSSxDQUFDLENBQUE7SUFDOUUsQ0FBQzsrR0FqTVUsbUJBQW1CO21HQUFuQixtQkFBbUIsaXFCQzVCaEMsNjZDQXdEQTs7NEZENUJhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7dUdBS0ksZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFJbkIsYUFBYTtzQkFBdEIsTUFBTTtnQkFHRSxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFaUMsWUFBWTtzQkFBbEQsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBSUUsUUFBUTtzQkFBMUMsV0FBVzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXZWVrRGF5IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuXG5pbXBvcnQgeyBDYWxlbmRhck1vbnRoIH0gZnJvbSAnLi4vLi4vZGF0ZXBpY2tlci5tb2RlbHMnXG5pbXBvcnQgeyBnZXRTb3J0ZWRXZWVrRGF5cywgaXNWYWxpZCB9IGZyb20gJy4uLy4uL2RhdGVwaWNrZXIudXRpbHMnXG5cbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJUeXBlIH0gZnJvbSAnLi4vLi4vZGF0ZXBpY2tlci5tb2RlbHMnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nZ3YtZGF0ZXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyVGVtcGxhdGUnKSBjYWxlbmRhclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9XG4gICAgbnVsbFxuXG4gIC8qKiBFbWl0cyBhIERhdGUgdXBvbiBzZWxlY3Rpb24uICovXG4gIEBPdXRwdXQoKSBuZ3ZEYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpXG5cbiAgLyoqIFNldHMgZmlyc3QgZGF5IG9mIHdlZWsgaW4gY2FsZW5kYXIuIERlZmF1bHRzIHRvIE1vbmRheS4gKi9cbiAgQElucHV0KCkgZmlyc3REYXlPZldlZWs6IFdlZWtEYXkgPSBXZWVrRGF5Lk1vbmRheVxuICAvKiogQmFuayBob2xpZGF5cy4gKi9cbiAgQElucHV0KCkgZGlzYWJsZURhdGVzOiAoc3RyaW5nIHwgRGF0ZSlbXSA9IFtdXG4gIC8qKiBPdGhlciBub24gc2VsZWN0YWJsZSBkYXRlcy4gKi9cbiAgQElucHV0KCkgZGlzYWJsZVdlZWtEYXlzOiBXZWVrRGF5W10gPSBbXVxuICAvKiogTWluaW11bSBudW1iZXIgb2YgY2FsZW5kYXIgcm93cyBzaG93bi4gKi9cbiAgQElucHV0KCkgbWluQ2FsZW5kYXJSb3dzID0gNVxuICAvKiogSW5pdGlhbCBkYXRlIHNldCBhcyBzZWxlY3RlZC4gKi9cbiAgQElucHV0KCkgc2VsZWN0ZWQ6IERhdGUgfCB1bmRlZmluZWRcbiAgLyoqIFNldCBsb2NhbGUgZm9yIGRhdGUgZm9ybWF0LiAqL1xuICBASW5wdXQoKSBsb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICdlbi1VUydcbiAgLyoqIFNldCB0eXBlIG9mIGNhbGVuZGFyLiAqL1xuICBASW5wdXQoKSB0eXBlOiBDYWxlbmRhclR5cGUgPSAnbm9ybWFsJ1xuICAvKiogU2V0cyBhIGZyb20gZGF0ZSBvZiB3aGljaCBhbGwgZGF0ZXMgYmVmb3JlIHdpbGwgYmUgaW52YWxpZC4gKi9cbiAgQElucHV0KCkgZmlyc3RWYWxpZDogRGF0ZSB8IHVuZGVmaW5lZFxuICAvKiogU2V0cyBhIHRvIGRhdGUgb2Ygd2hpY2ggYWxsIGRhdGVzIGFmdGVyIHdpbGwgYmUgaW52YWxpZC4gKi9cbiAgQElucHV0KCkgbGFzdFZhbGlkOiBEYXRlIHwgdW5kZWZpbmVkXG4gIC8qKiBTZXRzIGEgY2xvc2luZyB0aW1lIGZvciB0b2RheSB0byB0b2dnbGUgYXZhaWxhYmlsaXR5IGZvciB0b2RheSdzIGRhdGUuICovXG4gIEBJbnB1dCgpIGNsb3NpbmdUaW1lOiBEYXRlIHwgdW5kZWZpbmVkXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBkYXRlcGlja2VyIHdpbGwgYXV0b21hdGljYWxseSBjaG9vc2UgdG8gb3BlbiBhYm92ZSBvciBiZWxvdyB0aGUgaW5wdXRcbiAgICogYmFzZWQgb24gYXZhaWxhYmxlIHNwYWNlIGluIHRoZSB2aWV3cG9ydCwgYW5kIHdpbGwgc2NhbGUgaXRzIGhlaWdodCB0byBmaXQgaWYgbmVlZGVkLlxuICAgKi9cbiAgQElucHV0KCkgZHluYW1pY1Bvc2l0aW9uID0gZmFsc2VcbiAgLyoqIE5lZWRlZCB0byBkZXRlcm1lbnQgd2hlcmUgdG8gcGxhY2UgZGF0ZXBpY2tlciBpZiBkcm9wZG93blBvc2l0aW9uID09PSAndG9wJyAqL1xuICBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ2xhcmdlJyA9ICdsYXJnZSdcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1wb3NpdGlvbicpIGdldCBwb3NpdGlvbkF0dHIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZXBpY2tlclBvc2l0aW9uXG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1zaXplJykgZ2V0IHNpemVBdHRyKCkge1xuICAgIHJldHVybiB0aGlzLnNpemVcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgYWN0aXZlQ2FsZW5kYXIhOiBDYWxlbmRhck1vbnRoIC8qICA9IG5ldyBDYWxlbmRhck1vbnRoKG5ldyBEYXRlKCkpICovXG4gIC8qKiBAaW50ZXJuYWwgKi9cblxuICAvKiogQGludGVybmFsICovXG4gIHdlZWtkYXlBcnJheTogRGF0ZVtdID0gW11cblxuICAvKiogQGludGVybmFsICovXG4gIGRpc2FibGVkRGF0ZXNGb3JBY3RpdmVNb250aDogRGF0ZVtdID0gW11cblxuICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZGF0ZXBpY2tlciBzaG91bGQgYmUgZGlzcGxheWVkIGJlbG93ICgnYm90dG9tJykgb3IgYWJvdmUgKCd0b3AnKSB0aGUgaW5wdXQsIGJhc2VkIG9uIGF2YWlsYWJsZSBzcGFjZS5cbiAgZGF0ZXBpY2tlclBvc2l0aW9uOiAnYm90dG9tJyB8ICd0b3AnID0gJ2JvdHRvbSdcblxuICBwcml2YXRlIHN1YnM6IFN1YnNjcmlwdGlvbltdID0gW11cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIGNoYW5nZXMuc2VsZWN0ZWQgJiZcbiAgICAgICEhY2hhbmdlcy5zZWxlY3RlZC5jdXJyZW50VmFsdWUgJiZcbiAgICAgICFjaGFuZ2VzLnNlbGVjdGVkLmlzRmlyc3RDaGFuZ2UoKVxuICAgICkge1xuICAgICAgLy8gc2V0IGFjdGl2ZSBjYWxlbmRhciB0byBtYXRjaCBzZWxlY3RlZCBkYXRlXG4gICAgICBjb25zdCBhY3RpdmVDYWxlbmRhciA9IG5ldyBDYWxlbmRhck1vbnRoKFxuICAgICAgICBuZXcgRGF0ZShjaGFuZ2VzLnNlbGVjdGVkLmN1cnJlbnRWYWx1ZSksXG4gICAgICApXG4gICAgICB0aGlzLmNoYW5nZUFjdGl2ZUNhbGVuZGFyKGFjdGl2ZUNhbGVuZGFyKVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLmRpc2FibGVEYXRlcyAmJiAhY2hhbmdlcy5kaXNhYmxlRGF0ZXMuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICB0aGlzLmRpc2FibGVkRGF0ZXNGb3JBY3RpdmVNb250aCA9IHRoaXMuZ2V0RGlzYWJsZWREYXRlc0ZvcihcbiAgICAgICAgdGhpcy5hY3RpdmVDYWxlbmRhcixcbiAgICAgICAgY2hhbmdlcy5kaXNhYmxlRGF0ZXMuY3VycmVudFZhbHVlIHx8IFtdLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIGluaXRpYXRlIHdlZWsgbGFiZWwgcm93XG4gICAgdGhpcy53ZWVrZGF5QXJyYXkgPSBnZXRTb3J0ZWRXZWVrRGF5cyh0aGlzLmZpcnN0RGF5T2ZXZWVrKVxuXG4gICAgLy8gaW5pdGlhdGUgY2FsZW5kYXJcbiAgICBjb25zdCBpbml0RGF0ZSA9XG4gICAgICAhIXRoaXMuc2VsZWN0ZWQgJiYgaXNWYWxpZCh0aGlzLnNlbGVjdGVkKVxuICAgICAgICA/IG5ldyBEYXRlKHRoaXMuc2VsZWN0ZWQpXG4gICAgICAgIDogbmV3IERhdGUoKVxuICAgIHRoaXMuYWN0aXZlQ2FsZW5kYXIgPSBuZXcgQ2FsZW5kYXJNb250aChpbml0RGF0ZSlcblxuICAgIGlmICh0aGlzLmR5bmFtaWNQb3NpdGlvbikgdGhpcy5zZXREcm9wZG93blBvc2l0aW9uKClcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vicy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBVcGRhdGUgbG9jYWwgY2FsZW5kYXIgdmFyaWFibGUgYW5kIGNoYW5nZXMgZGlzcGxheWVkIGNhbGVuZGFyLlxuICAgKi9cbiAgY2hhbmdlQWN0aXZlQ2FsZW5kYXIoY2FsZW5kYXI6IENhbGVuZGFyTW9udGgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUNhbGVuZGFyID0gY2FsZW5kYXJcbiAgICB0aGlzLmRpc2FibGVkRGF0ZXNGb3JBY3RpdmVNb250aCA9IHRoaXMuZ2V0RGlzYWJsZWREYXRlc0ZvcihcbiAgICAgIGNhbGVuZGFyLFxuICAgICAgdGhpcy5kaXNhYmxlRGF0ZXMsXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBSZXR1cm5zIGEgc3Vic2V0IG9mIGFsbCBkaXNhYmxlZCBkYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIG1vbnRoIGN1cnJlbnQgbW9udGggdG8gZmlsdGVyIGZyb21cbiAgICogQHBhcmFtIGRpc2FibGVEYXRlcyBtYXN0ZXIgbGlzdCBvZiBhbGwgZGlzYWJsZWQgZGF0ZXNcbiAgICogQHJldHVybnMgYSBzdWJzZXQgd2l0aCBjdXJyZW50IGFuZCBhZGphY2VudCBtb250aHMgZGlzYWJsZWQgZGF0ZXNcbiAgICovXG4gIGdldERpc2FibGVkRGF0ZXNGb3IoXG4gICAgY2FsZW5kYXI6IENhbGVuZGFyTW9udGgsXG4gICAgZGlzYWJsZURhdGVzPzogKHN0cmluZyB8IERhdGUpW10sXG4gICk6IERhdGVbXSB7XG4gICAgaWYgKCFkaXNhYmxlRGF0ZXMpIGRpc2FibGVEYXRlcyA9IFtdXG4gICAgLy8gc2V0cyBtb250aCB0byB0YXJnZXQgbW9udGhcbiAgICBjb25zdCB0YXJnZXRNb250aCA9IGNhbGVuZGFyLmRhdGVcblxuICAgIC8vIGdldHMgcHJldmlvdXMgbW9udGggZnJvbSB0YXJnZXQgbW9udGhcbiAgICBjb25zdCBwcmV2aW91c01vbnRoID0gY2FsZW5kYXIucHJldmlvdXNNb250aCgpLmRhdGVcblxuICAgIC8vIGdldHMgbmV4dCBtb250aCBmcm9tIHRhcmdldCBtb250aFxuICAgIGNvbnN0IG5leHRNb250aCA9IGNhbGVuZGFyLm5leHRNb250aCgpLmRhdGVcblxuICAgIC8vIGNoZWNrcyBpZiB0d28gZGF0ZXMgYXJlIHdpdGhpbiB0aGUgc2FtZSB5ZWFyIGFuZCBtb250aFxuICAgIGNvbnN0IHdpdGhpblNhbWVNb250aCA9IChhOiBEYXRlLCBiOiBEYXRlKTogYm9vbGVhbiA9PlxuICAgICAgYS5nZXRNb250aCgpID09PSBiLmdldE1vbnRoKCkgJiYgYS5nZXRGdWxsWWVhcigpID09PSBiLmdldEZ1bGxZZWFyKClcblxuICAgIC8vIGZpbHRlciBvdXQgZGlzYWJsZWQgZGF0ZXMgZm9yIGN1cnJlbnQgYW5kIGFkamFjZW50IG1vbnRoc1xuICAgIHJldHVybiBkaXNhYmxlRGF0ZXNcbiAgICAgIC5tYXAoKGQ6IERhdGUgfCBzdHJpbmcpID0+IG5ldyBEYXRlKGQpKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGQ6IERhdGUpID0+XG4gICAgICAgICAgd2l0aGluU2FtZU1vbnRoKGQsIHByZXZpb3VzTW9udGgpIHx8XG4gICAgICAgICAgd2l0aGluU2FtZU1vbnRoKGQsIHRhcmdldE1vbnRoKSB8fFxuICAgICAgICAgIHdpdGhpblNhbWVNb250aChkLCBuZXh0TW9udGgpLFxuICAgICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZGF0ZS1jbGlja3MgZnJvbSBjYWxlbmRhciBjb21wb2VudG4uIEVtaXRzIGV2ZW50IG9yIGNoYW5nZXMgY2FsZW5kYXIuXG4gICAqIEBwYXJhbSBkYXRlIGRhdGUgY2xpY2tlZCBpbiBjYWxlbmRhclxuICAgKi9cbiAgZGF0ZUNsaWNrSGFuZGxlcihkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgLy8gaWYgYSBkYXRlIGlzIGNsaWNrZWQgd2l0aGluIHRoZSBhY3RpdmUgbW9udGgsIGVtaXQgZGF0ZVxuICAgIGlmIChkYXRlLmdldE1vbnRoKCkgPT09IHRoaXMuYWN0aXZlQ2FsZW5kYXIubW9udGgpXG4gICAgICByZXR1cm4gdGhpcy5uZ3ZEYXRlQ2hhbmdlLmVtaXQoZGF0ZSlcbiAgICAvLyBlbHNlLCBjaGFuZ2UgYWN0aXZlIGNhbGVuZGFyIHRvIG1hdGNoIHRoZSBkYXRlIGNsaWNrZWRcbiAgICB0aGlzLnNlbGVjdGVkID0gZGF0ZVxuICAgIHRoaXMuY2hhbmdlQWN0aXZlQ2FsZW5kYXIobmV3IENhbGVuZGFyTW9udGgoZGF0ZSkpXG4gIH1cblxuICBzZXREcm9wZG93blBvc2l0aW9uKCkge1xuICAgIGNvbnN0IGRhdGVQaWNrZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgIGNvbnN0IHBhcmVudCA9IGRhdGVQaWNrZXIucGFyZW50RWxlbWVudFxuXG4gICAgY29uc3QgcmVjdCA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXG4gICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICBjb25zdCBzcGFjZUJlbG93ID0gdmlld3BvcnRIZWlnaHQgLSByZWN0LmJvdHRvbVxuICAgIGNvbnN0IHNwYWNlQWJvdmUgPSByZWN0LnRvcFxuXG4gICAgY29uc3QgTUFSR0lOID0gMTBcbiAgICBjb25zdCBEQVRFUElDS0VSX0hFSUdIVCA9IDM2MiAvLyA2IFJPV1MgT0YgREFURVMsIFRPIEJFIFNVUkVcbiAgICBsZXQgbWF4RGF0ZXBpY2tlckhlaWdodDogbnVtYmVyXG5cbiAgICBpZiAoc3BhY2VCZWxvdyA+PSBEQVRFUElDS0VSX0hFSUdIVCkge1xuICAgICAgdGhpcy5kYXRlcGlja2VyUG9zaXRpb24gPSAnYm90dG9tJ1xuICAgICAgbWF4RGF0ZXBpY2tlckhlaWdodCA9IERBVEVQSUNLRVJfSEVJR0hUXG4gICAgfSBlbHNlIGlmIChzcGFjZUFib3ZlID49IERBVEVQSUNLRVJfSEVJR0hUKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJQb3NpdGlvbiA9ICd0b3AnXG4gICAgICBtYXhEYXRlcGlja2VySGVpZ2h0ID0gREFURVBJQ0tFUl9IRUlHSFRcbiAgICB9IGVsc2UgaWYgKHNwYWNlQmVsb3cgPiBzcGFjZUFib3ZlKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJQb3NpdGlvbiA9ICdib3R0b20nXG4gICAgICBtYXhEYXRlcGlja2VySGVpZ2h0ID0gTWF0aC5tYXgoc3BhY2VCZWxvdyAtIE1BUkdJTiwgREFURVBJQ0tFUl9IRUlHSFQpIC8vIDEwcHggbWFyZ2luLCBoZWlnaHQgMzYycHhcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRlcGlja2VyUG9zaXRpb24gPSAndG9wJ1xuICAgICAgbWF4RGF0ZXBpY2tlckhlaWdodCA9IE1hdGgubWF4KHNwYWNlQWJvdmUgLSBNQVJHSU4sIERBVEVQSUNLRVJfSEVJR0hUKSAvLyAxMHB4IG1hcmdpbiwgaGVpZ2h0IDM2MnB4XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkYXRlUGlja2VyLCAnbWF4LWhlaWdodCcsIGAke21heERhdGVwaWNrZXJIZWlnaHR9cHhgKVxuICB9XG59XG4iLCI8IS0tIGNvbnRyb2wgZm9yIGNoYW5naW5nIGRpc3BsYXllZCBjYWxlbmRhciAtLT5cbjxuZ2d2LWNhbGVuZGFyLWNvbnRyb2xcbiAgW2FjdGl2ZUNhbGVuZGFyXT1cImFjdGl2ZUNhbGVuZGFyXCJcbiAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICBbdHlwZV09XCJ0eXBlXCJcbiAgKGNhbGVuZGFyQ2hhbmdlKT1cImNoYW5nZUFjdGl2ZUNhbGVuZGFyKCRldmVudClcIlxuPlxuPC9uZ2d2LWNhbGVuZGFyLWNvbnRyb2w+XG5cbjwhLS0gbGFiZWwgcm93IGZvciB3ZWVrIC0tPlxuPGRpdiBjbGFzcz1cIm5nZ3Ytd2Vla2RheS1yb3dcIj5cbiAgPHNwYW4gKm5nRm9yPVwibGV0IHdlZWtkYXkgb2Ygd2Vla2RheUFycmF5XCI+e3tcbiAgICB3ZWVrZGF5IHwgZGF0ZTogJ0VFRScgOiB1bmRlZmluZWQgOiBsb2NhbGVcbiAgfX08L3NwYW4+XG48L2Rpdj5cblxuPCEtLSBvdXRsZXQgZm9yIGFjdGl2ZSBjYWxlbmRhciAtLT5cbjxkaXYgY2xhc3M9XCJuZ2d2LWNhbGVuZGFyLXZpZXctY29udGFpbmVyXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgY2FsZW5kYXJUZW1wbGF0ZTtcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgY2FsZW5kYXI6IGFjdGl2ZUNhbGVuZGFyLFxuICAgICAgICBkaXNhYmxlRGF0ZXM6IGRpc2FibGVkRGF0ZXNGb3JBY3RpdmVNb250aCxcbiAgICAgIH1cbiAgICBcIlxuICA+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJ0eXBlID09PSAnZXh0ZW5kZWQnXCIgY2xhc3M9XCJnZHMtZGF0ZXBpY2tlcl9fY29udHJvbHNcIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZVxuICAjY2FsZW5kYXJUZW1wbGF0ZVxuICBsZXQtY2FsZW5kYXI9XCJjYWxlbmRhclwiXG4gIGxldC1kaXNhYmxlRGF0ZXM9XCJkaXNhYmxlRGF0ZXNcIlxuPlxuICA8bmdndi1jYWxlbmRhclxuICAgIFt5ZWFyXT1cImNhbGVuZGFyLnllYXJcIlxuICAgIFttb250aF09XCJjYWxlbmRhci5tb250aFwiXG4gICAgW3R5cGVdPVwidHlwZVwiXG4gICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgIFtkaXNhYmxlRGF0ZXNdPVwiZGlzYWJsZURhdGVzXCJcbiAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICAgIFtsYXN0VmFsaWRdPVwibGFzdFZhbGlkXCJcbiAgICBbZmlyc3RWYWxpZF09XCJmaXJzdFZhbGlkXCJcbiAgICBbY2xvc2luZ1RpbWVdPVwiY2xvc2luZ1RpbWVcIlxuICAgIFtkaXNhYmxlV2Vla0RheXNdPVwiZGlzYWJsZVdlZWtEYXlzXCJcbiAgICBbbWluQ2FsZW5kYXJSb3dzXT1cIm1pbkNhbGVuZGFyUm93c1wiXG4gICAgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrXCJcbiAgICAoZGF0ZUNsaWNrKT1cImRhdGVDbGlja0hhbmRsZXIoJGV2ZW50KVwiXG4gID5cbiAgPC9uZ2d2LWNhbGVuZGFyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|