@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.
Files changed (143) hide show
  1. package/package.json +5 -1
  2. package/esm2022/lib/ar.i18n.mjs +0 -29
  3. package/esm2022/lib/components/button/nxt-button.component.mjs +0 -130
  4. package/esm2022/lib/components/custom-button/custom-button.component.mjs +0 -39
  5. package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +0 -366
  6. package/esm2022/lib/components/custom-date/custom-date.component.mjs +0 -47
  7. package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +0 -48
  8. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +0 -219
  9. package/esm2022/lib/components/custom-image/custom-image.component.mjs +0 -34
  10. package/esm2022/lib/components/custom-input/custom-input.component.mjs +0 -93
  11. package/esm2022/lib/components/custom-label/custom-label.component.mjs +0 -21
  12. package/esm2022/lib/components/custom-model/custom-model.component.mjs +0 -48
  13. package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +0 -115
  14. package/esm2022/lib/components/custom-rich-text/custom-rich-text.component.mjs +0 -186
  15. package/esm2022/lib/components/custom-table/custom-table.component.mjs +0 -347
  16. package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +0 -65
  17. package/esm2022/lib/components/custom-time/custom-time.component.mjs +0 -61
  18. package/esm2022/lib/components/datatable/datatable.component.mjs +0 -801
  19. package/esm2022/lib/components/dependent-table/dependent-table.component.mjs +0 -42
  20. package/esm2022/lib/components/dropdown-with-flag/dropdown-with-flag.component.mjs +0 -39
  21. package/esm2022/lib/components/file-upload/file-upload.component.mjs +0 -279
  22. package/esm2022/lib/components/file-view/file-view.component.mjs +0 -46
  23. package/esm2022/lib/components/loader/loader.component.mjs +0 -23
  24. package/esm2022/lib/components/pagination/pagination.component.mjs +0 -100
  25. package/esm2022/lib/components/pick-location/pick-location.component.mjs +0 -216
  26. package/esm2022/lib/components/search-box/search-box.component.mjs +0 -202
  27. package/esm2022/lib/components/table-appendix/table-appendix.component.mjs +0 -123
  28. package/esm2022/lib/directives/componenthost/componenthost.directive.mjs +0 -19
  29. package/esm2022/lib/en.i18n.mjs +0 -29
  30. package/esm2022/lib/i18n-config.service.mjs +0 -4
  31. package/esm2022/lib/i18n.component.mjs +0 -47
  32. package/esm2022/lib/i18n.module.mjs +0 -38
  33. package/esm2022/lib/i18n.pipe.mjs +0 -25
  34. package/esm2022/lib/i18n.service.mjs +0 -56
  35. package/esm2022/lib/interfaces/actionMeta.mjs +0 -2
  36. package/esm2022/lib/interfaces/apimeta.mjs +0 -2
  37. package/esm2022/lib/interfaces/dependencyMeta.mjs +0 -2
  38. package/esm2022/lib/model/bookletWrapper.mjs +0 -9
  39. package/esm2022/lib/model/changeWrapper.mjs +0 -11
  40. package/esm2022/lib/model/errorWrapper.mjs +0 -6
  41. package/esm2022/lib/model/tableWrapper.mjs +0 -20
  42. package/esm2022/lib/nxt-app.component.mjs +0 -22
  43. package/esm2022/lib/nxt-app.module.mjs +0 -399
  44. package/esm2022/lib/nxt-app.service.mjs +0 -14
  45. package/esm2022/lib/pages/booklet/booklet.component.mjs +0 -541
  46. package/esm2022/lib/pages/builder/element/element.component.mjs +0 -193
  47. package/esm2022/lib/pages/builder/form/form.component.mjs +0 -34
  48. package/esm2022/lib/pages/builder/menu/menu.component.mjs +0 -28
  49. package/esm2022/lib/pages/builder/properties/properties.component.mjs +0 -476
  50. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +0 -458
  51. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +0 -2387
  52. package/esm2022/lib/pages/summary-page/summary-page.component.mjs +0 -76
  53. package/esm2022/lib/pipe/date/date.pipe.mjs +0 -28
  54. package/esm2022/lib/pipe/editColumnCheck/edit-column-check.pipe.mjs +0 -28
  55. package/esm2022/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.mjs +0 -20
  56. package/esm2022/lib/pipe/editColumnType/edit-column-type.pipe.mjs +0 -20
  57. package/esm2022/lib/pipe/get-value.pipe.mjs +0 -50
  58. package/esm2022/lib/pipe/search-filter/search-filter.pipe.mjs +0 -39
  59. package/esm2022/lib/pipe/time/time.pipe.mjs +0 -26
  60. package/esm2022/lib/sample.mjs +0 -3715
  61. package/esm2022/lib/services/change.service.mjs +0 -53
  62. package/esm2022/lib/services/data.service.mjs +0 -80
  63. package/esm2022/lib/services/form-builder.service.mjs +0 -160
  64. package/esm2022/lib/services/salesforce.service.mjs +0 -46
  65. package/esm2022/lib/services/shared.service.mjs +0 -100
  66. package/esm2022/lib/services/storage.service.mjs +0 -44
  67. package/esm2022/lib/tam.i18n.mjs +0 -29
  68. package/esm2022/lib/wrapper.mjs +0 -175
  69. package/esm2022/public-api.mjs +0 -22
  70. package/esm2022/rangertechnologies-ngnxt.mjs +0 -5
  71. package/fesm2022/rangertechnologies-ngnxt.mjs +0 -12866
  72. package/fesm2022/rangertechnologies-ngnxt.mjs.map +0 -1
  73. package/index.d.ts +0 -5
  74. package/lib/ar.i18n.d.ts +0 -24
  75. package/lib/components/button/nxt-button.component.d.ts +0 -38
  76. package/lib/components/custom-button/custom-button.component.d.ts +0 -16
  77. package/lib/components/custom-calendar/custom-calendar.component.d.ts +0 -65
  78. package/lib/components/custom-date/custom-date.component.d.ts +0 -18
  79. package/lib/components/custom-date-picker/custom-date-picker.component.d.ts +0 -19
  80. package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +0 -39
  81. package/lib/components/custom-image/custom-image.component.d.ts +0 -13
  82. package/lib/components/custom-input/custom-input.component.d.ts +0 -31
  83. package/lib/components/custom-label/custom-label.component.d.ts +0 -10
  84. package/lib/components/custom-model/custom-model.component.d.ts +0 -19
  85. package/lib/components/custom-radio/custom-radio.component.d.ts +0 -33
  86. package/lib/components/custom-rich-text/custom-rich-text.component.d.ts +0 -29
  87. package/lib/components/custom-table/custom-table.component.d.ts +0 -65
  88. package/lib/components/custom-text-area/custom-text-area.component.d.ts +0 -22
  89. package/lib/components/custom-time/custom-time.component.d.ts +0 -18
  90. package/lib/components/datatable/datatable.component.d.ts +0 -126
  91. package/lib/components/dependent-table/dependent-table.component.d.ts +0 -15
  92. package/lib/components/dropdown-with-flag/dropdown-with-flag.component.d.ts +0 -16
  93. package/lib/components/file-upload/file-upload.component.d.ts +0 -47
  94. package/lib/components/file-view/file-view.component.d.ts +0 -16
  95. package/lib/components/loader/loader.component.d.ts +0 -11
  96. package/lib/components/pagination/pagination.component.d.ts +0 -36
  97. package/lib/components/pick-location/pick-location.component.d.ts +0 -44
  98. package/lib/components/search-box/search-box.component.d.ts +0 -43
  99. package/lib/components/table-appendix/table-appendix.component.d.ts +0 -30
  100. package/lib/directives/componenthost/componenthost.directive.d.ts +0 -8
  101. package/lib/en.i18n.d.ts +0 -24
  102. package/lib/i18n-config.service.d.ts +0 -2
  103. package/lib/i18n.component.d.ts +0 -11
  104. package/lib/i18n.module.d.ts +0 -9
  105. package/lib/i18n.pipe.d.ts +0 -10
  106. package/lib/i18n.service.d.ts +0 -14
  107. package/lib/interfaces/actionMeta.d.ts +0 -5
  108. package/lib/interfaces/apimeta.d.ts +0 -15
  109. package/lib/interfaces/dependencyMeta.d.ts +0 -8
  110. package/lib/model/bookletWrapper.d.ts +0 -5
  111. package/lib/model/changeWrapper.d.ts +0 -10
  112. package/lib/model/errorWrapper.d.ts +0 -5
  113. package/lib/model/tableWrapper.d.ts +0 -18
  114. package/lib/nxt-app.component.d.ts +0 -8
  115. package/lib/nxt-app.module.d.ts +0 -52
  116. package/lib/nxt-app.service.d.ts +0 -6
  117. package/lib/pages/booklet/booklet.component.d.ts +0 -68
  118. package/lib/pages/builder/element/element.component.d.ts +0 -33
  119. package/lib/pages/builder/form/form.component.d.ts +0 -11
  120. package/lib/pages/builder/menu/menu.component.d.ts +0 -10
  121. package/lib/pages/builder/properties/properties.component.d.ts +0 -551
  122. package/lib/pages/questionbook/questionbook.component.d.ts +0 -68
  123. package/lib/pages/questionnaire/questionnaire.component.d.ts +0 -220
  124. package/lib/pages/summary-page/summary-page.component.d.ts +0 -20
  125. package/lib/pipe/date/date.pipe.d.ts +0 -7
  126. package/lib/pipe/editColumnCheck/edit-column-check.pipe.d.ts +0 -7
  127. package/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.d.ts +0 -7
  128. package/lib/pipe/editColumnType/edit-column-type.pipe.d.ts +0 -7
  129. package/lib/pipe/get-value.pipe.d.ts +0 -7
  130. package/lib/pipe/search-filter/search-filter.pipe.d.ts +0 -8
  131. package/lib/pipe/time/time.pipe.d.ts +0 -7
  132. package/lib/sample.d.ts +0 -11
  133. package/lib/services/change.service.d.ts +0 -22
  134. package/lib/services/data.service.d.ts +0 -13
  135. package/lib/services/form-builder.service.d.ts +0 -75
  136. package/lib/services/salesforce.service.d.ts +0 -11
  137. package/lib/services/shared.service.d.ts +0 -15
  138. package/lib/services/storage.service.d.ts +0 -13
  139. package/lib/tam.i18n.d.ts +0 -24
  140. package/lib/wrapper.d.ts +0 -203
  141. package/public-api.d.ts +0 -15
  142. package/rangertechnologies-ngnxt-2.1.105.tgz +0 -0
  143. 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=