@pepperi/ngx-lib
Version:
Pepperi Angular Components and Services
253 lines (252 loc) • 29.4 kB
JavaScript
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
import { LAYOUT_TYPE } from '@pepperi/ngx-lib';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "@angular/common";
import * as i3 from "@pepperi/ngx-lib/field-title";
import * as i4 from "@angular/cdk/bidi";
import * as i5 from "@pepperi/ngx-lib/textbox";
import * as i6 from "@pepperi/ngx-lib/select";
function PepperiAddressComponent_ng_container_1_div_3_pep_textbox_1_Template(rf, ctx) { if (rf & 1) {
const _r9 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "pep-textbox", 8);
i0.ɵɵlistener("valueChanged", function PepperiAddressComponent_ng_container_1_div_3_pep_textbox_1_Template_pep_textbox_valueChanged_0_listener($event) { i0.ɵɵrestoreView(_r9); const groupField_r4 = i0.ɵɵnextContext().$implicit; const ctx_r8 = i0.ɵɵnextContext(2); return ctx_r8.onValueChange($event, groupField_r4.key); });
i0.ɵɵelementEnd();
} if (rf & 2) {
const groupField_r4 = i0.ɵɵnextContext().$implicit;
const ctx_r6 = i0.ɵɵnextContext(2);
i0.ɵɵpropertyInterpolate("title", groupField_r4.formattedValue);
i0.ɵɵproperty("layoutType", ctx_r6.layoutType)("form", ctx_r6.form)("key", groupField_r4.key)("value", groupField_r4.value)("formattedValue", groupField_r4.formattedValue)("label", groupField_r4.label)("placeholder", groupField_r4.placeholder)("type", groupField_r4.type)("required", groupField_r4.required)("disabled", groupField_r4.disabled)("readonly", groupField_r4.readonly)("xAlignment", groupField_r4.xAlignment)("rowSpan", groupField_r4.rowSpan)("parentFieldKey", ctx_r6.key);
} }
function PepperiAddressComponent_ng_container_1_div_3_pep_select_2_Template(rf, ctx) { if (rf & 1) {
const _r13 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "pep-select", 9);
i0.ɵɵlistener("valueChanged", function PepperiAddressComponent_ng_container_1_div_3_pep_select_2_Template_pep_select_valueChanged_0_listener($event) { i0.ɵɵrestoreView(_r13); const groupField_r4 = i0.ɵɵnextContext().$implicit; const ctx_r12 = i0.ɵɵnextContext(2); return ctx_r12.onValueChange($event, groupField_r4.key); });
i0.ɵɵelementEnd();
} if (rf & 2) {
const groupField_r4 = i0.ɵɵnextContext().$implicit;
const ctx_r7 = i0.ɵɵnextContext(2);
i0.ɵɵpropertyInterpolate("title", groupField_r4.formattedValue);
i0.ɵɵproperty("layoutType", ctx_r7.layoutType)("form", ctx_r7.form)("key", groupField_r4.key)("value", groupField_r4.value)("formattedValue", groupField_r4.formattedValue)("label", groupField_r4.label)("type", groupField_r4.type)("required", groupField_r4.required)("disabled", groupField_r4.disabled)("readonly", groupField_r4.readonly)("xAlignment", groupField_r4.xAlignment)("rowSpan", groupField_r4.rowSpan)("options", groupField_r4.options)("parentFieldKey", ctx_r7.key);
} }
function PepperiAddressComponent_ng_container_1_div_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 5);
i0.ɵɵtemplate(1, PepperiAddressComponent_ng_container_1_div_3_pep_textbox_1_Template, 1, 15, "pep-textbox", 6);
i0.ɵɵtemplate(2, PepperiAddressComponent_ng_container_1_div_3_pep_select_2_Template, 1, 15, "pep-select", 7);
i0.ɵɵelementEnd();
} if (rf & 2) {
const groupField_r4 = ctx.$implicit;
i0.ɵɵclassMapInterpolate1("pepperi-address-field columns-", groupField_r4.colSpan, "");
i0.ɵɵproperty("ngSwitch", groupField_r4.controlType);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngSwitchCase", "textbox");
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngSwitchCase", "select");
} }
function PepperiAddressComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelement(1, "pep-field-title", 2);
i0.ɵɵelementStart(2, "div", 3);
i0.ɵɵtemplate(3, PepperiAddressComponent_ng_container_1_div_3_Template, 3, 6, "div", 4);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵproperty("label", ctx_r0.label)("required", ctx_r0.required)("disabled", ctx_r0.disabled);
i0.ɵɵadvance(1);
i0.ɵɵpropertyInterpolate("dir", ctx_r0.xAlignment === "2" ? "rtl" : "ltr");
i0.ɵɵproperty("formGroupName", ctx_r0.key)("id", ctx_r0.key);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngForOf", ctx_r0.groupFields);
} }
function PepperiAddressComponent_ng_container_2_span_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "span", 13);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r16 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1("", ctx_r16.label, "\u00A0");
} }
function PepperiAddressComponent_ng_container_2_ng_container_3_span_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "span", 15);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const groupField_r18 = i0.ɵɵnextContext().$implicit;
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1("", groupField_r18.formattedValue, ",\u00A0");
} }
function PepperiAddressComponent_ng_container_2_ng_container_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, PepperiAddressComponent_ng_container_2_ng_container_3_span_1_Template, 2, 1, "span", 14);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const groupField_r18 = ctx.$implicit;
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", (groupField_r18 == null ? null : groupField_r18.formattedValue) != "");
} }
const _c0 = function (a0) { return [a0]; };
function PepperiAddressComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "div", 10);
i0.ɵɵtemplate(2, PepperiAddressComponent_ng_container_2_span_2_Template, 2, 1, "span", 11);
i0.ɵɵtemplate(3, PepperiAddressComponent_ng_container_2_ng_container_3_Template, 2, 1, "ng-container", 12);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵpropertyInterpolate2("title", "", ctx_r1.label, "\u00A0", ctx_r1.formattedValue, "");
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(5, _c0, "text-align-" + ctx_r1.xAlignment));
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r1.label != "");
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngForOf", ctx_r1.groupFields);
} }
function PepperiAddressComponent_ng_container_3_ng_container_2_span_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "span", 15);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const groupField_r23 = i0.ɵɵnextContext().$implicit;
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1("", groupField_r23.formattedValue, ",\u00A0");
} }
function PepperiAddressComponent_ng_container_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, PepperiAddressComponent_ng_container_3_ng_container_2_span_1_Template, 2, 1, "span", 14);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const groupField_r23 = ctx.$implicit;
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", (groupField_r23 == null ? null : groupField_r23.formattedValue) != "");
} }
function PepperiAddressComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "div", 10);
i0.ɵɵtemplate(2, PepperiAddressComponent_ng_container_3_ng_container_2_Template, 2, 1, "ng-container", 12);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵpropertyInterpolate("title", ctx_r2.formattedValue);
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c0, "text-align-" + ctx_r2.xAlignment));
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngForOf", ctx_r2.groupFields);
} }
export class PepperiAddressComponent {
constructor(element, renderer) {
this.element = element;
this.renderer = renderer;
this.key = '';
// @Input() value = '';
this.formattedValue = '';
this.label = '';
this.required = false;
this.disabled = false;
this.readonly = false;
this.xAlignment = '0';
this.rowSpan = 1;
this.form = null;
this.layoutType = LAYOUT_TYPE.PepperiForm;
this.valueChanged = new EventEmitter();
this.LAYOUT_TYPE = LAYOUT_TYPE;
}
ngOnInit() {
this.renderer.addClass(this.element.nativeElement, 'pep-grouped-field');
}
ngOnChanges(changes) {
setTimeout(() => {
const focusedFieldParent = this.groupFields.filter(groupField => groupField.lastFocusField)[0];
if (focusedFieldParent) {
focusedFieldParent.lastFocusField.focus();
}
}, 100);
}
ngOnDestroy() {
if (this.valueChanged) {
this.valueChanged.unsubscribe();
}
}
// Not in use for material
onBlur(e, apiName) {
const value = e.target ? e.target.value : e;
this.changeValue({ apiName, value }, e.relatedTarget);
}
onValueChange(e, apiName) {
if (e.target) {
const input = e.target ? e.target.value : e;
this.changeValue({ apiName, value: input.value });
}
else {
this.changeValue(e);
}
}
changeValue(obj, lastFocusedField = null) {
const currentGroupField = this.groupFields.filter(groupField => groupField.key === obj.apiName)[0];
if (currentGroupField.value !== obj.value) {
// Set the value in the form controls
if (this.form) {
const formCtrl = this.form.get(this.key);
if (formCtrl) {
formCtrl.get(obj.apiName).setValue(obj.value);
}
}
this.valueChanged.emit({ apiName: obj.apiName, value: obj.value, lastFocusedField });
}
}
}
PepperiAddressComponent.ɵfac = function PepperiAddressComponent_Factory(t) { return new (t || PepperiAddressComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2)); };
PepperiAddressComponent.ɵcmp = i0.ɵɵdefineComponent({ type: PepperiAddressComponent, selectors: [["pep-address"]], inputs: { key: "key", formattedValue: "formattedValue", label: "label", required: "required", disabled: "disabled", readonly: "readonly", xAlignment: "xAlignment", rowSpan: "rowSpan", groupFields: "groupFields", form: "form", layoutType: "layoutType" }, outputs: { valueChanged: "valueChanged" }, features: [i0.ɵɵNgOnChangesFeature], decls: 4, vars: 4, consts: [[3, "formGroup"], [4, "ngIf"], [1, "header", 3, "label", "required", "disabled"], [1, "pepperi-address-container", 3, "formGroupName", "id", "dir"], [3, "ngSwitch", "class", 4, "ngFor", "ngForOf"], [3, "ngSwitch"], [3, "layoutType", "title", "form", "key", "value", "formattedValue", "label", "placeholder", "type", "required", "disabled", "readonly", "xAlignment", "rowSpan", "parentFieldKey", "valueChanged", 4, "ngSwitchCase"], [3, "layoutType", "title", "form", "key", "value", "formattedValue", "label", "type", "required", "disabled", "readonly", "xAlignment", "rowSpan", "options", "parentFieldKey", "valueChanged", 4, "ngSwitchCase"], [3, "layoutType", "title", "form", "key", "value", "formattedValue", "label", "placeholder", "type", "required", "disabled", "readonly", "xAlignment", "rowSpan", "parentFieldKey", "valueChanged"], [3, "layoutType", "title", "form", "key", "value", "formattedValue", "label", "type", "required", "disabled", "readonly", "xAlignment", "rowSpan", "options", "parentFieldKey", "valueChanged"], [1, "pepperi-card-input", 3, "title", "ngClass"], ["class", "body-xs title", 4, "ngIf"], [4, "ngFor", "ngForOf"], [1, "body-xs", "title"], ["class", "body-sm", 4, "ngIf"], [1, "body-sm"]], template: function PepperiAddressComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0, 0);
i0.ɵɵtemplate(1, PepperiAddressComponent_ng_container_1_Template, 4, 7, "ng-container", 1);
i0.ɵɵtemplate(2, PepperiAddressComponent_ng_container_2_Template, 4, 7, "ng-container", 1);
i0.ɵɵtemplate(3, PepperiAddressComponent_ng_container_3_Template, 3, 5, "ng-container", 1);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
i0.ɵɵproperty("formGroup", ctx.form);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.layoutType === ctx.LAYOUT_TYPE.PepperiForm);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.layoutType === ctx.LAYOUT_TYPE.PepperiCard);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.layoutType === ctx.LAYOUT_TYPE.PepperiTable);
} }, directives: [i1.NgControlStatusGroup, i1.FormGroupDirective, i2.NgIf, i3.PepperiFieldTitleComponent, i1.FormGroupName, i4.Dir, i2.NgForOf, i2.NgSwitch, i2.NgSwitchCase, i5.PepperiTextboxComponent, i6.PepperiSelectComponent, i2.NgClass], styles: [".header[_ngcontent-%COMP%]{-ms-grid-column:1;-ms-grid-column-span:3;grid-column:1/span 3}.pepperi-address-container[_ngcontent-%COMP%]{-ms-grid-columns:(1fr)[3];border-radius:var(--pep-border-radius-md,.25rem);display:-ms-grid;display:grid;grid-column-gap:var(--pep-spacing-md,.75rem);grid-row-gap:var(--pep-spacing-md,.75rem);grid-template-columns:repeat(3,1fr);padding:.875rem var(--pep-spacing-md,.75rem)}.pepperi-address-container[_ngcontent-%COMP%] .columns-2[_ngcontent-%COMP%]{-ms-grid-column:1;-ms-grid-column-span:2;grid-column:1/span 2}.pepperi-address-container[_ngcontent-%COMP%] .columns-3[_ngcontent-%COMP%]{-ms-grid-column:1;-ms-grid-column-span:3;grid-column:1/span 3}"], changeDetection: 0 });
/*@__PURE__*/ (function () { i0.ɵsetClassMetadata(PepperiAddressComponent, [{
type: Component,
args: [{
selector: 'pep-address',
templateUrl: './address.component.html',
styleUrls: ['./address.component.scss'],
// host: { 'class': 'pepperi-grouped-field' },
changeDetection: ChangeDetectionStrategy.OnPush
}]
}], function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, { key: [{
type: Input
}], formattedValue: [{
type: Input
}], label: [{
type: Input
}], required: [{
type: Input
}], disabled: [{
type: Input
}], readonly: [{
type: Input
}], xAlignment: [{
type: Input
}], rowSpan: [{
type: Input
}], groupFields: [{
type: Input
}], form: [{
type: Input
}], layoutType: [{
type: Input
}], valueChanged: [{
type: Output
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2FkZHJlc3MvYWRkcmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2FkZHJlc3MvYWRkcmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFFckosT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7O0lDTXRDLHNDQU9jO0lBRFYsa1VBQXNEO0lBQzFELGlCQUFjOzs7O0lBUG1ELCtEQUF1QztJQUFqRSw4Q0FBeUIscUJBQUEsMEJBQUEsOEJBQUEsZ0RBQUEsOEJBQUEsMENBQUEsNEJBQUEsb0NBQUEsb0NBQUEsb0NBQUEsd0NBQUEsa0NBQUEsOEJBQUE7Ozs7SUFTaEUscUNBTWE7SUFEYyxtVUFBc0Q7SUFDakYsaUJBQWE7Ozs7SUFOa0QsK0RBQXVDO0lBQWpFLDhDQUF5QixxQkFBQSwwQkFBQSw4QkFBQSxnREFBQSw4QkFBQSw0QkFBQSxvQ0FBQSxvQ0FBQSxvQ0FBQSx3Q0FBQSxrQ0FBQSxrQ0FBQSw4QkFBQTs7O0lBWGxFLDhCQUVJO0lBQUEsOEdBT0E7SUFFQSw0R0FNQTtJQUNKLGlCQUFNOzs7SUFqQkYsc0ZBQThEO0lBRDdELG9EQUFtQztJQUV2QixlQUF5QjtJQUF6Qix3Q0FBeUI7SUFTMUIsZUFBd0I7SUFBeEIsdUNBQXdCOzs7SUFoQmhELDZCQUNJO0lBQUEscUNBQ2tCO0lBQ2xCLDhCQUVJO0lBQUEsdUZBRUk7SUFpQlIsaUJBQU07SUFDViwwQkFBZTs7O0lBeEJNLGVBQWU7SUFBZixvQ0FBZSw2QkFBQSw2QkFBQTtJQUc1QixlQUE4QztJQUE5QywwRUFBOEM7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QUFFLENBQUMsQ0FBQztTQUN4RjtJQUNMLENBQUM7OzhGQXpFUSx1QkFBdUI7NERBQXZCLHVCQUF1QjtRQ1hwQyxnQ0FDSTtRQUFBLDBGQUNJO1FBMEJKLDBGQUNJO1FBVUosMEZBQ0k7UUFPUiwwQkFBZTs7UUEvQ0Qsb0NBQWtCO1FBQ2QsZUFBOEM7UUFBOUMscUVBQThDO1FBMkI5QyxlQUE4QztRQUE5QyxxRUFBOEM7UUFXOUMsZUFBK0M7UUFBL0Msc0VBQStDOztrREQ1QnBELHVCQUF1QjtjQVBuQyxTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLFdBQVcsRUFBRSwwQkFBMEI7Z0JBQ3ZDLFNBQVMsRUFBRSxDQUFDLDBCQUEwQixDQUFDO2dCQUN2Qyw4Q0FBOEM7Z0JBQzlDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2xEO3FGQUVZLEdBQUc7a0JBQVgsS0FBSztZQUVHLGNBQWM7a0JBQXRCLEtBQUs7WUFDRyxLQUFLO2tCQUFiLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0csT0FBTztrQkFBZixLQUFLO1lBQ0csV0FBVztrQkFBbkIsS0FBSztZQUVHLElBQUk7a0JBQVosS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFFSSxZQUFZO2tCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uQ2hhbmdlcywgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgT25EZXN0cm95LCBSZW5kZXJlcjIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBMQVlPVVRfVFlQRSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdwZXAtYWRkcmVzcycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWRkcmVzcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9hZGRyZXNzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICAvLyBob3N0OiB7ICdjbGFzcyc6ICdwZXBwZXJpLWdyb3VwZWQtZmllbGQnIH0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVwcGVyaUFkZHJlc3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgpIGtleSA9ICcnO1xyXG4gICAgLy8gQElucHV0KCkgdmFsdWUgPSAnJztcclxuICAgIEBJbnB1dCgpIGZvcm1hdHRlZFZhbHVlID0gJyc7XHJcbiAgICBASW5wdXQoKSBsYWJlbCA9ICcnO1xyXG4gICAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgeEFsaWdubWVudCA9ICcwJztcclxuICAgIEBJbnB1dCgpIHJvd1NwYW4gPSAxO1xyXG4gICAgQElucHV0KCkgZ3JvdXBGaWVsZHM6IEFycmF5PGFueT47XHJcblxyXG4gICAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwID0gbnVsbDtcclxuICAgIEBJbnB1dCgpIGxheW91dFR5cGU6IExBWU9VVF9UWVBFID0gTEFZT1VUX1RZUEUuUGVwcGVyaUZvcm07XHJcblxyXG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBMQVlPVVRfVFlQRSA9IExBWU9VVF9UWVBFO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcclxuICAgICkgeyB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3BlcC1ncm91cGVkLWZpZWxkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkRmllbGRQYXJlbnQgPSB0aGlzLmdyb3VwRmllbGRzLmZpbHRlcihncm91cEZpZWxkID0+IGdyb3VwRmllbGQubGFzdEZvY3VzRmllbGQpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZm9jdXNlZEZpZWxkUGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBmb2N1c2VkRmllbGRQYXJlbnQubGFzdEZvY3VzRmllbGQuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vdCBpbiB1c2UgZm9yIG1hdGVyaWFsXHJcbiAgICBvbkJsdXIoZTogYW55LCBhcGlOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0ID8gZS50YXJnZXQudmFsdWUgOiBlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlVmFsdWUoeyBhcGlOYW1lLCB2YWx1ZSB9LCBlLnJlbGF0ZWRUYXJnZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVmFsdWVDaGFuZ2UoZTogYW55LCBhcGlOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZS50YXJnZXQpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBlLnRhcmdldCA/IGUudGFyZ2V0LnZhbHVlIDogZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYWx1ZSh7IGFwaU5hbWUsIHZhbHVlOiBpbnB1dC52YWx1ZSB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhbHVlKGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VWYWx1ZShvYmo6IGFueSwgbGFzdEZvY3VzZWRGaWVsZDogYW55ID0gbnVsbCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cEZpZWxkID0gdGhpcy5ncm91cEZpZWxkcy5maWx0ZXIoZ3JvdXBGaWVsZCA9PiBncm91cEZpZWxkLmtleSA9PT0gb2JqLmFwaU5hbWUpWzBdO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudEdyb3VwRmllbGQudmFsdWUgIT09IG9iai52YWx1ZSkge1xyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIHZhbHVlIGluIHRoZSBmb3JtIGNvbnRyb2xzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1DdHJsID0gdGhpcy5mb3JtLmdldCh0aGlzLmtleSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1DdHJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUN0cmwuZ2V0KG9iai5hcGlOYW1lKS5zZXRWYWx1ZShvYmoudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZC5lbWl0KHsgYXBpTmFtZTogb2JqLmFwaU5hbWUsIHZhbHVlOiBvYmoudmFsdWUsIGxhc3RGb2N1c2VkRmllbGQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5b3V0VHlwZSA9PT0gTEFZT1VUX1RZUEUuUGVwcGVyaUZvcm1cIj5cclxuICAgICAgICA8cGVwLWZpZWxkLXRpdGxlIFtsYWJlbF09XCJsYWJlbFwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgPC9wZXAtZmllbGQtdGl0bGU+XHJcbiAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09XCJrZXlcIiBbaWRdPVwia2V5XCIgY2xhc3M9XCJwZXBwZXJpLWFkZHJlc3MtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgZGlyPVwie3sgeEFsaWdubWVudCA9PT0gJzInID8gJ3J0bCcgOiAnbHRyJyB9fVwiPlxyXG4gICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJncm91cEZpZWxkLmNvbnRyb2xUeXBlXCIgKm5nRm9yPVwibGV0IGdyb3VwRmllbGQgb2YgZ3JvdXBGaWVsZHM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwZXBwZXJpLWFkZHJlc3MtZmllbGQgY29sdW1ucy17eyBncm91cEZpZWxkLmNvbFNwYW4gfX1cIj5cclxuICAgICAgICAgICAgICAgIDxwZXAtdGV4dGJveCAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRib3gnXCIgW2xheW91dFR5cGVdPVwibGF5b3V0VHlwZVwiIHRpdGxlPVwie3sgZ3JvdXBGaWVsZC5mb3JtYXR0ZWRWYWx1ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiIFtrZXldPVwiZ3JvdXBGaWVsZC5rZXlcIiBbdmFsdWVdPVwiZ3JvdXBGaWVsZC52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1hdHRlZFZhbHVlXT1cImdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWVcIiBbbGFiZWxdPVwiZ3JvdXBGaWVsZC5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdyb3VwRmllbGQucGxhY2Vob2xkZXJcIiBbdHlwZV09XCJncm91cEZpZWxkLnR5cGVcIiBbcmVxdWlyZWRdPVwiZ3JvdXBGaWVsZC5yZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyb3VwRmllbGQuZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwiZ3JvdXBGaWVsZC5yZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3hBbGlnbm1lbnRdPVwiZ3JvdXBGaWVsZC54QWxpZ25tZW50XCIgW3Jvd1NwYW5dPVwiZ3JvdXBGaWVsZC5yb3dTcGFuXCIgW3BhcmVudEZpZWxkS2V5XT1cImtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlZCk9XCJvblZhbHVlQ2hhbmdlKCRldmVudCwgZ3JvdXBGaWVsZC5rZXkpXCI+XHJcbiAgICAgICAgICAgICAgICA8L3BlcC10ZXh0Ym94PlxyXG5cclxuICAgICAgICAgICAgICAgIDxwZXAtc2VsZWN0ICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiIFtsYXlvdXRUeXBlXT1cImxheW91dFR5cGVcIiB0aXRsZT1cInt7IGdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIiBba2V5XT1cImdyb3VwRmllbGQua2V5XCIgW3ZhbHVlXT1cImdyb3VwRmllbGQudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtYXR0ZWRWYWx1ZV09XCJncm91cEZpZWxkLmZvcm1hdHRlZFZhbHVlXCIgW2xhYmVsXT1cImdyb3VwRmllbGQubGFiZWxcIiBbdHlwZV09XCJncm91cEZpZWxkLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJncm91cEZpZWxkLnJlcXVpcmVkXCIgW2Rpc2FibGVkXT1cImdyb3VwRmllbGQuZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwiZ3JvdXBGaWVsZC5yZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3hBbGlnbm1lbnRdPVwiZ3JvdXBGaWVsZC54QWxpZ25tZW50XCIgW3Jvd1NwYW5dPVwiZ3JvdXBGaWVsZC5yb3dTcGFuXCIgW29wdGlvbnNdPVwiZ3JvdXBGaWVsZC5vcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGFyZW50RmllbGRLZXldPVwia2V5XCIgKHZhbHVlQ2hhbmdlZCk9XCJvblZhbHVlQ2hhbmdlKCRldmVudCwgZ3JvdXBGaWVsZC5rZXkpXCI+XHJcbiAgICAgICAgICAgICAgICA8L3BlcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09IExBWU9VVF9UWVBFLlBlcHBlcmlDYXJkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBlcHBlcmktY2FyZC1pbnB1dCBcIiB0aXRsZT1cInt7IGxhYmVsIH19Jm5ic3A7e3sgZm9ybWF0dGVkVmFsdWUgfX1cIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJbJ3RleHQtYWxpZ24tJyArIHhBbGlnbm1lbnRdXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibGFiZWwgIT0gJydcIiBjbGFzcz1cImJvZHkteHMgdGl0bGVcIj57eyBsYWJlbCB9fSZuYnNwOzwvc3Bhbj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXBGaWVsZCBvZiBncm91cEZpZWxkczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJncm91cEZpZWxkPy5mb3JtYXR0ZWRWYWx1ZSAhPSAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib2R5LXNtXCI+e3sgZ3JvdXBGaWVsZC5mb3JtYXR0ZWRWYWx1ZSB9fSwmbmJzcDs8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09IExBWU9VVF9UWVBFLlBlcHBlcmlUYWJsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwZXBwZXJpLWNhcmQtaW5wdXQgXCIgdGl0bGU9XCJ7eyBmb3JtYXR0ZWRWYWx1ZSB9fVwiIFtuZ0NsYXNzXT1cIlsndGV4dC1hbGlnbi0nICsgeEFsaWdubWVudF1cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXBGaWVsZCBvZiBncm91cEZpZWxkczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJncm91cEZpZWxkPy5mb3JtYXR0ZWRWYWx1ZSAhPSAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib2R5LXNtXCI+e3sgZ3JvdXBGaWVsZC5mb3JtYXR0ZWRWYWx1ZSB9fSwmbmJzcDs8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=