@rangertechnologies/ngnxt 2.1.101 → 2.1.103
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/lib/components/search-box/search-box.component.mjs +72 -46
- package/esm2022/lib/interfaces/apimeta.mjs +1 -1
- package/esm2022/lib/pages/builder/element/element.component.mjs +6 -6
- package/esm2022/lib/pages/builder/form/form.component.mjs +2 -2
- package/esm2022/lib/pages/builder/properties/properties.component.mjs +4 -4
- package/fesm2022/rangertechnologies-ngnxt.mjs +77 -48
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/search-box/search-box.component.d.ts +6 -9
- package/lib/interfaces/apimeta.d.ts +2 -1
- package/lib/pages/builder/element/element.component.d.ts +1 -1
- package/lib/pages/builder/properties/properties.component.d.ts +1 -1
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.103.tgz +0 -0
- package/rangertechnologies-ngnxt-2.1.101.tgz +0 -0
|
@@ -13,10 +13,10 @@ export class ElementComponent {
|
|
|
13
13
|
formContainer;
|
|
14
14
|
bookletJSON;
|
|
15
15
|
bookletId;
|
|
16
|
-
dropdownOpen = false; // Tracks whether the dropdown is open or closed
|
|
17
16
|
field;
|
|
18
17
|
formElements = [];
|
|
19
18
|
elements = [];
|
|
19
|
+
bookId;
|
|
20
20
|
constructor(formBuilderService) {
|
|
21
21
|
this.formBuilderService = formBuilderService;
|
|
22
22
|
}
|
|
@@ -62,8 +62,8 @@ export class ElementComponent {
|
|
|
62
62
|
this.formBuilderService.clearElements();
|
|
63
63
|
const bookQuestionsMapKeys = Object.keys(this.bookletJSON.bookQuestionsMap || {});
|
|
64
64
|
// Assign the first key from bookQuestionsMap to bookletId
|
|
65
|
-
this.
|
|
66
|
-
this.bookletJSON.bookQuestionsMap[this.
|
|
65
|
+
this.bookId = bookQuestionsMapKeys[0];
|
|
66
|
+
this.bookletJSON.bookQuestionsMap[this.bookId].subQuestions.forEach(newElement => {
|
|
67
67
|
if (this.bookletJSON.sqOptions && this.bookletJSON.sqOptions[newElement.id]) {
|
|
68
68
|
newElement.options = this.bookletJSON.sqOptions[newElement.id].options;
|
|
69
69
|
}
|
|
@@ -164,11 +164,11 @@ export class ElementComponent {
|
|
|
164
164
|
return styles;
|
|
165
165
|
}
|
|
166
166
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElementComponent, deps: [{ token: i1.FormBuilderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
167
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ElementComponent, selector: "app-element", inputs: { bookletJSON: "bookletJSON", bookletId: "bookletId" }, outputs: { elementButtonClicked: "elementButtonClicked" }, viewQueries: [{ propertyName: "formContainer", first: true, predicate: ["formContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- AP 22JAN25 - form preview and All form elements -->\n <!-- AP 25FEB25 - All elements update -->\n<div class=\"center-frame\">\n <link href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\" rel=\"stylesheet\">\n\n <!-- Form Builder Section All Elements -->\n<div class=\"form-builder\">\n <ng-container *ngFor=\"let element of elements\">\n <div class=\"element\" (click)=\"addElement(element.type)\">\n <img src=\"../assets/icons/{{ element.img }}.svg\">\n <div class=\"hover-label\">{{ element.label }}</div>\n </div>\n </ng-container>\n</div>\n \n<div class=\"form-preview\" cdkDropList [cdkDropListData]=\"formElements\" (cdkDropListDropped)=\"drop($event)\">\n <ng-container *ngFor=\"let field of formElements; let i = index\" getProperties().elementProps>\n\n <!-- AP-29JAN25 remove empty classes -->\n <!-- TextBox -->\n <div *ngIf=\"field.type === 'Text'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n [class.highlight]=\"selectedFieldIndex === i\" cdkDrag> \n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <input type=\"text\" class=\"custom-input\" [placeholder]=\"field.question || 'Enter text'\" [readonly]=\"field.isReadOnly\" \n [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.text\" />\n </div>\n </div>\n</div>\n\n <!-- CheckBox -->\n<div *ngIf=\"field.type === 'CheckBox'\" class=\"checkbox-field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\"> \n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <div class=\"checkbox-options-container\">\n <div *ngFor=\"let option of field.options\" class=\"checkbox-option\">\n <input type=\"checkbox\" [id]=\"option.value + i\" [name]=\"field.id\" [value]=\"option.value\" class=\"checkbox-input\">\n <label [for]=\"option.value + i\" class=\"checkbox-label\">{{ option.label }}</label>\n </div>\n </div>\n </div>\n </div>\n</div> \n\n <!-- AP-29JAN25 radio-button design check -->\n <!-- Radio -->\n<div *ngIf=\"field.type === 'Radio'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\"> \n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <div class=\"radio-options-container\">\n <div *ngFor=\"let option of field.options; let j = index\" class=\"radio-option\">\n <input type=\"radio\" [id]=\"'radio-' + field.id + '-' + j\" [name]=\"'radio-group-' + field.id\" [value]=\"option.value\"\n [(ngModel)]=\"field.selectedValue\" class=\"radio-input\">\n <label [for]=\"'radio-' + field.id + '-' + j\" class=\"radio-label\"> {{ option.value }}</label>\n </div>\n </div>\n </div>\n </div>\n</div>\n \n <!-- AP-29JAN25 drop-down design check -->\n <!-- Dropdown Field -->\n<div *ngIf=\"field.type === 'Dropdown'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\"> \n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <select id=\"options\" class=\"dropdown\">\n <option *ngFor=\"let option of field.options\" [value]=\"option.value\"> {{ option.value }} </option>\n </select>\n </div>\n </div>\n</div>\n\n <!-- Calendar -->\n<div *ngIf=\"field.type === 'Calendar'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Select Date' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <input type=\"date\" class=\"custom-input\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.date\" />\n </div>\n </div>\n</div>\n\n <!-- Email -->\n<div *ngIf=\"field.type === 'Email'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\"> {{ field.questionText ? field.questionText : 'Label' }} </label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <input type=\"email\" class=\"custom-input\" [placeholder]=\"field.question || 'Enter email'\" [readonly]=\"field.isReadOnly\" \n [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.email\" />\n </div>\n </div>\n</div>\n \n <!-- Numbers -->\n<div *ngIf=\"field.type === 'Number'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag> \n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <input type=\"number\" class=\"custom-input\" [placeholder]=\"field.question || 'Enter number'\" [readonly]=\"field.isReadOnly\" \n [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.value\" />\n </div>\n </div>\n</div>\n \n <!-- List -->\n<!-- <div *ngIf=\"field.type === 'List'\" class=\"list-container\" cdkDrag (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\">\n <label>{{ field.questionText }}</label>\n <ul><li *ngFor=\"let item of field.items\">{{ item }}</li></ul>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div> -->\n\n <!-- TextArea -->\n <!-- TextArea -->\n<div *ngIf=\"field.type === 'TextArea'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Enter your text' }}\n <span *ngIf=\"field.required\" class=\"text-red-500\">*</span>\n </label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <textarea class=\"custom-textarea\" [placeholder]=\"field.question || 'Enter detailed text here...'\" [style.height.px]=\"field.size || 100\"\n [readonly]=\"field.readOnly\" [class.hidden]=\"field.isHide\" [(ngModel)]=\"field.text\">\n </textarea>\n </div>\n </div>\n</div>\n\n<!-- AP-29JAN25 Image design change -->\n<!-- Image -->\n<div *ngIf=\"field.type === 'Image'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\"> {{ field.questionText ? field.questionText : 'Upload Image' }} </label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div>\n <input type=\"file\" accept=\"image/*\" class=\"custom-input\" />\n </div>\n </div>\n</div>\n\n <!-- Button -->\n<!-- <div *ngIf=\"field.type === 'Button'\" class=\"button-container\" cdkDrag (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\">\n <button>{{ field.questionText }}</button>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div> -->\n\n <!-- File -->\n <!-- AP-29JAN25 file design change -->\n<div *ngIf=\"field.type === 'File'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Upload File' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <input type=\"file\" class=\"custom-input\" />\n </div>\n </div>\n</div>\n\n <!-- Tables -->\n<!-- <div *ngIf=\"field.type === 'Tables'\" class=\"table-container\" cdkDrag (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\">\n <label>{{ field.questionText }}</label>\n <table [style.width.px]=\"field.colWidth\" [style.height.%]=\"field.rowHeight\">\n <thead><tr><th *ngFor=\"let header of field.headers\" [style.width.px]=\"field.colWidth / field.colNos\">{{ header }}</th></tr></thead>\n <tbody><tr *ngFor=\"let row of field.rows\"><td *ngFor=\"let cell of row\">{{ cell }}</td></tr></tbody>\n </table>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n</div> -->\n\n <!-- Book -->\n<!-- <div *ngIf=\"field.type === 'Book'\" style=\"padding: 10px; background-color: whitesmoke;\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" cdkDrag>\n <div class=\"flex\" style=\"display: flex;\">\n <div class=\"all-dots\"><div *ngFor=\"let _ of [1,2,3,4,5,6,7,8]\"></div></div>\n <div style=\"width: 97%;\">\n <div class=\"flex lab-conatiner\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Book Title' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div>\n </div>\n </div>\n</div> -->\n\n <!-- Label -->\n<div *ngIf=\"field.type === 'Label'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\"\n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n<div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\"/>\n </div>\n </div>\n </div>\n</div>\n\n</ng-container>\n</div>\n</div>\n\n\n\n\n", styles: [".center-frame{display:flex}.form-builder{width:25%;background-color:#fff;padding:10px;border-radius:10px;box-shadow:2px 2px 10px #0000001a}.form-builder .element{display:flex;align-items:center;gap:15px;margin-top:10px;padding:10px;border-radius:5px;background:#e9ecef;cursor:pointer;transition:background .3s ease,color .3s ease;color:#000}.form-builder .element:hover{background:#0250d9;color:#fff}.form-builder .element img{width:20px;height:20px;transition:filter .3s ease}.form-builder .element:hover img{filter:invert(1)}.form-builder .hover-label{font-size:14px;font-weight:500;color:#000;transition:color .3s ease}.form-builder .element:hover .hover-label{color:#fff}.form-builder .section-title{font-weight:700;font-size:16px;margin-top:10px;padding:5px;border-bottom:1px solid #ddd;color:#000}.form-builder .section-title:after{content:\"\\25bc\";float:right;font-size:12px;color:#555}.form-builder .section{margin-bottom:10px}.field-container{padding-right:5px;padding-left:5px}.field-wrapper{background-color:#eff8ff;border:1px solid #E6F3FF;border-radius:5px;padding:10px}.required:after{content:\"*\";color:red;margin-left:5px}.custom-input{width:100%;padding:8px;border:1px solid #DDDBDA;background-color:#fff;border-radius:5px;outline:none}.custom-input:focus{border-color:#00008b;box-shadow:0 0 5px #0000ff80}.delete-icon{width:20px;height:20px;cursor:pointer;opacity:0;visibility:hidden;transition:opacity .1s ease-in-out}.label-container:hover .delete-icon{opacity:1;visibility:visible}.form-preview{width:100%;height:100vh;overflow-y:auto;display:flex;flex-wrap:wrap;align-items:flex-start}.field-content{display:flex;flex-direction:column;gap:5px}.label-container{display:flex;justify-content:space-between;align-items:center}.custom-input,.custom-textarea,.dropdown,.checkbox-options-container,.radio-options-container{width:100%}.dropdown{width:100%;padding:8px;border:1px solid #ccc;border-radius:4px;background-color:#fff;font-size:14px;color:#333;outline:none;cursor:pointer}.dropdown:focus{border-color:#007bff;box-shadow:0 0 5px #007bff80}.checkbox-field-container:hover{box-shadow:0 2px 8px #0000001a}.checkbox-options-container{display:flex;flex-direction:column;gap:5px;padding:8px;min-height:38px;border:1px solid #DDDBDA;background-color:#fff;outline:none;border-radius:6px}.checkbox-option,.radio-option{display:flex;align-items:center;gap:8px;padding:8px;background-color:#fff;border-radius:4px;transition:background-color .2s ease}.checkbox-option:hover{background-color:#f1f3f5}.checkbox-input,.radio-input{width:18px;height:18px;accent-color:#4dabf7;cursor:pointer}.checkbox-label,.radio-label{font-size:14px;color:#495057;cursor:pointer;-webkit-user-select:none;user-select:none}.label-container label{font-size:16px;font-weight:600}.required:after{content:\" *\";color:red}.radio-options-container{display:flex;flex-direction:column;gap:5px;padding:8px;min-height:38px;border:1px solid #DDDBDA;background-color:#fff;outline:none;border-radius:6px}.radio-input:checked{border-color:#007bff;background-color:#007bff}.radio-input:checked:after{content:\"\";width:8px;height:8px;background:#fff;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.custom-textarea{width:100%;min-height:100px;border:1px solid #ccc;border-radius:4px;padding:8px;resize:vertical}.highlight{border:2px solid blue;background-color:#0000ff1a}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }] });
|
|
167
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ElementComponent, selector: "app-element", inputs: { bookletJSON: "bookletJSON", bookletId: "bookletId" }, outputs: { elementButtonClicked: "elementButtonClicked" }, viewQueries: [{ propertyName: "formContainer", first: true, predicate: ["formContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- AP 22JAN25 - form preview and All form elements -->\n <!-- AP 25FEB25 - All elements update -->\n<div class=\"center-frame\">\n <link href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\" rel=\"stylesheet\">\n\n<!-- Form Builder Section All Elements -->\n<div class=\"form-builder\">\n <ng-container *ngFor=\"let element of elements\">\n <div class=\"element\" (click)=\"addElement(element.type)\">\n <img src=\"../assets/icons/{{ element.img }}.svg\">\n <div class=\"hover-label\">{{ element.label }}</div>\n </div>\n </ng-container>\n</div>\n \n<div class=\"form-preview\" cdkDropList [cdkDropListData]=\"formElements\" (cdkDropListDropped)=\"drop($event)\">\n<ng-container *ngFor=\"let field of formElements; let i = index\" getProperties().elementProps>\n\n<!-- TextBox -->\n<div *ngIf=\"field.type === 'Text'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n [class.highlight]=\"selectedFieldIndex === i\" cdkDrag> \n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <input type=\"text\" class=\"custom-input\" [placeholder]=\"field.question || 'Enter text'\" [readonly]=\"field.isReadOnly\" \n [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.text\" />\n </div>\n </div>\n</div>\n\n<!-- Calendar -->\n<div *ngIf=\"field.type === 'Calendar'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n [class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Select Date' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <input type=\"date\" class=\"custom-input\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.date\" />\n </div>\n </div>\n</div>\n\n<!-- Email -->\n<div *ngIf=\"field.type === 'Email'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\"> {{ field.questionText ? field.questionText : 'Label' }} </label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <input type=\"email\" class=\"custom-input\" [placeholder]=\"field.question || 'Enter email'\" [readonly]=\"field.isReadOnly\" \n [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.email\" />\n </div>\n </div>\n</div>\n\n<!-- Numbers -->\n<div *ngIf=\"field.type === 'Number'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n [class.highlight]=\"selectedFieldIndex === i\" cdkDrag> \n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <input type=\"number\" class=\"custom-input\" [placeholder]=\"field.question || 'Enter number'\" [readonly]=\"field.isReadOnly\" \n [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.value\" />\n </div>\n </div>\n</div>\n \n<!-- TextArea -->\n<div *ngIf=\"field.type === 'TextArea'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n [class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Enter your text' }}\n <span *ngIf=\"field.required\" class=\"text-red-500\">*</span>\n </label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <textarea class=\"custom-textarea\" [placeholder]=\"field.question || 'Enter detailed text here...'\" [style.height.px]=\"field.size || 100\"\n [readonly]=\"field.readOnly\" [class.hidden]=\"field.isHide\" [(ngModel)]=\"field.text\">\n </textarea>\n </div>\n </div>\n</div>\n\n<!-- Label -->\n<div *ngIf=\"field.type === 'Label'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\"\n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n<div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\"/>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Image -->\n<div *ngIf=\"field.type === 'Image'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\"> {{ field.questionText ? field.questionText : 'Upload Image' }} </label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div>\n <input type=\"file\" accept=\"image/*\" class=\"custom-input\" />\n </div>\n </div>\n</div>\n\n <!-- File -->\n<div *ngIf=\"field.type === 'File'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n [class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Upload File' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <input type=\"file\" class=\"custom-input\" />\n </div>\n </div>\n</div>\n \n<!-- CheckBox -->\n<div *ngIf=\"field.type === 'CheckBox'\" class=\"checkbox-field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\"> \n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <div class=\"checkbox-options-container\">\n <div *ngFor=\"let option of field.options\" class=\"checkbox-option\">\n <input type=\"checkbox\" [id]=\"option.value + i\" [name]=\"field.id\" [value]=\"option.value\" class=\"checkbox-input\">\n <label [for]=\"option.value + i\" class=\"checkbox-label\">{{ option.label }}</label>\n </div>\n </div>\n </div>\n </div>\n</div> \n\n<!-- Radio -->\n<div *ngIf=\"field.type === 'Radio'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\"> \n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <div class=\"radio-options-container\">\n <div *ngFor=\"let option of field.options; let j = index\" class=\"radio-option\">\n <input type=\"radio\" [id]=\"'radio-' + field.id + '-' + j\" [name]=\"'radio-group-' + field.id\" [value]=\"option.value\"\n [(ngModel)]=\"field.selectedValue\" class=\"radio-input\">\n <label [for]=\"'radio-' + field.id + '-' + j\" class=\"radio-label\"> {{ option.label }}</label>\n </div>\n </div>\n </div>\n </div>\n</div>\n \n<!-- Dropdown -->\n<div *ngIf=\"field.type === 'Dropdown'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\"> \n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <select id=\"options\" class=\"dropdown\">\n <option *ngFor=\"let option of field.options\" [value]=\"option.value\"> {{ option.label }} </option>\n </select>\n </div>\n </div>\n</div>\n \n<!-- Tables -->\n<!-- <div *ngIf=\"field.type === 'Tables'\" class=\"table-container\" cdkDrag (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\">\n <label>{{ field.questionText }}</label>\n <table [style.width.px]=\"field.colWidth\" [style.height.%]=\"field.rowHeight\">\n <thead><tr><th *ngFor=\"let header of field.headers\" [style.width.px]=\"field.colWidth / field.colNos\">{{ header }}</th></tr></thead>\n <tbody><tr *ngFor=\"let row of field.rows\"><td *ngFor=\"let cell of row\">{{ cell }}</td></tr></tbody>\n </table>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n</div> -->\n\n <!-- Book -->\n<!-- <div *ngIf=\"field.type === 'Book'\" style=\"padding: 10px; background-color: whitesmoke;\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" cdkDrag>\n <div class=\"flex\" style=\"display: flex;\">\n <div class=\"all-dots\"><div *ngFor=\"let _ of [1,2,3,4,5,6,7,8]\"></div></div>\n <div style=\"width: 97%;\">\n <div class=\"flex lab-conatiner\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Book Title' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div>\n </div>\n </div>\n</div> -->\n\n<!-- List -->\n<!-- <div *ngIf=\"field.type === 'List'\" class=\"list-container\" cdkDrag (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\">\n <label>{{ field.questionText }}</label>\n <ul><li *ngFor=\"let item of field.items\">{{ item }}</li></ul>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div> -->\n \n<!-- Button -->\n<!-- <div *ngIf=\"field.type === 'Button'\" class=\"button-container\" cdkDrag (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\">\n <button>{{ field.questionText }}</button>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div> -->\n\n</ng-container>\n</div>\n</div>\n\n\n\n\n", styles: [".center-frame{display:flex;border:10px solid #86A8CD;border-right-width:0}.form-builder{width:25%;height:100vh;overflow-y:auto;background-color:#fff;padding:10px;border-radius:10px;box-shadow:2px 2px 10px #0000001a}.form-builder .element{display:flex;align-items:center;gap:15px;margin-top:10px;padding:10px;border-radius:5px;background:#e9ecef;cursor:pointer;transition:background .3s ease,color .3s ease;color:#000}.form-builder .element:hover{background:#0250d9;color:#fff}.form-builder .element img{width:20px;height:20px;transition:filter .3s ease}.form-builder .element:hover img{filter:invert(1)}.form-builder .hover-label{font-size:14px;font-weight:500;color:#000;transition:color .3s ease}.form-builder .element:hover .hover-label{color:#fff}.form-builder .section-title{font-weight:700;font-size:16px;margin-top:10px;padding:5px;border-bottom:1px solid #ddd;color:#000}.form-builder .section-title:after{content:\"\\25bc\";float:right;font-size:12px;color:#555}.form-builder .section{margin-bottom:10px}.field-container{padding-right:5px;padding-left:5px}.field-wrapper{background-color:#eff8ff;border:1px solid #E6F3FF;border-radius:5px;padding:10px}.required:after{content:\"*\";color:red;margin-left:5px}.custom-input{width:100%;padding:8px;border:1px solid #DDDBDA;background-color:#fff;border-radius:5px;outline:none}.custom-input:focus{border-color:#00008b;box-shadow:0 0 5px #0000ff80}.delete-icon{width:20px;height:20px;cursor:pointer;opacity:0;visibility:hidden;transition:opacity .1s ease-in-out}.label-container:hover .delete-icon{opacity:1;visibility:visible}.form-preview{width:100%;height:100vh;overflow-y:auto;display:flex;flex-wrap:wrap;align-items:flex-start;padding:10px;height:fit-content;max-height:100vh}.field-content{display:flex;flex-direction:column;gap:5px}.label-container{display:flex;justify-content:space-between;align-items:center}.custom-input,.custom-textarea,.dropdown,.checkbox-options-container,.radio-options-container{width:100%}.dropdown{width:100%;padding:8px;border:1px solid #ccc;border-radius:4px;background-color:#fff;font-size:14px;color:#333;outline:none;cursor:pointer}.dropdown:focus{border-color:#007bff;box-shadow:0 0 5px #007bff80}.checkbox-field-container:hover{box-shadow:0 2px 8px #0000001a}.checkbox-options-container{display:flex;flex-direction:column;gap:5px;padding:8px;min-height:38px;border:1px solid #DDDBDA;background-color:#fff;outline:none;border-radius:6px}.checkbox-option,.radio-option{display:flex;align-items:center;gap:8px;padding:8px;background-color:#fff;border-radius:4px;transition:background-color .2s ease}.checkbox-option:hover{background-color:#f1f3f5}.checkbox-input,.radio-input{width:18px;height:18px;accent-color:#4dabf7;cursor:pointer}.checkbox-label,.radio-label{font-size:14px;color:#495057;cursor:pointer;-webkit-user-select:none;user-select:none}.label-container label{font-size:16px;font-weight:600}.required:after{content:\" *\";color:red}.radio-options-container{display:flex;flex-direction:column;gap:5px;padding:8px;min-height:38px;border:1px solid #DDDBDA;background-color:#fff;outline:none;border-radius:6px}.radio-input:checked{border-color:#007bff;background-color:#007bff}.radio-input:checked:after{content:\"\";width:8px;height:8px;background:#fff;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.custom-textarea{width:100%;min-height:100px;border:1px solid #ccc;border-radius:4px;padding:8px;resize:vertical}.highlight{border:2px solid blue;background-color:#0000ff1a}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }] });
|
|
168
168
|
}
|
|
169
169
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElementComponent, decorators: [{
|
|
170
170
|
type: Component,
|
|
171
|
-
args: [{ selector: 'app-element', template: "<!-- AP 22JAN25 - form preview and All form elements -->\n <!-- AP 25FEB25 - All elements update -->\n<div class=\"center-frame\">\n <link href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\" rel=\"stylesheet\">\n\n <!-- Form Builder Section All Elements -->\n<div class=\"form-builder\">\n <ng-container *ngFor=\"let element of elements\">\n <div class=\"element\" (click)=\"addElement(element.type)\">\n <img src=\"../assets/icons/{{ element.img }}.svg\">\n <div class=\"hover-label\">{{ element.label }}</div>\n </div>\n </ng-container>\n</div>\n \n<div class=\"form-preview\" cdkDropList [cdkDropListData]=\"formElements\" (cdkDropListDropped)=\"drop($event)\">\n <ng-container *ngFor=\"let field of formElements; let i = index\" getProperties().elementProps>\n\n <!-- AP-29JAN25 remove empty classes -->\n <!-- TextBox -->\n <div *ngIf=\"field.type === 'Text'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n [class.highlight]=\"selectedFieldIndex === i\" cdkDrag> \n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <input type=\"text\" class=\"custom-input\" [placeholder]=\"field.question || 'Enter text'\" [readonly]=\"field.isReadOnly\" \n [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.text\" />\n </div>\n </div>\n</div>\n\n <!-- CheckBox -->\n<div *ngIf=\"field.type === 'CheckBox'\" class=\"checkbox-field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\"> \n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <div class=\"checkbox-options-container\">\n <div *ngFor=\"let option of field.options\" class=\"checkbox-option\">\n <input type=\"checkbox\" [id]=\"option.value + i\" [name]=\"field.id\" [value]=\"option.value\" class=\"checkbox-input\">\n <label [for]=\"option.value + i\" class=\"checkbox-label\">{{ option.label }}</label>\n </div>\n </div>\n </div>\n </div>\n</div> \n\n <!-- AP-29JAN25 radio-button design check -->\n <!-- Radio -->\n<div *ngIf=\"field.type === 'Radio'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\"> \n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <div class=\"radio-options-container\">\n <div *ngFor=\"let option of field.options; let j = index\" class=\"radio-option\">\n <input type=\"radio\" [id]=\"'radio-' + field.id + '-' + j\" [name]=\"'radio-group-' + field.id\" [value]=\"option.value\"\n [(ngModel)]=\"field.selectedValue\" class=\"radio-input\">\n <label [for]=\"'radio-' + field.id + '-' + j\" class=\"radio-label\"> {{ option.value }}</label>\n </div>\n </div>\n </div>\n </div>\n</div>\n \n <!-- AP-29JAN25 drop-down design check -->\n <!-- Dropdown Field -->\n<div *ngIf=\"field.type === 'Dropdown'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\"> \n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <select id=\"options\" class=\"dropdown\">\n <option *ngFor=\"let option of field.options\" [value]=\"option.value\"> {{ option.value }} </option>\n </select>\n </div>\n </div>\n</div>\n\n <!-- Calendar -->\n<div *ngIf=\"field.type === 'Calendar'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Select Date' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <input type=\"date\" class=\"custom-input\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.date\" />\n </div>\n </div>\n</div>\n\n <!-- Email -->\n<div *ngIf=\"field.type === 'Email'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\"> {{ field.questionText ? field.questionText : 'Label' }} </label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <input type=\"email\" class=\"custom-input\" [placeholder]=\"field.question || 'Enter email'\" [readonly]=\"field.isReadOnly\" \n [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.email\" />\n </div>\n </div>\n</div>\n \n <!-- Numbers -->\n<div *ngIf=\"field.type === 'Number'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag> \n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <input type=\"number\" class=\"custom-input\" [placeholder]=\"field.question || 'Enter number'\" [readonly]=\"field.isReadOnly\" \n [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.value\" />\n </div>\n </div>\n</div>\n \n <!-- List -->\n<!-- <div *ngIf=\"field.type === 'List'\" class=\"list-container\" cdkDrag (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\">\n <label>{{ field.questionText }}</label>\n <ul><li *ngFor=\"let item of field.items\">{{ item }}</li></ul>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div> -->\n\n <!-- TextArea -->\n <!-- TextArea -->\n<div *ngIf=\"field.type === 'TextArea'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Enter your text' }}\n <span *ngIf=\"field.required\" class=\"text-red-500\">*</span>\n </label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <textarea class=\"custom-textarea\" [placeholder]=\"field.question || 'Enter detailed text here...'\" [style.height.px]=\"field.size || 100\"\n [readonly]=\"field.readOnly\" [class.hidden]=\"field.isHide\" [(ngModel)]=\"field.text\">\n </textarea>\n </div>\n </div>\n</div>\n\n<!-- AP-29JAN25 Image design change -->\n<!-- Image -->\n<div *ngIf=\"field.type === 'Image'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\"> {{ field.questionText ? field.questionText : 'Upload Image' }} </label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div>\n <input type=\"file\" accept=\"image/*\" class=\"custom-input\" />\n </div>\n </div>\n</div>\n\n <!-- Button -->\n<!-- <div *ngIf=\"field.type === 'Button'\" class=\"button-container\" cdkDrag (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\">\n <button>{{ field.questionText }}</button>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div> -->\n\n <!-- File -->\n <!-- AP-29JAN25 file design change -->\n<div *ngIf=\"field.type === 'File'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Upload File' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <input type=\"file\" class=\"custom-input\" />\n </div>\n </div>\n</div>\n\n <!-- Tables -->\n<!-- <div *ngIf=\"field.type === 'Tables'\" class=\"table-container\" cdkDrag (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\">\n <label>{{ field.questionText }}</label>\n <table [style.width.px]=\"field.colWidth\" [style.height.%]=\"field.rowHeight\">\n <thead><tr><th *ngFor=\"let header of field.headers\" [style.width.px]=\"field.colWidth / field.colNos\">{{ header }}</th></tr></thead>\n <tbody><tr *ngFor=\"let row of field.rows\"><td *ngFor=\"let cell of row\">{{ cell }}</td></tr></tbody>\n </table>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n</div> -->\n\n <!-- Book -->\n<!-- <div *ngIf=\"field.type === 'Book'\" style=\"padding: 10px; background-color: whitesmoke;\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" cdkDrag>\n <div class=\"flex\" style=\"display: flex;\">\n <div class=\"all-dots\"><div *ngFor=\"let _ of [1,2,3,4,5,6,7,8]\"></div></div>\n <div style=\"width: 97%;\">\n <div class=\"flex lab-conatiner\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Book Title' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div>\n </div>\n </div>\n</div> -->\n\n <!-- Label -->\n<div *ngIf=\"field.type === 'Label'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\"\n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n<div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\"/>\n </div>\n </div>\n </div>\n</div>\n\n</ng-container>\n</div>\n</div>\n\n\n\n\n", styles: [".center-frame{display:flex}.form-builder{width:25%;background-color:#fff;padding:10px;border-radius:10px;box-shadow:2px 2px 10px #0000001a}.form-builder .element{display:flex;align-items:center;gap:15px;margin-top:10px;padding:10px;border-radius:5px;background:#e9ecef;cursor:pointer;transition:background .3s ease,color .3s ease;color:#000}.form-builder .element:hover{background:#0250d9;color:#fff}.form-builder .element img{width:20px;height:20px;transition:filter .3s ease}.form-builder .element:hover img{filter:invert(1)}.form-builder .hover-label{font-size:14px;font-weight:500;color:#000;transition:color .3s ease}.form-builder .element:hover .hover-label{color:#fff}.form-builder .section-title{font-weight:700;font-size:16px;margin-top:10px;padding:5px;border-bottom:1px solid #ddd;color:#000}.form-builder .section-title:after{content:\"\\25bc\";float:right;font-size:12px;color:#555}.form-builder .section{margin-bottom:10px}.field-container{padding-right:5px;padding-left:5px}.field-wrapper{background-color:#eff8ff;border:1px solid #E6F3FF;border-radius:5px;padding:10px}.required:after{content:\"*\";color:red;margin-left:5px}.custom-input{width:100%;padding:8px;border:1px solid #DDDBDA;background-color:#fff;border-radius:5px;outline:none}.custom-input:focus{border-color:#00008b;box-shadow:0 0 5px #0000ff80}.delete-icon{width:20px;height:20px;cursor:pointer;opacity:0;visibility:hidden;transition:opacity .1s ease-in-out}.label-container:hover .delete-icon{opacity:1;visibility:visible}.form-preview{width:100%;height:100vh;overflow-y:auto;display:flex;flex-wrap:wrap;align-items:flex-start}.field-content{display:flex;flex-direction:column;gap:5px}.label-container{display:flex;justify-content:space-between;align-items:center}.custom-input,.custom-textarea,.dropdown,.checkbox-options-container,.radio-options-container{width:100%}.dropdown{width:100%;padding:8px;border:1px solid #ccc;border-radius:4px;background-color:#fff;font-size:14px;color:#333;outline:none;cursor:pointer}.dropdown:focus{border-color:#007bff;box-shadow:0 0 5px #007bff80}.checkbox-field-container:hover{box-shadow:0 2px 8px #0000001a}.checkbox-options-container{display:flex;flex-direction:column;gap:5px;padding:8px;min-height:38px;border:1px solid #DDDBDA;background-color:#fff;outline:none;border-radius:6px}.checkbox-option,.radio-option{display:flex;align-items:center;gap:8px;padding:8px;background-color:#fff;border-radius:4px;transition:background-color .2s ease}.checkbox-option:hover{background-color:#f1f3f5}.checkbox-input,.radio-input{width:18px;height:18px;accent-color:#4dabf7;cursor:pointer}.checkbox-label,.radio-label{font-size:14px;color:#495057;cursor:pointer;-webkit-user-select:none;user-select:none}.label-container label{font-size:16px;font-weight:600}.required:after{content:\" *\";color:red}.radio-options-container{display:flex;flex-direction:column;gap:5px;padding:8px;min-height:38px;border:1px solid #DDDBDA;background-color:#fff;outline:none;border-radius:6px}.radio-input:checked{border-color:#007bff;background-color:#007bff}.radio-input:checked:after{content:\"\";width:8px;height:8px;background:#fff;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.custom-textarea{width:100%;min-height:100px;border:1px solid #ccc;border-radius:4px;padding:8px;resize:vertical}.highlight{border:2px solid blue;background-color:#0000ff1a}\n"] }]
|
|
171
|
+
args: [{ selector: 'app-element', template: "<!-- AP 22JAN25 - form preview and All form elements -->\n <!-- AP 25FEB25 - All elements update -->\n<div class=\"center-frame\">\n <link href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\" rel=\"stylesheet\">\n\n<!-- Form Builder Section All Elements -->\n<div class=\"form-builder\">\n <ng-container *ngFor=\"let element of elements\">\n <div class=\"element\" (click)=\"addElement(element.type)\">\n <img src=\"../assets/icons/{{ element.img }}.svg\">\n <div class=\"hover-label\">{{ element.label }}</div>\n </div>\n </ng-container>\n</div>\n \n<div class=\"form-preview\" cdkDropList [cdkDropListData]=\"formElements\" (cdkDropListDropped)=\"drop($event)\">\n<ng-container *ngFor=\"let field of formElements; let i = index\" getProperties().elementProps>\n\n<!-- TextBox -->\n<div *ngIf=\"field.type === 'Text'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n [class.highlight]=\"selectedFieldIndex === i\" cdkDrag> \n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <input type=\"text\" class=\"custom-input\" [placeholder]=\"field.question || 'Enter text'\" [readonly]=\"field.isReadOnly\" \n [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.text\" />\n </div>\n </div>\n</div>\n\n<!-- Calendar -->\n<div *ngIf=\"field.type === 'Calendar'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n [class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Select Date' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <input type=\"date\" class=\"custom-input\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.date\" />\n </div>\n </div>\n</div>\n\n<!-- Email -->\n<div *ngIf=\"field.type === 'Email'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\"> {{ field.questionText ? field.questionText : 'Label' }} </label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <input type=\"email\" class=\"custom-input\" [placeholder]=\"field.question || 'Enter email'\" [readonly]=\"field.isReadOnly\" \n [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.email\" />\n </div>\n </div>\n</div>\n\n<!-- Numbers -->\n<div *ngIf=\"field.type === 'Number'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n [class.highlight]=\"selectedFieldIndex === i\" cdkDrag> \n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <input type=\"number\" class=\"custom-input\" [placeholder]=\"field.question || 'Enter number'\" [readonly]=\"field.isReadOnly\" \n [class.hidden]=\"field.isHidden\" [(ngModel)]=\"field.value\" />\n </div>\n </div>\n</div>\n \n<!-- TextArea -->\n<div *ngIf=\"field.type === 'TextArea'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n [class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Enter your text' }}\n <span *ngIf=\"field.required\" class=\"text-red-500\">*</span>\n </label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div> \n <textarea class=\"custom-textarea\" [placeholder]=\"field.question || 'Enter detailed text here...'\" [style.height.px]=\"field.size || 100\"\n [readonly]=\"field.readOnly\" [class.hidden]=\"field.isHide\" [(ngModel)]=\"field.text\">\n </textarea>\n </div>\n </div>\n</div>\n\n<!-- Label -->\n<div *ngIf=\"field.type === 'Label'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\"\n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n<div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\"/>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Image -->\n<div *ngIf=\"field.type === 'Image'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\"> {{ field.questionText ? field.questionText : 'Upload Image' }} </label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div>\n <input type=\"file\" accept=\"image/*\" class=\"custom-input\" />\n </div>\n </div>\n</div>\n\n <!-- File -->\n<div *ngIf=\"field.type === 'File'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n [class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Upload File' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <input type=\"file\" class=\"custom-input\" />\n </div>\n </div>\n</div>\n \n<!-- CheckBox -->\n<div *ngIf=\"field.type === 'CheckBox'\" class=\"checkbox-field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\"> \n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <div class=\"checkbox-options-container\">\n <div *ngFor=\"let option of field.options\" class=\"checkbox-option\">\n <input type=\"checkbox\" [id]=\"option.value + i\" [name]=\"field.id\" [value]=\"option.value\" class=\"checkbox-input\">\n <label [for]=\"option.value + i\" class=\"checkbox-label\">{{ option.label }}</label>\n </div>\n </div>\n </div>\n </div>\n</div> \n\n<!-- Radio -->\n<div *ngIf=\"field.type === 'Radio'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\"> \n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <div class=\"radio-options-container\">\n <div *ngFor=\"let option of field.options; let j = index\" class=\"radio-option\">\n <input type=\"radio\" [id]=\"'radio-' + field.id + '-' + j\" [name]=\"'radio-group-' + field.id\" [value]=\"option.value\"\n [(ngModel)]=\"field.selectedValue\" class=\"radio-input\">\n <label [for]=\"'radio-' + field.id + '-' + j\" class=\"radio-label\"> {{ option.label }}</label>\n </div>\n </div>\n </div>\n </div>\n</div>\n \n<!-- Dropdown -->\n<div *ngIf=\"field.type === 'Dropdown'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" \n[class.highlight]=\"selectedFieldIndex === i\" cdkDrag>\n <div class=\"field-wrapper\">\n <div class=\"field-content\">\n <div class=\"label-container\"> \n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Label' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <select id=\"options\" class=\"dropdown\">\n <option *ngFor=\"let option of field.options\" [value]=\"option.value\"> {{ option.label }} </option>\n </select>\n </div>\n </div>\n</div>\n \n<!-- Tables -->\n<!-- <div *ngIf=\"field.type === 'Tables'\" class=\"table-container\" cdkDrag (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\">\n <label>{{ field.questionText }}</label>\n <table [style.width.px]=\"field.colWidth\" [style.height.%]=\"field.rowHeight\">\n <thead><tr><th *ngFor=\"let header of field.headers\" [style.width.px]=\"field.colWidth / field.colNos\">{{ header }}</th></tr></thead>\n <tbody><tr *ngFor=\"let row of field.rows\"><td *ngFor=\"let cell of row\">{{ cell }}</td></tr></tbody>\n </table>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n</div> -->\n\n <!-- Book -->\n<!-- <div *ngIf=\"field.type === 'Book'\" style=\"padding: 10px; background-color: whitesmoke;\" (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\" cdkDrag>\n <div class=\"flex\" style=\"display: flex;\">\n <div class=\"all-dots\"><div *ngFor=\"let _ of [1,2,3,4,5,6,7,8]\"></div></div>\n <div style=\"width: 97%;\">\n <div class=\"flex lab-conatiner\">\n <label [class.required]=\"field.required\">{{ field.questionText ? field.questionText : 'Book Title' }}</label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div>\n </div>\n </div>\n</div> -->\n\n<!-- List -->\n<!-- <div *ngIf=\"field.type === 'List'\" class=\"list-container\" cdkDrag (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\">\n <label>{{ field.questionText }}</label>\n <ul><li *ngFor=\"let item of field.items\">{{ item }}</li></ul>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div> -->\n \n<!-- Button -->\n<!-- <div *ngIf=\"field.type === 'Button'\" class=\"button-container\" cdkDrag (click)=\"selectElement(i)\" [ngStyle]=\"getFontStyles(field)\">\n <button>{{ field.questionText }}</button>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" />\n </div> -->\n\n</ng-container>\n</div>\n</div>\n\n\n\n\n", styles: [".center-frame{display:flex;border:10px solid #86A8CD;border-right-width:0}.form-builder{width:25%;height:100vh;overflow-y:auto;background-color:#fff;padding:10px;border-radius:10px;box-shadow:2px 2px 10px #0000001a}.form-builder .element{display:flex;align-items:center;gap:15px;margin-top:10px;padding:10px;border-radius:5px;background:#e9ecef;cursor:pointer;transition:background .3s ease,color .3s ease;color:#000}.form-builder .element:hover{background:#0250d9;color:#fff}.form-builder .element img{width:20px;height:20px;transition:filter .3s ease}.form-builder .element:hover img{filter:invert(1)}.form-builder .hover-label{font-size:14px;font-weight:500;color:#000;transition:color .3s ease}.form-builder .element:hover .hover-label{color:#fff}.form-builder .section-title{font-weight:700;font-size:16px;margin-top:10px;padding:5px;border-bottom:1px solid #ddd;color:#000}.form-builder .section-title:after{content:\"\\25bc\";float:right;font-size:12px;color:#555}.form-builder .section{margin-bottom:10px}.field-container{padding-right:5px;padding-left:5px}.field-wrapper{background-color:#eff8ff;border:1px solid #E6F3FF;border-radius:5px;padding:10px}.required:after{content:\"*\";color:red;margin-left:5px}.custom-input{width:100%;padding:8px;border:1px solid #DDDBDA;background-color:#fff;border-radius:5px;outline:none}.custom-input:focus{border-color:#00008b;box-shadow:0 0 5px #0000ff80}.delete-icon{width:20px;height:20px;cursor:pointer;opacity:0;visibility:hidden;transition:opacity .1s ease-in-out}.label-container:hover .delete-icon{opacity:1;visibility:visible}.form-preview{width:100%;height:100vh;overflow-y:auto;display:flex;flex-wrap:wrap;align-items:flex-start;padding:10px;height:fit-content;max-height:100vh}.field-content{display:flex;flex-direction:column;gap:5px}.label-container{display:flex;justify-content:space-between;align-items:center}.custom-input,.custom-textarea,.dropdown,.checkbox-options-container,.radio-options-container{width:100%}.dropdown{width:100%;padding:8px;border:1px solid #ccc;border-radius:4px;background-color:#fff;font-size:14px;color:#333;outline:none;cursor:pointer}.dropdown:focus{border-color:#007bff;box-shadow:0 0 5px #007bff80}.checkbox-field-container:hover{box-shadow:0 2px 8px #0000001a}.checkbox-options-container{display:flex;flex-direction:column;gap:5px;padding:8px;min-height:38px;border:1px solid #DDDBDA;background-color:#fff;outline:none;border-radius:6px}.checkbox-option,.radio-option{display:flex;align-items:center;gap:8px;padding:8px;background-color:#fff;border-radius:4px;transition:background-color .2s ease}.checkbox-option:hover{background-color:#f1f3f5}.checkbox-input,.radio-input{width:18px;height:18px;accent-color:#4dabf7;cursor:pointer}.checkbox-label,.radio-label{font-size:14px;color:#495057;cursor:pointer;-webkit-user-select:none;user-select:none}.label-container label{font-size:16px;font-weight:600}.required:after{content:\" *\";color:red}.radio-options-container{display:flex;flex-direction:column;gap:5px;padding:8px;min-height:38px;border:1px solid #DDDBDA;background-color:#fff;outline:none;border-radius:6px}.radio-input:checked{border-color:#007bff;background-color:#007bff}.radio-input:checked:after{content:\"\";width:8px;height:8px;background:#fff;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.custom-textarea{width:100%;min-height:100px;border:1px solid #ccc;border-radius:4px;padding:8px;resize:vertical}.highlight{border:2px solid blue;background-color:#0000ff1a}\n"] }]
|
|
172
172
|
}], ctorParameters: () => [{ type: i1.FormBuilderService }], propDecorators: { elementButtonClicked: [{
|
|
173
173
|
type: Output
|
|
174
174
|
}], formContainer: [{
|
|
@@ -179,4 +179,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
179
179
|
}], bookletId: [{
|
|
180
180
|
type: Input
|
|
181
181
|
}] } });
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvYnVpbGRlci9lbGVtZW50L2VsZW1lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BhZ2VzL2J1aWxkZXIvZWxlbWVudC9lbGVtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtEQUFrRDtBQUNsRCxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFpQixTQUFTLEdBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFRcEMsTUFBTSxPQUFPLGdCQUFnQjtJQVVQO0lBUlYsb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUNoQyxhQUFhLENBQWE7SUFDN0MsV0FBVyxDQUFNO0lBQ2pCLFNBQVMsQ0FBTTtJQUN4QixZQUFZLEdBQVksS0FBSyxDQUFDLENBQUMsZ0RBQWdEO0lBQy9FLEtBQUssQ0FBTTtJQUNYLFlBQVksR0FBVSxFQUFFLENBQUM7SUFDekIsUUFBUSxHQUFVLEVBQUUsQ0FBQztJQUNyQixZQUFvQixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUMxRCxDQUFDO0lBRUgsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFO1lBQzlELEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUU7WUFDOUQsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTtZQUNyRCxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO1lBQ2xELEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7WUFDckQsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtZQUN4RCxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO1lBQ2xELEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7WUFDckQsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtZQUNsRCxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO1lBQ3RELEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUU7WUFDMUQsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRTtZQUM5RCxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO1lBQ3JELEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7WUFDbEQsRUFBRSxNQUFNLEVBQUUs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QUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDaEMsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxXQUFXLENBQUM7WUFDMUMsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsWUFBWSxDQUFDO1lBQzFDLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFdBQVcsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7d0dBdktVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLG1UQ1o3Qiw0NVhBZ1BBOzs0RkRwT2EsZ0JBQWdCO2tCQU41QixTQUFTOytCQUNFLGFBQWE7dUZBT2Isb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNxQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ2pCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFQIDIySkFOMjUgLSBmb3JtIHByZXZpZXcgYW5kIEFsbCBmb3JtIGVsZW1lbnRzXG5pbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0tYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZWxlbWVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGVtZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWxlbWVudC5jb21wb25lbnQuY3NzJ10sXG59KVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudENvbXBvbmVudCB7XG5cbiAgQE91dHB1dCgpIGVsZW1lbnRCdXR0b25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBWaWV3Q2hpbGQoJ2Zvcm1Db250YWluZXInKSBmb3JtQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBASW5wdXQoKSBib29rbGV0SlNPTjogYW55O1xuICBASW5wdXQoKSBib29rbGV0SWQ6IGFueTtcbiAgZHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7IC8vIFRyYWNrcyB3aGV0aGVyIHRoZSBkcm9wZG93biBpcyBvcGVuIG9yIGNsb3NlZFxuICBmaWVsZDogYW55O1xuICBmb3JtRWxlbWVudHM6IGFueVtdID0gW107XG4gIGVsZW1lbnRzOiBhbnlbXSA9IFtdO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyU2VydmljZTogRm9ybUJ1aWxkZXJTZXJ2aWNlKSB7XG4gIH1cbiBcbm5nT25Jbml0KCkge1xuICB0aGlzLmVsZW1lbnRzID0gW1xuICAgIHsgXCJ0eXBlXCI6IFwiQ2FsZW5kYXJcIiwgXCJpbWdcIjogXCJDYWxlbmRhclwiLCBcImxhYmVsXCI6IFwiQ2FsZW5kYXJcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiQ2hlY2tCb3hcIiwgXCJpbWdcIjogXCJDaGVja0JveFwiLCBcImxhYmVsXCI6IFwiQ2hlY2tCb3hcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiRW1haWxcIiwgXCJpbWdcIjogXCJFbWFpbFwiLCBcImxhYmVsXCI6IFwiRW1haWxcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiRmlsZVwiLCBcImltZ1wiOiBcIkZpbGVcIiwgXCJsYWJlbFwiOiBcIkZpbGVcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiSW1hZ2VcIiwgXCJpbWdcIjogXCJJbWFnZVwiLCBcImxhYmVsXCI6IFwiSW1hZ2VcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiTnVtYmVyXCIsIFwiaW1nXCI6IFwiTnVtYmVyXCIsIFwibGFiZWxcIjogXCJOdW1iZXJcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiTGlzdFwiLCBcImltZ1wiOiBcIkxpc3RcIiwgXCJsYWJlbFwiOiBcIkxpc3RcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiUmFkaW9cIiwgXCJpbWdcIjogXCJSYWRpb1wiLCBcImxhYmVsXCI6IFwiUmFkaW9cIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiVGV4dFwiLCBcImltZ1wiOiBcIlRleHRcIiwgXCJsYWJlbFwiOiBcIlRleHRcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiVGFibGVzXCIsIFwiaW1nXCI6IFwiVGFibGVcIiwgXCJsYWJlbFwiOiBcIlRhYmxlXCIgfSxcbiAgICB7IFwidHlwZVwiOiBcIkRyb3Bkb3duXCIsIFwiaW1nXCI6IFwiRHJvcFwiLCBcImxhYmVsXCI6IFwiRHJvcGRvd25cIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiVGV4dEFyZWFcIiwgXCJpbWdcIjogXCJUZXh0QXJlYVwiLCBcImxhYmVsXCI6IFwiVGV4dEFyZWFcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiTGFiZWxcIiwgXCJpbWdcIjogXCJMYWJlbFwiLCBcImxhYmVsXCI6IFwiTGFiZWxcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiQm9va1wiLCBcImltZ1wiOiBcIkJvb2tcIiwgXCJsYWJlbFwiOiBcIkJvb2tcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiQnV0dG9uXCIsIFwiaW1nXCI6IFwiQnV0dG9uXCIsIFwibGFiZWxcIjogXCJCdXR0b25cIiB9XG4gIF07XG4gICB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5mb3JtRWxlbWVudHMkLnN1YnNjcmliZSgoZWxlbWVudHMpID0+IHtcbiAgICAgdGhpcy5mb3JtRWxlbWVudHMgPSBlbGVtZW50cztcbiB9KTtcbiBpZiAodGhpcy5ib29rbGV0SlNPTikge1xuICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG59IGVsc2Uge1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc3RhdHVzJywgXCJuZXdcIik7XG59XG59XG4vLyBBUCAtIDI2RkVCMjUgLSBBZGRlZCBuZ09uQ2hhbmdlcyB0byBoYW5kbGUgY2hhbmdlcyBpbiBib29rbGV0SlNPTlxubmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICBpZiAoY2hhbmdlc1snYm9va2xldEpTT04nXSAmJiBjaGFuZ2VzWydib29rbGV0SlNPTiddLmN1cnJlbnRWYWx1ZSkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcbiAgICBjb25zb2xlLmxvZygnY2hhbmdlcycsIGNoYW5nZXMpO1xuICB9XG59XG5cbnByaXZhdGUgaW5pdGlhbGl6ZUZvcm0oKSB7XG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzdGF0dXMnLCBcImVkaXRcIik7XG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd1bmlxdWVfaWQnLCB0aGlzLmJvb2tsZXRJZCk7XG4gIHRoaXMuZm9ybUVsZW1lbnRzID0gW107XG4gIHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLmNsZWFyRWxlbWVudHMoKTtcblxuICBjb25zdCBib29rUXVlc3Rpb25zTWFwS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuYm9va2xldEpTT04uYm9va1F1ZXN0aW9uc01hcCB8fCB7fSk7XG4gIFxuICAvLyBBc3NpZ24gdGhlIGZpcnN0IGtleSBmcm9tIGJvb2tRdWVzdGlvbnNNYXAgdG8gYm9va2xldElkXG4gIHRoaXMuYm9va2xldElkID0gYm9va1F1ZXN0aW9uc01hcEtleXNbMF07XG5cbiAgdGhpcy5ib29rbGV0SlNPTi5ib29rUXVlc3Rpb25zTWFwW3RoaXMuYm9va2xldElkXS5zdWJRdWVzdGlvbnMuZm9yRWFjaChuZXdFbGVtZW50ID0+IHtcbiAgICBpZiAodGhpcy5ib29rbGV0SlNPTi5zcU9wdGlvbnMgJiYgdGhpcy5ib29rbGV0SlNPTi5zcU9wdGlvbnNbbmV3RWxlbWVudC5pZF0pIHtcbiAgICAgIG5ld0VsZW1lbnQub3B0aW9ucyA9IHRoaXMuYm9va2xldEpTT04uc3FPcHRpb25zW25ld0VsZW1lbnQuaWRdLm9wdGlvbnM7XG4gICAgfVxuICAgIHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLmFkZEVsZW1lbnQobmV3RWxlbWVudCk7XG4gIH0pO1xuXG4gIHRoaXMuZm9ybUVsZW1lbnRzID0gdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuZ2V0RWxlbWVudHMoKTtcbn1cblxuZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZm9ybUVsZW1lbnRzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICB9XG5cbiAgLy8gQWRkIHRoaXMgbWV0aG9kIHRvIGhhbmRsZSBlbGVtZW50IHNlbGVjdGlvblxuICBzZWxlY3RFbGVtZW50KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnNlbGVjdGVkRmllbGRJbmRleCA9IGluZGV4O1xuICAgIHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLnNldFNlbGVjdGVkRWxlbWVudChpbmRleCk7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZm9ybUVsZW1lbnRzW2luZGV4XTtcbiAgICB0aGlzLmVsZW1lbnRCdXR0b25DbGlja2VkLmVtaXQoZWxlbWVudC50eXBlKTsgIFxuICB9XG4gIHNlbGVjdGVkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZEZpZWxkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGFkZEVsZW1lbnQodHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICBjb25zdCB1bmlxdWVfaWQgPSB1dWlkdjQoKTtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0ge1xuICAgICAgaWQ6IHVuaXF1ZV9pZCxcbiAgICAgIHVpZDogdW5pcXVlX2lkLFxuICAgICAgbmFtZTogJycsXG4gICAgICB0eXBlLFxuICAgICAgcXVlc3Rpb25UZXh0OiAnJyxcbiAgICAgIHF1ZXN0aW9uOiAnJyxcbiAgICAgIGhlbHBUZXh0OiAnJyxcbiAgICAgIGVycm9yTWVzc2FnZTogJycsXG4gICAgICBpc1JlYWRPbmx5OiBmYWxzZSxcbiAgICAgIGlzSGlkZGVuOiBmYWxzZSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIHN1YlRleHQ6ICcnLFxuICAgICAgcmVmZXJlbmNlRmllbGQ6ICcnLFxuICAgICAgYWRkaXRpb25hbFJpY2hDb250ZW50OiAnJyxcbiAgICAgIGdyb3VwTmFtZTogJycsXG4gICAgICBpc0RhdGVCYWNrd2FyZDogZmFsc2UsXG4gICAgICB0aXRsZTogJycsXG4gICAgICBzdWJUaXRsZTogJycsXG4gICAgICBpc0RhdGVGb3J3YXJkOiBmYWxzZSxcbiAgICAgIGlzT3B0aW9uYWw6IGZhbHNlLFxuICAgICAgaXNUaXRsZTogZmFsc2UsXG4gICAgICBuZXh0UXVlc3Rpb246ICcnLFxuICAgICAgYWxsb3dlZEZpbGVFeHRlbnNpb25zOiAnJyxcbiAgICAgIHF1ZXN0aW9uTnVtYmVyOiB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5nZXRFbGVtZW50cygpLmxlbmd0aCArIDEsXG4gICAgICBxdWVzdGlvbkJvb2tJZDogJycsXG4gICAgICBwYXJlbnRRdWVzdGlvbjogJycsXG4gICAgICBmaWVsZHNNZXRhOiAnJyxcbiAgICAgIHJlY29yZFR5cGVOYW1lOiAnJyxcbiAgICAgIHJlY29yZFR5cGVJZDogJycsXG4gICAgICB0cmFja2luZ0lkOiAnJyxcbiAgICAgIGRhdGVUZXh0OiAnJyxcbiAgICAgIHRpbWVUZXh0OiAnJyxcbiAgICAgIHJlY29yZElkOiAnJyxcbiAgICAgIHFiUmVmZXJlbmNlOiAnJyxcbiAgICAgIHFiUmVmZXJlbmNlUXVlc3Rpb25zOiAnJyxcbiAgICAgIHF1ZXN0aW9uQm9va1N1YlRpdGxlOiAnJyxcbiAgICAgIHN0eWxlOiAnJyxcbiAgICAgIG9wdGlvbnM6IHR5cGUgPT09ICdEcm9wZG93bicgfHwgdHlwZSA9PT0gJ1JhZGlvJyB8fCB0eXBlID09PSAnQ2hlY2tCb3gnID8gW10gOiBudWxsLFxuICAgIFxuICAgIH07XG4gICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuYWRkRWxlbWVudChuZXdFbGVtZW50KTtcbiAgICB0aGlzLmZvcm1FbGVtZW50cyA9IHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLmdldEVsZW1lbnRzKCk7XG4gIH1cblxuICAvLyBSZW1vdmUgYW4gZWxlbWVudCBieSBpbmRleFxuICByZW1vdmVFbGVtZW50KGZpZWxkOiBhbnksaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLnJlbW92ZUVsZW1lbnRDb21wb25lbnQoZmllbGQuaWQpO1xuICAgIHRoaXMuZm9ybUVsZW1lbnRzPXRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLmdldEVsZW1lbnRzKCk7XG4gIH1cbiAgXG4gIGdldEZvbnRTdHlsZXMoZmllbGQ6IGFueSk6IGFueSB7XG4gICAgY29uc3Qgc3R5bGVzID0gIHtcbiAgICAgICdmb250LWZhbWlseSc6IGZpZWxkLmZvbnQgfHwgJ0hlbHZldGljYSBOZXVlJyxcbiAgICAgICdmb250LXdlaWdodCc6IGZpZWxkLmZvbnRXZWlnaHQgfHwgJzQwMCcsXG4gICAgICAnd2lkdGgnOiBgJHsoZmllbGQuc2l6ZSB8fCAxMikgLyAxMiAqIDEwMH0lYCwgXG4gICAgICAnbWluLWhlaWdodCc6IGZpZWxkLmhlaWdodCA/IGAke2ZpZWxkLmhlaWdodH1weGAgOiAnYXV0bycsIFxuICAgICAgJ3RleHQtYWxpZ24nOiBmaWVsZC50ZXh0QWxpZ24gfHwgJ2xlZnQnLFxuICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnNXB4JyxcbiAgICAgICdtYXJnaW4tYm90dG9tJzogJzEwcHgnIFxuICAgIH07XG4gICAgXG4gICAgLy8gSGFuZGxlIGFycmF5IG9mIHN0eWxlIGNsYXNzZXNcbiAgICBpZiAoZmllbGQuc3R5bGVzICYmIEFycmF5LmlzQXJyYXkoZmllbGQuc3R5bGVzKSkge1xuICAgICAgaWYgKGZpZWxkLnN0eWxlcy5pbmNsdWRlcygnYm9sZCcpKSB7XG4gICAgICAgIHN0eWxlc1snZm9udC13ZWlnaHQnXSA9ICc3MDAnO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLnN0eWxlcy5pbmNsdWRlcygnaXRhbGljJykpIHtcbiAgICAgICAgc3R5bGVzWydmb250LXN0eWxlJ10gPSAnaXRhbGljJztcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC5zdHlsZXMuaW5jbHVkZXMoJ3VuZGVybGluZScpKSB7XG4gICAgICAgIHN0eWxlc1sndGV4dC1kZWNvcmF0aW9uJ10gPSAndW5kZXJsaW5lJztcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC5zdHlsZXMuaW5jbHVkZXMoJ2NhcGl0YWxpemUnKSkge1xuICAgICAgICBzdHlsZXNbJ3RleHQtdHJhbnNmb3JtJ10gPSAnY2FwaXRhbGl6ZSc7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQuc3R5bGVzLmluY2x1ZGVzKCdsb3dlcmNhc2UnKSkge1xuICAgICAgICBzdHlsZXNbJ3RleHQtdHJhbnNmb3JtJ10gPSAnbG93ZXJjYXNlJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGVzO1xuICB9XG4gIH1cblxuXG4iLCI8IS0tIEFQIDIySkFOMjUgLSBmb3JtIHByZXZpZXcgYW5kIEFsbCBmb3JtIGVsZW1lbnRzIC0tPlxuIDwhLS0gQVAgMjVGRUIyNSAtIEFsbCBlbGVtZW50cyB1cGRhdGUgLS0+XG48ZGl2IGNsYXNzPVwiY2VudGVyLWZyYW1lXCI+XG4gIDxsaW5rIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9Um9ib3RvOjMwMCw0MDAsNTAwJmRpc3BsYXk9c3dhcFwiIHJlbD1cInN0eWxlc2hlZXRcIj5cblxuICAgPCEtLSBGb3JtIEJ1aWxkZXIgU2VjdGlvbiBBbGwgRWxlbWVudHMgLS0+XG48ZGl2IGNsYXNzPVwiZm9ybS1idWlsZGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBlbGVtZW50c1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImVsZW1lbnRcIiAoY2xpY2spPVwiYWRkRWxlbWVudChlbGVtZW50LnR5cGUpXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL3t7IGVsZW1lbnQuaW1nIH19LnN2Z1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaG92ZXItbGFiZWxcIj57eyBlbGVtZW50LmxhYmVsIH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuICBcbjxkaXYgY2xhc3M9XCJmb3JtLXByZXZpZXdcIiBjZGtEcm9wTGlzdCBbY2RrRHJvcExpc3REYXRhXT1cImZvcm1FbGVtZW50c1wiIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZvcm1FbGVtZW50czsgbGV0IGkgPSBpbmRleFwiIGdldFByb3BlcnRpZXMoKS5lbGVtZW50UHJvcHM+XG5cbiAgPCEtLSBBUC0yOUpBTjI1IHJlbW92ZSBlbXB0eSBjbGFzc2VzIC0tPlxuICA8IS0tIFRleHRCb3ggLS0+XG4gIDxkaXYgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnVGV4dCdcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbiAgW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPiAgXG4gIDxkaXYgY2xhc3M9XCJmaWVsZC13cmFwcGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRlbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250YWluZXJcIj5cbiAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiPnt7IGZpZWxkLnF1ZXN0aW9uVGV4dCA/IGZpZWxkLnF1ZXN0aW9uVGV4dCA6ICdMYWJlbCcgfX08L2xhYmVsPlxuICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChmaWVsZCwgaSlcIiBjbGFzcz1cImRlbGV0ZS1pY29uXCIgLz5cbiAgICAgIDwvZGl2PiAgICBcbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiY3VzdG9tLWlucHV0XCIgW3BsYWNlaG9sZGVyXT1cImZpZWxkLnF1ZXN0aW9uIHx8ICdFbnRlciB0ZXh0J1wiIFtyZWFkb25seV09XCJmaWVsZC5pc1JlYWRPbmx5XCIgXG4gICAgICBbY2xhc3MuaGlkZGVuXT1cImZpZWxkLmlzSGlkZGVuXCIgWyhuZ01vZGVsKV09XCJmaWVsZC50ZXh0XCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuICA8IS0tIENoZWNrQm94IC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdDaGVja0JveCdcIiBjbGFzcz1cImNoZWNrYm94LWZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbltjbGFzcy5oaWdobGlnaHRdPVwic2VsZWN0ZWRGaWVsZEluZGV4ID09PSBpXCIgY2RrRHJhZz5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQtd3JhcHBlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiPiAgIFxuICAgICAgICAgIDxsYWJlbCBbY2xhc3MucmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWRcIj57eyBmaWVsZC5xdWVzdGlvblRleHQgPyBmaWVsZC5xdWVzdGlvblRleHQgOiAnTGFiZWwnIH19PC9sYWJlbD5cbiAgICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChmaWVsZCwgaSlcIiBjbGFzcz1cImRlbGV0ZS1pY29uXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1vcHRpb25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWVsZC5vcHRpb25zXCIgY2xhc3M9XCJjaGVja2JveC1vcHRpb25cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbaWRdPVwib3B0aW9uLnZhbHVlICsgaVwiIFtuYW1lXT1cImZpZWxkLmlkXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiIGNsYXNzPVwiY2hlY2tib3gtaW5wdXRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIm9wdGlvbi52YWx1ZSArIGlcIiBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCI+e3sgb3B0aW9uLmxhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiAgXG5cbiAgPCEtLSBBUC0yOUpBTjI1IHJhZGlvLWJ1dHRvbiBkZXNpZ24gY2hlY2sgLS0+XG4gIDwhLS0gUmFkaW8gLS0+XG48ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ1JhZGlvJ1wiIGNsYXNzPVwiZmllbGQtY29udGFpbmVyXCIgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoaSlcIiBbbmdTdHlsZV09XCJnZXRGb250U3R5bGVzKGZpZWxkKVwiIFxuW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtd3JhcHBlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250ZW50XCI+XG4gICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiPiAgIFxuICAgICAgICAgICAgICAgIDxsYWJlbCBbY2xhc3MucmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWRcIj57eyBmaWVsZC5xdWVzdGlvblRleHQgPyBmaWVsZC5xdWVzdGlvblRleHQgOiAnTGFiZWwnIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChmaWVsZCwgaSlcIiBjbGFzcz1cImRlbGV0ZS1pY29uXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLW9wdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpZWxkLm9wdGlvbnM7IGxldCBqID0gaW5kZXhcIiBjbGFzcz1cInJhZGlvLW9wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2lkXT1cIidyYWRpby0nICsgZmllbGQuaWQgKyAnLScgKyBqXCIgW25hbWVdPVwiJ3JhZGlvLWdyb3VwLScgKyBmaWVsZC5pZFwiICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuc2VsZWN0ZWRWYWx1ZVwiIGNsYXNzPVwicmFkaW8taW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3JhZGlvLScgKyBmaWVsZC5pZCArICctJyArIGpcIiBjbGFzcz1cInJhZGlvLWxhYmVsXCI+IHt7IG9wdGlvbi52YWx1ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiBcbiAgPCEtLSBBUC0yOUpBTjI1IGRyb3AtZG93biBkZXNpZ24gY2hlY2sgLS0+XG4gIDwhLS0gRHJvcGRvd24gRmllbGQgLS0+XG48ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ0Ryb3Bkb3duJ1wiIGNsYXNzPVwiZmllbGQtY29udGFpbmVyXCIgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoaSlcIiBbbmdTdHlsZV09XCJnZXRGb250U3R5bGVzKGZpZWxkKVwiIFxuW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZC13cmFwcGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCI+ICAgXG4gICAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiPnt7IGZpZWxkLnF1ZXN0aW9uVGV4dCA/IGZpZWxkLnF1ZXN0aW9uVGV4dCA6ICdMYWJlbCcgfX08L2xhYmVsPlxuICAgICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNlbGVjdCBpZD1cIm9wdGlvbnNcIiBjbGFzcz1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpZWxkLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+IHt7IG9wdGlvbi52YWx1ZSB9fSA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG4gIDwhLS0gQ2FsZW5kYXIgLS0+XG48ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ0NhbGVuZGFyJ1wiIGNsYXNzPVwiZmllbGQtY29udGFpbmVyXCIgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoaSlcIiBbbmdTdHlsZV09XCJnZXRGb250U3R5bGVzKGZpZWxkKVwiIFxuW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCI+XG4gICAgICAgIDxsYWJlbCBbY2xhc3MucmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWRcIj57eyBmaWVsZC5xdWVzdGlvblRleHQgPyBmaWVsZC5xdWVzdGlvblRleHQgOiAnU2VsZWN0IERhdGUnIH19PC9sYWJlbD5cbiAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvVHJhc2guc3ZnXCIgKGNsaWNrKT1cInJlbW92ZUVsZW1lbnQoZmllbGQsIGkpXCIgIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBjbGFzcz1cImN1c3RvbS1pbnB1dFwiIFtyZWFkb25seV09XCJmaWVsZC5pc1JlYWRPbmx5XCIgW2NsYXNzLmhpZGRlbl09XCJmaWVsZC5pc0hpZGRlblwiIFsobmdNb2RlbCldPVwiZmllbGQuZGF0ZVwiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbiAgPCEtLSBFbWFpbCAtLT5cbjxkaXYgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnRW1haWwnXCIgY2xhc3M9XCJmaWVsZC1jb250YWluZXJcIiAoY2xpY2spPVwic2VsZWN0RWxlbWVudChpKVwiIFtuZ1N0eWxlXT1cImdldEZvbnRTdHlsZXMoZmllbGQpXCIgXG5bY2xhc3MuaGlnaGxpZ2h0XT1cInNlbGVjdGVkRmllbGRJbmRleCA9PT0gaVwiIGNka0RyYWc+XG4gICA8ZGl2IGNsYXNzPVwiZmllbGQtd3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBbY2xhc3MucmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWRcIj4ge3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ0xhYmVsJyB9fSA8L2xhYmVsPlxuICAgICAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvVHJhc2guc3ZnXCIgKGNsaWNrKT1cInJlbW92ZUVsZW1lbnQoZmllbGQsIGkpXCIgY2xhc3M9XCJkZWxldGUtaWNvblwiIC8+XG4gICAgICAgICAgPC9kaXY+ICAgICAgICBcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwiZmllbGQucXVlc3Rpb24gfHwgJ0VudGVyIGVtYWlsJ1wiIFtyZWFkb25seV09XCJmaWVsZC5pc1JlYWRPbmx5XCIgXG4gICAgICAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiZmllbGQuaXNIaWRkZW5cIiBbKG5nTW9kZWwpXT1cImZpZWxkLmVtYWlsXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbjwvZGl2PlxuICAgIFxuICA8IS0tIE51bWJlcnMgLS0+XG48ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ051bWJlcidcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbltjbGFzcy5oaWdobGlnaHRdPVwic2VsZWN0ZWRGaWVsZEluZGV4ID09PSBpXCIgY2RrRHJhZz4gXG4gICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXdyYXBwZXJcIj5cbiAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250ZW50XCI+XG4gICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCI+e3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ0xhYmVsJyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvVHJhc2guc3ZnXCIgKGNsaWNrKT1cInJlbW92ZUVsZW1lbnQoZmllbGQsIGkpXCIgY2xhc3M9XCJkZWxldGUtaWNvblwiIC8+XG4gICAgICAgICAgIDwvZGl2PiAgICAgICAgICBcbiAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImN1c3RvbS1pbnB1dFwiIFtwbGFjZWhvbGRlcl09XCJmaWVsZC5xdWVzdGlvbiB8fCAnRW50ZXIgbnVtYmVyJ1wiIFtyZWFkb25seV09XCJmaWVsZC5pc1JlYWRPbmx5XCIgXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cImZpZWxkLmlzSGlkZGVuXCIgWyhuZ01vZGVsKV09XCJmaWVsZC52YWx1ZVwiIC8+XG4gICAgICAgICA8L2Rpdj5cbiAgICAgICA8L2Rpdj5cbjwvZGl2PlxuICAgICBcbiAgPCEtLSBMaXN0IC0tPlxuPCEtLSA8ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ0xpc3QnXCIgY2xhc3M9XCJsaXN0LWNvbnRhaW5lclwiIGNka0RyYWcgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoaSlcIiBbbmdTdHlsZV09XCJnZXRGb250U3R5bGVzKGZpZWxkKVwiPlxuICAgICAgICAgICAgPGxhYmVsPnt7IGZpZWxkLnF1ZXN0aW9uVGV4dCB9fTwvbGFiZWw+XG4gICAgICA8dWw+PGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpZWxkLml0ZW1zXCI+e3sgaXRlbSB9fTwvbGk+PC91bD5cbiAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIC8+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuXG4gPCEtLSBUZXh0QXJlYSAtLT5cbiA8IS0tIFRleHRBcmVhIC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdUZXh0QXJlYSdcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbltjbGFzcy5oaWdobGlnaHRdPVwic2VsZWN0ZWRGaWVsZEluZGV4ID09PSBpXCIgY2RrRHJhZz5cbiAgPGRpdiBjbGFzcz1cImZpZWxkLXdyYXBwZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICA8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCI+e3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ0VudGVyIHlvdXIgdGV4dCcgfX1cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpZWxkLnJlcXVpcmVkXCIgY2xhc3M9XCJ0ZXh0LXJlZC01MDBcIj4qPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChmaWVsZCwgaSlcIiBjbGFzcz1cImRlbGV0ZS1pY29uXCIgLz5cbiAgICAgIDwvZGl2PiAgICBcbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImN1c3RvbS10ZXh0YXJlYVwiIFtwbGFjZWhvbGRlcl09XCJmaWVsZC5xdWVzdGlvbiB8fCAnRW50ZXIgZGV0YWlsZWQgdGV4dCBoZXJlLi4uJ1wiIFtzdHlsZS5oZWlnaHQucHhdPVwiZmllbGQuc2l6ZSB8fCAxMDBcIlxuICAgICAgICBbcmVhZG9ubHldPVwiZmllbGQucmVhZE9ubHlcIiBbY2xhc3MuaGlkZGVuXT1cImZpZWxkLmlzSGlkZVwiIFsobmdNb2RlbCldPVwiZmllbGQudGV4dFwiPlxuICAgICAgPC90ZXh0YXJlYT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBBUC0yOUpBTjI1IEltYWdlIGRlc2lnbiBjaGFuZ2UgLS0+XG48IS0tIEltYWdlIC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdJbWFnZSdcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbltjbGFzcy5oaWdobGlnaHRdPVwic2VsZWN0ZWRGaWVsZEluZGV4ID09PSBpXCIgY2RrRHJhZz5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC13cmFwcGVyXCI+XG4gICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRlbnRcIj5cbiAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250YWluZXJcIj5cbiAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiPiB7eyBmaWVsZC5xdWVzdGlvblRleHQgPyBmaWVsZC5xdWVzdGlvblRleHQgOiAnVXBsb2FkIEltYWdlJyB9fSA8L2xhYmVsPlxuICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChmaWVsZCwgaSlcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJpbWFnZS8qXCIgY2xhc3M9XCJjdXN0b20taW5wdXRcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4gIDwhLS0gQnV0dG9uIC0tPlxuPCEtLSA8ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ0J1dHRvbidcIiAgY2xhc3M9XCJidXR0b24tY29udGFpbmVyXCIgY2RrRHJhZyAoY2xpY2spPVwic2VsZWN0RWxlbWVudChpKVwiIFtuZ1N0eWxlXT1cImdldEZvbnRTdHlsZXMoZmllbGQpXCI+XG4gICAgICAgICAgICA8YnV0dG9uPnt7IGZpZWxkLnF1ZXN0aW9uVGV4dCB9fTwvYnV0dG9uPlxuICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvVHJhc2guc3ZnXCIgKGNsaWNrKT1cInJlbW92ZUVsZW1lbnQoZmllbGQsIGkpXCIgLz5cbiAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgPCEtLSBGaWxlIC0tPlxuICA8IS0tIEFQLTI5SkFOMjUgZmlsZSBkZXNpZ24gY2hhbmdlIC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdGaWxlJ1wiIGNsYXNzPVwiZmllbGQtY29udGFpbmVyXCIgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoaSlcIiBbbmdTdHlsZV09XCJnZXRGb250U3R5bGVzKGZpZWxkKVwiIFxuW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtd3JhcHBlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250ZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCI+XG4gICA8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCI+e3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ1VwbG9hZCBGaWxlJyB9fTwvbGFiZWw+XG4gICA8aW1nICBzcmM9XCIuLi9hc3NldHMvaWNvbnMvVHJhc2guc3ZnXCIgKGNsaWNrKT1cInJlbW92ZUVsZW1lbnQoZmllbGQsIGkpXCIgY2xhc3M9XCJkZWxldGUtaWNvblwiIC8+XG4gPC9kaXY+XG4gPGlucHV0IHR5cGU9XCJmaWxlXCIgY2xhc3M9XCJjdXN0b20taW5wdXRcIiAvPlxuICA8L2Rpdj5cbiA8L2Rpdj5cbjwvZGl2PlxuXG4gIDwhLS0gVGFibGVzIC0tPlxuPCEtLSA8ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ1RhYmxlcydcIiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiIGNka0RyYWcgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoaSlcIiBbbmdTdHlsZV09XCJnZXRGb250U3R5bGVzKGZpZWxkKVwiPlxuICA8bGFiZWw+e3sgZmllbGQucXVlc3Rpb25UZXh0IH19PC9sYWJlbD5cbiAgPHRhYmxlIFtzdHlsZS53aWR0aC5weF09XCJmaWVsZC5jb2xXaWR0aFwiIFtzdHlsZS5oZWlnaHQuJV09XCJmaWVsZC5yb3dIZWlnaHRcIj5cbiAgICA8dGhlYWQ+PHRyPjx0aCAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIGZpZWxkLmhlYWRlcnNcIiBbc3R5bGUud2lkdGgucHhdPVwiZmllbGQuY29sV2lkdGggLyBmaWVsZC5jb2xOb3NcIj57eyBoZWFkZXIgfX08L3RoPjwvdHI+PC90aGVhZD5cbiAgICA8dGJvZHk+PHRyICpuZ0Zvcj1cImxldCByb3cgb2YgZmllbGQucm93c1wiPjx0ZCAqbmdGb3I9XCJsZXQgY2VsbCBvZiByb3dcIj57eyBjZWxsIH19PC90ZD48L3RyPjwvdGJvZHk+XG4gIDwvdGFibGU+XG4gIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIC8+XG48L2Rpdj4gLS0+XG5cbiAgPCEtLSBCb29rIC0tPlxuPCEtLSA8ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ0Jvb2snXCIgIHN0eWxlPVwicGFkZGluZzogMTBweDsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGVzbW9rZTtcIiAoY2xpY2spPVwic2VsZWN0RWxlbWVudChpKVwiIFtuZ1N0eWxlXT1cImdldEZvbnRTdHlsZXMoZmllbGQpXCIgY2RrRHJhZz5cbiAgPGRpdiBjbGFzcz1cImZsZXhcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XG4gICAgPGRpdiBjbGFzcz1cImFsbC1kb3RzXCI+PGRpdiAqbmdGb3I9XCJsZXQgXyBvZiBbMSwyLDMsNCw1LDYsNyw4XVwiPjwvZGl2PjwvZGl2PlxuICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogOTclO1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggbGFiLWNvbmF0aW5lclwiPlxuICAgICAgICA8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCI+e3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ0Jvb2sgVGl0bGUnIH19PC9sYWJlbD5cbiAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvVHJhc2guc3ZnXCIgKGNsaWNrKT1cInJlbW92ZUVsZW1lbnQoZmllbGQsIGkpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiAtLT5cblxuICA8IS0tIExhYmVsIC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdMYWJlbCdcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIlxuW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPlxuPGRpdiBjbGFzcz1cImZpZWxkLXdyYXBwZXJcIj5cbiA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICA8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCI+e3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ0xhYmVsJyB9fTwvbGFiZWw+XG4gICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIi8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbjwvZGl2PlxuXG5cblxuXG4iXX0=
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvYnVpbGRlci9lbGVtZW50L2VsZW1lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BhZ2VzL2J1aWxkZXIvZWxlbWVudC9lbGVtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtEQUFrRDtBQUNsRCxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFpQixTQUFTLEdBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFRcEMsTUFBTSxPQUFPLGdCQUFnQjtJQVVQO0lBUlYsb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUNoQyxhQUFhLENBQWE7SUFDN0MsV0FBVyxDQUFNO0lBQ2pCLFNBQVMsQ0FBTTtJQUN4QixLQUFLLENBQU07SUFDWCxZQUFZLEdBQVUsRUFBRSxDQUFDO0lBQ3pCLFFBQVEsR0FBVSxFQUFFLENBQUM7SUFDckIsTUFBTSxDQUFTO0lBQ2YsWUFBb0Isa0JBQXNDO1FBQXRDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7SUFDMUQsQ0FBQztJQUVILFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2QsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRTtZQUM5RCxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFO1lBQzlELEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7WUFDckQsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtZQUNsRCxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO1lBQ3JELEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7WUFDeEQsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtZQUNsRCxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO1lBQ3JELEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7WUFDbEQsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTtZQUN0RCxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFO1lBQzFELEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUU7WUFDOUQsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTtZQUNyRCxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO1lBQ2xELEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFB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LENBQUMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDbEMsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsV0FBVyxDQUFDO1lBQzFDLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFlBQVksQ0FBQztZQUMxQyxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxXQUFXLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO3dHQXhLWSxnQkFBZ0I7NEZBQWhCLGdCQUFnQixtVENaN0IsMnNYQTBPQTs7NEZEOU5hLGdCQUFnQjtrQkFONUIsU0FBUzsrQkFDRSxhQUFhO3VGQU9iLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDcUIsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNqQixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBUCAyMkpBTjI1IC0gZm9ybSBwcmV2aWV3IGFuZCBBbGwgZm9ybSBlbGVtZW50c1xuaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWVsZW1lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZWxlbWVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VsZW1lbnQuY29tcG9uZW50LmNzcyddLFxufSlcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRDb21wb25lbnQge1xuXG4gIEBPdXRwdXQoKSBlbGVtZW50QnV0dG9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAVmlld0NoaWxkKCdmb3JtQ29udGFpbmVyJykgZm9ybUNvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgYm9va2xldEpTT046IGFueTtcbiAgQElucHV0KCkgYm9va2xldElkOiBhbnk7XG4gIGZpZWxkOiBhbnk7XG4gIGZvcm1FbGVtZW50czogYW55W10gPSBbXTtcbiAgZWxlbWVudHM6IGFueVtdID0gW107XG4gIGJvb2tJZDogc3RyaW5nO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyU2VydmljZTogRm9ybUJ1aWxkZXJTZXJ2aWNlKSB7XG4gIH1cbiBcbm5nT25Jbml0KCkge1xuICB0aGlzLmVsZW1lbnRzID0gW1xuICAgIHsgXCJ0eXBlXCI6IFwiQ2FsZW5kYXJcIiwgXCJpbWdcIjogXCJDYWxlbmRhclwiLCBcImxhYmVsXCI6IFwiQ2FsZW5kYXJcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiQ2hlY2tCb3hcIiwgXCJpbWdcIjogXCJDaGVja0JveFwiLCBcImxhYmVsXCI6IFwiQ2hlY2tCb3hcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiRW1haWxcIiwgXCJpbWdcIjogXCJFbWFpbFwiLCBcImxhYmVsXCI6IFwiRW1haWxcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiRmlsZVwiLCBcImltZ1wiOiBcIkZpbGVcIiwgXCJsYWJlbFwiOiBcIkZpbGVcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiSW1hZ2VcIiwgXCJpbWdcIjogXCJJbWFnZVwiLCBcImxhYmVsXCI6IFwiSW1hZ2VcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiTnVtYmVyXCIsIFwiaW1nXCI6IFwiTnVtYmVyXCIsIFwibGFiZWxcIjogXCJOdW1iZXJcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiTGlzdFwiLCBcImltZ1wiOiBcIkxpc3RcIiwgXCJsYWJlbFwiOiBcIkxpc3RcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiUmFkaW9cIiwgXCJpbWdcIjogXCJSYWRpb1wiLCBcImxhYmVsXCI6IFwiUmFkaW9cIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiVGV4dFwiLCBcImltZ1wiOiBcIlRleHRcIiwgXCJsYWJlbFwiOiBcIlRleHRcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiVGFibGVzXCIsIFwiaW1nXCI6IFwiVGFibGVcIiwgXCJsYWJlbFwiOiBcIlRhYmxlXCIgfSxcbiAgICB7IFwidHlwZVwiOiBcIkRyb3Bkb3duXCIsIFwiaW1nXCI6IFwiRHJvcFwiLCBcImxhYmVsXCI6IFwiRHJvcGRvd25cIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiVGV4dEFyZWFcIiwgXCJpbWdcIjogXCJUZXh0QXJlYVwiLCBcImxhYmVsXCI6IFwiVGV4dEFyZWFcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiTGFiZWxcIiwgXCJpbWdcIjogXCJMYWJlbFwiLCBcImxhYmVsXCI6IFwiTGFiZWxcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiQm9va1wiLCBcImltZ1wiOiBcIkJvb2tcIiwgXCJsYWJlbFwiOiBcIkJvb2tcIiB9LFxuICAgIHsgXCJ0eXBlXCI6IFwiQnV0dG9uXCIsIFwiaW1nXCI6IFwiQnV0dG9uXCIsIFwibGFiZWxcIjogXCJCdXR0b25cIiB9XG4gIF07XG4gICB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5mb3JtRWxlbWVudHMkLnN1YnNjcmliZSgoZWxlbWVudHMpID0+IHtcbiAgICAgdGhpcy5mb3JtRWxlbWVudHMgPSBlbGVtZW50cztcbiB9KTtcbiBpZiAodGhpcy5ib29rbGV0SlNPTikge1xuICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG59IGVsc2Uge1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc3RhdHVzJywgXCJuZXdcIik7XG59XG59XG5cbi8vIEFQIC0gMjZGRUIyNSAtIEFkZGVkIG5nT25DaGFuZ2VzIHRvIGhhbmRsZSBjaGFuZ2VzIGluIGJvb2tsZXRKU09OXG5uZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gIGlmIChjaGFuZ2VzWydib29rbGV0SlNPTiddICYmIGNoYW5nZXNbJ2Jvb2tsZXRKU09OJ10uY3VycmVudFZhbHVlKSB7XG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuICAgIGNvbnNvbGUubG9nKCdjaGFuZ2VzJywgY2hhbmdlcyk7XG4gIH1cbn1cblxucHJpdmF0ZSBpbml0aWFsaXplRm9ybSgpIHtcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3N0YXR1cycsIFwiZWRpdFwiKTtcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3VuaXF1ZV9pZCcsIHRoaXMuYm9va2xldElkKTtcbiAgdGhpcy5mb3JtRWxlbWVudHMgPSBbXTtcbiAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuY2xlYXJFbGVtZW50cygpO1xuXG4gIGNvbnN0IGJvb2tRdWVzdGlvbnNNYXBLZXlzID0gT2JqZWN0LmtleXModGhpcy5ib29rbGV0SlNPTi5ib29rUXVlc3Rpb25zTWFwIHx8IHt9KTtcbiAgXG4gIC8vIEFzc2lnbiB0aGUgZmlyc3Qga2V5IGZyb20gYm9va1F1ZXN0aW9uc01hcCB0byBib29rbGV0SWRcbiAgdGhpcy5ib29rSWQgPSBib29rUXVlc3Rpb25zTWFwS2V5c1swXTtcblxuICB0aGlzLmJvb2tsZXRKU09OLmJvb2tRdWVzdGlvbnNNYXBbdGhpcy5ib29rSWRdLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKG5ld0VsZW1lbnQgPT4ge1xuICAgIGlmICh0aGlzLmJvb2tsZXRKU09OLnNxT3B0aW9ucyAmJiB0aGlzLmJvb2tsZXRKU09OLnNxT3B0aW9uc1tuZXdFbGVtZW50LmlkXSkge1xuICAgICAgbmV3RWxlbWVudC5vcHRpb25zID0gdGhpcy5ib29rbGV0SlNPTi5zcU9wdGlvbnNbbmV3RWxlbWVudC5pZF0ub3B0aW9ucztcbiAgICB9XG4gICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuYWRkRWxlbWVudChuZXdFbGVtZW50KTtcbiAgfSk7XG5cbiAgdGhpcy5mb3JtRWxlbWVudHMgPSB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5nZXRFbGVtZW50cygpO1xufVxuXG5kcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5mb3JtRWxlbWVudHMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG59XG5cbi8vIEFkZCB0aGlzIG1ldGhvZCB0byBoYW5kbGUgZWxlbWVudCBzZWxlY3Rpb25cbnNlbGVjdEVsZW1lbnQoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2Uuc2V0U2VsZWN0ZWRFbGVtZW50KGluZGV4KTtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5mb3JtRWxlbWVudHNbaW5kZXhdO1xuICAgIHRoaXMuZWxlbWVudEJ1dHRvbkNsaWNrZWQuZW1pdChlbGVtZW50LnR5cGUpOyAgXG59XG5zZWxlY3RlZEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbnNlbGVjdGVkRmllbGRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbmFkZEVsZW1lbnQodHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICBjb25zdCB1bmlxdWVfaWQgPSB1dWlkdjQoKTtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0ge1xuICAgICAgaWQ6IHVuaXF1ZV9pZCxcbiAgICAgIHVpZDogdW5pcXVlX2lkLFxuICAgICAgbmFtZTogJycsXG4gICAgICB0eXBlLFxuICAgICAgcXVlc3Rpb25UZXh0OiAnJyxcbiAgICAgIHF1ZXN0aW9uOiAnJyxcbiAgICAgIGhlbHBUZXh0OiAnJyxcbiAgICAgIGVycm9yTWVzc2FnZTogJycsXG4gICAgICBpc1JlYWRPbmx5OiBmYWxzZSxcbiAgICAgIGlzSGlkZGVuOiBmYWxzZSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIHN1YlRleHQ6ICcnLFxuICAgICAgcmVmZXJlbmNlRmllbGQ6ICcnLFxuICAgICAgYWRkaXRpb25hbFJpY2hDb250ZW50OiAnJyxcbiAgICAgIGdyb3VwTmFtZTogJycsXG4gICAgICBpc0RhdGVCYWNrd2FyZDogZmFsc2UsXG4gICAgICB0aXRsZTogJycsXG4gICAgICBzdWJUaXRsZTogJycsXG4gICAgICBpc0RhdGVGb3J3YXJkOiBmYWxzZSxcbiAgICAgIGlzT3B0aW9uYWw6IGZhbHNlLFxuICAgICAgaXNUaXRsZTogZmFsc2UsXG4gICAgICBuZXh0UXVlc3Rpb246ICcnLFxuICAgICAgYWxsb3dlZEZpbGVFeHRlbnNpb25zOiAnJyxcbiAgICAgIHF1ZXN0aW9uTnVtYmVyOiB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5nZXRFbGVtZW50cygpLmxlbmd0aCArIDEsXG4gICAgICBxdWVzdGlvbkJvb2tJZDogJycsXG4gICAgICBwYXJlbnRRdWVzdGlvbjogJycsXG4gICAgICBmaWVsZHNNZXRhOiAnJyxcbiAgICAgIHJlY29yZFR5cGVOYW1lOiAnJyxcbiAgICAgIHJlY29yZFR5cGVJZDogJycsXG4gICAgICB0cmFja2luZ0lkOiAnJyxcbiAgICAgIGRhdGVUZXh0OiAnJyxcbiAgICAgIHRpbWVUZXh0OiAnJyxcbiAgICAgIHJlY29yZElkOiAnJyxcbiAgICAgIHFiUmVmZXJlbmNlOiAnJyxcbiAgICAgIHFiUmVmZXJlbmNlUXVlc3Rpb25zOiAnJyxcbiAgICAgIHF1ZXN0aW9uQm9va1N1YlRpdGxlOiAnJyxcbiAgICAgIHN0eWxlOiAnJyxcbiAgICAgIG9wdGlvbnM6IHR5cGUgPT09ICdEcm9wZG93bicgfHwgdHlwZSA9PT0gJ1JhZGlvJyB8fCB0eXBlID09PSAnQ2hlY2tCb3gnID8gW10gOiBudWxsLFxuICAgIFxuICAgIH07XG4gICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuYWRkRWxlbWVudChuZXdFbGVtZW50KTtcbiAgICB0aGlzLmZvcm1FbGVtZW50cyA9IHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLmdldEVsZW1lbnRzKCk7XG59XG5cbi8vIFJlbW92ZSBhbiBlbGVtZW50IGJ5IGluZGV4XG5yZW1vdmVFbGVtZW50KGZpZWxkOiBhbnksaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLnJlbW92ZUVsZW1lbnRDb21wb25lbnQoZmllbGQuaWQpO1xuICAgIHRoaXMuZm9ybUVsZW1lbnRzPXRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLmdldEVsZW1lbnRzKCk7XG59XG4gIFxuZ2V0Rm9udFN0eWxlcyhmaWVsZDogYW55KTogYW55IHtcbiAgICBjb25zdCBzdHlsZXMgPSAge1xuICAgICAgJ2ZvbnQtZmFtaWx5JzogZmllbGQuZm9udCB8fCAnSGVsdmV0aWNhIE5ldWUnLFxuICAgICAgJ2ZvbnQtd2VpZ2h0JzogZmllbGQuZm9udFdlaWdodCB8fCAnNDAwJyxcbiAgICAgICd3aWR0aCc6IGAkeyhmaWVsZC5zaXplIHx8IDEyKSAvIDEyICogMTAwfSVgLCBcbiAgICAgICdtaW4taGVpZ2h0JzogZmllbGQuaGVpZ2h0ID8gYCR7ZmllbGQuaGVpZ2h0fXB4YCA6ICdhdXRvJywgXG4gICAgICAndGV4dC1hbGlnbic6IGZpZWxkLnRleHRBbGlnbiB8fCAnbGVmdCcsXG4gICAgICAnYm9yZGVyLXJhZGl1cyc6ICc1cHgnLFxuICAgICAgJ21hcmdpbi1ib3R0b20nOiAnMTBweCcgXG4gICAgfTtcbiAgICBcbiAgICAvLyBIYW5kbGUgYXJyYXkgb2Ygc3R5bGUgY2xhc3Nlc1xuICAgIGlmIChmaWVsZC5zdHlsZXMgJiYgQXJyYXkuaXNBcnJheShmaWVsZC5zdHlsZXMpKSB7XG4gICAgICBpZiAoZmllbGQuc3R5bGVzLmluY2x1ZGVzKCdib2xkJykpIHtcbiAgICAgICAgc3R5bGVzWydmb250LXdlaWdodCddID0gJzcwMCc7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQuc3R5bGVzLmluY2x1ZGVzKCdpdGFsaWMnKSkge1xuICAgICAgICBzdHlsZXNbJ2ZvbnQtc3R5bGUnXSA9ICdpdGFsaWMnO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLnN0eWxlcy5pbmNsdWRlcygndW5kZXJsaW5lJykpIHtcbiAgICAgICAgc3R5bGVzWyd0ZXh0LWRlY29yYXRpb24nXSA9ICd1bmRlcmxpbmUnO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLnN0eWxlcy5pbmNsdWRlcygnY2FwaXRhbGl6ZScpKSB7XG4gICAgICAgIHN0eWxlc1sndGV4dC10cmFuc2Zvcm0nXSA9ICdjYXBpdGFsaXplJztcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC5zdHlsZXMuaW5jbHVkZXMoJ2xvd2VyY2FzZScpKSB7XG4gICAgICAgIHN0eWxlc1sndGV4dC10cmFuc2Zvcm0nXSA9ICdsb3dlcmNhc2UnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHlsZXM7XG59XG59XG5cblxuIiwiPCEtLSBBUCAyMkpBTjI1IC0gZm9ybSBwcmV2aWV3IGFuZCBBbGwgZm9ybSBlbGVtZW50cyAtLT5cbiA8IS0tIEFQIDI1RkVCMjUgLSBBbGwgZWxlbWVudHMgdXBkYXRlIC0tPlxuPGRpdiBjbGFzcz1cImNlbnRlci1mcmFtZVwiPlxuICA8bGluayBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVJvYm90bzozMDAsNDAwLDUwMCZkaXNwbGF5PXN3YXBcIiByZWw9XCJzdHlsZXNoZWV0XCI+XG5cbjwhLS0gRm9ybSBCdWlsZGVyIFNlY3Rpb24gQWxsIEVsZW1lbnRzIC0tPlxuPGRpdiBjbGFzcz1cImZvcm0tYnVpbGRlclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2YgZWxlbWVudHNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbGVtZW50XCIgKGNsaWNrKT1cImFkZEVsZW1lbnQoZWxlbWVudC50eXBlKVwiPlxuICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy97eyBlbGVtZW50LmltZyB9fS5zdmdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhvdmVyLWxhYmVsXCI+e3sgZWxlbWVudC5sYWJlbCB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiAgXG48ZGl2IGNsYXNzPVwiZm9ybS1wcmV2aWV3XCIgY2RrRHJvcExpc3QgW2Nka0Ryb3BMaXN0RGF0YV09XCJmb3JtRWxlbWVudHNcIiAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiPlxuPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZm9ybUVsZW1lbnRzOyBsZXQgaSA9IGluZGV4XCIgZ2V0UHJvcGVydGllcygpLmVsZW1lbnRQcm9wcz5cblxuPCEtLSBUZXh0Qm94IC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdUZXh0J1wiIGNsYXNzPVwiZmllbGQtY29udGFpbmVyXCIgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoaSlcIiBbbmdTdHlsZV09XCJnZXRGb250U3R5bGVzKGZpZWxkKVwiIFxuICBbY2xhc3MuaGlnaGxpZ2h0XT1cInNlbGVjdGVkRmllbGRJbmRleCA9PT0gaVwiIGNka0RyYWc+ICBcbiAgPGRpdiBjbGFzcz1cImZpZWxkLXdyYXBwZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICA8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCI+e3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ0xhYmVsJyB9fTwvbGFiZWw+XG4gICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgICAgPC9kaXY+ICAgIFxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwiZmllbGQucXVlc3Rpb24gfHwgJ0VudGVyIHRleHQnXCIgW3JlYWRvbmx5XT1cImZpZWxkLmlzUmVhZE9ubHlcIiBcbiAgICAgIFtjbGFzcy5oaWRkZW5dPVwiZmllbGQuaXNIaWRkZW5cIiBbKG5nTW9kZWwpXT1cImZpZWxkLnRleHRcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIENhbGVuZGFyIC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdDYWxlbmRhcidcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbiAgW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCI+XG4gICAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiPnt7IGZpZWxkLnF1ZXN0aW9uVGV4dCA/IGZpZWxkLnF1ZXN0aW9uVGV4dCA6ICdTZWxlY3QgRGF0ZScgfX08L2xhYmVsPlxuICAgICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiICBjbGFzcz1cImRlbGV0ZS1pY29uXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGNsYXNzPVwiY3VzdG9tLWlucHV0XCIgW3JlYWRvbmx5XT1cImZpZWxkLmlzUmVhZE9ubHlcIiBbY2xhc3MuaGlkZGVuXT1cImZpZWxkLmlzSGlkZGVuXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5kYXRlXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gRW1haWwgLS0+XG48ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ0VtYWlsJ1wiIGNsYXNzPVwiZmllbGQtY29udGFpbmVyXCIgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoaSlcIiBbbmdTdHlsZV09XCJnZXRGb250U3R5bGVzKGZpZWxkKVwiIFxuW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPlxuICAgPGRpdiBjbGFzcz1cImZpZWxkLXdyYXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCI+IHt7IGZpZWxkLnF1ZXN0aW9uVGV4dCA/IGZpZWxkLnF1ZXN0aW9uVGV4dCA6ICdMYWJlbCcgfX0gPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgICAgICAgIDwvZGl2PiAgICAgICAgXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIGNsYXNzPVwiY3VzdG9tLWlucHV0XCIgW3BsYWNlaG9sZGVyXT1cImZpZWxkLnF1ZXN0aW9uIHx8ICdFbnRlciBlbWFpbCdcIiBbcmVhZG9ubHldPVwiZmllbGQuaXNSZWFkT25seVwiIFxuICAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cImZpZWxkLmlzSGlkZGVuXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5lbWFpbFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBOdW1iZXJzIC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdOdW1iZXInXCIgY2xhc3M9XCJmaWVsZC1jb250YWluZXJcIiAoY2xpY2spPVwic2VsZWN0RWxlbWVudChpKVwiIFtuZ1N0eWxlXT1cImdldEZvbnRTdHlsZXMoZmllbGQpXCIgXG4gW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPiBcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXdyYXBwZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCI+e3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ0xhYmVsJyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgIFxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImN1c3RvbS1pbnB1dFwiIFtwbGFjZWhvbGRlcl09XCJmaWVsZC5xdWVzdGlvbiB8fCAnRW50ZXIgbnVtYmVyJ1wiIFtyZWFkb25seV09XCJmaWVsZC5pc1JlYWRPbmx5XCIgXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJmaWVsZC5pc0hpZGRlblwiIFsobmdNb2RlbCldPVwiZmllbGQudmFsdWVcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbjwvZGl2PlxuICAgICAgXG48IS0tIFRleHRBcmVhIC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdUZXh0QXJlYSdcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbiBbY2xhc3MuaGlnaGxpZ2h0XT1cInNlbGVjdGVkRmllbGRJbmRleCA9PT0gaVwiIGNka0RyYWc+XG4gICA8ZGl2IGNsYXNzPVwiZmllbGQtd3JhcHBlclwiPlxuICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250YWluZXJcIj5cbiAgICAgICAgIDxsYWJlbCBbY2xhc3MucmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWRcIj57eyBmaWVsZC5xdWVzdGlvblRleHQgPyBmaWVsZC5xdWVzdGlvblRleHQgOiAnRW50ZXIgeW91ciB0ZXh0JyB9fVxuICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpZWxkLnJlcXVpcmVkXCIgY2xhc3M9XCJ0ZXh0LXJlZC01MDBcIj4qPC9zcGFuPlxuICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgICAgIDwvZGl2PiAgICBcbiAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJjdXN0b20tdGV4dGFyZWFcIiBbcGxhY2Vob2xkZXJdPVwiZmllbGQucXVlc3Rpb24gfHwgJ0VudGVyIGRldGFpbGVkIHRleHQgaGVyZS4uLidcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImZpZWxkLnNpemUgfHwgMTAwXCJcbiAgICAgICAgIFtyZWFkb25seV09XCJmaWVsZC5yZWFkT25seVwiIFtjbGFzcy5oaWRkZW5dPVwiZmllbGQuaXNIaWRlXCIgWyhuZ01vZGVsKV09XCJmaWVsZC50ZXh0XCI+XG4gICAgICAgPC90ZXh0YXJlYT5cbiAgICAgPC9kaXY+XG4gICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIExhYmVsIC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdMYWJlbCdcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIlxuW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPlxuPGRpdiBjbGFzcz1cImZpZWxkLXdyYXBwZXJcIj5cbiA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICA8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCI+e3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ0xhYmVsJyB9fTwvbGFiZWw+XG4gICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIi8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBJbWFnZSAtLT5cbjxkaXYgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnSW1hZ2UnXCIgY2xhc3M9XCJmaWVsZC1jb250YWluZXJcIiAoY2xpY2spPVwic2VsZWN0RWxlbWVudChpKVwiIFtuZ1N0eWxlXT1cImdldEZvbnRTdHlsZXMoZmllbGQpXCIgXG5bY2xhc3MuaGlnaGxpZ2h0XT1cInNlbGVjdGVkRmllbGRJbmRleCA9PT0gaVwiIGNka0RyYWc+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtd3JhcHBlclwiPlxuICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250ZW50XCI+XG4gICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCI+XG4gICAgICAgIDxsYWJlbCBbY2xhc3MucmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWRcIj4ge3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ1VwbG9hZCBJbWFnZScgfX0gPC9sYWJlbD5cbiAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvVHJhc2guc3ZnXCIgKGNsaWNrKT1cInJlbW92ZUVsZW1lbnQoZmllbGQsIGkpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiaW1hZ2UvKlwiIGNsYXNzPVwiY3VzdG9tLWlucHV0XCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIDwhLS0gRmlsZSAtLT5cbjxkaXYgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnRmlsZSdcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbiAgW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZC13cmFwcGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCI+XG4gICAgIDxsYWJlbCBbY2xhc3MucmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWRcIj57eyBmaWVsZC5xdWVzdGlvblRleHQgPyBmaWVsZC5xdWVzdGlvblRleHQgOiAnVXBsb2FkIEZpbGUnIH19PC9sYWJlbD5cbiAgICAgPGltZyAgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgPC9kaXY+XG4gICA8aW5wdXQgdHlwZT1cImZpbGVcIiBjbGFzcz1cImN1c3RvbS1pbnB1dFwiIC8+XG4gICAgPC9kaXY+XG4gICA8L2Rpdj5cbjwvZGl2PlxuICBcbjwhLS0gQ2hlY2tCb3ggLS0+XG48ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ0NoZWNrQm94J1wiIGNsYXNzPVwiY2hlY2tib3gtZmllbGQtY29udGFpbmVyXCIgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoaSlcIiBbbmdTdHlsZV09XCJnZXRGb250U3R5bGVzKGZpZWxkKVwiIFxuW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZC13cmFwcGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCI+ICAgXG4gICAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiPnt7IGZpZWxkLnF1ZXN0aW9uVGV4dCA/IGZpZWxkLnF1ZXN0aW9uVGV4dCA6ICdMYWJlbCcgfX08L2xhYmVsPlxuICAgICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94LW9wdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpZWxkLm9wdGlvbnNcIiBjbGFzcz1cImNoZWNrYm94LW9wdGlvblwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtpZF09XCJvcHRpb24udmFsdWUgKyBpXCIgW25hbWVdPVwiZmllbGQuaWRcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCIgY2xhc3M9XCJjaGVja2JveC1pbnB1dFwiPlxuICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwib3B0aW9uLnZhbHVlICsgaVwiIGNsYXNzPVwiY2hlY2tib3gtbGFiZWxcIj57eyBvcHRpb24ubGFiZWwgfX08L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+ICBcblxuPCEtLSBSYWRpbyAtLT5cbjxkaXYgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnUmFkaW8nXCIgY2xhc3M9XCJmaWVsZC1jb250YWluZXJcIiAoY2xpY2spPVwic2VsZWN0RWxlbWVudChpKVwiIFtuZ1N0eWxlXT1cImdldEZvbnRTdHlsZXMoZmllbGQpXCIgXG5bY2xhc3MuaGlnaGxpZ2h0XT1cInNlbGVjdGVkRmllbGRJbmRleCA9PT0gaVwiIGNka0RyYWc+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZC13cmFwcGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRlbnRcIj5cbiAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCI+ICAgXG4gICAgICAgICAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiPnt7IGZpZWxkLnF1ZXN0aW9uVGV4dCA/IGZpZWxkLnF1ZXN0aW9uVGV4dCA6ICdMYWJlbCcgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tb3B0aW9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmllbGQub3B0aW9uczsgbGV0IGogPSBpbmRleFwiIGNsYXNzPVwicmFkaW8tb3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbaWRdPVwiJ3JhZGlvLScgKyBmaWVsZC5pZCArICctJyArIGpcIiBbbmFtZV09XCIncmFkaW8tZ3JvdXAtJyArIGZpZWxkLmlkXCIgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5zZWxlY3RlZFZhbHVlXCIgY2xhc3M9XCJyYWRpby1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCIncmFkaW8tJyArIGZpZWxkLmlkICsgJy0nICsgalwiIGNsYXNzPVwicmFkaW8tbGFiZWxcIj4ge3sgb3B0aW9uLmxhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIFxuPCEtLSBEcm9wZG93biAtLT5cbjxkaXYgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnRHJvcGRvd24nXCIgY2xhc3M9XCJmaWVsZC1jb250YWluZXJcIiAoY2xpY2spPVwic2VsZWN0RWxlbWVudChpKVwiIFtuZ1N0eWxlXT1cImdldEZvbnRTdHlsZXMoZmllbGQpXCIgXG5bY2xhc3MuaGlnaGxpZ2h0XT1cInNlbGVjdGVkRmllbGRJbmRleCA9PT0gaVwiIGNka0RyYWc+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkLXdyYXBwZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250YWluZXJcIj4gICBcbiAgICAgICAgICA8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCI+e3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ0xhYmVsJyB9fTwvbGFiZWw+XG4gICAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvVHJhc2guc3ZnXCIgKGNsaWNrKT1cInJlbW92ZUVsZW1lbnQoZmllbGQsIGkpXCIgY2xhc3M9XCJkZWxldGUtaWNvblwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c2VsZWN0IGlkPVwib3B0aW9uc1wiIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmllbGQub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj4ge3sgb3B0aW9uLmxhYmVsIH19IDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4gICAgXG48IS0tIFRhYmxlcyAtLT5cbjwhLS0gPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdUYWJsZXMnXCIgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIiBjZGtEcmFnIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIj5cbiAgPGxhYmVsPnt7IGZpZWxkLnF1ZXN0aW9uVGV4dCB9fTwvbGFiZWw+XG4gIDx0YWJsZSBbc3R5bGUud2lkdGgucHhdPVwiZmllbGQuY29sV2lkdGhcIiBbc3R5bGUuaGVpZ2h0LiVdPVwiZmllbGQucm93SGVpZ2h0XCI+XG4gICAgPHRoZWFkPjx0cj48dGggKm5nRm9yPVwibGV0IGhlYWRlciBvZiBmaWVsZC5oZWFkZXJzXCIgW3N0eWxlLndpZHRoLnB4XT1cImZpZWxkLmNvbFdpZHRoIC8gZmllbGQuY29sTm9zXCI+e3sgaGVhZGVyIH19PC90aD48L3RyPjwvdGhlYWQ+XG4gICAgPHRib2R5Pjx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIGZpZWxkLnJvd3NcIj48dGQgKm5nRm9yPVwibGV0IGNlbGwgb2Ygcm93XCI+e3sgY2VsbCB9fTwvdGQ+PC90cj48L3Rib2R5PlxuICA8L3RhYmxlPlxuICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChmaWVsZCwgaSlcIiAvPlxuPC9kaXY+IC0tPlxuXG4gIDwhLS0gQm9vayAtLT5cbjwhLS0gPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdCb29rJ1wiICBzdHlsZT1cInBhZGRpbmc6IDEwcHg7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlc21va2U7XCIgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoaSlcIiBbbmdTdHlsZV09XCJnZXRGb250U3R5bGVzKGZpZWxkKVwiIGNka0RyYWc+XG4gIDxkaXYgY2xhc3M9XCJmbGV4XCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxuICAgIDxkaXYgY2xhc3M9XCJhbGwtZG90c1wiPjxkaXYgKm5nRm9yPVwibGV0IF8gb2YgWzEsMiwzLDQsNSw2LDcsOF1cIj48L2Rpdj48L2Rpdj5cbiAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDk3JTtcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGxhYi1jb25hdGluZXJcIj5cbiAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiPnt7IGZpZWxkLnF1ZXN0aW9uVGV4dCA/IGZpZWxkLnF1ZXN0aW9uVGV4dCA6ICdCb29rIFRpdGxlJyB9fTwvbGFiZWw+XG4gICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4gLS0+XG5cbjwhLS0gTGlzdCAtLT5cbjwhLS0gPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdMaXN0J1wiIGNsYXNzPVwibGlzdC1jb250YWluZXJcIiBjZGtEcmFnIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIj5cbiAgICAgICAgICAgIDxsYWJlbD57eyBmaWVsZC5xdWVzdGlvblRleHQgfX08L2xhYmVsPlxuICAgICAgPHVsPjxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWVsZC5pdGVtc1wiPnt7IGl0ZW0gfX08L2xpPjwvdWw+XG4gICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChmaWVsZCwgaSlcIiAvPlxuICAgICAgICAgIDwvZGl2PiAtLT5cbiAgXG48IS0tIEJ1dHRvbiAtLT5cbjwhLS0gPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdCdXR0b24nXCIgIGNsYXNzPVwiYnV0dG9uLWNvbnRhaW5lclwiIGNka0RyYWcgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoaSlcIiBbbmdTdHlsZV09XCJnZXRGb250U3R5bGVzKGZpZWxkKVwiPlxuICAgICAgICAgICAgPGJ1dHRvbj57eyBmaWVsZC5xdWVzdGlvblRleHQgfX08L2J1dHRvbj5cbiAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIC8+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuXG48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuPC9kaXY+XG5cblxuXG5cbiJdfQ==
|
|
@@ -19,11 +19,11 @@ export class FormComponent {
|
|
|
19
19
|
this.formButtonHandler.emit(event);
|
|
20
20
|
}
|
|
21
21
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
22
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormComponent, selector: "app-form-builder", inputs: { bookletJSON: "bookletJSON", bookletId: "bookletId" }, outputs: { formButtonHandler: "formButtonHandler" }, ngImport: i0, template: "<!-- AP-29JAN25 -->\n<div class=\"form-container \">\n <!-- app-element Component -->\n <app-element [bookletJSON]=\"bookletJSON\" [bookletId]=\"bookletId\"></app-element>\n \n <!-- app-properties Component -->\n <app-properties (formButtonHandler)=\"formButtonHandlerClick($event)\"></app-properties>\n </div>\n ", styles: [".form-container{display:flex;flex-wrap:wrap;width:100%;height:100vh}app-element{width:75
|
|
22
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormComponent, selector: "app-form-builder", inputs: { bookletJSON: "bookletJSON", bookletId: "bookletId" }, outputs: { formButtonHandler: "formButtonHandler" }, ngImport: i0, template: "<!-- AP-29JAN25 -->\n<div class=\"form-container \">\n <!-- app-element Component -->\n <app-element [bookletJSON]=\"bookletJSON\" [bookletId]=\"bookletId\"></app-element>\n \n <!-- app-properties Component -->\n <app-properties (formButtonHandler)=\"formButtonHandlerClick($event)\"></app-properties>\n </div>\n ", styles: [".form-container{display:flex;flex-wrap:wrap;width:100%;height:100vh}app-element{width:75%}app-properties{width:25%;overflow-y:auto;border:10px solid #86A8CD}\n"], dependencies: [{ kind: "component", type: i1.ElementComponent, selector: "app-element", inputs: ["bookletJSON", "bookletId"], outputs: ["elementButtonClicked"] }, { kind: "component", type: i2.PropertiesComponent, selector: "app-properties", inputs: ["selectedElementType"], outputs: ["formButtonHandler"] }] });
|
|
23
23
|
}
|
|
24
24
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormComponent, decorators: [{
|
|
25
25
|
type: Component,
|
|
26
|
-
args: [{ selector: 'app-form-builder', template: "<!-- AP-29JAN25 -->\n<div class=\"form-container \">\n <!-- app-element Component -->\n <app-element [bookletJSON]=\"bookletJSON\" [bookletId]=\"bookletId\"></app-element>\n \n <!-- app-properties Component -->\n <app-properties (formButtonHandler)=\"formButtonHandlerClick($event)\"></app-properties>\n </div>\n ", styles: [".form-container{display:flex;flex-wrap:wrap;width:100%;height:100vh}app-element{width:75
|
|
26
|
+
args: [{ selector: 'app-form-builder', template: "<!-- AP-29JAN25 -->\n<div class=\"form-container \">\n <!-- app-element Component -->\n <app-element [bookletJSON]=\"bookletJSON\" [bookletId]=\"bookletId\"></app-element>\n \n <!-- app-properties Component -->\n <app-properties (formButtonHandler)=\"formButtonHandlerClick($event)\"></app-properties>\n </div>\n ", styles: [".form-container{display:flex;flex-wrap:wrap;width:100%;height:100vh}app-element{width:75%}app-properties{width:25%;overflow-y:auto;border:10px solid #86A8CD}\n"] }]
|
|
27
27
|
}], propDecorators: { bookletJSON: [{
|
|
28
28
|
type: Input
|
|
29
29
|
}], bookletId: [{
|