UNPKG

carbon-components-angular

Version:
295 lines 22.8 kB
import { Component, Input, Output, EventEmitter, TemplateRef, ViewChild } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "carbon-components-angular/icon"; export class DatePickerInput { constructor(elementRef) { this.elementRef = elementRef; /** * Select a calendar type for the `model`. * Internal purposes only. */ this.type = "simple"; this.id = `datepicker-${DatePickerInput.datePickerCount++}`; this.hasIcon = false; this.placeholder = "mm/dd/yyyy"; this.pattern = "^\\d{1,2}/\\d{1,2}/\\d{4}$"; this.valueChange = new EventEmitter(); /** * @deprecated since v5 - Use `cdsLayer` directive instead * Set to `"light"` to apply the light style */ this.theme = "dark"; this.disabled = false; this.readonly = false; /** * Set to `true` for invalid state. */ this.invalid = false; /** * Set to `true` to show a warning (contents set by warnText) */ this.warn = false; this.skeleton = false; this.value = ""; this.size = "md"; this.onTouched = () => { }; this.propagateChange = (_) => { }; } onChange(event) { this.value = event.target.value; this.valueChange.emit(this.value); this.propagateChange(this.value); this.onTouched(); } writeValue(value) { this.value = value; } registerOnChange(fn) { this.propagateChange = fn; } registerOnTouched(fn) { this.onTouched = fn; } isTemplate(value) { return value instanceof TemplateRef; } } DatePickerInput.datePickerCount = 0; DatePickerInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DatePickerInput, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); DatePickerInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DatePickerInput, selector: "cds-date-picker-input, ibm-date-picker-input", inputs: { type: "type", id: "id", hasIcon: "hasIcon", label: "label", placeholder: "placeholder", pattern: "pattern", theme: "theme", disabled: "disabled", readonly: "readonly", invalid: "invalid", invalidText: "invalidText", warn: "warn", warnText: "warnText", helperText: "helperText", skeleton: "skeleton", value: "value", size: "size" }, outputs: { valueChange: "valueChange" }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: DatePickerInput, multi: true } ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: ` <div class="cds--form-item"> <div class="cds--date-picker" [ngClass]="{ 'cds--date-picker--simple' : type === 'simple', 'cds--date-picker--single' : type === 'single', 'cds--date-picker--range' : type === 'range', 'cds--date-picker--light' : theme === 'light', 'cds--skeleton' : skeleton }"> <div class="cds--date-picker-container"> <!-- Skeleton structure --> <ng-container *ngIf="skeleton"> <span class="cds--label cds--skeleton"></span> <div class="cds--date-picker__input cds--skeleton"></div> </ng-container> <label *ngIf="label && !skeleton" [for]="id" class="cds--label" [ngClass]="{'cds--label--disabled': disabled}"> <ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container> <ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template> </label> <div class="cds--date-picker-input__wrapper" *ngIf="!skeleton" [ngClass]="{ 'cds--date-picker-input__wrapper--invalid': invalid, 'cds--date-picker-input__wrapper--warn': warn }"> <span> <input #input autocomplete="off" type="text" class="cds--date-picker__input" [ngClass]="{ 'cds--date-picker__input--sm': size === 'sm', 'cds--date-picker__input--md': size === 'md', 'cds--date-picker__input--lg': size === 'lg' }" [attr.data-invalid]="invalid ? true : undefined" [value]="value" [pattern]="pattern" [placeholder]="placeholder" [id]= "id" [disabled]="disabled" [readonly]="readonly" (change)="onChange($event)"/> <svg *ngIf="type !== 'simple' && !warn && !invalid" cdsIcon="calendar" size="16" class="cds--date-picker__icon"> </svg> <svg *ngIf="invalid" class="cds--date-picker__icon cds--date-picker__icon--invalid" cdsIcon="warning--filled" size="16"> </svg> <svg *ngIf="!invalid && warn" cdsIcon="warning--alt--filled" size="16" class="cds--date-picker__icon cds--date-picker__icon--warn"> </svg> </span> </div> <div *ngIf="helperText && !invalid && !warn" class="cds--form__helper-text" [ngClass]="{'cds--form__helper-text--disabled': disabled}"> <ng-container *ngIf="!isTemplate(helperText)">{{helperText}}</ng-container> <ng-template *ngIf="isTemplate(helperText)" [ngTemplateOutlet]="helperText"></ng-template> </div> <div *ngIf="invalid" class="cds--form-requirement"> <ng-container *ngIf="!isTemplate(invalidText)">{{invalidText}}</ng-container> <ng-template *ngIf="isTemplate(invalidText)" [ngTemplateOutlet]="invalidText"></ng-template> </div> <div *ngIf="!invalid && warn" class="cds--form-requirement"> <ng-container *ngIf="!isTemplate(warnText)">{{warnText}}</ng-container> <ng-template *ngIf="isTemplate(warnText)" [ngTemplateOutlet]="warnText"></ng-template> </div> </div> </div> </div> `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DatePickerInput, decorators: [{ type: Component, args: [{ selector: "cds-date-picker-input, ibm-date-picker-input", template: ` <div class="cds--form-item"> <div class="cds--date-picker" [ngClass]="{ 'cds--date-picker--simple' : type === 'simple', 'cds--date-picker--single' : type === 'single', 'cds--date-picker--range' : type === 'range', 'cds--date-picker--light' : theme === 'light', 'cds--skeleton' : skeleton }"> <div class="cds--date-picker-container"> <!-- Skeleton structure --> <ng-container *ngIf="skeleton"> <span class="cds--label cds--skeleton"></span> <div class="cds--date-picker__input cds--skeleton"></div> </ng-container> <label *ngIf="label && !skeleton" [for]="id" class="cds--label" [ngClass]="{'cds--label--disabled': disabled}"> <ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container> <ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template> </label> <div class="cds--date-picker-input__wrapper" *ngIf="!skeleton" [ngClass]="{ 'cds--date-picker-input__wrapper--invalid': invalid, 'cds--date-picker-input__wrapper--warn': warn }"> <span> <input #input autocomplete="off" type="text" class="cds--date-picker__input" [ngClass]="{ 'cds--date-picker__input--sm': size === 'sm', 'cds--date-picker__input--md': size === 'md', 'cds--date-picker__input--lg': size === 'lg' }" [attr.data-invalid]="invalid ? true : undefined" [value]="value" [pattern]="pattern" [placeholder]="placeholder" [id]= "id" [disabled]="disabled" [readonly]="readonly" (change)="onChange($event)"/> <svg *ngIf="type !== 'simple' && !warn && !invalid" cdsIcon="calendar" size="16" class="cds--date-picker__icon"> </svg> <svg *ngIf="invalid" class="cds--date-picker__icon cds--date-picker__icon--invalid" cdsIcon="warning--filled" size="16"> </svg> <svg *ngIf="!invalid && warn" cdsIcon="warning--alt--filled" size="16" class="cds--date-picker__icon cds--date-picker__icon--warn"> </svg> </span> </div> <div *ngIf="helperText && !invalid && !warn" class="cds--form__helper-text" [ngClass]="{'cds--form__helper-text--disabled': disabled}"> <ng-container *ngIf="!isTemplate(helperText)">{{helperText}}</ng-container> <ng-template *ngIf="isTemplate(helperText)" [ngTemplateOutlet]="helperText"></ng-template> </div> <div *ngIf="invalid" class="cds--form-requirement"> <ng-container *ngIf="!isTemplate(invalidText)">{{invalidText}}</ng-container> <ng-template *ngIf="isTemplate(invalidText)" [ngTemplateOutlet]="invalidText"></ng-template> </div> <div *ngIf="!invalid && warn" class="cds--form-requirement"> <ng-container *ngIf="!isTemplate(warnText)">{{warnText}}</ng-container> <ng-template *ngIf="isTemplate(warnText)" [ngTemplateOutlet]="warnText"></ng-template> </div> </div> </div> </div> `, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: DatePickerInput, multi: true } ] }] }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { type: [{ type: Input }], id: [{ type: Input }], hasIcon: [{ type: Input }], label: [{ type: Input }], placeholder: [{ type: Input }], pattern: [{ type: Input }], valueChange: [{ type: Output }], theme: [{ type: Input }], disabled: [{ type: Input }], readonly: [{ type: Input }], invalid: [{ type: Input }], invalidText: [{ type: Input }], warn: [{ type: Input }], warnText: [{ type: Input }], helperText: [{ type: Input }], skeleton: [{ type: Input }], value: [{ type: Input }], size: [{ type: Input }], input: [{ type: ViewChild, args: ["input"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0ZXBpY2tlci1pbnB1dC9kYXRlcGlja2VyLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFvR25ELE1BQU0sT0FBTyxlQUFlO0lBMkQzQixZQUFzQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBekQ1Qzs7O1dBR0c7UUFDTSxTQUFJLEdBQWtDLFFBQVEsQ0FBQztRQUUvQyxPQUFFLEdBQUcsY0FBYyxlQUFlLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztRQUV2RCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBSWhCLGdCQUFXLEdBQUcsWUFBWSxDQUFDO1FBRTNCLFlBQU8sR0FBRyw0QkFBNEIsQ0FBQztRQUV0QyxnQkFBVyxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWpFOzs7V0FHRztRQUNNLFVBQUssR0FBcUIsTUFBTSxDQUFDO1FBRWpDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUMxQjs7V0FFRztRQUNNLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFLekI7O1lBRUk7UUFDSyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBV2IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsU0FBSSxHQUF1QixJQUFJLENBQUM7UUF5QnpDLGNBQVMsR0FBYyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFakMsb0JBQWUsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBdkJjLENBQUM7SUFFakQsUUFBUSxDQUFDLEtBQUs7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFVO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFPO1FBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxFQUFPO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFNTSxVQUFVLENBQUMsS0FBSztRQUN0QixPQUFPLEtBQUssWUFBWSxXQUFXLENBQUM7SUFDckMsQ0FBQzs7QUFyRmMsK0JBQWUsR0FBRyxDQUFFLENBQUE7NEdBRHZCLGVBQWU7Z0dBQWYsZUFBZSxzY0FSaEI7UUFDVjtZQUNDLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLGVBQWU7WUFDNUIsS0FBSyxFQUFFLElBQUk7U0FDWDtLQUNELDBIQTlGUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUZUOzJGQVNXLGVBQWU7a0JBbEczQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSw4Q0FBOEM7b0JBQ3hELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUZUO29CQUNELFNBQVMsRUFBRTt3QkFDVjs0QkFDQyxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLGlCQUFpQjs0QkFDNUIsS0FBSyxFQUFFLElBQUk7eUJBQ1g7cUJBQ0Q7aUJBQ0Q7aUdBT1MsSUFBSTtzQkFBWixLQUFLO2dCQUVHLEVBQUU7c0JBQVYsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUUsS0FBSztzQkFBYixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUcsV0FBVztzQkFBbkIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFYyxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlcixcblx0RWxlbWVudFJlZixcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1kYXRlLXBpY2tlci1pbnB1dCwgaWJtLWRhdGUtcGlja2VyLWlucHV0XCIsXG5cdHRlbXBsYXRlOiBgXG5cdDxkaXYgY2xhc3M9XCJjZHMtLWZvcm0taXRlbVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJjZHMtLWRhdGUtcGlja2VyXCJcblx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXItLXNpbXBsZScgOiB0eXBlID09PSAnc2ltcGxlJyxcblx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXItLXNpbmdsZScgOiB0eXBlID09PSAnc2luZ2xlJyxcblx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXItLXJhbmdlJyA6IHR5cGUgPT09ICdyYW5nZScsXG5cdFx0XHRcdCdjZHMtLWRhdGUtcGlja2VyLS1saWdodCcgOiB0aGVtZSA9PT0gJ2xpZ2h0Jyxcblx0XHRcdFx0J2Nkcy0tc2tlbGV0b24nIDogc2tlbGV0b25cblx0XHRcdH1cIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLWRhdGUtcGlja2VyLWNvbnRhaW5lclwiPlxuXHRcdFx0XHQ8IS0tIFNrZWxldG9uIHN0cnVjdHVyZSAtLT5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uXCI+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLWxhYmVsIGNkcy0tc2tlbGV0b25cIj48L3NwYW4+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXJfX2lucHV0IGNkcy0tc2tlbGV0b25cIj48L2Rpdj5cblx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDxsYWJlbFxuXHRcdFx0XHRcdCpuZ0lmPVwibGFiZWwgJiYgIXNrZWxldG9uXCJcblx0XHRcdFx0XHRbZm9yXT1cImlkXCJcblx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGFiZWxcIlxuXHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1sYWJlbC0tZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUobGFiZWwpXCI+e3tsYWJlbH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShsYWJlbClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdDwvbGFiZWw+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLWRhdGUtcGlja2VyLWlucHV0X193cmFwcGVyXCJcblx0XHRcdFx0XHQqbmdJZj1cIiFza2VsZXRvblwiXG5cdFx0XHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXItaW5wdXRfX3dyYXBwZXItLWludmFsaWQnOiBpbnZhbGlkLFxuXHRcdFx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXItaW5wdXRfX3dyYXBwZXItLXdhcm4nOiB3YXJuXG5cdFx0XHRcdFx0fVwiPlxuXHRcdFx0XHRcdDxzcGFuPlxuXHRcdFx0XHRcdFx0PGlucHV0XG5cdFx0XHRcdFx0XHQjaW5wdXRcblx0XHRcdFx0XHRcdGF1dG9jb21wbGV0ZT1cIm9mZlwiXG5cdFx0XHRcdFx0XHR0eXBlPVwidGV4dFwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXJfX2lucHV0XCJcblx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXJfX2lucHV0LS1zbSc6IHNpemUgPT09ICdzbScsXG5cdFx0XHRcdFx0XHRcdCdjZHMtLWRhdGUtcGlja2VyX19pbnB1dC0tbWQnOiBzaXplID09PSAnbWQnLFxuXHRcdFx0XHRcdFx0XHQnY2RzLS1kYXRlLXBpY2tlcl9faW5wdXQtLWxnJzogc2l6ZSA9PT0gJ2xnJ1xuXHRcdFx0XHRcdFx0fVwiXG5cdFx0XHRcdFx0XHRbYXR0ci5kYXRhLWludmFsaWRdPVwiaW52YWxpZCA/IHRydWUgOiB1bmRlZmluZWRcIlxuXHRcdFx0XHRcdFx0W3ZhbHVlXT1cInZhbHVlXCJcblx0XHRcdFx0XHRcdFtwYXR0ZXJuXT1cInBhdHRlcm5cIlxuXHRcdFx0XHRcdFx0W3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcblx0XHRcdFx0XHRcdFtpZF09IFwiaWRcIlxuXHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cImRpc2FibGVkXCJcblx0XHRcdFx0XHRcdFtyZWFkb25seV09XCJyZWFkb25seVwiXG5cdFx0XHRcdFx0XHRcdChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiLz5cblx0XHRcdFx0XHRcdFx0PHN2Z1xuXHRcdFx0XHRcdFx0XHRcdCpuZ0lmPVwidHlwZSAhPT0gJ3NpbXBsZScgJiYgIXdhcm4gJiYgIWludmFsaWRcIlxuXHRcdFx0XHRcdFx0XHRcdGNkc0ljb249XCJjYWxlbmRhclwiXG5cdFx0XHRcdFx0XHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXJfX2ljb25cIj5cblx0XHRcdFx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cImludmFsaWRcIlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1kYXRlLXBpY2tlcl9faWNvbiBjZHMtLWRhdGUtcGlja2VyX19pY29uLS1pbnZhbGlkXCJcblx0XHRcdFx0XHRcdFx0XHRjZHNJY29uPVwid2FybmluZy0tZmlsbGVkXCJcblx0XHRcdFx0XHRcdFx0XHRzaXplPVwiMTZcIj5cblx0XHRcdFx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cIiFpbnZhbGlkICYmIHdhcm5cIlxuXHRcdFx0XHRcdFx0XHRcdGNkc0ljb249XCJ3YXJuaW5nLS1hbHQtLWZpbGxlZFwiXG5cdFx0XHRcdFx0XHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXJfX2ljb24gY2RzLS1kYXRlLXBpY2tlcl9faWNvbi0td2FyblwiPlxuXHRcdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Km5nSWY9XCJoZWxwZXJUZXh0ICYmICFpbnZhbGlkICYmICF3YXJuXCJcblx0XHRcdFx0XHRjbGFzcz1cImNkcy0tZm9ybV9faGVscGVyLXRleHRcIlxuXHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1mb3JtX19oZWxwZXItdGV4dC0tZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUoaGVscGVyVGV4dClcIj57e2hlbHBlclRleHR9fTwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUoaGVscGVyVGV4dClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWxwZXJUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgKm5nSWY9XCJpbnZhbGlkXCIgY2xhc3M9XCJjZHMtLWZvcm0tcmVxdWlyZW1lbnRcIj5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUoaW52YWxpZFRleHQpXCI+e3tpbnZhbGlkVGV4dH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShpbnZhbGlkVGV4dClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnZhbGlkVGV4dFwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiIWludmFsaWQgJiYgd2FyblwiIGNsYXNzPVwiY2RzLS1mb3JtLXJlcXVpcmVtZW50XCI+XG5cdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKHdhcm5UZXh0KVwiPnt7d2FyblRleHR9fTwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUod2FyblRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwid2FyblRleHRcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuPC9kaXY+XG5cdGAsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IERhdGVQaWNrZXJJbnB1dCxcblx0XHRcdG11bHRpOiB0cnVlXG5cdFx0fVxuXHRdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJJbnB1dCB7XG5cdHByaXZhdGUgc3RhdGljIGRhdGVQaWNrZXJDb3VudCA9IDA7XG5cdC8qKlxuXHQgKiBTZWxlY3QgYSBjYWxlbmRhciB0eXBlIGZvciB0aGUgYG1vZGVsYC5cblx0ICogSW50ZXJuYWwgcHVycG9zZXMgb25seS5cblx0ICovXG5cdEBJbnB1dCgpIHR5cGU6IFwic2ltcGxlXCIgfCBcInNpbmdsZVwiIHwgXCJyYW5nZVwiID0gXCJzaW1wbGVcIjtcblxuXHRASW5wdXQoKSBpZCA9IGBkYXRlcGlja2VyLSR7RGF0ZVBpY2tlcklucHV0LmRhdGVQaWNrZXJDb3VudCsrfWA7XG5cblx0QElucHV0KCkgaGFzSWNvbiA9IGZhbHNlO1xuXG5cdEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cdEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gXCJtbS9kZC95eXl5XCI7XG5cblx0QElucHV0KCkgcGF0dGVybiA9IFwiXlxcXFxkezEsMn0vXFxcXGR7MSwyfS9cXFxcZHs0fSRcIjtcblxuXHRAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2NSAtIFVzZSBgY2RzTGF5ZXJgIGRpcmVjdGl2ZSBpbnN0ZWFkXG5cdCAqIFNldCB0byBgXCJsaWdodFwiYCB0byBhcHBseSB0aGUgbGlnaHQgc3R5bGVcblx0ICovXG5cdEBJbnB1dCgpIHRoZW1lOiBcImxpZ2h0XCIgfCBcImRhcmtcIiA9IFwiZGFya1wiO1xuXG5cdEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cblx0QElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgZm9yIGludmFsaWQgc3RhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSBpbnZhbGlkID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBWYWx1ZSBkaXNwbGF5ZWQgaWYgZHJvcGRvd24gaXMgaW4gaW52YWxpZCBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIGludmFsaWRUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICAqIFNldCB0byBgdHJ1ZWAgdG8gc2hvdyBhIHdhcm5pbmcgKGNvbnRlbnRzIHNldCBieSB3YXJuVGV4dClcblx0ICAqL1xuXHRASW5wdXQoKSB3YXJuID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB3YXJuaW5nIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIHdhcm5UZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBvcHRpb25hbCBoZWxwZXIgdGV4dC5cblx0ICovXG5cdEBJbnB1dCgpIGhlbHBlclRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cblx0QElucHV0KCkgc2tlbGV0b24gPSBmYWxzZTtcblxuXHRASW5wdXQoKSB2YWx1ZSA9IFwiXCI7XG5cblx0QElucHV0KCkgc2l6ZTogXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiID0gXCJtZFwiO1xuXG5cdEBWaWV3Q2hpbGQoXCJpbnB1dFwiKSBpbnB1dDogRWxlbWVudFJlZjtcblxuXHRjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XG5cblx0b25DaGFuZ2UoZXZlbnQpIHtcblx0XHR0aGlzLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXHRcdHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcblx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcblx0XHR0aGlzLm9uVG91Y2hlZCgpO1xuXHR9XG5cblx0cHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuXHRcdHRoaXMudmFsdWUgPSB2YWx1ZTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcblx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcblx0XHR0aGlzLm9uVG91Y2hlZCA9IGZuO1xuXHR9XG5cblx0b25Ub3VjaGVkOiAoKSA9PiBhbnkgPSAoKSA9PiB7IH07XG5cblx0cHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xuXG5cdHB1YmxpYyBpc1RlbXBsYXRlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG5cdH1cbn1cbiJdfQ==