ngx-antd-form-builder
Version:
Simple Drag&Drop form builder using ng-zorro-antd
42 lines • 24.5 kB
JavaScript
import { CommonModule } from "@angular/common";
import { Component, Input } from "@angular/core";
import { FormsModule } from "@angular/forms";
import { NzInputNumberModule } from "ng-zorro-antd/input-number";
import { NzRadioModule } from "ng-zorro-antd/radio";
import { NzSliderModule } from "ng-zorro-antd/slider";
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "ng-zorro-antd/input-number";
import * as i3 from "ng-zorro-antd/radio";
import * as i4 from "@angular/common";
import * as i5 from "ng-zorro-antd/slider";
export class DesignFormPropertiesComponent {
constructor() { }
handleChangeCol(e) {
this.config.labelCol.xs = this.config.labelCol.sm = this.config.labelCol.md = this.config.labelCol.lg = this.config.labelCol.xl = this.config.labelCol.xxl = e;
this.config.wrapperCol.xs = this.config.wrapperCol.sm = this.config.wrapperCol.md = this.config.wrapperCol.lg = this.config.wrapperCol.xl = this.config.wrapperCol.xxl =
24 - e;
}
handleChangeLabelCol(e) {
this.config.labelCol.xs = this.config.labelCol.sm = this.config.labelCol.md = this.config.labelCol.lg = this.config.labelCol.xl = this.config.labelCol.xxl = e;
}
handleChangeWrapperCol(e) {
this.config.wrapperCol.xs = this.config.wrapperCol.sm = this.config.wrapperCol.md = this.config.wrapperCol.lg = this.config.wrapperCol.xl = this.config.wrapperCol.xxl = e;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: DesignFormPropertiesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.10", type: DesignFormPropertiesComponent, isStandalone: true, selector: "app-design-form-properties", inputs: { previewOptions: "previewOptions", config: "config" }, ngImport: i0, template: "<div class=\"properties-centent kk-checkbox\">\r\n <div class=\"properties-body\">\r\n <!-- <div> -->\r\n <div class=\"preview-width\">\r\n <span>width\uFF1A</span>\r\n <input nz-input [(ngModel)]=\"config.previewWidth\"/>\r\n </div>\r\n <div class=\"table-layout\" *ngIf=\"config.layout != 'undefined'\">\r\n <span>\r\n Form Layout\r\n </span>\r\n <div>\r\n <nz-radio-group [(ngModel)]=\"config.layout\">\r\n <label nz-radio-button nzValue=\"horizontal\">Horizontal</label>\r\n <label nz-radio-button nzValue=\"vertical\">Vertical</label>\r\n <!-- <label nz-radio-button nzValue=\"inline\">Inline</label> -->\r\n </nz-radio-group>\r\n </div>\r\n </div>\r\n <hr>\r\n\r\n <ng-container *ngIf=\"config.layout == 'horizontal'\">\r\n <div>\r\n <label>\r\n Label Layout\r\n </label>\r\n <div>\r\n <nz-radio-group [(ngModel)]=\"config.labelLayout\">\r\n <label nz-radio-button nzValue=\"fixed\">Fixed</label>\r\n <label nz-radio-button nzValue=\"flex\">Flex</label>\r\n </nz-radio-group>\r\n </div>\r\n </div>\r\n <hr>\r\n \r\n <div class=\"label-width\" [hidden]=\"config.labelLayout === 'flex'\">\r\n <label>\r\n Label Width(px)\uFF1A\r\n </label>\r\n <div>\r\n <nz-input-number [(ngModel)]=\"config.labelWidth\"></nz-input-number>\r\n </div>\r\n </div>\r\n <div [hidden]=\"config.labelLayout !== 'flex'\">\r\n <label>\r\n labelCol:\r\n </label>\r\n <div class=\"col-config\">\r\n <nz-slider\r\n nzMax=\"24\" nzMin=\"0\"\r\n [(ngModel)]=\"config.labelCol.xs\"\r\n (ngModelChange)=\"handleChangeCol($event)\"\r\n ></nz-slider>\r\n <div>\r\n <label>xs:</label>\r\n <nz-input-number [(ngModel)]=\"config.labelCol.xs\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>sm:</label>\r\n <nz-input-number [(ngModel)]=\"config.labelCol.sm\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>md:</label>\r\n <nz-input-number [(ngModel)]=\"config.labelCol.md\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>lg:</label>\r\n <nz-input-number [(ngModel)]=\"config.labelCol.lg\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>xl:</label>\r\n <nz-input-number [(ngModel)]=\"config.labelCol.xl\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>xxl:</label>\r\n <nz-input-number [(ngModel)]=\"config.labelCol.xxl\" ></nz-input-number>\r\n </div>\r\n </div>\r\n </div>\r\n <div [hidden]=\"config.labelLayout !== 'flex'\">\r\n <label>\r\n Input Col\r\n </label>\r\n <div class=\"col-config\"> \r\n <div>\r\n <label>xs:</label>\r\n <nz-input-number [(ngModel)]=\"config.wrapperCol.xs\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>sm:</label>\r\n <nz-input-number [(ngModel)]=\"config.wrapperCol.sm\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>md:</label>\r\n <nz-input-number [(ngModel)]=\"config.wrapperCol.md\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>lg:</label>\r\n <nz-input-number [(ngModel)]=\"config.wrapperCol.lg\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>xl:</label>\r\n <nz-input-number [(ngModel)]=\"config.wrapperCol.xl\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>xxl:</label>\r\n <nz-input-number [(ngModel)]=\"config.wrapperCol.xxl\" ></nz-input-number>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;width:100%;padding:0 10px 10px}.preview-width,.table-layout,.label-width{display:flex}.preview-width span,.table-layout span,.label-width span{display:inline-block;width:100px;flex-shrink:0;line-height:32px}.preview-width{margin-bottom:10px}.col-config>div{display:flex}.col-config>div label{display:inline-block;width:40px;flex-shrink:0;line-height:32px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzInputNumberModule }, { kind: "component", type: i2.NzInputNumberComponent, selector: "nz-input-number", inputs: ["nzSize", "nzMin", "nzMax", "nzParser", "nzPrecision", "nzPrecisionMode", "nzPlaceHolder", "nzStatus", "nzStep", "nzInputMode", "nzId", "nzDisabled", "nzReadOnly", "nzAutoFocus", "nzBorderless", "nzFormatter"], outputs: ["nzBlur", "nzFocus"], exportAs: ["nzInputNumber"] }, { kind: "ngmodule", type: NzRadioModule }, { kind: "component", type: i3.NzRadioComponent, selector: "[nz-radio],[nz-radio-button]", inputs: ["nzValue", "nzDisabled", "nzAutoFocus", "nz-radio-button"], exportAs: ["nzRadio"] }, { kind: "component", type: i3.NzRadioGroupComponent, selector: "nz-radio-group", inputs: ["nzDisabled", "nzButtonStyle", "nzSize", "nzName"], exportAs: ["nzRadioGroup"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: NzSliderModule }, { kind: "component", type: i5.NzSliderComponent, selector: "nz-slider", inputs: ["nzDisabled", "nzDots", "nzIncluded", "nzRange", "nzVertical", "nzReverse", "nzDefaultValue", "nzMarks", "nzMax", "nzMin", "nzStep", "nzTooltipVisible", "nzTooltipPlacement", "nzTipFormatter"], outputs: ["nzOnAfterChange"], exportAs: ["nzSlider"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: DesignFormPropertiesComponent, decorators: [{
type: Component,
args: [{ standalone: true, selector: 'app-design-form-properties', imports: [
FormsModule,
NzInputNumberModule, NzRadioModule, CommonModule, NzSliderModule
], template: "<div class=\"properties-centent kk-checkbox\">\r\n <div class=\"properties-body\">\r\n <!-- <div> -->\r\n <div class=\"preview-width\">\r\n <span>width\uFF1A</span>\r\n <input nz-input [(ngModel)]=\"config.previewWidth\"/>\r\n </div>\r\n <div class=\"table-layout\" *ngIf=\"config.layout != 'undefined'\">\r\n <span>\r\n Form Layout\r\n </span>\r\n <div>\r\n <nz-radio-group [(ngModel)]=\"config.layout\">\r\n <label nz-radio-button nzValue=\"horizontal\">Horizontal</label>\r\n <label nz-radio-button nzValue=\"vertical\">Vertical</label>\r\n <!-- <label nz-radio-button nzValue=\"inline\">Inline</label> -->\r\n </nz-radio-group>\r\n </div>\r\n </div>\r\n <hr>\r\n\r\n <ng-container *ngIf=\"config.layout == 'horizontal'\">\r\n <div>\r\n <label>\r\n Label Layout\r\n </label>\r\n <div>\r\n <nz-radio-group [(ngModel)]=\"config.labelLayout\">\r\n <label nz-radio-button nzValue=\"fixed\">Fixed</label>\r\n <label nz-radio-button nzValue=\"flex\">Flex</label>\r\n </nz-radio-group>\r\n </div>\r\n </div>\r\n <hr>\r\n \r\n <div class=\"label-width\" [hidden]=\"config.labelLayout === 'flex'\">\r\n <label>\r\n Label Width(px)\uFF1A\r\n </label>\r\n <div>\r\n <nz-input-number [(ngModel)]=\"config.labelWidth\"></nz-input-number>\r\n </div>\r\n </div>\r\n <div [hidden]=\"config.labelLayout !== 'flex'\">\r\n <label>\r\n labelCol:\r\n </label>\r\n <div class=\"col-config\">\r\n <nz-slider\r\n nzMax=\"24\" nzMin=\"0\"\r\n [(ngModel)]=\"config.labelCol.xs\"\r\n (ngModelChange)=\"handleChangeCol($event)\"\r\n ></nz-slider>\r\n <div>\r\n <label>xs:</label>\r\n <nz-input-number [(ngModel)]=\"config.labelCol.xs\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>sm:</label>\r\n <nz-input-number [(ngModel)]=\"config.labelCol.sm\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>md:</label>\r\n <nz-input-number [(ngModel)]=\"config.labelCol.md\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>lg:</label>\r\n <nz-input-number [(ngModel)]=\"config.labelCol.lg\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>xl:</label>\r\n <nz-input-number [(ngModel)]=\"config.labelCol.xl\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>xxl:</label>\r\n <nz-input-number [(ngModel)]=\"config.labelCol.xxl\" ></nz-input-number>\r\n </div>\r\n </div>\r\n </div>\r\n <div [hidden]=\"config.labelLayout !== 'flex'\">\r\n <label>\r\n Input Col\r\n </label>\r\n <div class=\"col-config\"> \r\n <div>\r\n <label>xs:</label>\r\n <nz-input-number [(ngModel)]=\"config.wrapperCol.xs\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>sm:</label>\r\n <nz-input-number [(ngModel)]=\"config.wrapperCol.sm\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>md:</label>\r\n <nz-input-number [(ngModel)]=\"config.wrapperCol.md\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>lg:</label>\r\n <nz-input-number [(ngModel)]=\"config.wrapperCol.lg\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>xl:</label>\r\n <nz-input-number [(ngModel)]=\"config.wrapperCol.xl\" ></nz-input-number>\r\n </div>\r\n <div>\r\n <label>xxl:</label>\r\n <nz-input-number [(ngModel)]=\"config.wrapperCol.xxl\" ></nz-input-number>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;width:100%;padding:0 10px 10px}.preview-width,.table-layout,.label-width{display:flex}.preview-width span,.table-layout span,.label-width span{display:inline-block;width:100px;flex-shrink:0;line-height:32px}.preview-width{margin-bottom:10px}.col-config>div{display:flex}.col-config>div label{display:inline-block;width:40px;flex-shrink:0;line-height:32px}\n"] }]
}], ctorParameters: () => [], propDecorators: { previewOptions //="record.key"
: [{
type: Input
}], config //="config"
: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduLWZvcm0tcHJvcGVydGllcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYW50ZC1mb3JtLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rlc2lnbi1mb3JtLXByb3BlcnRpZXMvZGVzaWduLWZvcm0tcHJvcGVydGllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYW50ZC1mb3JtLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rlc2lnbi1mb3JtLXByb3BlcnRpZXMvZGVzaWduLWZvcm0tcHJvcGVydGllcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7QUFZdEQsTUFBTSxPQUFPLDZCQUE2QjtJQUl4QyxnQkFDRyxDQUFDO0lBRUosZUFBZSxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFL0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHO1lBQ3BLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakssQ0FBQztJQUNELHNCQUFzQixDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzdLLENBQUM7K0dBbkJVLDZCQUE2QjttR0FBN0IsNkJBQTZCLHNKQ2pCMUMsK21JQWlIQSxrYkRwR0ksV0FBVyw4bUJBQ1gsbUJBQW1CLDRZQUFFLGFBQWEsa1lBQUMsWUFBWSxrSUFBQyxjQUFjOzs0RkFHckQsNkJBQTZCO2tCQVZ6QyxTQUFTO2lDQUNJLElBQUksWUFDTiw0QkFBNEIsV0FHN0I7d0JBQ1AsV0FBVzt3QkFDWCxtQkFBbUIsRUFBRSxhQUFhLEVBQUMsWUFBWSxFQUFDLGNBQWM7cUJBQy9EO3dEQUdRLGNBQWMsQ0FBQyxlQUFlOztzQkFBdEMsS0FBSztnQkFDRyxNQUFNLENBQUMsV0FBVzs7c0JBQTFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBOeklucHV0TnVtYmVyTW9kdWxlIH0gZnJvbSBcIm5nLXpvcnJvLWFudGQvaW5wdXQtbnVtYmVyXCI7XHJcbmltcG9ydCB7IE56UmFkaW9Nb2R1bGUgfSBmcm9tIFwibmctem9ycm8tYW50ZC9yYWRpb1wiO1xyXG5pbXBvcnQgeyBOelNsaWRlck1vZHVsZSB9IGZyb20gXCJuZy16b3Jyby1hbnRkL3NsaWRlclwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBzZWxlY3RvcjogJ2FwcC1kZXNpZ24tZm9ybS1wcm9wZXJ0aWVzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGVzaWduLWZvcm0tcHJvcGVydGllcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGVzaWduLWZvcm0tcHJvcGVydGllcy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTnpJbnB1dE51bWJlck1vZHVsZSwgTnpSYWRpb01vZHVsZSxDb21tb25Nb2R1bGUsTnpTbGlkZXJNb2R1bGVcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGVzaWduRm9ybVByb3BlcnRpZXNDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHByZXZpZXdPcHRpb25zIC8vPVwicmVjb3JkLmtleVwiXHJcbiAgQElucHV0KCkgY29uZmlnIC8vPVwiY29uZmlnXCJcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgKSB7fVxyXG5cclxuICBoYW5kbGVDaGFuZ2VDb2woZSkge1xyXG4gICAgdGhpcy5jb25maWcubGFiZWxDb2wueHMgPSB0aGlzLmNvbmZpZy5sYWJlbENvbC5zbSA9IHRoaXMuY29uZmlnLmxhYmVsQ29sLm1kID0gdGhpcy5jb25maWcubGFiZWxDb2wubGcgPSB0aGlzLmNvbmZpZy5sYWJlbENvbC54bCA9IHRoaXMuY29uZmlnLmxhYmVsQ29sLnh4bCA9IGU7XHJcblxyXG4gICAgdGhpcy5jb25maWcud3JhcHBlckNvbC54cyA9IHRoaXMuY29uZmlnLndyYXBwZXJDb2wuc20gPSB0aGlzLmNvbmZpZy53cmFwcGVyQ29sLm1kID0gdGhpcy5jb25maWcud3JhcHBlckNvbC5sZyA9IHRoaXMuY29uZmlnLndyYXBwZXJDb2wueGwgPSB0aGlzLmNvbmZpZy53cmFwcGVyQ29sLnh4bCA9XHJcbiAgICAgIDI0IC0gZTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNoYW5nZUxhYmVsQ29sKGUpIHtcclxuICAgIHRoaXMuY29uZmlnLmxhYmVsQ29sLnhzID0gdGhpcy5jb25maWcubGFiZWxDb2wuc20gPSB0aGlzLmNvbmZpZy5sYWJlbENvbC5tZCA9IHRoaXMuY29uZmlnLmxhYmVsQ29sLmxnID0gdGhpcy5jb25maWcubGFiZWxDb2wueGwgPSB0aGlzLmNvbmZpZy5sYWJlbENvbC54eGwgPSBlO1xyXG4gIH1cclxuICBoYW5kbGVDaGFuZ2VXcmFwcGVyQ29sKGUpIHtcclxuICAgIHRoaXMuY29uZmlnLndyYXBwZXJDb2wueHMgPSB0aGlzLmNvbmZpZy53cmFwcGVyQ29sLnNtID0gdGhpcy5jb25maWcud3JhcHBlckNvbC5tZCA9IHRoaXMuY29uZmlnLndyYXBwZXJDb2wubGcgPSB0aGlzLmNvbmZpZy53cmFwcGVyQ29sLnhsID0gdGhpcy5jb25maWcud3JhcHBlckNvbC54eGwgPSBlO1xyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzLWNlbnRlbnQga2stY2hlY2tib3hcIj5cclxuICA8ZGl2IGNsYXNzPVwicHJvcGVydGllcy1ib2R5XCI+XHJcbiAgICA8IS0tIDxkaXY+IC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy13aWR0aFwiPlxyXG4gICAgICAgIDxzcGFuPndpZHRo77yaPC9zcGFuPlxyXG4gICAgICAgIDxpbnB1dCBuei1pbnB1dCBbKG5nTW9kZWwpXT1cImNvbmZpZy5wcmV2aWV3V2lkdGhcIi8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtbGF5b3V0XCIgKm5nSWY9XCJjb25maWcubGF5b3V0ICE9ICd1bmRlZmluZWQnXCI+XHJcbiAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICBGb3JtIExheW91dFxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPG56LXJhZGlvLWdyb3VwIFsobmdNb2RlbCldPVwiY29uZmlnLmxheW91dFwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8tYnV0dG9uIG56VmFsdWU9XCJob3Jpem9udGFsXCI+SG9yaXpvbnRhbDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxsYWJlbCBuei1yYWRpby1idXR0b24gbnpWYWx1ZT1cInZlcnRpY2FsXCI+VmVydGljYWw8L2xhYmVsPlxyXG4gICAgICAgICAgICA8IS0tIDxsYWJlbCBuei1yYWRpby1idXR0b24gbnpWYWx1ZT1cImlubGluZVwiPklubGluZTwvbGFiZWw+IC0tPlxyXG4gICAgICAgICAgPC9uei1yYWRpby1ncm91cD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxocj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWcubGF5b3V0ID09ICdob3Jpem9udGFsJ1wiPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIExhYmVsIExheW91dFxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxuei1yYWRpby1ncm91cCBbKG5nTW9kZWwpXT1cImNvbmZpZy5sYWJlbExheW91dFwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8tYnV0dG9uIG56VmFsdWU9XCJmaXhlZFwiPkZpeGVkPC9sYWJlbD5cclxuICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvLWJ1dHRvbiBuelZhbHVlPVwiZmxleFwiPkZsZXg8L2xhYmVsPlxyXG4gICAgICAgICAgPC9uei1yYWRpby1ncm91cD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxocj5cclxuICAgICAgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC13aWR0aFwiIFtoaWRkZW5dPVwiY29uZmlnLmxhYmVsTGF5b3V0ID09PSAnZmxleCdcIj5cclxuICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICBMYWJlbCBXaWR0aChweCnvvJpcclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bnotaW5wdXQtbnVtYmVyIFsobmdNb2RlbCldPVwiY29uZmlnLmxhYmVsV2lkdGhcIj48L256LWlucHV0LW51bWJlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgW2hpZGRlbl09XCJjb25maWcubGFiZWxMYXlvdXQgIT09ICdmbGV4J1wiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIGxhYmVsQ29sOlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1jb25maWdcIj5cclxuICAgICAgICAgIDxuei1zbGlkZXJcclxuICAgICAgICAgICAgbnpNYXg9XCIyNFwiIG56TWluPVwiMFwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZmlnLmxhYmVsQ29sLnhzXCJcclxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlQ2hhbmdlQ29sKCRldmVudClcIlxyXG4gICAgICAgICAgPjwvbnotc2xpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxsYWJlbD54czo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxuei1pbnB1dC1udW1iZXIgWyhuZ01vZGVsKV09XCJjb25maWcubGFiZWxDb2wueHNcIiA+PC9uei1pbnB1dC1udW1iZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxsYWJlbD5zbTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxuei1pbnB1dC1udW1iZXIgWyhuZ01vZGVsKV09XCJjb25maWcubGFiZWxDb2wuc21cIiA+PC9uei1pbnB1dC1udW1iZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxsYWJlbD5tZDo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxuei1pbnB1dC1udW1iZXIgWyhuZ01vZGVsKV09XCJjb25maWcubGFiZWxDb2wubWRcIiA+PC9uei1pbnB1dC1udW1iZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxsYWJlbD5sZzo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxuei1pbnB1dC1udW1iZXIgWyhuZ01vZGVsKV09XCJjb25maWcubGFiZWxDb2wubGdcIiA+PC9uei1pbnB1dC1udW1iZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxsYWJlbD54bDo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxuei1pbnB1dC1udW1iZXIgWyhuZ01vZGVsKV09XCJjb25maWcubGFiZWxDb2wueGxcIiA+PC9uei1pbnB1dC1udW1iZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxsYWJlbD54eGw6PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8bnotaW5wdXQtbnVtYmVyIFsobmdNb2RlbCldPVwiY29uZmlnLmxhYmVsQ29sLnh4bFwiID48L256LWlucHV0LW51bWJlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IFtoaWRkZW5dPVwiY29uZmlnLmxhYmVsTGF5b3V0ICE9PSAnZmxleCdcIj5cclxuICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICBJbnB1dCBDb2xcclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtY29uZmlnXCI+ICBcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8bGFiZWw+eHM6PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8bnotaW5wdXQtbnVtYmVyIFsobmdNb2RlbCldPVwiY29uZmlnLndyYXBwZXJDb2wueHNcIiA+PC9uei1pbnB1dC1udW1iZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxsYWJlbD5zbTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxuei1pbnB1dC1udW1iZXIgWyhuZ01vZGVsKV09XCJjb25maWcud3JhcHBlckNvbC5zbVwiID48L256LWlucHV0LW51bWJlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgPGxhYmVsPm1kOjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPG56LWlucHV0LW51bWJlciBbKG5nTW9kZWwpXT1cImNvbmZpZy53cmFwcGVyQ29sLm1kXCIgPjwvbnotaW5wdXQtbnVtYmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8bGFiZWw+bGc6PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8bnotaW5wdXQtbnVtYmVyIFsobmdNb2RlbCldPVwiY29uZmlnLndyYXBwZXJDb2wubGdcIiA+PC9uei1pbnB1dC1udW1iZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxsYWJlbD54bDo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxuei1pbnB1dC1udW1iZXIgWyhuZ01vZGVsKV09XCJjb25maWcud3JhcHBlckNvbC54bFwiID48L256LWlucHV0LW51bWJlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgPGxhYmVsPnh4bDo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxuei1pbnB1dC1udW1iZXIgWyhuZ01vZGVsKV09XCJjb25maWcud3JhcHBlckNvbC54eGxcIiA+PC9uei1pbnB1dC1udW1iZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19