@rangertechnologies/ngnxt 2.1.105 → 2.1.106
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/package.json +5 -1
- package/esm2022/lib/ar.i18n.mjs +0 -29
- package/esm2022/lib/components/button/nxt-button.component.mjs +0 -130
- package/esm2022/lib/components/custom-button/custom-button.component.mjs +0 -39
- package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +0 -366
- package/esm2022/lib/components/custom-date/custom-date.component.mjs +0 -47
- package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +0 -48
- package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +0 -219
- package/esm2022/lib/components/custom-image/custom-image.component.mjs +0 -34
- package/esm2022/lib/components/custom-input/custom-input.component.mjs +0 -93
- package/esm2022/lib/components/custom-label/custom-label.component.mjs +0 -21
- package/esm2022/lib/components/custom-model/custom-model.component.mjs +0 -48
- package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +0 -115
- package/esm2022/lib/components/custom-rich-text/custom-rich-text.component.mjs +0 -186
- package/esm2022/lib/components/custom-table/custom-table.component.mjs +0 -347
- package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +0 -65
- package/esm2022/lib/components/custom-time/custom-time.component.mjs +0 -61
- package/esm2022/lib/components/datatable/datatable.component.mjs +0 -801
- package/esm2022/lib/components/dependent-table/dependent-table.component.mjs +0 -42
- package/esm2022/lib/components/dropdown-with-flag/dropdown-with-flag.component.mjs +0 -39
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +0 -279
- package/esm2022/lib/components/file-view/file-view.component.mjs +0 -46
- package/esm2022/lib/components/loader/loader.component.mjs +0 -23
- package/esm2022/lib/components/pagination/pagination.component.mjs +0 -100
- package/esm2022/lib/components/pick-location/pick-location.component.mjs +0 -216
- package/esm2022/lib/components/search-box/search-box.component.mjs +0 -202
- package/esm2022/lib/components/table-appendix/table-appendix.component.mjs +0 -123
- package/esm2022/lib/directives/componenthost/componenthost.directive.mjs +0 -19
- package/esm2022/lib/en.i18n.mjs +0 -29
- package/esm2022/lib/i18n-config.service.mjs +0 -4
- package/esm2022/lib/i18n.component.mjs +0 -47
- package/esm2022/lib/i18n.module.mjs +0 -38
- package/esm2022/lib/i18n.pipe.mjs +0 -25
- package/esm2022/lib/i18n.service.mjs +0 -56
- package/esm2022/lib/interfaces/actionMeta.mjs +0 -2
- package/esm2022/lib/interfaces/apimeta.mjs +0 -2
- package/esm2022/lib/interfaces/dependencyMeta.mjs +0 -2
- package/esm2022/lib/model/bookletWrapper.mjs +0 -9
- package/esm2022/lib/model/changeWrapper.mjs +0 -11
- package/esm2022/lib/model/errorWrapper.mjs +0 -6
- package/esm2022/lib/model/tableWrapper.mjs +0 -20
- package/esm2022/lib/nxt-app.component.mjs +0 -22
- package/esm2022/lib/nxt-app.module.mjs +0 -399
- package/esm2022/lib/nxt-app.service.mjs +0 -14
- package/esm2022/lib/pages/booklet/booklet.component.mjs +0 -541
- package/esm2022/lib/pages/builder/element/element.component.mjs +0 -193
- package/esm2022/lib/pages/builder/form/form.component.mjs +0 -34
- package/esm2022/lib/pages/builder/menu/menu.component.mjs +0 -28
- package/esm2022/lib/pages/builder/properties/properties.component.mjs +0 -476
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +0 -458
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +0 -2387
- package/esm2022/lib/pages/summary-page/summary-page.component.mjs +0 -76
- package/esm2022/lib/pipe/date/date.pipe.mjs +0 -28
- package/esm2022/lib/pipe/editColumnCheck/edit-column-check.pipe.mjs +0 -28
- package/esm2022/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.mjs +0 -20
- package/esm2022/lib/pipe/editColumnType/edit-column-type.pipe.mjs +0 -20
- package/esm2022/lib/pipe/get-value.pipe.mjs +0 -50
- package/esm2022/lib/pipe/search-filter/search-filter.pipe.mjs +0 -39
- package/esm2022/lib/pipe/time/time.pipe.mjs +0 -26
- package/esm2022/lib/sample.mjs +0 -3715
- package/esm2022/lib/services/change.service.mjs +0 -53
- package/esm2022/lib/services/data.service.mjs +0 -80
- package/esm2022/lib/services/form-builder.service.mjs +0 -160
- package/esm2022/lib/services/salesforce.service.mjs +0 -46
- package/esm2022/lib/services/shared.service.mjs +0 -100
- package/esm2022/lib/services/storage.service.mjs +0 -44
- package/esm2022/lib/tam.i18n.mjs +0 -29
- package/esm2022/lib/wrapper.mjs +0 -175
- package/esm2022/public-api.mjs +0 -22
- package/esm2022/rangertechnologies-ngnxt.mjs +0 -5
- package/fesm2022/rangertechnologies-ngnxt.mjs +0 -12866
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/lib/ar.i18n.d.ts +0 -24
- package/lib/components/button/nxt-button.component.d.ts +0 -38
- package/lib/components/custom-button/custom-button.component.d.ts +0 -16
- package/lib/components/custom-calendar/custom-calendar.component.d.ts +0 -65
- package/lib/components/custom-date/custom-date.component.d.ts +0 -18
- package/lib/components/custom-date-picker/custom-date-picker.component.d.ts +0 -19
- package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +0 -39
- package/lib/components/custom-image/custom-image.component.d.ts +0 -13
- package/lib/components/custom-input/custom-input.component.d.ts +0 -31
- package/lib/components/custom-label/custom-label.component.d.ts +0 -10
- package/lib/components/custom-model/custom-model.component.d.ts +0 -19
- package/lib/components/custom-radio/custom-radio.component.d.ts +0 -33
- package/lib/components/custom-rich-text/custom-rich-text.component.d.ts +0 -29
- package/lib/components/custom-table/custom-table.component.d.ts +0 -65
- package/lib/components/custom-text-area/custom-text-area.component.d.ts +0 -22
- package/lib/components/custom-time/custom-time.component.d.ts +0 -18
- package/lib/components/datatable/datatable.component.d.ts +0 -126
- package/lib/components/dependent-table/dependent-table.component.d.ts +0 -15
- package/lib/components/dropdown-with-flag/dropdown-with-flag.component.d.ts +0 -16
- package/lib/components/file-upload/file-upload.component.d.ts +0 -47
- package/lib/components/file-view/file-view.component.d.ts +0 -16
- package/lib/components/loader/loader.component.d.ts +0 -11
- package/lib/components/pagination/pagination.component.d.ts +0 -36
- package/lib/components/pick-location/pick-location.component.d.ts +0 -44
- package/lib/components/search-box/search-box.component.d.ts +0 -43
- package/lib/components/table-appendix/table-appendix.component.d.ts +0 -30
- package/lib/directives/componenthost/componenthost.directive.d.ts +0 -8
- package/lib/en.i18n.d.ts +0 -24
- package/lib/i18n-config.service.d.ts +0 -2
- package/lib/i18n.component.d.ts +0 -11
- package/lib/i18n.module.d.ts +0 -9
- package/lib/i18n.pipe.d.ts +0 -10
- package/lib/i18n.service.d.ts +0 -14
- package/lib/interfaces/actionMeta.d.ts +0 -5
- package/lib/interfaces/apimeta.d.ts +0 -15
- package/lib/interfaces/dependencyMeta.d.ts +0 -8
- package/lib/model/bookletWrapper.d.ts +0 -5
- package/lib/model/changeWrapper.d.ts +0 -10
- package/lib/model/errorWrapper.d.ts +0 -5
- package/lib/model/tableWrapper.d.ts +0 -18
- package/lib/nxt-app.component.d.ts +0 -8
- package/lib/nxt-app.module.d.ts +0 -52
- package/lib/nxt-app.service.d.ts +0 -6
- package/lib/pages/booklet/booklet.component.d.ts +0 -68
- package/lib/pages/builder/element/element.component.d.ts +0 -33
- package/lib/pages/builder/form/form.component.d.ts +0 -11
- package/lib/pages/builder/menu/menu.component.d.ts +0 -10
- package/lib/pages/builder/properties/properties.component.d.ts +0 -551
- package/lib/pages/questionbook/questionbook.component.d.ts +0 -68
- package/lib/pages/questionnaire/questionnaire.component.d.ts +0 -220
- package/lib/pages/summary-page/summary-page.component.d.ts +0 -20
- package/lib/pipe/date/date.pipe.d.ts +0 -7
- package/lib/pipe/editColumnCheck/edit-column-check.pipe.d.ts +0 -7
- package/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.d.ts +0 -7
- package/lib/pipe/editColumnType/edit-column-type.pipe.d.ts +0 -7
- package/lib/pipe/get-value.pipe.d.ts +0 -7
- package/lib/pipe/search-filter/search-filter.pipe.d.ts +0 -8
- package/lib/pipe/time/time.pipe.d.ts +0 -7
- package/lib/sample.d.ts +0 -11
- package/lib/services/change.service.d.ts +0 -22
- package/lib/services/data.service.d.ts +0 -13
- package/lib/services/form-builder.service.d.ts +0 -75
- package/lib/services/salesforce.service.d.ts +0 -11
- package/lib/services/shared.service.d.ts +0 -15
- package/lib/services/storage.service.d.ts +0 -13
- package/lib/tam.i18n.d.ts +0 -24
- package/lib/wrapper.d.ts +0 -203
- package/public-api.d.ts +0 -15
- package/rangertechnologies-ngnxt-2.1.105.tgz +0 -0
- package/src/lib/style.css +0 -1817
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
// AP 22JAN25 - form preview and All form elements
|
|
2
|
-
import { Component, Input } from '@angular/core';
|
|
3
|
-
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
4
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../../../services/form-builder.service";
|
|
7
|
-
import * as i2 from "@angular/common";
|
|
8
|
-
import * as i3 from "@angular/forms";
|
|
9
|
-
import * as i4 from "@angular/cdk/drag-drop";
|
|
10
|
-
export class ElementComponent {
|
|
11
|
-
formBuilderService;
|
|
12
|
-
//@Output() elementButtonClicked = new EventEmitter<string>();
|
|
13
|
-
bookletJSON;
|
|
14
|
-
bookletId;
|
|
15
|
-
field;
|
|
16
|
-
formElements = [];
|
|
17
|
-
elements = [];
|
|
18
|
-
bookId;
|
|
19
|
-
sections = {
|
|
20
|
-
basic: true, // Basic Elements open by default
|
|
21
|
-
advanced: false // Advanced Elements closed by default
|
|
22
|
-
};
|
|
23
|
-
basicElements = [];
|
|
24
|
-
advancedElements = [];
|
|
25
|
-
//subscription: any;
|
|
26
|
-
constructor(formBuilderService) {
|
|
27
|
-
this.formBuilderService = formBuilderService;
|
|
28
|
-
}
|
|
29
|
-
// AP-06MAR25 New Design Change Elements Basic , Advanced
|
|
30
|
-
ngOnInit() {
|
|
31
|
-
this.basicElements = [
|
|
32
|
-
{ "type": "Heading", "img": "Vector", "label": "Heading" },
|
|
33
|
-
{ "type": "Text", "img": "Text", "label": "Text" },
|
|
34
|
-
{ "type": "TextArea", "img": "TextArea", "label": "Text Area" },
|
|
35
|
-
{ "type": "Paragraph", "img": "Paragraph", "label": "Paragraph" },
|
|
36
|
-
{ "type": "Number", "img": "Number", "label": "Number" },
|
|
37
|
-
{ "type": "Label", "img": "Label", "label": "Label" },
|
|
38
|
-
{ "type": "Image", "img": "Image", "label": "Image" },
|
|
39
|
-
{ "type": "Button", "img": "Button", "label": "Button" },
|
|
40
|
-
{ "type": "Email", "img": "Email", "label": "Email" }
|
|
41
|
-
];
|
|
42
|
-
this.advancedElements = [
|
|
43
|
-
{ "type": "Calendar", "img": "Calendar", "label": "Calendar" },
|
|
44
|
-
{ "type": "CustomSearch", "img": "Search", "label": "Custom / Search" },
|
|
45
|
-
{ "type": "Date", "img": "Date", "label": "Date" },
|
|
46
|
-
{ "type": "Time", "img": "Time", "label": "Time" },
|
|
47
|
-
{ "type": "File", "img": "File", "label": "Files" },
|
|
48
|
-
{ "type": "Table", "img": "Table", "label": "Table" },
|
|
49
|
-
{ "type": "CheckBox", "img": "CheckBox", "label": "CheckBox" },
|
|
50
|
-
{ "type": "MultiSelect", "img": "MultiSelect", "label": "Multi Select" },
|
|
51
|
-
{ "type": "Dropdown", "img": "Drop", "label": "Dropdown" }
|
|
52
|
-
];
|
|
53
|
-
this.formBuilderService.formElements$.subscribe((elements) => {
|
|
54
|
-
this.formElements = elements;
|
|
55
|
-
});
|
|
56
|
-
if (this.bookletJSON) {
|
|
57
|
-
this.initializeForm();
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
localStorage.setItem('status', "new");
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// Add these methods
|
|
64
|
-
toggleSection(section) {
|
|
65
|
-
this.sections[section] = !this.sections[section];
|
|
66
|
-
}
|
|
67
|
-
isSectionOpen(section) {
|
|
68
|
-
return this.sections[section];
|
|
69
|
-
}
|
|
70
|
-
// AP - 26FEB25 - Added ngOnChanges to handle changes in bookletJSON
|
|
71
|
-
ngOnChanges(changes) {
|
|
72
|
-
if (changes['bookletJSON'] && changes['bookletJSON'].currentValue) {
|
|
73
|
-
this.initializeForm();
|
|
74
|
-
console.log('changes', changes);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
initializeForm() {
|
|
78
|
-
if (!this.bookletJSON || !this.bookletJSON.bookQuestionsMap) {
|
|
79
|
-
console.warn("Invalid bookletJSON structure");
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
localStorage.setItem('status', "edit");
|
|
83
|
-
localStorage.setItem('unique_id', this.bookletId);
|
|
84
|
-
this.formElements = [];
|
|
85
|
-
this.formBuilderService.clearElements();
|
|
86
|
-
const bookQuestionsMapKeys = Object.keys(this.bookletJSON.bookQuestionsMap);
|
|
87
|
-
if (bookQuestionsMapKeys.length === 0)
|
|
88
|
-
return;
|
|
89
|
-
this.bookId = bookQuestionsMapKeys[0];
|
|
90
|
-
this.bookletJSON.bookQuestionsMap[this.bookId]?.subQuestions?.forEach(newElement => {
|
|
91
|
-
if (this.bookletJSON.sqOptions?.[newElement.id]) {
|
|
92
|
-
newElement.options = this.bookletJSON.sqOptions[newElement.id].options;
|
|
93
|
-
}
|
|
94
|
-
this.formBuilderService.addElement(newElement);
|
|
95
|
-
});
|
|
96
|
-
this.formElements = this.formBuilderService.getElements();
|
|
97
|
-
}
|
|
98
|
-
// ngOnDestroy() {
|
|
99
|
-
// this.subscription.unsubscribe();
|
|
100
|
-
// }
|
|
101
|
-
drop(event) {
|
|
102
|
-
moveItemInArray(this.formElements, event.previousIndex, event.currentIndex);
|
|
103
|
-
}
|
|
104
|
-
// Add this method to handle element selection
|
|
105
|
-
selectElement(index) {
|
|
106
|
-
this.selectedFieldIndex = index; // element is selected
|
|
107
|
-
this.formBuilderService.setSelectedElement(index);
|
|
108
|
-
//const element = this.formElements[index];
|
|
109
|
-
// this.elementButtonClicked.emit(element.type);
|
|
110
|
-
}
|
|
111
|
-
//selectedIndex: number | null = null;
|
|
112
|
-
selectedFieldIndex = null; // element is cleared
|
|
113
|
-
addElement(type) {
|
|
114
|
-
const unique_id = uuidv4();
|
|
115
|
-
const newElement = {
|
|
116
|
-
id: unique_id,
|
|
117
|
-
uid: unique_id,
|
|
118
|
-
type,
|
|
119
|
-
name: '',
|
|
120
|
-
questionText: '',
|
|
121
|
-
question: '',
|
|
122
|
-
helpText: '',
|
|
123
|
-
errorMessage: '',
|
|
124
|
-
isReadOnly: false,
|
|
125
|
-
isHidden: false,
|
|
126
|
-
required: false,
|
|
127
|
-
subText: '',
|
|
128
|
-
referenceField: '',
|
|
129
|
-
additionalRichContent: '',
|
|
130
|
-
groupName: '',
|
|
131
|
-
isDateBackward: false,
|
|
132
|
-
title: '',
|
|
133
|
-
subTitle: '',
|
|
134
|
-
isDateForward: false,
|
|
135
|
-
isOptional: false,
|
|
136
|
-
isTitle: false,
|
|
137
|
-
nextQuestion: '',
|
|
138
|
-
allowedFileExtensions: '',
|
|
139
|
-
questionNumber: this.formBuilderService.getElements().length + 1,
|
|
140
|
-
questionBookId: '',
|
|
141
|
-
parentQuestion: '',
|
|
142
|
-
fieldsMeta: '',
|
|
143
|
-
recordTypeName: '',
|
|
144
|
-
recordTypeId: '',
|
|
145
|
-
trackingId: '',
|
|
146
|
-
dateText: '',
|
|
147
|
-
timeText: '',
|
|
148
|
-
recordId: '',
|
|
149
|
-
qbReference: '',
|
|
150
|
-
qbReferenceQuestions: '',
|
|
151
|
-
questionBookSubTitle: '',
|
|
152
|
-
style: '',
|
|
153
|
-
options: type === 'Dropdown' || type === 'Radio' || type === 'CheckBox' ? [] : null,
|
|
154
|
-
};
|
|
155
|
-
this.formBuilderService.addElement(newElement);
|
|
156
|
-
this.formElements = this.formBuilderService.getElements();
|
|
157
|
-
}
|
|
158
|
-
// Remove an element by index
|
|
159
|
-
removeElement(field, index) {
|
|
160
|
-
this.formBuilderService.removeElementComponent(field.id);
|
|
161
|
-
this.formElements = this.formBuilderService.getElements();
|
|
162
|
-
}
|
|
163
|
-
getFontStyles(field) {
|
|
164
|
-
const styles = {
|
|
165
|
-
'font-family': field.font || 'Helvetica Neue',
|
|
166
|
-
'font-weight': field.fontWeight || '400',
|
|
167
|
-
'width': field.size ? `${(field.size / 12) * 100}%` : '100%',
|
|
168
|
-
'min-height': field.height ? `${field.height}px` : 'auto',
|
|
169
|
-
'text-align': field.textAlign || 'left',
|
|
170
|
-
'border-radius': '5px',
|
|
171
|
-
'margin-bottom': '10px'
|
|
172
|
-
};
|
|
173
|
-
// if (Array.isArray(field.styles)) {
|
|
174
|
-
// styles['font-weight'] = field.styles.includes('bold') ? '700' : styles['font-weight'];
|
|
175
|
-
// styles['font-style'] = field.styles.includes('italic') ? 'italic' : undefined;
|
|
176
|
-
// styles['text-decoration'] = field.styles.includes('underline') ? 'underline' : undefined;
|
|
177
|
-
// styles['text-transform'] = field.styles.includes('capitalize') ? 'capitalize' :
|
|
178
|
-
// field.styles.includes('lowercase') ? 'lowercase' : undefined;
|
|
179
|
-
// }
|
|
180
|
-
return styles;
|
|
181
|
-
}
|
|
182
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElementComponent, deps: [{ token: i1.FormBuilderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
183
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ElementComponent, selector: "app-element", inputs: { bookletJSON: "bookletJSON", bookletId: "bookletId" }, 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 <!-- Basic Elements Toggle -->\n <div class=\"toggle-header\" (click)=\"toggleSection('basic')\">\n <h3>Basic Elements</h3>\n <span class=\"toggle-icon\">{{ sections.basic ? '\u25BC' : '\u25B6' }}</span>\n </div>\n\n <div *ngIf=\"sections.basic\">\n <ng-container *ngFor=\"let element of basicElements\">\n <div class=\"element\" (click)=\"addElement(element.type)\" cdkDrag>\n <img src=\"../assets/icons/{{ element.img }}.svg\" class=\"element-icon\">\n <div class=\"hover-label\">{{ element.label }}</div>\n </div>\n </ng-container>\n </div>\n\n <!-- Advanced Elements Toggle -->\n <div class=\"toggle-header\" (click)=\"toggleSection('advanced')\">\n <h3>Advanced Elements</h3>\n <span>{{ sections.advanced ? '\u25BC' : '\u25B6' }}</span>\n </div>\n <div *ngIf=\"sections.advanced\">\n <ng-container *ngFor=\"let element of advancedElements\">\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</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.isRequired\">{{ 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\" />\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.isRequired\">{{ 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\"/>\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.isRequired\"> {{ 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\" />\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.isRequired\">{{ 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\"/>\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.isRequired\">{{ 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.isReadOnly\" [class.hidden]=\"field.isHidden\">\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.isRequired\">{{ 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.isRequired\"> {{ field.questionText ? field.questionText : 'Upload Image' }} </label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <input type=\"file\" accept=\"image/*\" class=\"custom-input\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"/>\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.isRequired\">{{ 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\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"/>\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.isRequired\">{{ 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 [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\">\n <label [for]=\"option.value + i\" class=\"checkbox-label\">{{ option.value }}</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.isRequired\">{{ 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\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\">\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<!-- 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.isRequired\">{{ 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\"[disabled]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\" >\n <option *ngFor=\"let option of field.options\" [value]=\"option.value\"> {{ option.value }} </option>\n </select>\n </div>\n </div>\n</div>\n \n<!-- Table -->\n <!-- AP-06MAR25 -->\n<div *ngIf=\"field.type === 'Table'\" 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.isRequired\">{{ 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<!-- List -->\n <!-- AP-06MAR25 - List data show-->\n<div *ngIf=\"field.type === 'List'\" 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.isRequired\">{{ 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=\"Search...\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"/>\n </div>\n </div>\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<!-- 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:#f8fafc;cursor:pointer;border-left:10px solid #E2F1FF;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:15px;font-weight:400;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}.toggle-header{display:flex;justify-content:space-between}.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:15px;font-weight:400}.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}.table-container label{font-size:14px;font-weight:700;margin-bottom:5px;display:block}\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.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"] }] });
|
|
184
|
-
}
|
|
185
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElementComponent, decorators: [{
|
|
186
|
-
type: Component,
|
|
187
|
-
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 <!-- Basic Elements Toggle -->\n <div class=\"toggle-header\" (click)=\"toggleSection('basic')\">\n <h3>Basic Elements</h3>\n <span class=\"toggle-icon\">{{ sections.basic ? '\u25BC' : '\u25B6' }}</span>\n </div>\n\n <div *ngIf=\"sections.basic\">\n <ng-container *ngFor=\"let element of basicElements\">\n <div class=\"element\" (click)=\"addElement(element.type)\" cdkDrag>\n <img src=\"../assets/icons/{{ element.img }}.svg\" class=\"element-icon\">\n <div class=\"hover-label\">{{ element.label }}</div>\n </div>\n </ng-container>\n </div>\n\n <!-- Advanced Elements Toggle -->\n <div class=\"toggle-header\" (click)=\"toggleSection('advanced')\">\n <h3>Advanced Elements</h3>\n <span>{{ sections.advanced ? '\u25BC' : '\u25B6' }}</span>\n </div>\n <div *ngIf=\"sections.advanced\">\n <ng-container *ngFor=\"let element of advancedElements\">\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</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.isRequired\">{{ 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\" />\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.isRequired\">{{ 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\"/>\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.isRequired\"> {{ 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\" />\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.isRequired\">{{ 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\"/>\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.isRequired\">{{ 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.isReadOnly\" [class.hidden]=\"field.isHidden\">\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.isRequired\">{{ 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.isRequired\"> {{ field.questionText ? field.questionText : 'Upload Image' }} </label>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n </div>\n <input type=\"file\" accept=\"image/*\" class=\"custom-input\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"/>\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.isRequired\">{{ 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\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"/>\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.isRequired\">{{ 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 [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\">\n <label [for]=\"option.value + i\" class=\"checkbox-label\">{{ option.value }}</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.isRequired\">{{ 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\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\">\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<!-- 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.isRequired\">{{ 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\"[disabled]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\" >\n <option *ngFor=\"let option of field.options\" [value]=\"option.value\"> {{ option.value }} </option>\n </select>\n </div>\n </div>\n</div>\n \n<!-- Table -->\n <!-- AP-06MAR25 -->\n<div *ngIf=\"field.type === 'Table'\" 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.isRequired\">{{ 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<!-- List -->\n <!-- AP-06MAR25 - List data show-->\n<div *ngIf=\"field.type === 'List'\" 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.isRequired\">{{ 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=\"Search...\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"/>\n </div>\n </div>\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<!-- 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:#f8fafc;cursor:pointer;border-left:10px solid #E2F1FF;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:15px;font-weight:400;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}.toggle-header{display:flex;justify-content:space-between}.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:15px;font-weight:400}.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}.table-container label{font-size:14px;font-weight:700;margin-bottom:5px;display:block}\n"] }]
|
|
188
|
-
}], ctorParameters: () => [{ type: i1.FormBuilderService }], propDecorators: { bookletJSON: [{
|
|
189
|
-
type: Input
|
|
190
|
-
}], bookletId: [{
|
|
191
|
-
type: Input
|
|
192
|
-
}] } });
|
|
193
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvYnVpbGRlci9lbGVtZW50L2VsZW1lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BhZ2VzL2J1aWxkZXIvZWxlbWVudC9lbGVtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtEQUFrRDtBQUNsRCxPQUFPLEVBQUMsU0FBUyxFQUFnQixLQUFLLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBUXBDLE1BQU0sT0FBTyxnQkFBZ0I7SUFnQlA7SUFkcEIsOERBQThEO0lBQ3JELFdBQVcsQ0FBTTtJQUNqQixTQUFTLENBQU07SUFDeEIsS0FBSyxDQUFNO0lBQ1gsWUFBWSxHQUFVLEVBQUUsQ0FBQztJQUN6QixRQUFRLEdBQVUsRUFBRSxDQUFDO0lBQ3JCLE1BQU0sQ0FBUztJQUNmLFFBQVEsR0FBRztRQUNULEtBQUssRUFBRSxJQUFJLEVBQUssaUNBQWlDO1FBQ2pELFFBQVEsRUFBRSxLQUFLLENBQUMsc0NBQXNDO0tBQ3ZELENBQUM7SUFDQSxhQUFhLEdBQVUsRUFBRSxDQUFDO0lBQzVCLGdCQUFnQixHQUFVLEVBQUUsQ0FBQztJQUM3QixvQkFBb0I7SUFDcEIsWUFBb0Isa0JBQXNDO1FBQXRDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7SUFDMUQsQ0FBQztJQUNILDBEQUEwRDtJQUMxRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNyQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FB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QUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxZQUFZLEdBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVTtRQUN0QixNQUFNLE1BQU0sR0FBUTtZQUNoQixhQUFhLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxnQkFBZ0I7WUFDN0MsYUFBYSxFQUFFLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSztZQUN4QyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDNUQsWUFBWSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQ3pELFlBQVksRUFBRSxLQUFLLENBQUMsU0FBUyxJQUFJLE1BQU07WUFDdkMsZUFBZSxFQUFFLEtBQUs7WUFDdEIsZUFBZSxFQUFFLE1BQU07U0FDMUIsQ0FBQztRQUVGLHFDQUFxQztRQUNyQyw2RkFBNkY7UUFDN0YscUZBQXFGO1FBQ3JGLGdHQUFnRztRQUNoRyxzRkFBc0Y7UUFDdEYsK0ZBQStGO1FBQy9GLElBQUk7UUFFSixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO3dHQTNMWSxnQkFBZ0I7NEZBQWhCLGdCQUFnQix3SUNaN0Isa3NhQTZRQTs7NEZEalFhLGdCQUFnQjtrQkFONUIsU0FBUzsrQkFDRSxhQUFhO3VGQVFkLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFQIDIySkFOMjUgLSBmb3JtIHByZXZpZXcgYW5kIEFsbCBmb3JtIGVsZW1lbnRzXG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0tYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZWxlbWVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGVtZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWxlbWVudC5jb21wb25lbnQuY3NzJ10sXG59KVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudENvbXBvbmVudCB7XG5cbiAgLy9AT3V0cHV0KCkgZWxlbWVudEJ1dHRvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQElucHV0KCkgYm9va2xldEpTT046IGFueTtcbiAgQElucHV0KCkgYm9va2xldElkOiBhbnk7XG4gIGZpZWxkOiBhbnk7XG4gIGZvcm1FbGVtZW50czogYW55W10gPSBbXTtcbiAgZWxlbWVudHM6IGFueVtdID0gW107XG4gIGJvb2tJZDogc3RyaW5nO1xuICBzZWN0aW9ucyA9IHtcbiAgICBiYXNpYzogdHJ1ZSwgICAgLy8gQmFzaWMgRWxlbWVudHMgb3BlbiBieSBkZWZhdWx0XG4gICAgYWR2YW5jZWQ6IGZhbHNlIC8vIEFkdmFuY2VkIEVsZW1lbnRzIGNsb3NlZCBieSBkZWZhdWx0XG4gIH07XG4gICAgYmFzaWNFbGVtZW50czogYW55W10gPSBbXTtcbiAgYWR2YW5jZWRFbGVtZW50czogYW55W10gPSBbXTtcbiAgLy9zdWJzY3JpcHRpb246IGFueTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlclNlcnZpY2U6IEZvcm1CdWlsZGVyU2VydmljZSkge1xuICB9XG4vLyAgQVAtMDZNQVIyNSBOZXcgRGVzaWduIENoYW5nZSBFbGVtZW50cyBCYXNpYyAsIEFkdmFuY2VkXG5uZ09uSW5pdCgpIHtcbiAgdGhpcy5iYXNpY0VsZW1lbnRzID0gW1xuICB7IFwidHlwZVwiOiBcIkhlYWRpbmdcIiwgXCJpbWdcIjogXCJWZWN0b3JcIiwgXCJsYWJlbFwiOiBcIkhlYWRpbmdcIiB9LFxuICB7IFwidHlwZVwiOiBcIlRleHRcIiwgXCJpbWdcIjogXCJUZXh0XCIsIFwibGFiZWxcIjogXCJUZXh0XCIgfSxcbiAgeyBcInR5cGVcIjogXCJUZXh0QXJlYVwiLCBcImltZ1wiOiBcIlRleHRBcmVhXCIsIFwibGFiZWxcIjogXCJUZXh0IEFyZWFcIiB9LFxuICB7IFwidHlwZVwiOiBcIlBhcmFncmFwaFwiLCBcImltZ1wiOiBcIlBhcmFncmFwaFwiLCBcImxhYmVsXCI6IFwiUGFyYWdyYXBoXCIgfSxcbiAgeyBcInR5cGVcIjogXCJOdW1iZXJcIiwgXCJpbWdcIjogXCJOdW1iZXJcIiwgXCJsYWJlbFwiOiBcIk51bWJlclwiIH0sXG4gIHsgXCJ0eXBlXCI6IFwiTGFiZWxcIiwgXCJpbWdcIjogXCJMYWJlbFwiLCBcImxhYmVsXCI6IFwiTGFiZWxcIiB9LFxuICB7IFwidHlwZVwiOiBcIkltYWdlXCIsIFwiaW1nXCI6IFwiSW1hZ2VcIiwgXCJsYWJlbFwiOiBcIkltYWdlXCIgfSxcbiAgeyBcInR5cGVcIjogXCJCdXR0b25cIiwgXCJpbWdcIjogXCJCdXR0b25cIiwgXCJsYWJlbFwiOiBcIkJ1dHRvblwiIH0sXG4gIHsgXCJ0eXBlXCI6IFwiRW1haWxcIiwgXCJpbWdcIjogXCJFbWFpbFwiLCBcImxhYmVsXCI6IFwiRW1haWxcIiB9XG5dO1xuXG50aGlzLmFkdmFuY2VkRWxlbWVudHMgPSBbXG4gIHsgXCJ0eXBlXCI6IFwiQ2FsZW5kYXJcIiwgXCJpbWdcIjogXCJDYWxlbmRhclwiLCBcImxhYmVsXCI6IFwiQ2FsZW5kYXJcIiB9LFxuICB7IFwidHlwZVwiOiBcIkN1c3RvbVNlYXJjaFwiLCBcImltZ1wiOiBcIlNlYXJjaFwiLCBcImxhYmVsXCI6IFwiQ3VzdG9tIC8gU2VhcmNoXCIgfSxcbiAgeyBcInR5cGVcIjogXCJEYXRlXCIsIFwiaW1nXCI6IFwiRGF0ZVwiLCBcImxhYmVsXCI6IFwiRGF0ZVwiIH0sXG4gIHsgXCJ0eXBlXCI6IFwiVGltZVwiLCBcImltZ1wiOiBcIlRpbWVcIiwgXCJsYWJlbFwiOiBcIlRpbWVcIiB9LFxuICB7IFwidHlwZVwiOiBcIkZpbGVcIiwgXCJpbWdcIjogXCJGaWxlXCIsIFwibGFiZWxcIjogXCJGaWxlc1wiIH0sXG4gIHsgXCJ0eXBlXCI6IFwiVGFibGVcIiwgXCJpbWdcIjogXCJUYWJsZVwiLCBcImxhYmVsXCI6IFwiVGFibGVcIiB9LFxuICB7IFwidHlwZVwiOiBcIkNoZWNrQm94XCIsIFwiaW1nXCI6IFwiQ2hlY2tCb3hcIiwgXCJsYWJlbFwiOiBcIkNoZWNrQm94XCIgfSxcbiAgeyBcInR5cGVcIjogXCJNdWx0aVNlbGVjdFwiLCBcImltZ1wiOiBcIk11bHRpU2VsZWN0XCIsIFwibGFiZWxcIjogXCJNdWx0aSBTZWxlY3RcIiB9LFxuICB7IFwidHlwZVwiOiBcIkRyb3Bkb3duXCIsIFwiaW1nXCI6IFwiRHJvcFwiLCBcImxhYmVsXCI6IFwiRHJvcGRvd25cIiB9XG5dO1xuICB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5mb3JtRWxlbWVudHMkLnN1YnNjcmliZSgoZWxlbWVudHMpID0+IHtcbiAgICAgdGhpcy5mb3JtRWxlbWVudHMgPSBlbGVtZW50cztcbiB9KTtcbiBpZiAodGhpcy5ib29rbGV0SlNPTikge1xuICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG59IGVsc2Uge1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc3RhdHVzJywgXCJuZXdcIik7XG59XG59XG5cbi8vIEFkZCB0aGVzZSBtZXRob2RzXG50b2dnbGVTZWN0aW9uKHNlY3Rpb246ICdiYXNpYycgfCAnYWR2YW5jZWQnKSB7XG4gIHRoaXMuc2VjdGlvbnNbc2VjdGlvbl0gPSAhdGhpcy5zZWN0aW9uc1tzZWN0aW9uXTtcbn1cblxuaXNTZWN0aW9uT3BlbihzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRoaXMuc2VjdGlvbnNbc2VjdGlvbl07XG59XG5cbi8vIEFQIC0gMjZGRUIyNSAtIEFkZGVkIG5nT25DaGFuZ2VzIHRvIGhhbmRsZSBjaGFuZ2VzIGluIGJvb2tsZXRKU09OXG5uZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gIGlmIChjaGFuZ2VzWydib29rbGV0SlNPTiddICYmIGNoYW5nZXNbJ2Jvb2tsZXRKU09OJ10uY3VycmVudFZhbHVlKSB7XG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuICAgIGNvbnNvbGUubG9nKCdjaGFuZ2VzJywgY2hhbmdlcyk7XG4gIH1cbn1cblxucHJpdmF0ZSBpbml0aWFsaXplRm9ybSgpIHtcbiAgaWYgKCF0aGlzLmJvb2tsZXRKU09OIHx8ICF0aGlzLmJvb2tsZXRKU09OLmJvb2tRdWVzdGlvbnNNYXApIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgYm9va2xldEpTT04gc3RydWN0dXJlXCIpO1xuICAgICAgcmV0dXJuO1xuICB9XG5cbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3N0YXR1cycsIFwiZWRpdFwiKTtcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3VuaXF1ZV9pZCcsIHRoaXMuYm9va2xldElkKTtcbiAgdGhpcy5mb3JtRWxlbWVudHMgPSBbXTtcbiAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuY2xlYXJFbGVtZW50cygpO1xuXG4gIGNvbnN0IGJvb2tRdWVzdGlvbnNNYXBLZXlzID0gT2JqZWN0LmtleXModGhpcy5ib29rbGV0SlNPTi5ib29rUXVlc3Rpb25zTWFwKTtcbiAgaWYgKGJvb2tRdWVzdGlvbnNNYXBLZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIHRoaXMuYm9va0lkID0gYm9va1F1ZXN0aW9uc01hcEtleXNbMF07XG5cbiAgdGhpcy5ib29rbGV0SlNPTi5ib29rUXVlc3Rpb25zTWFwW3RoaXMuYm9va0lkXT8uc3ViUXVlc3Rpb25zPy5mb3JFYWNoKG5ld0VsZW1lbnQgPT4ge1xuICAgICAgaWYgKHRoaXMuYm9va2xldEpTT04uc3FPcHRpb25zPy5bbmV3RWxlbWVudC5pZF0pIHtcbiAgICAgICAgICBuZXdFbGVtZW50Lm9wdGlvbnMgPSB0aGlzLmJvb2tsZXRKU09OLnNxT3B0aW9uc1tuZXdFbGVtZW50LmlkXS5vcHRpb25zO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuYWRkRWxlbWVudChuZXdFbGVtZW50KTtcbiAgfSk7XG5cbiAgdGhpcy5mb3JtRWxlbWVudHMgPSB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5nZXRFbGVtZW50cygpO1xufVxuXG4vLyBuZ09uRGVzdHJveSgpIHtcbi8vICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbi8vIH1cblxuZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZm9ybUVsZW1lbnRzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xufVxuXG4vLyBBZGQgdGhpcyBtZXRob2QgdG8gaGFuZGxlIGVsZW1lbnQgc2VsZWN0aW9uXG5zZWxlY3RFbGVtZW50KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnNlbGVjdGVkRmllbGRJbmRleCA9IGluZGV4OyAvLyBlbGVtZW50IGlzIHNlbGVjdGVkXG4gICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2Uuc2V0U2VsZWN0ZWRFbGVtZW50KGluZGV4KTtcbiAgICAvL2NvbnN0IGVsZW1lbnQgPSB0aGlzLmZvcm1FbGVtZW50c1tpbmRleF07XG4gICAgLy8gdGhpcy5lbGVtZW50QnV0dG9uQ2xpY2tlZC5lbWl0KGVsZW1lbnQudHlwZSk7ICBcbn1cbi8vc2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5zZWxlY3RlZEZpZWxkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsOyAvLyBlbGVtZW50IGlzIGNsZWFyZWRcblxuYWRkRWxlbWVudCh0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgIGNvbnN0IHVuaXF1ZV9pZCA9IHV1aWR2NCgpO1xuICAgIGNvbnN0IG5ld0VsZW1lbnQgPSB7XG4gICAgICBpZDogdW5pcXVlX2lkLFxuICAgICAgdWlkOiB1bmlxdWVfaWQsXG4gICAgICB0eXBlLFxuICAgICAgbmFtZTogJycsXG4gICAgICBxdWVzdGlvblRleHQ6ICcnLFxuICAgICAgcXVlc3Rpb246ICcnLFxuICAgICAgaGVscFRleHQ6ICcnLFxuICAgICAgZXJyb3JNZXNzYWdlOiAnJyxcbiAgICAgIGlzUmVhZE9ubHk6IGZhbHNlLFxuICAgICAgaXNIaWRkZW46IGZhbHNlLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgc3ViVGV4dDogJycsXG4gICAgICByZWZlcmVuY2VGaWVsZDogJycsXG4gICAgICBhZGRpdGlvbmFsUmljaENvbnRlbnQ6ICcnLFxuICAgICAgZ3JvdXBOYW1lOiAnJyxcbiAgICAgIGlzRGF0ZUJhY2t3YXJkOiBmYWxzZSxcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIHN1YlRpdGxlOiAnJyxcbiAgICAgIGlzRGF0ZUZvcndhcmQ6IGZhbHNlLFxuICAgICAgaXNPcHRpb25hbDogZmFsc2UsXG4gICAgICBpc1RpdGxlOiBmYWxzZSxcbiAgICAgIG5leHRRdWVzdGlvbjogJycsXG4gICAgICBhbGxvd2VkRmlsZUV4dGVuc2lvbnM6ICcnLFxuICAgICAgcXVlc3Rpb25OdW1iZXI6IHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLmdldEVsZW1lbnRzKCkubGVuZ3RoICsgMSxcbiAgICAgIHF1ZXN0aW9uQm9va0lkOiAnJyxcbiAgICAgIHBhcmVudFF1ZXN0aW9uOiAnJyxcbiAgICAgIGZpZWxkc01ldGE6ICcnLFxuICAgICAgcmVjb3JkVHlwZU5hbWU6ICcnLFxuICAgICAgcmVjb3JkVHlwZUlkOiAnJyxcbiAgICAgIHRyYWNraW5nSWQ6ICcnLFxuICAgICAgZGF0ZVRleHQ6ICcnLFxuICAgICAgdGltZVRleHQ6ICcnLFxuICAgICAgcmVjb3JkSWQ6ICcnLFxuICAgICAgcWJSZWZlcmVuY2U6ICcnLFxuICAgICAgcWJSZWZlcmVuY2VRdWVzdGlvbnM6ICcnLFxuICAgICAgcXVlc3Rpb25Cb29rU3ViVGl0bGU6ICcnLFxuICAgICAgc3R5bGU6ICcnLFxuICAgICAgb3B0aW9uczogdHlwZSA9PT0gJ0Ryb3Bkb3duJyB8fCB0eXBlID09PSAnUmFkaW8nIHx8IHR5cGUgPT09ICdDaGVja0JveCcgPyBbXSA6IG51bGwsXG4gICAgXG4gICAgfTtcbiAgICB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5hZGRFbGVtZW50KG5ld0VsZW1lbnQpO1xuICAgIHRoaXMuZm9ybUVsZW1lbnRzID0gdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuZ2V0RWxlbWVudHMoKTtcbn1cblxuLy8gUmVtb3ZlIGFuIGVsZW1lbnQgYnkgaW5kZXhcbnJlbW92ZUVsZW1lbnQoZmllbGQ6IGFueSxpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UucmVtb3ZlRWxlbWVudENvbXBvbmVudChmaWVsZC5pZCk7XG4gICAgdGhpcy5mb3JtRWxlbWVudHM9dGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuZ2V0RWxlbWVudHMoKTtcbn1cbiAgXG5nZXRGb250U3R5bGVzKGZpZWxkOiBhbnkpOiBhbnkge1xuICBjb25zdCBzdHlsZXM6IGFueSA9IHtcbiAgICAgICdmb250LWZhbWlseSc6IGZpZWxkLmZvbnQgfHwgJ0hlbHZldGljYSBOZXVlJyxcbiAgICAgICdmb250LXdlaWdodCc6IGZpZWxkLmZvbnRXZWlnaHQgfHwgJzQwMCcsXG4gICAgICAnd2lkdGgnOiBmaWVsZC5zaXplID8gYCR7KGZpZWxkLnNpemUgLyAxMikgKiAxMDB9JWAgOiAnMTAwJScsXG4gICAgICAnbWluLWhlaWdodCc6IGZpZWxkLmhlaWdodCA/IGAke2ZpZWxkLmhlaWdodH1weGAgOiAnYXV0bycsXG4gICAgICAndGV4dC1hbGlnbic6IGZpZWxkLnRleHRBbGlnbiB8fCAnbGVmdCcsXG4gICAgICAnYm9yZGVyLXJhZGl1cyc6ICc1cHgnLFxuICAgICAgJ21hcmdpbi1ib3R0b20nOiAnMTBweCdcbiAgfTtcblxuICAvLyBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5zdHlsZXMpKSB7XG4gIC8vICAgICBzdHlsZXNbJ2ZvbnQtd2VpZ2h0J10gPSBmaWVsZC5zdHlsZXMuaW5jbHVkZXMoJ2JvbGQnKSA/ICc3MDAnIDogc3R5bGVzWydmb250LXdlaWdodCddO1xuICAvLyAgICAgc3R5bGVzWydmb250LXN0eWxlJ10gPSBmaWVsZC5zdHlsZXMuaW5jbHVkZXMoJ2l0YWxpYycpID8gJ2l0YWxpYycgOiB1bmRlZmluZWQ7XG4gIC8vICAgICBzdHlsZXNbJ3RleHQtZGVjb3JhdGlvbiddID0gZmllbGQuc3R5bGVzLmluY2x1ZGVzKCd1bmRlcmxpbmUnKSA/ICd1bmRlcmxpbmUnIDogdW5kZWZpbmVkO1xuICAvLyAgICAgc3R5bGVzWyd0ZXh0LXRyYW5zZm9ybSddID0gZmllbGQuc3R5bGVzLmluY2x1ZGVzKCdjYXBpdGFsaXplJykgPyAnY2FwaXRhbGl6ZScgOlxuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuc3R5bGVzLmluY2x1ZGVzKCdsb3dlcmNhc2UnKSA/ICdsb3dlcmNhc2UnIDogdW5kZWZpbmVkO1xuICAvLyB9XG5cbiAgcmV0dXJuIHN0eWxlcztcbn1cblxufVxuXG5cbiIsIjwhLS0gQVAgMjJKQU4yNSAtIGZvcm0gcHJldmlldyBhbmQgQWxsIGZvcm0gZWxlbWVudHMgLS0+XG4gPCEtLSBBUCAyNUZFQjI1IC0gQWxsIGVsZW1lbnRzIHVwZGF0ZSAtLT5cbjxkaXYgY2xhc3M9XCJjZW50ZXItZnJhbWVcIj5cbiAgPGxpbmsgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG86MzAwLDQwMCw1MDAmZGlzcGxheT1zd2FwXCIgcmVsPVwic3R5bGVzaGVldFwiPlxuXG48IS0tIEZvcm0gQnVpbGRlciBTZWN0aW9uIEFsbCBFbGVtZW50cyAtLT5cbjxkaXYgY2xhc3M9XCJmb3JtLWJ1aWxkZXJcIj5cbiAgPCEtLSBCYXNpYyBFbGVtZW50cyBUb2dnbGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJ0b2dnbGUtaGVhZGVyXCIgKGNsaWNrKT1cInRvZ2dsZVNlY3Rpb24oJ2Jhc2ljJylcIj5cbiAgICA8aDM+QmFzaWMgRWxlbWVudHM8L2gzPlxuICAgIDxzcGFuIGNsYXNzPVwidG9nZ2xlLWljb25cIj57eyBzZWN0aW9ucy5iYXNpYyA/ICfilrwnIDogJ+KWticgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJzZWN0aW9ucy5iYXNpY1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2YgYmFzaWNFbGVtZW50c1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImVsZW1lbnRcIiAoY2xpY2spPVwiYWRkRWxlbWVudChlbGVtZW50LnR5cGUpXCIgY2RrRHJhZz5cbiAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMve3sgZWxlbWVudC5pbWcgfX0uc3ZnXCIgY2xhc3M9XCJlbGVtZW50LWljb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhvdmVyLWxhYmVsXCI+e3sgZWxlbWVudC5sYWJlbCB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQWR2YW5jZWQgRWxlbWVudHMgVG9nZ2xlIC0tPlxuICA8ZGl2IGNsYXNzPVwidG9nZ2xlLWhlYWRlclwiIChjbGljayk9XCJ0b2dnbGVTZWN0aW9uKCdhZHZhbmNlZCcpXCI+XG4gICAgPGgzPkFkdmFuY2VkIEVsZW1lbnRzPC9oMz5cbiAgICA8c3Bhbj57eyBzZWN0aW9ucy5hZHZhbmNlZCA/ICfilrwnIDogJ+KWticgfX08L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwic2VjdGlvbnMuYWR2YW5jZWRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIGFkdmFuY2VkRWxlbWVudHNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbGVtZW50XCIgKGNsaWNrKT1cImFkZEVsZW1lbnQoZWxlbWVudC50eXBlKVwiPlxuICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy97eyBlbGVtZW50LmltZyB9fS5zdmdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhvdmVyLWxhYmVsXCI+e3sgZWxlbWVudC5sYWJlbCB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4gIFxuPGRpdiBjbGFzcz1cImZvcm0tcHJldmlld1wiIGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdERhdGFdPVwiZm9ybUVsZW1lbnRzXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZvcm1FbGVtZW50czsgbGV0IGkgPSBpbmRleFwiIGdldFByb3BlcnRpZXMoKS5lbGVtZW50UHJvcHM+XG5cbjwhLS0gVGV4dEJveCAtLT5cbjxkaXYgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnVGV4dCdcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbiAgW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPiAgXG4gIDxkaXYgY2xhc3M9XCJmaWVsZC13cmFwcGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRlbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250YWluZXJcIj5cbiAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5pc1JlcXVpcmVkXCI+e3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ0xhYmVsJyB9fTwvbGFiZWw+XG4gICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgICAgPC9kaXY+ICAgIFxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwiZmllbGQucXVlc3Rpb24gfHwgJ0VudGVyIHRleHQnXCIgW3JlYWRvbmx5XT1cImZpZWxkLmlzUmVhZE9ubHlcIiBcbiAgICAgIFtjbGFzcy5oaWRkZW5dPVwiZmllbGQuaXNIaWRkZW5cIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIENhbGVuZGFyIC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdDYWxlbmRhcidcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbiAgW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCI+XG4gICAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5pc1JlcXVpcmVkXCI+e3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ1NlbGVjdCBEYXRlJyB9fTwvbGFiZWw+XG4gICAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvVHJhc2guc3ZnXCIgKGNsaWNrKT1cInJlbW92ZUVsZW1lbnQoZmllbGQsIGkpXCIgIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJkYXRlXCIgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbcmVhZG9ubHldPVwiZmllbGQuaXNSZWFkT25seVwiIFtjbGFzcy5oaWRkZW5dPVwiZmllbGQuaXNIaWRkZW5cIi8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIEVtYWlsIC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdFbWFpbCdcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbltjbGFzcy5oaWdobGlnaHRdPVwic2VsZWN0ZWRGaWVsZEluZGV4ID09PSBpXCIgY2RrRHJhZz5cbiAgIDxkaXYgY2xhc3M9XCJmaWVsZC13cmFwcGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5pc1JlcXVpcmVkXCI+IHt7IGZpZWxkLnF1ZXN0aW9uVGV4dCA/IGZpZWxkLnF1ZXN0aW9uVGV4dCA6ICdMYWJlbCcgfX0gPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgICAgICAgIDwvZGl2PiAgICAgICAgXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIGNsYXNzPVwiY3VzdG9tLWlucHV0XCIgW3BsYWNlaG9sZGVyXT1cImZpZWxkLnF1ZXN0aW9uIHx8ICdFbnRlciBlbWFpbCdcIiBbcmVhZG9ubHldPVwiZmllbGQuaXNSZWFkT25seVwiIFxuICAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cImZpZWxkLmlzSGlkZGVuXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIE51bWJlcnMgLS0+XG48ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ051bWJlcidcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbiBbY2xhc3MuaGlnaGxpZ2h0XT1cInNlbGVjdGVkRmllbGRJbmRleCA9PT0gaVwiIGNka0RyYWc+IFxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBbY2xhc3MucmVxdWlyZWRdPVwiZmllbGQuaXNSZXF1aXJlZFwiPnt7IGZpZWxkLnF1ZXN0aW9uVGV4dCA/IGZpZWxkLnF1ZXN0aW9uVGV4dCA6ICdMYWJlbCcgfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChmaWVsZCwgaSlcIiBjbGFzcz1cImRlbGV0ZS1pY29uXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICBcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwiZmllbGQucXVlc3Rpb24gfHwgJ0VudGVyIG51bWJlcidcIiBbcmVhZG9ubHldPVwiZmllbGQuaXNSZWFkT25seVwiIFxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiZmllbGQuaXNIaWRkZW5cIi8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuPC9kaXY+XG4gICAgICBcbjwhLS0gVGV4dEFyZWEgLS0+XG48ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ1RleHRBcmVhJ1wiIGNsYXNzPVwiZmllbGQtY29udGFpbmVyXCIgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoaSlcIiBbbmdTdHlsZV09XCJnZXRGb250U3R5bGVzKGZpZWxkKVwiIFxuIFtjbGFzcy5oaWdobGlnaHRdPVwic2VsZWN0ZWRGaWVsZEluZGV4ID09PSBpXCIgY2RrRHJhZz5cbiAgIDxkaXYgY2xhc3M9XCJmaWVsZC13cmFwcGVyXCI+XG4gICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250ZW50XCI+XG4gICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5pc1JlcXVpcmVkXCI+e3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ0VudGVyIHlvdXIgdGV4dCcgfX1cbiAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWVsZC5yZXF1aXJlZFwiIGNsYXNzPVwidGV4dC1yZWQtNTAwXCI+Kjwvc3Bhbj5cbiAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChmaWVsZCwgaSlcIiBjbGFzcz1cImRlbGV0ZS1pY29uXCIgLz5cbiAgICAgICA8L2Rpdj4gICAgXG4gICAgICAgPHRleHRhcmVhIGNsYXNzPVwiY3VzdG9tLXRleHRhcmVhXCIgW3BsYWNlaG9sZGVyXT1cImZpZWxkLnF1ZXN0aW9uIHx8ICdFbnRlciBkZXRhaWxlZCB0ZXh0IGhlcmUuLi4nXCIgW3N0eWxlLmhlaWdodC5weF09XCJmaWVsZC5zaXplIHx8IDEwMFwiXG4gICAgICAgW3JlYWRvbmx5XT1cImZpZWxkLmlzUmVhZE9ubHlcIiBbY2xhc3MuaGlkZGVuXT1cImZpZWxkLmlzSGlkZGVuXCI+XG4gICAgICAgPC90ZXh0YXJlYT5cbiAgICAgPC9kaXY+XG4gICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIExhYmVsIC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdMYWJlbCdcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIlxuW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPlxuPGRpdiBjbGFzcz1cImZpZWxkLXdyYXBwZXJcIj5cbiA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICA8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cImZpZWxkLmlzUmVxdWlyZWRcIj57eyBmaWVsZC5xdWVzdGlvblRleHQgPyBmaWVsZC5xdWVzdGlvblRleHQgOiAnTGFiZWwnIH19PC9sYWJlbD5cbiAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvVHJhc2guc3ZnXCIgKGNsaWNrKT1cInJlbW92ZUVsZW1lbnQoZmllbGQsIGkpXCIgY2xhc3M9XCJkZWxldGUtaWNvblwiLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIEltYWdlIC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdJbWFnZSdcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbltjbGFzcy5oaWdobGlnaHRdPVwic2VsZWN0ZWRGaWVsZEluZGV4ID09PSBpXCIgY2RrRHJhZz5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC13cmFwcGVyXCI+XG4gICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRlbnRcIj5cbiAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250YWluZXJcIj5cbiAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5pc1JlcXVpcmVkXCI+IHt7IGZpZWxkLnF1ZXN0aW9uVGV4dCA/IGZpZWxkLnF1ZXN0aW9uVGV4dCA6ICdVcGxvYWQgSW1hZ2UnIH19IDwvbGFiZWw+XG4gICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJpbWFnZS8qXCIgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbcmVhZG9ubHldPVwiZmllbGQuaXNSZWFkT25seVwiIFtjbGFzcy5oaWRkZW5dPVwiZmllbGQuaXNIaWRkZW5cIi8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbiA8IS0tIEZpbGUgLS0+XG48ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ0ZpbGUnXCIgY2xhc3M9XCJmaWVsZC1jb250YWluZXJcIiAoY2xpY2spPVwic2VsZWN0RWxlbWVudChpKVwiIFtuZ1N0eWxlXT1cImdldEZvbnRTdHlsZXMoZmllbGQpXCIgXG4gIFtjbGFzcy5oaWdobGlnaHRdPVwic2VsZWN0ZWRGaWVsZEluZGV4ID09PSBpXCIgY2RrRHJhZz5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQtd3JhcHBlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiPlxuICAgICA8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cImZpZWxkLmlzUmVxdWlyZWRcIj57eyBmaWVsZC5xdWVzdGlvblRleHQgPyBmaWVsZC5xdWVzdGlvblRleHQgOiAnVXBsb2FkIEZpbGUnIH19PC9sYWJlbD5cbiAgICAgPGltZyAgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgPC9kaXY+XG4gICA8aW5wdXQgdHlwZT1cImZpbGVcIiBjbGFzcz1cImN1c3RvbS1pbnB1dFwiIFtyZWFkb25seV09XCJmaWVsZC5pc1JlYWRPbmx5XCIgW2NsYXNzLmhpZGRlbl09XCJmaWVsZC5pc0hpZGRlblwiLz5cbiAgICA8L2Rpdj5cbiAgIDwvZGl2PlxuPC9kaXY+XG4gIFxuPCEtLSBDaGVja0JveCAtLT5cbjxkaXYgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnQ2hlY2tCb3gnXCIgY2xhc3M9XCJjaGVja2JveC1maWVsZC1jb250YWluZXJcIiAoY2xpY2spPVwic2VsZWN0RWxlbWVudChpKVwiIFtuZ1N0eWxlXT1cImdldEZvbnRTdHlsZXMoZmllbGQpXCIgXG4gIFtjbGFzcy5oaWdobGlnaHRdPVwic2VsZWN0ZWRGaWVsZEluZGV4ID09PSBpXCIgY2RrRHJhZz5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC13cmFwcGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiPiAgIFxuICAgICAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5pc1JlcXVpcmVkXCI+e3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ0xhYmVsJyB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChmaWVsZCwgaSlcIiBjbGFzcz1cImRlbGV0ZS1pY29uXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtb3B0aW9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWVsZC5vcHRpb25zXCIgY2xhc3M9XCJjaGVja2JveC1vcHRpb25cIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtpZF09XCJvcHRpb24udmFsdWUgKyBpXCIgW25hbWVdPVwiZmllbGQuaWRcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCIgY2xhc3M9XCJjaGVja2JveC1pbnB1dFwiXG4gICAgICAgICAgICAgIFtyZWFkb25seV09XCJmaWVsZC5pc1JlYWRPbmx5XCIgW2NsYXNzLmhpZGRlbl09XCJmaWVsZC5pc0hpZGRlblwiPlxuICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCJvcHRpb24udmFsdWUgKyBpXCIgY2xhc3M9XCJjaGVja2JveC1sYWJlbFwiPnt7IG9wdGlvbi52YWx1ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbjwvZGl2PiAgIFxuXG48IS0tIFJhZGlvIC0tPlxuPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdSYWRpbydcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbltjbGFzcy5oaWdobGlnaHRdPVwic2VsZWN0ZWRGaWVsZEluZGV4ID09PSBpXCIgY2RrRHJhZz5cbiAgPGRpdiBjbGFzcz1cImZpZWxkLXdyYXBwZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250YWluZXJcIj4gICBcbiAgICAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cImZpZWxkLmlzUmVxdWlyZWRcIj57eyBmaWVsZC5xdWVzdGlvblRleHQgPyBmaWVsZC5xdWVzdGlvblRleHQgOiAnTGFiZWwnIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChmaWVsZCwgaSlcIiBjbGFzcz1cImRlbGV0ZS1pY29uXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLW9wdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpZWxkLm9wdGlvbnM7IGxldCBqID0gaW5kZXhcIiBjbGFzcz1cInJhZGlvLW9wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2lkXT1cIidyYWRpby0nICsgZmllbGQuaWQgKyAnLScgKyBqXCIgW25hbWVdPVwiJ3JhZGlvLWdyb3VwLScgKyBmaWVsZC5pZFwiICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuc2VsZWN0ZWRWYWx1ZVwiIGNsYXNzPVwicmFkaW8taW5wdXRcIiBbcmVhZG9ubHldPVwiZmllbGQuaXNSZWFkT25seVwiIFtjbGFzcy5oaWRkZW5dPVwiZmllbGQuaXNIaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3JhZGlvLScgKyBmaWVsZC5pZCArICctJyArIGpcIiBjbGFzcz1cInJhZGlvLWxhYmVsXCI+IHt7IG9wdGlvbi52YWx1ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiBcbjwhLS0gRHJvcGRvd24gLS0+XG48ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ0Ryb3Bkb3duJ1wiIGNsYXNzPVwiZmllbGQtY29udGFpbmVyXCIgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoaSlcIiBbbmdTdHlsZV09XCJnZXRGb250U3R5bGVzKGZpZWxkKVwiIFxuW2NsYXNzLmhpZ2hsaWdodF09XCJzZWxlY3RlZEZpZWxkSW5kZXggPT09IGlcIiBjZGtEcmFnPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZC13cmFwcGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCI+ICAgXG4gICAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5pc1JlcXVpcmVkXCI+e3sgZmllbGQucXVlc3Rpb25UZXh0ID8gZmllbGQucXVlc3Rpb25UZXh0IDogJ0xhYmVsJyB9fTwvbGFiZWw+XG4gICAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvVHJhc2guc3ZnXCIgKGNsaWNrKT1cInJlbW92ZUVsZW1lbnQoZmllbGQsIGkpXCIgY2xhc3M9XCJkZWxldGUtaWNvblwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c2VsZWN0IGlkPVwib3B0aW9uc1wiIGNsYXNzPVwiZHJvcGRvd25cIltkaXNhYmxlZF09XCJmaWVsZC5pc1JlYWRPbmx5XCIgW2NsYXNzLmhpZGRlbl09XCJmaWVsZC5pc0hpZGRlblwiID5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmllbGQub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj4ge3sgb3B0aW9uLnZhbHVlIH19IDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4gICAgXG48IS0tICBUYWJsZSAgLS0+XG4gIDwhLS0gQVAtMDZNQVIyNSAtLT5cbjxkaXYgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnVGFibGUnXCIgY2xhc3M9XCJmaWVsZC1jb250YWluZXJcIiAoY2xpY2spPVwic2VsZWN0RWxlbWVudChpKVwiIFtuZ1N0eWxlXT1cImdldEZvbnRTdHlsZXMoZmllbGQpXCIgXG5bY2xhc3MuaGlnaGxpZ2h0XT1cInNlbGVjdGVkRmllbGRJbmRleCA9PT0gaVwiIGNka0RyYWc+XG48ZGl2IGNsYXNzPVwiZmllbGQtd3JhcHBlclwiPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCI+ICAgXG4gICAgICA8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cImZpZWxkLmlzUmVxdWlyZWRcIj57eyBmaWVsZC5xdWVzdGlvblRleHQgPyBmaWVsZC5xdWVzdGlvblRleHQgOiAnTGFiZWwnIH19PC9sYWJlbD5cbiAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChmaWVsZCwgaSlcIiBjbGFzcz1cImRlbGV0ZS1pY29uXCIgLz5cbiAgICAgPC9kaXY+XG4gICA8L2Rpdj5cbiA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIExpc3QgLS0+XG4gPCEtLSBBUC0wNk1BUjI1IC0gTGlzdCBkYXRhIHNob3ctLT5cbjxkaXYgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnTGlzdCdcIiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIiBcbltjbGFzcy5oaWdobGlnaHRdPVwic2VsZWN0ZWRGaWVsZEluZGV4ID09PSBpXCIgY2RrRHJhZz5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQtd3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBbY2xhc3MucmVxdWlyZWRdPVwiZmllbGQuaXNSZXF1aXJlZFwiPnt7IGZpZWxkLnF1ZXN0aW9uVGV4dCA/IGZpZWxkLnF1ZXN0aW9uVGV4dCA6ICdMYWJlbCcgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAvPlxuICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgIFxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImN1c3RvbS1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCIgW3JlYWRvbmx5XT1cImZpZWxkLmlzUmVhZE9ubHlcIiBbY2xhc3MuaGlkZGVuXT1cImZpZWxkLmlzSGlkZGVuXCIvPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG4gIDwhLS0gQm9vayAtLT5cbjwhLS0gPGRpdiAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdCb29rJ1wiICBzdHlsZT1cInBhZGRpbmc6IDEwcHg7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlc21va2U7XCIgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoaSlcIiBbbmdTdHlsZV09XCJnZXRGb250U3R5bGVzKGZpZWxkKVwiIGNka0RyYWc+XG4gIDxkaXYgY2xhc3M9XCJmbGV4XCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxuICAgIDxkaXYgY2xhc3M9XCJhbGwtZG90c1wiPjxkaXYgKm5nRm9yPVwibGV0IF8gb2YgWzEsMiwzLDQsNSw2LDcsOF1cIj48L2Rpdj48L2Rpdj5cbiAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDk3JTtcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGxhYi1jb25hdGluZXJcIj5cbiAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiPnt7IGZpZWxkLnF1ZXN0aW9uVGV4dCA/IGZpZWxkLnF1ZXN0aW9uVGV4dCA6ICdCb29rIFRpdGxlJyB9fTwvbGFiZWw+XG4gICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVFbGVtZW50KGZpZWxkLCBpKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4gLS0+XG4gICAgICBcbjwhLS0gQnV0dG9uIC0tPlxuPCEtLSA8ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ0J1dHRvbidcIiBjbGFzcz1cImJ1dHRvbi1jb250YWluZXJcIiBjZGtEcmFnIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGkpXCIgW25nU3R5bGVdPVwiZ2V0Rm9udFN0eWxlcyhmaWVsZClcIj5cbiAgICAgICAgICAgIDxidXR0b24+e3sgZmllbGQucXVlc3Rpb25UZXh0IH19PC9idXR0b24+XG4gICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChmaWVsZCwgaSlcIiAvPlxuICAgICAgICAgIDwvZGl2PiAtLT5cblxuPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbjwvZGl2PlxuXG5cblxuXG4iXX0=
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
// AP-29JAN25
|
|
2
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "../element/element.component";
|
|
5
|
-
import * as i2 from "../properties/properties.component";
|
|
6
|
-
export class FormComponent {
|
|
7
|
-
// Input data for app-element
|
|
8
|
-
// bookletJson: any = {}; // Replace with your actual JSON object
|
|
9
|
-
// bookletId: string = '123'; // Replace with your actual booklet ID
|
|
10
|
-
bookletJSON;
|
|
11
|
-
bookletId;
|
|
12
|
-
formButtonHandler = new EventEmitter();
|
|
13
|
-
// Input data for app-properties
|
|
14
|
-
// api: string = 'https://example.com/api'; // Replace with your actual API endpoint
|
|
15
|
-
// apiMethod: string = 'GET'; // Replace with your actual API method
|
|
16
|
-
selectedElementType = 'button'; // Replace with the default selected element type
|
|
17
|
-
// Event handler for app-element
|
|
18
|
-
formButtonHandlerClick(event) {
|
|
19
|
-
this.formButtonHandler.emit(event);
|
|
20
|
-
}
|
|
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%}app-properties{width:25%;overflow-y:auto;border:10px solid #86A8CD}\n"], dependencies: [{ kind: "component", type: i1.ElementComponent, selector: "app-element", inputs: ["bookletJSON", "bookletId"] }, { kind: "component", type: i2.PropertiesComponent, selector: "app-properties", inputs: ["selectedElementType"], outputs: ["formButtonHandler"] }] });
|
|
23
|
-
}
|
|
24
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormComponent, decorators: [{
|
|
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%}app-properties{width:25%;overflow-y:auto;border:10px solid #86A8CD}\n"] }]
|
|
27
|
-
}], propDecorators: { bookletJSON: [{
|
|
28
|
-
type: Input
|
|
29
|
-
}], bookletId: [{
|
|
30
|
-
type: Input
|
|
31
|
-
}], formButtonHandler: [{
|
|
32
|
-
type: Output
|
|
33
|
-
}] } });
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvYnVpbGRlci9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BhZ2VzL2J1aWxkZXIvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWM7QUFDZCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBT3ZFLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLDZCQUE2QjtJQUM3QixpRUFBaUU7SUFDakUsb0VBQW9FO0lBQ3pELFdBQVcsQ0FBTTtJQUNqQixTQUFTLENBQU07SUFDZCxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRTNELGdDQUFnQztJQUNoQyxvRkFBb0Y7SUFDcEYsb0VBQW9FO0lBQ3BFLG1CQUFtQixHQUFXLFFBQVEsQ0FBQyxDQUFDLGlEQUFpRDtJQUV6RixnQ0FBZ0M7SUFDaEMsc0JBQXNCLENBQUMsS0FBSztRQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7d0dBaEJVLGFBQWE7NEZBQWIsYUFBYSw2S0NSMUIsMFVBUUU7OzRGREFXLGFBQWE7a0JBTHpCLFNBQVM7K0JBQ0Usa0JBQWtCOzhCQVFqQixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQVAtMjlKQU4yNSBcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1mb3JtLWJ1aWxkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IHtcbiAgLy8gSW5wdXQgZGF0YSBmb3IgYXBwLWVsZW1lbnRcbiAgLy8gYm9va2xldEpzb246IGFueSA9IHt9OyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgSlNPTiBvYmplY3RcbiAgLy8gYm9va2xldElkOiBzdHJpbmcgPSAnMTIzJzsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYWN0dWFsIGJvb2tsZXQgSURcbiAgICBASW5wdXQoKSBib29rbGV0SlNPTjogYW55O1xuICAgIEBJbnB1dCgpIGJvb2tsZXRJZDogYW55O1xuICAgIEBPdXRwdXQoKSBmb3JtQnV0dG9uSGFuZGxlciA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8vIElucHV0IGRhdGEgZm9yIGFwcC1wcm9wZXJ0aWVzXG4gIC8vIGFwaTogc3RyaW5nID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20vYXBpJzsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYWN0dWFsIEFQSSBlbmRwb2ludFxuICAvLyBhcGlNZXRob2Q6IHN0cmluZyA9ICdHRVQnOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgQVBJIG1ldGhvZFxuICBzZWxlY3RlZEVsZW1lbnRUeXBlOiBzdHJpbmcgPSAnYnV0dG9uJzsgLy8gUmVwbGFjZSB3aXRoIHRoZSBkZWZhdWx0IHNlbGVjdGVkIGVsZW1lbnQgdHlwZVxuXG4gIC8vIEV2ZW50IGhhbmRsZXIgZm9yIGFwcC1lbGVtZW50XG4gIGZvcm1CdXR0b25IYW5kbGVyQ2xpY2soZXZlbnQpe1xuICAgIHRoaXMuZm9ybUJ1dHRvbkhhbmRsZXIuZW1pdChldmVudCk7XG4gIH1cbn1cbiIsIjwhLS0gQVAtMjlKQU4yNSAtLT5cbjxkaXYgY2xhc3M9XCJmb3JtLWNvbnRhaW5lciBcIj5cbiAgICA8IS0tIGFwcC1lbGVtZW50IENvbXBvbmVudCAtLT5cbiAgICA8YXBwLWVsZW1lbnQgW2Jvb2tsZXRKU09OXT1cImJvb2tsZXRKU09OXCIgW2Jvb2tsZXRJZF09XCJib29rbGV0SWRcIj48L2FwcC1lbGVtZW50PlxuICBcbiAgICA8IS0tIGFwcC1wcm9wZXJ0aWVzIENvbXBvbmVudCAtLT5cbiAgICA8YXBwLXByb3BlcnRpZXMgKGZvcm1CdXR0b25IYW5kbGVyKT1cImZvcm1CdXR0b25IYW5kbGVyQ2xpY2soJGV2ZW50KVwiPjwvYXBwLXByb3BlcnRpZXM+XG4gIDwvZGl2PlxuICAiXX0=
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
// AP 22JAN25
|
|
2
|
-
import { Component } from '@angular/core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common";
|
|
5
|
-
export class MenuComponent {
|
|
6
|
-
activeIndex = 0;
|
|
7
|
-
menuItems = [
|
|
8
|
-
{ icon: '../assets/icons/Related.svg' },
|
|
9
|
-
{ icon: '../assets/icons/TextColumns.svg' },
|
|
10
|
-
{ icon: '../assets/icons/Monotone.svg' },
|
|
11
|
-
{ icon: '../assets/icons/Preview1.svg' },
|
|
12
|
-
{ icon: '../assets/icons/Website.svg' },
|
|
13
|
-
{ icon: '../assets/icons/Preview2.svg' },
|
|
14
|
-
{ icon: '../assets/icons/pdf.svg' },
|
|
15
|
-
{ icon: '../assets/icons/Setting.svg' }
|
|
16
|
-
// { icon: '../assets/icons/ProfileImage.svg' }
|
|
17
|
-
];
|
|
18
|
-
setActiveMenu(index) {
|
|
19
|
-
this.activeIndex = index;
|
|
20
|
-
}
|
|
21
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
22
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MenuComponent, selector: "app-menu", ngImport: i0, template: "<!-- AP 22JAN25 - Top menu ,Left side menu -->\n<!-- menu.component.html -->\n<div class=\"top-bar\">\n <button class=\"button share-button\">Share</button>\n <button class=\"button publish-button\">Publish</button>\n</div>\n<div class=\"menu-sidebar\">\n <!-- Logo Section -->\n <div class=\"menu-logo\">\n <img src=\"../assets/Nxt.png\">\n </div>\n\n <!-- Menu Items -->\n <ul class=\"menu-list\">\n <li\n *ngFor=\"let item of menuItems; let i = index\"\n class=\"menu-item\"\n [class.active]=\"activeIndex === i\"\n (click)=\"setActiveMenu(i)\"\n [attr.aria-label]=\"item.label\"\n >\n <!-- Dynamic Icon -->\n <img [src]=\"item.icon\" alt=\"Menu Icon\" class=\"menu-icon\" />\n </li>\n </ul>\n\n <!-- Profile Section -->\n <div class=\"menu-profile\">\n <img src=\"../assets/icons/ProfileImage.svg\" />\n </div>\n</div>\n\n", styles: [".top-bar{display:flex;justify-content:flex-end;padding:15px;background-color:#fff;border-bottom:1px solid #ccc;width:100%;position:absolute;top:-3px}.button{padding:10px 20px;margin-left:10px;font-size:1rem;border:none;border-radius:5px;cursor:pointer;transition:background-color .3s ease}.share-button{background-color:#e5e8ed;color:#384652}.share-button:hover,.publish-button{background-color:#3374f2;color:#fff}.publish-button:hover{background-color:#005f73}.menu-sidebar{width:74px;height:100vh;background-color:#fff;color:#94a3b8;display:flex;flex-direction:column;align-items:center;position:absolute;top:0;box-shadow:2px 0 5px #0000001a}.menu-logo img{width:40px;margin:20px 0}.menu-list{list-style-type:none;padding:0;margin-top:48px;flex:1}.menu-item{width:50px;height:50px;display:flex;justify-content:center;align-items:center;margin:10px 0;cursor:pointer;border-radius:8px;transition:background .3s ease}.menu-item.active,.menu-item:hover{background-color:#ffb300;border-radius:50px;color:#fff}.icon{font-size:20px}.menu-profile img{width:40px;border-radius:50%;margin-bottom:20px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
23
|
-
}
|
|
24
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuComponent, decorators: [{
|
|
25
|
-
type: Component,
|
|
26
|
-
args: [{ selector: 'app-menu', template: "<!-- AP 22JAN25 - Top menu ,Left side menu -->\n<!-- menu.component.html -->\n<div class=\"top-bar\">\n <button class=\"button share-button\">Share</button>\n <button class=\"button publish-button\">Publish</button>\n</div>\n<div class=\"menu-sidebar\">\n <!-- Logo Section -->\n <div class=\"menu-logo\">\n <img src=\"../assets/Nxt.png\">\n </div>\n\n <!-- Menu Items -->\n <ul class=\"menu-list\">\n <li\n *ngFor=\"let item of menuItems; let i = index\"\n class=\"menu-item\"\n [class.active]=\"activeIndex === i\"\n (click)=\"setActiveMenu(i)\"\n [attr.aria-label]=\"item.label\"\n >\n <!-- Dynamic Icon -->\n <img [src]=\"item.icon\" alt=\"Menu Icon\" class=\"menu-icon\" />\n </li>\n </ul>\n\n <!-- Profile Section -->\n <div class=\"menu-profile\">\n <img src=\"../assets/icons/ProfileImage.svg\" />\n </div>\n</div>\n\n", styles: [".top-bar{display:flex;justify-content:flex-end;padding:15px;background-color:#fff;border-bottom:1px solid #ccc;width:100%;position:absolute;top:-3px}.button{padding:10px 20px;margin-left:10px;font-size:1rem;border:none;border-radius:5px;cursor:pointer;transition:background-color .3s ease}.share-button{background-color:#e5e8ed;color:#384652}.share-button:hover,.publish-button{background-color:#3374f2;color:#fff}.publish-button:hover{background-color:#005f73}.menu-sidebar{width:74px;height:100vh;background-color:#fff;color:#94a3b8;display:flex;flex-direction:column;align-items:center;position:absolute;top:0;box-shadow:2px 0 5px #0000001a}.menu-logo img{width:40px;margin:20px 0}.menu-list{list-style-type:none;padding:0;margin-top:48px;flex:1}.menu-item{width:50px;height:50px;display:flex;justify-content:center;align-items:center;margin:10px 0;cursor:pointer;border-radius:8px;transition:background .3s ease}.menu-item.active,.menu-item:hover{background-color:#ffb300;border-radius:50px;color:#fff}.icon{font-size:20px}.menu-profile img{width:40px;border-radius:50%;margin-bottom:20px}\n"] }]
|
|
27
|
-
}] });
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvYnVpbGRlci9tZW51L21lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BhZ2VzL2J1aWxkZXIvbWVudS9tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWE7QUFDYixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPMUMsTUFBTSxPQUFPLGFBQWE7SUFDeEIsV0FBVyxHQUFXLENBQUMsQ0FBQztJQUV4QixTQUFTLEdBQUc7UUFDVixFQUFFLElBQUksRUFBRSw2QkFBNkIsRUFBRTtRQUN2QyxFQUFFLElBQUksRUFBRSxpQ0FBaUMsRUFBRTtRQUMzQyxFQUFFLElBQUksRUFBRSw4QkFBOEIsRUFBRTtRQUN4QyxFQUFFLElBQUksRUFBRSw4QkFBOEIsRUFBRTtRQUN4QyxFQUFFLElBQUksRUFBRSw2QkFBNkIsRUFBRTtRQUN2QyxFQUFFLElBQUksRUFBRSw4QkFBOEIsRUFBRTtRQUN4QyxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRTtRQUNuQyxFQUFFLElBQUksRUFBRSw2QkFBNkIsRUFBRTtRQUN2QywrQ0FBK0M7S0FDaEQsQ0FBQztJQUVGLGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7d0dBakJVLGFBQWE7NEZBQWIsYUFBYSxnRENSMUIsODNCQWdDQTs7NEZEeEJhLGFBQWE7a0JBTHpCLFNBQVM7K0JBQ0UsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFQIDIySkFOMjVcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWVudS5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWVudUNvbXBvbmVudCB7XG4gIGFjdGl2ZUluZGV4OiBudW1iZXIgPSAwO1xuXG4gIG1lbnVJdGVtcyA9IFtcbiAgICB7IGljb246ICcuLi9hc3NldHMvaWNvbnMvUmVsYXRlZC5zdmcnIH0sXG4gICAgeyBpY29uOiAnLi4vYXNzZXRzL2ljb25zL1RleHRDb2x1bW5zLnN2ZycgfSxcbiAgICB7IGljb246ICcuLi9hc3NldHMvaWNvbnMvTW9ub3RvbmUuc3ZnJyB9LFxuICAgIHsgaWNvbjogJy4uL2Fzc2V0cy9pY29ucy9QcmV2aWV3MS5zdmcnIH0sXG4gICAgeyBpY29uOiAnLi4vYXNzZXRzL2ljb25zL1dlYnNpdGUuc3ZnJyB9LFxuICAgIHsgaWNvbjogJy4uL2Fzc2V0cy9pY29ucy9QcmV2aWV3Mi5zdmcnIH0sXG4gICAgeyBpY29uOiAnLi4vYXNzZXRzL2ljb25zL3BkZi5zdmcnIH0sXG4gICAgeyBpY29uOiAnLi4vYXNzZXRzL2ljb25zL1NldHRpbmcuc3ZnJyB9XG4gICAgLy8geyBpY29uOiAnLi4vYXNzZXRzL2ljb25zL1Byb2ZpbGVJbWFnZS5zdmcnIH1cbiAgXTtcblxuICBzZXRBY3RpdmVNZW51KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaW5kZXg7XG4gIH1cbn1cbiIsIjwhLS0gQVAgMjJKQU4yNSAtIFRvcCBtZW51ICxMZWZ0IHNpZGUgbWVudSAgLS0+XG48IS0tIG1lbnUuY29tcG9uZW50Lmh0bWwgLS0+XG48ZGl2IGNsYXNzPVwidG9wLWJhclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gc2hhcmUtYnV0dG9uXCI+U2hhcmU8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIHB1Ymxpc2gtYnV0dG9uXCI+UHVibGlzaDwvYnV0dG9uPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwibWVudS1zaWRlYmFyXCI+XG4gIDwhLS0gTG9nbyBTZWN0aW9uIC0tPlxuICA8ZGl2IGNsYXNzPVwibWVudS1sb2dvXCI+XG4gICAgPGltZyBzcmM9XCIuLi9hc3NldHMvTnh0LnBuZ1wiPlxuICA8L2Rpdj5cblxuICA8IS0tIE1lbnUgSXRlbXMgLS0+XG4gIDx1bCBjbGFzcz1cIm1lbnUtbGlzdFwiPlxuICAgIDxsaVxuICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbWVudUl0ZW1zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgIGNsYXNzPVwibWVudS1pdGVtXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlSW5kZXggPT09IGlcIlxuICAgICAgKGNsaWNrKT1cInNldEFjdGl2ZU1lbnUoaSlcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLmxhYmVsXCJcbiAgICA+XG4gICAgICA8IS0tIER5bmFtaWMgSWNvbiAtLT5cbiAgICAgIDxpbWcgW3NyY109XCJpdGVtLmljb25cIiBhbHQ9XCJNZW51IEljb25cIiBjbGFzcz1cIm1lbnUtaWNvblwiIC8+XG4gICAgPC9saT5cbiAgPC91bD5cblxuICA8IS0tIFByb2ZpbGUgU2VjdGlvbiAtLT5cbiAgPGRpdiBjbGFzcz1cIm1lbnUtcHJvZmlsZVwiPlxuICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1Byb2ZpbGVJbWFnZS5zdmdcIiAvPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|